Blog

Nomad Bridge 해킹 파헤치기, 돈의 흐름을 쫓아라!

Randi Eitzman, Joe Dobson
Dec 07, 2022
5 min read
|   Last updated: Nov 10, 2023
cryptocurrency
cybercrime

2022년 8월 미국의 크로스체인 브릿지(Crosschain Bridge, 이하 브릿지) 서비스 기업인 노마드(Nomad)가 해킹으로 인해 1.9억 달러 규모의 피해를 입었습니다. 브릿지 서비스는 서로 다른 블록체인 간 자산 전송을 위해 등장하였습니다. 노마드 해킹 사건은 브릿지 서비스의 취약점을 노린 것입니다. 서로 다른 블록체인 간 링크 생성을 위해 사용하는 스마트 컨트랙트(Smart Contract)의 결함을 이용한 것입니다. 본 포스팅을 통해 노마드 브릿지의 스마트 컨트랙트가 어떻게 악용되었는지 맨디언트(Mandiant)가 분석한 내용을 공유하고자 합니다. 참고로 손상된 트랜잭션 분석은 CT6(Cyber Team Six)사에서 만든 블록체인 조사 소프트웨어인 CryptoVoyant를 사용해 수행하였습니다.

배경

2022년 8월 초 노마드의 브릿지 해킹 사건이 알려졌습니다. 참고로 브릿지는 두 블록체인 간의 상호운용성을 허용하기 위해 고안된 서비스입니다. 노마드 사건의 경우 스마트 컨트랙트 업데이트 과정에서 조작된 트랜잭션이 적절한 유효성 검사 없이 처리되었습니다.

암호화폐 해킹에서 브릿지는 주요 목표 중 하나입니다. 2022년 한해 동안 13억 달러 이상의 자산이 탈취되었습니다. 대중의 관심을 끈 굵직한 사건으로 2002년 3월 보고된 Ronin 브릿지 공격(피해 금액 6억 달러), 2022년 6월 일어난 Harmomy 브릿지 공격(피해 금액 1억 달러), 2022년 10월 발생한 Binance 스마트 체인 공격(피해 금액 5억 6,800만 달러)을 예로 들 수 있습니다.

노마드 브릿지 해킹은 피해 규모도 컸지만, 이보다 더 큰 관심을 모은 것은 자산을 훔치는 데 기술 지식이 거의 필요하지 않았다는 것입니다. 이로 인해 소셜 미디어에 브릿지의 취약점 소식이 퍼지면서 모방 범죄가 난무하였습니다.

Tweet showcasing the exploit’s popularity
그림 1. 브릿지 관련 취약점에 대한 글을 올린 트윗

노마드는 이번 해킹 사건 관련해 포상금을 내걸었습니다. 조건을 보면 이번 사건에 참여한 공격자는 본인이 탈취한 자산의 10%를 갖고 나머지 90%를 노마드에 반환할 경우 법적 처벌을 받지 않습니다. 더불어 노마드는 스스로 반환한 것에 감사의 뜻을 전하기 위해 Whitehat NFT(Non-Fungible Token)도 증정하겠다고 밝혔습니다. 이 조건이 통했는지 도난당한 1억 9천만 달러 규모의 자산 중 3,600만 달러가 반환되었습니다.

Nomad Whitehat NFT
그림 2. Whitehat NFT를 증정하겠다는 안내 글

용어 둘러보기

해킹 분석 내용을 알아보기에 앞서 탈중앙금융(DeFi), 우리가 흔히 부르는 암호화폐 분야에서 사용하는 주요 용어를 간단히 소개하겠습니다.

브릿지(Bridge)

노마드 브릿지 악용을 이해하려면 먼저 '브릿지'가 무엇인지, 왜 그렇게 많은 브릿지가 악용되었는지 알아야 합니다. 우리가 알고 있는 여러 블록체인은 자체 토큰, 합의 메커니즘, 프로그래밍언어, 스마트 컨트랙트, 네트워크 규칙이 있는 각각 독립적인 노드 네트워크입니다. '브릿지'는 여러 블록체인 네트워크가 상호작용할 수 있는 다리 역할을 합니다. 브릿지를 통해 블록체인 자산을 보유한 이들은 블록체인이 서로 달라도 토큰을 교환할 수 있습니다. 기술적으로 브릿지는 서로 다른 블록체인 간에 자산을 교환할 수 있도록 하는 프로토콜이라 보면 됩니다.

일반적으로 브릿지는 관리형과 비관리형으로 유형을 구분합니다. 관리형 브릿지는 중앙 기관이 제어합니다. 반면에 비관리형 브릿지는 스마트 컨트랙트를 통해 토큰 처리가 관리됩니다. 구조적으로 분산형이라 할 수 있죠. 관리형은 중앙 조직이 어느 정도 제어력을 갖고 있느냐에 따라 안전 여부를 따질 수 있고, 비관리형은 스마트 컨트랙트의 코드의 보안성에서 안전이 갈립니다.

