저자: Daii 출처: mirror
지난 수요일(3월 12일), 21만 5천 달러의 일회성 손실을 입은 암호화폐 트레이더가 MEV의 공격을 받았다는 소식이 화면을 강타했습니다.

요약하자면, 이 사용자는 220,800 USDC 스테이블코인을 Uniswap v3 풀에서 USDT로 교환하려 했지만 USDT만 받으려고 했던 것이죠. 즉, 이 사용자는 유니스왑 v3 거래 풀에서 220,800달러 상당의 USDC 스테이블코인을 USDT로 교환하려고 했지만, 아래 차트와 같이 단 몇 초 만에 215,700달러가 순식간에 증발한 5,272 USDT만 얻게 된 것입니다.

위 이미지는 이 거래의 체인 레코드 스크린샷입니다. 이 실패의 근본 원인은 블록체인 업계에서 악명 높은 '샌드위치 공격'과의 만남이었습니다.

이 MEV 공격을 최초로 공개한 사람은 마이클(위 사진)으로, 그는 다음과 같이 설명했습니다.
MEV 봇은 모든 USDC 유동성을 교환하여 tx를 프론트런했습니다. 거래 후 다음과 같이 진행되었습니다. 공격자는 블록 빌더(bobTheBuilder)에게 20만 달러를 팁으로 지급하고 이 거래로 8천 달러의 수익을 얻었습니다.
번역: MEV 봇은 모든 USDC 유동성을 교환하여 트랜잭션을 선점했고, 거래가 실행된 후 유동성을 다시 풀었습니다. 공격자들은 블록 빌더(bobTheBuilder)에게 20만 달러의 바운티를 지급하고 거래에서 8,000달러를 벌었습니다.
위 설명에는 사무적인 오류가 있었고, MEV 공격 봇은 USDC가 아닌 대량의 USDT를 거래했습니다.
하지만 그의 설명과 뉴스 보도를 읽고 나면 여전히 혼란스러울 수 있습니다. 샌드위치 어택, 프론트 랜 더 tx, 유동성을 되돌리다, 블록 빌더에게 팁을 주다 등 새로운 용어가 너무 많기 때문에 여전히 혼란스러우실 수 있습니다. 블록 빌더에게 팁을 주다) 등입니다.
오늘은 이 MEV 공격을 예로 들어 전체 과정을 해체하여 MEV의 어두운 세계를 살펴보고자 합니다.
먼저 MEV가 무엇인지 설명할 필요가 있습니다.
1. MEV란 무엇인가요?
MEV는 원래 채굴자 추출 가능 가치로, 채굴자가 블록체인 블록에서 트랜잭션을 재주문, 삽입 또는 제외함으로써 얻을 수 있는 추가 수익을 의미합니다. 이러한 작업은 일반 사용자에게 더 높은 비용을 초래하거나 거래 가격을 더 불리하게 만들 수 있습니다.
이더리움과 같은 블록체인 네트워크가 작업 증명(PoW) 합의 메커니즘에서 지분 증명(PoS) 합의 메커니즘으로 전환하면서 거래 순서를 제어하는 권한이 채굴자에서 검증자에게로 이동했습니다. 그 결과 용어는 "채굴자 추출 가능 가치"에서 "최대 추출 가능 가치"로 진화했습니다.
명칭 변경에도 불구하고 거래 순서를 조작하여 가치를 추출한다는 핵심 개념은 동일하게 유지됩니다.
위 내용은 여전히 약간 기술적인 내용이므로 기억하세요: MEV가 존재하는 이유는 이전의 채굴자(현재는 검증자)가 메모리 풀(멤풀)에서 트랜잭션을 정렬할 권리를 가졌기 때문입니다. 이러한 정렬은 블록 내에서 이루어지며, 현재 이더리움은 11초 정도마다 블록을 생성하고 있으므로 11초마다 이 권한이 행사됩니다. 다시 말하지만, 이 MEV 공격은 검증자 정렬을 통해 이루어졌습니다.
이 링크를 클릭하면 아래와 같이 이 공격과 관련된 블록 번호 22029771 에 포함된 트랜잭션을 볼 수 있습니다.

