본문 바로가기
블록체인교육/블록체인보안

[블록체인 보안] 스마트컨트랙트 취약성(곱하기 전에 나누기)

by Danny_Kim 2023. 8. 25.

🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑

  1. 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
  2. 아무도 알려주지 않은 비트코인, 이더리움의 리스크
  3. 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
  4. 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
  5. 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!

 

정밀도 문제 - 곱하기 전에 나누기

 

솔리디티에서 나눗셈 연산을 수행할때 발생하는 일반적인 문제

솔리디티의 부동 소수점 숫자를 지원하지 않기 때문에 연산 순서가 정수 잘림(truncation)으로 인해 결과에 영향을 줄수 있음

“Miscalculation” 계약에서 함수 price는 나눗셈을 곱하기보다 먼저 수행함(price/100)*discount

솔리디티는 정수를 나눌 때 정수 잘림(integer truncation)을 수행하기 때문에, 가격이 100미만인 결과는 0이 됨.

이로 인해 곱셈의 결과도 0이 됨

반면에 “Calculation”계약에서 함수 price는 곱셈을 나눗셈보다 먼저 수행함(price*discount)/100

이렇게 하면 곱셈은 잘리지 않고 최종 결과만 잘리기 때문에 결과가 올바르게 나옴.

 

개선방안

항상 나눗셈보다는 곱셈을 먼저 수행하여 정밀도를 유지하도록 .

 

테스트소스

https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Divmultiply.sol

 

취약성코드

 

테스트 결과

 

 

참고문서

https://web3sec.notion.site/Divide-before-multiply-8f502eb484b7487c954ea5b6f1b9640c

🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑

  1. 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
  2. 아무도 알려주지 않은 비트코인, 이더리움의 리스크
  3. 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
  4. 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
  5. 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!

댓글