
MEV 샌드위치 공격 심층 분석: 정렬에서 플래시 대출에 이르는 치명적 연결고리
글: Daii
지난 수요일(3월 12일), 한 암호화폐 트레이더가 MEV 공격으로 단번에 21.5만 달러를 잃은 사건이 화제가 되었습니다.

간단히 말해, 이 사용자는 Uniswap v3 풀에서 가치 22.08만 달러의 USDC 스테이블코인을 동일한 가치의 USDT로 교환하려 했지만, 실제로는 5,272 USDT만 받았고, 몇 초 만에 자산이 21.57만 달러 증발했습니다. 아래 이미지를 참조하세요.

위 이미지는 이 거래의 블록체인 기록 캡처본입니다. 이러한 비극이 발생한 근본적인 원인은 블록체인 세계에서 악명 높은 '삼明치 공격(Sandwich Attack)'에 노출되었기 때문입니다.

이번 MEV 공격을 처음 보도한 사람은 Michael(위 사진)이며, 그는 다음과 같이 설명했습니다:
An MEV bot front-ran the tx by swapping all the USDC liquidity out. After the transaction executed, they put back the liquidity. The attacker tipped a block builder (bobTheBuilder) $200k and profited $8k from this transaction. MEV 봇은 모든 USDC 유동성을 스왑하여 해당 거래(tx)를 프론ퟬ닝(front-run)했습니다. 거래 실행 후 유동성을 다시 복구시켰습니다. 공격자는 블록 생성자(bobTheBuilder)에게 20만 달러를 팁으로 지급했으며, 이번 거래로부터 8,000달러의 수익을 얻었습니다.
다만 위 내용에는 오기가 있으며, MEV 공격 봇이 스왑한 것은 USDC가 아니라 대량의 USDT입니다.
하지만 그의 설명과 뉴스 기사를 읽고도 여전히 혼란스러울 수 있습니다. 삼明치 공격(Sandwich Attack), 프론ퟬ닝(front-ran the tx), 유동성 복구(put back the liquidity), 블록 생성자에게 팁 지급(tipped a block builder) 등 너무 많은 새로운 용어들이 등장하기 때문입니다.
오늘 우리는 이 MEV 공격 사례를 통해 전체 과정을 분석하며, MEV라는 어두운 세계를 파헤쳐보겠습니다.
먼저, MEV가 무엇인지부터 설명해야 합니다.
1. MEV란?
MEV는 원래 '채굴자가 추출할 수 있는 가치(Miner Extractable Value)'를 의미했습니다. 이는 채굴자가 블록체인 블록 내에서 거래 순서를 재배열하거나, 거래를 삽입 또는 제거함으로써 얻을 수 있는 추가 수익을 말합니다. 이러한 조작은 일반 사용자들에게 더 높은 비용이나 불리한 거래 가격을 초래할 수 있습니다.
이더리움 등의 블록체인 네트워크가 작업증명(PoW) 합의 방식에서 지분증명(PoS) 합의 방식으로 전환되면서, 거래 순서를 결정하는 권한이 채굴자에서 검증자(validator)로 넘어갔습니다. 따라서 용어도 'Miner Extractable Value'에서 '최대 추출 가능 가치(Maximal Extractable Value)'로 진화했습니다.
이름은 바뀌었지만, 거래 순서를 조작해 가치를 추출한다는 핵심 개념은 여전히 동일합니다.
아직도 다소 전문적인 내용이므로, 간단히 기억하세요: MEV가 존재하는 이유는 이전의 채굴자와 현재의 검증자가 '메모리풀(mempool)' 내 거래를 정렬할 수 있는 권리를 가지기 때문입니다. 이 정렬은 각 블록 단위로 이루어지며, 현재 이더리움은 약 11초마다 하나의 블록이 생성되므로, 매 11초마다 이 권리가 행사됩니다. 이번 MEV 공격 역시 검증자의 거래 정렬을 통해 이루어졌습니다.
이 링크를 클릭하면 본 공격과 관련된 블록 번호 22029771의 거래 내용을 확인할 수 있으며, 아래 이미지와 같습니다.

