brunch

You can make anything
by writing

C.S.Lewis

by KryptoSeoul Jun 18. 2018

오미세고 토큰 계약에 대한 퀀트스탬프의 보안 보증

제목: 배치오버 플로우와 프록시 오버플로우의 맥락에서 오미세고(OmiseGo) 토큰 계약에 대한 퀀트스탬프의 보안 보증


퀀트스탬프가 감사를 진행할 때, 우리는 일반적으로 코드의 구조적 결함을 찾으면서, 공통적인 위험을 식별하기 위해 취약성이 많은 집단을 찾습니다. 재진입성(reentrancy), 임의성(randomness), 그리고 트랜잭션 순서 종속성과 같은 개념은 전체 감사 범위에서 다루는 모든 주제입니다. 


특정 사례에서, 퀀트스탬프는 두 가지 특정 취약점으로 꼽히는 배치오버플로우와 같은 고유의 전제인 ‘정수 오버플로우’를 수반한 프록시 오버플로우에 초점을 맞췄습니다. 


오미세고는 오미세고 토큰을 구축에 심혈을 기울였습니다. 특히, 수행되는 모든 연산 인스턴스에서 SaftMath(1) 라이브러리를 활용했습니다. 


이것은 주로 배포 시에 가스 오버헤드를 발생시키지만, 이 방법론을 통한 산술 연산은 정수 오버플로우의 인스턴스를 검사하고 정수 오버플로우/언더플로우가 있는 경우, SafeMath 라이브러리는 이전의 안전한 상태로 되돌리는 역할을 합니다. 


어썰트(Assert)는 유효하지 않은 opcode인 0xfe로 컴파일하고, 남은 모든 가스를 사용하고 모든 변경사항을 되돌립니다. 이것은 약간 극단적으로 들릴 수 있지만 제대로 작동하는 코드의 경우 assert 구문에 도달하지 않습니다. 이것은 정수 오버플로우인 경우에 이상적으로 사용할 수 있습니다. 


StackExchangerk 실제로 매우 간단한 예제를 제공합니다. safeSubtract 함수를 사용하면 감산 때문에 발생하는 정수 언더플로우가 해결됩니다. 


import “./SafeMath.sol”;

contract TestSafeMath {

 using SafeMath for uint256;

function unsafeSubtract() public pure returns (uint256) {

 uint256 a = 0;

 return a — 1;

 }

function safeSubtract() public pure returns (uint256) {

 uint256 a = 0;

 return a.sub(1);

 }

}

This publication



이 포스팅은 최근의 배치 오버플로우 및 프록시 오버플로우의 취약점에 대한 퀀트스탬프의 평가 및 커뮤니티에 대한 저희의 공약 중 일부가 담겨 있습니다. 사전에 이러한 문제를 해결할 수 있도록 도와드리겠습니다. 자세한 정보는 security@quantstamp.com으로 문의해주십시오. 


(1) Safemath – 기본 연산에 있어 안전한 연산이 가능하도록 만들어주는 함수. 이더리움에서도 오버플로우, 언더플로우가 발생하면 무한 루프에 걸리는 등 기본적인 오류가 발생할 수 있다.


원문링크: https://medium.com/quantstamp/quantstamps-security-assurance-on-the-omisego-token-contract-in-the-context-of-batchoverflow-and-5382913c4d91 


본 게시물의 저작권은 크립토서울(KrytptoSeoul)에 있습니다. 상업적인 무단 전재와 복사, 배포를 금지합니다. 공유의 경우 원문 출처를 반드시 남겨야 합니다.

Copyright(c) 2018. KryptoSeoul All Rights Reserved. 

매거진의 이전글 배치 오버플로우와 프록시 오버플로우 취약점에 대한 평가
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari