2024년 1월 16일, Socket Tech는 공격을 받아 약 330만 달러의 손실을 입었습니다. 공격자는 소켓 계약의 데이터 검증 링크에 있는 취약점을 이용하여 악의적인 데이터 입력을 통해 승인된 계약의 사용자 자금을 탈취했습니다. 이 공격으로 인해 총 230개 주소에 손실이 발생했으며 단일 주소 손실액은 약 656,000달러에 달했습니다.
배경 소개
소켓은 체인 간 안전하고 효율적인 데이터 및 자산 전송을 제공하는 상호 운용성 프로토콜입니다. 소켓 게이트웨이 계약은 모든 자산 브릿지와 DEX가 단일 메타 브릿지로 수렴되고 비용, 대기 시간 또는 보안 라우팅과 같은 사용자 선호도에 따라 최상의 트랜잭션을 선택하는 소켓 유동성 계층과의 모든 상호 작용을 위한 액세스 포인트입니다.
해커 공격 3일 전, 소켓 계약 관리자는 시스템에 새로운 경로를 추가하기 위해 addRoute 명령을 실행했습니다. 라우팅을 추가하는 목적은 소켓 게이트웨이의 기능을 확장하는 것이었지만 실수로 심각한 취약점이 발생했습니다.
아래 그림은 계약관리자를 통해 추가된 라우팅 기록입니다.
이벤트 요약
- 1. 베이징 시간 1월 16일 15시 3분경 공격자의 지갑으로 공격에 사용된 자금이 이체되었으며, 시간 분석에 따르면 해당 자금은 0xe620에서 왔으며 Tornado Cash에서 인출된 10 BNB와 관련된 것으로 나타났습니다.
- 2. 이 자금은 소켓 취약점을 악용하기 위한 두 가지 계약을 생성하고 실행하는 데 사용되었습니다. 첫 번째 계약은 SocketGateway가 승인한 주소의 USDC를 대상으로 했습니다(아래 스크린샷). 127명의 피해자가 약 250만 달러를 사기당했습니다.
- 3. 다음으로 두 번째 컨트랙트는 피해자 주소의 WETH, USDT, WBTC, DAI, MATIC을 타겟으로 합니다. 그 결과, 또 다른 104명의 피해자가 다음과 같은 자산을 잃었습니다.
- 42.47526105 WETH
- 347,005.65USDT
- 2.88962154 WBTC
- 13,821.01 다이
- 165,356.99 매틱
- 4. 공격자는 USDC와 USDT를 ETH로 전환했습니다.
취약점 소스
공격자가 악용하는 취약점은 새로 추가된 라우팅 주소인 RouteAddress의 PerformAction 함수에 존재합니다.
이 주소의 PerformAction 함수의 원래 기능은 Wrapping 및 Unwrapping 기능을 보조하는 것입니다. 그러나 이 함수에는 사용자가 검증 없이 .call()의 swapExtraData를 통해 외부 데이터를 직접 호출한다는 치명적인 취약점이 나타난다. 이는 공격자가 임의의 악성 기능을 실행할 수 있다는 것을 의미한다.
이 사건에서 공격자는 transferFrom 함수를 트리거하는 악의적인 swapExtraData 입력을 제작했습니다. 악의적인 호출은 SocketGateway 계약에 대한 사용자의 권한을 악용하여 자금을 훔쳤습니다.
컨트랙트는 잔액 확인을 통해 fromToken.call()이 호출된 후 사용자의 잔액이 올바르게 변경되도록 보장하지만, 이 함수는 공격자가 금액을 0으로 설정하는 상황을 고려하지 않습니다.
공격 프로세스 복원
- 1. 공격자는 공격 계약을 이용하여 Socket Gateway 계약에서 0x00000196()을 호출했습니다.
- 2. fallback()은 16진수 서명 196을 사용하여 취약한 라우팅 주소 계약(routerAddress)을 호출합니다.
- 3. 아래 스크린샷에서는 공격자가 사용한 가짜 입력을 볼 수 있으며, Swapping 숫자는 모두 0입니다.
- 4. 다음으로 Swap을 수행하기 위해 WrappedTokenSwapperImpl.performAction()이 호출됩니다.
- 5. 가짜 SwapExtraData는 아무런 검증 없이 fromToken(WETH)에 의해 승인되고 실행됩니다.
- 5. 가짜 SwapExtraData는 아무런 검증 없이 fromToken(WETH)에 의해 승인되고 실행됩니다.
- 6. 공격자는 피해자의 자산이 소진될 때까지 위의 과정을 반복한다. 악성 트랜잭션이 나타난 후 Socket은 신속하게 비활성화Route를 호출하여 이전에 취약한 경로를 차단하고 더 넓은 범위의 공격을 방지했습니다.
- 7. 소켓은 1월 23일 1,032ETH를 회수했다고 발표했고, 25일 모든 손실을 전액 보상하겠다고 발표했다. 이 사건은 해결되었습니다.
이벤트 요약
무제한 사용자 인증을 사용하는 라우팅 계약에서는 악의적인 통화 데이터 공격이 드물지 않습니다. 이전의 유사한 공격에는 Dexible과 Hector Bridge가 포함됩니다. 2023년 2월 17일, 탈중앙화 거래소 Dexible이 공격을 받아 150만 달러 이상의 손실이 발생했습니다. 공격자는 사용자 자산을 탈취하기 위해 Dexible의 fill() 함수에 악성 호출 데이터를 입력합니다. 2023년 6월 2일, Hector 네트워크 프로토콜이 공격을 받았습니다. 공격자는 가짜 USDC 계약을 배포하고 악성 통화 데이터를 통해 피해자 계약에서 실제 USDC 652,000개를 이체했습니다.
블록체인 집계 플랫폼은 일반적으로 일련의 브리지 및 라우팅 계약을 캡슐화하여 유동성을 개선하고 손실을 줄입니다. 그러나 이 복잡한 캡슐화로 인해 더 많은 보안 문제가 발생합니다. 소켓 사건이 해결될 수 있게 되어 기쁘게 생각합니다. CertiK는 플랫폼에 대한 포괄적인 감사 및 탐지를 제공하고, 다양한 집합 위험을 줄이고, 커뮤니티 신뢰와 전체 산업의 보안 수준을 향상시키기 위해 계속해서 노력할 것입니다.
모든 댓글