주의 깊게 살펴보면, 위 이미지의 1, 2, 3번 거래가 바로 본문 서두에서 언급한 MEV 공격이며, 이 순서는 검증자(bobTheBuilder)가 배치한 것입니다. 왜 이런 일이 가능할까요?
2. MEV의 원리
MEV의 작동 원리를 이해하려면 먼저 블록체인이 어떻게 정보를 기록하고 업데이트하는지 알아야 합니다.
2.1 블록체인 상태 갱신 메커니즘
블록체인은 계속해서 성장하는 장부로 볼 수 있으며, 발생한 모든 거래를 기록합니다. 이 장부의 상태, 즉 각 계정의 잔액이나 Uniswap 풀 내 다양한 토큰의 보유량 등은 모두 이전 거래들에 의해 결정됩니다.
새로운 블록이 블록체인에 추가되면, 그 블록 안에 포함된 모든 거래가 블록 내 순서대로 차례로 실행됩니다. 각 거래가 실행될 때마다 블록체인의 전역 상태가 변화하게 됩니다.
즉, 블록의 순서뿐만 아니라, 블록 내 거래들의 순서도 중요합니다. 그렇다면 블록 내 거래 순서는 어떻게 결정될까요?
2.2 검증자가 거래 순서를 결정한다
사용자가 블록체인 네트워크에서 거래를 시작하면(예: Uniswap을 통해 USDC를 USDT로 교환하는 거래), 이 거래는 먼저 네트워크 노드에 방송됩니다. 초기 검증을 통과한 후, 거래는 '메모리풀(mempool)'이라 불리는 대기 영역으로 들어갑니다. 메모리풀은 아직 다음 블록에 포함되지 않은 미확정 거래들이 모여 있는 공간입니다.
이전에는 PoW 시스템에서 채굴자가, 지금은 PoS 시스템에서 검증자가 메모리풀에서 거래를 선택하고 다음 블록 내에서의 순서를 결정할 권한을 가지고 있습니다.
블록 내 거래 순서는 매우 중요합니다. 블록이 최종적으로 확정되어 블록체인에 추가되기 전까지, 그 안의 거래들은 검증자(예: bobTheBuilder)가 정한 순서대로 실행됩니다. 즉, 같은 풀과 상호작용하는 여러 거래가 한 블록에 포함된다면, 그 실행 순서가 각 거래 결과에 직접적인 영향을 미칩니다.
이러한 능력 덕분에 검증자는 특정 거래를 우선 처리하거나, 다른 거래를 지연·차단하고, 심지어 자신의 거래를 삽입하여 수익을 극대화할 수 있습니다.
이번 거래의 순서 또한 매우 중요하며, 조금의 오차라도 발생하면 공격은 실패합니다.
2.3 이번 MEV 공격의 거래 순서
먼저 이번 MEV 공격과 관련된 3개의 거래를 간단히 살펴보겠습니다.

-
거래 1(공격자의 첫 번째 거래): 피해자의 거래보다 먼저 실행됩니다. 이 거래의 목적은 피해자가 거래하려는 토큰 가격을 인상시키는 것입니다.
-
거래 2(피해자의 거래): 공격자의 첫 번째 거래 이후에 실행됩니다. 공격자의 사전 조작으로 인해 풀의 가격이 피해자에게 불리해지며, 피해자는 동일한 USDT를 얻기 위해 더 많은 USDC를 지불하거나, 훨씬 적은 USDT만 받게 됩니다.
-
거래 3(공격자의 두 번째 거래): 피해자의 거래 이후에 실행됩니다. 이 거래는 피해자의 거래로 인한 새로운 가격 변동을 이용해 수익을 실현합니다.
이번 MEV 공격의 검증자는 bob-The-Builder.eth이며, 그가 거래를 1, 2, 3 순서로 정렬했습니다. 물론 bobTheBuilder는 무료로 일한 것이 아닙니다. 이번 정렬 참여로 100개 이상의 ETH를 수입했으며, 반면 MEV 공격 발동자는 8,000달러만 수익을 얻었습니다. 그들의 수입 출처는 바로 피해자의 두 번째 거래입니다.
요약하면, 공격자(MEV 봇)와 검증자(bobTheBuilder)가 공모하여, 피해자의 두 번째 거래로 인해 21.5만 달러 손실을 입혔으며, 그 중 공격자는 8,000달러, 검증자는 20만 달러(100개 이상의 ETH)를 취득한 것입니다.
그들이 사용한 공격 방식은 생생한 이름이 붙어 있는데, 바로 '삼明치 공격(Sandwich Attack)'입니다. 아래에서 하나씩 거래를 분석하며, MEV의 복잡한 삼明치 공격이 정확히 어떻게 이루어지는지 명확히 이해해 봅시다.
3. 삼明치 공격 전체 분석
'삼明치 공격(Sandwich Attack)'이라 불리는 이유는 공격자의 두 거래(거래 1 및 거래 3)가 피해자의 거래(거래 2) 앞뒤에 위치하여, 전체 거래 구조가 마치 삼明치처럼 구성되기 때문입니다(위 이미지 참조).
-
거래 1과 거래 3은 각각 다른 기능을 수행합니다. 간단히 말해, 거래 1은 범행을 위한 것이며, 거래 3은 수확 및 분배를 위한 것입니다. 구체적인 과정은 다음과 같습니다:
-
3.1 거래 1: USDT 가격 상승
-
위 이미지의 1번 거래 링크를 클릭하면 거래 세부내역을 확인할 수 있습니다. 공격자가 USDT 가격을 올리는 방법은 매우 직접적입니다. 1,865만 USDC를 사용해 풀 내 1,758만 USDT를 모두 스왑해 버렸습니다(아래 이미지 참조).

