--- title: Flash Loan Attack - Ethereum tags: security description: --- <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> Flash Loan Attack - Ethereum === Flash Loan Attack 이란? --- - Flash Loan은 Defi 상품 중 하나로, 비담보 대출이다. 비담보 대출이라함은 암호화폐, 디지털 자산 등 담보 없이 대출을 해주는 것인데, 이것이 가능한 이유는 블록체인 Transaction (Tx) 의 특성때문이다. 블록체인 Tx 특성상 대출을 받고, 갚는 것이 하나의 Tx 안에서 가능하기 때문에 비담보 대출과 같은 금융 상품이 나올 수 있다. 이 상품의 취지는 대출자가 담보없이 대출을 받아 다른 상품에 투자해서 수익을 얻은 후, 바로 대출을 상환하는 것이다. - 하지만, 이를 악용하면 다음과 같은 시나리오가 가능하다. 1. Flash Loan을 통해서 거액의 돈을 대출받는다. 2. 그 다음, 이 돈으로 시장의 시세를 조작하여 이득을 취한다 3. 그리고 바로 대출금을 갚기 때문에 공격자는 아무런 리스크없이 막대한 이득을 챙길 수 있다. - 어떻게 하나의 Tx 안에 여러 개의 Transfer 가 발생할 수 있을까? Contract 를 그렇게 짜면 가능하다. Tx 는 하나의 Contract 를 호출했을 때 발생하는 것이고, 그 안에 Contract 가 어떻게 구성되어 있느냐에 따라서 여러 개의 Transfer 를 발생시킬 수 있다. - 실제 이더리움의 Flash Loan Attack 에 대한 Contract 를 보면 다양한 Transaction 이 하나의 Contract 안에 담겨져 있는 것을 볼 수 있다. [1] ***해킹에 사용된 Contract*** ![](https://i.imgur.com/2syqMw5.png) - 이더리움의 Flash Loan Attack 은 First Attack 과 Second Attack 두 차례에 걸쳐서 진행되었다. First Attack [2] --- 1. 이더리움을 비담보대출로 받음. 2. 다른 Dex에서 비담보대출을 받은 이더리움의 일부를 담보로 비트코인을 빌림. 3. 남은 이더리움의 일부를 N 배의 레버리지를 통해서 숏포지션을 잡음. 이를 통해 적은 양의 이더리움을 통해 레버리지를 크게 잡아 이더리움의 가치를 떨어뜨림과 동시에 비트코인의 가치를 올림. 4. 3번의 결과로 Dex에서 숏 스왑을 하여 이더리움을 덤핑, 비트코인을 펌핑시킴. 5. 2번의 비트코인을 이더리움으로 스왑하면, 처음에 예치했던 이더리움보다 더 많은 이더리움을 얻게 됨. (3,4 과정을 통해서 이더리움의 가치가 떨어졌으므로) 6. 1번에서 대출받은 것을 상환함. Second Attack [2] --- 이더리움에 대한 Flash Loan Attack 은 First Attack 발생 3일 후 다시 이뤄졌다. 이번에는 1. 이더리움을 비담보대출로 받고, 일부를 sUSD(스테이블 코인)으로 변환함. 2. 대출금의 일부를 Kyber Dex 에서 이더리움을 sUSD 로 스왑. 이 때, 정상적인 비율보다 2.5배 더 비싼 가격에 sUSD 를 삼. 3. 추가로 Syntetix 에서 sUSD을 구매함. 4. bZx에 구매한 스테이블 코인을 담보로 ETH를 대출함. 5. 이 때, bZx는 sUSD와 ETH의 비율은 Kyber에 의존하는 오라클에 의해서 결정되었는데, 2로 인해서 sUSD와 ETH 의 비율이 비정상적인 상태였음. 따라서, 그 비정상적인 비율에 따라 2.5배 만큼의 ETH를 대출해줌. 6. 공격자는 대출받은 ETH를 상환하고, 나머지 차액을 얻어 이익을 취함. 7. 담보를 맡긴 sUSD는 찾을 이유가 없기 때문에 그냥 두고 도망감. 참고자료 --- [1] https://etherscan.io/tx/0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838 [2] https://medium.com/curg/%EB%8F%88-%EB%86%93%EA%B3%A0-%EB%8F%88-%EB%A8%B9%EA%B8%B0-flash-loan-attack-2f8bed0d3a77