재진입 공격이란 무엇입니까? 스마트 계약 위험(2026년)
— By Tony Rabbit in Tutorials

재진입 공격은 상태가 업데이트되기 전에 함수를 반복적으로 호출하여 자금을 빼내기 위해 스마트 계약 취약점을 악용합니다. 방법을 알아보세요.
빠르게 변화하는 탈중앙화 금융(DeFi)의 세계에서 스마트 계약은 혁신의 중추이며 전례 없는 효율성으로 계약 및 거래를 자동화합니다. 그러나 변경 불가능하다는 점은 모든 취약성이 치명적인 결과를 초래할 수 있음을 의미하기도 합니다. 가장 악명 높고 지속적인 위협 중에는 재진입 공격, 수년 동안 암호화폐 세계를 괴롭혀 수십억 달러의 손실을 초래하고 오늘날 우리가 볼 수 있는 보안 관행을 근본적으로 형성한 정교한 공격입니다.
재진입을 이해하는 것은 개발자들만을 위한 것이 아닙니다. 이는 유동성 공급자부터 DEXTools에서 새로운 쌍을 추적하는 거래자에 이르기까지 DeFi 프로토콜과 상호 작용하는 모든 사람에게 중요합니다. 이 가이드에서는 재진입 공격이 무엇인지, 작동 방식, 역사적 영향, 2026년 이후 디지털 자산을 보호하는 필수 방어 방법을 자세히 설명합니다.

재진입 공격이란 정확히 무엇입니까?
재진입 공격의 핵심은 스마트 계약의 중요한 타이밍 취약점을 악용하는 것입니다. 특히 계약이 외부 주소로 자금을 보내는 시점과 해당 거래를 반영하기 위해 내부 상태를 업데이트하는 시점 사이의 짧은 기간을 목표로 합니다. 공격자는 이러한 공백을 활용하여 취약한 함수를 반복적으로 호출하여 계약서에 초기 출금이 등록되기 전에 자금을 소모합니다.
음료를 제공하지만 잠시 후에 재고 수만 업데이트하는 자동판매기를 상상해 보세요. 그 지연 시간 동안 분배 버튼을 여러 번 빠르게 누를 수 있다면 한 잔 가격으로 여러 잔의 음료를 얻을 수 있습니다. 재진입 공격은 비슷한 원리로 작동하지만 ETH나 토큰과 같은 디지털 자산을 사용합니다.
재진입 공격이 전개되는 방식
일반적인 시나리오에는 공격자가 자신의 악성 스마트 계약을 배포하는 경우가 포함됩니다. 그런 다음 이 공격자 계약은 일반적으로 철회 기능을 호출하여 취약한 스마트 계약과 상호 작용합니다. 취약한 계약이 공격자 계약의 주소로 ETH를 보내려고 시도하면 중요한 메커니즘인 공격자 계약의 폴백 기능이 시작됩니다.
fallback 함수는 특정 함수 호출 없이 컨트랙트가 일반 ETH를 수신하거나, 존재하지 않는 함수가 호출될 때 실행되는 Solidity의 특수 함수입니다. 재진입 공격에서 공격자의 폴백 기능은 대상 계약의 취약한 철회 기능을 즉시 호출하도록 프로그래밍됩니다. 이 재귀 호출은 취약한 계약이 사용자의 잔액이나 총 자금 공급을 업데이트할 기회를 갖기 전에 발생합니다.
이 루프는 계약이 비어 있거나 가스 한도에 도달할 때까지 각 재귀 호출로 취약한 계약에서 자금을 빼내면서 계속됩니다. 공격자는 기본적으로 오래된 상태 정보를 이용하여 동일한 초기 요청을 여러 번 철회하게 됩니다.
악명 높은 DAO 해킹과 그 유산
가장 유명하고 영향력 있는 재진입 공격은 2016년에 DAO(Decentralized Autonomous Organization)를 표적으로 발생했습니다. 이 획기적인 프로젝트는 분산형 거버넌스와 투자에 대한 초기의 야심찬 실험이었습니다. 그러나 스마트 계약에는 재진입 취약점이 포함되어 있었습니다.
공격자는 이 결함을 악용하여 DAO 계약에서 약 360만 ETH를 체계적으로 빼냈습니다. 도난의 엄청난 규모는 초기 이더리움 커뮤니티를 통해 충격파를 보냈습니다. 그 여파는 너무 심각해서 결국 논쟁의 여지가 있는 이더리움 블록체인의 하드 포크로 이어져 해킹을 뒤집은 이더리움(ETH)과 해킹을 포함한 원래 체인을 보존한 이더리움 클래식(ETC)이라는 두 개의 서로 다른 체인을 만들었습니다.
DAO 해킹은 재진입 공격의 파괴적인 잠재력을 극명하게 일깨워주는 역할을 하며 강력한 스마트 계약 보안 관행의 중요한 필요성을 강조했습니다. 이 근본적인 사건이 있은 지 수년이 지난 오늘날에도 재진입은 DeFi 공격의 주요 원인으로 남아 있으며 다양한 프로토콜 전반에 걸쳐 10억 달러 이상의 역사적 손실을 초래하고 있습니다.

