Cobo Labs: 암호화 산업 1월 전형적인 보안 사건 정리

CoboLabs
2022-02-17 12:09:42
수집
Multichain, RariCapital, Qubit 등의 프로젝트에서 도난 교훈 해석.

저자: Cobo Labs

이 글은 Cobo 블록체인 보안 연구팀이 제공한 것으로, 팀원들은 유명한 보안 연구소 출신으로 다년간의 사이버 보안 및 취약점 탐지 경험을 가지고 있으며, 구글, 마이크로소프트와 협력하여 고위험 취약점을 처리한 바 있습니다. 이들은 구글, 마이크로소프트 등으로부터 감사장을 받았으며, 마이크로소프트 MSRC에서 가장 가치 있는 보안 연구원 Top 목록에서 뛰어난 성과를 거두었습니다. 현재 팀은 스마트 계약 보안, DeFi 보안 등 분야에 집중하고 있으며, 최전선 블록체인 보안 기술을 연구하고 공유하고 있습니다.

크로스체인 브리지 Multichain 취약점

1월 18일, 유명한 크로스체인 브리지 Multichain(구 Anyswap)은 WETH, PERI, OMT, WBNB, MATIC, AVAX 총 6종의 토큰에 중대한 영향을 미치는 취약점을 발견하고 수정했습니다. Multichain Router에 위의 토큰을 승인한 모든 사용자가 영향을 받으며, 공격자는 취약점을 이용해 사용자가 승인한 토큰을 직접 전송할 수 있습니다. 19일 공식 발표에 따르면, 일부 사용자가 적시에 승인을 취소하지 않아 약 445 WETH가 공격자에게 도난당했습니다.

취약점은 AnyswapV4Router 계약의 anySwapOutUnderlyingWithPermit 함수에서 발생했으며, 함수가 Token 매개변수의 유효성을 검증하지 않아 공격자가 위조된 Token 계약을 전달하여 원래 공식 AnyswapV1ERC20 Token을 대체할 수 있었습니다.

한편, WETH 등 토큰 계약은 permit 메서드를 구현하지 않았지만 fallback 함수를 구현했기 때문에 이후 permit 호출 시 revert가 발생하지 않고 계속 성공적으로 실행될 수 있었습니다. 결국 공격자는 피해자가 AnyswapV4Router 계약에 승인한 Token을 도난당할 수 있었습니다.


Cobo 코멘트

일반 사용자에게는 Token 무한 승인(ERC20 Infinite Approval)으로 인한 위험에 특별히 주의해야 합니다. 가능한 한 사용되는 Token 수량만 승인하고 기본 무한 승인을 사용하지 않아 가스를 절약하면서 원금을 잃지 않도록 해야 합니다. 이미 있는 무한 승인은 즉시 취소해야 하며, 계좌의 승인 상태를 확인하려면 Etherscan의 도구 https://etherscan.io/tokenapprovalchecker를 사용할 수 있습니다.

참고자료

https://github.com/W2Ning/AnyswapVulPoc

https://theblockbeats.info/news/28774

https://hackernoon.com/erc20-infinite-approval-a-battle-between-convenience-and-security-lk60350r

BSC의 DEX Crosswise 공격

1월 18일, BSC의 DEX 프로젝트 Crosswise가 공격을 받아 약 30만 달러의 손실을 입었으며, CRSS Token의 가격이 급락했습니다.

문제는 MasterChef 계약의 setTrustedForwarder 함수가 권한 검증을 제대로 수행하지 않았기 때문입니다. 공격자가 TrustedForwarder를 수정한 후, msg.sender를 위조할 수 있는 효과를 얻어 MasterChef의 owner 권한을 직접 획득할 수 있었습니다. 이후 owner 권한을 이용해 set 함수를 호출하여 strategy를 공격자의 악의적인 매개변수 0xccddce9f0e241a5ea0e76465c59e9f0c41727003으로 설정했습니다. strategy를 수정한 후 소량의 deposit으로 대량의 CRSS Token을 인출하여 이익을 얻었습니다.

