본문 바로가기
글로벌 금융포스트 글로벌 금융포스트

Flash Loan 공격은 어떻게 작동할까? 실제 구조로 이해하기

읽는 시간 약 21분

디파이(DeFi) 해킹 뉴스를 보면 자주 등장하는 표현이 있습니다.

바로 Flash Loan Attack, 플래시론 공격입니다.

이름만 보면 플래시론 자체가 해킹기법처럼 느껴질 수 있지만 정확히는 그렇지 않습니다.

플래시론은 하나의 블록체인 거래 안에서 담보 없이 자산을 빌리고, 그 거래가 끝나기 전에 다시 상환하는 대출 방식입니다.

정상적인 차익거래나 포지션 정리, 담보교체 등에 활용될 수 있습니다.

문제는 공격자가 플래시론으로 매우 큰 자금을 순간적으로 확보한 뒤 가격 오라클 취약점, 유동성 부족, 비즈니스 로직 오류 등 다른 약점을 확대하는 데 사용할 수 있다는 점입니다.

쉽게 말하면 플래시론은 공격의 원인이라기보다 공격자가 큰 자본을 잠깐 빌려 취약점을 크게 악용할 수 있게 해주는 도구에 가깝습니다.

이번 글에서는 Flash Loan이 어떻게 작동하는지와 함께 공격자가 이를 이용해 어떤 구조로 디파이 프로토콜을 공격할 수 있는지 실제 숫자를 넣어 쉽게 설명해보겠습니다.

핵심부터 정리하면

Flash Loan 공격은 일반적으로

대규모 자금 대출 → 시장 또는 가격 왜곡 → 취약한 프로토콜 이용 → 이익 확보 → 플래시론 상환

의 구조로 이루어질 수 있습니다.

모든 과정이 하나의 블록체인 거래 안에서 처리될 수 있다는 점이 특징입니다.

Flash Loan이란 무엇일까?

일반적인 대출은 돈을 빌리기 위해 담보나 신용이 필요합니다.

예를 들어 은행에서 1억원을 빌리려면 소득이나 신용도, 담보 등을 확인할 수 있습니다.

디파이 대출에서도 일반적으로 암호화폐 담보를 맡겨야 합니다.

그런데 플래시론은 조금 다릅니다.

같은 거래 안에서 빌린 돈을 모두 갚는다는 조건으로 담보 없이 대규모 자산을 빌릴 수 있습니다.

예를 들어 사용자가

1,000만 USDC

를 빌렸다고 가정하겠습니다.

하나의 트랜잭션 안에서 이 돈을 이용해 여러 거래를 실행한 뒤 마지막에

1,000만 USDC + 수수료

를 상환합니다.

정상적으로 상환되면 모든 거래가 확정됩니다.

상환하지 못하면 전체 거래가 실패하거나 되돌려지는 구조를 사용할 수 있습니다.

담보 없이 수백억원을 빌려주는 이유는 무엇일까?

처음 들으면 이상하게 느껴질 수 있습니다.

누군가에게 아무 담보 없이 1,000만 달러를 빌려준다면 돈을 가지고 도망갈 수 있기 때문입니다.

하지만 플래시론에서는 대출과 상환이 서로 다른 날짜에 일어나는 것이 아닙니다.

하나의 블록체인 거래 안에서 모두 이루어집니다.

쉽게 표현하면

돈을 빌림

여러 작업 실행

거래가 끝나기 전에 상환 확인

입니다.

상환 조건을 충족하지 못하면 전체 거래가 성립하지 않도록 스마트컨트랙트가 설계될 수 있습니다.

그래서 담보 없이도 대출이 가능한 것입니다.

정상적인 플래시론 사용 사례

플래시론 자체는 불법적인 기능이 아닙니다.

예를 들어 DEX A에서 ETH가 3,000달러,

DEX B에서는 3,050달러라고 가정해보겠습니다.

사용자가 플래시론으로 100만 USDC를 빌립니다.

DEX A에서 ETH를 싸게 산 뒤 DEX B에서 더 비싸게 팝니다.

