Cobo 보안 팀: 상승장 DeFi 상호작용 가이드
저자: Cobo 보안 팀
2019년 DeFi 여름이 시작된 이후, 이더리움을 중심으로 점점 더 많은 창의적인 탈중앙화 금융 프로토콜(DeFi 프로토콜)이 등장하여 체인 상 자산의 가용성을 크게 풍부하게 하였고, 블록체인 사용자가 체인 상 자산을 보다 잘 활용하여 다양한 금융 활동을 수행하고 이를 통해 막대한 수익을 창출할 수 있게 되었습니다. 그러나 점점 더 많은 DeFi 프로토콜이 등장함에 따라 보안 문제도 함께 발생하고 있습니다. 불완전한 통계에 따르면, 2023년 한 해 동안 블록체인 공격으로 인한 자산 손실은 26.1억 달러에 달했습니다. 이는 DeFi 프로토콜에 참여하는 과정에서 수익 기대치를 평가하는 것 외에도 프로토콜의 보안성을 평가하는 것이 간과되어서는 안 된다는 것을 보여줍니다. 그렇지 않으면 사용자에게 큰 손실을 초래할 수 있습니다.
일반적으로 현재 프로토콜 보안 평가의 주류 정의는 코드의 보안성 평가로, 이 정의의 차원은 비교적 단일적입니다. 여기서의 문제는 평가 자체가 프로토콜의 정적 과정에서의 보안성만을 고려하고 있다는 점입니다. 그러나 DeFi 상호작용 과정에서 보안성은 종종 동적이며, 계정 관리, 프로토콜 상호작용 전 준비, 상호작용 완료 후 자산 관리, 데이터 모니터링 및 극단적인 상황에서 자산 손실 후 자구 노력 등 여러 단계를 포함합니다.
DeFi 초보자로서 수익을 창출하는 동시에 자금의 안전을 최대한 보장하려면 어떻게 해야 할까요? Cobo 보안 팀은 DeFi 상호작용에서 흔히 발생하는 보안 위험과 이에 대한 예방 조치를 정리하였으며, 이는 여러분이 상승장 속에서 DeFi 안전한 상호작용에 도움이 되기를 바랍니다.
DeFi 상호작용에서의 흔한 보안 위험과 예방 조치
1. 계정 개인 키 유출
계정 개인 키 유출은 현재 초보 사용자들이 쉽게 당할 수 있는 문제 중 하나입니다. 현재 시장에는 다양한 지갑이 존재하며, 초보 사용자들은 지갑의 보안성을 스스로 판단할 능력이 부족하여 많은 초보 사용자들이 안전하지 않은 지갑을 다운로드하고 이를 사용하여 개인 키를 생성하게 되어, 결국 개인 키가 악의적으로 공격자에게 전송되어 유출되는 경우가 발생합니다. 많은 숙련된 사용자들이 어느 날 자신의 주 계정에서 모든 자산이 이체된 것을 발견하고, 분석해보니 모든 행동이 정상적이었던 경우, 대다수의 경우는 초기 해당 계정이 안전하지 않은 지갑을 사용하여 개인 키를 생성했기 때문에 개인 키가 이미 유출된 것입니다.
또한, 블록체인 에어드랍으로 인한 부의 효과로 인해 많은 초보 사용자들이 소위 에어드랍 웹사이트를 무작정 클릭하게 됩니다. 이러한 에어드랍 웹사이트는 자신을 매우 진지한 프로젝트 웹페이지로 포장하고 사용자에게 많은 미수령 토큰이 존재한다고 알립니다. 이익에 이끌린 많은 초보 사용자들은 웹페이지의 유도에 따라 자신의 계정 개인 키를 입력하게 되어 개인 키가 유출됩니다.
개인 키 유출을 방지하기 위해 사용자는 다음과 같은 사항을 준수해야 합니다:
- 인지도가 높은 블록체인 지갑을 사용하고 해당 공식 웹사이트에서 지갑을 다운로드합니다. 조건이 되는 사용자에게는 하드웨어 지갑 사용을 권장합니다.
- 자신의 개인 키를 절대 평문으로 네트워크 환경에 노출시키지 말고, 어떤 웹페이지에도 개인 키를 임의로 입력하지 않습니다.
2. 서명 피싱 위험
서명 피싱 위험은 개인 키 유출과 마찬가지로 초보 사용자들에게 큰 피해를 주는 문제입니다. 이 공격은 사용자에게 개인 키를 입력하게 하는 대신, 사용자가 거래를 시작하거나 서명하도록 유도하여 사용자 자산에 대한 권한을 획득하는 방식으로, 은밀성이 높고 분석하기 어렵고 감지하기 힘든 특징이 있습니다.
일반적으로 공격자는 사용자를 피싱 웹페이지로 유도하여 에어드랍 수령, 로그인 검증 등의 명목으로 사용자가 서명을 하도록 유도합니다. 이때 사용자의 브라우저 지갑은 사용자가 서명을 완료해야 한다고 알립니다.
피싱 거래의 유형은 여러 가지가 있을 수 있습니다:
직접 이체 유형. 직접 ETH를 이체하거나 ERC20 transfer 호출을 통해 지갑 자산을 공격자 주소로 이동합니다.
Approve 유형. ERC20 Approve 메서드를 호출하여 공격자 지갑에 권한을 부여합니다. 사용자가 서명할 때 자산 이동은 발생하지 않지만, 공격자 지갑은 transferFrom 호출을 통해 사용자 자산을 이동할 수 있습니다.
EIP712 메시지 서명. ERC20 Permit 메서드; Permit2 권한 부여; NFT 걸기 서명 등. 이러한 서명은 일반적으로 지갑에서 Json 데이터 또는 잘 형식화된 트리 구조 데이터로 표시됩니다. 사용자가 서명할 때 거래가 발생하지 않으며 가스 소비도 없습니다. 그러나 서명 결과는 피싱 웹사이트에 기록되며, 공격자는 해당 서명 결과를 사용하여 피해자의 ERC20 또는 NFT 자산을 이동할 수 있습니다.
원시 해시 서명. 서명 데이터가 16진수 해시 데이터로, 서명 데이터 자체로는 구체적인 서명 내용을 추론할 수 없습니다. 해시 뒤에는 위의 1-3가지 유형의 데이터가 있을 수 있습니다. 서명은 자산 손실을 초래할 가능성이 높습니다. 그러나 현재 주류 지갑은 일반적으로 이러한 서명 방식을 금지하거나 명확한 위험 경고를 제공합니다.
최근 몇 가지 사례에서는 일부 피싱 웹사이트가 사용자에게 연속적으로 여러 번 서명을 요구하며, 처음 몇 번은 무해한 정상 서명으로 이루어지고, 그 뒤에 악의적인 서명 내용을 혼합하여 사용자의 조작 습관을 이용해 서명 작업을 완료하도록 유도하는 경우도 발견되었습니다.
피싱으로 인한 자산 손실을 방지하기 위해 핵심은 맹목적인 서명을 거부하는 것입니다. 각 서명에 대해 신중하게 검토하고, 불확실한 내용의 거래는 서명을 거부해야 합니다. 구체적으로 서명 과정에서 다음 사항에 유의할 수 있습니다:
- 상호작용 웹사이트가 DeFi 프로젝트 공식 웹사이트인지 확인하고, 전체 도메인을 검사합니다.
- 계약 호출 방법을 확인하고, transfer, approve 방법에 대해 중점적으로 검사합니다.
- 거래에 포함된 ETH 이체를 확인합니다. 일부 피싱 웹사이트는 안전해 보이는 방법(예: Claim)을 구성하려고 시도하지만, 실제로 호출 시 ETH 이체를 포함하여 ETH와 같은 체인 원주 토큰의 손실을 초래할 수 있습니다.
- 원시 해시 내용을 서명하지 않습니다.
3. 이체 주소 중독
이체 주소 중독은 최근에 비교적 새로운 공격 방식으로, 사용자가 이체(ERC20, native token 등)를 시작할 때 해당 거래의 수신 주소와 유사한 주소를 사용하여 사용자에게 동일한 금액의 거래를 보내거나, 동일한 금액이지만 가짜 토큰에 해당하는 거래를 보내는 방식입니다.
예를 들어:
Alice는 매달 Bob에게 1 ETH를 급여로 이체합니다. Charlie는 이 거래를 모니터링하고 Bob과 유사한 주소(주소 앞 8자리와 뒤 8자리가 동일)로 Alice에게 0.001 ETH를 보냅니다. 이러한 작업 후, 다음 번에 Alice가 Bob에게 이체할 때 Charlie의 주소를 거래의 수신 주소로 사용할 가능성이 있습니다. 이러한 상황이 발생하는 이유는 블록체인 주소의 길이가 길고 규칙이 없기 때문에 사용자가 기억하기 어렵고, 많은 경우 사용자가 편리함을 위해 이전 거래 기록에서 주소를 복사하기 때문입니다. Charlie와 Bob의 주소가 매우 유사하여 Alice가 구별하기 어려워 결국 자산 손실이 발생하게 됩니다.
이체 주소 중독에 당하지 않기 위해 사용자는 다음과 같은 방법으로 예방할 수 있습니다:
- 매 거래마다 이체 주소를 확인하고, 앞뒤 몇 바이트만 비교하는 것이 아니라 전체 내용을 확인합니다.
- 자주 사용하는 주소를 주소 화이트리스트(주소록)에 설정하고 별칭을 부여하여 주소록에 있는 주소만 사용하여 이체합니다.
- 체인 상의 경로(블록체인 탐색기, 지갑 거래 기록 등)에서 복사한 주소를 이체 목표로 사용하지 않습니다.
4. 토큰 과도한 권한 부여
토큰 권한 부여는 DeFi 상호작용의 첫 번째 단계입니다. DeFi 작업을 수행할 때 거래 데이터는 사용자에 의해 구성되지 않고 프로젝트 측 웹페이지를 통해 구성되므로, 일반적으로 사용자가 여러 번 상호작용할 수 있도록 반복적인 권한 부여를 피하기 위해 프로젝트 측 웹페이지는 사용자가 서명하도록 무한 권한 부여 거래를 구성합니다. 이는 사용자의 가스를 절약하기 위한 출발점이지만, 이는 후속 자금 안전에 위험을 초래할 수 있습니다. 후속 프로젝트 코드에 문제가 발생하거나, 비인가 인터페이스 또는 임의 호출 취약점이 발생할 경우, 사용자의 계약에 대한 무한 권한 부여는 공격자에게 이용될 수 있어 사용자의 자산이 이동될 수 있습니다. 이러한 공격 시나리오는 크로스 체인 브릿지와 DEX 프로토콜에서 흔히 발생합니다.
후속 프로젝트가 업그레이드 중 위험한 코드를 도입하거나 프로젝트 코드 자체에 발견되지 않은 취약점이 존재하는 것을 방지하기 위해 사용자는 최소 권한 원칙을 채택하여, 가능하면 이번 거래에서 사용되는 금액만 권한 부여하여 후속 프로젝트의 위험으로 인해 자산 손실을 방지해야 합니다.
5. 안전하지 않은 DeFi 작업
상호작용 전 준비 외에도 상호작용 과정에서도 쉽게 간과할 수 있는 많은 위험이 존재합니다. 이러한 위험은 일반적으로 사용자가 프로젝트 자체에 대한 이해 부족에서 비롯됩니다. 구체적인 예는 다음과 같습니다:
- 체인 상의 교환 프로토콜을 통해 토큰을 교환할 때 슬리피지 설정이 과도하거나 스크립트를 작성하여 swap 시 최소 수령 수량을 설정하지 않아(편리함을 위해 0으로 설정) 거래가 MEV 로봇의 "샌드위치" 공격을 받는 경우.
- 체인 상의 대출 프로토콜을 통해 대출 작업을 수행할 때 포지션 건강도를 적시에 관리하지 않아 큰 변동성 시장에서 포지션이 청산되는 경우.
- 특정 프로젝트와 상호작용할 때 프로젝트 측 증명을 잘 보관하지 않고, Uniswap V3의 NFT 증명을 일반 NFT로 간주하여 OpenSea에서 판매하는 경우.
이러한 위험을 방지하기 위해 사용자는 프로젝트 상호작용을 수행할 때 반드시 해당 프로젝트에 대한 조사를 철저히 하고, 프로젝트 메커니즘과 관련 특성을 명확히 하여 자산 손실을 방지해야 합니다.
DeFi 안전 거래의 새로운 패러다임 -- Cobo Argus
위 글에서는 블록체인에서 DeFi 활동 중 흔히 발생하는 상호작용 위험에 대해 설명하였습니다. 사용자가 우연히 그 중 하나에 걸리면 수년간의 노력이 모두 사라질 수 있으며, 조금만 부주의하면 회복할 수 없는 상황이 발생할 수 있습니다. 그렇다면 안전하고 효과적이며 관리하기 쉬운 리스크 관리 솔루션이 존재할까요? 새로운 선택지로 Cobo Argus가 있습니다.
Cobo Argus는 Cobo 팀이 개발한 Gnosis Safe를 기반으로 구축된 체인 상 리스크 관리 제품입니다. 주요 기능은 다양한 ACL 전략을 구축하여 사용자의 거래를 분석하고, 리스크 관리 규칙에 부합하지 않는 거래를 차단하여 사용자의 자금 안전을 보장하는 것입니다.
Cobo Argus는 DeFi 환경에서의 보안 위험에 어떻게 대응하나요?
1. 하위 다중 서명 지갑, 상위 단일 서명 권한 부여: 개인 키 유출 단일 위험을 피하고 피싱 위험을 완화하며, 동시에 작업 효율성을 보장합니다.
Cobo Argus는 Safe {Wallet} 기반의 다중 서명 지갑으로 구축된 제품으로, 그 기초와 핵심은 다중 서명 계약 지갑입니다. 따라서 Cobo Argus는 자연스럽게 Safe {Wallet} 다중 서명 지갑의 보안성을 계승합니다.
자금을 단일 개인 키 관리에서 여러 개인 키가 공동으로 유지하는 방식으로 전환함으로써 단일 개인 키 유출로 인한 자산 손실/잠금 위험을 차단할 수 있습니다. 다중 서명 지갑은 거래 실행을 위해 여러 서명이 필요하므로, 단일 주소 개인 키의 유출도 전체 자금의 안전성에 영향을 미치지 않습니다. 또한, 잃어버리거나 위험한 단일 서명 주소를 대체하기 위해 다중 서명 거래를 시작할 수 있어 다중 서명 지갑의 안전성을 보장합니다.
또한 단일 서명 주소에서 다중 서명 주소로 전환한 후, 거래 서명 시 각 사용자가 거래에 대해 서명해야 하므로 거래 내용을 교차 감사하는 데 유리하여 피싱 가능성을 크게 줄입니다.
다중 서명은 여러 사람이 검토해야 하므로 작업 효율성에 일정한 영향을 미칩니다. Cobo Argus는 사용자가 유연한 권한 부여 규칙을 구성할 수 있도록 하여, 특정 위험이 낮은 고빈도 작업(예: Farming 시 정기적으로 수익을 청구하는 작업)을 특정 EOA 주소에 권한 부여할 수 있도록 허용합니다. 이 주소는 다중 서명 지갑을 대신하여 작업을 시작할 수 있어 작업 효율성을 높입니다. 동시에 이 주소의 권한이 엄격하게 제한되므로 지갑 전체의 안전성은 크게 영향을 받지 않습니다.
2. 사용자 정의 로봇: 7*24 시간 자동 위험 모니터링 및 대응
Cobo Argus 모니터링 로봇을 구성하여 모니터링할 조건과 트리거 조건에 따라 수행할 작업을 사용자 정의할 수 있습니다.
대출 프로젝트의 레버리지 관리를 예로 들면, 사용자는 Argus 로봇을 구성하여 자신의 건강 지수를 모니터링하고, 포지션이 청산에 가까워지면 로봇이 담보물 보충, 상환 등의 레버리지 감소 작업을 수행할 수 있습니다.
3. 사용자 정의 ACL 전략
사용자 정의 모니터링 로봇 외에도 일정한 개발 능력을 가진 사용자는 사용자 정의 ACL(Access Control List) 계약을 개발하여 보다 유연한 권한 관리를 구현할 수 있습니다. 이는 Cobo Argus의 핵심 기능 중 하나입니다. 아래 몇 가지 예를 통해 이 기능의 매력을 느껴보겠습니다:
주소 중독 공격에 대해, ACL 계약을 작성하여 사용자는 ACL 계약 내에서 자주 사용하는 주소를 화이트리스트로 지정할 수 있으며, 거래 과정에서 ACL 계약은 거래의 수신 주소를 분석하고(ERC20 / native token) 사용자가 설정한 화이트리스트 주소와 비교합니다. 수신 주소가 해당 주소에 없으면 거래는 성공적으로 완료될 수 없습니다.
과도한 권한 부여 문제에 대해, 사용자는 ACL 전략 계약을 작성하여 Approve 거래의 권한 금액을 분석하고, 토큰의 Approve 권한 금액이 사용자가 설정한 값을 초과하지 않도록 제한할 수 있습니다. 또는 사용자 정의 로봇을 구성하여 관련 토큰의 권한을 정기적으로 초기화할 수 있습니다.
안전하지 않은 DeFi 작업, 예를 들어 슬리피지 확인이 없는 swap 거래에 대해, Argus ACL 전략 계약을 작성하여 교환 거래에서 수용 가능한 최소 슬리피지를 설정할 수 있습니다. 설정이 완료되면 ACL 전략 계약은 설정된 슬리피지에 따라 다양한 swap 거래를 분석하고, 교환 슬리피지가 충족되지 않으면 해당 거래를 차단할 수 있습니다.
요약
DeFi 상호작용에는 방지하기 어려운 많은 위험이 존재하며, 본문에서 언급한 내용은 많은 일반적인 상황을 포함하고 있지만 모든 위험 지점을 완전히 포괄할 수는 없습니다. 사용자는 각 거래를 신중하게 처리해야 합니다.
Cobo Argus는 사용자가 흔히 겪는 보안 위험을 방지하기 위한 신뢰할 수 있고 구성하기 쉬운 수단을 제공합니다. ACL을 통해 유연하고 안전한 권한 관리를 수행할 수 있으며, 안전성을 보장하는 동시에 작업 효율성을 높일 수 있습니다. 사용자 정의 로봇은 인력 작업을 줄이고, 실시간 모니터링 기능을 통해 7*24 시간 사용자 자금 안전을 보장할 수 있습니다.
DeFi는 분명 사용자에게 상당한 수익을 가져다줄 수 있지만, 자금 안전이 자산의 안정적인 성장을 위한 핵심입니다. Cobo Argus는 모든 DeFi 농부를 보호하고, 여러분이 상승장에서 더 많은 가치를 창출할 수 있도록 도와줄 것입니다.