SlideShare a Scribd company logo
1 of 57
Download to read offline
스마트 컨트랙트 보안 취약점
Case Study
CASE STUDY FOR SECURITY VULNERABILITY IN SMART CONTRACT
ETHCON SESSION 1
COPYRIGHT © Hexlant, ALL RIGHTS RESERVED.
-
헥슬란트 이진호
jason@hexlant.com
블록체인 특징에 대한
이해 부족
코너 / 엣지 케이스
예외처리 미흡
논리적 결함
거래소 입금 처리 오류 사례
CASE 1
컨트랙트 문제는 아니지만… 그렇다고…


“


”
100 TOKEN
Send : 100 TOKEN
Alex Exchange
Alex : 0 TOKEN
0 TOKEN
Send : 100 TOKEN
Alex Exchange
Alex : 100 TOKEN
100 TOKEN
Send : 1,000 TOKEN
Alex Exchange
Alex : 0 TOKEN
100 TOKEN
Send : 1,000 TOKEN
Alex Exchange
Alex : 0 TOKEN
거래소에서는 무엇을 보고 

트랜잭션이 성공했는지 알 수 있을까?
이 문제의 시작.
Tx Status……
비잔티움 하드포크
Byzantium Hardfork
https://www.investopedia.com/news/what-byzantium-hard-fork-ethereum/
잔액보다
큰 금액 전송 시, 

revert 되지 않고,

return false로 

트랜잭션 정상종료
CASE 1
100 TOKEN
Send : 1,000 TOKEN
Alex Exchange
Alex : 0 TOKEN
CASE 1
100 TOKEN
Send : 1,000 TOKEN
return : false
Alex Exchange
Alex : 1,000 TOKEN
거래소에서 Tx Status만 보고 처리하여,

실제 입금 여부를 확인하지 못한 사례
예외 케이스 발생 시, Tx Status가 Fail 처리 되도록 설계
논리적 오류 결함
CASE 2
조건문 실수.
나만 할 수 있고, 넌 할 수 없지
나만 할 수 없고, 넌 할 수 있지
Manager
User
Manager Only Function
require(msg.sender != managerAddress);
;;;
?!
Manager
User
Manager Only Function
require(msg.sender == managerAddress);
조건 우회 경로
FrozenAccount [ A ] = True

FrozenAccount [ B ] = False

FrozenAccount [ C ] = False
Freeze!
C
A B
FrozenAccount [ A ] = True

FrozenAccount [ B ] = False

FrozenAccount [ C ] = False
A
C
B
transfer( B, 100)
msg.sender = A
FrozenAccount [ A ] = True

FrozenAccount [ B ] = False

FrozenAccount [ C ] = False
A
C
B
approve( C, 100)
transferFrom( A, B,100)
;;;
msg.sender = C
Gas… Gas… Gas…
CASE 3
http://eips.ethereum.org/EIPS/eip-1132
A B
transferWithLock( B, “invest”,100, “19-04-05”)
A B
transferWithLock( B, “invest”,100, “19-04-05”)
locked[B][invest] = {100, 19-04-05}
A B
locked[B][invest] = {100, 19-04-05}
loop!
A B
transferWithLock( B, “00”,1, “19-04-05”)

transferWithLock( B, “01”,1, “19-04-05”)
transferWithLock( B, “02”,1, “19-04-05”)

…..

transferWithLock( B, “FF”,1, “19-04-05”)
locked[B][00] = {1, 19-04-05}
locked[B][01] = {1, 19-04-05}
locked[B][02] = {1, 19-04-05}
locked[B][03] = {1, 19-04-05}
locked[B][04] = {1, 19-04-05}
locked[B][05] = {1, 19-04-05}
locked[B][06] = {1, 19-04-05}
locked[B][07] = {1, 19-04-05}
…
locked[B][FF] = {1, 19-04-05}
A B
locked[B][00] = {1, 19-04-05}
locked[B][01] = {1, 19-04-05}
locked[B][02] = {1, 19-04-05}
locked[B][03] = {1, 19-04-05}
locked[B][04] = {1, 19-04-05}
locked[B][05] = {1, 19-04-05}
locked[B][06] = {1, 19-04-05}
locked[B][07] = {1, 19-04-05}
…
locked[B][FF] = {1, 19-04-05}
loop!
A B
locked[B][00] = {1, 19-04-05}
locked[B][01] = {1, 19-04-05}
locked[B][02] = {1, 19-04-05}
locked[B][03] = {1, 19-04-05}
locked[B][04] = {1, 19-04-05}
locked[B][05] = {1, 19-04-05}
locked[B][06] = {1, 19-04-05}
locked[B][07] = {1, 19-04-05}
…
locked[B][FF] = {1, 19-04-05}
Exceed gas limit!
loop!
이러한 문제들을 어떻게 해결할 것인가.
테스트 테스트테스트
테스트테스트
테스트테스트 테스트
테스트
설계 개발 검증
설계 개발 검증
덧셈이 되는