차익을 확보한 뒤 대출금과 수수료를 갚습니다.

남은 금액이 거래자의 이익이 됩니다.

이 모든 과정이 하나의 트랜잭션에서 이루어질 수 있습니다.

이런 방식은 일반적인 **차익거래(Arbitrage)**입니다.

그렇다면 Flash Loan 공격은 무엇일까?

공격자는 플래시론으로 큰 자금을 확보한 뒤 정상적인 가격차이를 이용하는 대신 스마트컨트랙트의 취약점을 악용합니다.

대표적인 구조는 다음과 같습니다.

1. 대규모 자금을 빌린다

2. 특정 DEX의 가격을 크게 움직인다

3. 다른 프로토콜이 왜곡된 가격을 정상가격으로 읽게 만든다

4. 과도한 대출이나 자산인출을 실행한다

5. 가격을 일부 되돌리거나 자산을 정리한다

6. 플래시론을 상환한다

7. 남은 금액을 공격자의 이익으로 가져간다

이 모든 과정이 하나의 거래에서 이루어질 수 있습니다.

실제 숫자로 공격 구조를 만들어보자

이해를 쉽게 하기 위해 가상의 디파이 프로토콜을 만들어보겠습니다.

가정은 다음과 같습니다.

  • Token A 실제 시장가격: 100달러
  • DEX A의 Token A 유동성: 상대적으로 작음
  • 대출 프로토콜 B는 DEX A의 순간가격만 참고
  • 프로토콜 B는 Token A 가치의 70%까지 USDC 대출 허용
  • 공격자는 플래시론을 사용할 수 있음

정상적인 상황에서 Token A 10,000개의 가치는

100달러 × 10,000개

= 1,000,000달러

입니다.

담보 인정비율이 70%라면 최대 대출액은

700,000 USDC

정도가 되어야 합니다.

1단계: 공격자가 1,000만 USDC를 빌린다

공격자는 플래시론을 이용해

10,000,000 USDC

를 빌렸다고 가정하겠습니다.

공격자의 실제 자기자본이 이만큼 필요하지 않습니다.

거래가 끝나기 전에 모두 상환한다는 조건으로 순간적으로 대규모 자금을 사용할 수 있습니다.

2단계: 작은 유동성 풀에서 Token A를 대량 매수한다

공격자는 플래시론으로 받은 USDC 일부를 이용해 DEX A에서 Token A를 대량으로 구매합니다.

DEX A의 유동성이 작다면 대량매수가 가격을 크게 올릴 수 있습니다.

예를 들어 원래

Token A = $100

이었는데 공격자의 대규모 매수로 순간적으로

Token A = $200

까지 상승했다고 가정해보겠습니다.

실제 전체 시장에서 Token A의 가치가 두 배가 된 것은 아닙니다.

특정 유동성 풀의 가격만 순간적으로 왜곡된 것입니다.

3단계: 대출 프로토콜이 $200 가격을 믿는다

여기에서 대출 프로토콜 B에 문제가 있습니다.

Token A의 가치를 여러 시장에서 확인하지 않고 DEX A의 순간가격만 이용한다고 가정했습니다.

따라서 프로토콜은 Token A를

1개당 $200

으로 평가합니다.

공격자가 10,000개의 Token A를 담보로 제공하면 프로토콜은 담보가치를

$200 × 10,000

= $2,000,000

으로 계산합니다.

실제 정상가치 $1,000,000의 두 배입니다.

4단계: 공격자가 과도한 대출을 받는다

대출한도가 담보가치의 70%라면 공격자는

$2,000,000 × 70%

= 1,400,000 USDC

까지 빌릴 수 있습니다.

정상가격이었다면 700,000 USDC만 가능했어야 합니다.

하지만 조작된 가격 때문에 추가로

700,000 USDC

를 더 빌릴 수 있게 된 것입니다.

5단계: 가격이 정상으로 돌아간다

공격자의 거래가 끝난 뒤 Token A 가격이 다시 100달러 수준으로 돌아간다고 가정해보겠습니다.

