3월 19일 이른 아침, 일부 커뮤니티 사용자는 Filecoin 메인넷에 이중 지출의 위험이 있다고 보고했습니다.Binance 및 OKex와 같은 거래소는 Filecoin 메인넷 토큰 FIL의 충전 기능을 종료했습니다.Cobo Custody도 즉시 충전을 중단했습니다. 그리고 동전을 인출하십시오.
보조 제목
Filecoin "이중 지출" 이야기
Filfox 및 FileStar의 Filecoin 채굴자로부터의 피드백에 따르면, 수요일 바이낸스는 수백만 달러 규모의 FIL 이중 지불 재충전 공격을 받았습니다.
그 이유는 61,000 FIL(약 460만 달러)의 거래가 기록되는 데 시간이 너무 오래 걸려 Filfox와 FileStar 채굴자들이 속도를 높이기 위해 RBF 거래를 시작했기 때문입니다. RBF 거래로 인해 바이낸스 계정에 두 개의 입금이 이루어졌고 최종적으로 120,000 FIL이 입금되었습니다. 이후 Filfox 및 FileStar 개발자는 Filecoin의 RPC 코드에 "심각한 허점"이 있다고 응답했습니다. 이 취약점으로 인해 Binance는 충돌하는 두 거래를 확인한 후 동시에 입금하기로 결정했습니다.
FilFox 및 FileStar 개발자는 가능한 한 빨리 Binance에 연락했으며 가능한 한 빨리 Filecoin 관계자에게 알렸습니다.
보조 제목
기술 세부 사항 검토
거래소 및 중앙 지갑과 같은 중앙 집중 관리 기관은 체인의 전송 행동에 따라 사용자에게 신용을 부여하므로 체인의 전송 행동을 효율적이고 정확하며 시기 적절하게 분석하는 방법이 매우 중요합니다.블록의 모든 트랜잭션 ID를 획득한 다음 트랜잭션 ID를 기반으로 해당 트랜잭션 내용 및 트랜잭션 실행 결과.
Filecoin 로터스 노드는 체인에서 트랜잭션을 얻기 위한 여러 API를 제공합니다.예를 들어 ChainGetBlockMessages는 지정된 블록의 모든 트랜잭션 내용을 얻을 수 있으며 StateGetReceipt는 지정된 트랜잭션 ID에 해당하는 실행 결과를 얻을 수 있습니다.이번 공격한 거래소는 이 방법을 채택했습니다. 2개의 API를 사용하여 체인 상에서의 이체 행태를 분석하고 이를 기반으로 사용자의 계정을 입력합니다.
그러나 그들은 StateGetReceipt 인터페이스가 기존의 논리적 사고, 즉 지정된 트랜잭션 ID의 실행 결과를 얻을 때 트랜잭션이 RBF(수수료로 대체)로 대체된 경우, 최종 RBF 성공을 반환합니다. 해당 트랜잭션의 실행 결과이며 반환 값에는 이것이 RBF 이후 트랜잭션의 실행 결과라는 표시가 없습니다.
공격자가 먼저 TX1을 보내고 해당 트랜잭션 ID가 TXID1이고 공격자가 TX1에서 RBF를 수행하여 TX2를 생성하고 해당 트랜잭션 ID가 TXID2이고 마지막으로 TX2가 성공적으로 체인에 업로드되었다고 가정합니다. 이때 StateGetReceipt를 통해 각각 TXID1과 TXID2를 쿼리하면 둘 다 올바른 실행 결과를 얻을 수 있습니다.
공격이 발생한 후 공식 Filecoin 개발자는 API에 대한 보충 설명을 만들고 StateGetReceipt의 반환 논리를 명확히했으며 v1 버전 이후 이 API를 폐기할 예정입니다.
https://github.com/filecoin-project/lotus/pull/5838/files
Cobo Custody 기술 팀은 Filecoin에 연결하는 과정에서 위의 문제를 발견했습니다. 따라서 ChainGetBlockMessages 및 StateGetReceipt를 사용하여 체인에서 전송 동작을 얻는 대신 ChainGetParentMessages 및 ChainGetParentReceipts를 사용하여 체인에 성공적으로 업로드된 트랜잭션을 얻습니다. 이중 지출 재충전의 위험을 회피하므로 이러한 이중 지출 재충전 공격의 영향을 받지 않습니다.
Cobo Custody 기술 팀은 ChainGetParentMessages 및 ChainGetParentReceipts를 사용하는 과정에서 로터스 노드의 일부 반환 값이 기존의 논리 사고와 매우 일치하지 않는다는 것을 발견했습니다. 예를 들어 빈 블록 처리에 몇 가지 문제가 있습니다. Cobo Custody 기술 팀은 이를 적절하게 처리했으며, 이로써 다른 이중 지출 재충전 공격을 방지하기 위해 다른 중앙 집중식 보관 기관에 관련 도킹 코드를 주의 깊게 확인하도록 상기시킵니다.
이중 지출은 이전 거래의 토큰을 사용하여 거래를 다시 수행하여 잘못된 거래를 초래하는 것입니다.
2018년 비트코인골드(BTG)는 채굴자에게 악의적인 공격을 받았는데, 채굴자는 일시적으로 BTG 블록체인을 제어하고 거래소에 재충전한 후 빠르게 코인을 인출한 후 블록을 되돌려 이중지불 공격을 성공적으로 구현했다. 공격자는 1,860만 달러 상당의 388,200 BTG 이상을 훔쳤으며 블록체인 역사상 가장 유명한 이중 지출 공격 중 하나이기도 했습니다.