위 다이어그램의 트랜잭션 1, 2, 3은 이 글의 시작 부분에서 설명한 것과 동일한 MEV 공격이며 이 순서는 검증자(bobTheBuilder)가 수행한 것임을 유의하세요. 검증자(bobTheBuilder)가 정렬한 순서입니다. 이것이 가능한 이유는 무엇일까요?
2. MEV의 작동 방식
MEV의 작동 방식을 이해하려면 블록체인이 정보를 기록하고 업데이트하는 방식을 이해해야 합니다.
2.1 블록체인 상태 업데이트 메커니즘
블록체인은 발생하는 모든 트랜잭션의 계속 증가하는 장부로 생각할 수 있습니다. 각 계좌의 잔액, 유니스왑 거래 풀의 다양한 토큰 보유량 등 이 원장의 상태는 이전 거래에 의해 결정됩니다.
블록체인에 새로운 블록이 추가되면 이 블록에 포함된 모든 트랜잭션은 블록에 나열된 순서대로 하나씩 실행됩니다. 트랜잭션이 실행될 때마다 블록체인의 글로벌 상태도 그에 따라 변경됩니다.
즉, 블록의 순서뿐만 아니라 블록에 포함된 트랜잭션의 순서도 중요합니다. 그렇다면 블록 내 트랜잭션의 순서는 어떻게 결정될까요?
2.2 트랜잭션 순서를 결정하는 검증자
사용자가 블록체인 네트워크에서 거래를 시작하면, 예를 들어 유니스왑을 통해 USDC를 USDT로 변환하는 거래가 먼저 네트워크의 노드에 브로드캐스트됩니다. 네트워크의 노드에 브로드캐스트됩니다. 초기 유효성 검사 후 트랜잭션은 "멤풀"이라는 영역으로 들어갑니다. 멤풀은 아직 검증되지 않고 블록체인의 다음 블록에 추가되지 않은 트랜잭션이 대기하는 공간과 같습니다.
이전에는 작업증명 시스템에서 채굴자(채굴자)였지만 이제는 검증자(검증자)가 멤풀에서 거래를 선택하고 다음 블록에 배치될 순서를 결정할 수 있는 권한을 가집니다.
블록에서 트랜잭션의 순서는 매우 중요합니다. 블록이 최종적으로 검증되어 블록체인에 추가될 때까지 해당 블록의 트랜잭션은 검증자(예: 밥더빌더)가 결정한 순서대로 실행됩니다. 즉, 블록에 동일한 트랜잭션 풀과 상호작용하는 여러 트랜잭션이 포함되어 있는 경우, 이러한 트랜잭션이 실행되는 순서가 각 트랜잭션의 결과에 직접적인 영향을 미칩니다.
이 기능을 통해 검증자는 특정 거래의 우선순위를 정하고, 다른 거래를 지연하거나 제외할 수 있으며, 수익을 극대화하기 위해 자신의 거래를 삽입할 수도 있습니다.
이 트랜잭션의 순서도 마찬가지로 중요하기 때문에 사소한 오류로 공격이 성공할 가능성은 거의 없습니다.
2.3 이 MEV 공격의 거래 순서
이번 MEV 공격과 관련된 세 가지 거래에 대한 간략한 개요부터 시작하겠습니다.


거래 1(공격자의 첫 번째 거래): 피해자의 거래보다 먼저 실행됩니다. 이 거래의 목적은 일반적으로 피해자가 거래하고자 하는 토큰의 가격을 올리는 것입니다.
거래 2(피해자의 거래): 공격자의 첫 번째 거래 이후에 실행됩니다. 공격자의 이전 행동으로 인해 풀의 가격이 피해자에게 유리하지 않으며, 피해자는 이에 상응하는 USDT를 받기 위해 더 많은 USDC를 지불해야 하거나 더 적은 USDT만 받을 수 있습니다.
거래 3(공격자의 두 번째 거래): 피해자의 거래 이후에 실행됩니다. 공격자의 트랜잭션은 피해자의 트랜잭션 이후에 실행됩니다. 이 거래의 목적은 일반적으로 피해자의 거래로 인한 새로운 가격 변동을 이용하기 위한 것입니다.
이번 MEV 공격의 검증자는 bob-The-Builder.eth로, 거래를 1, 2, 3으로 시퀀싱하는 작업을 담당했습니다. 물론 이 정렬에 참여하여 100개 이상의 이더리움을 획득한 반면, MEV 공격자들은 8,000달러만 벌었기 때문에 bobTheBuilder는 헛된 일을 한 것이 아닙니다. 수익의 원천은 피해자의 두 번째 거래였습니다.
요약하자면, 공격자(MEV 봇)는 검증자(bobTheBuilder)와 공모하여 피해자에게 두 번째 거래로 21만 5천 달러, 공격자는 8천 달러, 검증자는 20만 달러(100개 이상의 ETH)를 챙겼습니다.
이들이 사용한 공격은 샌드위치 공격이라는 그래픽 이름이 있습니다. 여기서는 한 번에 한 트랜잭션씩 살펴보면서 MEV의 더 복잡한 샌드위치 공격이 어떻게 진행되는지 완전히 이해할 수 있도록 하겠습니다.
3. 샌드위치 공격 설명
샌드위치 공격이라고 불리는 이유는 공격자의 두 트랜잭션(트랜잭션 1과 트랜잭션 3)이 피해자의 트랜잭션(트랜잭션 2) 앞과 피해자의 트랜잭션(트랜잭션 3) 앞에 배치되어 있기 때문입니다. 공격자의 두 트랜잭션(트랜잭션 1과 트랜잭션 3)이 피해자의 트랜잭션(트랜잭션 2)의 앞뒤에 배치되어 전체 트랜잭션 시퀀스가 샌드위치 구조와 유사합니다(위 그림 참조).
트랜잭션 1과 3은 서로 다른 기능을 가지고 있습니다. 간단히 말해, 트랜잭션 1 거래는 범죄를 담당하고 트랜잭션 3 거래는 전리품을 수확하는 역할을 합니다. 구체적으로 전체 프로세스는 다음과 같습니다.
3.1 USDT 가격 상승을 담당하는 거래 1
위 이미지에서 거래 1 링크를 클릭하면 거래 1의 상세 내용을 확인할 수 있습니다. 공격자는 아래 이미지와 같이 1,865만 USDC를 모두 1,758만 USDT로 교환하여 매우 직접적인 방식으로 USDT 가격을 올렸습니다.

