테라(Terra) 사태로 알아보는 메인넷 및 브릿지의 보안성

100y
Decipher Media |디사이퍼 미디어
27 min readMay 29, 2022

본 아티클에서는 최근 테라(Terra) 네트워크에서 발생했던 UST디페깅 (de-pegging)사태 및 토큰 가격 하락이 블록체인 보안에 미치는 영향에 대해 다룹니다. 글에 들어가기 앞서서, 필자는 테라와 아무런 연관이 없음을 밝히며, 본문은 정보 제공을 목적으로 작성된 글이며, 투자 의사 결정에 대한 근거로 사용될 수 없습니다.

Author
Jason(@100y_eth)
Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)
Researcher, a41(@ a41-ventures)
Reviewed By Jay(정재환)

목차

  1. 테라(Terra) 네트워크 개요
  2. Luna-UST 급락 사태
  3. 텐더민트(Tendermint) 합의 알고리즘
  4. 테라 사태 동안의 블록체인 보안 수준
  5. bETH는 안전할까? — 웜홀(Wormhole) 브릿지
  6. 오스모시스(Osmosis)는 안전할까? — IBC
  7. 비탈릭 부테린의 선견지명

1. 테라(Terra) 네트워크 개요

테라 네트워크는 2019년 3월에 탈중앙 네트워크를 위한 탈중앙 스테이블 코인을 만들겠다는 일념으로 탄생한 블록체인 네트워크입니다. 테라 네트워크는 코스모스SDK로 개발되었으며, 텐더민트(Tendermint) 합의 알고리즘을 사용합니다. 텐더민트 합의 알고리즘에 대해서는 뒤에서 더 자세히 알아보도록 하겠습니다.

테라 네트워크의 가장 특별한 특징이라고 하면, 단연 알고리즈믹 스테이블 코인(Algorithmic Stablecoin)을 꼽을 수 있습니다. 기존 스테이블 코인은 현실세상의 달러를 담보로 받고 블록체인 네트워크 상에서 발행되는 테더(Tether)사의 USDT, 써클(Circle)사의 USDC, 혹은 이더리움과 같은 암호화폐를 담보로 받고 발행되는 메이커 다오(Maker Dao)의 DAI와 같이 담보를 받는 것이 주류였습니다. 이러한 종류의 스테이블 코인들의 경우 담보가 존재하기 때문에 가격 안정성이 뛰어나다는 장점이 있으나, 담보가 묶인 상태이기 때문에 자본이 효율적으로 사용되지 못한다는 단점이 있습니다.

이에 반해, 테라 네트워크는 알고리즘 기반의 스테이블 코인을 선보였습니다. 테라는 가격 안정성을 보장하기 위해 담보를 필요로 하지 않으며, LUNA라는 토큰과 알고리즘을 통해 테라의 스테이블 코인인 UST의 가격 안정성을 조절합니다. 더 자세한 내용을 위해선 디사이퍼 미디엄에 작성된 ‘[스테이블코인 시리즈] 특별편 Terra, 새로운 스테이블코인 시대의 개막’을 참고하시는 것을 추천드리며, 본 글에서는 간략히 설명하도록 하겠습니다.

알고리즈믹 스테이블 코인, UST의 가격 유지 메커니즘

UST는 담보를 통해 $1에 페깅하는 것이 아닌, 담보가 없는 상태로 LUNA와 알고리즘을 통해 가격이 유지됩니다. 테라 블록체인은 자체 온체인 스왑을 통해 목표 교환 비율로 UST와 LUNA의 거래를 지원합니다. 만약 UST의 가격이 목표 교환 비율에 벗어나게 된다면 차익 거래자들은 이를 차익 거래의 기회로 이용할 수 있으며, UST는 다시 $1의 가격으로 페깅될 수 있습니다. 예시를 통해 살펴보겠습니다.

1 UST < $1

Source: Decipher

만약 1 UST의 가격이 $1보다 낮게 거래된다고 가정해봅시다. 차익거래자는 테라 프로토콜에 1 UST를 소각시키고 $1 가치의 LUNA 코인을 발행받을 수 있습니다. 차익거래자는 $1보다 저렴한 1 UST를 소각시켜 $1 가치의 LUNA 코인을 발행받았기 때문에 이익을 볼 수 있고, 결과적으로 UST는 소각되어 총 공급량이 감소했기 때문에 UST의 가격은 다시 $1과 가까워지도록 상승할 것으로 기대할 수 있습니다.

1 UST < $1

Source: Decipher

만약 1 UST의 가격이 $1보다 높게 거래된다고 가정해봅시다. 차익거래자는 테라 프로토콜에 $1 가치의 LUNA 코인을 소각시키고 1 UST를 발행받을 수 있습니다. 차익거래자는 $1 가치의 LUNA 코인으로 $1보다 비싼 UST를 발행받았기 때문에 이익을 볼 수 있고, 결과적으로 UST는 발행되어 총 공급량이 증가했기 때문에 UST의 가격은 다시 $1과 가까워지도록 하락할 것으로 기대할 수 있습니다.

