1 / 22

On-Chain Threat Hunting

Web3 보안사고 동향과 AI 기반 스마트 컨트랙트 취약점 탐지 자동화

Team Security

OUR TEAM · SECURITY RESEARCH

팀 소개

Security Researcher 01
TEAM MEMBER 01
8기 강성원
Security Researcher
Security Researcher 02
TEAM MEMBER 02
8기 지영빈
Security Researcher

2026 상반기 Web3 보안사고 비교

핵심 요약 · EXECUTIVE SUMMARY

상반기 보안사고 비교

총 손실액
$1.32B
13억 1,568만 달러 · 344건의 사고
최대 단일 사고
$291M
Kelp DAO · RPC(인프라) 침해
북한 연계 추정 손실
~66%
약 $643M · 상반기 전체 손실 중
동결·회수액
$115M
전체 손실액 대비 약 8.7%
전년 대비 · YEAR-OVER-YEAR

전년 대비 실질 손실

단발성 대형 사고(Bybit $1.45B)를 제외한 동일 기준 비교 — 실질 손실 +28% 증가

H1 2025
Bybit 제외 · 조정 기준
$1.03B
H1 2026
344건 · 실질 손실
$1.32B ▲ +28%
제외된 이상치 (H1 2025)
$1.45B
Bybit 단일 사고 — 2025년 표면 총액 $2.47B의 약 59%
실질 손실 비교
$1.03B→$1.32B
 
2분기 사고 건수
145→194건
전년 동기 대비 +34% 급증
공격 유형별 손실 · BY ATTACK VECTOR

공격 유형별 손실

손실 금액 상위 3대 유형 — 지갑 탈취와 피싱이 코드 취약점을 압도

지갑 탈취
개인키·서명 인프라 · 33건
$444.5M
피싱
사회공학 · 63건
$366.3M
코드 취약점
스마트컨트랙트 · 204건
$151.6M
건당 피해액 · LOSS PER INCIDENT

건당 평균 피해

공격 한 건이 남기는 평균 피해 규모의 격차

인프라 · 지갑 탈취
$13.5M
사고 건당 평균 피해
($444.5M ÷ 33건)
18x
건당 피해
격차
코드 취약점
$0.74M
사고 건당 평균 피해
($151.6M ÷ 204건)
전년 대비 유형 전환 · THE STRUCTURAL SHIFT

보안 위협의 구조적 전환

코드 취약점의 손실 비중은 줄고 인프라·운영 침해는 높은 손실 비중을 유지

코드 취약점 CONTRACT

손실액 (H1 2025)~$263M
손실액 (H1 2026)$151.6M
사고 건수 (H1 2026)204건
금액 기준 비중▼ 감소

인프라·운영 침해 INFRASTRUCTURE

손실 비중 (H1 2025)~80%
손실 비중 (H1 2026)~76%
사고 건수 비중~15%
손실 집중▲ 높음
주요 사고 · LARGEST INCIDENTS

2026년 주요 사고

Kelp DAO2026. 04
$291M
인프라RPC 엔드포인트 침해

노드 인프라(RPC) 장악으로 자금 탈취.

Drift Protocol2026. 04
$285M
인프라관리자 키 탈취

관리자 키 장악으로 허위 담보 생성·자산 인출.

핵심 시사점 · KEY TAKEAWAYS

핵심 시사점

01
표면은 감소, 실질은 +28%
총 손실 $1.32B / 344건. Bybit 단일 사고를 제외하면 오히려 늘었고 사고 건수는 사상 최다.
02
대규모 손실은 운영 보안 이슈에 집중
인프라·개인키·서명 인프라 침해가 원인. 코드 취약점의 금액 비중은 ~16%뿐이다.
03
코드 취약점은 자주 발생
건수는 1위(204건)지만 건당 피해는 인프라 공격의 1/18 수준.
우리의 자리 · WHERE WE CAN HELP

핵심 시사점

운영 이슈와 코드 취약점은 대응 방식이 다르다

운영

손실 76%
사고 건수로는 15%
  • 개인키 보관 · 멀티시그 정책
  • RPC · 배포 인프라
  • 운영 권한과 승인 절차
조직별 권한·키·인프라 관리 체계가 핵심

