블로그

자동 번역 · 영어로 읽기

SSO 모듈 2 - 스마트 컨트랙트 취약점: 재진입 공격 심층 분석

스마트 컨트랙트는 투명성을 제공하지만 위험도 수반합니다. 이 글은 DAO의 1억 5천만 달러 손실 사례를 포함해 재진입과 같은 취약점을 다룹니다. 정수 오버플로는 BeautyChain의 9억 달러 손실로 이어졌습니다. DAOMaker는 접근 제어 결함으로 400만 달러를 잃었습니다. 플래시론 공격으로 Harves Finance는 3,800만 달러를 잃었습니다.

작성자 Markos Mebellis

SSO 모듈 2 - 스마트 컨트랙트 취약점: 재진입 공격 심층 분석
이 페이지에서

스마트 컨트랙트는 효율성, 투명성, 불변성으로 전 세계 산업을 혁신하고 있습니다. 그러나 개방적이고 자동화된 설계는 위험에도 노출합니다. 잠재력을 극대화하면서 위협을 최소화하려면 취약점과 가능한 공격 경로를 파악하는 것이 중요합니다. 이러한 컨트랙트를 작성하고 유지하려면 세심한 주의와 모범 사례 준수가 필요합니다. 이 글은 이해를 돕기 위해 실제 사례와 함께 일반적인 취약점을 자세히 살펴봅니다. Salus Security가 제공한 다음 글을 살펴보겠습니다.

주요 취약점:

**재진입:** 공격자는 핵심 작업이 완료되거나 값이 업데이트되기 전에 함수에 다시 진입하는 틈을 악용합니다.

단일 함수 재진입: 컨트랙트가 악성 컨트랙트와 상호작용하여 후자가 함수에 다시 진입할 수 있을 때 발생합니다. 예를 들어 악성 컨트랙트는 'withdrawBalance' 함수에 계속 재진입하여 잔액이 업데이트되기 전에 더 많은 이더를 빼낼 수 있습니다.

주목할 만한 공격:

  • The DAO (2016): 1억 5천만 달러를 모금한 후 코딩 취약점으로 해킹당했습니다. 이로 인해 이더리움 네트워크가 분리되었습니다.
  • PolyDex (2021): PLX Locker 스마트 컨트랙트에 대한 재진입 공격으로 50만 달러를 잃었습니다.
  • Bacon Protocol (2022): lend() 함수의 재진입 버그로 100만 달러 손실을 입었습니다.
  • Lendf.Me (2020): 여러 암호화폐에 걸쳐 약 2,470만 달러를 잃었습니다.

**교차 함수 재진입:** 서로 다른 함수 간의 공유 상태와 부실한 재진입 보호에서 발생합니다. 위의 'balances' 예시는 'withdrawAll'에 보호가 있어도 공격자가 여전히 'transfer' 함수를 악용할 수 있음을 보여줍니다.

악명 높은 사건:

  • DFX Finance (2022): 재진입 보호가 없는 함수를 악용한 공격으로 700만 달러 이상을 잃었습니다.
  • Hundred Finance (2022): 재진입 공격이 borrowFresh 함수를 악용한 후 약 650만 달러를 잃었습니다.
  • Fei Protocol (2022): 재진입 허점을 이용한 공격으로 약 8,000만 달러를 잃었습니다.

**교차 컨트랙트 재진입:** 서로 다른 컨트랙트 간의 공유 상태와 잘못된 변수 수정 순서에서 발생합니다. 함수에 보호가 있어도 'burnAccount' 같은 다른 함수는 여전히 악용될 수 있습니다.

주요 공격:

  • Rari Capital (2021): 한 시간도 안 되어 약 1,000만 달러(약 2600 ETH)를 잃었습니다.
  • ValueDefi (2021): 외부 데이터에 의존한 잘못된 지분 계산으로 5345.314 WBNB를 잃었습니다.

읽기 전용 재진입:

읽기 전용 재진입은 컨트랙트 상태를 변경하지 않지만 상태가 일관되지 않을 때 잘못된 출력을 생성할 수 있는 함수를 악용합니다.

주목할 만한 공격:

  • QuickSwap (2022): 공격자들은 플래시론을 악용해 자산 현물 가격을 조작하여 138 ETH와 700 MATIC 토큰을 빼돌렸습니다. 이는 Curve LP 오라클의 결함으로 가능했습니다.
  • dForce (2023): Arbitrum 및 Optimism 체인에서 Curve Finance와 함께 가격 오라클에 접근하는 코드에 읽기 전용 재진입 버그가 있었습니다.
  • Sentimente (2023): 읽기 전용 재진입 결함을 악용한 공격으로 100만 달러가 도난당했습니다. 다행히 90%는 범인이 반환했습니다.
  • Sturdy (2023): B-stETH-STABLE의 가격이 조작된 Balancer의 읽기 전용 재진입 문제로 약 442 ETH를 잃었습니다.

재진입 취약점 예방:

  1. 항상 검사-효과-상호작용 패턴을 준수하세요.
  2. 모든 민감한 작업에 재진입 보호를 적용하세요.
  3. 모든 외부 호출을 세심하게 처리하세요.

정수 오버플로:

계산이 한도를 초과하면 오버플로되어 종종 아주 작거나 거대한 값이 됩니다.

예시 공격:

  • BeautyChain (2018): 공격자들은 정수 오버플로를 통해 10^58 BEC를 확보하여 무려 9억 달러를 처분했습니다.
  • Poolz (2023): 이더리움, 바이낸스, 폴리곤 온체인에서 약 665,000달러의 손실을 초래했습니다.