공식 발표에서도 이 취약점이 너무 명백하다고 인정했으며, 개발자가 의도적으로 그랬던 것처럼 보입니다. 내부 조사 후 4명의 개발자를 해고했습니다. 현재 체인 상의 데이터에 대한 스냅샷이 진행되었으며, 이후 재배포가 이루어질 예정입니다. 공식 git에서는 전체 코드 감사가 시작되었으며, 이후 Certik와의 공동 감사도 진행될 예정입니다.

Cobo 코멘트

이번 공격은 MasterChef 계약을 겨냥했으며, 실제로 사용자의 LP 또는 CRSS 토큰을 직접 도난하지는 않지만, 가격 급락은 CRSS를 보유한 사용자에게 실질적인 손실을 초래할 것입니다. 공식 문서에서 프로젝트 감사 보고서를 찾을 수 없으며, 이 취약점은 비교적 명백합니다. 만약 보안 회사의 감사를 받았다면, 높은 확률로 드러났을 것입니다. 개인 투자자에게는 감사받지 않은 프로젝트에 대해 신중해야 합니다.

참고자료

https://twitter.com/peckshield/status/1483340900398895105

https://crosswise.medium.com/post-exploit-update-2a24c3370466

https://bscscan.com/address/0x70873211cb64c1d4ec027ea63a399a7d07c4085b#code

https://github.com/crosswise-finance/crosswise-code-review-1.1

Rari #90 즉 Float Protocol Pool이 예언자 조작 공격을 당하다

1월 15일, RariCapital의 90번 풀 즉 Float Protocol 풀이 예언자 조작 공격을 당했습니다.

이 풀은 Uniswap V3 FLOAT/USDC 거래 쌍을 사용하여 가격을 책정하고 있으며, 공격 발생 며칠 전 FLOAT/USDC 풀의 유동성이 감소했습니다(약 $550k만 남음). 낮은 유동성은 공격자가 예언자 조작 공격을 수행할 기회를 제공했습니다.

공격자는 47 ETH(약 $120k 가치)를 사용하여 풀에서 USDC를 FLOAT로 교환하여 FLOAT 가격을 상승시켰습니다. 이후 FLOAT를 Rari #90 풀에 담보로 제공하여 다른 자산을 빌려 이익을 얻었습니다. 공격 방식은 2021년 11월 발생한 Rari #23 풀 Vesper Lend Beta 공격과 유사합니다.

Cobo 코멘트

ChainLink 예언자를 사용할 수 없는 일부 소규모 코인에 대해 DeFi 계약에서는 일반적으로 DEX를 가격 책정에 사용합니다. 현재 UniswapV2/V3의 지연 가격 책정은 플래시 론 공격에 저항할 수 있지만, 실제 대자산 조작에는 저항할 수 없습니다. TWAP 시간 가중 메커니즘은 어느 정도 조작 난이도를 높일 수 있지만, 완전히 제거할 수는 없습니다.

개발자 관점에서 볼 때, 계약에 일정한 리스크 관리 코드를 추가하여 악의적인 가격 책정을 검사하는 것을 고려할 수 있습니다. 일반 사용자에게는 관련 유동성 풀을 주의 깊게 살펴보고 가격 조작 위험에 대비해야 합니다.

참고자료

https://twitter.com/FloatProtocol/status/1482184042850263042

https://medium.com/vesperfinance/on-the-vesper-lend-beta-rari-fuse-pool-23-exploit-9043ccd40ac9

DefiDollar 잠재적 공격 발견

1월 8일 DefiDollar Finance(@defidollar)는 DUSD 계약에서 잠재적 취약점을 발견했다고 트윗했습니다. 계약은 이미 중단되었으며 모든 자금은 안전합니다. 이 취약점은 블록체인 모니터링 시스템을 통해 자동으로 발견된 것으로 알려졌습니다. 그 접근 방식은 체인 상의 Tornado.Cash가 새 주소로 전송되고 계약이 배포되는 행동을 모니터링하는 것입니다(이는 많은 실제 공격에서 전형적인 초기 준비 행동입니다).

계약 및 관련 거래 분석을 통해 잠재적 공격 행동을 발견하고, 문제가 발견되면 즉시 관련 프로젝트에 통보하여 예방 조치를 취합니다. 이미 Forta에서 유사한 에이전트를 구현한 사람이 있습니다.

