BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

난수 취약점의 기술적 원리를 살펴보십시오. EOS.WIN 퀴즈 게임은 어떻게 해킹되었습니까?

PeckShield
特邀专栏作者
2018-11-21 14:46
이 기사는 약 2410자로, 전체를 읽는 데 약 4분이 소요됩니다
PeckShield 보안 팀은 일반적인 EOS.WIN 게임을 샘플로 삼아 해커의 관점에서 이를 복원하고 난수 취약성 공격 뒤에 숨겨진 미스터리를 모두에게 감사하게 했습니다.
AI 요약
펼치기
PeckShield 보안 팀은 일반적인 EOS.WIN 게임을 샘플로 삼아 해커의 관점에서 이를 복원하고 난수 취약성 공격 뒤에 숨겨진 미스터리를 모두에게 감사하게 했습니다.


지난달 블록체인 보안업체 펙실드는 EOSBet, EOSCast, FFgame, EOSDice, EOSWin, MyEosVegas, LuckyGo, EOS Lelego 등 8개 이상의 EOS 퀴즈 게임이 해킹당한 사실을 발견해 공개했다. 총 이익 170,503.5 EOS, 이전 시장 평균 가격인 개당 35위안을 기준으로 해커들은 이러한 게임에서 5,967,662.5위안 이상의 이익을 얻었으며 정상적인 EOS 생태 질서를 심각하게 위협했습니다.


PeckShield 보안 담당자는 다양한 게임의 공격 기능을 추출하여 처음에 다음과 같은 사실을 발견했습니다: 1. 조직적이고 표적화된 공격을 수행하는 공격자 배후에는 다양한 해커 그룹이 있습니다. 3. 유사한 공격은 더 빈번해질 수 있으며 공격 효율성은 점차 개선될 조짐을 보입니다.


대부분의 EOS 퀴즈 게임은 아직 오픈 소스가 아니기 때문에 난수 취약점의 기술적 원리를 명확히 하고 해커가 반복적으로 공격에 성공한 이유를 알아내기 위해. PeckShield 보안 팀은 일반적인 EOS.WIN 게임을 샘플로 삼아 해커의 관점에서 이를 복원하고 난수 취약성 공격 뒤에 숨겨진 미스터리를 모두에게 감사하게 했습니다.


11월 12일 PeckShield 상황 인식 플랫폼의 데이터에 따르면 오전 08:59부터 09:00까지 해커는 1분도 안 되는 시간에 EOS.WIN 게임 계약(eosluckydice)에 대해 총 10건의 공격을 시작했습니다. 9,180 EOS 이상의 수익을 올렸습니다. PeckShield 보안요원은 해커가 어젯밤 22시 46분에 소규모 테스트 공격을 처음으로 실시한 후 165회의 공격을 거쳐 공격 방법을 숙달한 후 다수의 연계 계정을 활용해 9시에 빠른 공격을 가한 것으로 추적 분석했다. 다음날. 게임에서도 난수의 구성 요소로 보다 안전한 두 개의 지연된 트랜잭션 정보를 사용하지만 해커는 여전히 이러한 제한을 교묘하게 우회하여 공격을 성공적으로 수행했습니다.


해킹 원리 및 추첨 과정:


EOS.WIN은 주로 숫자맞추기와 블랙잭 두 가지 게임으로 구성되어 있으며, 숫자맞추기 게임은 사용자가 임의로 숫자를 선택할 수 있으며, 시스템은 사용자가 선택한 크기에 따라 해당 배당률을 부여하고 시스템은 무작위로 숫자를 부여하고, 그 결과가 사용자가 선택한 사이즈와 일치하면 상금으로 간주하고 획득한 금액은 투자한 금액에 배당률을 곱한 금액입니다.


이미지 설명

(그림 1: DICE 게임 추첨 과정)


PeckShield 보안 담당자는 get_random 함수를 통해 계약의 난수를 얻었으며 난수 생성에 영향을 미치는 요소는 다음과 같습니다. txid는 트랜잭션 해시 ID, tapos_block_num 트랜잭션 블록 높이, tapos_block_prefix 블록 ID 접두사, bet_id 글로벌 복권 번호 등


심도 있는 이해를 위해 먼저 대중 과학에 대한 몇 가지 배경 지식을 얻으십시오.


