Web3 보안사고 동향과 AI 기반 스마트 컨트랙트 취약점 탐지 자동화
Team Security
단발성 대형 사고(Bybit $1.45B)를 제외한 동일 기준 비교 — 실질 손실 +28% 증가
손실 금액 상위 3대 유형 — 지갑 탈취와 피싱이 코드 취약점을 압도
공격 한 건이 남기는 평균 피해 규모의 격차
코드 취약점의 손실 비중은 줄고 인프라·운영 침해는 높은 손실 비중을 유지
노드 인프라(RPC) 장악으로 자금 탈취.
관리자 키 장악으로 허위 담보 생성·자산 인출.
운영 이슈와 코드 취약점은 대응 방식이 다르다
이 컴포넌트가 보관·발행·정산하는 자산과 권한을 먼저 고정한다.
외부 호출 가능한 함수와 호출자, 입력값, 선행 조건을 연결한다.
읽기·쓰기 슬롯과 자산 흐름을 호출 전후 순서로 기록한다.
호출 대상, 콜백 가능성, 반환값 신뢰 여부를 분리해 적는다.
각 상태 전이가 지켜야 할 규칙과 실제 방어 코드를 매핑한다.
selector·file:line을 남기고 모르는 항목은 완료 처리하지 않는다.
관리 상태와 자금 이동은 허용된 주체만 변경할 수 있어야 한다.
실제 자산 이동과 내부 share·debt 회계가 같은 변화를 반영해야 한다.
입금·인출·청산 이후에도 프로토콜의 지급 의무가 담보되어야 한다.
종료·정산된 상태를 되돌리거나 동일 권리를 두 번 소비할 수 없어야 한다.
한 사용자의 입력이 다른 사용자의 담보·지분·청구권을 침범하면 안 된다.
외부 호출과 재진입이 검증·회계·상태 전이 순서를 우회하지 못해야 한다.
entrypoint · state change · external call · invariant · file:line
같은 컴포넌트를 권한·회계·수명주기 등 서로 다른 관점으로 재검토
공격자 제어 입력이 방어 조건을 지나 위험한 상태 변화에 도달하는 경로
외부 호출에서 위험 지점까지 실제 실행 경로가 존재하는가?
공격자가 입력값 또는 필요한 선행 상태를 만들 수 있는가?
권한·범위·수명주기 검사가 없거나 우회 가능한가?
성공 시 자산·권한·가용성의 구체적 손실이 발생하는가?
같은 root cause와 sink를 공유하는 후보를 하나로 묶는다.
모든 gate를 통과한 후보만 독립 검증자에게 전달된다.
candidate ID · 실패한 gate · 반박 근거 · file:line · 재검토 조건을 기록한다. 같은 오탐은 다음 라운드에서 자동으로 제외되며, 코드나 상태가 바뀐 경우에만 다시 연다.
분석한 runtime bytecode의 길이·Keccak hash를 실행 대상과 대조한다.
chain ID·block·snapshot을 고정해 동일 조건에서 반복 실행한다.
후보 생성자와 다른 검증자가 공개 entrypoint만으로 공격을 재현한다.
실행 전후 balance·storage·event 차이로 invariant 파괴를 수치화한다.
가드가 적용된 입력·수정본·정상 경로에서는 같은 효과가 발생하지 않아야 한다.
실제 취약점 재현 및 검증 과정