이제 유동성 풀에는 많은 USDC와 소량의 USDT만 남게 됩니다. 뉴스 보도에 따르면, 공격 전 Uniswap 풀에는 각각 약 1,980만 USDC와 USDT가 있었는데, 거래 1 실행 후 풀 내 USDT는 222만(=1980-1758)만 남고, USDC 잔고는 약 3,845만(=1980+1865)으로 증가합니다.
이때 풀 내 USDC와 USDT의 교환 비율은 더 이상 1:1이 아니며, 약 1:17이 됩니다. 즉, 1개의 USDT를 얻기 위해 17 USDC가 필요합니다. 다만 이 비율은 대략적인 값이며, V3 풀은 유동성이 균등하게 분포되지 않기 때문입니다.
또한 한 가지 알려드릴 점은, 공격자가 실제로 1,865만 USDC를 일회성으로 사용한 것은 아니며, 실제 사용한 USDC는 109만으로, 6%에도 못 미칩니다. 어떻게 가능한 것일까요? 공격 과정을 마친 후 자세히 설명하겠습니다.
3.2 거래 2: 22만 USDC를 USDT로 교환
위 이미지의 거래 2 링크를 클릭하면 아래와 같은 화면을 볼 수 있습니다.

위 이미지에서 알 수 있듯, 피해자의 거래 2는 거래 1의 영향으로 22만 USDC를 지불하고도 겨우 5,272 USDT만 획득했으며, 몰래 17만 USDT를 잃었습니다. 왜 '몰래'라고 할까요? 만약 피해자가 Uniswap을 통해 거래했다면, 거래 제출 시 아래와 같은 인터페이스를 보게 됩니다.

위 이미지에서 확인할 수 있듯, 피해자는 최소 22만은 확보되는 것으로 보입니다. 그러나 피해자가 결국 5,000 USDT만 받은 이유는 엄청난 슬리피지(slipage)가 발생했기 때문이며, 슬리피지율은 90%를 넘었습니다. 하지만 Uniswap은 기본적으로 최대 슬리피지 5.5% 제한을 두고 있습니다(아래 이미지 참조).

즉, 피해자가 Uniswap 프론트엔드를 통해 거래했다면, 최소 208,381 USDT(=220,510 × 94.5%)는 받아야 합니다. 그런데 왜 블록체인 기록에서는 이 거래가 'Uniswap V3'에서 이루어진 것으로 표시될까요?
이유는 블록체인 거래의 프론트엔드와 백엔드가 분리되어 있기 때문입니다. 위에서 언급한 'Uniswap V3'란 USDC-USDT 펀딩 풀을 의미하며, 이 풀은 공개되어 있어 어떤 프론트엔드든 이를 통해 거래할 수 있습니다.
이 때문에 일부는 피해자가 일반인이 아니며, 이토록 큰 슬리피지를 낼 수 있다는 점에서 MEV 공격을 이용해 돈세탁을 했을 가능성도 있다고 의심하고 있습니다. 이 부분은 나중에 다뤄보겠습니다.
3.3 거래 3: 수확 + 분배

