2023년 4월 9일, SushiSwap은 검증되지 않은 외부 파라미터로 인한 익스플로잇의 표적이 되었습니다. 총 손실액은 약 330만 달러입니다.
상당한 사용자 기반을 보유한 이더리움의 선도적인 프로토콜로서, 이러한 최상위 프로토콜조차도 컨트랙트 업그레이드 중에 심각한 새로운 문제가 발생할 수 있습니다. 이는 보안이 항상 최우선 순위여야 한다는 것을 DeFi 커뮤니티에 상기시켜 줍니다. 더욱이, 이 보안 사고는 화이트햇 보안 연구자의 구조 시도로 인해 촉발되어 커뮤니티 내에서 상당한 논쟁을 불러일으켰으며, 우리는 이 사고를 2023년 10대 보안 사고 중 하나로 선정하여 간략하게 소개합니다.
배경
SushiSwap
저명한 DEX인 SushiSwap은 Uniswap을 대상으로 뱀파이어 공격을 감행하여 엄청난 성공을 거두었습니다. 최고조에 달했을 때 TVL은 80억 달러에 달했으며, 현재도 약 4억 달러를 유지하고 있습니다.
승인(Approval)
요약하자면: 특정 토큰을 지갑에서 접근하고 전송할 수 있도록 컨트랙트에 권한을 부여하는 것입니다.
편의를 위해 많은 컨트랙트는 기본적으로 무제한 승인을 요청합니다. 보안 위험을 우려하는 많은 사용자들은 다양한 프로토콜에 소액만 예치합니다. 그러나 이러한 사용자들은 프로토콜에 무제한 자금 승인을 부여하며, 프로토콜이 침해될 경우 계정에서 승인된 모든 토큰이 손실될 수 있습니다.
취약점
검증되지 않은 외부 파라미터
RouteProcessor2 컨트랙트의 processRoute()는 사용자가 호출 흐름(파라미터 route)을 완전히 제어할 수 있도록 허용합니다.
그리고 uniswapV3SwapCallback()에서 safeTransferFrom()의 파라미터 from은 사용자가 제공한 route에서 디코딩됩니다.
결과적으로, RouteProcessor2 컨트랙트를 승인한 사용자들은 자산을 잃었습니다.
공격 과정
이 사고에는 여러 공격 트랜잭션이 포함되었지만, 첫 번째 공격 트랜잭션을 예시로 사용하겠습니다. 트랜잭션: 0x43ff7e01423044cfb501b4fe9ef1386725c0ddc117dadd6e6620cb68bdeaf4f9
- 공격자는 신중하게 구성된 긴 인수
route를 사용하여 취약한 RouteProcessor2 컨트랙트의processRoute()를 호출했습니다.
processRouteInternal()은 사용자가 제공한 route를 기반으로InputStream을 생성합니다.
- 트랜잭션은 공격자의
route를 따라swapUniV3()에 도달했습니다.pool이stream에서 디코딩된다는 점에 주목하세요. 이는 공격자가swap()할pool을 제어하여 이를lastCalledPool로 설정했음을 의미합니다.
- 이로 인해 공격자가 배포한 악성 컨트랙트가 호출되었으며, 공격자는 단순히 악성
calldata를 전달하여 RouteProcessor2의uniswapV3SwapCallback()을 콜백했습니다. - uniswapV3SwapCallback()은
msg.sender검사를 요구하지만,lastCalledPool이 이미 악성 컨트랙트로 설정되어 있었기 때문에 해커는 이 검사를 우회했습니다. 중요한 것은,safeTransferFrom()의 파라미터from이 공격자가 구성한calldata에서 디코딩되었다는 점입니다.
- 피해자의 자산이 공격자가 배포한 악성 컨트랙트로 전송됩니다.
논란이 된 화이트햇 구조 시도
@trust__90이라는 사용자명의 화이트햇이 이 문제를 발견하고 자금 구조를 시도했지만, 이 구조 시도는 오히려 재앙을 초래했다는 점을 언급할 필요가 있습니다.
- 비공개 RPC 대신 멤풀을 통해 트랜잭션을 브로드캐스트했습니다.
- 위험에 처한 모든 자금 대신 100 이더만 구조하려 했습니다.
이로 인해 MEV 봇과 다른 공격자들이 여러 모방 트랜잭션을 실행할 수 있는 문이 열렸으며, 결과적으로 대부분의 자금이 유출되었습니다. 이러한 사건 이후, @trust__90은 비난을 받았으며 자신의 행동을 변호하려 했습니다.
People are saying all kinds of terrible things while being uninformed so allow me to share more details.
— Trust (@trust__90) April 10, 2023
I've initiated coordination privately with Immunefi officials 3 hours before the white-hack. 90 minutes later, I realized the asset is currently used by the frontend and…
BlockSec의 구조
이 공격에서 우리도 100 이더를 구조하여 피해자인 0xsifu에게 자금을 반환했습니다.
현재까지 우리는 실제 해킹 시도 20건 이상을 성공적으로 저지하고 1,400만 달러 이상의 자산을 구조했습니다.Hey, @0xsifu We have successfully blocked an attack transaction and rescued 100 Ether. Please get in touch with us.
— BlockSec (@BlockSecTeam) April 9, 2023
보안 권고사항
업그레이드는 항상 감사를 받아야 합니다
이는 DeFi 커뮤니티에 보안이 항상 최우선 순위여야 한다는 것을 상기시켜 줍니다. 감사가 보안을 보장하지는 않지만, 감사의 부재는 분명히 안전을 보장하지 않습니다.
승인 문제에 대한 완화 방법
2023년에는 승인 공격과 관련된 수많은 사고가 발생했으며, 우리는 이 기회를 통해 승인 관리의 중요성을 다시 한번 강조합니다. 보안적 실천 방법은 필요한 금액만 승인하거나, 편의성이 우선시된다면 필요한 금액보다 약간 더 많은 금액을 승인하는 것입니다.
BlockSec의 MetaSuites는 편리한 승인 진단 기능을 제공합니다. 또한 Revoke Cash와 같은 도구를 사용하여 정기적으로 승인 상태를 확인할 수 있습니다.
모니터링 및 자동 대응 메커니즘 도입
이더리움은 어두운 숲이며, DeFi 커뮤니티의 모든 구성원은 보안 전문가조차도 다양한 위험과 도전에 직면합니다. 2023년에 우리는 공격을 모니터링하는 것뿐만 아니라 실시간으로 위협을 적극적으로 차단하도록 설계된 업계 최초의 자동화 대응 시스템인 Phalcon Security를 출시했습니다. Phalcon의 실전에서 검증된 역량은 실제 해킹 시도 20건 이상을 성공적으로 저지하고 1,400만 달러 이상의 자산을 구조함으로써 그 효과를 입증했습니다. 이 혁신은 모든 이해관계자들이 자신의 투자를 보호하기 위한 사전 예방 조치가 마련되어 있다는 것을 알고 더욱 안심하고 밤을 보낼 수 있도록 보장합니다.
이 시리즈의 다른 글 읽기:
- 도입부: 2023년 10대 "주목할 만한" 보안 사고
- #1: Flashbots Relay의 취약점을 악용한 MEV 봇 수확
- #2: Euler Finance 사고: 2023년 최대 규모의 해킹
- #3: KyberSwap 사고: 극도로 정교한 계산으로 반올림 오류를 능숙하게 악용
- #4: Curve 사고: 컴파일러 오류로 인해 정상적인 소스 코드에서 잘못된 바이트코드 생성
- #5: Platypus Finance: 행운으로 세 번의 공격에서 살아남다
- #6: Hundred Finance 사고: 취약한 포크 프로토콜에서 정밀도 관련 익스플로잇의 물결을 촉발
- #7: ParaSpace 사고: 업계에서 가장 중요한 공격을 저지하기 위한 시간과의 경쟁
- #9: MEV 봇 0xd61492: 독창적인 익스플로잇에서 포식자에서 먹잇감으로
- #10: ThirdWeb 사고: 신뢰할 수 있는 모듈 간의 비호환성으로 인한 취약점 노출