2. LUNA-UST 급락 사태

5월 8일, UST의 가격이 2% 하락했지만, 다시 알고리즘을 통해 복구했음에도 불구하고, 5월 10일 UST의 가격이 $1.0을 크게 벗어나기 시작하며 소위 death spiral이라고 불리는 악순환이 발생하기 시작했습니다. UST의 가격이 하락함에 따라 신뢰를 잃은 사용자들은 UST를 시장에 매도하기 시작했으며, 테라 프로토콜에서는 UST의 가격을 다시 알고리즘을 통해 $1.0으로 맞추기 위해 대량의 LUNA가 발행되기 시작했고, 이는 LUNA가격의 폭락을 낳았습니다.

UST-3pool Pool balance (Source: Dune @mhonkasalo)

이번 사태의 특이점을 말씀드리면 익명의 주소의 공격이 있었다는 것입니다. Curve Finance의 UST-3pool (UST, USDC/USDT/DAI)에서 유동성이 4pool (UST, FRAX, USDC, USDT)로 이동하여 UST-3pool의 풀 크기가 줄어들자마자(위 그림의 붉은색 화살표) 대량의 UST 매도 스왑(swap)이 발생하여 UST-3pool 내의 풀 밸런스가 심각하게 깨지게 되며(위 그림의 푸른색 원) 스테이블 스왑 AMM임에도 불구하고 UST 가격의 디페깅이 일어났습니다. 이후 회복하는 듯 보였으나 앵커 프로토콜(Anchor Protocol)에서 많은 양의 UST가 출금되었고, UST의 매도압력은 강해져 심각한 디페깅이 발생했습니다. 의도적인 공격이 아니라면 지난 수많은 폭락장들처럼 다시 UST가 $1에 페깅 될 가능성도 있을 수 있었겠지만, 공격자는 UST의 가치가 담보가 없는 상태로 어느 정도 신뢰에 의존한다는 사실을 이용하여 초기 페깅을 크게 깨뜨렸고, 이는 LUNA, UST가 폭락하는 결과로 이어졌습니다.

본 글에서는 이번 사태의 경과나 원인에 대해서 자세히 다루지는 않겠으나, 이번 사태가 블록체인의 보안적인 측면에서 어떤 영향을 주었는지 서술해보도록 하겠습니다. 테라 블록체인은 텐더민트 합의 알고리즘을 따르기 때문에 이에 대해 먼저 살펴보겠습니다.

3. 텐더민트(Tendermint) 합의 알고리즘

테라 네트워크는 코스모스 SDK로 만들어진 블록체인이며, 따라서 합의 알고리즘은 텐더민트(Tendermint) 코어의 것을 따릅니다. 텐더민트 합의 알고리즘을 알아보기 전에 비잔틴 장애 허용(BFT; Byzantine Fault Tolerance)에 대해 살펴보겠습니다.

비잔틴 장애 허용(이하 BFT)

BFT는 블록체인과 같은 분산 시스템에서 장애가 있거나 악의적인 행위를 하는 부분이 전체의 3분의 1을 넘지 않는다면, 분산 시스템이 정상적으로 작동할 수 있도록 하는 알고리즘입니다. 이는 두 장군 문제(Two Generals Problem)를 일반화한 비잔틴 장군 문제로부터 탄생되었습니다.

비잔틴 장군 문제 (Source: Wikipedia)

비잔틴 장군 문제(Byzantine Generals’ Problem)는 셋 이상의 참여자가 네트워크에 존재할 때 합의를 도출하는 문제입니다. 가운데에 점령해야 할 성을 사이에 두고 각 부대들이 주둔하고 있습니다. 점령에 성공하기 위해선 같은 시각에 일정 규모의 병력이 모여 한 번에 공격을 해야 합니다. 하지만 각 장군들은 서로를 신뢰할 수 없으며, 장군들 중엔 배신자가 존재할 수 있습니다.

각 장군은 서로 메시지를 통해 소통이 가능하며, 처음에 한 명의 사령관이 다른 모든 장군들에게 공격 혹은 후퇴 명령을 전달하고, 장군들은 나머지 장군들에게 사령관으로부터 받은 메시지의 내용을 전달하고, 최종적으로 각 장군들은 다른 장군들로부터 받은 메시지의 내용을 종합하여 공격 혹은 후퇴 결정을 내립니다.

배신자가 1/3 이상인 경우

컬러 인물: 사령관, 흑백 인물: 장군 / 빨강: 공격 메시지, 파랑: 후퇴 메시지