코드

사고 59%
204건 · 손실로는 11.5%
  • 코드가 공개되어 있거나, 바이트코드 디컴파일을 통해 분석 가능
  • 규칙 기반으로 분석 기준 표준화
  • 실행 가능한 증거로 취약점 여부 확인
반복 가능한 분석·검증 영역
코드 취약점은 자동화로 기여할 수 있지 않을까?

Audit Workflow

온체인 데이터 수집

00 Chain watch deployments 01 Bytecode on every deploy 02 Decompile bytecode → source 03 Corpus one dir per day → Target picked for a hunt deploy new contract on chain 0x6080… runtime decompiled .sol 2026-08-31/ 2026-09-01/ 2026-09-02/ today grows daily, never rewritten target one day, or one address

Analysis 산출물

component.md · 다음 단계가 그대로 재사용하는 구조화 증거

component.mdREQUIRED SCHEMA
componentVault
assetscollateral · shares · debt
entrypointscaller · params · preconditions
trust_boundariesadmin · oracle · external caller
state_changesreads · writes · transitions
external_callstarget · callback · returndata
invariantsrule · enforcement · exception
evidenceselector · file:line · confidence
open_questionsunknowns · complete: true|false
01 · ASSET

보호 대상

이 컴포넌트가 보관·발행·정산하는 자산과 권한을 먼저 고정한다.

02 · ENTRY

진입점

외부 호출 가능한 함수와 호출자, 입력값, 선행 조건을 연결한다.

03 · STATE

상태 전이

읽기·쓰기 슬롯과 자산 흐름을 호출 전후 순서로 기록한다.

04 · CALL

외부 상호작용

호출 대상, 콜백 가능성, 반환값 신뢰 여부를 분리해 적는다.

05 · RULE

Invariant 연결

각 상태 전이가 지켜야 할 규칙과 실제 방어 코드를 매핑한다.

06 · PROOF

근거와 미확인

selector·file:line을 남기고 모르는 항목은 완료 처리하지 않는다.

Invariant 규칙

모든 후보는 “어떤 보안 속성이 깨지는가”를 먼저 명시

INV-01 · AUTHORIZATION

권한 보존

privileged write ⇒ authorized caller

관리 상태와 자금 이동은 허용된 주체만 변경할 수 있어야 한다.

INV-02 · CONSERVATION

가치 보존

assets in − assets out = Δaccounting

실제 자산 이동과 내부 share·debt 회계가 같은 변화를 반영해야 한다.

INV-03 · SOLVENCY

지급 능력

available assets ≥ user liabilities

입금·인출·청산 이후에도 프로토콜의 지급 의무가 담보되어야 한다.

INV-04 · LIFECYCLE

상태 순서

closed → cannot reopen / nonce ↑ once

종료·정산된 상태를 되돌리거나 동일 권리를 두 번 소비할 수 없어야 한다.

INV-05 · ISOLATION

사용자 격리

actor A ≠ mutate or claim state(B)

한 사용자의 입력이 다른 사용자의 담보·지분·청구권을 침범하면 안 된다.

INV-06 · EXTERNAL CALL

호출 안전성

effects locked before callback

외부 호출과 재진입이 검증·회계·상태 전이 순서를 우회하지 못해야 한다.

Attack Vector 생성

구조화 증거 × 보안 관점 → 검증 가능한 공격 가설

INPUT 01

Analysis Evidence

entrypoint · state change · external call · invariant · file:line

→
TRANSFORM 02

Security Lens

같은 컴포넌트를 권한·회계·수명주기 등 서로 다른 관점으로 재검토

→
OUTPUT 03

Attack Vector

공격자 제어 입력이 방어 조건을 지나 위험한 상태 변화에 도달하는 경로

Security lenses

Authorizationcaller · role · signature
Accountingasset · share · debt
Lifecycleopen · settle · close
Oraclefreshness · decimals · bounds
External Callcallback · returndata
Upgradeslot · initializer · admin

Candidate required fields

source공격자가 제어하는 입력
entrypoint외부에서 도달하는 함수
preconditions공격에 필요한 온체인 상태
broken_rule깨지는 invariant ID
sink위험한 write 또는 transfer
impact자산·권한·가용성 변화
evidenceselector · file:line · trace
counterevidence후보를 반박할 수 있는 방어

