출처: Salus Insights
탈중앙화 금융(DeFi) 분야에는 사용자, 플랫폼, 전체 금융 생태계에 심각한 피해를 입힐 수 있는 수많은 보안 위험이 존재합니다. 최근 발생한 실제 보안 사고를 분석하여 세 가지 DeFi 보안 위험을 요약하고 해킹 과정과 대응 방안을 설명합니다.
가격 조작 위험
스마트 컨트랙트 취약성 위험
사용자 운영 위험
1. 가격 조작 위험
디파이에서 가격 조작 위험은 자산의 가격을 조작하여 이익을 얻거나 시장에 영향을 미치려는 악의적인 행위자의 행동입니다. <이러한 조작은 시장 가격을 비정상적으로 움직여 다른 참여자에게 손실을 초래할 수 있습니다. 아래에는 가격 조작의 위험이 발생할 수 있는 세 가지 시나리오가 요약되어 있습니다:
라이트닝 대출 공격
샌드위치 공격
프로페시 머신 공격
1.1 라이트닝 대출 공격 공격
라이트닝 대출 공격은 디파이 애플리케이션에서 등장한 공격 유형입니다. 이 공격은 담보 제공 없이 돈을 빌릴 수 있는 금융 서비스인 플래시 대출을 이용합니다. 공격자는 플래시 대출을 통해 거액의 돈을 빌린 후 동일한 거래에서 일련의 작업을 수행하여 사기를 저지릅니다.
시도글로벌 라이트닝 대출 공격
2023 . 6월 23일, BSC(코인스마트체인)에서 시도글로벌 라이트닝 대출 공격이 발생했습니다. 공격자는 락 앤 클레임 메커니즘과 두 풀 간의 가격 차이를 통해 토큰 차익 거래를 달성하여 976 WBNB를 훔치는 데 성공했습니다.
공격 유형:
style="text-align: left;">https://explorer.phalcon.xyz/tx/bsc/0x72f8dd2bcfe2c9fbf0d933678170417802ac8a0d8995ff9a56bfbabe3aa712d6
공격자는 플래시 크레딧 공격을 어떻게 실행하나요?

공격자는 39 WBNB를 10, 436, 972, 685, 676,390,697 시도이누: 시도 토큰(소수점 뒤 9자리 포함)으로 교환하고 이를 에 예치했습니다; 팬케이크스왑 V2:SHIDO-WBNB 풀에 입금했습니다. 이 작업 단계는 해당 풀의 <시도이누:SHIDO> 토큰 공급을 증가시켜 해당 토큰의 가격을 하락시켰습니다.

그다음 공격자는 ShidoLock.lockTokens 와 ShidoLock.lockTokens 를 차례로 호출하기 시작했습니다. 10,436,972,685.676390697 토큰(소수점 이하 9자리 포함!)을 변환하는 ShidoLock.claimTokens를 호출하여 10,436,972,685.676390697 토큰을 변환했습니다. )는 10, 436, 986, 704, 133, 494, 387, 000,000,000,000,000 토큰(소수점 둘째 자리)으로 변환되었습니다. 소수점 이하 18자리).
공격자가 ShidoLock 컨트랙트에서 lockTokens 함수를 호출하면 10,436,972,685,685개의 토큰을 받게 됩니다. 685.676390697 의 토큰은 계약에 잠겨 있습니다. 이는 특정 조건이 충족될 때까지 해당 토큰을 양도하거나 거래할 수 없음을 의미합니다. 토큰을 잠그면 공격자는 토큰의 가격 안정성을 어느 정도 유지할 수 있습니다.
공격자는 함수를 호출하여 잠긴 토큰을 <10,436,986,704,133,494 , 387, 000, 000, 000, 000 SHIDO tokens. 이 단계에서는 실제로 SHIDO 토큰의 소수점 이하 자릿수가 9자리에서 18자리로 증가하여 토큰의 총 공급량이 증가합니다.

잠금 및 청구 메커니즘을 통해 팬케이크스왑 V2: SHIDO-WBNB 풀과 . 팬케이크스왑 V2: SHIDO 28 풀은 서로 가격 차이가 있습니다. 특히, 풀의 토큰 공급량 증가로 인해 가격이 하락했습니다. 반면에 풀에서는 공급이 증가하지 않기 때문에 가격이 상대적으로 높습니다. 공격자는 이 가격 차이를 이용하여 두 풀 간에 토큰을 더 유리한 가격인 10,436,986,704,133,494,387,000,000,000으로 스왑합니다. 000 SHIDO 토큰(소수점 이하 18자리까지)이 1,016 WBNB로 교환되었습니다.