브릿지는 여러 개의 개별 블록체인 네트워크 간의 상호운용성 보장을 위한 수단을 제공합니다. 따라서 브릿지를 통해 연계하는 여러 블록체인의 토큰을 보유하고 있어야 합니다. 토큰 유동을 위해 대규모로 자산 풀을 만들어 놓게 되는데요, 이것이 바로 공격자에게 매력적으로 보이는 대상입니다. 이외에 스마트 컨트랙트도 공격자의 눈에는 먹잇감으로 보일 수 있습니다.

스마트 컨트랙트(Smart Contract)

스마트 컨트랙트는 코드로 제어되는 계정으로 생각할 수 있습니다. 코드에는 프로세스를 자동화하는 로직 등이 포함될 수 있습니다. 스마트 컨트랙트 코드에는 프로세스를 자동화하는 로직, 스마트 컨트랙트 내의 값을 읽거나 수정하는 기능, 특정 작업을 수행할 수 있는 기능 등이 포함될 수 있습니다.

계정 유형, 트랜잭션 및 메시지

이더리움(Ethereum)에는 두 가지 유형의 계정이 있는데 하나는 개인 키로 제어되는 외부 소유 계정(EOA)이고 다른 하나는 스마트 컨트랙트 코드로 제어되는 계약 계정(CA)입니다. 스마트 컨트랙트 코드를 실행하려면 메시지 또는 트랜잭션을 수신해야 합니다. 메시지와 트랜잭션의 차이는 이더라움 백서에 자세히 설명되어 있으니 참조 바랍니다.

Medium은 'Message'입니다.

공식 문서에 따르면 노마드는 트랜잭션/메시지를 활용하여 한 블록체인에서 다른 블록체인으로 데이터를 푸시 하는 방법과 해당 메시지 검증을 위해 Updater라 부르는 Off-Chain 에이전트에 의존합니다.

Messages and updater framework
그림 3. Message 및 Updater 프레임워크

유효 경로를 확인해 메시지 데이터를 증명하는 것이 바로 Off-Chain 에이전트인 Updater입니다. 블록체인 보안 회사인 Halborn에 따르면 프로토콜 업그레이드에서 노마드는 신뢰할 수 있는 루크 값을 0x00으로 초기화하기로 결정하였는데, 이는 일반적인 관행이지만 신뢰할 수 없는 루트 값과 일치하므로 모든 메시지가 자동으로 입증된 것으로 표시됩니다.

즉, 업그레이드로 인해 루트 값이 0x00인 모든 트랜잭션/메시지는 자동으로 검증된 것으로 간주되므로 누구나 해당 루트 값으로 트랜잭션/메시지를 구성하고 process() 함수를 직접 호출하여 트랜잭션을 처리할 수 있는 것입니다.

공격적인 트랜잭션/메시지

이더리움 트랜잭션에는 'Data'라는 필드가 포함되어 있으며 일반적으로 트랜잭션이 스마트 컨트랙트와 상호작용할 때 이 필드 내의 데이터는 스마트 컨트랙트의 특정 기능을 호출할 수 있습니다.

Example of Ethereum transaction structure
그림 4. 이더리움 트랜잭션 구조의 예

이 필드에서 공격자는 process() 함수를 직접 호출하고 수신자 주소를 자신의 주소로 바꾸고 새 트랜잭션을 브로드캐스트 합니다. 이런 악의적인 트랜잭션의 예는 Etherscan에서 볼 수 있으며, 입력 데이터는 다음 그림과 같습니다.

Input data found in exploitive transaction with recipient address highlighted
그림 5. 수신자 주소가 강조 표시된 트랜잭션에서 발견한 입력 데이터

참고로 Coinbase에서 발행한 공격 분석 보고서를 보면 공격자가 브릿지 메시지를 처음부터 만들지 않고 대신 패치된 주소로 기존 트랜잭션을 재생했을 것이란 내용이 나옵니다.

On-Chain 분석

맨디언트는 사이버 범죄 방지 회사인 CT6와 협력해 손상 후 On-Chain 트랜잭션 패턴을 분석했습니다. 맨디언트는 블록체인 조사 소프트웨어인 CryptoVoynat를 사용해 노마드 브릿지에서 2백만 달러 이상의 토큰을 훔친 주소 목록에서 4개의 개별 클러스터를 식별하였습니다.

  • 각각 미화(USD) 200만 달러 이상을 훔친 14개 주소
  • 23개 주소가 각각 미화 100만에서 200만 사이의 토큰을 훔쳤습니다.
  • 281개의 주소가 각각 미화 10만 달러에서 100만 달러 사이의 토큰을 훔쳤습니다.
  • 215개의 주소가 각각 미화 1,000달러에서 10만 달러 사이의 토큰을 훔쳤습니다.