후보 필터링

첫 실패 지점에서 기각 · 통과 근거와 반박 근거를 함께 보존

GATE 01

Reachability

외부 호출에서 위험 지점까지 실제 실행 경로가 존재하는가?

FAIL → unreachable
GATE 02

Control

공격자가 입력값 또는 필요한 선행 상태를 만들 수 있는가?

FAIL → no producer
GATE 03

Guard

권한·범위·수명주기 검사가 없거나 우회 가능한가?

FAIL → guarded
GATE 04

Impact

성공 시 자산·권한·가용성의 구체적 손실이 발생하는가?

FAIL → no impact
GATE 05

Deduplicate

같은 root cause와 sink를 공유하는 후보를 하나로 묶는다.

MERGE → same group_key

검증 대기열

모든 gate를 통과한 후보만 독립 검증자에게 전달된다.

6 vectors → 4 survive → 3 final

ledger/rejected.md

candidate ID · 실패한 gate · 반박 근거 · file:line · 재검토 조건을 기록한다. 같은 오탐은 다음 라운드에서 자동으로 제외되며, 코드나 상태가 바뀐 경우에만 다시 연다.

PoC 인증

finder ≠ verifier · 실행 결과와 반례가 모두 남아야 confirmed

CHECK 01

코드 동일성

분석한 runtime bytecode의 길이·Keccak hash를 실행 대상과 대조한다.

CHECK 02

상태 고정

chain ID·block·snapshot을 고정해 동일 조건에서 반복 실행한다.

CHECK 03

독립 재현

후보 생성자와 다른 검증자가 공개 entrypoint만으로 공격을 재현한다.

CHECK 04

영향 증명

실행 전후 balance·storage·event 차이로 invariant 파괴를 수치화한다.

CHECK 05

Negative Control

가드가 적용된 입력·수정본·정상 경로에서는 같은 효과가 발생하지 않아야 한다.

validation-receipt.json

artifactaddress · codehash · byte length
environmentchainId · block · snapshot ID
executiontx hash · calldata · success
evidencetrace · events · state delta
controlsnegative test · expected revert
reproduceone command · deterministic result
5 / 5 PASS → CONFIRMED
하나라도 불충분하면 POC-FAIL 또는 DEFERRED

Analysis 산출물

source → component.md → complete gate

INPUT decompiled source contract-01.sol ONE FILE PER COMPONENT component.md assetscollateral · shares · debt무엇을 보호하는가 trust_boundariesadmin · oracle · caller누구를 신뢰하는가 entrypointscaller · params · guard어디서 들어오는가 state_changesreads · writes · order무엇이 바뀌는가 external_callstarget · callback · return외부와 어떻게 연결되는가 invariantsrule · guard · exception무엇이 항상 참이어야 하는가 evidenceselector · file:line주장의 근거 open_questionsunknown · assumption아직 모르는 것 Complete?required field 전부 존재 ✓ surface mapentrypoint ↔ state ↔ external call ✓ invariant seedsasset · trust · lifecycle 규칙 ✓ evidence indexselector · file:line · confidence complete:false → 빈 필드의 근거를 다시 수집

Invariant 규칙

asset + trust + state transition → must_hold

ANALYSIS INPUT Assets담보 · 지분 · 부채 Trust Boundarycaller · admin · oracle State Transitionbefore → after INVARIANT FAMILIES Authorizationwrite ⇒ allowed권한 없는 상태 변경 금지 Conservationasset Δ = book Δ실자산과 회계 변화 일치 Solvencyassets ≥ liabilities항상 지급 의무 충족 Lifecycleclosed ↛ reopen정산·종료 순서 보존 IsolationA ↛ state(B)사용자 상태 간 침범 금지 External Calllock before call콜백 전 효과·잠금 완료 Invariant record rule_id · must_hold · enforced_by · violation_signal · evidence ACCEPTANCE GATE 규칙마다 3가지를 확인 01 모든 정상 경로에서 참 02 방어 코드가 file:line으로 연결 03 위반 시 관찰 가능한 상태 차이 하나라도 없으면 candidate 입력으로 사용하지 않음 근거 불충분 → component.md의 open_questions로 되돌림