Cobo 코멘트

프로젝트 측에서는 유사한 방식으로 체인 상의 새로운 계약 및 메모리 풀의 거래를 모니터링하여 의심스러운 계약이나 거래에 대해 정적 분석 또는 시뮬레이션 실행을 통해 자산에 부정적인 영향을 미칠지 확인할 수 있습니다.

블록체인 공격 및 방어의 업그레이드에 따라, 유사한 모니터링 경고 시스템이 점점 더 성숙해질 것으로 예상됩니다. 물론 공격자도 모니터링을 우회하는 더 많은 공격 방법을 발견할 것입니다. 전통적인 보안에서 공격과 방어의 지속적인 대립 상황이 블록체인 보안에서도 계속 재현될 것입니다.

참고자료

https://twitter.com/AndreCronjeTech/status/1479778350084333574

https://connect.forta.network/agent/0x2fbec7dcd4eebf34c5b94d899109057eea3642a2400b7143e64873d453b7ba61

Rari 풀 #19 공격 실패

유명한 블록체인 보안 화이트 해커 @samczsun이 Rari #19(인덱스 Coop 풀)에 대한 경고 트윗을 게시했지만, 이후 공격은 실제로 발생하지 않았습니다.

공격 방식은 앞서 언급한 Float Protocol Rari #90 예언자 공격과 유사합니다. 공격자는 Uniswap V3에서 약 300 ETH를 BED로 교환하여 가격을 조작했습니다. Uniswap V2/V3 오라클은 두 번째 블록에서 가격이 업데이트되기 때문에 공격자가 한 거래 내에서 가격 조작을 완료할 수 없게 되어 플래시 론 공격에 저항할 수 있습니다.

실제 대자산을 사용하여 조작할 경우, 공격자는 최소한 두 번째 블록까지 기다려야 가격 반응을 볼 수 있습니다. TWAP의 존재로 인해 공격자는 가격이 더욱 분명해지기 위해 몇 분 더 기다려야 합니다. 이번 공격에서도 공격자는 실제로 그렇게 했습니다.

그러나 불행히도 두 번째 블록에서 의심스러운 차익 거래 봇이 존재했습니다. 이 주소는 두 번째 블록에서 즉시 손에 있는 대량의 BED를 ETH로 교환하여 원래 가격의 안정성을 유지했습니다. 이로 인해 공격자는 공격을 계속할 수 없게 되었고, swap의 가스, 수수료 및 대량 거래 슬리피지 손실을 감수해야 했습니다.

Cobo 코멘트

Uniswap V2/V3 오라클은 플래시 론 공격에 저항할 수 있지만, 대자산 조작에 직접 저항할 수는 없습니다. 따라서 유동성이 적은 거래 쌍의 경우 여전히 오라클 가격이 조작될 위험이 존재합니다.

공격자의 관점에서 볼 때, Uniswap V2/V3 오라클 조작 공격을 수행하려면 높은 공격 비용이 필요하며, 시장에서 조작하는 풀의 목표 토큰의 대부분을 보유해야 합니다. 그렇지 않으면 위와 같은 상황이 발생하여 다른 대주가 차익 거래를 하게 되어 결국 공격자가 손해를 보게 됩니다.

참고자료

https://twitter.com/samczsun/status/1486243806739587076

OpenSea 프론트엔드 취약점

@PeckShield는 OpenSea에 프론트엔드 문제가 있을 수 있다고 발표했으며, 사용자가 이 문제를 이용해 347 ETH를 획득했습니다. 이 취약점은 @yakirrotem이 공개한 문제와 관련이 있을 수 있습니다.

OpenSea의 거래 구조는 다음과 같습니다:

  • 판매자가 listing(가격 제안)을 시작하면, 사용자는 제안 데이터에 서명하여 설정된 가격으로 NFT를 판매하는 데 동의합니다.

  • 이 서명 데이터는 OpenSea의 오프체인 데이터베이스에 저장되며, 구매자가 OpenSea에서 해당 NFT를 구매할 때 OpenSea는 이 서명 데이터를 체인에 올려 검증합니다. 검증이 완료되면 NFT transfer가 완료되며, OpenSea는 일부 수수료를 수취합니다.

  • 판매 전, 판매자는 이전 listing을 취소할 수 있으며, 취소된 listing은 체인에서 서명 검증 시 실패하여 판매되지 않습니다.