이 시점에서 유동성 풀에 남은 것은 많은 USDC와 약간의 USDT였습니다. 뉴스 보도에 따르면 공격 전 유니스왑의 유동성 풀에는 각각 1980만 개가 있었다고 합니다. 뉴스 보도에 따르면 공격 전 유니스왑의 유동성 풀에 약 1980만 USDC와 USDT가 있었다면, 트랜잭션 1이 실행된 후 풀에는 222만 USDT(=1980-1758)만 남았고, USDC 잔액은 약 3845만(=1980+1865)으로 증가했습니다.
이 시점에서 이 풀의 USDC와 USDT의 비율은 1:1이 아니라 1:17로, 이 시점에서 1 USDT로 교환하려면 17 USDC가 필요하지만 이 풀이 V3이고 유동성이 고르게 분포되어 있지 않기 때문에 대략적인 비율일 뿐이라는 것을 의미합니다.
한 가지 더 말씀드리고 싶은 것이 있습니다. 공격자는 실제로 1,865만 USDC를 한꺼번에 사용한 것이 아니라 6%도 안 되는 109만 USDC를 사용했습니다. 어떻게 한 걸까요? 공격이 끝나면 이에 대해 자세히 설명해드리겠습니다.
3.2 USDT로 22만 USDC를 실행한 거래 2
위 거래 2 링크를 클릭하면 아래 이미지를 볼 수 있습니다.

위 그림과 같이 피해자의 거래 2는 거래 1의 영향으로 22만 USDC에 5272 USDT만 받고, 17만 USDT의 손실을 영문도 모른 채 입게 된 상황입니다. 왜 모르게라고 하나요? 그 이유는 피해자가 유니스왑을 통해 거래했다면 거래를 제출할 때 다음과 같은 화면을 보았을 것이기 때문입니다.

위 차트를 통해 피해자는 최소 22만 달러를 보장받아야 한다는 것을 알 수 있습니다. 피해자가 5000 USDT를 조금 넘게 받게 된 이유는 90% 이상의 큰 하락이 있었기 때문입니다. 그러나 유니스왑의 기본 최대 슬리피지 한도는 5.5%입니다(아래 참조).

즉, 피해자가 유니스왑 프론트엔드를 통해 거래했다면 최소 208381 USDT(= 220510 * 94.5%). 위의 블록체인 기록에 왜 "유니스왑 V3"에서 거래가 이루어졌는지 궁금하실 것입니다.
블록체인 트랜잭션의 프론트엔드는 백엔드와 분리되어 있기 때문입니다. 위에서 언급한 "유니스왑 V3"는 공개되어 있으며 모든 거래의 프런트엔드는 이 풀을 통해 거래할 수 있는 유니스왑의 USDC-USDT 풀을 의미합니다.
또한 이 때문에 일부 사람들은 피해자가 일반인이 아닌 단순하지 않고, 그렇지 않으면 이렇게 큰 슬리피지를 생성하지 않을 것이며, 자금 세탁에 MEV 공격을 사용하는 것일 수 있다고 의심하고 있습니다. 이것은 나중에 이야기 할 것입니다.
3.3 트레이딩 3, 전리품 거두기 + 나누기

