< 이 글은 Gate web3 의 지원을 받아 changemakers council 활동의 일환으로 만들어졌습니다. >
스캠 프로젝트의 지갑 드레인은 직접적인 피해 뿐만아니라 블록체인 업계에 대한 인식을 나쁘게 만들고 있습니다.
이 드레인을 어떻게 막을 수 있을지 생각해보다가,
악의적인 프로그램을 걸러내는 것 자체는 기존의 방식과 다를 것 같지 않다는 생각을 하게 되었습니다.
그래서 기존 방식을 가볍게 알아보고 블록체인에도 적용할 수 있다는 것을 알리는 글을 써 보았습니다.
스마트 컨트랙트의 바이트코드를 원래 언어로 역설계하고 이를 분석하는 방식으로 악의적인 코드를 추측할 수 있습니다.
그러나 현실적으로 수많은 프로젝트가 빠르게 생기고 없어지는 특징, 검증에 시간이 걸린다는 특징을 고려할 때,
우리는 버너 지갑을 운영해야 합니다.
- 드레인이 무엇인가요?
지갑을 해킹해 해당 지갑에 있는 모든 자산을 공격자가 원하는 곳으로 보내는 것을 드레인이라고 합니다.
이는 컨트랙트의 취약점이나 사용자의 부주의를 이용해서 이뤄집니다. 피해가 발행하면, 되돌리기가 정말 어렵습니다.
- 스마트 컨트랙트가 무엇인가요?
스마트 컨트랙트는 이름은 스마트이지만 그렇게 스마트하지는 않습니다.
송금 기록을 블록에 기록하여 그것을 조작할 수 없게 함으로써 탈중앙을 외친 비트코인과는 다르게,
어떤 코드를 블록에 기록하여 이 코드가 호출되고 조건에 충족되었을 때 노드 상의 버추얼 머신에서 코드 내용을 실행하도록 설계한 것이 스마트 컨트랙트입니다. 어떤 어플리케이션을 중간에서 검열하는 집단 없이 접근할 수 있도록 하여 탈중앙을 외쳤습니다.
- 바이트코드가 무엇인가요?
바이트코드는 사람이 만든 프로그램 언어를 기계가 실행할 수 있도록 번역한 것을 말합니다. 자바 버추얼 머신과 비슷하게, 이더리움 버추얼 머신은 코드가 특정 하드웨어에 종속되어 다른 결과를 만들어내지 않도록 가상 머신에서 작동하게 만든 것입니다.
버추얼 머신을 만들어 코드를 실행시키게 하는 이유에는 하드웨어 종속을 막는 것도 있지만, 하드웨어와 버추얼 머신 사이의 개발과 버추얼 머신과 어플리케이션 사이의 개발로 나누어 전체적인 발전을 좀 더 효율적으로 이루는 것도 시도합니다.
위의 사진은 자바의 그것이고, 아래의 사진은 이더리움의 그것입니다.
뭔가 비슷하죠?
- 리버스 엔지니어링이 무엇인가요?
사람이 만든 코드가 바이트코드로 변환된다면, 이 바이트코드를 다시 사람이 읽을 수 있도록 만드는 것을 리버스 엔지니어링이라고 합니다.
코드 원본으로 번역하지는 못하더라도 전체적인 구조나 흐름을 파악할 수 있습니다.
소스 코드로 옮기는 것이 아니라 동작 방식과 일정 부분을 알아내는 것도 리버스 엔지니어링에 포함됩니다.
그림은 C 언어와 같은 경우이긴 한데, 의도는 동일합니다.
- 블록체인에 기록된 스마트 컨트랙트의 소스 코드 또는 바이트 코드를 볼 수 있나요?
볼 수 있습니다. 특정 주소를 검색하면 지갑 또는 컨트랙트가 나옵니다. 지갑인 경우 잔액이 나오고, 컨트랙트인 경우 소스 코드와 바이트코드 모두 공개되어 있거나 바이트코드만 공개되어 있습니다.
코인마켓캡과 이더스캔에서 원하는 정보를 찾을 수 있습니다.
컨트랙트 주소를 찾아서,
이더스캔에서 검색해 테더의 스마트 컨트랙트를 찾을 수 있습니다.
소스 코드를 볼 수 있거나,
바이트 코드를 직접 볼 수 있습니다.
- 역설계가 가능한 언어로는 무엇이 있나요?
다양한 언어들이 역설계가 가능합니다. 유명한 언어들은 대부분 누군가가 툴을 이미 만들어 놓은 경우가 많습니다.
C와 C++과 같은 컴파일 언어의 경우, 바이트코드 생성이 없이 바로 실행파일로 번역됩니다. 이런 경우에도 Disassembling, Decompiling을 통해 완전히 같지는 않지만 어느정도의 구조를 알 수 있습니다.
이더리움에 기록되는 바이트코드로 번역된 소스코드의 경우에도 역설계가 가능하도록 이미 만들어 놓은 사람이 있습니다.
- 현실적으로 어떻게 드레인을 피할 수 있나요?
소스코드를 분석하거나 바이트코드를 역설계해 악의적인 의도나 취약점을 걸러낼 수 있으나, 현실적으로 시간이 걸립니다.
그래서 일반적인 사용자의 경우 대부분의 자산을 안전하게 보관만 하는 지갑을 따로 운영하고, 외부와 접촉하는 지갑을 여러개 따로 운영하여 가능한 위험성을 줄일 필요가 있습니다. 이 외부 접촉 용도로 운영하는 지갑을 '버너 지갑' 이라고 합니다.
지갑에서 어떤 웹 사이트에 접속해 서명을 하는데, 먼저 해당 사이트 주소가 공식이 맞는지 확인해야 합니다. 해당하는 주소가 공식 사이트라고 하더라도, 믿을 수 있을 만큼 충분히 X나 텔레그램에서 팔로워를 보유하고 있는지, 다른 피해자들은 없었는지 확인합니다. 확인을 충분히 한 이후, 내 대부분의 자산이 있는 지갑이 아니라 일부만 들어 있는 버너 지갑을 이용해 서명을 해 리스크를 최소화할 수 있습니다.
- 맺으며
악의적인 코드를 대놓고 표기해놓지는 않습니다.
또 취약점이라고 몰랐다고 핑계댈 수도 있는 문제입니다.
따라서 역설계를 통하든 공개된 코드를 통하든 검증하는 것은 지속적으로 발전되어야 할 영역입니다.
신용의 문제이기 때문에, 무엇보다 중요합니다.
그러나 발전과 중요성과는 별개로 당장 드레인이 일어나고 있고 그런 환경에 우리가 노출되어 있어서, 버너 지갑을 이용해 리스크를 최소화하도록 해야 할 것입니다.
'대외활동 > Gate Web3 Changemakers Council 1기' 카테고리의 다른 글
Gate Changemakers Council 1기 활동을 시작합니다! (0) | 2024.03.21 |
---|