본문 바로가기
카테고리 없음

Reentrancy, Overflow, Access Control 구조적 취약점 해설

by zpdlzpdlkk 2025. 6. 21.

디파이(DeFi) 생태계의 성장과 함께 가장 빈번하게 발생하는 보안 문제는 바로 스마트컨트랙트의 구조적 취약점입니다. 탈중앙화 금융은 코드로 모든 자산과 거래를 관리하기 때문에, 코드 한 줄의 실수가 수백억 원 규모의 손실로 이어질 수 있습니다. 본 글에서는 특히 실전에서 자주 등장하고 실제 해킹 사고로 이어진 세 가지 대표적 취약점인 Reentrancy(재진입), Overflow/Underflow(정수 오버플로우), Access Control(접근제어 실패)에 대해 사용자 경험 기반으로 상세히 해설합니다.

1Reentrancy(재진입) 취약점: 반복 호출로 인한 자금 탈취

Reentrancy(재진입)는 스마트컨트랙트가 외부 컨트랙트에 호출을 보내고, 그 외부 컨트랙트가 다시 원래 컨트랙트를 호출하는 구조에서 발생합니다. 이때 상태 변경 이전에 재호출이 발생하면, 공격자는 동일 로직을 반복 실행해 자산을 반복해서 인출할 수 있습니다.

실제 사고 사례:
- 2016년 DAO 해킹: 이더리움 역사상 가장 유명한 해킹 사례. 재진입 버그로 약 6000만 달러 규모 ETH 탈취 - 2022년 CREAM Finance 사고: 플래시론과 재진입 조합으로 1.3억 달러 탈취

실무 예방 방법:
- 상태 변경 → 외부 호출 순서로 로직 구성 (Checks-Effects-Interactions 패턴 적용) - `ReentrancyGuard` 라이브러리 사용 (OpenZeppelin 제공) - 함수 호출 간에 재입력 불가능한 락(lock) 상태 변수 도입

사용자 경험:
DeFi Lending Protocol 개발자는 “우리 코드도 외부 호출 전에 상태 변경을 하지 않았던 시절이 있었습니다. 감사를 통해 이를 지적받고 순서를 바꿨는데, 이 점 하나로 해킹 가능성이 사라졌다는 걸 나중에 깨달았죠.”

Overflow / Underflow 취약점: 수치 계산 오류로 인한 자산 왜곡

Overflow는 정수형 변수의 값이 데이터 타입의 최대값을 초과할 때, 최소값부터 다시 시작되는 현상을 의미하며, Underflow는 반대의 개념입니다. 스마트컨트랙트에서 이런 계산 오류는 곧 자산 손실이나 무한 인출로 이어질 수 있습니다.

사고 사례:
- 2017년 Bancor 초기 스마트컨트랙트: 오버플로우로 인해 인플레이션 이상으로 토큰 발행 - 일부 고전 토큰 스마트컨트랙트에서 underflow로 잔액이 음수로 변환 → 무제한 송금 가능

예방 방법:
- Solidity 0.8 이상 사용 시 기본적으로 overflow/underflow 방지 내장 - 낮은 버전에서는 `SafeMath` 라이브러리 필수 사용 - 트랜잭션 전 유효 범위 검증 (require 조건 설정)

사용자 팁:
스마트컨트랙트 테스트 툴을 개발하는 실무자는 “우리는 모든 연산 함수에 require 구문으로 upper/lower limit을 설정하는 방식으로 Overflow를 사전에 차단합니다. 특히 ERC-20 기반 로직에서는 토큰의 발행량 제한 검증을 항상 우선시합니다.”

Access Control 실패: 관리자 권한 탈취로 인한 전권 남용

Access Control(접근제어)는 스마트컨트랙트의 특정 함수가 아무나 실행할 수 없도록 권한을 구분해주는 기능입니다. 이 로직이 잘못 설계되면 공격자가 관리자 역할을 탈취하거나, 특정 기능을 임의로 실행해 자산을 소유하거나 프로토콜을 중단시킬 수 있습니다.

사례:
- 2020년 Pickle Finance 해킹: 접근제어 누락으로 Vault 로직 변경 → 예치금 탈취 - 2021년 Uranium Finance: 컨트랙트 업그레이드 권한이 공격자에게 노출돼 자산 도난

취약한 구조 예:
- `onlyOwner` 없이 민감한 함수 공개 - 관리자 주소를 하드코딩해 변경 불가 상태 - 업그레이드 가능한 컨트랙트에서 접근제어 없는 `upgradeTo()` 함수

예방 방법:
- OpenZeppelin의 `Ownable`, `AccessControl` 모듈 적극 활용 - 관리 함수는 multisig(다중서명) 또는 timelock(지연 실행) 구조 사용 - 주요 함수 호출 시 이벤트 로깅 및 실시간 모니터링 설정

사용자 사례:
DAO 기반 프로토콜을 운영 중인 기획자는 “초기에는 관리자 1명이 운영하면서 실수로 토큰을 잘못 소각한 적이 있어요. 이후 모든 민감 기능은 3/5 멀티시그 + 타임락으로 운영하고 있습니다. 사용자 신뢰도도 높아졌고, 실수도 줄었습니다.”

스마트컨트랙트는 금융을 코드로 옮긴 시스템인 만큼, 단 하나의 취약점이 심각한 피해로 이어질 수 있습니다. Reentrancy, Overflow, Access Control 취약점은 가장 빈번하고 치명적인 보안 리스크로, 개발 초기부터 철저히 방지책을 내장해야 합니다. 특히 실사용자와 개발자 모두가 코드를 신뢰의 기반으로 삼는 디파이 생태계에서는 ‘기능 구현’보다 ‘안전한 설계’가 우선입니다.

[일시적인 오류로 출력이 되지 않는 경우 아래와 같이 입력해 보세요
① HTML 버전이 제대로 출력되지 않는다면, "HTML 버전만 본문내용 100% 포함되게 출력해줘" 라고 입력하세요.
② 글이 축약되어서 출력된다면, "좀 더 길게 써줘" 라고 입력하세요.]

``` 다음글 작성을 원하시면 다음 번호를 입력해주세요.