200만 이상 클럽

200만 달러 이상을 훔친 14개 주소를 분석하는 과정에서 4개의 개별 주소 그룹을 식별할 수 있었습니다.

Four distinct actor/groups who stole over $2 million each
그림 6. 각각 200만 달러 이상을 훔친 4개의 그룹

그룹 A

그룹 A는 3개의 주소(흰색으로 표시)로 구성되어 있으며 각 주소는 도난당한 자금의 일부를 노마드에 반환하였습니다.

Group A (addresses that returned funds)
그림 7. 그룹 A(탈취 토큰을 반환한 주소)

3개 주소 중 1개만 도난한 토큰의 대부분(77.6%)을 반환하였고 다른 2개 주소는 각각 1.7%, 3.4%만 노마드에 돌려주었습니다.

Return Details for Group
표 1. 그룹 A의 반환 내역

그룹 B

주황색으로 표시한 그룹 B에 속하는 두 개의 주소 중 하나는 2022년 4월 발생한 Rari Capital 취약점과 연관되어 있습니다. 이는 이 행위자/그룹이 금전적이 이익을 위해 스마트 컨트랙트를 악용한 경험을 있음을 보여줍니다. 이 행위자/그룹은 약 400만 달러 이상의 토큰을 훔치고 DeFi 교환 1inch를 활용해 다른 토큰으로 교환한 다음 자금 세탁의 일환으로 TornadoCash를 이용해 전송하였습니다.

Group B (addresses associated with Rari Capital exploit leveraging 1inch and TornadoCash)
그림 8. 그룹 B 관련 주소

그룹 C

맨디언트는 빨간색으로 표시한 그룹 C의 주소가 동일한 행위자/그룹이라고 평가하고 있습니다. 이 행위자/그룹은 약 500만 달러 상당의 토큰을 훔쳤습니다. On-Chain 분석에 따르면 해당 자금은 Uniswap을 통해 다른 토큰으로 교환되었고 이후 TornadoCash를 통해 자금 세탁이 이루어졌습니다.

Group C (addresses that leveraged Uniswap and TornadoCash)
그림 9. 그룹 C 관련 주소

그룹 D

맨디언트는 검은색으로 표시한 그룹 D의 주소가 동일한 행위자/그룹에 속한다고 봅니다. 노마드 브릿지에서 도난당한 금액은 분석 당시 미화로 5,400만 달러에 이르는 것으로 평가하고 있습니다. On-Chin 분석 결과를 보면 행위자/그룹은 탈취한 토큰을 다른 토큰으로 교환하기 위해 OrionPool, Uniswap, Curve 같은 여러 분산형 교환 풀을 활용하였습니다. 토큰 교환을 한 다음 행위자/그룹은 일부 자금을 TornadoCash를 통해 보내고 일부는 두 개의 별도 입금 주소(보라색 표시)로 보냅니다. 해킹 사건으로 탈취 당한 5,400만 달러 중 약 5,000만 달러가 두 개의 보라색으로 표시한 입금 주소에 있습니다.

Group D (addresses that leveraged multiple swap pools and TornadoCash)
그림 10. 그룹 D가 활용한 주소

결론

2만 개 이상의 암호화폐 토큰이 통용되고 있는 세상에서 브릿지는 블록체인 간 상호운용성을 촉진하는 데 중요한 역할을 합니다. 그리고 이 역할은 위협 행위자의 눈에 기회로 비추어집니다. 이는 2022년 한 해 브릿지를 노린 공격을 통해 20만 달러 상당의 토큰이 도난당한 사실을 통해 잘 알 수 있습니다.

암호화폐 네트워크에서 돈이 유통되는 속도는 전통적인 금융 시스템과 비교해 훨씬 느립니다. 하지만 강력한 규제 아래 KYC(Know Your Customer)를 적용하는 일반 금융 시스템에 비해 익명성 측면에서 매력이 큽니다. 이런 특징으로 위협 행위자가 토큰을 훔치고 이를 신속하게 교환을 통해 세탁을 하여 달러, 루블 같은 명목 화폐로 손쉽게 전환할 수 있습니다. On-Chain 분석은 불법 토큰의 유통 경로를 증명하는 데 도움이 되지만 믹서, DeFI 스왑풀, 비 KYC 교환은 규제 당국 측면에서 보면 여전히 도전 과제입니다.

암호화폐 부문의 성장이 지속됨에 따라 맨디언트는 앞으로도 공격자에게 매력적인 대상이 될 것이라 봅니다. 이에 따라 블록체인 관련 비즈니스를 하거나 개발을 하는 경우 개발자가 광범위한 보안 평가를 수행할 것을 권장합니다.