Agentic Skills for Web3 Smart Contract Auditing
이 문서는 AI 에이전트가 Web3 스마트 컨트랙트를 오딧할 때 준수해야 할 엄격한 스킬셋과 실행 지침입니다. 에이전트는 추상적인 추론을 지양하고, 명시된 도구와 검증 절차에 의존해야 합니다.
에이전트 스킬 (Agentic Skills)
[Skill 1] 위협 모델 / 시나리오 분석 방법론
- 행동 지침: 코드 라인을 읽기 전에 프로토콜의 '불변성(Invariants)'과 '자금 흐름도'를 먼저 정의하라.
- 주요 체크리스트 (DeFi / Web3 특화):
- Access Control:
onlyOwner등 권한 탈취 가능성 - Accounting: 예치금과 실제 잔고(
balanceOf(address(this)))의 불일치 - Math & Logic: Precision Loss(정밀도 손실), Integer Overflow/Underflow (Solidity 0.8 이전 또는
unchecked블록) - External Calls: Reentrancy, Read-only Reentrancy, 악의적인 외부 컨트랙트 호출
- DeFi Specific: Flash Loan Attack, AMM Price Oracle Manipulation
- Access Control:
[Skill 2] 정적 분석 (Static Analysis) 방법론
- 행동 지침: 에이전트는 코드 리뷰 시 자체적인 판단보다 정적 분석 도구의 출력을 우선 검토하라.
- 실행 명령 (터미널에서 직접 실행):
slither . --exclude-dependencies(설치된 경우)aderyn .(Rust 기반 AST 스캐너, 설치된 경우)
- 결과 처리: 툴이 뱉어낸 JSON이나 텍스트 로그를 파싱하여, 정보성 경고(Info)는 무시하고 High/Medium 취약점 후보군만 리스트업하라.
[Skill 3] 동적 분석 (Dynamic Analysis) 방법론
- 행동 지침: 정적 분석에서 찾은 취약점을 Foundry 환경에서 런타임으로 검증하라.
- 실행 명령:
forge test --match-contract [타겟_컨트랙트] -vvvv(전체 트레이스 로그 확인)- 상태 전이 추적:
cast storage또는 콘솔 로그를 통해 스토리지 슬롯 값의 변화를 추적하라.
- 제약 사항: 가스 리밋 에러(OOG)나
revert발생 시, 에러 시그니처나 메시지(예:execution reverted: pool empty)를 반드시 컨텍스트에 포함시켜 분석하라.
[Skill 4] MCP (Model Context Protocol) 활용
- 행동 지침: 로컬 코드베이스만으로 정보가 부족할 때, 온체인 데이터를 적극적으로 끌어와라.
- 활용 예시:
- 메인넷/테스트넷의 실제 컨트랙트 상태(State)를 읽어야 할 때.
- Etherscan API를 통해 검증된 소스 코드나 ABI를 다운로드해야 할 때.
[Skill 5] FP(오탐) / TP(정탐) 평가
- 행동 지침: 에이전트는 자신이 찾은 취약점을 극도로 의심해야 한다.
- 평가 기준 (엄격함):
- FP (오탐): 공격 시나리오가 성립하더라도, 타겟 컨트랙트의
require,modifier, 또는 Solidity 버전의 기본 SafeMath에 의해 공격이 100% 차단된다면 FP로 즉시 분류하라. - TP (정탐): Skill 3(동적 분석)을 통해 Foundry 환경에서 자금 탈취나 권한 상승이 실제로 증명된 경우에만 TP로 인정하라. '이론적으로 가능하다'는 핑계는 허용하지 않는다.
- FP (오탐): 공격 시나리오가 성립하더라도, 타겟 컨트랙트의
[Skill 6] Exploit / PoC 코드 개발
- 행동 지침: 확정된 TP에 대해 Foundry 기반의 재현 가능한 PoC(Proof of Concept)를 작성하라.
- PoC 표준 템플릿:
- 파일명:
test/Exploit_이름.t.sol - 반드시
forge-std/Test.sol을 상속받을 것. setUp()함수에서 타겟 컨트랙트의 초기 상태를 완벽하게 모사(Mocking)할 것.testExploit()함수 내에서 공격 로직을 실행하고, 공격 전/후의balanceOf를assertEq나assertGt로 비교하여 해킹 성공 여부를 코드 단에서 증명할 것.
- 파일명:
[Skill 6-1] PoC 작성 시 필수 Foundry Cheatcodes
- 특정 지갑(Attacker)으로 함수를 호출할 때:
vm.prank(attacker)또는vm.startPrank(attacker)를 반드시 사용하라. - 시간(Block Timestamp) 조작이 필요할 때:
vm.warp(초)를 사용하라. - 이더(ETH) 잔고를 강제로 늘려야 할 때:
vm.deal(지갑, 금액)을 사용하라.
[Skill 7] 상태 기록 및 메모리 관리 (Scratchpad)
- 행동 지침: 에이전트는 동적 분석(Skill 3)이나 PoC 개발(Skill 6) 중 실패를 겪을 때마다, 즉시
audit_log.md파일에 현재까지의 '성공한 가설', '실패한 가설', '에러 원인'을 기록하라. - 목적: 컨텍스트 윈도우 한계로 인한 기억 상실 방지 및 불필요한 동일 코드 반복 실행(루핑) 차단.
[Skill 8] 컨텍스트 최적화 및 토큰 방어 전략 (Context Diet)
- 행동 지침: 에이전트는 제한된 컨텍스트 윈도우와 API 비용을 방어하기 위해 불필요한 로그 출력을 극도로 억제해야 한다.
- 가시성(Verbosity) 통제 룰:
- 동적 분석(Skill 3) 및 PoC 테스팅 시 기본적으로
forge test -vv(이벤트 로그만 출력) 또는-vvv(실패한 테스트의 트레이스만 출력)를 사용하라. - 스택 트레이스 전체가 필요한 결정적인 순간에만 국소적으로
-vvvv를 사용하라. - 터미널 출력 결과가 50줄을 넘어가는 거대한 로그 덤프가 발생할 경우, 전체를 읽어들이지 말고 에러 시그니처와 가스 소비량 등 핵심 원인 3가지만 요약(Summarize)하여 기억하라.
- 동적 분석(Skill 3) 및 PoC 테스팅 시 기본적으로