위와 같이 링크를 클릭하면 거래 3의 상세 내용을 볼 수 있습니다. 거래 A, B, C에 대해 따로 살펴보겠습니다.
풀의 유동성을 정상으로 회복한 거래 A는 1732만 USDT를 1860만 USDC로 교환했고, 전리품을 공유하기 위해 준비된 거래 B는 수익금의 일부인 -2040만 USDC를 -2040만 USDC로 교환했습니다.
거래 B는 전리품을 공유하기 위해 준비된 거래입니다. USDC에서 105 ETH로;
전리품 준비 트랜잭션 C는 검증자 bob-The-Builder.eth에게 100.558 ETH를 지급했습니다.
전리품 준비 트랜잭션 C는 검증자 bob-The-Builder.eth에게 100.558 ETH를 지급했습니다.
이것으로 샌드위치 공격이 종료됩니다.
이제 위에서 언급한 매우 중요한 질문에 답하기 위해 공격자가 어떻게 109만 USDC로 1,800만 공격을 성공시켰는지 알아보겠습니다.
4. 공격자는 어떻게 1,800만 USDC 풀 공격을 달성할 수 있었나요
공격자가 단 1090만 USDC로 1,800만 달러 수준을 달성할 수 있었던 이유 .... 1,800만 USDC 수준은 블록체인 세계에는 마법과 같은 특별한 메커니즘인 Uniswap V3의 플래시 스왑이 존재하기 때문입니다.
>
4.1 플래시 스왑이란 무엇인가요?
요약하자면:
플래시 스왑은 사용자가 유니스왑 풀에서 자산을 가져와 동일한 거래에서 다른 자산을 사용할 수 있게 해줍니다. 그리고 동일한 거래에서 다른 자산(또는 동일한 자산에 수수료를 더한 금액)으로 상환할 수 있습니다.
유니스왑은 전체 작업이 동일한 거래 내에서 이뤄지는 한 이러한 "픽업 앤 페이" 동작을 허용합니다. 반드시 동일한 트랜잭션 내에서 이루어져야 한다는 점에 유의하시기 바랍니다. 이는 유니스왑 플랫폼 자체를 보호하기 위한 것입니다.
무위험 차용 및 대여: 유니스왑에서는 사용자가 담보 없이 일시적으로 풀에서 돈을 빌릴 수 있지만(차용 및 대여와 유사), 반드시 다음과 같은 조건이 충족되어야 합니다. 거래가 끝나면 즉시 상환해야 합니다.
원자성: 전체 작업이 완전히 성공(자금 반환)하거나 완전히 실패(트랜잭션 롤백)하는 원자적이어야 합니다.
라이트닝 거래소는 원래 보다 효과적인 온체인 차익거래에 사용하도록 설계되었지만, 안타깝게도 MEV 공격자들이 시장 조작의 도구로 악용하고 있습니다.
4.2 라이트닝 컨버전, 어떻게 도움이 되었나요?
아래 차트를 보고 이 공격의 라이트닝 변환이 어떻게 이루어졌는지 단계별로 설명해 보겠습니다.

F1 공격자가 자신의 701 WETH를 통해 AAVE로부터 109만 달러를 차입합니다. AAVE;
F2 공격자가 플래시 교환 요청을 시작하고, 먼저 유니스왑 풀에서 1758만 USDT를 인출합니다(이 시점에서 선지불할 필요 없음) 공격자의 계정이 일시적으로 1758만 USDT 증가합니다;
F3 공격자가 플래시 교환 요청을 시작하고, 먼저 유니스왑 풀에서 1758만 USDT를 인출합니다(이 시점에서 선지불할 필요 없음). li>
F3 공격자는 1758만 USDT를 빠르게 커브 풀에 넣고 다시 1755만 USDC로 전환합니다. 공격자의 계정은 1758만 USDT만큼 감소하고 USDC는 1755만 USDC만큼 증가합니다. 아래 차트에서 볼 수 있듯이 공격자는 7,054만 USDT와 5,771만 USDC로 유동성이 풍부하고 상대적으로 슬리피지가 낮은 커브를 선택했습니다.

F4 공격자들은 17,550,000 USDC를 Curve로 전환했고, 여기에 자신들이 가지고 있던 1,755만 USDC와 (에이브의 대출로) 준비한 109만 USDC를 더해 총 1,864만 USDC를 유니스왑에 반환하여 라이트닝 교환을 완료했습니다.
이 거래(거래 1) 후 공격자의 계정 잔액은 다음과 같습니다. 는 109만 USDC 감소했는데, 이는 유니스왑으로 반환된 1864만 USDC 중 1755만 USDC만 커브에서 교환되었고 나머지 109만 USDC는 공격자 자신의 자금이었기 때문입니다.
보시다시피, 이 거래에서 공격자는 실제로 109만 달러를 잃었습니다. 그러나 다음 거래인 3번 거래에서는 라이트닝 스왑 기법을 통해 109만 USDC를 돌려받았을 뿐만 아니라 20만 USDC 이상을 벌었습니다.

