Week 13: 블록체인 보안 FAQ

대전대학교 대학원 | 교수: 연삼흠

스마트 계약 취약점

Q1. Re-entrancy(재진입) 공격이란 무엇인가요?

재진입 공격은 스마트 계약이 외부 호출을 수행할 때, 해당 호출이 원래 함수를 다시 호출하여 상태 변경 전에 반복 실행되는 공격입니다.

동작 원리:

  • 공격자 계약이 취약한 계약의 withdraw 함수를 호출
  • ETH 전송 시 공격자의 fallback/receive 함수가 실행됨
  • fallback에서 다시 withdraw를 호출하여 잔액 차감 전에 반복 인출

방어: Checks-Effects-Interactions 패턴 적용 또는 ReentrancyGuard 사용

Q2. Checks-Effects-Interactions 패턴이란?

스마트 계약 함수 작성 시 권장되는 안전한 코딩 패턴입니다:

  • Checks: require/assert로 조건을 먼저 검증
  • Effects: 상태 변수를 변경 (잔액 차감 등)
  • Interactions: 마지막으로 외부 호출 수행
function withdraw(uint amount) public { require(balances[msg.sender] >= amount); // Check balances[msg.sender] -= amount; // Effect payable(msg.sender).transfer(amount); // Interaction }
Q3. Integer Overflow/Underflow가 왜 위험한가요?

정수 오버플로우는 최대값을 초과하면 0으로, 언더플로우는 0 미만이면 최대값으로 돌아가는 현상입니다.

예시: uint8의 최대값은 255이며, 255 + 1 = 0이 됩니다.

Solidity 0.8.0부터 기본적으로 오버플로우/언더플로우 시 revert가 발생합니다. 0.7.x 이하에서는 SafeMath 라이브러리를 사용해야 합니다.

Q4. Front-running 공격은 어떻게 동작하나요?

블록체인의 멤풀(mempool)에서 미확인 트랜잭션을 관찰하고, 높은 가스비를 지불하여 해당 트랜잭션보다 먼저 처리되게 하는 공격입니다.

대표적 유형:

  • 샌드위치 공격: DEX에서 대량 주문 전후로 매수/매도하여 차익 획득
  • 선점 공격: 다른 사용자의 유리한 트랜잭션을 복사하여 먼저 실행

방어: Commit-Reveal 스킴, Flashbots, 시간 지연 메커니즘

Q5. Solidity에서 calltransfer의 보안 차이는?

transfersend는 2300 gas만 전달하여 재진입을 방지하지만, EIP-1884 이후 일부 상황에서 실패할 수 있습니다.

call은 모든 가용 가스를 전달하므로 재진입에 취약하지만, 현재 권장되는 방식입니다. 대신 CEI 패턴이나 ReentrancyGuard와 함께 사용해야 합니다.

네트워크 보안

Q6. 51% 공격이란 무엇인가요?

네트워크 전체 해시파워(PoW) 또는 스테이킹 양(PoS)의 과반수를 장악하여 블록체인의 합의를 조작하는 공격입니다.

가능한 공격:

  • 이중 지불 (동일 코인을 두 번 사용)
  • 특정 트랜잭션 검열
  • 채굴 독점

불가능한 것: 다른 사용자의 코인 탈취, 블록 보상 변경, 과거 블록 수정(깊은 재조직은 비용이 기하급수적으로 증가)

Q7. The DAO 해킹 사건의 전말은?

배경: 2016년 이더리움 위에 구축된 투자 펀드(약 1.5억 달러 규모)

공격: 재진입 취약점을 이용해 약 360만 ETH 탈취

대응:

  • 이더리움 커뮤니티가 하드포크를 통해 공격을 무효화하기로 결정
  • 하드포크에 반대한 그룹이 이더리움 클래식(ETC)을 유지
  • 이후 스마트 계약 감사(Audit)의 중요성이 크게 부각됨
Q8. 이클립스 공격(Eclipse Attack)이란?

특정 노드의 모든 네트워크 연결을 장악하여, 해당 노드가 공격자가 제공하는 정보만 받도록 격리하는 공격입니다.

피해 노드는 조작된 블록체인 데이터를 받게 되어 이중 지불 공격의 대상이 될 수 있습니다. P2P 네트워크의 피어 연결 다양성 확보가 중요합니다.

Q9. 시빌 공격(Sybil Attack)은 무엇인가요?

공격자가 다수의 가짜 신원(노드)을 생성하여 네트워크의 영향력을 부당하게 획득하는 공격입니다.

블록체인에서는 PoW(해시파워 필요), PoS(스테이킹 필요) 등의 합의 메커니즘이 시빌 공격에 대한 기본적인 방어를 제공합니다.

보안 감사 및 도구

Q10. 스마트 계약 감사(Audit) 비용은 얼마나 드나요?

프로젝트 규모와 복잡도에 따라 크게 달라집니다:

  • 소규모 (단일 계약): $5,000 - $15,000
  • 중규모 (DeFi 프로토콜): $30,000 - $100,000
  • 대규모 (복합 프로토콜): $100,000 - $500,000+

주요 감사 기관: Trail of Bits, OpenZeppelin, ConsenSys Diligence, CertiK 등

Q11. 자동화 보안 분석 도구에는 어떤 것들이 있나요?
  • Slither: 정적 분석 도구, Trail of Bits 개발. 빠르고 다양한 취약점 탐지
  • Mythril: 심볼릭 실행 기반 분석. 깊은 취약점 탐색 가능
  • Echidna: 퍼징(Fuzzing) 기반 테스트 도구
  • Manticore: 심볼릭 실행 엔진
  • Oyente: 초기 분석 도구 (현재는 Mythril 등으로 대체)

자동화 도구만으로는 모든 취약점을 발견할 수 없으므로 수동 감사와 병행해야 합니다.

Q12. WIA-SEC-006 보안 표준의 핵심 내용은?

WIA-SEC-006은 블록체인 시스템의 보안 요구사항을 정의하는 국제 표준입니다.

주요 영역:

  • 스마트 계약 보안 가이드라인
  • 네트워크 보안 요구사항
  • 키 관리 및 암호화 표준
  • 보안 감사 프로세스 정의
  • 인시던트 대응 절차
Q13. 버그 바운티(Bug Bounty) 프로그램이란?

프로젝트가 외부 보안 연구자에게 취약점 발견 시 보상을 지급하는 프로그램입니다.

Immunefi 등의 플랫폼에서 DeFi 프로젝트의 버그 바운티가 활발하게 운영되며, 심각한 취약점의 경우 수백만 달러의 보상이 지급되기도 합니다.

Q14. 형식 검증(Formal Verification)이란?

수학적 증명을 통해 스마트 계약이 사양(specification)을 만족하는지 검증하는 방법입니다.

일반적인 테스트가 특정 입력에 대한 결과만 확인하는 반면, 형식 검증은 모든 가능한 입력에 대한 정확성을 증명합니다. 비용과 시간이 많이 들지만, 높은 보안이 요구되는 금융 계약에 적용됩니다.

Q15. 프록시 패턴(Proxy Pattern)의 보안 위험은?

업그레이드 가능한 스마트 계약을 위한 프록시 패턴에는 몇 가지 보안 위험이 있습니다:

  • 스토리지 충돌: 프록시와 구현체의 스토리지 레이아웃이 불일치하면 데이터 손상
  • 함수 셀렉터 충돌: 프록시와 구현체 함수의 4바이트 셀렉터가 겹치는 경우
  • 초기화 함수 보호: initializer가 중복 호출되지 않도록 해야 함
  • 업그레이드 권한: 업그레이드 기능의 접근 제어가 매우 중요

OpenZeppelin의 Transparent Proxy 또는 UUPS 패턴 사용을 권장합니다.

Q16. Flash Loan 공격이란?

Flash Loan은 한 트랜잭션 내에서 무담보로 대량의 자금을 빌리고 반환하는 DeFi 기능입니다. 이를 악용하여:

  • 오라클 가격 조작
  • 거버넌스 투표 조작
  • 유동성 풀 조작을 통한 차익 거래

bZx, Pancake Bunny 등 여러 프로토콜이 Flash Loan 공격으로 피해를 입었습니다.