플래시론 [TIL / 블록체인]

알락·2022년 11월 28일
0

블록체인

목록 보기
9/11
post-thumbnail

특강을 받던 중, 플래시론 개념이 소개되었다. 본론으로 바로 들어가도록 하겠다.

플래시론

⌞ 무담보대출

많은 사람들이 무담보대출이 얼마나 위험한 건지 실감을 하고 있을 것이다. 당장에도 친한 친구한테 100만원이 넘는 돈을 어떤 담보도 없이 빌려준다고 하면, 돈을 건네기가 쉽지 않다. 왜 무담보대출이 꺼려지는 걸까?

  1. 대출자는 대출 원금이 손실될 리스크를 갖는다. 채무자가 상환을 못 하더라도 대가를 지불받지 못한다.
  2. 상대방에 대한 신뢰가치가 손실 리스크보다 커야 한다. 이는 채무를 지는 상대방과의 각별한 신뢰를 요구한다. 어떤 식으로든 채무자는 갚을 수 있는 사람이어야 한다.

무담보대출이 나쁜걸까?
무담보대출은 상환 리스크를 상당한 수준으로 올려놓는 거래이지, 도덕적으로 나쁜 거래는 아니다. 하지만 결과로 도덕적으로 나쁜 사람을 만드는 확률을 높일 뿐이다.
생각해보면, 당장 필요한 금액이고 무조건 갚을 수 있는 대출 희망자에게는 본인에게 매우 필요한 서비스이고, 대출하는 사람은 이자를 얻을 수 있는 또 다른 수익원이기도 하다.

⌞ 플래시론

플래시론은 이더리움의 스마트 컨트랙트를 이용하여 무담보대출을 가능하게 하였다. 이는 위의 2 가지 문제를 풀었다는 것이다. 우선 첫번 째, 리스크를 지는 경우를 생각해보자.

플래시론은 대출 기간이 블록 하나가 생성되는 시간인 15초 안에 진행된다. 이는 대출에 대한 트랜잭션이 승인되는 시간이기도 하다. 이는 다음과 같이 간략하게 설명될 수 있다.

[플래시론 작동 과정]

  1. 채무자가 대출을 받는다.
  2. 대출 받은 코인이나 토큰을 사용한다.
  3. 채무자가 상환을 한다.
    3.1. 상환을 하지 못할 시 거래는 없던 것이 되어, 대출자에게 원금이 돌아간다.

트랜잭션이 롤백된다는 점이 우선 첫 번째 리스크를 해소시키는 방법이다. 사실 이는 두 번째 리스크도 같이 해소시키도 한다. 신뢰 없이도 대출자가 대출금을 상환받을 수 있게 보장되기 때문이다.

고작 15초 동안 무엇을 할 수 있느냐는 의문이 들 것이다. 하지만 블록체인 상에서의 거래는 현실과 다르다는 것을 인지해야 한다. 원하는 데로 작동할 수 있는 코드만 있으면 15초 동안에도 많은 것을 할 수 있게 만든다.

플래시론 공격

하지만 이 플래시론을 이용, 스마트 컨트랙트의 취약점을 노려 이득을 취하는 방법이 있다.

만약 어떤 플랫폼에서 빌린 코인의 가격이$1이고, 1000개를 빌렸다고 해보자. 그리고 어떤 거래소에서는 해당 코인을 $2에 거래를 하고 있다고 한다. 그럼 아까 빌렸던 플랫폼에서 1000개를 사서 대신 갚고, 빌린 코인을 이 거래소에서 팔면 $1000의 차익이 난다. 여기까지는 사실 공격이라고 할 수 없다. 왜냐하면 거래소의 시세 차이가 이미 존재했기 때문이다.

하지만 다음에서 소개하는 사례는 악의적으로 상황을 발생시킨다.

⌞ 공격 사례

dYdX 와 bZx는 플래시론 서비스 제공자이다.

  1. 먼저 dYdX로부터 10,000 ETH를 빌립니다.
  2. 5,500 ETH는 Compound에 보내 112 wBTC를 빌리는 담보로 사용합니다.
  3. 1,300 ETH는 bZx의 Fulcrum에 보내 5배 레버리지로 예치합니다. (이 레버리지는 공격의 이득을 극대화하기 위해 사용되었습니다.)
  4. 3번의 결과로 5,637 ETH를 빌려 51 wBTC로 교환합니다. (이때, 교환 비율이 110 ETH/BTC로 이더의 가치를 떨어뜨렸습니다. 공격의 핵심이 되는 단계입니다.)
  5. 2번의 Compound에서 빌린 112 wBTC를 6871 ETH로 교환합니다. (이 단계에서 공격자가 4번에서 조작한 교환비율을 이용하여 이득을 취하게됩니다.)
  6. 1번에서 빌린 10,000 ETH를 갚고 남은 이득을 취합니다.

[미디엄 블로그 : 플래시 론 (Flash Loan) 공격의 원리 및 공격 방법 분석 중]

위의 사례는 스마트 컨트랙트의 알고리즘을 노리고 시장을 교란시켜 이득을 취한다.

참고

profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!

0개의 댓글