1명의 사령관과 2명의 장군, 총 3명으로 이루어져 있고, 배신자가 1명 존재한다고 가정합시다. 즉 배신자가 전체의 1/3 이상인 경우를 뜻하며, 누가 배신자이든 상관 없이 아래와 같이 공격은 실패로 돌아가게 됩니다.

사령관이 배신자인 경우 — 사령관은 일부로 한 장군에게는 공격 명령을, 다른 장군에게는 후퇴 명령을 내립니다. 이 두 장군은 서로 사령관에게 받은 메시지 내용을 교환합니다. 각 장군들 입장에서 자기가 받은 메시지를 종합할 때, 공격과 후퇴 메시지를 각각 1개 씩 받았기 때문에 성을 공격해야 할지, 후퇴해야 할지 결정하지 못하고 공격은 실패로 끝나게 됩니다.

장군이 배신자인 경우 — 사령관은 두 장군 모두에게 공격 명령을 내립니다. 배신자 장군은 일부로 다른 장군에게 후퇴 메시지를 전달합니다. 충직한 장군의 입장에서 자기가 받은 메시지를 종합할 때, 공격과 후퇴 메시지를 각각 1개 씩 받았기 때문에 성을 공격해야 할지, 후퇴해야 할지 결정하지 못하고 공격은 실패로 끝나게 됩니다.

배신자가 1/3 이하인 경우

컬러 인물: 사령관, 흑백 인물: 장군 / 빨강: 공격 메시지, 파랑: 후퇴 메시지

1명의 사령관과 3명의 장군, 총 4명으로 이루어져 있고, 배신자가 1명 존재한다고 가정합시다. 즉 배신자가 전체의 1/3 이하인 경우를 뜻하며, 누가 배신자이든 상관 없이 아래와 같이 공격은 성공할 수 있습니다.

사령관이 배신자인 경우 — 사령관은 일부로 두 장군에게는 공격 명령을, 나머지 장군에게는 후퇴 명령을 내립니다. 세 장군은 서로 사령관에게 받은 메시지 내용을 교환합니다. 각 장군들 입장에서 자기가 받은 메시지를 종합할 때, 2개의 공격 메시지와 1개의 후퇴 메시지를 받았기 때문에 성을 공격한다는 합의에 도달할 수 있습니다.

장군이 배신자인 경우 — 사령관은 세 장군 모두에게 공격 명령을 내립니다. 배신자 장군을 일부로 다른 두 장군에게 후퇴 메시지를 전달합니다. 충직한 장군들의 입장에서 자기가 받은 메시지를 종합할 때, 2개의 공격 메시지와 1개의 후퇴 메시지를 받았기 때문에 성을 공격한다는 합의에 도달할 수 있습니다.

비잔틴 장군 문제를 블록체인 네트워크에 적용하면, 사령관과 장군들은 블록체인 네트워크를 유지하는 노드(Node)라고 볼 수 있습니다. 따라서 분산화 시스템에서 합의를 달성할 수 있는 방법은 최소 2/3 이상의 정직한 노드를 확보해야 합니다. 또한 위의 경우 비잔틴 장군 문제를 해결하기 위해서는 각 장군들의 통신이 동시에 이루어져야만 했습니다. BFT는 노드 간 통신이 반드시 이루어지는 동기 네트워크(Synchronous Network)에만 적용될 수 있습니다. 따라서 노드 간 통신이 제대로 이루어지는지 확인이 불분명한 비동기 네트워크(Asynchronous Network)에도 적용하기 위해서 실용적 비잔틴 장애 허용 (PBFT; Practical Byzantine Fault Tolerance)이 등장합니다.

실용적 비잔틴 장애 허용(이하 PBFT)

Soruce: Practical Byzantine Fault Tolerance

PBFT는 BFT와 비슷하지만 비동기 네트워크에도 적용될 수 있는 합의 알고리즘입니다. 노드들 중에는 클라이언트(Client)에게 받은 첫 요청을 다른 모든 노드들에게 전파하는 Primary 노드가 존재하며, 동작하는 방식은 다음과 같습니다.

  1. Pre-Prepare: Primary 노드는 클라이언트의 요청을 다른 노드들에 전파합니다.
  2. Prepare: Primary 노드의 메세지를 받은 노드들은 Primary 노드를 포함한 다른 노드들에게 전달 받은 메세지를 한 번 더 전파합니다.
  3. Commit: 모든 노드들은 자신이 다른 노드들로부터 가장 많이 받은 같은 메세지가 무엇인지를 다시 한 번 더 다른 노드들에게 전파합니다.
  4. Reply: 마지막으로 노드들은 합의를 이룬 같은 데이터를 클라이언트에 반환합니다.

한 번의 합의 절차를 갖는 BFT와 달리 PBFT에서는 두 번의 합의 절차(Prepare, Commit)를 거침으로써 비동기 네트워크에서 다른 노드들이 모종의 이유로 메세지를 수신 받지 못한다고 할지라도 악의적인 노드로 인해 시스템이 붕괴되는 것을 막을 수 있습니다.