여기서 발생하는 문제는 OpenSea가 기존 listing을 취소하지 않고 다시 listing을 시작할 수 있도록 허용한다는 것입니다(현재 이 문제는 수정되었습니다). 이 경우 OpenSea UI에서는 판매자의 이전 가격 제안이 보이지 않지만, 실제로 이전 listing은 여전히 존재하고 유효합니다.

공격자는 https://orders.rarible.com에서 이전 listing을 조회할 수 있습니다. OpenSea의 listing에는 거래 Nonce 메커니즘이 없기 때문에 이전 listing은 여전히 유효합니다. 공격자는 이전 listing을 통해 NFT를 직접 구매하고 새로운 가격으로 판매할 수 있습니다. NFT의 가격 변동이 심하기 때문에 이러한 방식으로 막대한 차익을 실현할 수 있습니다.

https://etherscan.io/token/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d?a=9991#inventory는 그 예시 중 하나입니다: 1월 24일 BAYC의 NFT가 OpenSea에서 0.77 ETH에 구매된 후 84.2 ETH에 판매되었습니다.

Cobo 코멘트

일반 사용자에게는 https://orders.rarible.com에 로그인하여 이전 listing이 있는지 확인하고 즉시 취소 처리할 것을 권장합니다. 더 안전한 방법은 NFT를 새 주소로 직접 전송하는 것입니다.

참고자료

https://twitter.com/PeckShieldAlert/status/1485547426467364864

https://twitter.com/yakirrotem/status/1485559864948629512

Metamask 개인 IP 유출 취약점

@alxlpsc는 medium에서 Metamask에 심각한 개인정보 유출 문제가 있다고 공개했습니다. 이 취약점은 MetaMask가 NFT 이미지 URL을 자동으로 로드하는 것을 이용한 것입니다. 기본적인 공격 접근 방식은 공격자가 NFT의 URI를 자신이 제어할 수 있는 서버 URL로 설정하는 것입니다.

그 후 NFT를 목표 계정으로 전송합니다; 사용자가 Metamask에 로그인하면 Metamask는 계정에서 소유한 NFT를 자동으로 스캔하고 공격자 서버로 HTTP 요청을 보냅니다; 공격자는 접근 로그에서 피해자의 IP 정보를 얻을 수 있습니다.

Cobo 코멘트

블록체인의 익명성은 주로 체인 상 주소와 체인 외 신원의 분리에서 비롯됩니다. 체인 상 주소를 통해 체인 외 신원을 확인할 수 있다면, 블록체인 환경에서 이는 상당히 심각한 해를 끼칠 수 있습니다. 전통적인 보안에서 호스트 IP 유출은 일반적으로 심각한 문제로 간주되지 않지만(어쨌든 피싱 문자나 이메일로도 가능하므로), 익명성을 주장하는 블록체인 세계에서는 개인정보의 중요성이 한층 더 높아질 것입니다. 이와 유사하게, 보안 상황의 차이로 인해 취약점 수준이 달라지는 경우가 블록체인이라는 비교적 새로운 분야에서 계속 발생할 것입니다.

참고자료

https://medium.com/@alxlpsc/critical-privacy-vulnerability-getting-exposed-by-metamask-693c63c2ce94

wxBTRFLY 취약점 공개 및 수정

@immunefi의 화이트 해커가 wxBTRFLY Token 계약에서 심각한 취약점을 발견했습니다. 계약의 transferFrom 함수가 recipient의 승인을 올바르게 업데이트하지 않으며, msg.sender의 승인을 잘못 업데이트합니다.

