BitInsight
BitInsight

스마트컨트랙트 보안

2026-01-2910분 읽기

스마트컨트랙트 보안의 중요성

스마트컨트랙트는 한 번 배포되면 수정이 어렵고, 버그는 직접적인 자금 손실로 이어진다. "코드가 법"이라는 원칙은 실수도 법이 된다는 의미다.

현실:

  • 2022년 디파이 해킹 피해: $3B+
  • 상위 해킹의 대부분이 스마트컨트랙트 취약점
  • 감사받은 프로토콜도 해킹됨

주요 취약점 유형

1. 재진입 공격 (Reentrancy)

설명: 외부 호출 중 상태 업데이트 전에 같은 함수가 다시 호출됨.

메커니즘:

1. 공격자가 출금 요청
2. 컨트랙트가 ETH 전송 (외부 호출)
3. 공격자의 receive()에서 다시 출금 요청
4. 잔액이 아직 업데이트되지 않아 다시 출금 성공
5. 반복

역사적 사례:

  • The DAO Hack (2016): $60M, 이더리움 하드포크 원인

방어:

  • ReentrancyGuard 사용
  • 체크-효과-상호작용 패턴
  • 상태 업데이트 후 외부 호출

2. 정수 오버플로우/언더플로우

설명: 숫자가 최대/최소값을 넘어 의도치 않은 값이 됨.

예시:

uint8 balance = 255;
balance = balance + 1;  // 오버플로우 → 0

방어:

  • Solidity 0.8.0+: 자동 검사
  • SafeMath 라이브러리 (이전 버전)

3. 접근 제어 오류

설명: 민감한 함수에 대한 권한 검사 누락.

예시:

  • 관리자 전용 함수를 누구나 호출 가능
  • 초기화 함수 재호출 가능

방어:

  • onlyOwner, onlyAdmin 수정자
  • Role-based 접근 제어

4. 오라클 조작

설명: 가격 오라클을 조작하여 부당한 이익.

메커니즘:

  1. 플래시 론으로 대량 자금 확보
  2. DEX에서 대규모 스왑 → 가격 왜곡
  3. 왜곡된 가격으로 다른 프로토콜에서 유리한 거래
  4. 원상 복구

사례:

  • Harvest Finance: $34M
  • Cream Finance: $130M

방어:

  • TWAP (시간 가중 평균 가격)
  • Chainlink 등 외부 오라클
  • 가격 변동 한도

5. 프론트러닝

설명: 멤풀에서 대기 중인 트랜잭션을 보고 먼저 실행.

유형:

  • 샌드위치 공격
  • 청산 프론트러닝
  • 차익거래 프론트러닝

방어:

  • 슬리피지 설정
  • Flashbots 등 프라이빗 멤풀
  • 커밋-리빌 스킴

6. 로직 오류

설명: 코드가 의도대로 동작하지 않음.

예시:

  • 조건문 오류
  • 계산 실수
  • 엣지 케이스 미처리

사례:

  • Compound 버그 (2021): $80M 잘못 분배

방어:

  • 철저한 테스트
  • 형식 검증
  • 다중 감사

7. 플래시 론 공격

설명: 플래시 론을 활용한 복합 공격.

활용:

  • 오라클 조작
  • 거버넌스 공격
  • 차익거래 악용

방어:

  • 스냅샷 기반 투표
  • 단일 블록 가격 의존 회피
  • 속도 제한

8. 서명 관련 취약점

설명: 서명 검증 오류, 리플레이 공격.

사례:

  • Wormhole: 서명 검증 우회로 $320M 손실

방어:

  • EIP-712 구조화 서명
  • 논스(Nonce) 사용
  • 체인 ID 포함

감사 (Audit)

감사란

보안 전문가가 스마트컨트랙트 코드를 검토하여 취약점을 찾는 과정.

주요 감사 기관

기관특징
Trail of Bits최고 수준, 비용 높음
OpenZeppelin업계 표준, 다수 경험
Consensys Diligence이더리움 전문
Certik빠른 감사, 논란 있음
Halborn비교적 신규
Spearbit분산 감사 네트워크

감사 과정

  1. 범위 정의: 어떤 컨트랙트 검토할지
  2. 자동 분석: 정적 분석 도구 실행
  3. 수동 검토: 전문가 코드 리뷰
  4. 결과 보고: 취약점 및 권고사항
  5. 수정 및 재검토: 문제 수정 후 확인