그러면 프로토콜이 받은 담보의 실제 가치는

1,000,000달러

입니다.

그런데 이미 공격자에게

1,400,000 USDC

를 빌려줬습니다.

담보보다 대출금이 더 많습니다.

프로토콜에 부실이 발생합니다.

6단계: 플래시론을 상환한다

공격자는 거래 과정에서 확보한 자산 일부로 처음 빌렸던

1,000만 USDC + 수수료

를 상환합니다.

상환조건이 충족되므로 전체 트랜잭션은 성공합니다.

공격자는 모든 거래가 끝난 뒤 남은 자산을 이익으로 확보합니다.

이것이 플래시론 공격의 기본적인 구조 중 하나입니다.

공격자가 자기 돈으로 하면 안 될까?

물론 가능합니다.

공격자가 이미 수백억원의 자금을 가지고 있다면 자기자본으로 가격을 조작하려고 할 수도 있습니다.

하지만 플래시론을 이용하면 자기자본이 매우 적어도 순간적으로 큰 자금을 확보할 수 있습니다.

따라서 기존에는 큰 자본이 있어야 가능했던 공격을 훨씬 적은 자기자본으로 실행할 수 있게 됩니다.

이것이 플래시론이 취약점의 피해규모를 확대할 수 있는 이유입니다.

Flash Loan이 진짜 취약점은 아니다

앞의 사례에서 근본적인 문제는 무엇일까요?

플래시론이 아닙니다.

진짜 문제는 대출 프로토콜이

유동성이 작은 DEX의 순간가격 하나만 믿었다는 것

입니다.

공격자가 플래시론을 사용하지 않았더라도 충분한 자기자본이 있었다면 비슷한 공격을 시도할 수 있었을 것입니다.

플래시론은 그 공격을 훨씬 쉽게, 크게 만들었을 뿐입니다.

따라서 보안사고를 분석할 때는

“Flash Loan을 사용했다.”

보다

“Flash Loan으로 어떤 취약점을 악용했는가?”

를 보는 것이 더 중요합니다.

Flash Loan 공격과 오라클 조작의 관계

플래시론 공격에서 자주 등장하는 것이 가격 오라클 조작입니다.

대출이나 파생상품 프로토콜에서는 암호화폐 가격이 매우 중요합니다.

가격에 따라

  • 담보가치
  • 대출한도
  • 청산가격
  • 스왑가격
  • 보상금액

등이 결정되기 때문입니다.

그런데 프로토콜이 조작하기 쉬운 시장의 가격을 그대로 사용하면 공격자는 플래시론으로 해당 시장가격을 움직인 뒤 잘못된 가격을 이용할 수 있습니다.

따라서 안전한 오라클 설계가 중요합니다.

순간가격만 사용하면 왜 위험할까?

DEX에서 토큰가격이 100달러라고 가정하겠습니다.

공격자가 큰 거래로 몇 초 동안 가격을 200달러로 올렸습니다.

프로토콜이 그 순간의 가격을 그대로 사용하면 공격자가 유리해집니다.

반면 일정 기간 동안의 여러 가격을 평균내거나 여러 독립적인 시장의 가격을 함께 사용하면 순간적인 가격조작의 영향을 줄일 수 있습니다.

이 때문에 디파이에서는 TWAP(Time-Weighted Average Price) 같은 방식이나 외부 오라클 시스템을 활용하기도 합니다.

TWAP는 무엇일까?

TWAP는 일정 시간 동안의 가격을 평균하여 사용하는 방식입니다.

예를 들어 지난 30분 동안의 평균가격이

$101

인데 공격자가 몇 초 동안 가격을

$200

으로 올렸다고 가정해보겠습니다.

순간가격을 사용하는 시스템은 $200을 그대로 읽을 수 있습니다.

하지만 30분 평균을 사용하는 시스템에서는 몇 초 동안의 급등이 전체 평균가격을 크게 바꾸기 어려울 수 있습니다.

따라서 순간적인 가격조작 공격에 대한 방어수단 중 하나가 될 수 있습니다.