Attack Vector 생성

component evidence × security lens → vector.md

COMPONENT EVIDENCE component.md entrypoint + caller state read / write external call / callback invariant + evidence 근거가 없는 추론은 입력에서 제외 SECURITY LENSES Authorizationrole · signature · caller Accountingasset · share · debt Lifecycleopen · settle · close Oraclefreshness · decimals · bounds External Callcallback · returndata Upgradeslot · init · admin Cross product 각 evidence를 모든 lens로 다시 질문해 누락 관점을 줄인다 STRUCTURED HYPOTHESIS vector.md source공격자 제어 입력 entrypoint외부에서 도달하는 함수 preconditions필요한 온체인 상태 broken_rule위반되는 invariant ID sink위험한 write / transfer impact자산·권한·가용성 변화 evidenceselector · file:line · trace counterevidence후보를 반박하는 방어 source → missing guard → sink → invariant break

후보 필터링

6 vectors → gate별 기각 → 3 final

INPUT6 vectorsrequired fields complete GATE 01Reachabilityentry → sink 경로?6 → 5 GATE 02Control공격자가 만들 수 있나?5 → 4 GATE 03Guard검사 우회가 가능한가?4 → 4 GATE 04Impact구체적 손실이 있는가?4 → 4 GATE 05Deduplicate같은 root cause?4 → 3 OUTPUT3final unreachable실행 경로 없음 no producer선행 상태 생성 불가 guarded방어 조건 우회 불가 no impact관찰 가능한 손실 없음 same group_key동일 원인으로 병합 ledger/rejected.md candidate ID · failed gate · counterevidence · file:line · reopen condition

PoC 인증

independent verifier · 동일 코드·동일 상태·반례까지 확인

BOUND INPUTS final/candidate.mdpath · invariant · impact Runtime identityaddress · byte length · codehash State snapshotchainId · block · snapshot ID FINDER ≠ VERIFIER Independent verification CHECK 01Code identity분석 코드 = 실행 코드 CHECK 02State binding같은 블록·스냅샷 CHECK 03Public execution공개 entrypoint로 재현 CHECK 04Impact deltabalance·storage 전후 비교 CHECK 05Negative control가드·정상 입력에서는 동일 효과가 없어야 함 EVIDENCE BUNDLE validation-receipt.json artifactaddress · codehash executiontx hash · calldata tracecalls · events · gas state_deltabefore → after controlsnegative test result reproduceone deterministic command 5 / 5 PASSCONFIRMED ANY FAILPOC-FAIL
검증 시연 · POC DEMO

PoC 시연

실제 취약점 재현 및 검증 과정

전체 분석 파이프라인

Scope → Analysis → Attack → Filter → Verify

00 Scope plan artifacts impact bucket 01 Analysis per component · medium coverage 02 Attack component × lens · xhigh required fields 03 Filter checklist + 4 conditions first hit stops 04 Verify cross-assigned · fork defect mutation target checklist.md 9 rules surface.md LOC · map Router.md Claims.md Vault.md Oracle.md complete: false → rerun Oracle.md Upgrade.md vector-1 Router·boundary vector-2 Claims·sibling vector-2 unreachable vector-3 Vault·asymmetry vector-4 Vault·lifecycle vector-5 Oracle·backward vector-5 invalid class vector-6 Upgrade·slot final/ 01 final/ 02 v3 + v4 same group_key final/ 03 finder ≠ verifier ✓ confirmed-1 ✓ confirmed-2 poc-fail no producer vector-2 · vector-5 rejected ledger/rejected.md what died · which check · file:line next round exclusions

후보 검증 및 피드백

Filter → Verify → Feedback · 6 vectors → 4 survive → 3 final → 2 confirmed

프로젝트 결과 · RESULTS

성과

3건
취약점 제보
High · Medium · Low
외부 검증 완료
3건
보안 아티클
Web3 보안 사고 분석
리서치 결과 공유

Vulnerability Reports

Confirmed vulnerability reports Valid vulnerability finding

Security Articles

Supported by Lambda256 CLAIR
Published security articles Published July Web3 security incident analysis

Q&A