텐더민트(Tendermint) 합의 알고리즘

Source: Tendermint

텐더민트 합의 알고리즘은 PBFT와 위임지분증명(DPoS)를 합친 알고리즘입니다. 첫 번째로, 텐더민트 합의 알고리즘은 PBFT와 매우 유사하며 텐더민트 합의 과정에서 Propose, Prevote, Precommit은 PBFT 과정에서 Pre-Prepare, Prepare, Commit에 해당됩니다. 텐더민트 합의 과정에서는 Prevote와 Precommit 과정에서 두 번의 2/3 합의 과정을 거치게 됩니다.

두 번째로, 위임지분증명에 대해서 알아보겠습니다. PBFT 합의 알고리즘을 사용하는 네트워크 상 노드(밸리데이터)의 수를 무한히 늘릴 수 없습니다. 위의 합의 과정에서 알아봤듯이 각 노드들간 메세지를 전파하는 과정이 있는데, 노드의 수가 많아질수록 서로 주고 받아야 할 메세지가 기하 급수적으로 증가합니다. 즉, 노드가 너무 적으면 악의적인 비잔틴 노드에 의해 시스템이 무너질 우려가 있으며, 너무 많으면 주고 받아야할 메세지의 양이 많아지므로 적당한 수의 노드를 유지해야 합니다. 따라서 PBFT 합의 알고리즘에서는 노드의 수를 가변적으로 하기 보단 적당한 수의 노드를 일정하게 유지하는 것이 유리하며, 이는 지분증명(PoS)에서도 위임지분증명(DPoS)를 사용하는 이유입니다. DPoS에서는 토큰 홀더들이 원하는 밸리데이터들에게 보유하고 있는 토큰을 위임할 수 있으며, 실제로 네트워크를 유지하는 역할은 정해진 수의 밸리데이터 노드들이 진행하게 됩니다.

4. 테라 사태 동안의 블록체인 보안 수준

테라 네트워크의 네이티브 토큰인 LUNA는 UST의 가격 안정성을 위해 UST의 변동성을 흡수하는 역할에 앞서, 텐더민트 합의 알고리즘을 사용하는 테라 블록체인의 보안을 담당하는 토큰입니다. 테라 네트워크의 보안은 스테이킹된 LUNA의 가치에 의해 결정되며, PBFT를 사용하기 때문에 스테이킹된 LUNA 중에 악의적인 참여자들이 1/3 이상을 가지고 있으면 블록 생성을 계속 거부하며 네트워크를 마비시킬 수 있으며, 2/3 이상을 가지고 있다면 오히려 블록을 자신들이 원하는 방향으로 마음대로 생성할 수 있기 때문에 다른 참여자들의 자금을 탈취할 수 있는 현상까지 일어날 수 있습니다.

위에서 설명드렸던 UST 디페깅 사태가 일어나는 도중, 알고리즘으로 엮여있었던 LUNA의 가치도 함께 급락했으며, 따라서 테라 네트워크에 스테이킹 된 LUNA의 전체 가치도 보안 수준이 위협 받을 정도로 급락하는 현상이 발생했습니다. 네트워크 전체의 보안이 위협 받을 수준에 처하자 급기야 테라폼랩스와 밸리데이터들은 합의 하에 한국시간 5월 13일 01시에 블록체인을 멈추기로 결정했습니다.

블록체인을 중단시킨 이유는 유저들이 밸리데이터들에게 LUNA를 위임하는 기능을 중단하는 패치를 적용함으로써 더 이상 추가적인 LUNA 스테이킹으로 인한 공격을 막기 위해서였습니다. 과연 블록체인이 멈추기 전, 얼마 정도의 자금으로 테라 네트워크를 공격할 수 있었기에 블록체인을 중단시킬 결정까지 내렸는지 아래에서 계산해보도록 하겠습니다.

우선 네트워크에 스테이킹된 LUNA의 개수를 알아야 합니다. 현재 테라 블록체인이 무너짐에 따라 통계를 제공하던 많은 웹사이트들이 서비스를 중단하여 정확한 수치는 확인할 수는 없으나, 필자가 5월 13일 09시에 캡쳐해둔 대시보드를 통해 유추를 해볼 수 있습니다.

5월 13일 09시 당시의 통계 (Source: Terra station)

이는 새벽에 블록체인이 중단되고 밸리데이터의 위임 기능이 제거 업데이트 이후 재개되었을 때이며, 위임 기능이 중단되었으니 이 때 스테이킹 된 LUNA의 개수가 네트워크가 멈추기 전 스테이킹 되어있었던 LUNA의 개수라고 생각할 수 있습니다. 네트워크가 멈추기 전 스테이킹 된 LUNA의 개수는 발행량 (254.17B)에 스테이킹 비율 (0.25%)를 곱한 635,425,000개로 계산할 수 있습니다.