1. 지연된 트랜잭션 및 tapos_block_prefix: 일반적인 난수 생성 방법에서 대부분은 tapos_block_num 및 tapos_block_prefix를 중요한 구성 요소로 사용하고 예측 불가능성을 보장하기 위해 트랜잭션에서 미래 블록의 정보를 지정합니다. 계약에서 지연된 거래를 사용한다면, 즉 거래(예: 복권) 시 지연 간격을 지정하여 미래 정보를 이용하는 것으로 보입니다. 블록(head_block) 정보에 따라 tapos_block_num과 tapos_block_prefix도 결정된다.


2. 트랜잭션 상태 정보 롤백: EOS 트랜잭션에서 트랜잭션의 동작이 비정상적으로 실행되면 전체 트랜잭션 상태가 롤백됩니다. 예를 들어, 자신의 계정에 컨트랙트를 배치하고 이체 영수증을 받을 때마다 예외를 던지면 전체 이체 프로세스가 실패할 수 있으며 잔액을 포함한 모든 상태 정보가 동일하게 유지됩니다.


3. 트랜잭션 해시 ID 계산: 트랜잭션(트랜잭션)에는 여러 작업이 포함될 수 있습니다.모든 작업 매개 변수 정보가 확인되면 앞서 언급한 tapos_block_prefix(ref_block_prefix) 정보와 결합하여 트랜잭션 해시 ID 자체를 계산할 수 있습니다.


요컨대, 공격자는 복권 번호(bet_id)를 이용하여 난수 생성에 참여하고 인라인 호출 실패를 통해 상태 정보 롤백을 일으키고 동시에 여러 계약 계정을 제어하여 트랜잭션 요청을 보냅니다. 동시에 최종 요청을 보장하기 위해 계정은 보상을 얻기 위해 난수 생성에 참여하기 위해 예상되는 복권 일련 번호를 얻을 수 있습니다. EOS.WIN을 예로 들어 공격자는 먼저 5개의 계정을 사용하여 소액의 돈으로 배팅을 하고, 더 높은 확률을 마스터한 후 가장 큰 금액의 마지막 계정을 사용하여 메인 배팅을 하여 더 높은 확률.


구체적인 공격 프로세스는 다음과 같습니다(아래 그림 참조).


1. 공격자는 6개의 공격 컨트랙트를 배치하고 공격 방식을 호출할 때 6개의 계정은 동시에 공격 컨트랙트의 트랜잭션 요청을 보내므로 이러한 요청은 동일한 블록에 그려집니다. 프로세스가 일관적이기 때문에 복권 거래의 거래 tapos_block_num과 tapos_block_prefix는 동일하며 bet_id만 다를 수 있습니다.


2. 공격자의 첫 5개 공격 계약은 복권 알림을 받을 때 현재 bet_id를 얻을 수 있으며, 이 id가 최종 계정이 상금을 받을 수 있는지 여부를 판단합니다.


1) 계산 결과 마지막 계정이 당첨되지 않은 것으로 나타나면 이 계정의 복권 알림이 정상적으로 실행되어 다음 계정이 새로운 복권 번호를 사용하여 난수를 계산합니다.


이미지 설명

 

(그림 2: 공격자의 다중 계정 공격 과정)



당첨 확률:


위의 추첨 및 공격 과정에서 계정이 페인트로 추가될 때마다 최종 주 공격 계정의 당첨 여부를 미리 계산할 수 있는 추가 기회가 있음을 알 수 있습니다. 추측 수에 따라 20을 선택하여 배당률을 5배로 계산하면 6개의 계정은 승리 확률을 약 74%로 증가시킵니다. 여전히 모든 공격이 이길 것이라는 보장은 없지만 공격자는 10에서 6번 이길 수 있습니다. 이미 초고속 공격이며 정상적인 게임 승률의 질서를 어지럽힙니다.


안전 조언:


EOS.Win과 같은 게임에서 임의의 숫자는 공격자가 제어할 수 있는 변수, 즉 게임 복권 번호(bet_id)의 영향을 받기 때문에 PeckShield는 개발자가 공격자가 제어할 수 있는 변수를 제거할 것을 권장합니다. DApp의 난수 생성 게임 로또 번호 등의 변수를 동일한 트랜잭션에서 복권 동작과 알림 동작(수신)을 회피하면서 트랜잭션 상태의 롤백을 방지하여 해커의 공격을 방지합니다.




Odaily 공식 커뮤니티에 가입하세요