다만 TWAP도 설정방식이나 유동성에 따라 완벽한 방어책은 아닙니다.

Flash Loan 공격은 가격조작만 사용하는가?

아닙니다.

공격자가 플래시론으로 악용할 수 있는 취약점은 다양합니다.

대표적으로

  • 가격 오라클 오류
  • 비즈니스 로직 취약점
  • 잘못된 담보 계산
  • 청산 로직 오류
  • 토큰 가격산정 오류
  • 보상 계산 오류
  • 유동성 풀 계산 오류

등이 있을 수 있습니다.

즉, 플래시론은 공격자가 필요로 하는 대규모 자본을 순간적으로 공급하는 도구입니다.

비즈니스 로직 공격 사례

예를 들어 어떤 프로토콜이

예치금액이 커질수록 보상을 더 많이 지급

한다고 가정해보겠습니다.

개발자는 사용자가 정상적인 자기자금으로 예치한다고 생각했을 수 있습니다.

하지만 공격자가 플래시론으로 순간적으로 1억 달러를 예치하고 보상을 받은 뒤 즉시 돈을 빼고 대출을 상환할 수 있다면 경제적 설계에 문제가 생길 수 있습니다.

이 경우 코드 자체가 정상적으로 작동해도 프로토콜의 비즈니스 로직이 공격받은 것입니다.

하나의 거래 안에서 여러 프로토콜을 사용할 수 있다

플래시론 공격이 복잡해 보이는 이유 중 하나입니다.

공격자는 하나의 트랜잭션에서

  1. Aave 같은 대출 프로토콜에서 자금 대출
  2. DEX A에서 토큰 매수
  3. DEX B에서 가격 조작
  4. 대출 프로토콜 C에서 자금 인출
  5. 다른 DEX에서 자산 정리
  6. 원래 대출 상환

처럼 여러 스마트컨트랙트를 연속해서 호출할 수 있습니다.

이를 Composability, 즉 디파이 서비스 간 조합 가능성의 한 측면으로 볼 수 있습니다.

디파이의 강력한 장점이지만 동시에 취약점이 결합될 수 있는 이유이기도 합니다.

거래 하나에서 공격이 끝나는 이유

일반 금융에서는 돈을 빌리고 거래하고 갚는 데 여러 날이 걸릴 수 있습니다.

하지만 스마트컨트랙트에서는 여러 작업을 하나의 트랜잭션 안에 넣을 수 있습니다.

이때

A가 성공하고 B가 실패하면 전체 거래를 되돌리는

원자적(Atomic) 실행 특성을 이용할 수 있습니다.

그래서 공격자는 수십 단계의 작업을 시도한 뒤 마지막 상환까지 성공하는 경우에만 거래가 확정되도록 설계할 수 있습니다.

실패하면 전체 거래가 되돌아가기 때문에 자본위험이 상대적으로 제한될 수 있습니다.

공격자는 정말 아무 위험도 없을까?

그렇지는 않습니다.

공격을 실행하려면

  • 스마트컨트랙트 개발
  • 가스비
  • 시장구조 분석
  • 여러 프로토콜의 동작 이해

등이 필요합니다.

또 거래가 다른 사용자나 MEV 참여자에게 포착될 수 있고 공격 자체가 실패할 수도 있습니다.

하지만 플래시론 구조 때문에 공격자가 직접 장기간 대규모 자본을 보유해야 하는 부담은 크게 줄어듭니다.

Flash Loan 공격과 일반적인 해킹은 무엇이 다를까?

전통적인 해킹에서는 공격자가

  • 서버 침입
  • 비밀번호 탈취
  • 개인키 탈취

등을 시도할 수 있습니다.

하지만 Flash Loan 공격에서는 경우에 따라 비밀번호나 개인키를 훔치지 않습니다.

스마트컨트랙트에서 허용된 기능만 사용하면서 경제적 설계의 허점을 악용할 수 있습니다.

블록체인 입장에서는 모든 거래가 정상적으로 서명되고 스마트컨트랙트 규칙대로 실행됩니다.

그래서 이런 공격을 막는 것이 더욱 어렵습니다.