계산기를 만들꺼야!
설계 개발 검증
다 만들었다!
설계 개발 검증
잘 돌아가는 군
1+1 = 2
자신이 설계한 기능이 잘 돌아가는지 확인한다.
자신이 설계한 기능만 잘 돌아가는지 확인한다.
설계 개발 검증
어.. 엇..?!..
1+A = 24839782749372474289
;;;
설계 개발 검증
어.. 엇..?!..
(-1)+38=32848273482736487234
;;;;;;
Positive Test
정상적인 값을 넣었을 때
정상적인 결과값이 나오는지 테스트
Negative Test
비정상적인 값을 넣었을 때
예외처리가 되거나, 문제는 없는지 테스트
결론
항상 기술 업데이트에 관심을 갖자
내가 짠 코드를 100% 믿지 말자
테스트는 선택이 아닌 기본이다
1.
2.
3.
감사합니다
-
헥슬란트 블록체인 기술연구소
이진호
jason@hexlant.com
블록체인의 모든 것이 시작되는 곳. 헥슬란트입니다.
Hex 는 16진수로 블록체인을 대표하는 의미입니다.
Lant 는 Land의 독일발음으로 영역을 의미합니다.
기술의 시작부터 상용화까지
블록체인의 모든 것이 시작되는 곳
헥슬란트
[ETHCon Korea 2019] Jason lee 이진호

More Related Content

More from ethconkr

[ETHCon Korea 2019] Aiden Park 박정원
[ETHCon Korea 2019] Aiden Park 박정원[ETHCon Korea 2019] Aiden Park 박정원
[ETHCon Korea 2019] Aiden Park 박정원ethconkr
 
[ETHCon Korea 2019] Park Sieun 박시은
[ETHCon Korea 2019] Park Sieun 박시은[ETHCon Korea 2019] Park Sieun 박시은
[ETHCon Korea 2019] Park Sieun 박시은ethconkr
 
[ETHCon Korea 2019] Hong taeoh 홍태오
[ETHCon Korea 2019] Hong taeoh 홍태오[ETHCon Korea 2019] Hong taeoh 홍태오
[ETHCon Korea 2019] Hong taeoh 홍태오ethconkr
 
[ETHCon Korea 2019] Hyun sooyoung 현수영
[ETHCon Korea 2019] Hyun sooyoung 현수영[ETHCon Korea 2019] Hyun sooyoung 현수영
[ETHCon Korea 2019] Hyun sooyoung 현수영ethconkr
 
[ETHCon Korea 2019] Choi jihyuk 최지혁
[ETHCon Korea 2019] Choi jihyuk 최지혁[ETHCon Korea 2019] Choi jihyuk 최지혁
[ETHCon Korea 2019] Choi jihyuk 최지혁ethconkr
 
[ETHCon Korea 2019] Choi yunsung 최윤성
[ETHCon Korea 2019] Choi yunsung 최윤성[ETHCon Korea 2019] Choi yunsung 최윤성
[ETHCon Korea 2019] Choi yunsung 최윤성ethconkr
 
[ETHCon Korea 2019] Jung woohyun 정우현
[ETHCon Korea 2019] Jung woohyun 정우현[ETHCon Korea 2019] Jung woohyun 정우현
[ETHCon Korea 2019] Jung woohyun 정우현ethconkr
 
[ETHCon Korea 2019] Jung soonhyung 정순형
[ETHCon Korea 2019] Jung soonhyung 정순형[ETHCon Korea 2019] Jung soonhyung 정순형
[ETHCon Korea 2019] Jung soonhyung 정순형ethconkr
 