네트워크가 중단되기 전 5월 13일 01시 기준 LUNA의 가격은 $0.006이었습니다. 따라서 네트워크에 스테이킹 된 LUNA의 전체 가치는 가격 ($0.006)에 개수 (635,425,000)를 곱해 $3,812,550로 계산을 할 수 있습니다. 이 수치를 기반으로 아래와 같이 두 가지 경우로 네트워크 공격에 필요한 금액을 계산할 수 있습니다.

네트워크 공격을 위해 필요한 금액

1. 악의적인 밸리데이터들이 담합하여 공격에 가담하는 경우

네트워크를 유지했던 밸리데이터들이 공격을 주도할 가능성은 매우 낮다고 생각되지만, 이 경우 밸리데이터들끼리 담합하여 스테이킹된 전체 LUNA의 1/3 ($1,270,850)을 보유하고 있다면 블록 생성을 방해하여 네트워크를 악의적으로 중단시킬 수 있으며, 2/3 ($2,541,700)을 보유하고 있다면 네트워크 상의 악의적인 블록 생성이 가능해집니다. 밸리데이터들의 경우 이미 LUNA를 보유하고 있었기 때문에 공격에 있어 추가적인 자금 투입은 필요 없으나, 보유하고 있는 LUNA의 가치가 공격으로 얻을 수 있는 이익보다 낮아지게 된다면 공격을 시행할 경제적 유인이 생길 수 있습니다.

2. 밸리데이터 혹은 제 3자가 LUNA를 추가 주조하여 공격에 가담하는 경우

추가 자금을 투입하여 네트워크를 공격하는 경우를 고려해봅시다. 유동성의 문제가 있기 때문에 추가 공격을 위한 대량의 LUNA를 시장에서 구하는 것은 어렵습니다. 하지만 테라 프로토콜에는 UST의 가격 안정성을 위해 UST를 소각하고 LUNA를 주조할 수 있는 온체인 스왑 기능이 있습니다. 네트워크에 스테이킹 되어있는 LUNA의 가치가 $3,812,550이기 때문에 이의 절반인 1,906,275 UST치의 LUNA를 발행하여 스테이킹할 수 있다면 1/3을 차지하여 블록 생성을 방해하여 네트워크를 마비 시킬 수 있었습니다. 또한, 만약 7,625,100 UST치의 LUNA를 발행하여 스테이킹할 수 있다면 2/3을 차지하게 됨으로써 네트워크 상의 악의적인 블록생성까지 가능했습니다.

여기서 아직 고려하지 않은 재밌는 사실이 있습니다. 바로 UST의 가격입니다. 테라 프로토콜 내의 온체인 스왑은 1 UST을 소각시킴으로써 $1 가치의 LUNA를 발행할 수 있습니다. 네트워크가 중단되기 직전인 5월 13일 01시의 UST의 가격은 $0.05였습니다. 따라서 실제로는 1/3을 차지하기 위해서 $1,906,275가 아닌 0.05를 곱한 $95,313(약 1.2억원)만 있으면 됐으며, 2/3을 차지하기 위해선 $7,625,100이 아닌 $381,255 (약 4.8억원)만 있었으면 됐던 것입니다. 이 당시 테라 네트워크에 예치된 총 자산의 규모가 약 $1B (약 1.2조원)이었던 것을 감안하면 상당히 보안에 취약한 수준이었음을 알 수 있습니다.

네트워크를 공격할 경제적 유인

과연 약 1.2조원의 자금이 존재하는 네트워크를 약 4.8억원을 들여 공격하면 무조건적으로 이익을 볼 수 있을까요? 정답은 ‘금액적인 부분이 차이가 많이 남에도 불구하고 고려해보아야 한다’입니다. 왜냐하면 테라 블록체인이 2/3의 악의적인 공격을 받는 순간 LUNA, UST등과 같이 테라 생태계와 관련된 토큰들의 가치는 0이 되어버리기 때문입니다. 공격자들이 네트워크 상의 토큰들을 현금화 하려고 시도해도 이미 보안이 무너져버린 네트워크 상의 자금이기 때문에 아무도 이를 구매하려고 하지 않을 것입니다. 따라서 4.8억원을 들여 네트워크를 공격한다고 해도, 네트워크 상의 1.2조원의 자금 중 대부분은 공격자들의 수익으로 들어가는 것이 아닌, 그냥 공중분해되어 가치가 0이 될 것입니다. 그렇다면 공격자들은 네트워크를 공격하여 아무 수익도 얻지 못하는 것일까요? 정답은 ‘아니다’입니다. 공격자들은 어떤 방식으로 수익을 얻을 수 있을지 알아보도록 하겠습니다.

5. bETH는 안전할까? — 웜홀(Wormhole) 브릿지