공격 거래가 블록체인에 그대로 남는다는 특징

플래시론 공격은 블록체인에서 실행되기 때문에 거래기록이 공개적으로 남습니다.

보안연구자들은 공격이 발생한 뒤

  • 어떤 주소가 자금을 빌렸는지
  • 어느 DEX에서 거래했는지
  • 어떤 스마트컨트랙트를 호출했는지
  • 어떤 토큰이 이동했는지

등을 분석할 수 있습니다.

이 때문에 실제 디파이 공격은 거래가 끝난 뒤 상세한 온체인 분석이 이루어지는 경우가 많습니다.

프로토콜은 Flash Loan 자체를 막으면 되지 않을까?

단순히 플래시론을 차단하는 것만으로는 충분하지 않을 수 있습니다.

공격자가 플래시론 대신 다른 곳에서 큰 자금을 빌리거나 여러 지갑의 자산을 이용할 수도 있기 때문입니다.

근본적인 해결책은 대규모 자금이 순간적으로 투입되더라도 프로토콜이 잘못된 결과를 만들지 않도록 설계하는 것입니다.

즉,

플래시론이 없어야 안전한 프로토콜

보다

플래시론이 존재해도 안전한 프로토콜

을 만드는 것이 더 중요합니다.

가격 오라클을 안전하게 설계하려면?

일반적으로 다음과 같은 접근이 사용될 수 있습니다.

여러 가격소스 사용

한 DEX의 가격만 믿지 않고 여러 시장의 가격을 활용합니다.

유동성이 충분한 시장 사용

소액으로 쉽게 가격을 조작할 수 있는 시장을 피합니다.

시간가중 평균가격 사용

순간가격 대신 일정 기간의 평균가격을 참고합니다.

급격한 가격변동 제한

짧은 시간 안에 지나치게 큰 가격변화가 발생하면 거래를 제한하거나 추가확인을 적용할 수 있습니다.

어떤 방법도 단독으로 완벽한 것은 아니며 프로토콜 특성에 맞는 설계가 필요합니다.

회로차단기(Circuit Breaker)도 도움이 될 수 있다

전통 금융시장에서는 가격이 지나치게 급변하면 거래를 일시적으로 제한하는 제도가 있습니다.

스마트컨트랙트에서도 비슷한 개념을 적용할 수 있습니다.

예를 들어 토큰가격이 1분 만에 50% 이상 움직이면

대출 기능을 잠시 중단

하도록 설계할 수 있습니다.

이런 비상장치는 비정상적인 시장상황에서 피해규모를 줄이는 데 도움이 될 수 있습니다.

대출 한도를 설정하는 것도 중요하다

프로토콜이 한 거래에서 무제한으로 자산을 빌려준다면 취약점이 있을 때 피해가 매우 커질 수 있습니다.

따라서

  • 자산별 대출한도
  • 사용자별 한도
  • 시간당 출금한도

등을 설정하면 공격자가 한 번의 거래로 가져갈 수 있는 금액을 줄이는 데 도움이 될 수 있습니다.

이는 취약점 자체를 제거하는 것과는 다르지만 피해규모 제한에 도움이 됩니다.

Flash Loan 공격 위험을 사용자가 확인하는 방법

일반 투자자가 스마트컨트랙트 코드를 직접 분석하기는 어렵습니다.

하지만 디파이 프로토콜을 이용하기 전에 몇 가지를 확인할 수 있습니다.

  1. 외부 보안감사를 받았는가?
  2. 가격 오라클은 어떤 것을 사용하는가?
  3. 과거 플래시론 공격이나 오라클 사고가 있었는가?
  4. 비상정지 기능이 있는가?
  5. 버그바운티 프로그램이 있는가?
  6. 관리자 권한은 어떻게 관리되는가?
  7. 지나치게 높은 수익률을 제공하지 않는가?

이러한 조건이 있다고 해서 사고가 절대 발생하지 않는 것은 아니지만 위험을 판단하는 데 참고할 수 있습니다.

높은 APY와 Flash Loan 공격은 어떤 관계가 있을까?