[ETHCon Korea 2019] Jang jinho 장진호
[ETHCon Korea 2019] Jang jinho 장진호[ETHCon Korea 2019] Jang jinho 장진호
[ETHCon Korea 2019] Jang jinho 장진호ethconkr
 
[ETHCon Korea 2019] Jang jaehyuk 장재혁
[ETHCon Korea 2019] Jang jaehyuk 장재혁[ETHCon Korea 2019] Jang jaehyuk 장재혁
[ETHCon Korea 2019] Jang jaehyuk 장재혁ethconkr
 
[ETHCon Korea 2019] Lim wanseob 임완섭
[ETHCon Korea 2019] Lim wanseob 임완섭[ETHCon Korea 2019] Lim wanseob 임완섭
[ETHCon Korea 2019] Lim wanseob 임완섭ethconkr
 
[ETHCon Korea 2019] Lee heungno 이흥노
[ETHCon Korea 2019] Lee heungno 이흥노[ETHCon Korea 2019] Lee heungno 이흥노
[ETHCon Korea 2019] Lee heungno 이흥노ethconkr
 
[ETHCon Korea 2019] Yun sungjun 윤성준
[ETHCon Korea 2019] Yun sungjun 윤성준[ETHCon Korea 2019] Yun sungjun 윤성준
[ETHCon Korea 2019] Yun sungjun 윤성준ethconkr
 
[ETHCon Korea 2019] You yunjae 유윤재
[ETHCon Korea 2019] You yunjae 유윤재[ETHCon Korea 2019] You yunjae 유윤재
[ETHCon Korea 2019] You yunjae 유윤재ethconkr
 
[ETHCon Korea 2019] Yoo minho 유민호
[ETHCon Korea 2019] Yoo minho 유민호[ETHCon Korea 2019] Yoo minho 유민호
[ETHCon Korea 2019] Yoo minho 유민호ethconkr
 
[ETHCon Korea 2019] Um jiyong 엄지용
 [ETHCon Korea 2019]  Um jiyong 엄지용 [ETHCon Korea 2019]  Um jiyong 엄지용
[ETHCon Korea 2019] Um jiyong 엄지용ethconkr
 
[ETHCon Korea 2019] Ahn sangsun 안상선
[ETHCon Korea 2019] Ahn sangsun 안상선[ETHCon Korea 2019] Ahn sangsun 안상선
[ETHCon Korea 2019] Ahn sangsun 안상선ethconkr
 
[ETHCon Korea 2019] Shin mansun 신만선
[ETHCon Korea 2019] Shin mansun 신만선[ETHCon Korea 2019] Shin mansun 신만선
[ETHCon Korea 2019] Shin mansun 신만선ethconkr
 
[ETHCon Korea 2019] Bae kyungil 배경일
[ETHCon Korea 2019] Bae kyungil 배경일[ETHCon Korea 2019] Bae kyungil 배경일
[ETHCon Korea 2019] Bae kyungil 배경일ethconkr
 
[ETHCon Korea 2019] Park joohyung 박주형
[ETHCon Korea 2019] Park joohyung 박주형[ETHCon Korea 2019] Park joohyung 박주형
[ETHCon Korea 2019] Park joohyung 박주형ethconkr
 

More from ethconkr (20)

[ETHCon Korea 2019] Aiden Park 박정원
[ETHCon Korea 2019] Aiden Park 박정원[ETHCon Korea 2019] Aiden Park 박정원
[ETHCon Korea 2019] Aiden Park 박정원
 
[ETHCon Korea 2019] Park Sieun 박시은
[ETHCon Korea 2019] Park Sieun 박시은[ETHCon Korea 2019] Park Sieun 박시은
[ETHCon Korea 2019] Park Sieun 박시은
 
[ETHCon Korea 2019] Hong taeoh 홍태오
[ETHCon Korea 2019] Hong taeoh 홍태오[ETHCon Korea 2019] Hong taeoh 홍태오
[ETHCon Korea 2019] Hong taeoh 홍태오
 
[ETHCon Korea 2019] Hyun sooyoung 현수영
[ETHCon Korea 2019] Hyun sooyoung 현수영[ETHCon Korea 2019] Hyun sooyoung 현수영
[ETHCon Korea 2019] Hyun sooyoung 현수영
 