첫 번째로 테라 네트워크 상에는 LUNA, UST와 같은 네이티브 자산 외에도, 브릿지를 통해 다른 블록체인 네트워크에서 넘어온 자산들이 있습니다. 가장 대표적인 예시로 담보 대출 프로토콜인 앵커 프로토콜(Anchor Protocol)에서 담보로 쓰이는, 웜홀(Wormhole) 브릿지를 통해 이더리움 네트워크로부터 넘어온 이더리움의 스테이킹 유동화 토큰인 bETH가 있으며, 그 외에도 다양한 네트워크로부터 브릿지를 통해 넘어온 bATOM, bSOL, wasAVAX 등이 있습니다. 이러한 자산들의 가치는 각자의 네트워크들에서 유지되기 때문에, 공격자는 이 자산들을 브릿지를 통해 다시 고유의 네트워크로 보내서 현금화를 진행할 수 있습니다. 이 중에서도 가장 자금 규모가 컸었던 bETH에 대해 살펴보도록 하겠습니다.

bETH

이더리움 2.0 로드맵의 초석이며 지분증명(PoS)을 사용하는 비콘체인(Beacon chain)이 20년 12월에 출시되었습니다. 비콘체인의 밸리데이터가 되기 위해서는 32 ETH를 스테이킹 해야 하지만, 이는 일반 사용자들에게 부담되는 규모였으며, 이 문제를 해결하기 위해 스테이킹 유동화 프로토콜인 라이도(Lido) 서비스가 출시됩니다. 라이도에선 누구나 소량의 ETH를 스테이킹해 이더리움 2.0 비콘체인 스테이킹에 참여할 수 있으며, 이 뿐만 아니라 스테이킹의 유동화 토큰인 stETH까지 제공해주며 스테이커들이 추가적으로 디파이(DeFi) 활동을 통해 추가 수익을 얻을 수 있도록 합니다.

bETH는 이더리움 네트워크의 stETH가 웜홀(Wormhole) 브릿지를 통해 테라 네트워크로 넘어온 형태입니다. 테라 네트워크의 앵커 프로토콜에서 사용자들은 bETH를 담보로 잡아 UST를 대출할 수 있어, 상당히 많은 양의 bETH가 테라 네트워크로 흘러 들어왔습니다. 이 수많은 bETH는 이번 테라 사태 때 무너지는 테라 네트워크의 보안 속에서 안전할 수 있었을까요?

웜홀(Wormhole) 브릿지

웜홀(Wormhole)은 이더리움, 솔라나, 테라, BSC, 폴리곤 등등 수많은 블록체인들 간 메세지 전송을 용이하게 하는 범용적인 프로토콜입니다. 웜홀 네트워크에서는 블록체인간 통신을 중개 및 검증하는 일명 가디언(Guardian)이라는 제 3의 집단이 존재합니다. 가디언들은 연결된 각 체인들의 풀노드(Full node)를 모두 돌리며, 메세지를 다른 블록체인에 전송하기 전에 각 체인들의 메세지가 유효한지 검증하고 서명한 후 가디언 중 2/3이상의 합의에 도달한다면 VAA (Verified Action Approbal)을 생성합니다. 웜홀 브릿지를 통해 메세지를 받는 체인은 VAA가 있어야만 메세지가 유효하다고 판단할 수 있습니다.

VAA 데이터는 헤더(Header)와 바디(Body), 두 파트로 이루어져 있습니다. 바디는 메세지에 따라 결정론적으로 결정되고 바뀔 수 없는 데이터이며 가디언은 이에 대해 서명을 진행하게 됩니다. 헤더는 서명들이 모이면서 바뀔 수 있는 데이터이며, 가디언들의 서명이 쌓여 2/3 이상의 합의가 도달한다면 VAA는 온체인 상으로 제출될 수 있습니다.

Header

Body

가디언은 현재 19개의 주체가 존재하며, 다음 웜홀네트워크 익스플로러에서 확인할 수 있습니다. 가디언은 Chorus One, Everstake, FTX 등 전 세계적으로 검증된 주체들로 이루어져 있습니다.

Source: Wormhole

웜홀 브릿지를 통해 토큰이 전송되는 방식은 굉장히 간단합니다. 필자가 이전에 디사이퍼 미디엄에 작성한 ‘[Bridge Series] 1. Introduction’에 나와있는 Lock and Mint 방식을 따릅니다.

Lock and Mint 방식의 예시 (출처: Wormhole bridge)

이더리움 네트워크의 stETH를 테라 네트워크로 전송하는 상황을 통해 살펴보면, 다음과 같은 과정을 따릅니다.

  1. 사용자는 stETH를 이더리움 상의 웜홀 브릿지 컨트랙트에 동결(Lock)합니다.
  2. 각 네트워크 별로 풀노드를 돌리고 있는 가디언들은 사용자가 이더리움 네트워크에 stETH를 동결한 사실을 확인하고 검증합니다.
  3. 가디언들이 2/3 이상 합의에 이루게 되면 VAA가 생성되고 VAA는 테라 네트워크에 보내집니다.
  4. 테라 네트워크의 웜홀 브릿지 컨트랙트에서 사용자에게 동일한 수량의 bETH를 제공합니다.