라이트닝 대출 기능 제한
플래시 크레딧 기능을 제한하고 플래시 크레딧 수수료를 도입하는 것은 플래시 크레딧 공격과 조작의 위험을 줄이기 위한 일반적인 방법입니다..
라이트닝 대출 기능 제한: 최소 대출 금액, 대출 시간 제한 등을 설정하여 라이트닝 대출 기능을 제한할 수 있습니다. 이렇게 하면 공격자가 라이트닝 대출을 사용하여 공격을 수행할 가능성이 줄어듭니다.
라이트닝 대출 취급 수수료 도입: 차용자에게 취급 수수료를 부과할 수 있습니다. 이는 공격 비용을 증가시키고 공격자가 플래시 대출 공격을 수행할 때 더 높은 위험과 비용에 노출될 수 있습니다.

위 샘플 코드에서는 라이트닝 대출 기능의 사용을 제한하는 몇 가지 제약 조건을 설정했습니다. , 최대 대출 금액 및 대출 시간 등 몇 가지 제약 조건을 설정했습니다. 번개 대출 작업을 수행하기 전에 처리 수수료의 일정 비율을 계산하여 징수합니다.
1.2 샌드위치 공격
샌드위치 공격은 탈중앙화 거래소(DEX)의 정보 비대칭성을 악용하는 공격입니다. 공격자는 두 거래 사이에 악의적인 거래를 삽입하여 가격 차이로 이익을 얻습니다.
커브파이낸스 샌드위치 공격
2023년 8월 2일, 하이퍼네이티브 시스템은 Curve Finance에 샌드위치 공격을 시작했습니다. 공격자들은 유동성을 추가하고 유동성을 제거하는 두 거래 사이에 악의적인 거래를 삽입하여 36.8 K USDT를 획득했습니다.
공격 유형:
https://explorer.phalcon.xyz/tx/eth/0xd493c73397952049644c531309df3dd4134bf3db1e64eb6f0b68b016ee0bffde
공격자는 샌드위치 공격을 어떻게 실행하나요?



UnderlyingBurner contract 를 호출합니다. 실행() 함수를 호출하여 Curve DAI/USDC/USDT 풀에 유동성을 계속 추가합니다.UnderlyingBurner 는 주로 USDT를 보유하며, DAI:USDC:USDT 의 수량을 100,000개 추가합니다. 100, 000: 227, 079, 039, 776 . 이로 인해 USDT의 상대적 금액은 더 높고, 가치는 더 낮은 불균형한 풀이 형성되었습니다.




이 과정에서 악성 거래란 공격자가 커브 DAI/USDC/USDT 채굴 풀에서 대량의 DAI 및 USDC 유동성을 제거하고 3 CRV LP 토큰 트랜잭션을 파괴했습니다. 이 거래로 인해 풀은 매우 불균형해졌으며, 상대적으로 더 많은 양의 USDT가 풀에 유입되어 가치가 낮아졌습니다.
다른 두 거래는 공격자가 유동성을 추가하고 유동성을 인출한 거래를 나타냅니다. 공격자는 가격 차이를 이용하여 더 많은 양의 3 CRV LP 토큰을 확보하기 위해 자신들이 보유한 DAI 및 USDC 유동성을 Curve DAI/USDC/USDT 풀에 추가하고 프리미엄을 지불하고 인출합니다.
이러한 방식으로 공격자는 샌드위치 공격을 통해 악성 거래를 다른 두 개의 거래와 패키징하여 낮은 가격에 USDT 유동성을 매수한 후 높은 가격에 매도하여 수익을 얻습니다. .
거래 주문 제한
샌드위치 공격을 방지하기 위해 코드를 구현할 때 복잡한 스마트 컨트랙트와 트랜잭션 로직을 포함할 수 있습니다. 아래는 트랜잭션 순서를 제한하고 트랜잭션 지연을 도입하여 샌드위치 공격을 방지하는 방법을 보여주는 간단한 예시입니다.

