[ETHCon Korea 2019] Jason lee 이진호2. 스마트 컨트랙트 보안 취약점
Case Study
CASE STUDY FOR SECURITY VULNERABILITY IN SMART CONTRACT
ETHCON SESSION 1
COPYRIGHT © Hexlant, ALL RIGHTS RESERVED.
-
헥슬란트 이진호
jason@hexlant.com
4. 거래소 입금 처리 오류 사례
CASE 1
컨트랙트 문제는 아니지만… 그렇다고…
“
”
19. 거래소에서 Tx Status만 보고 처리하여,
실제 입금 여부를 확인하지 못한 사례
예외 케이스 발생 시, Tx Status가 Fail 처리 되도록 설계
28. FrozenAccount [ A ] = True
FrozenAccount [ B ] = False
FrozenAccount [ C ] = False
Freeze!
C
A B
29. FrozenAccount [ A ] = True
FrozenAccount [ B ] = False
FrozenAccount [ C ] = False
A
C
B
transfer( B, 100)
msg.sender = A
30. FrozenAccount [ A ] = True
FrozenAccount [ B ] = False
FrozenAccount [ C ] = False
A
C
B
approve( C, 100)
transferFrom( A, B,100)
;;;
msg.sender = C
39. 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}
40. 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!
41. 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!
48. 자신이 설계한 기능이 잘 돌아가는지 확인한다.
자신이 설계한 기능만 잘 돌아가는지 확인한다.
50. 설계 개발 검증
어.. 엇..?!..
(-1)+38=32848273482736487234
;;;;;;
53. 항상 기술 업데이트에 관심을 갖자
내가 짠 코드를 100% 믿지 말자
테스트는 선택이 아닌 기본이다
1.
2.
3.
55. 블록체인의 모든 것이 시작되는 곳. 헥슬란트입니다.
Hex 는 16진수로 블록체인을 대표하는 의미입니다.
Lant 는 Land의 독일발음으로 영역을 의미합니다.