직접적인 관계가 있는 것은 아닙니다.

하지만 지나치게 높은 APY를 제공하는 프로토콜은 복잡한 보상구조나 토큰 경제구조를 가지고 있을 수 있습니다.

구조가 복잡해질수록 예상하지 못한 경제적 상호작용이 발생할 가능성도 높아질 수 있습니다.

따라서 높은 수익률만 보고 자금을 예치하기보다 해당 수익이 어디에서 발생하는지 확인하는 것이 중요합니다.

Flash Loan 공격 구조 한눈에 정리

단계공격자의 행동프로토콜에 미치는 영향
1대규모 플래시론 대출공격자 자본 확보
2특정 시장에서 대규모 거래가격 왜곡
3취약한 오라클이 잘못된 가격 사용담보가치 오류
4과도한 대출·인출 실행프로토콜 자산 유출
5자산을 다시 교환공격 이익 확보
6플래시론 상환거래 전체 확정
7남은 자산 보유공격자 이익

중요한 것은 2~4단계에서 어떤 취약점을 이용했는가입니다.

Flash Loan 공격에서 가장 중요한 세 가지 개념

플래시론 공격을 이해하려면 다음 세 가지를 기억하면 됩니다.

1. 거대한 자본을 순간적으로 사용할 수 있다

담보 없이 매우 큰 금액을 이용할 수 있습니다.

2. 모든 과정이 한 거래 안에서 이루어질 수 있다

대출, 거래, 공격, 상환이 연속해서 처리됩니다.

3. 다른 취약점을 확대한다

플래시론 자체보다 가격 오라클이나 비즈니스 로직 오류 등이 실제 공격의 근본 원인인 경우가 많습니다.

결론: Flash Loan은 공격의 원인보다 ‘증폭장치’에 가깝다

Flash Loan은 하나의 블록체인 거래 안에서 담보 없이 큰 금액을 빌리고 거래가 끝나기 전에 상환하는 디파이 기능입니다.

정상적으로는 차익거래나 포지션 관리 등에 사용할 수 있습니다.

하지만 스마트컨트랙트에 취약점이 존재한다면 공격자는 Flash Loan을 이용해 적은 자기자본으로도 매우 큰 규모의 공격을 실행할 수 있습니다.

대표적인 공격 흐름은

대규모 자금 대출

유동성이 작은 시장의 가격 조작

취약한 오라클이 조작가격 반영

과도한 대출 또는 자산인출

Flash Loan 상환

남은 금액을 공격자가 확보

하는 구조입니다.

하지만 여기에서 가장 중요한 점은

Flash Loan 자체가 취약점은 아니라는 것입니다.

앞의 사례에서 진짜 취약점은 조작하기 쉬운 순간가격을 대출 프로토콜이 신뢰했다는 점입니다.

따라서 Flash Loan 공격을 막으려면 단순히 플래시론을 차단하는 것보다

가격 오라클, 담보 계산, 비즈니스 로직, 출금한도

등의 설계를 공격자가 큰 자본을 가지고 있더라도 악용할 수 없도록 만드는 것이 더 중요합니다.

플래시론은 디파이의 강력한 기능이지만 동시에 작은 스마트컨트랙트 취약점을 수백억·수천억원 규모의 금융사고로 확대할 수 있는 증폭장치가 될 수 있습니다.

※ 본 글은 Flash Loan 및 스마트컨트랙트 보안구조를 이해하기 위한 일반적인 정보 제공을 목적으로 작성되었습니다. 공격 실행을 위한 코드나 구체적인 악용 절차를 제공하는 내용이 아니며 특정 디파이 서비스나 암호화폐의 이용 또는 투자를 권유하지 않습니다. 스마트컨트랙트 서비스에는 해킹과 원금손실 위험이 존재합니다.

이 게시물이 얼마나 유용했나요?

별을 클릭하여 평가해 주세요!

평균 평점 0 / 5. 투표 수: 0

아직 투표가 없습니다! 가장 먼저 이 게시물을 평가해 보세요.

root
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.