링크를 클릭하면 거래 3의 세부내역을 확인할 수 있습니다(위 이미지). A, B, C 세 개의 하위 거래를 나누어 설명합니다.
-
거래 A: 풀의 유동성을 정상 상태로 복구. 1,732만 USDT를 사용해 1,860만 USDC를 되돌림;
-
거래 B: 분배 준비. 일부 수익(20.4만 USDC)을 105 ETH로 교환;
-
거래 C: 분배. 100.558 ETH를 검증자 bob-The-Builder.eth에게 지급.
至此, 삼明치 공격은 종료됩니다.
이제 앞서 언급한 중요한 질문에 답해봅시다: 공격자는 어떻게 109만 USDC만으로 1,800만 달러 규모의 공격을 수행했을까요?
4. 공격자가 1,800만 USDC 규모의 풀 공격을 수행한 방법
공격자가 109만 USDC의 자본금으로 1,800만 달러 규모의 공격을 수행할 수 있었던 이유는, 블록체인 세계에 존재하는 놀랍고 특별한 메커니즘인 'Uniswap V3의 플래시 스왑(Flash Swap)' 덕분입니다.
4.1 플래시 스왑(Flash Swap)이란?
간단히 말해:
플래시 스왑은 사용자가 동일한 거래 내에서 Uniswap 풀에서 자산을 먼저 인출한 후, 다른 자산(또는 같은 자산에 수수료 포함)으로 상환할 수 있게 해줍니다.
전체 작업이 동일한 거래 내에서 완료된다면, Uniswap은 '먼저 물건을 가져가고 나중에 지불하는' 행위를 허용합니다. 반드시 동일한 거래 내에서 완료되어야 한다는 점에 주목하세요. 이렇게 설계된 이유는 Uniswap 플랫폼 자체의 보안을 보장하기 위해서입니다:
-
제로 리스크 대출: Uniswap은 사용자가 담보 없이 일시적으로 풀에서 자금을 인출(마치 대출처럼)할 수 있도록 허용하지만, 거래 종료 시 즉시 상환해야 합니다.
-
원자성(Atomicity): 전체 작업은 원자적이어야 하며, 완전히 성공(자금 상환)하거나 완전히 실패(거래 롤백)해야 합니다.
플래시 스왑은 원래 체인상 아비트라지(arbitrage)를 보다 효율적으로 수행하기 위한 목적으로 설계되었지만, 불행하게도 MEV 공격자들에게 악용되어 시장 조작의 강력한 도구가 되었습니다.
4.2 플래시 스왑은 어떻게 공격을 지원했는가?
다음은 그림을 통해 이번 공격에서 플래시 스왑이 어떻게 작동했는지 단계별로 설명합니다(아래 이미지 참조).

-
F1: 공격자는 자신의 701 WETH를 담보로 AAVE에서 109만 USDC를 대출받음;
-
F2: 공격자는 플래시 스왑 요청을 보내 Uniswap 풀에서 1,758만 USDT를 먼저 인출함(이때 선지불 불필요). 공격자의 계정에 일시적으로 1,758만 USDT가 증가;
-
F3: 공격자는 이 1,758만 USDT를 신속히 Curve 풀에 투입하여 1,755만 USDC로 교환. 공격자의 계정에서 USDT는 1,758만 감소, USDC는 1,755만 증가. 아래 이미지에서 알 수 있듯, 공격자가 Curve를 선택한 이유는 여기 유동성이 풍부하며(USDT 7,054만 이상, USDC 5,071만 이상), 슬리피지가 상대적으로 낮기 때문입니다.

-
F4: 공격자는 Curve에서 교환한 1,755만 USDC와 처음에 Aave에서 빌린 109만 USDC를 합쳐 총 1,864만 USDC를 한 번에 Uniswap에 상환. 플래시 스왑 완료.
이 거래(거래 1) 후, 공격자의 계정 잔고는 109만 USDC 줄어듭니다. 왜냐하면 Uniswap에 상환한 1,864만 USDC 중 1,755만 USDC는 Curve에서 얻은 것이고, 나머지 109만 USDC는 공격자의 자금이기 때문입니다.
여러분도 눈치챘겠지만, 이 거래는 실제로 공격자에게 109만 달러의 손실을 안겼습니다. 하지만 후속 거래 3에서 동일한 플래시 스왑 기법을 사용해 109만 USDC를 되찾을 뿐 아니라, 20만 달러 이상을 수익으로 얻습니다.

