[가상화폐] [Ethereum] Ethernaut 소개

iron_modolee.png

안녕하세요. 개발자 모도리입니다.
오늘은 게임처럼 Ethereum Smart Contract의 취약점을 배울 수 있는 Ethernaut에 대해서 알아보겠습니다.
OpenZeppeline과 Smart Contract Auditing으로 유명한 Zeppeline team에서 제공하고 있는 서비스입니다. 총 15단계로 이뤄져 있고, 각 단계마다 취약점 미션 풀이를 위해 필요한 취약점을 찾아야 합니다.
예전에 대학생 때 보안 공부를 해 보겠다며, 해커스쿨에서 이 외 비슷한 것을 이용해서 공부했던 기억이 납니다.
저도 이제 막 시작해 본 단계라서 앞으로 문제 풀이를 꾸준히 올릴 예정입니다.

The Ethernaut

홈페이지 주소
https://ethernaut.zeppelin.solutions/
접속하면 아래와 같은 화면이 나옵니다.
01_intro.png

Ethernaut는 Web3/Solidity 기반의 wargame(가상 전쟁게임)으로 overthewire.org와 만화 El Eternauta에서 영감을 받아서 만들어졌다고 합니다. EVM 안에서 동작하며, 각 level들은 smart contract로 구성 된 문제를 풀어야 넘어갈 수 있습니다.

그러면 아래의 Play now! 버튼을 눌러서 시작해 봅니다.

0.Hello Ethernaut

이 단계는 Ethernaut 문제를 풀기 위한 기본 준비 단계입니다.

MetaMask를 설치합니다.

  • MetaMask 설치에 대해 잘 설명 된 글들이 많기 때문에 이 부분은 생략하겠습니다.
  • 이 글을 참고 하시면 쉽게 따라하실 수 있습니다. (해당 글에서 Ganache-CLI 설정 부분 전까지만 따라하시면 됩니다.)
  • 네트워크는 Main Ethereum Network가 아닌 Ropsten Test Network를 선택해 주세요.
  • 02_metamask_ropsten.png

브라우저의 콘솔 창을 열어주세요.

  • Chrome 기준으로 도구 메뉴 > 도구 더 보기 > 개발자 도구 또는 F12
  • 03_browser_console.png
  • 콘솔창에 아래와 같은 메세지가 나오면 정상적으로 동작하고 있는 것입니다.
  • 그리고 콘솔창의 위치를 변경하고 싶으시면 빨간색으로 표시된 버튼을 눌러서 브라우저의 상,하,좌,우에 위치시킬 수 있습니다. 저는 오른쪽에 두는 것이 편해서 그렇게 설정해 놨습니다.
  • 04_browser_console_2.png
  • 이 상태에서 콘솔에 player 라고 입력하면, 아래 처럼 MetaMask에서 생성한 지갑 주소가 출력됩니다.
  • 05_cmd_player.png

콘솔의 helper를 사용해 봅니다.

  • 현재 ether balance를 확인할 수 있는 명령어 입니다.
  • getBalance(player)
  • 위의 명령어를 입력했을 때 Promise {< pending >}과 같은 메세지가 나온다면 해당 메세지를 펼쳐 보면 원하는 값이 나오긴 합니다. 하지만 보다 깔끔한 값 확인을 위해선 명령어 앞에 await을 붙여서 실행해야 합니다.
  • 06_cmd_getbalance.png
  • help() 명령어는 게임 플레이시 사용 될 유용한 명령어들을 알려줍니다.
  • 07_cmd_help.png

The ethernaut contract

  • ethernaut 명령을 통해서 Ropsten Test Network에 올라가 있는 ethernaut의 contract를 확인할 수 있습니다.
  • 레벨 클리어 정보 등을 담고 있을 것 같은데, 이 게임을 진행할 때 콘솔을 통해서 직접적으로 사용하진 않습니다. 버튼 등을 통해서 호출하게 됩니다.
  • 08_cmd_ethernaut.png

ABI를 통해서 정보를 주고 받습니다.

  • Ethernaut는 Ethernaut.sol을 포함하고 있는 TruffleContract입니다.
  • Web3를 이용해서 Smart Contract와 상호작용을 하려면 ABI가 필요합니다.
  • Ethernaut의 ABI는 Ethernaut.sol의 public method에 접급할 수 있게 해줍니다.
  • owner 명령어가 그 중 하나입니다.
  • 09_cmd_owner.png

Test ether를 받아 봅니다.

  • Test network에서 작업을 하지만, 그래도 transaction을 일으킬 때 gas fee가 필요합니다.
  • 그래서 https://faucet.metamask.io/ 에 접속해서 request 1 ether from faucet 버튼을 누르면 잠시 후에 test용 ether가 MetaMask 지갑으로 들어옵니다.
  • 10_test_ether.png