이 예시에서는 스마트 컨트랙트가 있다고 가정해 보겠습니다. 사용자의 잔액과 트랜잭션 작업을 관리하는 데 사용되는 샌드위치 공격 방지 스마트 컨트랙트가 있다고 가정해 보겠습니다. 샌드위치 공격을 방지하기 위해 두 가지 주요 방어 메커니즘을 소개합니다.
첫째, allowTransaction 함수에서 컨트랙트의 소유자만 isTransactionAllowed를 참으로 설정하여 사용자가 트랜잭션을 실행할 수 있도록 허용합니다. 이렇게 하면 트랜잭션이 올바른 순서로 실행되고 공격자가 두 트랜잭션 사이에 악의적인 트랜잭션을 삽입할 수 없습니다.
두 번째로, 실행 트랜잭션 함수에서는 트랜잭션 지연 시간 개념을 도입합니다. 사용자는 현재 블록 시간이 설정된 지연 시간을 초과하는 경우에만 트랜잭션을 실행할 수 있습니다. 이렇게 하면 다른 사용자가 트랜잭션을 실행하고 가격을 업데이트할 수 있는 충분한 시간이 주어져 공격자가 가격 차이를 악용할 수 있는 기회를 줄일 수 있습니다.
1.3 가격 예언 머신 공격
가격 예언 머신은 암호화폐의 실시간 가격 정보를 제공하는 데이터 소스입니다. 이 정보는 많은 탈중앙 금융 프로토콜이 제대로 작동하는 데 매우 중요합니다. 예측 머신 공격은 공격자가 조작된 가격에 기반한 거래로 이익을 얻을 목적으로 예언 머신이 제공하는 데이터를 인위적으로 변경하는 것을 말합니다.
로데오 파이낸스의 프로파시 머신 공격
로데오는 디파이 프로토콜입니다. 가격 예측 머신 서비스를 제공하는 디파이 플랫폼으로, 2023년 7월 11일 가격 예측 머신 조작으로 해커들이 로데오 프로토콜에서 약 472 이더(약 88만 8천 달러)를 탈취했습니다.
공격 Tx:
https://explorer.phalcon.xyz/tx/arbitrum/ 0xb1be5dee3852c818af742f5dd44def285b497ffc5c2eda0d893af542a09fb25a
가격 예언 머신이 어떻게 조작되고 있는지 설명합니다.
로데오 파이낸스 공격의 핵심은 로데오 TWAP 오라클(Rodeo TWAP Oracle)이었습니다. 예후 예측기는 ETH와 unshETH 간의 가격 비율을 추적하는 데 사용됩니다.
공격 거래 분석: 공격 과정은 공격자가 신중하게 계획한 거래를 실행하는 것으로 시작됩니다. 공격자는 플랫폼 아키텍처에 대한 깊은 이해와 시간 가중 평균 가격(TWAP) 예측 머신의 잠재적 취약점을 이용해 이 공격을 실행했습니다.
TWAP 예측 머신 조작: 공격자는 구성되지 않은 정책 주소와 관련된 'earn' 기능을 사용하여 'USDC'를 'unshETH'로 강제 교환할 수 있었습니다; 이 조작은 가격 예측 기계의 결함으로 인한 슬리피지 제어를 효과적으로 우회합니다. 본질적으로 적립 기능은 에서 로, 로 변경될 수밖에 없습니다.
TWAP 가격 계산하기: TWAP 가격은 각각 45분 간격으로 최근 4번의 업데이트 가격을 평균하여 계산됩니다. 그러나 결함이 있는 가격 예측기는 조작된 가격을 반환하여 스마트 컨트랙트가 포지션이 건전하다고 믿게 만들었습니다.
레버리지 포지션 개설: 공격자는 샌드위치 공격을 통해 TWAP 예후 예측기를 조작한 다음 투자자 계약에서 'earn' 함수를 호출하여 레버리지 포지션을 개설합니다. 이들은 40만 달러 상당의 USDC를 빌렸습니다.

