[가상화폐] [Ethereum] Ethernaut 풀이 - 2.Fallout

modolee_logo
안녕하세요. 개발자 모도리입니다.
Ethernaut 문제 풀이 시리즈를 계속 진행해 보려고 합니다.
이번에는 Level 2 문제를 풀어보겠습니다. 지난 게시물은 아래를 확인해 주세요.


2. Fallout

임무 확인 & 새로운 인스턴스 생성

Level 1 보다 쉬워 보입니다. 그냥 ownership만 가져오면 됩니다.

Get new instance 버튼을 눌러서 인스턴스를 생성합니다.
00_2_get_new_instance.png

Solidity 코드 분석

00_3_code_all.png

  • ownership을 가져오려면 owner를 변경하는 부분을 찾아야 합니다.
  • 생성자 부분에만 owner를 설정하는 부분이 있고, 나머지 코드에는 어디에도 owner를 설정하는 부분이 없습니다.
  • 생성자는 컨트랙트를 최초 배포하는 Level 컨트랙트가 부를텐데, 어떻게 해야 되는걸까요?? (이미 이상한 부분은 찾으신 분들도 계시겠지만... 잠시만 기다려 주세요 ㅋㅋ)
  • 현재 owner를 확인해 보면 역시나 Level 컨트랙트가 owner로 설정되어 있습니다.
    00_4_owner.png

Remix 이용하기

  • 임무 확인 시 Solidity Remix IDE를 쓰면 도움이 될 거라는 문구를 봤습니다. 그러면 Remix에 소스 코드를 붙여 넣고 확인해 보겠습니다.
  • 그 전에 Remix가 익숙하지 않으신 분들은 이 글을 읽어 보시면 쉽게 사용하실 수 있습니다.
  • 우리는 MetaMask를 사용하고 있으므로 Run 탭의 Environment를 Injected Web3를 선택합니다.
    00_5_remix_metamask.png
  • 그리고 Remix 우측 상단의 + 버튼을 눌러서 새로운 파일을 만들고 Level 2 소스 코드를 전체 복사해서 붙여 넣습니다.
  • Complie 탭으로 가서 Auto compile 옵션을 선택합니다.
    auto_compile
  • 그러면 Unable to import "zeppelin-solidity/contracts/ownership/Ownable.sol": File not found 라는 에러 메세지가 나옵니다.
    01_ownable_not_found.png
  • 해당 메세지가 나오는 이유는 방금 우리가 붙여 넣은 소스는 truffle framework를 이용해서 작성 된 코드로 로컬에 Ownable.sol 파일을 가지고 있으면서 컴파일 시 사용하던 코드입니다. 그런데 Remix에선 해당 파일을 불러올 수 없으니 직접 코드를 붙여 넣어줘야 합니다. 해당 코드는 openzeppeline에서 가지고 오겠습니다.
  • import 코드를 지워주고
    01_1_delete_import.png
  • 그 자리에 pragma를 제외한 나머지 ownable 코드를 붙여 넣습니다.
    01_2_paste_ownable.png
  • 아직 warning 메세지가 남아 있습니다.
    02_balance_casting_warn.png
  • this.balance 코드에서 this를 address 타입으로 명시적 형변환을 해줘야 합니다.
    03_balance_casting_sol.png
  • 이제 컴파일이 무사히 됐습니다. Run탭으로 넘가면 컨트랙트를 Deploy할 수 있는 환경이 구축되었습니다.
  • 하지만 우리는 직접 컨트랙트를 배포하는 것이 아니라 Level 컨트랙트가 배포해 놓은 컨트랙트를 불러서 사용해야 됩니다. (그래야 해당 컨트랙트의 상태가 변경되어 임무를 완수할 수 있으니깐요)
  • 콘솔에서 Instance address를 확인합니다.
    04_instance_address.png
  • 해당 주소를 복사해서 Remix의 Load contract from Address 창에 붙여 넣고 At Address 버튼을 눌러주면 해당 컨트랙트를 불러옵니다.
    05_at_address.png
  • 뭔가 이상한 함수가 하나 있습니다. (Fallout 인줄 알았는데, Fal1out 이었네요... 낚였습니다.)
    06_fal1out.png
  • 정상적인 생성자였다면 함수 목록에 표시되지 않습니다. Level 1 컨트랙트를 살펴 보시죠. (Fallback이라는 이름의 함수는 없습니다. (fallback)은 다른 함수 입니다.)
    07_normal_contructor.png

문제 풀이

  • 트릭을 발견했으니, 문제는 굉장히 간단해 졌습니다. 그냥 Fal1out을 호출하면 owner가 될 수 있습니다.
  • 호출하고 owner를 확인해 보겠습니다.
    • Remix에서 확인
      08_owner.png
    • Console에서 확인
      09_console_owner.png

답안 제출

  • Submit instance 버튼을 누릅니다.
    submit_instance
  • 임무를 완수했습니다.
    10_complete.png

말하고자 하는 취약점

  • Fallout은 Fal1out으로 잘못 쓰는 사소한 실수로 인해 컨트랙트의 ownership을 아무나 획득할 수 있게 되었습니다.
  • 이런 경우가 종종 발생하여 Solidity 0.4.23 버전부터는 컨트랙트와 동일한 이름으로 생성자를 만드는 대신 constructor라는 별도의 이름으로 선언하게 업데이트 되었습니다.
  • 취약점을 개선한 버전이 지속적으로 나오는 만큼, 컨트랙트 작성 시 최대한 최신 버전에 맞춰서 컨트랙트를 작성하는게 좋지 않을까 생각합니다.
  • 그리고 역시 auditing이 필요하다~ 가 결론일 것 같네요.^^

오늘은 이것으로 마치겠습니다. 감사합니다.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

블록체인 기술

번호 제목 글쓴이 날짜 조회수
192 정보 fun88slot.shop คาสิโนสด และ เดิมพันฟุตบอล leoloo 05-11 12
191 가상화폐 fun88slot.shop ทางเข้าที่ปลอดภัยและรวดเร็ว leoloo 05-11 18
190 가상화폐 fun88slot.shop คาสิโนสด leoloo 05-11 12
189 채굴 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-18 30
188 가상화폐 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-18 29
187 정보 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-18 27
186 채굴 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-04 44
185 가상화폐 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-04 37
184 정보 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 04-04 45
183 채굴 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 03-23 91
182 가상화폐 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 03-23 102
181 가상화폐 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 03-23 54
180 정보 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 03-23 75
179 정보 ❤️ ✅NEW✅꧂⭐전원 20대✴️한국매니저❇️HD꼴릿실사✨S클래스 라인업❇️극강마인드✴️ 코스프레 03-23 70
178 정보 KEEP!T Column: 블록체인 진영 시리즈(1) 제도권의 시도들 icon Work4Block 04-07 3,255
177 정보 KEEP!T Column: 구글 이후의 시대 - 조지 길더 icon Work4Block 03-15 3,620
176 정보 KEEP!T promotion: 광고에 블록체인의 핵심적 가치를 붙이면 생기는 일 icon Work4Block 03-07 2,841
175 정보 [인터체인 시리즈 I]코스모스 네트워크 I - 데이터 상호운용 방법과 텐더민트 합의 알고리듬 icon Work4Block 01-25 4,187
174 가상화폐 (코인비평) 라인 링크(Link)의 BTC 보상정책과 봉이 김선달 icon Work4Block 01-15 2,616
173 정보 KEEP!T History: 블록체인史 (최종) 블록체인의 새 패러다임을 제시한 이더리움 icon Work4Block 01-10 3,392