SlideShare a Scribd company logo
DeFi 스마트 컨트랙트의 취약점
분석 및 적용, 그리고 개선 방법
SCVSoft 오효근
whoami
• 오효근
https://www.benjioh5.com
• KITRI Best of the Best 4기, 취약점 분석 트랙 수료
• 블록체인 스타트업 SCVSoft (2018.2 ~)
DeFi 종류의 분류
• Old Fashioned : USDT, USDC
(미국 달러를 담보해서 1 대 1 교환 가능한 토큰 발행)
• Lend : DAI (Ethereum 등을 담보로 잡고 토큰을 발행)
• DEX : Uniswap / Curve (LP 기반 온체인 거래소)
• Yield Farming : YAM, Sushi, BAC, ..... (DEX에 LP 공급에 따른 인센티브 지불)
• Aggrigator : YFI, Harvest (위의 서비스에 분산 투자)
그래서 뭐가 문제인데?
• 2020-02-14 : bZx $954,000, Flashloan을 통한 가격 조작
• 2020-03-12 : MakerDAO (DAI) $8,000,000,000, 이더리움 가격 폭락으로 인한 강제 청산
• 2020-04-18 : dForce & lendf.me $25,000,000,000, Reentrancy attack
• 2020-04-25 : Hegic $48,000, 코드 실수로 인한 출금 불가
• 2020-06-28 : Balancer $500,000, Flashloan
• 2020-08-11 : YAM $750,000, 코드 실수로 인한 대량 발급
• 2020-08-26 : Harvest $24,000,000,000, Flashloan 기반 가격 조작 후 인출
• 2020-11-12 : Akropolis $2,000,000,000, 컨트랙트 설계 오류 이용
• 2020-11-22 : Pickle Finance $19,700,000,000, 컨트랙트 설계 오류 이용
• 그 외에도 수 많은 해킹 사례들...
https://cryptobriefing.com/50-million-lost-the-top-19-defi-cryptocurrency-hacks-2020
Uniswap
Uniswap 101
Uniswap 101
https://dsenchenko.medium.com/impermanent-losses-in-uniswap-like-markets-4315359ea9b1
Uniswap 101
• 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1)
• 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까?
• (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC
Uniswap 101
• 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1)
• 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까?
• (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC
• 그렇다면, 20 DAI를 20 USDC로 교환할 경우?
• (100 + 20) DAI / (100 - 20) USDC = 1.5 DAI/USDC
Uniswap 101
• 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1)
• 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까?
• (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC
• 그렇다면, 20 DAI를 20 USDC로 교환할 경우?
• (100 + 20) DAI / (100 - 20) USDC = 1.5 DAI/USDC
• 너무 변화량이 큰 거 아냐?
Uniswap 101
https://dsenchenko.medium.com/impermanent-losses-in-uniswap-like-markets-4315359ea9b1
Uniswap 101
• 10000 DAI 와 10000 USDC가 Uniswap에 쌍으로 들어있다고 가정
• 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까?
• (10000 + 10) DAI / (10000 - 10) USDC = 1.002 DAI/USDC
• 그렇다면, 20 DAI를 20 USDC로 교환할 경우?
• (10000 + 20) DAI / (10000 - 20) USDC = 1.004 DAI/USDC
• (?!)
Uniswap 101 - LP
• LP는 Liquidity Provider (혹은 Pool)의 준말로, 유동성 공급자를 뜻 함.
• 유동성?
• 두 토큰 쌍이 스테이킹이 많이 되어있을 수록, 가격 변동폭이 낮아짐
• 즉, 가격 변동폭을 낮추려면, 스테이킹을 거래량 이상으로 해야함
• 이를 유동성 공급이라고 함 (뭐 일단 스테이킹 == 유동성 공급)
• 근데 인센티브가 없는데, 스테이킹을 할 이유가 있는가?
Uniswap 101 - LP
• 모든 Uniswap의 거래는 0.3%의 수수료를 지불 함
• 이 수수료는 풀에 지속적으로 쌓이게 되고, 이를 언제나 출금 할 수 있음
• 수익률 : 일반적으로 풀당 스테이킹 한 양의 연 30%, 많으면 100%가 넘어감
Uniswap 101 - LP
Uniswap 101 - LP
Uniswap 101 - LP
Curve
Curve 101
https://www.curve.fi/stableswap-paper.pdf
Curve 101
https://www.curve.fi/stableswap-paper.pdf
이자 농사
이자 농사
https://thedefiant.substack.com/p/sushiswap-comes-for-uniswap-as-defis
이자 농사
https://sushiswapclassic.org/farms
사례로 배우는 취약점
대표 취약점 & 공격
• Rug Pull
• Price manipulation with Flash loan (Oracle attack)
• Reentrancy attack
• 블록 단위 공격
• 블록체인 밖에서 공격
• 코딩 실수
Case #1 - Rug Pull
https://twitter.com/chain_bulletin/status/1334469748088778752
https://www.coindesk.com/compounder-developers-implicated-alleged-smart-contract-rug-pull
Case #1 - Rug Pull
https://etherscan.io/tx/0x57c61df91e46b191424bfdd9223f277457a07999b58420e3b540059aad3fc7fe
Case #2 -
Price manipulation w/ Flash loan (bZx)
https://etherscan.io/tx/0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838
https://medium.com/iotrustlab/%ED%94%8C%EB%9E%98%EC%8B%9C-%EB%A1%A0-%EA%B3%B5%EA%B2%A9-flash-loan-attack-
%EC%9B%90%EB%A6%AC-%EB%B0%8F-%EB%B0%A9%EB%B2%95-%EB%B6%84%EC%84%9D-94e01fe1a9c8
Case #3 -
Reentrancy attack (imBTC)
https://quantstamp.com/blog/what-is-a-re-entrancy-attack
Case #3 -
Reentrancy attack (imBTC)
https://github.com/ConsenSys/Uniswap-audit-report-2018-12#31-liquidity-pool-can-be-stolen-in-some-tokens-eg-erc-777-29
https://github.com/OpenZeppelin/exploit-uniswap
https://etherscan.io/tx/0x9743677ccf9a95f0a0521558d1bf853226f3a87c077d40cf3df73199ba211102
Case #4 -
블록 단위 공격
• 여러 트랜젝션을 동일 블록에 넣어서 공격
• e.g. Tx1이 가격 조작, Tx2가 조작 가격으로 Lend/Loan, Tx3이 가격 롤백
• Batch Job 형태로 작동되는 형태이고, Reentrancy attack Guard를 무력화 할
수 있음. (Tx 단위로 점검하니) 다만, 한 블록 안에 안 끝날 경우 실패하게 됨
• 시도 사례 및 실 성공 사례는 적으나, 특정 상황에서 잘 작동 됨 (e.g. Core Vault)
Case #5 -
블록체인 밖에서 공격 (NXM)
https://twitter.com/bneiluj/status/1339129283315425280
Case #6-
블록체인 밖에서 공격 (Klaystation)
https://joind.io/ico/id/3961
Case #6-
블록체인 밖에서 공격 (Klaystation)
https://forum.klaytn.com/t/topic/519
Case #7-
코딩 실수 (Parity Multisig, Hegic)
https://twitter.com/paddypisa/status/927885515407454209
https://twitter.com/HegicOptions/status/1253937104666742787
Case #8-
코딩 실수 (Pickle)
https://twitter.com/bantg/status/1330549173440098305
Case #9 -
코딩 실수 (YAM)
https://medium.com/yam-finance/save-yam-245598d81cec
오딧팅을 받으면 되지 않을까?
Case Study - Harvest Finance
Case Study - Harvest Finance
https://medium.com/haechi-audit-kr/harvest-finance-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8-%EB%B3%B4%EC%95%88%EA%B0%90%EC%82%AC-431dc91fd80b
Case Study - Harvest Finance
https://decrypt.co/46445/engineering-error-34-million-defi-hack-harvest-finance
버그 바운티를 열자!
버그 바운티 - Curve
https://www.curve.fi/bugbounty
버그 바운티 - Core Vault
https://medium.com/core-vault/cores-bug-bounty-reward-announcement-4b9af30827e7
이것도 버그 바운티 맞지...?
https://twitter.com/harvest_finance/status/1320624369543057409
방어 기법
Defense Case #1 - OpenZeppelin
Defense Case #2 - Basis Cash
Defense Case #3 - Multi-party oracle
이 정도면 충분할까?
Defense Failure Case #1 - Basis Cash
https://github.com/Basis-Cash/basiscash-protocol/issues?q=is%3Aissue+is%3Aclosed
Defense Failure Case #1 - Basis Cash
결론
• DeFi 공격 방법은 다양화 되어가고 있음
• 취약점이 어디서 나올지도 모르고, 패치는 언제나 ASAP으로 해야함
• 블록체인은 DB이면서, State Machine이기에 발생하는 문제가 너무 많음
• 한 Tx는 수 십 가지의 일을 처리할 수 있다는 것도 문제
• 바운티 금액이 짬. 해킹해서 100억 벌기 vs 바운티해서 500 벌기 => 해킹함
결론
• 중앙 통제되는 Upgradeable Contract로 만들고, 전체 거래 Pause 기능 추가
=> DeFi의 De가 이루어질 수 없음
• Price oracle을 개선하거나, Time 가중치를 넣거나, Feedback을 넣어야함
=> Gas Price 증가, 온체인 데이터 증가, 각종 버그 발생 확률 증가
• EVM에 이전 블록 데이터 조회가 가능하도록 해야함 => 하드포크 수반
• 내린 결론 : 지금 당장 해결할 방법이... 없다.... => 계속 해킹 일어날 것임
QNA

More Related Content

What's hot

JSON Web Token
JSON Web TokenJSON Web Token
JSON Web Token
Deddy Setyadi
 
Jwt Security
Jwt SecurityJwt Security
Jwt Security
Seid Yassin
 
Json web token
Json web tokenJson web token
Json web token
Mayank Patel
 
Modern API Security with JSON Web Tokens
Modern API Security with JSON Web TokensModern API Security with JSON Web Tokens
Modern API Security with JSON Web Tokens
Jonathan LeBlanc
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices Architecture
Idan Fridman
 
ELB를 활용한 Socket.IO 멀티노드 구축사례
ELB를 활용한 Socket.IO 멀티노드 구축사례ELB를 활용한 Socket.IO 멀티노드 구축사례
ELB를 활용한 Socket.IO 멀티노드 구축사례
Anson Park
 
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
Open Source Consulting
 
[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf
Jo Hoon
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
OpenStack Korea Community
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
Jo Hoon
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
Santosh Kumar Kar
 
Rethinking Cloud Proxies
Rethinking Cloud ProxiesRethinking Cloud Proxies
Rethinking Cloud Proxies
Mikey Cohen - Hiring Amazing Engineers
 
OAuth 2.0 for Web and Native (Mobile) App Developers
OAuth 2.0 for Web and Native (Mobile) App DevelopersOAuth 2.0 for Web and Native (Mobile) App Developers
OAuth 2.0 for Web and Native (Mobile) App Developers
Prabath Siriwardena
 
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
Amazon Web Services Korea
 
How to Configure QinQ?
How to Configure QinQ?How to Configure QinQ?
How to Configure QinQ?
Huanetwork
 
Interopérabilité des systèmes billettiques - Séminaire CapTronic
Interopérabilité des systèmes billettiques - Séminaire CapTronicInteropérabilité des systèmes billettiques - Séminaire CapTronic
Interopérabilité des systèmes billettiques - Séminaire CapTronic
Régis Castéran
 
jemalloc 세미나
jemalloc 세미나jemalloc 세미나
jemalloc 세미나
Jang Hoon
 
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Amazon Web Services Korea
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
Open Source Consulting
 
Introduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring SecurityIntroduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring Security
Bruno Henrique Rother
 

What's hot (20)

JSON Web Token
JSON Web TokenJSON Web Token
JSON Web Token
 
Jwt Security
Jwt SecurityJwt Security
Jwt Security
 
Json web token
Json web tokenJson web token
Json web token
 
Modern API Security with JSON Web Tokens
Modern API Security with JSON Web TokensModern API Security with JSON Web Tokens
Modern API Security with JSON Web Tokens
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices Architecture
 
ELB를 활용한 Socket.IO 멀티노드 구축사례
ELB를 활용한 Socket.IO 멀티노드 구축사례ELB를 활용한 Socket.IO 멀티노드 구축사례
ELB를 활용한 Socket.IO 멀티노드 구축사례
 
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
 
[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Rethinking Cloud Proxies
Rethinking Cloud ProxiesRethinking Cloud Proxies
Rethinking Cloud Proxies
 
OAuth 2.0 for Web and Native (Mobile) App Developers
OAuth 2.0 for Web and Native (Mobile) App DevelopersOAuth 2.0 for Web and Native (Mobile) App Developers
OAuth 2.0 for Web and Native (Mobile) App Developers
 
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
 
How to Configure QinQ?
How to Configure QinQ?How to Configure QinQ?
How to Configure QinQ?
 
Interopérabilité des systèmes billettiques - Séminaire CapTronic
Interopérabilité des systèmes billettiques - Séminaire CapTronicInteropérabilité des systèmes billettiques - Séminaire CapTronic
Interopérabilité des systèmes billettiques - Séminaire CapTronic
 
jemalloc 세미나
jemalloc 세미나jemalloc 세미나
jemalloc 세미나
 
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
 
Introduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring SecurityIntroduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring Security
 

ETHCON 2020 - DeFi 스마트 컨트랙트의 취약점 분석 및 적용, 그리고 개선 방법

  • 1. DeFi 스마트 컨트랙트의 취약점 분석 및 적용, 그리고 개선 방법 SCVSoft 오효근
  • 2. whoami • 오효근 https://www.benjioh5.com • KITRI Best of the Best 4기, 취약점 분석 트랙 수료 • 블록체인 스타트업 SCVSoft (2018.2 ~)
  • 3. DeFi 종류의 분류 • Old Fashioned : USDT, USDC (미국 달러를 담보해서 1 대 1 교환 가능한 토큰 발행) • Lend : DAI (Ethereum 등을 담보로 잡고 토큰을 발행) • DEX : Uniswap / Curve (LP 기반 온체인 거래소) • Yield Farming : YAM, Sushi, BAC, ..... (DEX에 LP 공급에 따른 인센티브 지불) • Aggrigator : YFI, Harvest (위의 서비스에 분산 투자)
  • 4. 그래서 뭐가 문제인데? • 2020-02-14 : bZx $954,000, Flashloan을 통한 가격 조작 • 2020-03-12 : MakerDAO (DAI) $8,000,000,000, 이더리움 가격 폭락으로 인한 강제 청산 • 2020-04-18 : dForce & lendf.me $25,000,000,000, Reentrancy attack • 2020-04-25 : Hegic $48,000, 코드 실수로 인한 출금 불가 • 2020-06-28 : Balancer $500,000, Flashloan • 2020-08-11 : YAM $750,000, 코드 실수로 인한 대량 발급 • 2020-08-26 : Harvest $24,000,000,000, Flashloan 기반 가격 조작 후 인출 • 2020-11-12 : Akropolis $2,000,000,000, 컨트랙트 설계 오류 이용 • 2020-11-22 : Pickle Finance $19,700,000,000, 컨트랙트 설계 오류 이용 • 그 외에도 수 많은 해킹 사례들... https://cryptobriefing.com/50-million-lost-the-top-19-defi-cryptocurrency-hacks-2020
  • 8. Uniswap 101 • 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1) • 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까? • (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC
  • 9. Uniswap 101 • 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1) • 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까? • (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC • 그렇다면, 20 DAI를 20 USDC로 교환할 경우? • (100 + 20) DAI / (100 - 20) USDC = 1.5 DAI/USDC
  • 10. Uniswap 101 • 100 DAI 와 100 USDC가 Uniswap에 쌍으로 들어있다고 가정 (교환비 1 : 1) • 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까? • (100 + 10) DAI / (100 - 10) USDC = 1.222... DAI/USDC • 그렇다면, 20 DAI를 20 USDC로 교환할 경우? • (100 + 20) DAI / (100 - 20) USDC = 1.5 DAI/USDC • 너무 변화량이 큰 거 아냐?
  • 12. Uniswap 101 • 10000 DAI 와 10000 USDC가 Uniswap에 쌍으로 들어있다고 가정 • 10 DAI를 10 USDC로 교환을 시도할 경우, 두 토큰의 Price는 어떻게 변할까? • (10000 + 10) DAI / (10000 - 10) USDC = 1.002 DAI/USDC • 그렇다면, 20 DAI를 20 USDC로 교환할 경우? • (10000 + 20) DAI / (10000 - 20) USDC = 1.004 DAI/USDC • (?!)
  • 13. Uniswap 101 - LP • LP는 Liquidity Provider (혹은 Pool)의 준말로, 유동성 공급자를 뜻 함. • 유동성? • 두 토큰 쌍이 스테이킹이 많이 되어있을 수록, 가격 변동폭이 낮아짐 • 즉, 가격 변동폭을 낮추려면, 스테이킹을 거래량 이상으로 해야함 • 이를 유동성 공급이라고 함 (뭐 일단 스테이킹 == 유동성 공급) • 근데 인센티브가 없는데, 스테이킹을 할 이유가 있는가?
  • 14. Uniswap 101 - LP • 모든 Uniswap의 거래는 0.3%의 수수료를 지불 함 • 이 수수료는 풀에 지속적으로 쌓이게 되고, 이를 언제나 출금 할 수 있음 • 수익률 : 일반적으로 풀당 스테이킹 한 양의 연 30%, 많으면 100%가 넘어감
  • 18. Curve
  • 25. 대표 취약점 & 공격 • Rug Pull • Price manipulation with Flash loan (Oracle attack) • Reentrancy attack • 블록 단위 공격 • 블록체인 밖에서 공격 • 코딩 실수
  • 26. Case #1 - Rug Pull https://twitter.com/chain_bulletin/status/1334469748088778752 https://www.coindesk.com/compounder-developers-implicated-alleged-smart-contract-rug-pull
  • 27. Case #1 - Rug Pull https://etherscan.io/tx/0x57c61df91e46b191424bfdd9223f277457a07999b58420e3b540059aad3fc7fe
  • 28. Case #2 - Price manipulation w/ Flash loan (bZx) https://etherscan.io/tx/0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838 https://medium.com/iotrustlab/%ED%94%8C%EB%9E%98%EC%8B%9C-%EB%A1%A0-%EA%B3%B5%EA%B2%A9-flash-loan-attack- %EC%9B%90%EB%A6%AC-%EB%B0%8F-%EB%B0%A9%EB%B2%95-%EB%B6%84%EC%84%9D-94e01fe1a9c8
  • 29. Case #3 - Reentrancy attack (imBTC) https://quantstamp.com/blog/what-is-a-re-entrancy-attack
  • 30. Case #3 - Reentrancy attack (imBTC) https://github.com/ConsenSys/Uniswap-audit-report-2018-12#31-liquidity-pool-can-be-stolen-in-some-tokens-eg-erc-777-29 https://github.com/OpenZeppelin/exploit-uniswap https://etherscan.io/tx/0x9743677ccf9a95f0a0521558d1bf853226f3a87c077d40cf3df73199ba211102
  • 31. Case #4 - 블록 단위 공격 • 여러 트랜젝션을 동일 블록에 넣어서 공격 • e.g. Tx1이 가격 조작, Tx2가 조작 가격으로 Lend/Loan, Tx3이 가격 롤백 • Batch Job 형태로 작동되는 형태이고, Reentrancy attack Guard를 무력화 할 수 있음. (Tx 단위로 점검하니) 다만, 한 블록 안에 안 끝날 경우 실패하게 됨 • 시도 사례 및 실 성공 사례는 적으나, 특정 상황에서 잘 작동 됨 (e.g. Core Vault)
  • 32. Case #5 - 블록체인 밖에서 공격 (NXM) https://twitter.com/bneiluj/status/1339129283315425280
  • 33. Case #6- 블록체인 밖에서 공격 (Klaystation) https://joind.io/ico/id/3961
  • 34. Case #6- 블록체인 밖에서 공격 (Klaystation) https://forum.klaytn.com/t/topic/519
  • 35. Case #7- 코딩 실수 (Parity Multisig, Hegic) https://twitter.com/paddypisa/status/927885515407454209 https://twitter.com/HegicOptions/status/1253937104666742787
  • 36. Case #8- 코딩 실수 (Pickle) https://twitter.com/bantg/status/1330549173440098305
  • 37. Case #9 - 코딩 실수 (YAM) https://medium.com/yam-finance/save-yam-245598d81cec
  • 39. Case Study - Harvest Finance
  • 40. Case Study - Harvest Finance https://medium.com/haechi-audit-kr/harvest-finance-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8-%EB%B3%B4%EC%95%88%EA%B0%90%EC%82%AC-431dc91fd80b
  • 41. Case Study - Harvest Finance https://decrypt.co/46445/engineering-error-34-million-defi-hack-harvest-finance
  • 43. 버그 바운티 - Curve https://www.curve.fi/bugbounty
  • 44. 버그 바운티 - Core Vault https://medium.com/core-vault/cores-bug-bounty-reward-announcement-4b9af30827e7
  • 45. 이것도 버그 바운티 맞지...? https://twitter.com/harvest_finance/status/1320624369543057409
  • 47. Defense Case #1 - OpenZeppelin
  • 48. Defense Case #2 - Basis Cash
  • 49. Defense Case #3 - Multi-party oracle
  • 51. Defense Failure Case #1 - Basis Cash https://github.com/Basis-Cash/basiscash-protocol/issues?q=is%3Aissue+is%3Aclosed
  • 52. Defense Failure Case #1 - Basis Cash
  • 53. 결론 • DeFi 공격 방법은 다양화 되어가고 있음 • 취약점이 어디서 나올지도 모르고, 패치는 언제나 ASAP으로 해야함 • 블록체인은 DB이면서, State Machine이기에 발생하는 문제가 너무 많음 • 한 Tx는 수 십 가지의 일을 처리할 수 있다는 것도 문제 • 바운티 금액이 짬. 해킹해서 100억 벌기 vs 바운티해서 500 벌기 => 해킹함
  • 54. 결론 • 중앙 통제되는 Upgradeable Contract로 만들고, 전체 거래 Pause 기능 추가 => DeFi의 De가 이루어질 수 없음 • Price oracle을 개선하거나, Time 가중치를 넣거나, Feedback을 넣어야함 => Gas Price 증가, 온체인 데이터 증가, 각종 버그 발생 확률 증가 • EVM에 이전 블록 데이터 조회가 가능하도록 해야함 => 하드포크 수반 • 내린 결론 : 지금 당장 해결할 방법이... 없다.... => 계속 해킹 일어날 것임
  • 55. QNA