재진입 공격 유형
핵심 원칙은 동일하지만 재진입 공격은 약간 다른 형태로 나타날 수 있습니다.
- 단일 기능 재진입: 이는 공격자가 동일한 계약 내에서 동일한 취약한 기능(예: 철회 기능)을 반복적으로 호출하는 고전적인 유형입니다.
- 교차 기능 재진입: 이 더 복잡한 변종에서는 공격자가 상태 변수를 수정하는 함수 하나를 호출한 다음 해당 상태 변수가 적절하게 업데이트되기 전에 해당 상태 변수의 오래된 값에 의존하는 다른 취약한 함수를 즉시 호출할 수 있습니다.
- 교차 계약 재진입: 이 유형에는 여러 계약이 포함됩니다. 공격자는 계약 A의 취약점을 악용하여 계약 B의 상태를 조작할 수 있으며, 이로 인해 계약 A 또는 다른 관련 계약의 재진입이 허용됩니다. 이는 구성 요소가 상호 연결된 복잡한 DeFi 프로토콜에서 자주 발생합니다.
재진입 공격 방어
지속적인 위협을 고려하여 스마트 계약 개발자와 감사자는 재진입에 대한 몇 가지 강력한 방어 메커니즘을 개발했습니다. 보안 DeFi 프로토콜에서는 이러한 전략을 구현하는 것이 협상 불가능합니다.
- 확인-효과-상호작용 패턴: 이것이 가장 기본적인 방어라고 할 수 있습니다. 이는 스마트 계약 기능이 특정 순서를 따라야 함을 나타냅니다. 먼저 필요한 모든 확인(예: 보낸 사람 인증, 잔액 확인)을 수행합니다. 둘째, 잔액 업데이트와 같은 모든 상태 변경(효과)을 적용합니다. 그런 다음에만 다른 계약이나 주소에 대한 외부 호출(상호작용)을 수행합니다. 자금을 보내기 전에 상태를 업데이트하면 재진입 기간이 사라집니다.
- 재진입 가드 뮤텍스 수정자: OpenZeppelin과 같은 라이브러리는 다음과 같은 강력한 솔루션을 제공합니다.
nonReentrant수정자. 이 수정자는 뮤텍스(상호 배제) 잠금 역할을 합니다. 으로 표시된 함수의 경우nonReentrant가 호출되면 플래그가 설정되어 초기 실행이 완료될 때까지 해당 함수(또는 동일한 가드로 보호되는 다른 함수)에 대한 추가 호출을 방지합니다. 재진입 호출이 실행을 시도하면 단순히 되돌려집니다. - 풀오버푸시 결제: 계약이 자동으로 사용자의 주소로 자금을 푸시하는 대신, 보다 안전한 패턴은 사용자가 자금을 '인출'할 수 있도록 하는 것입니다. 이는 계약이 각 사용자에게 지불해야 할 금액을 기록하고 사용자가 발생한 잔액을 인출하기 위해 별도의 거래를 시작한다는 것을 의미합니다. 이 접근 방식은 계약에 의해 시작된 외부 호출과 관련된 공격 표면을 크게 줄입니다.
- 전문 스마트 계약 감사: 코드 수준 방어는 아니지만 전문 감사는 필수적인 보안 계층입니다. 독립 보안 회사는 스마트 계약 코드에서 복잡한 재진입 패턴, 논리 결함 및 기타 잠재적인 악용을 포함한 취약점을 꼼꼼하게 검토합니다. 특히 배포 전과 대대적인 업그레이드 후에 정기적인 감사는 DeFi 프로토콜의 무결성을 유지하는 데 중요합니다.
스마트 계약 보안의 미래
DeFi 생태계가 계속 발전함에 따라 공격 및 방어 방법도 발전하고 있습니다. 재진입은 여전히 심각한 위협으로 남아 있지만, DAO 해킹 이후 개발자가 사용할 수 있는 집단적 지식과 도구는 상당히 성숙해졌습니다. 보안 코딩 관행에 대한 강조, 감사 라이브러리의 광범위한 채택, 공식 검증의 중요성 증가는 모두 보다 탄력적인 블록체인 환경에 기여하고 있습니다.
사용자는 이러한 위험과 이를 완화하기 위해 취해진 조치를 이해하는 것이 필수적입니다. 새로운 프로토콜과 상호 작용하기 전에 항상 실사를 수행하고, 감사 보고서를 확인하고, 자금 처리 방식의 핵심 메커니즘을 이해하십시오. DEXTools와 같은 플랫폼은 프로젝트 활동 및 토큰 상태에 대한 귀중한 통찰력을 제공하지만 기본적인 보안 지식은 여전히 최고의 방어입니다.
스마트 계약 취약점과의 전쟁이 진행 중이지만 지속적인 교육과 강력한 보안 조치의 구현을 통해 우리는 보다 안전하고 신뢰할 수 있는 분산형 미래를 공동으로 구축할 수 있습니다. 재진입은 역사적 착취일 수 있지만 그 교훈은 항상 생생합니다.
자주 묻는 질문
재진입 공격이란 간단히 말하면?
재진입 공격은 계약이 잔액을 업데이트할 기회를 갖기 전에 공격자가 스마트 계약의 출금 기능을 반복적으로 호출하여 단일 요청에서 자금을 여러 번 효과적으로 소모하는 것입니다.
재진입 공격과 관련된 유명한 해킹은 무엇입니까?
2016년 DAO 해킹은 재진입 공격을 사용하여 약 360만 ETH를 소모한 것으로 유명하며, 이로 인해 Ethereum과 Ethereum Classic 블록체인이 분리되었습니다.
스마트 계약을 재진입 공격으로부터 어떻게 보호할 수 있나요?
주요 방어에는 검사-효과-상호작용 패턴(외부 호출 전 상태 업데이트), 재진입 가드 뮤텍스 수정자(예: OpenZeppelin의 nonReentrant), 풀오버-푸시 결제 시스템 및 전문 스마트 계약 감사가 포함됩니다.
재진입 공격이 DeFi에서 여전히 위협인가요?
예, 고급 보안 조치에도 불구하고 재진입은 여전히 DeFi 공격의 주요 원인으로 남아 있으며, 역사적으로 복잡한 상호 작용 및 감독으로 인해 10억 달러 이상의 손실을 입혔습니다.
재진입 공격에는 어떤 유형이 있나요?
유형에는 단일 기능 재진입(동일한 기능 호출), 교차 기능 재진입(다른 기능 간에 상태 활용) 및 교차 계약 재진입(여러 개의 상호 연결된 계약 관련)이 포함됩니다.