Level instance를 생성합니다.

  • Level을 플레이할 때 마다 새로운 level instance를 생성해서 해당 instance를 통해서 문제를 푸는 방식입니다.
  • 맨 아래에 Get new instance를 눌러보세요.
  • MetaMask 창에 Gas Limit, Gas Price를 넣는 곳과 버튼 3개(RESET, SUBMIT, REJECT)가 있습니다.
  • 우리는 test ether가 있으니 Gas price를 넉넉하게 5 Gwei 정도 주고 SUBMIT 버튼을 누릅니다.
  • 11_metamask_submit.png
  • 그러면 콘솔에 Sent transaction 메세지가 뜨고, 잠시 기다리면 Mined transaction 이라는 메세지가 추가로 뜹니다.
  • 금방 우리가 submit을 누른 순간 Ropsten test network에 contract를 배포한 것입니다.
  • Instance address라고 나오는 것이 배포 된 contract의 주소입니다.
  • 12_new_instance.png

Level contract를 확인합니다.

  • 아까 ethernaut 명령을 통해서 contract를 확인한 것 처럼, 방금 우리가 배포한 contract는 contract 명령을 통해서 확인할 수 있습니다.
  • 펼쳐서 보면 abi라는 것이 있는데, 그것을 펼치면 호출할 수 있는 public method를 확인할 수 있습니다.
  • 13_contract.png

contract와 메세지를 주고 받으며 Level 임수를 완수합니다.

  • await contract.info() 명령을 입력하면 이번 level의 임수 완수를 위한 힌트가 나옵니다.
  • 힌트를 따라서 명령어를 입력하다 보면 임수를 완수하게 되고, 모든 임수 완수 후엔 맨 아래 Submit instance 버튼을 눌러서 임수 완수 트랜잭션을 기록하면 다음 level로 넘어갈 수 있습니다.

오늘은 우선 문제를 풀이 위한 기본 준비 작업을 마쳤습니다. 앞으로 한 문제 한 문제씩 풀어가며 포스팅을 할 예정입니다. 혹시나 직접 풀고 싶으신 분들께는 스포가 될 수 있으니, 앞으로 ethernaut 문제 풀이 편은 읽지 않는 편이 좋으실 것 같습니다.^^;; 앞으로 열심히 한번 풀어 보겠습니다!!

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

블록체인 기술

번호 제목 글쓴이 날짜 조회수
66 가상화폐 이오스 지갑 SIMPLEOS (심플오스/심플이오스)에 대해 알아보자 01 icon Work4Block 08-10 2,237
65 가상화폐 ChinaJoy에 참가한 엘라스토스와 댑(BIT.GAME, ViewChain, ioeX, Hashworld) icon Work4Block 08-10 2,200
64 가상화폐 KEEP!T Column 비트코인 뽀개기(9편) icon Work4Block 08-09 2,315
63 가상화폐 KEEP!T 블록체인 뉴스:7/21 - 비트코인의 학술적 유래 (최종) icon Work4Block 08-01 3,483
62 가상화폐 KEEP!T Column 비트코인 뽀개기(7편) icon Work4Block 07-27 2,722
61 가상화폐 KEEP!T 블록체인 뉴스:7/21 - 비트코인의 학술적 유래 (6) icon Work4Block 07-23 2,388
60 가상화폐 아이젝 airdrop 참여하고 RLC 토큰 받아가기~!! 컴퓨터만 켜두면 OK icon Work4Block 07-20 3,119
59 가상화폐 문과생, 블록체인업체에 취직하기 - (3) 저도 블록체인 업계에서 일하고 싶어요! icon Work4Block 06-28 2,988
58 가상화폐 고장난 웹2.0, 패러다임 전환의 시기 icon Work4Block 06-27 3,115
57 가상화폐 Qx, QDex 및 Qrypto라는 3 개의 새로운 프로젝트 icon Work4Block 06-26 2,879
56 가상화폐 [Ethereum] Ethernaut 풀이 - 3.Coin Flip icon Work4Block 06-25 2,492
55 가상화폐 [Ethereum] Ethernaut 풀이 - 2.Fallout icon Work4Block 06-25 3,449
54 가상화폐 [Ethereum] Ethernaut 풀이 - 1.Fallback icon Work4Block 06-25 2,737
53 가상화폐 Overall Analysis of IOTA (아이오타 포괄적 분석) icon Work4Block 06-22 2,538
52 가상화폐 [Ethereum] Ethernaut 풀이 - 0.Hello Ethenaut icon Work4Block 06-21 2,499
51 가상화폐 [Ethereum] Ethernaut 소개 icon Work4Block 06-21 3,259
50 가상화폐 나의 이더리움 분석기 - 중간정리 - 2 icon Work4Block 06-21 3,135
49 가상화폐 이더리움이 go를 사용하는 이유(개인적인 생각) icon Work4Block 06-21 2,335
48 가상화폐 [Ethereum] Smart Contract 개발을 위한 환경 세팅 (Remix, Ganache) icon Work4Block 06-19 7,649
47 가상화폐 나의 이더리움 분석기 - 중간정리 - 1 icon Work4Block 06-19 5,147