자산 교환: 공격자 차입한 자산을 기초가 되는 풀과 교환하고, 준비된 를 풀에 다시 판매합니다.
실행 유효성 검사 우회: 컨트랙트는 일반적으로 작업이 유효한지 유효성을 검사합니다. 하지만 공격자는 이 정책을 제어하기 때문에 이 검사를 쉽게 우회할 수 있습니다. 이를 통해 공격자는 준비된 'unshETH'를 풀에 다시 판매하여 플랫폼에서 유동성을 효과적으로 추출함으로써 조작된 포지션을 활용할 수 있었습니다.
도난 자금 이체: 공격자는 훔친 자금을 에서 으로 이체하여 285 ETH를 로 교환합니다. unshETH로 교환한 다음 이를 Arbitrum으로 전송하여 공격을 계속합니다. 훔친 자금 중 150 ETH에 해당하는 금액은 개인 정보 보호에 중점을 둔 이더리움 하이브리드 코인 서비스인 Tornado Cash로 이체되었습니다. 나머지 371.2 ETH(약 701,679 USD 상당)는 여전히 공격자가 통제하는 주소에 보관되어 있습니다.
이 공격의 주요 취약점 중 하나는 로데오 TWAP 오라클 실행의 결함입니다. 이 예후 예측기는 유동성이 낮고 가격 변동성이 높은 WETH/unshETH 쌍의 준비금에 의존합니다.
복수의 예측자에 기반한 가격 계산
가격 쿼리의 신뢰성을 보장하려면 토큰 페어 비율에만 의존하지 말고 복수의 예후 예측자 또는 집계된 피드를 사용하여 가격을 계산해야 합니다. 특히 유동성이 낮은 채굴 풀의 경우, 다양한 가격 정보 소스를 사용하면 가격 데이터의 정확성을 높이고 공격자가 데이터를 조작하기 어렵게 만들 수 있습니다.
이 목표를 달성하기 위한 한 가지 가능한 해결책은 체인링크와 같은 탈중앙화된 예측 머신을 사용하는 것입니다. 예측 머신은 다양한 데이터 소스에서 데이터를 수집하고 블록체인 기술을 사용해 데이터의 데이터의 정확성을 검증할 수 있습니다. 여러 데이터 소스를 사용함으로써 체인링크는 단일 장애 지점이 발생할 가능성을 줄이고 공격자가 데이터를 조작하기 어렵게 만듭니다.
다음은 체인링크 애그리게이터 컨트랙트를 사용해 가격 데이터를 가져오는 코드의 예시입니다:

위 코드에서는 AggregatorV3Interface 유형의 배열을 사용하여 술어 머신의 여러 인스턴스를 저장했습니다. . 생성자는 예측 머신 주소 배열을 매개변수로 받아들이고 각 주소를 AggregatorV3Interface 객체로 인스턴스화합니다.
getLatestPrice 함수는 여러 데이터 소스에서 최신 가격 데이터를 가져오는 데 사용됩니다. 이 함수는 가격 피드 배열을 반복하고 각 예후 예측기의 최신 라운드 데이터 함수를 호출하여 가격 데이터를 가져옵니다. 모든 가격 데이터는 유형이 'int'인 배열에 저장되고 호출자에게 반환됩니다.
이렇게 하면 여러 데이터 소스에서 가격 데이터를 가져와 가격 쿼리가 자산 가격을 더 정확하게 반영하도록 할 수 있습니다.
2. 스마트 컨트랙트 취약성 위험
스마트 컨트랙트 취약성은 이더 또는 기타 스마트 컨트랙트 플랫폼에 작성된 코드의 보안 취약점이나 버그를 말합니다. 디파이의 핵심은 스마트 콘트랙트를 기반으로 하는 금융 프로토콜이므로 스마트 콘트랙트 취약점은 사용자 자금 손실, 시장 조작 또는 기타 악의적인 행위로 이어질 수 있습니다.
이러한 취약점을 식별하는 것이 중요하며, 저희는 감사는 광범위한 잠재적 문제 를 포괄합니다. 여기에는 재진입 취약성, 액세스 제어 취약성, 정수 오버플로 취약성, 비즈니스 로직 취약성 등이 포함되지만 이에 국한되지 않습니다. 저희의 종합 감사 서비스는 스마트 컨트랙트의 보안을 강화하고 이러한 위험으로부터 보호하도록 설계되었습니다.
아래는 액세스 제어 취약점이 스마트 컨트랙트 취약점이 디파이에 어떤 영향을 미칠 수 있는지 보여주는 예시입니다.
렛스왑의 접근 제어 취약점
렛스왑은 340 이더 이상의 피해를 입은 공격을 당했습니다! . 근본 원인은 페어 컨트랙트의 접근 제어 취약점이며, _transferFeesSupportingTaxTokens> 함수 가시성은
공개입니다.
Attack Tx:
https://dashboard.tenderly.co/tx/base/ 0xbb837d417b76dd237b4418e1695a50941a69259a1c4dee561ea57d982b9f10ec
Vulnerable Contract:
https://basescan.org/address/0x94dac4a3ce998143aa119c05460731da80ad90cf