취약점 자체는 심각하지만 원인은 복잡하지 않습니다(개발자의 오타와 유사합니다). 흥미로운 점은 공식의 수정 방식입니다. 계약 자체가 업그레이드를 지원하지 않기 때문에 계약 코드를 직접 업데이트할 수 없습니다; 계약이 일시 중지를 지원하지 않기 때문에 스냅샷 + 마이그레이션 방식으로 사용자 자산을 이전할 수 없습니다. 결국 공식의 조치는 공격 거래를 발동하여 취약점 영향을 받은 모든 사용자의 자산을 다중 서명 지갑으로 이전하는 것이었습니다. 이후 새로운 Token 계약이 배포되면 다시 분배될 예정입니다.

Cobo 코멘트

ERC20 Token은 이미 비교적 성숙한 코드 템플릿이 있으며, wxBTRFLY는 transferFrom을 재작성하는 과정에서 문제가 발생했습니다. 이 문제는 완벽한 단위 테스트가 있었다면 쉽게 발견되었을 것입니다. 프로젝트 측은 개발 과정에서 완벽한 테스트 프로세스가 부족했을 가능성이 있습니다.

참고자료

https://discord.com/invite/rpkPDR7pVV

https://twitter.com/redactedcartel/status/1482497468713611266?s=20

https://etherscan.io/tx/0xf0e4ccb4f88716fa5182da280abdb9ea10ec1c61cfc5bbe87e10bdde07c229d6

Qubit 크로스체인 브리지 공격

1월 28일, BSC의 DeFi 플랫폼 Qubit Finance의 크로스체인 브리지 QBridge가 공격을 받아 약 8000만 달러의 손실을 입었습니다.

크로스체인 브리지는 일반적으로 소스 체인의 계약에서 자산을 담보로 하고 이벤트를 발생시키는 형태로 구현됩니다. 이벤트를 포착한 노드가 목표 체인의 크로스체인 브리지 계약에 호출을 시작하고, 동일한 양의 자산을 mint합니다. 소스 체인에서 이벤트가 발생하기만 하면 크로스체인 브리지 시스템은 크로스체인 자산이 이전되어야 한다고 판단합니다.

하지만 소스 체인의 크로스체인 브리지 계약 코드에 문제가 있다면, 자산이 크로스체인 브리지 계약에 담보되지 않았음에도 불구하고 여전히 이벤트를 발생시키는 상황이 발생할 수 있으며, 이로 인해 취약점이 발생하고 목표 체인 Token의 잘못된 증발이 발생할 수 있습니다.

QBridge는 이러한 문제가 존재합니다. QBridge는 ETH와 ERC20 Token 두 가지 자산을 담보로 지원합니다. 이더리움의 ETH는 네이티브 토큰으로, ERC20 Token은 두 개의 별도 코드로 처리됩니다. 소스 체인에서 Token을 담보할 때 deposit 메서드를 호출하며, ETH를 담보할 때는 depositETH 메서드를 호출해야 합니다.

QBridge는 제로 주소를 ETH의 식별자로 사용합니다. 그러나 구현 시 검증이 제대로 이루어지지 않아 계약이 ETH를 처리할 때 여전히 deposit 메서드를 사용하게 되어, ETH를 계약 주소가 제로인 Token으로 처리하게 됩니다. 전송 시 transferFrom을 사용하면 제로 주소에 대한 계약 호출이 이루어지는 것입니다.

이더리움의 기본 설계에서 EOA 주소에 대한 계약 호출은 기본적으로 성공하며 revert되지 않습니다. 이러한 조건들이 결합되어 최종적으로 공격자는 소스 체인에서 어떤 자산도 담보하지 않았음에도 불구하고 목표 체인에서 대량의 qXETH를 mint하여 이익을 실현할 수 있게 됩니다.

Cobo 코멘트

현재 블록체인 산업에서는 다중 체인이 공존하고 있으며, 크로스체인 브리지는 중요한 인프라가 되었습니다. 크로스체인 브리지는 체인 상과 체인 외의 협력이 필요하기 때문에 전체 복잡도가 일반 dapp보다 훨씬 높아 문제 발생 가능성이 더 큽니다. 또한 크로스체인 브리지에서는 일반적으로 대량의 자산이 담보되므로, 불법적으로 이전할 수 있다면 상당한 이익을 얻을 수 있습니다. 각종 크로스체인 브리지 시스템은 최근 한두 달 동안 공격자들의 주요 목표가 된 것으로 보입니다.

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축