Ethereum의 역사적인 큰 사건들을 다뤄보려고 한다.
이더리움에서 가장 큰 취약 사건이다.
Smart Contract를 제대로 구현하지 않았을 때
네트워크가 분리되고, 탈중앙화성이 조금 무시되는 롤백이 발생할 수 있다.
그래서 항상 Smart Contract를 구현할 때
항상 조심해야하는 경고를 모두에게 줬다.
Smart Contract상의 해커가 취약점을 파악해
환불요청을 계속 반복하는 Smart Contract 새로 만들어 본인 지갑으로 들여왔다.
이 때 비탈릭 부테린이 Hard Fork를 결정해 거래를 롤백시키고
이더리움은 Ethereum과 Ethereum Classic으로 분기됐다.

위 자료는 해킹 과정을 보여준다.
Smart Contract에서 Smart Contract를 호출할 수 있는데
Proxy라는 기능으로 사용할 수 있다.
두번째의 박스(파란색)이 모집된 The DAO의 자금이고
첫번째 박스(초록색)이 공격을 위한 Contract다.
해커가 1ETH를 입금한다.
그 후 공격할 Contract로 1ETH를 전송한다.
이 때 받은 Contract입장에서 1ETH가 들어왔으니까 아무런 문제가 없다.
그러면 해커가 본인 Contract에 출금함수를 호출하면
자동으로 본 Contract에 출금을 요청한다.
그러면 일반적인 성공 Contract는 출금했으니 끝나야하는데
여기서 돌아오지 않고 fallback()을 호출한다.
그러면 끝나지 않고 다시 출금을 재호출한다.
또 fallback()을 호출하고 계속 무한반복을 한다.
그러면 계속 0.75ETH 출금이 무한 반복된다.
Smart Contract에서 잔고를 먼저 줄이고 돈을 지급했어야했는데
그러지 않고 돈을 지급하고 잔고를 줄이는 로직이어서
이 순서의 취약점을 파악하고 해킹을 당한 것이다.
국내 블록체인 대표기업인 ICON이 ICO를 진행하며 메인넷 출시 전
ERC-20기반으로 Contract를 만들어 토큰을 먼저 지급했다.
그런데 치명적인 취약점이 발견됐다. 운영하다가 생긴 부분인데
유저 누구든지 Contract상에서 토큰 지급을 중지 시킬 수 있었다.

마지막 코드에서 !=로 썼는데 logic은 ==을 써야했다.
msg.sender walltetAddress(메세지 보낸 사람과 관리자지갑주소)와
같으면 다음을 진행을 했어야 했는데 이를 통해 중지시킨 사람들이 있었다.
큰 기업에서도 ! 하나의 실수로 서비스가 중단될 정도의 문제가 됐었다.
취약점에 해당되진 않고, 이를통해 국내 게임사들이 주가 상승을 크게 이뤄냈다.
Play To Earn으로, 보통 게임의 형태(현질을 통해 게임 계정을 상향시키는)과 달리
사용자가 게임을 하면서 돈을 벌 수 있는 형태다.
대표적으로, Axie Infinity가 있는데 이 종류의 게임이 활성화된 이유는
동남아에서 시작했고, 이 지역이 소득 수준이 다소 낮아 유저가 게임을 통해
새로운 코인이 발행되면 그걸 팔아 생활비로 사용하는 경우가 생겼다.
글로벌하게 유저가 늘어나면서 코인의 가치가 올라갔고
이로인해 국내 게임사들이 P2E나 NFT진출 선언을 했고
대표적인 게임사가 위메이드가 있다.
P2E에서도 해킹이 발생했다. 실제 금액으로는 가장 크게 당했다.
Ronin Bridge는 Ethereum과 Ronin(게임을 운영하는) 네트워크 사이에 있던 bridge다.
즉, Ronin은 이더리움의 사이드체인으로 layer2라고 볼 수 있다.
그래서 layer1(ehtereum)과 layer2(ronin)간의 자산 이동이 가능하다.
이는 Lock & Mint방식이 아니라 유동성 방식을 택했다.
이를 사용하니 일정 자금을 Pool에 넣게 되는데, 이 모인 자금이
북한 해커에 의해 탈취당했다.
그 이유는 유동성 Pool에서도 중개자가 있어,
이는 이더리움 네트워크에 누군가의 입금을 알면
Ronin에서 Ronin Contract에 이 새로운 코인을 전달 해달라는 명령을 한다.
그 중개자가 9개의 검증 노드다. 이 노드들이 5개 이상의 키를 가져야
자산 이동 요청을 할 수 있는데 해커가 키를 해킹해 북한으로 자산을 가져온 것이다.
문제는 9개 검증 노드가 각각 키를 하나씩 갖고 있어
9개 중 5개 이상이 서명이 돼야 이동이 이뤄지는데
9개 노드 중 5개 노드를 운영하는 회사가 Axie Infinity 하나였다.
즉, 이 회사 서버만 해킹하면 5개 이상의 키를 한 번에 획득할 수 있던 것이다.
결국 Multi Sig를 잘 활용하지 못한 사례다.
탈중앙화를 시켰지만 실제 내부는 그러지 못한 것이다.