정수 오버플로 대응책:

  1. safeMath 라이브러리와 같은 안전한 계산 방법을 사용하세요.
  2. 결과가 범위 내에 있는지 확인하기 위해 경계 검사를 우선시하세요.
  3. 내장 오버플로 감지를 위해 solidity 컴파일러 버전 0.8.0 이상을 채택하세요.

접근 제어:
접근 제어 취약점은 중요한 작업을 처리하는 함수에 엄격한 접근 제약이 없을 때 발생합니다.

  • 주요 공격:
  • DAOMaker (2021): init 함수가 취약하게 남겨진 후 무려 약 400만 달러가 빼돌려졌습니다.
  • GymNetwork (2022): 공격자들은 depositFromOtherContract()의 인증 감독 소홀을 악용하여 실제 지불 없이 불법적으로 잔액을 늘렸습니다. 손실은? 약 2,475.91 WBNB입니다.
  • Tempdao (2023): migrateStake 함수에 대한 느슨한 접근 제어로 234만 달러를 초과하는 손실이 발생했습니다.

접근 제어 취약점

  • 설명: 시스템 내 특정 작업에 대한 접근 및 권한을 관리하는 제한 메커니즘이 불충분하여 발생하는 취약점입니다.

예방 조치:

  1. 엄격한 권한 검사: 특히 민감한 작업을 처리하는 함수에 항상 엄격한 권한 프로토콜을 적용하세요.
  2. 다중 서명 메커니즘: 공동 의사 결정이 필요한 작업에는 민감한 작업을 실행하기 전에 여러 승인이 필요한 다중 서명 프로토콜을 사용하세요.

일반적인 공격 벡터

  • 설명: 공격자가 주로 스마트 컨트랙트에서 시스템의 취약점을 악용하는 다양한 방법 또는 경로입니다.

주요 사례:

  • 플래시론 공격: 탈중앙화 금융 시스템의 즉시 대출 기능을 악용하여 악의적인 활동을 실행합니다.
  • 프론트러닝: 공격자가 다른 사용자의 대기 중인 트랜잭션을 파악한 후 더 높은 가스비를 제시하여 이를 선점합니다.

플래시론 공격

  • 설명본질적으로 공격은 아니지만, FlashLoan은 사용자가 담보 없이 즉시 거액을 빌릴 수 있게 해주는 DeFi 기능입니다. 계약 상호작용과 관계의 논리적 결함으로 인해 악용되어 왔습니다.

주요 공격 사례:

  1. **Harves Finance (2020.10.26)**3800만 달러의 손실을 초래했습니다.
  2. **InverseFinance (2022.6.16)**53.2445 WBTC와 99,976.29 USDT의 손실을 초래했습니다.
  3. NewFreeDAO (2022.9.8): 4,481 WBNB가 유출되었으며, 이는 약 125만 달러에 해당합니다.
  4. Lodestar (2022.12.11): 오라클 가격 조작을 통해 악용되었습니다.
  5. 0vix (2023.4.28): Polygon 체인에서 200만 달러의 손실이 발생했습니다.

예방 권장 사항:

  1. 프로젝트 개발 시 Flashloan의 특성을 인식하세요.
  2. 정확한 가격 결정을 위해 시간 가중 평균 또는 다중 오라클을 사용하세요.

프론트러닝

  • 설명: 공격자는 memPool에서 다른 사용자의 트랜잭션을 파악한 뒤 더 높은 가스비를 제시하여 이를 악용합니다.

주요 공격 사례:

  1. Sushi Badger Digg (2021.1.25): 81.68 ETH의 손실이 발생했습니다.
  2. Sushiswap Ape-ETH pool (2022.5.17): 공격자는 약 0.3 ETH의 이익을 얻었습니다.
  3. Uniswap (2023.4.2): 샌드위치 공격으로 약 2500만 달러의 손실을 초래했습니다.

예방 권장 사항:

  1. 거래 시 슬리피지 보호를 사용하세요.
  2. 특히 변동성이 큰 시장에서는 비피크 시간대에 거래를 실행하세요.
  3. 1inch의 FlashBot rpc를 사용하여 거래를 채굴자에게 직접 전송함으로써 memPool을 우회하세요.

요약

축하합니다! 모듈 2 - 스마트 컨트랙트 취약점: 재진입 공격과 일반적인 익스플로잇 심층 분석을 완료하셨습니다

학습 내용을 복습해 봅시다:

재진입 취약점 - 공격자는 함수가 완전히 완료되기 전에 재진입하여 허점을 악용합니다.

  • 단일 함수 재진입: 악성 컨트랙트가 다른 컨트랙트의 함수에 재진입합니다.
  • 교차 함수 재진입: 재진입 보호가 미흡하여 서로 다른 함수 간에 공유된 상태가 악용됩니다.
  • 교차 컨트랙트 재진입: 서로 다른 컨트랙트 간에 공유된 상태를 악용합니다.
  • 읽기 전용 재진입: 상태가 일관되지 않을 때 잘못된 출력을 생성하는 함수를 악용합니다.

정수 오버플로 - 계산이 설정된 한도를 초과하여 극단적인 값을 초래합니다.

접근 제어 취약점 - 핵심 기능에 대한 엄격한 접근 제약이 없어 발생합니다.

일반적인 공격 벡터 - 공격자가 시스템 취약점을 악용하는 방법입니다.

**FlashLoan Attack **- 담보 없이 즉시 대규모 차입을 가능하게 하는 DeFi 기능이지만 논리적 결함으로 인해 악용됩니다.

프론트러닝 공격- 공격자는 대기 중인 트랜잭션을 파악하고 더 높은 가스 수수료를 제시하여 이익을 얻습니다.

이 글은 다음의 후원으로 제공됩니다:

요약 — 삽화