거래 3의 데이터를 기반으로 우리가 찾고자 하는 것을 단계별로 분석해 보겠습니다.
K1 공격자, 라이트닝 스왑으로 유니스왑에서 1860만 USDC를 인출;
K1 공격자는 커브에서 교환한 1,732만 USDT를 다시 유니스왑에 돌려줌으로써 라이트닝 스왑이 완료되었습니다. 공격자는 K2를 통해 1730만 USDC에 1732만 USDT를 받았으며, 나머지 130(=1860~1730)만 USDC 중 109만 USDC는 자신의 돈이고 나머지 21만 USDC는 이 공격으로 얻은 수익입니다.
원금을 AAVE에 반환한 K3 공격자는 자신의 돈 701 WETH를 가지고 200,000 USDC를 105 ETH로 전환한 후 이 중 100.558 ETH를 팁(약 20만원)으로 검증인에게 전송하여 1만 달러 미만의 수익만 남겼습니다. USDC.
공격자가 왜 20만 달러에 달하는 수익을 검증자에게 기꺼이 포기했는지 의아할 수 있습니다.
4.3 왜 20만 달러의 '팁'을 주었을까요?
사실, 샌드위치 공격과 같은 MEV 공격이 성공하기 위해 필요한 것은 관대함이 아닙니다.
성공적인 공격의 핵심은 트랜잭션 순서를 정확하게 제어하는 것이며, 이는 다름 아닌 검증자(bobTheBuilder)에 의해 제어됩니다.
검증자는 공격자가 피해자의 트랜잭션이 공격자의 트랜잭션 사이에 있는지 확인할 뿐만 아니라, 더 중요한 것은 경쟁하는 MEV 봇이 큐를 뛰어넘거나 공격의 성공적인 완료를 방해할 수 없도록 하는 것입니다.
그 결과 공격자는 공격의 성공을 위해 대부분의 이익을 희생하고 일정량의 이익을 스스로 챙기게 됩니다.
유니스왑과 커브 모두 MEV 공격에도 비용이 발생하지만, 0.01~0.05%의 비교적 낮은 비율로 공격 수익에 비해 미미할 수 있습니다.
마지막으로, MEV 공격을 방어하는 방법은 1% 이하의 슬리피지 허용치를 설정하고 큰 거래를 여러 개로 분할하면 됩니다. 따라서 탈중앙화 거래소(DEX)에서 숨이 막혀 다시는 거래하지 않아도 됩니다.
결론: 다크 포레스트의 경고와 계시
215,000 MEV 공격은 블록체인 세계의 "다크 포레스트" 법칙을 보여주는 또 다른 잔인한 예입니다. 215,000 MEV 공격은 의심할 여지 없이 블록체인 세계의 '다크 포레스트' 법칙을 보여주는 또 다른 잔인한 사례입니다. 허가가 필요 없는 탈중앙화 환경에서는 메커니즘의 허점을 악용하여 이득을 취하는 복잡한 게임이 존재한다는 것을 생생하게 보여줍니다.
더 높은 수준에서 보면, MEV의 등장은 블록체인의 투명성과 프로그래밍성이라는 양날의 검 효과를 구현한 것입니다.
한편으로는 모든 거래 기록이 공개되어 공격을 추적하고 분석할 수 있습니다.
다른 한편으로는 모든 거래 기록이 공개되어 공격을 추적하고 분석할 수 있습니다.
반면, 스마트 컨트랙트의 복잡한 로직과 거래 실행의 확실성은 숙련된 참여자에게 악용할 기회를 제공합니다.
이것은 단순한 해킹이 아니라 블록체인의 기본 메커니즘에 대한 깊은 이해와 악용을 통해 프로토콜 설계의 견고성을 테스트하고 참여자들의 위험 인식에 도전하는 것입니다.
메시지를 이해하고 위험을 인식하는 것이야말로 기회도 있지만 숨겨진 위기로 가득한 디지털 세상을 더 잘 헤쳐나갈 수 있는 유일한 방법입니다. 블록체인이라는 '어두운 숲'에서 다음 먹잇감이 되지 않기 위한 유일한 방법은 규칙을 준수하고 인식을 높이는 것임을 기억하세요.
이것이 제가 이 글을 통해 달성하고자 하는 목표입니다.