무한 민트 공격
Definition pending verification.
종종 스마트 계약 맥락에서 '민트 글리치' 또는 '재진입 취약점'이라고도 불리는 무한 민트 공격은 공격자가 계약의 로직을 조작하여 임의로 많은 양의 토큰이나 자산을 민트하는 일종의 익스플로잇입니다. 이는 일반적으로 탈중앙화 금융(DeFi) 프로토콜, 특히 토큰 민팅, 대출 또는 담보화 메커니즘과 관련된 프로토콜에서 발생합니다. 핵심 취약점은 종종 계약이 외부 호출을 처리하거나 트랜잭션 중에 내부 상태를 업데이트하는 방식에 있습니다. 예를 들어, 계약은 사용자가 담보를 예치하고, 해당 담보를 기반으로 새 토큰을 민트한 다음, 단일 트랜잭션 내에서 담보를 인출할 수 있도록 허용할 수 있습니다. 계약이 담보 예치를 확인하거나 내부 상태를 올바르게 업데이트하기 전에 새 토큰을 민트하는 경우, 공격자는 동일한 트랜잭션 컨텍스트 내에서 민팅 함수를 여러 번 트리거할 수 있습니다. 각 호출은 동일한 초기(또는 불충분하게 확인된) 담보를 기반으로 더 많은 토큰을 민트하여 '무한'하거나 크게 부풀려진 양의 토큰을 허공에서 생성할 수 있습니다. 이는 토큰의 가치를 떨어뜨리고 프로토콜의 준비금을 고갈시킬 수 있습니다. 이러한 공격을 방지하려면 checks-effects-interactions 패턴 사용, 재진입 가드, 외부 호출 전 올바른 상태 업데이트, 철저한 감사 등 신중한 스마트 계약 설계가 필요합니다.
graph LR
Center["무한 민트 공격"]:::main
Pre_logic["logic"]:::pre --> Center
click Pre_logic "/terms/logic"
Rel_advanced_propulsion_systems["advanced-propulsion-systems"]:::related -.-> Center
click Rel_advanced_propulsion_systems "/terms/advanced-propulsion-systems"
Rel_consciousness_simulation_hardware["consciousness-simulation-hardware"]:::related -.-> Center
click Rel_consciousness_simulation_hardware "/terms/consciousness-simulation-hardware"
Rel_cognitive_enhancement["cognitive-enhancement"]:::related -.-> Center
click Rel_cognitive_enhancement "/terms/cognitive-enhancement"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 5살도 이해할 수 있게 설명
동전 하나를 넣으면 쿠키 하나를 주는 마법 쿠키 기계가 있다고 상상해 보세요. 기계가 고장 났다면, 동전 하나를 넣고 쿠키를 받은 다음, *그 쿠키*를 사용하여 기계를 속여 동전을 하나 더 넣은 것처럼 생각하게 하여 무한한 쿠키를 얻을 수 있습니다!
🤓 Expert Deep Dive
무한 민트 공격은 스마트 계약의 상태 전환 로직의 결함을 악용하며, 종종 재진입 또는 외부 호출의 잘못된 처리와 관련이 있습니다. 일반적인 패턴은 다음과 같은 함수를 포함합니다: 1) 사용자 입력(예: 담보)을 수락합니다. 2) 외부 호출(예: 콜백을 트리거하는 ERC777 토큰 계약으로)을 수행합니다. 3) 내부 상태를 업데이트합니다(예: 토큰 민트, 잔액 업데이트). 외부 호출이 상태가 업데이트되기 전(예: 담보가 완전히 계정 처리되거나 잔액이 조정되기 전)에 원래 함수로 재진입 호출을 트리거하는 경우, 공격자는 이를 악용할 수 있습니다. 예를 들어, 대출 프로토콜에서 사용자가 담보 C를 예치하고 mint(loan_amount)를 호출하면, 내부적으로 외부 토큰 계약이 호출됩니다. 이 토큰 계약의 fallback 함수는 mint 함수로 재진입하여, 첫 번째 mint 호출이 상태 업데이트를 완료하기 전에 공격자가 동일한 담보 C를 사용하여 다시 민트할 수 있도록 합니다. Checks-Effects-Interactions 패턴이 중요합니다: 조건을 확인하고(Checks), 내부 상태를 업데이트하며(Effects), 외부 계약과 상호 작용합니다(Interactions). 재진입 가드(뮤텍스)는 동일한 트랜잭션 컨텍스트 내에서 재귀 호출을 방지할 수도 있습니다. ERC777의 재진입 기능이나 결함이 있는 ERC20 구현으로 인해 취약점이 발생할 수도 있습니다.