
편집자 주: 이 기사는 SECBIT Lab(저자: SECBIT Lab)에서 승인을 받아 게시한 것입니다.
베이징 시간으로 9월 24일 11:32에 Fomo3D 2차 라운드의 최종 상금은 3,264.668 Ether의 보너스와 함께 주소 0x18a0으로 획득되었습니다. SECBIT 실험실 분석에 따르면 이번 게임의 승리 기술은 해커의 "거래 차단" 공격인 첫 번째 라운드의 기술과 정확히 동일합니다.
지난 1차전과 비교했을 때 이번 1차전은 33일 동안 진행됐는데, 출전 자금이나 기간, 최종 대상 금액 등에서 전작에 비해 대폭 축소됐다.
두 달 전을 돌이켜보면 Fomo3D의 1차 게임 참가 자금은 한때 40,000 Ether를 넘었고, 게임 1차 라운드의 최종 상금은 10,000 Ether를 넘었습니다.
그러나 9월 이후 전반적인 시장 침체와 함께 Fomo3D와 유사한 게임은 거의 자취를 감췄습니다. Fomo3D 및 Last Winner로 대표되는 여러 활성 게임의 인기가 크게 떨어졌습니다. 아무도 게임의 다음 라운드를 시작하지 않기 때문에 유사한 계약의 대부분이 보류 중입니다.
그래서 지금까지 Fomo 3D 시상 2차전이 진행되었고, 해커들이 상을 받기 위한 서스펜스가 거의 없었고, 게임의 인기는 더 이상 예전 같지 않습니다.
SECBIT 연구소는 이러한 변화에 대해 분석을 진행했으며, 분석 결과 게임의 에어드랍 메커니즘[1]과 최근 지속적으로 폭로된 '트랜잭션 차단' 공격[2]의 허점[2]이 존재하는 것으로 나타났습니다. 새로운 높이로 밀려 났지만 본질적으로 게임 쇠퇴의 주된 이유입니다.
번영 vs 멋진?
예전에는 얼마나 더웠는지, 지금은 얼마나 추운지
게임 인기도 파노라마
이미지 설명
그림 1: Fomo3D 플레이어 참여 및 진입 자금
위의 그림은 "Fomo3D 플레이어 참여 및 자금 조달 상태"를 보여줍니다. 빨간색은 게임에 참여하기 위해 계약을 호출한 사람의 수를 나타내고 파란색은 게임 계약에 들어가는 자금의 양을 나타냅니다. 데이터 곡선의 최고봉은 7월 20일과 7월 21일에 해당하는 그래프의 왼쪽에 나타납니다. 지난 이틀 동안 많은 언론이 경이로운 게임 Fomo3D를 열광적으로 보도했습니다. 당시 많은 플레이어들이 이를 따라 게임에 참여했고, 게임 계약 참여 및 참여 자금이 최고조에 달해 참여 자금이 40,000 Ether를 돌파했으며, 최대 참여 횟수는 18,000회를 넘어섰습니다. 곡선의 최고점은 Fomo3D 게임의 첫 번째 라운드의 최고점에 해당합니다.
이미지 설명
그림 2: 최종 우승자 플레이어 참여 및 참가 자금
마찬가지로 위의 그래프는 "마지막 승자 플레이어 참여 대 자금 상태"를 보여줍니다. Last Winner는 각 라운드가 더 빨리 끝나도록 게임 시간 제한을 낮추기 위해 Fomo3D 게임용으로 부분적으로 수정되었습니다. 첫 번째 정점은 8월 8일에 발생했고 그 이후로 여러 지역 정점이 있어 다른 라운드의 시작을 나타내지만 분명히 통화 수와 입학 자금이 한 라운드만큼 좋지 않습니다.
상금 풀 기금
이미지 설명
그림 3: Fomo3D 계약의 Ether 잔액 변화
이미지 설명
그림 4: 최종 승자 계약의 Ether 잔액 변화
최종 상품
8월 17일 SECBIT 연구실과Anchain.ai팀은 대량의 보너스를 얻기 위해 에어드랍 메커니즘의 허점을 악용하는 해커 팀 BAPT-LW20을 공동으로 공개했습니다. 같은 날, Last Winner 게임의 1라운드가 종료되었고, 최종 상금의 승자 역시 BAPT-LW20 팀이었습니다. 통계에 따르면 해커팀은 Last Winner의 1라운드에서 총 12,948 Ether를 획득했습니다.
Last Winner가 완료한 첫 9라운드 게임에서 해커 갱이 보유한 계정 0x5167은 총 4개의 최종 상품을 획득했습니다.
게임의 각 라운드의 최종 잭팟 금액과 지속 시간을 자세히 살펴보면 보너스 금액이 매우 빠르게 감소하고 각 라운드가 더 빨리 끝나는 것을 발견하는 것이 어렵지 않습니다. 이것은 위의 게임 참여 데이터 그래프와 잘 일치합니다.
반영하다
반영하다
메커니즘 허점은 게임 쇠퇴의 주요 원인입니다.
이미지 설명
그림 5: 공격받는 Fomo3D 게임 계약
위 사진은 "Fomo3D 게임 컨트랙트가 공격당하는 모습"을 보여줍니다.게임 1라운드의 정점 전후와 2라운드 시작 이후 일부 해커들이 에어드랍 취약점을 악용해 공격해 높은 수익을 챙겼습니다. 1차전이 끝나고 2차전 카운트다운이 막바지에 이르자 일부 해커들은 막대한 최종 상금을 노리기 위해 미친 듯이 '트랜잭션 차단' 공격을 시도했다.
이미지 설명
그림 6: Last Winner 게임 계약에 대한 공격
위 사진은 "마지막 승자 게임 컨트랙트가 공격당하고 있다" Fomo3D와 유사하게 게임이 뜨거울 때 해킹 공격의 규모가 매우 큽니다.
"트랜잭션 차단" 공격
Fomo3D 게임은 영리하게 링크를 설계했으며, 게임에 마지막으로 참여하는 사람은 상금 풀에서 Ether의 절반을 보상으로 받게 됩니다. 개발자는 이 디자인을 통해 많은 수의 플레이어가 계속해서 경기장에 입장하고 싶어하며 누구나 "행운의 사람"이 될 수 있습니다. 하지만 해커들이 게임 종료 속도를 높이고 수혜자가 되기 위해 '차단 거래' 공격[5]을 사용한 이후, 플레이어를 끌어들이는 이 디자인은 깨졌습니다. 따라서 나중에 필드에 들어가는 일반 플레이어는 컷 부추가 될 수 있으며 자연스럽게 플레이어를 참여시키기 어렵습니다.
"에어드롭" 공격
최종 상품 외에도 게임 내에서 에어드롭 보상 메커니즘도 설계되어 플레이어는 일정 확률로 에어드롭 보상을 받을 수 있으며 이는 플레이어를 참여시키는 중요한 이유이기도 합니다. 그러나 에어드랍 메커니즘의 난수 허점으로 인해 해커는 특정 스킬을 통해 높은 확률로 계속해서 보상을 빼앗을 수 있으며 일반 플레이어가 성공하는 것은 거의 불가능합니다. 이러한 에어드랍 보상의 공정성도 문제가 되었습니다.
대책 및 전망
dApp은 아직 갈 길이 멀다
이러한 대히트 게임은 분명 dApp 게임 개발 역사에서 중요한 이정표가 될 것입니다. 그러나 과도하게 빠른 우울증은 우리에게 많은 반성을 가져다 주기도 했습니다. Fomo3D와 유사한 게임 또는 모든 dApp 게임의 경우 아직 갈 길이 멉니다. 적시에 해커의 공격으로부터 교훈을 얻고 방어적 조치를 취하는 것이 필요하다.
"에어드롭 취약점" 공격은 Fomo3D 유사 게임에서 가장 자주 공격받는 취약점입니다. 해커는 계속해서 낮은 비용으로 상금 풀에서 자금을 확보할 수 있습니다.
한편으로 Fomo3D 게임의 에어드롭 메커니즘은 난수를 사용하여 당첨 확률을 제어하지만 난수의 출처는 트랜잭션 개시자의 주소와 같은 블록 또는 트랜잭션의 일부 특정 공개 매개변수이므로 블록 타임스탬프, 블록 난이도 등 모든 이더리움 스마트 계약은 난수를 쉽게 예측할 수 있습니다[6]. 따라서 난수와 관련된 시나리오에서 SECBIT Labs는 개발자가 특히 주의하거나 특정 수단을 사용하여 임의 소스 예측의 어려움을 증가시킬 것을 권장합니다. 예를 들어 개발자는 여러 제출 및 재공개를 사용하거나 여러 블록의 그리기를 지연하여 난수가 예측되는 위험을 피할 수 있습니다.
한편 계약 자동화 공격을 방지하기 위해 Fomo3D 게임 계약은 발신자가 일반 계정인지 계약 계정인지 감지하지만 감지 방법의 허점으로 인해 해커가 일부 기술을 사용하여 감지를 우회할 수 있습니다. 따라서 프로젝트 당사자가 dApp 게임에 참여하는 플레이어의 신원을 감지할 때 보다 신뢰할 수 있는 방법을 채택해야 합니다. 예를 들어 트랜잭션의 원래 개시자(tx.origin)와 현재 계약의 호출자(msg.sender)가 동일한 주소인지 여부를 판단합니다.
위에서 언급한 "거래 차단" 공격은 Fomo3D와 유사한 게임이 직면한 또 다른 주요 과제입니다.
해커들은 높은 수수료를 이용해 채굴자들을 먼저 패키징하도록 유인하고, 컨트랙트를 이용해 자동으로 게임의 상태를 판단해 공격 여부를 판단하는 근거로 삼는다. 해커는 결국 저렴한 비용으로 블록을 차단할 수 있고, 각 블록에 소수의 트랜잭션만 패킹(다른 사람의 트랜잭션이 패킹될 가능성 감소)하여 게임을 빠르게 종료하고 최종 상금을 받을 확률을 높입니다.
사실 이 문제는 Fomo3D와 같은 게임을 위협하는 것만은 아닙니다. 이와 유사한 모든 메커니즘, 즉 플레이어가 특정 기간 내에 일종의 경쟁 작업을 완료하기 위해 경쟁하도록 요구하는 스마트 계약은 이로 인해 위협을 받습니다. 이 문제를 방지하기 위해 SECBIT Labs는 게임 개발자가 게임 메커니즘에서 시작하여 게임의 최종 승리(거대한 상금 획득)와 카운트다운 종료(마지막 트랜잭션이 패키지화됨) 사이의 불가피한 연결을 끊을 것을 권장합니다. 해커의 공격 이익 확률과 공격 의지가 최소화됩니다.
Fomo3D와 유사한 게임의 해커는 이더리움 합의 프로토콜의 기능을 활용하여 게임 메커니즘의 허점을 찾고 공격을 시작합니다. 이것은 또한 dApp 응용 프로그램의 메커니즘 설계가 매우 복잡한 프로젝트라는 것을 상기시켜 주며, 기술 자체 외에도 플랫폼의 외부 환경 및 게임 이론과 같은 문제가 포함되어 있습니다. 해커의 공격을 받습니다. 따라서 dApp 프로젝트는 메커니즘 설계 프로세스에서 특히 주의해야 합니다.
Ambi Labs의 설립자인 Guo Yu는 다음과 같이 말했습니다. 기술과 부의 교차점에서 해커는 항상 가장 민감한 후각을 유지합니다. 해커의 공격은 우리에게 반성과 개선의 기회를 많이 주었고, 이는 애플리케이션의 지속적인 발전을 위한 촉매이기도 합니다.
참조
참조
[1] Pwning Fomo3D Revealed: Iterative, Pre-Calculated Contract Creation For Airdrop Prizes!,
https://peckshield.com/2018/07/24/fomo3d/
[2] 스마트 컨트랙트 사상 최대 규모의 공격 방식이 폭로되고, 해커집단의 범행 내역이 집계됐다.
https://zhuanlan.zhihu.com/p/42318584
[3] Fomo3D 천만상 수상자의 "특수 공격 스킬" 가장 완전하게 공개
https://zhuanlan.zhihu.com/p/42742004
[4] Péter Szilágyi가 제안한 Airdrop 익스플로잇 POC,
https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/, 2018/07/23
[5] 블록 리듬: Fomo3D 상을 받기 위해 80,000건의 거래가 이더리움 네트워크를 "차단"했습니까?
https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPw
[6] Predicting Random Numbers in Ethereum Smart Contracts
https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620