감사 보고서 읽기

심각도 분류:

  • Critical: 자금 손실 가능, 즉시 수정
  • High: 심각한 기능 문제
  • Medium: 잠재적 문제
  • Low: 경미한 이슈
  • Informational: 개선 권고

확인 사항:

  • 모든 Critical/High 이슈 해결됨
  • 감사 범위와 실제 배포 코드 일치
  • 감사 시점과 현재 코드 일치

감사의 한계

감사를 받았어도 해킹될 수 있다:

프로토콜감사 여부피해
Wormhole$320M
Ronin$625M
Nomad$190M

이유:

  • 100% 보장 아님
  • 업그레이드 후 새 취약점
  • 비즈니스 로직 오류
  • 복합 프로토콜 상호작용

보안 확인 방법

1. 감사 확인

확인 사항:

  • 최소 1개 이상의 감사
  • 신뢰할 수 있는 감사 기관
  • 감사 보고서 공개
  • Critical/High 이슈 해결
  • 현재 코드와 감사 코드 일치

2. 코드 검증

Etherscan 확인:

  • 코드가 검증(Verified)되었는지
  • 프록시 컨트랙트의 경우 구현 컨트랙트도

소스 확인:

  • GitHub에 코드 공개
  • 배포 코드와 일치

3. TVL과 운영 기간

린디 효과:

  • 오래 운영될수록 안전할 확률 높음
  • 많은 자금이 묶일수록 검증된 것

기준:

  • TVL $100M+: 비교적 안전
  • 운영 1년+: 검증 기간 충분
  • 단, 과거 성공이 미래 보장은 아님

4. 버그 바운티

확인:

  • 버그 바운티 프로그램 운영 여부
  • 보상 규모 (자금 규모에 비례해야)
  • Immunefi 등 플랫폼 활용

5. 업그레이드 가능성

불변 컨트랙트:

  • 업그레이드 불가
  • 새 취약점 도입 불가
  • 버그 수정도 불가

업그레이드 가능:

  • 프록시 패턴 사용
  • 관리자가 로직 변경 가능
  • 편리하지만 리스크

확인:

  • 프록시 컨트랙트인지
  • 관리자 권한은 누구에게
  • 타임락 있는지

6. 관리자 권한

확인 사항:

  • 관리자 함수 목록
  • 멀티시그 여부
  • 타임락 기간

위험 신호:

  • 단일 EOA 관리자
  • 무한 토큰 발행 권한
  • 긴급 탈출 함수 (관리자만)

도구와 리소스

분석 도구

  • Slither: 정적 분석
  • Mythril: 상징적 실행
  • Echidna: 퍼징 테스트
  • Tenderly: 시뮬레이션

모니터링

  • Forta: 실시간 위협 감지
  • Blocknative: 멤풀 모니터링
  • OpenZeppelin Defender: 자동 대응

리소스

  • SWC Registry: 취약점 분류
  • Rekt.news: 해킹 사례 분석
  • Immunefi: 버그 바운티

사용자 관점 체크리스트

프로토콜 참여 전

  • 감사 보고서 확인
  • 코드 검증 확인 (Etherscan)
  • TVL과 운영 기간 확인
  • 관리자 권한 확인
  • 버그 바운티 여부
  • 커뮤니티 평판

트랜잭션 시

  • 올바른 컨트랙트 주소
  • 승인(Approval) 금액 확인
  • 트랜잭션 내용 이해
  • 시뮬레이션 (가능하면)

지속적

  • 프로토콜 뉴스 팔로우
  • 업그레이드 공지 확인
  • 이상 징후 모니터링

정리

스마트컨트랙트 보안은 디파이의 핵심 리스크로, 재진입 공격, 오라클 조작, 접근 제어 오류 등 다양한 취약점이 있다. 감사는 필수지만 100% 안전을 보장하지 않으며, 감사받은 프로토콜도 해킹된 사례가 많다. 사용자는 감사 보고서 확인, 코드 검증, TVL/운영 기간, 관리자 권한, 버그 바운티 등을 종합적으로 검토해야 한다. 불변 컨트랙트가 업그레이드 가능한 것보다 안전한 측면이 있지만, 버그 수정도 불가능하다는 트레이드오프가 있다.

다음 글: 디파이 보험 - 리스크 전가의 방법