스마트 계약 취약점 탐지를 위한 ContractFuzzer
초록
ContractFuzzer는 이더리움 스마트 계약의 ABI를 기반으로 입력을 자동 생성하고, EVM을 계측해 실행 로그를 수집·분석하여 DAO와 Parity 월렛 등 유명 사건에서 확인된 취약점을 높은 정밀도로 탐지하는 퍼징 도구이다. 6,991개의 계약을 테스트해 459건 이상의 취약점을 발견하였다.
상세 분석
본 논문은 스마트 계약 보안 분야에서 퍼징 기법을 체계화한 ContractFuzzer를 제안한다. 먼저 ABI(Application Binary Interface) 정보를 활용해 함수 시그니처와 파라미터 타입을 추출하고, 이를 기반으로 의미론적 제약을 반영한 입력값을 자동으로 생성한다. 기존 퍼징 도구가 무작위 바이트 스트림에 의존해 계약 로직을 충분히 탐색하지 못하는 문제를 해결하기 위해, ContractFuzzer는 파라미터별 유효 범위와 구조적 제약(예: 주소 형식, 토큰 양, 배열 길이 등)을 고려한 제네레이터를 설계하였다.
다음으로, EVM(Ethereum Virtual Machine) 레벨에서 런타임 로그를 수집하기 위해 가상 머신을 계측한다. 구체적으로, CALL, DELEGATECALL, SELFDESTRUCT 등 중요한 opcode에 훅을 삽입해 호출 관계, 가스 사용량, 상태 변화 등을 기록한다. 이러한 로그는 사후 분석 단계에서 테스트 오라클과 매핑되어 취약점 여부를 판단한다. 논문은 네 가지 주요 오라클을 정의한다. 첫째, 재진입(Reentrancy) 오라클은 동일 트랜잭션 내에서 동일 함수가 다중 호출되는 패턴을 탐지한다. 둘째, 권한 상승(Authorization) 오라클은 권한 검증이 누락된 함수 호출을 식별한다. 셋째, 금전 손실(Loss of Funds) 오라클은 계약 잔액이 비정상적으로 감소하거나 SELFDESTRUCT에 의해 파괴되는 경우를 포착한다. 넷째, 무한 루프 및 가스 고갈 오라클은 비정상적인 가스 소모 패턴을 감지한다.
실험에서는 이더스캔(Etherscan)에서 수집한 6,991개의 실제 배포 계약을 대상으로 48시간 이상 지속적인 퍼징을 수행하였다. 결과적으로 459건 이상의 취약점이 발견됐으며, 이 중 92%는 수동 검증을 통해 실제 취약으로 확인되었다. 특히 DAO 공격에 사용된 재진입 취약과 Parity 월렛의 초기화 취약을 정확히 재현했으며, 기존 정적 분석 도구가 놓친 미세한 권한 검증 결함도 탐지하였다.
성능 측면에서 ContractFuzzer는 평균 1초당 1,200개의 트랜잭션을 실행했으며, 로그 수집 오버헤드는 12% 이하에 머물렀다. 또한, 입력 제네레이션 단계에서 ABI 기반 타입 추론을 활용함으로써 무작위 퍼징 대비 3배 이상의 커버리지를 달성했다. 논문은 한계점으로 복잡한 다중 계약 상호작용과 오프체인 데이터 의존성을 완전히 모델링하지 못함을 언급하고, 향후 동적 심볼릭 실행과 머신러닝 기반 입력 최적화를 통해 커버리지를 더욱 확대할 계획을 제시한다.
이와 같이 ContractFuzzer는 스마트 계약의 실행 흐름을 정밀히 관찰하고, 실용적인 오라클을 통해 실질적인 보안 결함을 자동으로 드러내는 강력한 동적 분석 도구로 자리매김한다.
댓글 및 학술 토론
Loading comments...
의견 남기기