이번 테라 사태를 통해 LUNA의 가격이 하락하여 테라 네트워크의 보안 수준이 굉장히 취약해졌을 때 테라 네트워크에 남아 있는 $200M 규모의 bETH는 큰 위험에 쳐해 있었습니다. 공격자가 1/3 공격을 할 경우, 테라 블록체인은 중단될 수 있으며 웜홀 브릿지를 타고 넘어온 bETH는 영영 동결 될 수 있으며, 2/3 공격을 할 경우 공격자들이 탈취한 bETH를 웜홀 브릿지를 통해 이더리움 네트워크로 넘겨 현금화를 할 수 있기 때문입니다 (뒤에서 알아보겠지만 사실 bETH는 탈취될 수 없습니다). 이에 대한 우려로 라이도는 직접 공식 트윗을 통해 상황을 조심하라고 경고를 하기도 했으며, stETH의 경우 원래는 커브 파이낸스(Curve Finance)의 풀에서 ETH와 1:1의 가격을 잘 유지하는 상황에서 디페깅이 일어나며 담보 대출 프로토콜인 AAVE에서 stETH 담보물의 대량 청산이 일어나기도 했습니다.

stETH-ETH 디페깅 (Source: Dune analytics, @dataalways)

실제로 우려하던 네트워크의 공격은 이루어지지 않았지만, 과연 공격자들은 bETH를 웜홀 브릿지를 통해 이더리움 네트워크로 넘겨올 수 있었을까요? 웜홀 브릿지 가디언은 트랜잭션을 검증까지 진행 하기 때문에 공격자들의 자금 탈취와 같은 유효하지 않은 트랜잭션을 걸러낼 수 있었을 것이며, 또한 웜홀 브릿지의 보안은 가디언이라는 다소 중앙화된 제 3의 집단에 의존하고 있기 때문에, 테라 네트워크가 공격 받았다는 소식이 들리자마자 bETH 전송에 관한 트랜잭션들을 일괄 처리하지 않았을 것입니다. 탈중앙이라는 가치가 우선시 되어야할 블록체인 생태계에서 가끔 이런 사태 때 중앙화된 서비스가 도움이 될 수 있는 상황을 보면 재미있는 아이러니라고 생각됩니다.

6. 오스모시스(Osmosis)는 안전할까? — IBC

오스모시스(Osmosis)는 코스모스 생태계의 AMM DEX 역할을 하는 앱체인입니다. 코스모스 생태계에 IBC로 연결된 다양한 네트워크들의 자산을 거래할 수 있는 프로토콜입니다. 이번 테라 사태 때 오스모시스 네트워크는 테라 네트워크와 IBC라는 브릿지를 통해 연결되어있었기 때문에, 테라 네트워크가 공격을 받게 되면 오스모시스 네트워크의 일부 자금도 탈취될 가능성이 있었습니다. IBC에 대해 한 번 알아보도록 하겠습니다.

IBC (Inter-Blockchain Communication)

Source: ibcprotocol.org

IBC (Inter-Blockchain Communication)는 코스모스 SDK 및 텐더민트 코어를 사용하는 앱체인(Appchain) 간 메세지 통신 표준입니다. 각 앱체인들은 IBC로 연결된 다른 앱체인의 블록헤더(Block header)을 계속 받아오는 라이트 클라이언트를 운영합니다. 따라서 다른 앱체인의 블록헤더를 계속 확인할 수 있습니다. 각 앱체인들에는 IBC 모듈이라는게 존재하며, A체인에서 B체인에 메세지를 보내는 과정은 다음과 같습니다.

  1. A체인의 IBC 모듈에서 IBC 요청을 발생시킵니다.
  2. 이를 관찰하고 있던 릴레이어(Relayer)는 B체인으로 트랜잭션을 전달하게됩니다.
  3. B체인의 IBC 모듈에서는 이를 받아 검증하고, 유효하다면 상태(state)를 변경합니다.

여기서 오해의 소지가 있을 수 있는게, IBC의 릴레이어는 웜홀 브릿지의 가디언과 같이 검증을 진행하는 주체가 아닌 그저 메세지를 전달해주는 역할을 하는 중개인일 뿐입니다. 웜홀 브릿지에서는 메세지를 전달하기 위해 가디언을 어느 정도 믿어야 하는 반면에, IBC에서는 릴레이어를 신뢰할 필요가 없습니다.

