플래시 론(Flash loan) 공격의 기본 논리를 깊이 이해합니다.

이 기사는 기계로 번역되었습니다
원문 표시
플래시 론(Flash loan) 의 소스코드를 자세히 살펴보고 플래시 론(Flash loan) 과 플래시 론(Flash loan) 공격이 무엇인지 알아보세요.

공유 게스트: Frog, Numen 블록체인 보안 연구원

주최: 샤오후

편집자: 천이(Chen Yi)

이전 기사에서는 대표적인 DeFi 대출 프로토콜인 Euler Finance에 대한 플래시 론(Flash loan) 공격을 주로 소개했습니다. 이번 글에서는 한걸음 더 나아가 플래시 론(Flash loan) 의 소스코드를 파헤쳐보고, 플래시 론(Flash loan) 과 플래시 론(Flash loan) 공격이 무엇인지 알아보겠습니다.

01TL;DR

이전 기사( "Thunder" 폭로: Euler Finance가 공격을 받았고 원인과 결과가 다시 나타남 )에서와 같이 플래시 론(Flash loan) 에는 다음과 같은 키워드가 있습니다.

1. 담보자금이 필요하지 않은 대출

2. "동시에" 대출, 자금 사용 및 대출금 상환

따라서 해커는 담보 없이 많은 돈을 사용하여 다음을 수행할 수 있습니다.

1. 가격을 조작하고, 시장을 강타하거나 끌어당깁니다.

2. 기존 취약점을 증폭시킵니다.

02 플래시 론(Flash loan) 이란?

플래시 플래시 론(Flash loan)(Flash Loan)은 탈중앙화 금융(DeFi)의 혁신적인 상품으로, 사용자는 동일한 거래(존)에 있는 한 담보 제공 없이 프로토콜 풀에 있는 자산을 얼마든지 빌릴 수 있습니다. 원리금과 이자가 반환됩니다. 한 블록에 있음). 플래시 론(Flash loan) 의 장점은 사용자가 시장에서 차익 거래 기회를 활용하여 저비용, 고수익 운영을 달성할 수 있다는 것입니다. 플래시 론(Flash loan) 의 리스크 사용자가 규정된 기한 내에 상환하지 못하는 경우 거래가 취소되고 사용자는 거래 수수료와 이자를 잃게 된다는 것입니다.

1 일반적인 플래시 론(Flash loan) 플랫폼

플래시 론(Flash loan) 하면, 플래시 론(Flash loan) 의 창시자이자 선두주자인 에이브(Aave)가 바로 떠오를 것입니다. 플래시 론(Flash loan) 펀드는 리스크 이 낮기 때문에 수요가 많아 즉시 다수의 플래시 론(Flash loan) 플랫폼이 등장했습니다. 플래시 론(Flash loan) 서비스를 제공하는 주요 플랫폼은 다음과 같습니다.

- Uniswap: 플래시 론(Flash loan) 서비스를 제공하는 탈중앙화 거래 플랫폼입니다. 사용자는 Uniswap을 통해 지원되는 모든 토큰을 빌릴 수 있으며 동일한 거래에서 교환, 시장 조성, 차익거래 및 기타 작업을 수행할 수 있습니다.

- 컴파운드(Compound): 다수의 디지털 자산의 대출 및 차용을 지원하고 플래시 론(Flash loan) 서비스를 제공하는 오픈소스 대출 프로토콜입니다. 사용자는 컴파운드를 통해 사용 가능한 모든 자산을 빌릴 수 있으며 동일한 거래에서 상환, 모기지, 차입 및 기타 작업을 수행할 수 있습니다.

- MakerDAO: DAI 스테이블코인 발행 및 거래를 지원하고 플래시 론(Flash loan) 서비스를 제공하는 탈중앙화 스테이블코인 플랫폼입니다. 사용자는 MakerDAO를 통해 DAI를 빌릴 수 있으며 동일한 거래에서 상환, 교환, 청산 위약금 상환 등의 작업을 수행할 수 있습니다.

- dYdX: 플래시 론(Flash loan) 서비스와 공개 대출 시장을 제공하는 탈중앙화 거래소 . 사용자는 dYdX를 통해 사용 가능한 자산을 빌릴 수 있으며 동일한 거래에서 상환, 거래, 레버리지 및 기타 작업을 수행할 수 있습니다.

또한 일반적인 것에는 Nuo, Fulcrum, bZx, DeFi Money Market, ETHLend 등이 포함됩니다.

기능적으로 이러한 플래시 론(Flash loan) 플랫폼은 무담보 즉시 대출 서비스를 제공하며 세부적인 차이는 플랫폼의 보안, 사용자 경험 및 처리 수수료에 더 많이 반영됩니다.

2 유니스왑 플래시 론(Flash loan)