[ETHCon Korea 2019] Choi jihyuk 최지혁
[ETHCon Korea 2019] Choi jihyuk 최지혁[ETHCon Korea 2019] Choi jihyuk 최지혁
[ETHCon Korea 2019] Choi jihyuk 최지혁
 
[ETHCon Korea 2019] Choi yunsung 최윤성
[ETHCon Korea 2019] Choi yunsung 최윤성[ETHCon Korea 2019] Choi yunsung 최윤성
[ETHCon Korea 2019] Choi yunsung 최윤성
 
[ETHCon Korea 2019] Jung woohyun 정우현
[ETHCon Korea 2019] Jung woohyun 정우현[ETHCon Korea 2019] Jung woohyun 정우현
[ETHCon Korea 2019] Jung woohyun 정우현
 
[ETHCon Korea 2019] Jung soonhyung 정순형
[ETHCon Korea 2019] Jung soonhyung 정순형[ETHCon Korea 2019] Jung soonhyung 정순형
[ETHCon Korea 2019] Jung soonhyung 정순형
 
[ETHCon Korea 2019] Jang jinho 장진호
[ETHCon Korea 2019] Jang jinho 장진호[ETHCon Korea 2019] Jang jinho 장진호
[ETHCon Korea 2019] Jang jinho 장진호
 
[ETHCon Korea 2019] Jang jaehyuk 장재혁
[ETHCon Korea 2019] Jang jaehyuk 장재혁[ETHCon Korea 2019] Jang jaehyuk 장재혁
[ETHCon Korea 2019] Jang jaehyuk 장재혁
 
[ETHCon Korea 2019] Lim wanseob 임완섭
[ETHCon Korea 2019] Lim wanseob 임완섭[ETHCon Korea 2019] Lim wanseob 임완섭
[ETHCon Korea 2019] Lim wanseob 임완섭
 
[ETHCon Korea 2019] Lee heungno 이흥노
[ETHCon Korea 2019] Lee heungno 이흥노[ETHCon Korea 2019] Lee heungno 이흥노
[ETHCon Korea 2019] Lee heungno 이흥노
 
[ETHCon Korea 2019] Yun sungjun 윤성준
[ETHCon Korea 2019] Yun sungjun 윤성준[ETHCon Korea 2019] Yun sungjun 윤성준
[ETHCon Korea 2019] Yun sungjun 윤성준
 
[ETHCon Korea 2019] You yunjae 유윤재
[ETHCon Korea 2019] You yunjae 유윤재[ETHCon Korea 2019] You yunjae 유윤재
[ETHCon Korea 2019] You yunjae 유윤재
 
[ETHCon Korea 2019] Yoo minho 유민호
[ETHCon Korea 2019] Yoo minho 유민호[ETHCon Korea 2019] Yoo minho 유민호
[ETHCon Korea 2019] Yoo minho 유민호
 
[ETHCon Korea 2019] Um jiyong 엄지용
 [ETHCon Korea 2019]  Um jiyong 엄지용 [ETHCon Korea 2019]  Um jiyong 엄지용
[ETHCon Korea 2019] Um jiyong 엄지용
 
[ETHCon Korea 2019] Ahn sangsun 안상선
[ETHCon Korea 2019] Ahn sangsun 안상선[ETHCon Korea 2019] Ahn sangsun 안상선
[ETHCon Korea 2019] Ahn sangsun 안상선
 
[ETHCon Korea 2019] Shin mansun 신만선
[ETHCon Korea 2019] Shin mansun 신만선[ETHCon Korea 2019] Shin mansun 신만선
[ETHCon Korea 2019] Shin mansun 신만선
 
[ETHCon Korea 2019] Bae kyungil 배경일
[ETHCon Korea 2019] Bae kyungil 배경일[ETHCon Korea 2019] Bae kyungil 배경일
[ETHCon Korea 2019] Bae kyungil 배경일
 
[ETHCon Korea 2019] Park joohyung 박주형
[ETHCon Korea 2019] Park joohyung 박주형[ETHCon Korea 2019] Park joohyung 박주형
[ETHCon Korea 2019] Park joohyung 박주형
 

[ETHCon Korea 2019] Jason lee 이진호