다음은 거래 3의 데이터를 기반으로 단계별 분석입니다.
-
K1: 공격자는 플래시 스왑을 통해 Uniswap에서 1,860만 USDC를 인출;
-
K2: 공격자는 Uniswap에서 인출한 USDC 중 1,730만 USDC를 사용해 1,732만 USDT를 되돌림;
-
K3: 공격자는 Curve에서 되돌려받은 1,732만 USDT를 Uniswap에 상환. 플래시 스왑 완료. 주목할 점은, 공격자는 K2에서 1,730만 USDC만 지불하고 1,732만 USDT를 얻었다는 것입니다. 남은 130만(=1,860-1,730) USDC 중 109만은 자기 자금이고, 나머지 21만 USDC가 이번 공격의 수익입니다.
-
K4: 공격자는 AAVE에 자금을 상환하고, 자신의 701 WETH를 회수하며, 20만 USDC를 105 ETH로 교환한 후, 그 중 100.558 ETH를 검증자에게 팁으로 지급(약 20만 달러), 자신은 1만 달러 미만의 수익만 남깁니다.
놀랍게도, 왜 공격자는 20만 달러의 수익을 검증자에게 기꺼이 넘길까요?
4.3 왜 20만 달러의 '팁'을 지급하는가?
사실 이것은 관대함이 아니라, 삼明치 공격이라는 MEV 공격이 성공하기 위한 필수 조건입니다:
공격 성공의 핵심은 정밀한 거래 순서 제어이며, 그 제어권을 가진 사람이 바로 검증자(bobTheBuilder)이기 때문입니다.
검증자는 공격자의 거래 사이에 피해자의 거래가 위치하도록 보장할 뿐 아니라, 경쟁하는 다른 MEV 봇들이 끼어들거나 공격을 방해하지 못하게 하는 것도 중요합니다.
따라서 공격자는 대부분의 수익을 포기하면서까지 공격 성공을 보장하고, 자신에게는 소량의 수익만 남기는 것입니다.
특히 언급할 점은, MEV 공격에도 비용이 든다는 것입니다. Uniswap의 플래시 스왑 비용, Curve의 거래 수수료 등이 있지만, 수수료율이 낮아(약 0.01~0.05%) 공격 수익에 비해 무시할 수준입니다.
마지막으로, MEV 공격에 대한 방어는 사실 매우 간단합니다. 슬리피지 허용치를 1% 이내로 설정하고, 큰 금액의 거래는 여러 번 나누어 실행하면 됩니다. 그러므로 DEX(탈중앙화 거래소) 거래를 두려워할 필요는 없습니다.
결론: 어두운 숲 속의 경고와 교훈
이 21.5만 달러의 MEV 공격 사건은 블록체인 세계의 '어두운 숲(Dark Forest)' 법칙이 또 한 번 잔혹하게 드러난 사례입니다. 탈중앙화되고 허가가 필요 없는 환경 속에서 메커니즘의 허점을 악용해 이익을 챙기는 복잡한 게임이 숨어 있음을 생생히 보여줍니다.
더 높은 차원에서 보면, MEV의 등장은 블록체인의 투명성과 프로그래밍 가능성이라는 양날의 검 효과를 나타냅니다.
한편으로는 모든 거래 기록이 공개되어 있어 공격 행위를 추적하고 분석할 수 있지만,
다른 한편으로는 스마트 계약의 복잡한 로직과 거래 실행의 결정성이 정교한 참여자들에게 기회를 제공합니다.
이는 단순한 해킹 행위가 아니라, 블록체인의 핵심 메커니즘을 깊이 이해하고 활용한 것이며, 프로토콜 설계의 견고성과 참여자의 리스크 인식을 시험하는 동시에 도전하고 있습니다.
MEV를 이해하고 그 위험을 인식해야만, 기회는 많지만 위험도 도사리는 이 디지털 세계를 더 잘 항해할 수 있습니다. 기억하세요, 블록체인의 '어두운 숲'에서 살아남기 위해서는 오직 규칙을 존중하고 인식을 높이는 것뿐입니다. 그렇지 않으면 다음 먹잇감이 될 수 있습니다.
이것이 제가 본 글을 통해 이루고자 했던 목표입니다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














