피드로 돌아가기
Dev.toSecurity
원문 읽기
정수 연산 기반 Smart Contract의 Precision Loss 및 Rounding Attack 방어 전략
Precision Loss and Rounding Exploits in Financial Smart Contracts
AI 요약
Context
Solidity의 Native Fixed-Point Arithmetic 부재로 인한 정수 연산 기반의 값 절삭 문제 분석. 단순한 수학적 오차가 아닌 가치 이전 정책(Value-transfer Policy)의 결함으로 작용하여 자산 손실 및 수수료 회피 가능성 존재.
Technical Solution
- Multiply Before Dividing 원칙 적용을 통한 중간 연산 단계의 정밀도 유지
Math.mulDiv도입을 통한 uint256 범위를 초과하는 중간 곱셈 결과의 Overflow 방지Math.Rounding.Ceil설정을 통한 비즈니스 로직별 명시적 Rounding 방향 지정- 소액 거래 반복을 통한 수수료 회피(Rounding Amplification Attack) 차단을 위한 최소 연산 단위 설정
- 512-bit 정밀도 연산 라이브러리 활용을 통한 커스텀 구현 시 발생하는 취약점 제거
실천 포인트
1. 모든 Division 연산 시 Rounding 방향이 누구에게 이득이 되는지 분석했는가?
2. 곱셈 후 나눗셈 순서를 준수하며, 이로 인한 Intermediate Overflow 가능성을 검토했는가?
3. `Math.mulDiv`와 같은 검증된 Full-precision 라이브러리를 사용 중인가?
4. 최소 금액 거래 시 Rounding Error로 인해 수수료가 0이 되는 엣지 케이스를 Fuzz Testing으로 검증했는가?