공격자는 풀을 조작하기 위해 _transferFeesSupportingTaxTokens 함수를 호출했으며, 공격은 다음과 같이 진행되었습니다.
해결 방법
_transferFeesSupportingTaxTokens 함수의 접근 제어 취약점을 수정하려면 다음 함수를 변경해야 합니다. 함수의 가시성을 <비공개> 또는 <내부>로 변경합니다. 함수를 <비공개>로 선언하면 컨트랙트 내의 다른 함수만 함수를 호출할 수 있습니다. 함수를 '내부'로 선언하면 이를 상속하는 컨트랙트에서 접근할 수 있습니다. 'LeetSwap' 컨트랙트를 상속받은 다른 컨트랙트는 'super' 키워드를 사용하여 _transferFeesSupportingTaxTokens' 함수를 호출할 수 있습니다. 이 함수는 외부 사용자가 직접 액세스할 수 없으므로 컨트랙트의 보안이 향상됩니다.
함수의 가시성 변경 결정은 특정 컨트랙트 로직과 요구 사항에 따라 컨트랙트의 정상적인 작동에 영향을 주지 않으면서 보안을 향상시킬 수 있도록 해야 합니다.
스마트 계약 감사는 취약점을 식별하고 예방하는 데 중요한 단계입니다. 살루스에는 숙련된 스마트 컨트랙트 개발자와 감사 전문가로 구성된 팀이 컨트랙트의 보안을 강화할 수 있도록 도와드립니다. 당사의 전문성을 통해 잠재적인 약점을 정확히 찾아내고 프로젝트의 보안과 신뢰성을 보장할 수 있습니다.
3. 사용자 운영 위험
디파이 영역에서 사용자 운영 위험은 사용자 자신의 운영 오류, 보안 인식 부족, 부주의한 행동으로 인해 디파이 플랫폼을 사용하는 동안 자금 손실이 발생할 위험을 의미합니다.
DeFi 공간에서 사용자 운영 위험이란 사용자의 실수, 보안 인식 부족, 부주의로 인해 DeFi 플랫폼을 사용할 때 자금이 손실될 수 있는 위험을 말합니다. 다음은 몇 가지 일반적인 사용자 운영 위험입니다.
악성 링크 클릭: 사용자가 실수로 악성 링크를 클릭하면 멀웨어나 바이러스가 기기를 감염시킬 수 있으며 공격자는 이러한 멀웨어를 사용해 사용자의 데이터에 접근할 수 있습니다. 공격자는 이 멀웨어를 사용하여 사용자의 민감한 정보에 액세스하거나 지갑을 제어할 수 있습니다.
안전하지 않은 지갑 사용: 사용자가 안전하지 않은 지갑 앱이나 하드웨어 지갑을 사용하는 경우, 공격자는 이러한 취약점을 이용해 사용자의 개인 키 또는 운영 권한을 탈취할 수 있습니다.
개인키 공개: 사용자가 암호화되지 않은 환경에서 개인키를 공개하거나 안전하지 않은 위치에 저장하면 공격자가 사용자의 개인키에 쉽게 접근하여 자금을 통제할 수 있습니다.
무분별한 거래 작업: 사용자가 거래의 세부 사항(예: 수신 주소, 거래 수량 등)을 다시 확인하지 않고 거래를 수행하면 잘못된 주소로 자금이 전송되거나 잘못된 수량이 전송될 수 있습니다.
사용자 작업의 위험을 최소화하기 위한 몇 가지 제안 사항은 다음과 같습니다.
올리기 보안 인식: 일반적인 피싱, 멀웨어 및 사기를 이해하고 이를 인식하고 피하는 방법을 배웁니다. 경각심을 갖고 디파이 관련 링크와 앱을 다시 확인하세요.
보안 지갑 사용: 보안 감사를 받고 평판이 좋은 지갑 앱이나 하드웨어 지갑을 사용하세요. 지갑 앱과 펌웨어가 최신 상태인지 확인하고 보안 모범 사례를 따르세요.
개인키 백업 및 보호: 개인키는 안전한 곳에 보관하고 강력한 비밀번호로 암호화하세요. 개인 키를 정기적으로 백업하고 오프라인의 안전한 장소에 보관하여 우발적인 데이터 손실을 방지하세요.
거래 내역을 주의 깊게 확인하세요: 거래를 실행하기 전에 거래 내역을 다시 한 번 확인하여 목적지 주소, 거래 수량 등이 정확한지 확인하세요. 다시 한 번 확인하면 부주의로 인한 자금 손실을 방지할 수 있습니다.
4. 요약
각 공격과 취약점에 대한 해결책은 단순한 예시일 뿐이라는 점에 유의하시기 바랍니다. 그리고 취약점은 단순한 예시일 뿐이며 해당 공격을 완전히 방지하거나 해당 취약점을 수정할 수는 없습니다. 스마트 컨트랙트 감사에 관심이 있으시다면 문의해 주시면 계약의 안전과 보안을 보장하기 위해 전문적인 감사 서비스를 제공해 드리겠습니다. 저희는 회원님의 스마트 컨트랙트가 안전한 환경에서 운영될 수 있도록 양질의 서비스와 종합적인 기술 지원을 제공하기 위해 최선을 다하고 있습니다.