Uniswap은 DeFi에서 가장 인기 있는 탈중앙화 거래소 중 하나입니다. 일반 사용자가 Uniswap과 접촉하는 방식은 웹 인터페이스를 통해서입니다. 예를 들어 아래 그림은 ETH-DAI의 교환을 보여줍니다. 우리는 두 토큰 간의 교환을 거래 쌍이라고 부릅니다.

그러나 웹사이트를 사용하여 상호 작용하는 것 외에도 스마트 계약을 직접 호출하여 상호 작용할 수도 있습니다. 해당 플랫폼에서 토큰을 구매하려는 경우:

  • 먼저 결제를 위해 토큰을 보내야 합니다.
  • 그런 다음 방금 구매한 토큰을 보내는 swap() 함수를 호출합니다.

Uniswap V2에는 Uniswap의 플래시 론(Flash loan) 이름인 Flashswap이라는 새로운 기능이 있습니다. 이 기능은 일반 swap() 함수에 통합되어 있습니다.

일반적인 플래시 론(Flash loan) 작업 로직에는 동일한 블록에서 완료되어야 하는 4단계가 있습니다.

1. 거래 요청을 보내고 스마트 계약을 업로드하세요.

2. 프로토콜에 토큰 보내기

3. 업로드된 스마트 계약은 토큰 상호 작용을 사용합니다.

4. 토큰을 프로토콜로 반환

유니스왑의 swap() 함수 모드는 돈을 먼저 이체한 후 검증하는 방식이므로 2단계에서 필요한 토큰을 먼저 빌려준 뒤, 3단계에서 자신의 컨트랙트에서 uniswapV2Call() 함수를 호출해 다른 작업을 수행하면 된다. . 4단계에 걸쳐 빌린 토큰을 반납하면 플래시 론(Flash loan) 서비스가 완료됩니다.

코드에서 빨간색 박스 부분은 사용자가 미리 배포한 컨트랙트입니다. 동일한 블록에서 위의 모든 작업을 완료하려면 사용자는 계약을 통해 대출 자금의 사용 방법을 미리 정의해야 하며 결국 수동 작업은 코드 실행만큼 빠르지 않습니다.

빨간색 상자 위의 두 줄에는 두 가지 전달 함수가 표시됩니다. 댓글에서 알 수 있듯이 이는 "낙관적 이체"입니다. 즉, 지불 여부를 확인하지 않고 돈을 이체하는 것입니다. 마지막 부분에서는 사용자 계약을 호출한 후 swap() 함수가 천천히 결제 금액을 요구합니다 .

플래시 론(Flash loan) 서비스 이용 여부와 관계없이 유니스왑은 거래 건당 최대 0.3%의 수수료를 부과합니다.

3 AAVE 플래시 론(Flash loan)

전반적으로 AAVE LendingPool 계약의 Flashloan 기능은 유사한 플래시 론(Flash loan) 기능을 제공합니다. Flashloan 함수를 호출하여 대출 금액, 토큰형 대출 주소 등의 매개변수를 전달합니다. 실행 과정에서 토큰이 수신 수신 주소로 전송된 후 수신 주소의 ExecuteOperation 함수가 호출되며, 이 때 ExecuteOperation 함수에서 다른 작업을 완료할 수 있습니다.

AAVE와 Uniswap의 약간의 차이점은 상환 과정에 있습니다. AAVE 플래시 론(Flash loan) 상환하려면 차용인이 LendingPool 계약을 승인해야 하며, 플래시 론(Flash loan) 프로세스가 완료된 후 AAVE 계약은 빌린 돈과 처리 수수료를 차용 주소에서 다시 이체합니다. Uniswap에서 사용자는 safeTransfer를 호출하여 수동 전송을 수행합니다.

이를 통해 더 높은 성공률을 보장할 수 있지만 계약 취약점이 발생할 리스크 있을 수 있습니다.

03플래시 플래시 론(Flash loan) 공격

플래시 론(Flash loan) 공격에 대한 논의가 끊임없이 이어지고 있습니다. 엄밀히 말하면 플래시 론(Flash loan) 공격은 플래시 론(Flash loan) 의 취약점을 악용하지 않고, 기존 취약점을 사전에 발견하기 위해 막대한 자금을 사용하기 때문에 이름값을 못한다고 말하는 사람들도 있다. 예를 들어, 플래시 론(Flash loan) 다음과 같은 이점이 있습니다.

1. 플래시 론(Flash loan) 대규모 자금을 이용해 가격을 조작하는 경우, 일부 프로젝트에서는 가격 획득 논리에 문제가 있습니다.

2. 일부 프로젝트는 모기지 또는 기타 프로세스 중에 즉시 보상을 제공하므로 플래시 론(Flash loan) 사용하여 큰 보상을 얻을 수 있습니다.

3. 이 프로젝트에는 또 다른 논리적 허점이 있으며, 플래시 론(Flash loan) 대규모 자금을 차익 거래 공간을 확대하는 데 사용합니다.