IBC를 통해 토큰을 전송할 때도 위의 웜홀 브릿지와 같이 똑같이 Lock and Mint 방식으로 진행됩니다. 다만 가장 큰 차이점은, 웜홀 브릿지에서는 토큰이 동결되었다는 메세지를 검증하는 가디언이라고 불리는 제 3의 검증 집단이 따로 존재했던 반면, IBC에서는 이를 수신하는 체인의 라이트 클라이언트에서 자체적으로 진행하게 됩니다.

공격 가능성

현재는 오스모시스 DEX에 테라 사태 이후로 UST나 LUNA가 존재하는 유동성 풀이 존재하지 않지만, 사태 이전에는 테라 네트워크도 오스모시스와 IBC를 통해 연결되어있었기 때문에 오스모시스 네트워크에 UST, LUNA와 같은 자산이 존재했습니다. 만약 테라 블록체인이 2/3 공격을 받으면 오스모시스 네트워크는 어떤 영향을 받을 수 있었을까요? 공격자들은 테라 네트워크에서 무단으로 사용자들의 자금(UST, LUNA)을 탈취하는 유효하지 않은 트랜잭션을 생성해 오스모시스 네트워크로 IBC를 통해 넘길 수 있었습니다. 전체 메세지를 검증하는 웜홀 브릿지와 달리 IBC는 블록의 블록헤더만 받아 검증을 진행하기 때문에 블록 바디에 자금 탈취와 같은 유효하지 않은 트랜잭션이 담겨있을지라도 이를 걸러낼 수 없으며, 따라서 테라 네트워크로부터 넘어온 공격자들의 LUNA, UST는 오스모시스 DEX의 유동성 풀에서 매도가 가능할 것이고, 이를 통해 LUNA, 및 UST와 같은 유동성 풀에 있었던 자산들이 큰 피해를 볼 수 있었습니다. 물론 현재 IBC간 메세지를 전달해주는 역할인 릴레이어도 각 IBC 채널마다 몇 개 존재하지 않으며, 보통 앱체인을 운영하는 주체에서 운영하기 때문에 테라 네트워크가 공격 당한다면 릴레이어들이 릴레이어 노드 운영을 중단해 IBC 채널을 끊어버리는 선택을 하여 공격을 막을 수 있었을 것입니다.

7. 비탈릭 부테린의 선견지명

이더리움의 창시자인 비탈릭 부테린은 올해 초, 이종 블록체인 간 토큰 및 메세지를 전송하는 크로스체인 솔루션들에 대해 우려점을 시사한적이 있었습니다. 이더리움 네트워크를 data availiabilty 및 settlement 레이어로 공유하고 있는 이더리움 레이어2 블록체인 간 크로스 체인 솔루션은, 결국 이더리움의 보안 하에 놓이게 되어 비탈릭이 제시한 문제와 상관없지만, 웜홀 브릿지와 같이 서로 다른 블록체인 생태계를 연결하는 솔루션들은 이러한 우려점들이 있습니다. 자세한 내용은 디사이퍼 미디엄에 올라온 Luke Park님의 ‘미래는 크로스체인이 아닌 멀티체인에 있다’를 읽어보시는 것을 추천드립니다.

실제로 웜홀 브릿지는 비탈릭이 우려를 시사한 지 한 달만에 $326M에 해당하는 자금을 탈취 당하며 블록체인 계의 역대 해킹 피해 규모 순위 중 3위를 달성했습니다. 해커는 브릿지의 보안이 가디언에 의존한다는 사실을 이용하여 웜홀 네트워크 상 트랜잭션 서명 기능을 공격하여 VAA를 생성해낼 수 있었습니다. 해커는 120,000 ETH가 이더리움 체인의 웜홀 브릿지 스마트 컨트랙트에 동결한 것 처럼 조작하여 솔라나 네트워크에서 동일한 양의 120,000 whETH를 생성할 수 있었습니다. 이에 따라 기존 웜홀 브릿지를 통해 이더리움 네트워크에서 솔라나로 이더리움을 전송한 사용자들은 자신들의 1whETH가 이더리움 네트워크의 1ETH로 온전히 보장 받지 못하는 상황에 처했습니다. 하지만 이는 Jump Crypto 사에서 전액 배상하며 일단락 되었습니다.

이번 테라 사태에서 마찬가지로, LUNA가격이 UST와 함께 폭락하며 테라 네트워크의 보안이 무너지는 것은 DPoS 네트워크이므로 어쩔 수 없는 상황이었지만, 각종 브릿지들을 통해 연결되어있는 다른 네트워크들이 피해를 볼 수 있는 상황까지 연출되었습니다. 앞으로 블록체인 생태계에는 더 큰 규모의 자금이 들어올 것이고, 과연 비탈릭 부테린이 말한 것 처럼 블록체인의 미래는 크로스 체인이 아닌 멀티체인에 있을지, 아니면 크로스체인 솔루션들이 이러한 문제들을 현명하게 풀어나갈 수 있을지 지켜보아야 할 것입니다.

--

--