이 자료는 해킹 자금이 탈취된 Tx다.
Tornado.Cash ###
이 탈취한 금액을 세탁하는 과정이다.
Bitcoin은 blender(Mixer)가 CoinJoin방식을 이용했지만,
Ethereum은 SmartContract를 통해 자금세탁이 가능하다.
대표적인 Mixer로 Tornado.Cash가 있다.
해커들이 이더리움 해킹 후 대부분이 이를 통해 자금을 세탁했다.

위 자료가 Lazarus Group이 위의 북한 해킹 그룹인데,
어떻게 해킹했는지 그리고 자금이동의 연결성을 보여준다.
일반적으로 거래소에 입금 후 현금으로 전환도 하고,
대부분 자금들은 분산을 시켜놓고 Tornado.Cash에 입금 후
Mixer를 통해 한 곳을 모아 추적이 불가능 하도록 했다.
이 주소 자체가 미국의 제재목록에 올라왔기 때문에
국내에서 이 주소를 장난삼아 사용하다 범죄조사를 받을 수 있기 때문에 주의해야 한다.
이더리움에서 초창기에 나온 취약점이다.
실제로 공격은 했지만 출금은 되지 않은 형태다.
이 이더리움의 OverFlow 공격은 Smart Contract를 짜는 언어인
Solidity의 변수에는 일정한 범위가 있다.
이를 벗어나는 값을 입력해서 유저의 잔액보다
많은 금액을 송금하도록 하는 방식이다.
변수인 UINT 8의 범위는 0~255값이다.
0에서 -1을 했을 때 -1이 아니라 255가 되게 하는 방식이다.

위 자료로 UINT 256값이라고 하고 0에서 -1을 보내달라는 요청을 하면
이 빨간 박스에 있는 셀 수 없는 최댓값이 전송되는 형태다.
Solidity 0.8버전 이상에서는 자동으로 확인되지만,
그 전에는 직접 체크를 했어야 했다.
다양한 취약점들을 알아보자
이 경우들 마찬가지로 공격을 모두 당했던 사례들이다.
접근권한 제어 문제
ICON에서처럼 !나 =을 잘못 사용해 관리자의 기능을 사용하는 경우도 있고,
Contructor라는 함수 생성을 위한 사용자 권한 지정 기능이 있는데
여기에 아무나 호출을 할 수있게 public함수를 만들고
관리자 권한을 입력하는 형태로 만들게 되면
공격자가 관리자의 지위를 얻고 Smart Contract기능을 마음대로 사용한다.
짧은 주소 공격
EVM자체가 Smart Contract 요청이 왔을 때 함수를 실행하고 파라미터를 실행하면서
전체 자릿수에서 부족한 자리에 0을 채워 공격하는 방식이다.
실제로 사용할 일은 거의 없는데, 거래소에서 출금 주소를 입력할 때 공격할 수 있다.
받는 주소가 abcdef00인 경우 abcdef라고 적어 보낸다.
뒤에 붙는 송금액은 0010인데 주소의 00이 빠지면서
001000으로 뒤에 붙어 10원에서 1000원으로 송금하는 방식이다.
잔액 조건 무효화
특정 잔액 이상이 있어야 실행되는 조건의 함수가 있을 때
공격자가 FallBack를 SelfDestruct로 동작하지 않도록 만든 후
입금을 해서 공격 함수를 실행하는 방식이다.
DoS 공격
Turing Complete한 Smart Contract이기 때문에
반복문을 사용할 수 있다.
주소에 있는 리스트만큼 반복시켜 Contract에 실행에
필요한 Gas Limit을 block gas limit만큼 증가시켜
Tx을 실행하면 Smart Contract 코드가 블록안에 포함되지 않도록해서
결론적으로 SmartContract가 동작하지 못하도록 만드는 공격이다.
이더리움의 역사적으로, 어떤 사건들이 있었는지 간략하게 알아봤다.
일반적으로 Smart Contract는 기능을 개발하는 것과 달리
돈과 항상 연관이 있다보니 개발을 잘못하면 피해 금액이 상상을 초월한다.
이런 종류들의 공격들이 있으니
조심해야할 취약점들을 알고 있어야 한다.
개발자들 또한 당연히 빠지는 부분들이 있기 때문에
Smart Contract를 개발하고 나면 보안 취약점을 찾아주는 서비스들을 통해
확인을 꼭 거쳐 배포를 해야한다.
출처)) 자료 및 내용: 패스트캠퍼스