먼저 사례를 분석한 후, 플래시 론(Flash loan) 공격에 취약한 취약점은 무엇인지 논의해 보겠습니다.

1 DFX 공격 사건

간단히 말해서 DFX에 대한 공격은 세 단계로 나뉩니다.

1. UniswapV3에서 USDC 및 XIDR로 플래시 론(Flash loan) 완료합니다.

2. DFX 컨트랙트에서 플래시 기능을 호출해 UCDC, XIDR을 빌린 뒤 예금 기능을 호출해 담보대출을 하게 되는데, 담보대출 중에는 해커가 빌려준 돈이 다시 DFX 컨트랙트에 담보로 잡혀 있는 것을 볼 수 있다.

3. 사용자는 담보 시 토큰을 DFX 계약으로 다시 전송했기 때문에 대출 통과 전후의 잔액 확인이 필요하며 빌려준 플래시 론(Flash loan) 반환할 필요는 없습니다. 그러나 해커는 모기지 작전을 수행하고 있으며 이때 클레임 기능을 호출할 수 있습니다.담보대출을 클레임 후 휴가를 떠나세요.

2 일반적인 취약점 분석

다음 코드의 취약점을 살펴보겠습니다.

1. 토큰 수를 통해 가격을 구합니다.

이 코드는 탈 탈중앙화 거래소 의 페어 계약에 있는 토큰 수를 직접 읽고, 그 둘의 몫을 토큰 가격으로 사용합니다. 코드 감사 경험이 부족한 사람들에게는 이런 방식으로 작성하는 것이 언뜻 보기에는 문제가 되지 않을 수도 있습니다. 그러나 Uniswap이 플래시 론(Flash loan) 지원한다는 사실을 고려하면 상황이 흥미로워집니다.

플래시 론(Flash loan) 없는 경우 하나는 감소하고 다른 하나는 증가함에 따라 두 토큰의 수량이 확실히 증가합니다. 그러나 플래시 론(Flash loan) 의 경우 한 토큰은 감소하고 다른 토큰은 증가하지 않을 가능성이 매우 높습니다. 플래시 론(Flash loan) 금액이 크지 않다면 두 상황의 차이는 크지 않습니다. 하지만 대규모 플래시 론(Flash loan) 빌리면 곧바로 가격 차이가 벌어지고 엄청난 차익거래 공간이 생긴다.

이러한 취약점은 코드 감사 경험이 없는 사람은 발견하기 어려우며, 성숙한 코드 감사 시스템을 구축하기 위해서는 보안 분야에서 오랜 기간의 깊은 배양과 축적이 필요합니다.

2. 보상 분배:

이 코드에서 계약은 모기지 금액에 따라 보상을 사용자의 주소로 즉시 반환합니다. 우리는 이미 여기서 문제를 언급했는데, 상대적으로 생각하기 쉽습니다. 보상 지급이 지체되지 않는다면 플래시 론(Flash loan) 자금은 계약서에 스테이킹 후 잠시만 보상받을 수 있는데 이는 의심할 여지 없이 큰 차익거래 허점이다.

3 주의사항

DeFi가 아직 성숙하지 않은 기간 동안 플래시 론(Flash loan) 공격은 계속되어 사람들의 머리 위에 매달린 다모클레스의 검이 될 것입니다 . 다양한 플래시 론(Flash loan) 공격은 서로 다른 영향 범위를 가지고 있으며, 일부는 겉보기에 관련이 없어 보이는 DeFi 프로토콜의 폭발을 일으킬 수도 있고, 다른 일부는 많은 사용자에게 영향을 미칠 수도 있습니다. 우리가 할 수 있는 일은 예방 조치를 취하고 DeFi가 계속해서 성숙해질 때까지 기다리는 것입니다.

1. 스테이킹 채굴 기능을 대출 계약과 분리하고, 사용자의 담보 토큰을 대출 계약으로 이전하거나 계산을 위한 변수를 기록하지 마십시오.

2. 대출 시 특수 재진입 잠금 장치를 추가하고, 대출 시 담보 대출이 허용되지 않습니다.

3. 프로젝트는 가격을 얻을 때 여러 데이터 소스를 사용하며 데이터 비교 후 가격 오류가 줄어듭니다.

4. 유동성 제거 시 다른 콜을 하기 전에 LP를 먼저 파기해야 합니다.

5. 보상 생성은 가능한 한 블록이나 시차 형태로 이루어져야 플래시 론(Flash loan) 공격을 효과적으로 피할 수 있습니다.

6. 프로젝트 논리 문제는 해커가 플래시 론(Flash loan) 사용하여 차익 거래를 증폭시키는 가장 일반적인 상황입니다. 따라서 프로젝트의 안전을 보장하기 위해 프로젝트가 온라인 상태가 되기 전에 보안 감사 및 테스트를 수행해야 합니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트