QR 코드를 스캔하여 다운로드하세요.
BTC $76,792.49 -2.03%
ETH $2,287.77 -3.56%
BNB $622.94 -2.03%
XRP $1.39 -2.91%
SOL $84.27 -3.04%
TRX $0.3257 +0.53%
DOGE $0.0978 -1.51%
ADA $0.2452 -3.13%
BCH $448.50 -1.19%
LINK $9.23 -3.05%
HYPE $41.51 -0.41%
AAVE $95.95 -1.32%
SUI $0.9236 -2.67%
XLM $0.1646 -3.94%
ZEC $354.09 -2.18%
BTC $76,792.49 -2.03%
ETH $2,287.77 -3.56%
BNB $622.94 -2.03%
XRP $1.39 -2.91%
SOL $84.27 -3.04%
TRX $0.3257 +0.53%
DOGE $0.0978 -1.51%
ADA $0.2452 -3.13%
BCH $448.50 -1.19%
LINK $9.23 -3.05%
HYPE $41.51 -0.41%
AAVE $95.95 -1.32%
SUI $0.9236 -2.67%
XLM $0.1646 -3.94%
ZEC $354.09 -2.18%

Cobo 보안 팀: 블록체인 안전 거래 가이드

Summary: 최근 Restaking, BTC L2 등 새로운 애플리케이션 핫스팟이 나타나기 시작했으며, 체인 상 거래는 점차 Web3 사용자 일상에서 필수적인 부분이 되고 있습니다. 점점 더 많은 사용자 자금이 체인으로 이동하고 있습니다.
CoboGlobal
2024-03-21 18:45:23
수집
최근 Restaking, BTC L2 등 새로운 애플리케이션 핫스팟이 나타나기 시작했으며, 체인 상 거래는 점차 Web3 사용자 일상에서 필수적인 부분이 되고 있습니다. 점점 더 많은 사용자 자금이 체인으로 이동하고 있습니다.

저자: Cobo 보안 팀

서문

비트코인 ETF의 통과로 블록체인 시장이 다시 활기를 띠기 시작했습니다. 암호화폐 가격의 회복은 산업이 과거의 번영을 점차 회복하게 만들었습니다. 그와 동시에 해커 활동도 활발해지기 시작했습니다. Cobo 보안 팀은 최근 한두 달 동안 피싱 사건 발생 빈도가 증가하고 있음을 관찰했습니다.

최근 Restaking, BTC L2 등 새로운 애플리케이션 핫스팟이 등장하면서, 온체인 거래는 점차 Web3 사용자 일상에서 필수불가결한 부분이 되고 있으며, 점점 더 많은 사용자 자금이 온체인으로 이동하고 있습니다.

거래소와 같은 중앙화 애플리케이션과는 달리, 온체인 애플리케이션의 계좌 보안은 사용자가 스스로 보장해야 합니다. 안전하게 블록체인 거래를 수행하는 것은 Web3 원주민의 가장 기본적인 능력입니다. 많은 기본 인프라(예: 브라우저 플러그인 지갑, 심지어 브라우저 자체)에서 피싱에 대한 일정한 위험 경고를 제공하지만, 사용자들이 안전하지 않은 거래로 인해 자산 손실을 입는 사건은 여전히 발생하고 있습니다(예: 개인 키 유출, 서명 피싱 등).

Cobo 보안 팀은 온체인 거래 과정에서 자주 발생하는 위험 요소를 정리하여 거래 안전 실행 지침을 작성하였으며, 이는 사용자가 거래 과정에서 위험을 회피하고 자금 안전을 보장하며 피싱 공격을 방지하는 데 목적이 있습니다.

소개에 앞서, Cobo 보안 팀은 안전 거래의 핵심 지침을 요약하였습니다:

1. 맹목적인 서명을 거부하고, 이해하지 못하는 거래나 메시지는 서명하지 마십시오.

2. 귀찮더라도 반복적으로 검증하십시오.

안전 거래를 수행하는 방법

완전한 DApp 거래 프로세스는 여러 단계로 구성됩니다: 지갑 설치, DApp 접근, 지갑 연결, 메시지 서명, 거래 서명, 거래 후 처리. 각 단계마다 일정한 보안 위험이 존재하며, 아래에서 실제 작업 중 주의 사항을 순차적으로 소개하겠습니다.

참고: 본 문서는 이더리움 및 각 EVM 호환 체인에서의 안전한 상호작용 프로세스를 주로 다루며, 다른 비 EVM 체인에서 사용하는 도구와 구체적인 기술 세부 사항은 다를 수 있습니다.

지갑 설치

현재 DApp의 주류 사용 방식은 브라우저 플러그인 지갑을 통해 상호작용하는 것입니다. EVM 체인에서 사용되는 주류 지갑으로는 Metamask와 Rabby 등이 있습니다.

Cobo 보안 팀은 심층 경험을 바탕으로 위험 경고 관점에서 Rabby 플러그인 지갑을 주요 온체인 상호작용 지갑으로 추천합니다. 그 이유는 Metamask 지갑에 비해 Rabby 지갑이 거래 데이터 분석, 거래 시뮬레이션 실행, 거래 위험 경고, 권한 조회 및 역사적 서명 데이터 조회 등의 기능을 제공하여 피싱 방지에 있어 더 큰 장점을 가지고 있기 때문입니다.

Chrome 플러그인 지갑을 설치할 때는 Chrome 웹 스토어에서 다운로드하여 설치해야 하며, 제3자 웹사이트에서 지갑을 설치하지 않도록 하여 백도어가 있는 지갑 소프트웨어 설치를 피해야 합니다.

조건이 허락하는 사용자라면 하드웨어 지갑을 함께 사용하는 것을 권장하며, 개인 키 보관에서 전체적인 보안성을 높일 수 있습니다.

DApp 접근

웹 피싱은 Web3 공격에서 흔한 공격 수법으로, 전형적인 사례는 에어드랍 명목으로 사용자를 유도하여 피싱 DApp 애플리케이션에 접근하게 하고, 사용자가 지갑을 연결한 후 토큰 권한 부여, 송금 거래 또는 토큰 권한 서명을 유도하여 사용자의 자산이 손실되는 경우입니다.

따라서 DApp에 접근할 때 사용자는 경계를 유지하고 웹 피싱의 함정에 빠지지 않도록 해야 합니다.

DApp에 접근하기 전에 DApp 웹사이트의 정확성을 확인해야 합니다. 권장 사항은 다음과 같습니다:

  1. Google에서 검색 결과 첫 번째 링크를 직접 클릭하여 접근하지 않도록 하십시오. 피싱 공격자는 광고를 구매하여 자신의 피싱 웹사이트를 검색 결과 상단에 배치할 수 있으므로, 첫 번째 링크가 반드시 공식 웹사이트일 필요는 없습니다.

  2. x.com 및 각종 소셜 미디어에서 다른 사용자의 댓글, 메시지에 게시된 링크를 직접 클릭하지 마십시오. 이러한 링크는 피싱 링크일 가능성이 높습니다.

  3. DApp 웹사이트의 정확성을 반복적으로 확인한 후 접근하십시오. DefiLlama와 같은 DApp 시장, 프로젝트 공식 X 계정, Google 검색 결과 등을 통해 여러 번 교차 검증하십시오.

  4. 안전한 웹사이트는 브라우저 즐겨찾기에 추가하여 이후에는 즐겨찾기에서 직접 접근하십시오.

DApp 웹페이지를 이미 열어본 후에도 주소창에 대한 안전 점검이 필요합니다:

  1. 도메인 및 URL을 확인하십시오. 일반적으로 DApp은 비교적 간단한 도메인과 URL을 사용합니다. 예: https://app.uniswap.org/; 만약 매우 긴 도메인(예: https://zk-polyhedra.network-8jb.xyz/)이나 유명 웹사이트 이름과 유사한 도메인(예: https://pufffer.fi, f가 하나 더 있음)이라면, 로그인하는 피싱 웹사이트일 가능성이 높으므로 즉시 종료해야 합니다. 도메인을 인식할 때 1il, oO0 등과 같은 유사한 문자의 경우에도 특별히 주의해야 합니다.

  2. 브라우저의 https 링크 상태를 확인하십시오. 현재 주류 DApp는 모두 https 링크를 사용하며, 브라우저는 🔒 아이콘을 표시해야 합니다. 만약 https 링크가 아니거나 브라우저가 인증서 이상을 경고하는 경우, 접근한 웹사이트가 공식 웹사이트가 아닐 수 있거나 해킹 공격을 당했을 수 있으므로 즉시 접근을 중단해야 합니다.

현재 시장의 주류 브라우저 플러그인 지갑은 이미 일정한 위험 경고 기능을 통합하고 있으며, Metamask/Phantom 등은 블랙리스트에 있는 위험 웹사이트에 접근할 때 강력한 보안 경고를 표시할 수 있습니다(아래 그림 참조).

이미지 지갑 연결

DApp에 들어가면 자동으로 또는 사용자가 Connect를 클릭한 후 지갑 연결 작업이 시작될 수 있습니다. 플러그인 지갑은 현재 DApp에 대해 몇 가지 검사 및 정보 표시를 수행합니다.

아래는 Rabby 지갑이 제공하는 웹 페이지 검사 정보로, DApp의 진위를 판단하는 데 도움이 될 수 있습니다.

이미지

지갑을 연결한 후, 사용자가 다른 작업을 하지 않는 경우 DApp은 일반적으로 플러그인 지갑을 자동으로 호출하지 않습니다. 만약 웹사이트가 로그인 후 DApp에서 자주 지갑을 호출하여 서명 메시지, 거래 서명을 요구하거나, 서명을 거부한 후에도 계속해서 서명을 요청하는 경우, 이는 피싱 웹사이트일 가능성이 높으므로 주의해야 합니다.

메시지 서명

극단적인 경우, 예를 들어 공격자가 프로토콜의 공식 웹사이트를 공격하거나 프론트엔드를 해킹하여 페이지 내용을 변경한 경우, 일반 사용자는 이러한 상황에서 웹사이트의 안전성을 식별하기 어렵습니다.

이때 플러그인 지갑의 서명은 사용자가 자신의 자산을 보호하는 최종 방어선입니다. 악의적인 서명을 거부하기만 하면 자산 손실을 방지할 수 있습니다. 사용자는 어떤 메시지와 거래에 서명할 때도 서명 내용을 면밀히 검토하고 맹목적인 서명을 거부해야 합니다.

기술적으로 현재 이더리움에서 흔히 사용되는 서명 유형은 세 가지입니다:

  • 해시 서명 eth_sign: 특정 데이터의 원래 해시를 서명합니다. 해시의 원본 데이터는 메시지 또는 이더리움 거래일 수 있습니다.

  • 메시지 서명 personal_sign: 데이터 평문에 대해 서명하며, 사용자가 로그인 확인 또는 허가 프로토콜 확인 시 가장 흔하게 사용됩니다.

  • 구조화된 데이터 서명 eth_signTypedData (EIP-712): DeFi 프로토콜에서 사용되는 데이터 객체에 대한 서명으로, ERC20 Permit 권한 서명, NFT 매물 서명 등이 일반적입니다.

메시지 서명의 위험 판단에 대해 사용자는 다음 지침을 따를 수 있습니다:

  1. 자연어 서명은 일반적으로 허용할 수 있습니다. 이 서명은 보통 personal_sign으로, 로그인 확인 또는 제품 고지 확인에 사용되며, 긴 자연어 설명(숫자, 16진수 등 형식이 아님)을 포함합니다. 이러한 메시지는 자연어를 포함하고 문자열이 복잡하여 스마트 계약 처리에 어려움이 있으므로 일반적으로 온체인 인증에 사용되지 않으며, 단지 웹사이트에서 주소의 신원을 확인하는 데 사용됩니다. 따라서 상대적으로 위험이 낮습니다.

  2. 16진수 원시 해시를 직접 서명하는 것은 금지해야 합니다. 이 서명은 일반적으로 ethsign 서명으로, 가장 위험한 서명입니다. 사용자는 해시의 원본 데이터 내용이 무엇인지 판단할 수 없기 때문입니다. 따라서 대부분의 지갑은 원시 해시(16진수 데이터) 서명 기능을 비활성화했습니다. Metamask 지갑에서는 설정 -> 고급 -> Ethsign 요청 탭에서 해당 구성이 꺼져 있는지 확인할 수 있습니다. Rabby 지갑은 관련 구성이 기본적으로 비활성화되어 있어 추가 설정이 필요 없습니다.

  3. 구조화된 데이터 서명은 서명 내용을 면밀히 검토해야 합니다. 예를 들어 ERC20 Permit 권한 서명에서는 spender 주소가 예상과 일치하는지 확인해야 하며, EOA 주소인 경우 피싱 서명을 클릭했을 가능성이 높으므로 즉시 거부해야 합니다.

메시지 서명에 대해 추가로 주의해야 할 점은, 브라우저 플러그인 지갑에서 ethsign 작업이 기본적으로 금지되어 있지만, 지갑은 여전히 personalsign을 통해 해시 유형의 데이터에 서명할 수 있다는 것입니다. 이러한 서명은 permit 권한 부여 또는 거래를 시작하지 않습니다. 그러나 일부 프로토콜(예: 일부 AA 지갑)은 여전히 personal_sign 서명을 사용하여 인증할 수 있습니다. 손실을 피하기 위해 원칙적으로 16진수 데이터에 서명하지 않는 것이 좋습니다. 이러한 서명의 효과는 다음과 같습니다:

이미지 거래 서명

서명 거래는 맹목적인 서명을 하지 않는 원칙을 따라야 합니다. 현재 많은 플러그인 지갑은 서명할 메시지를 디코딩하고 관련 내용을 표시합니다. 아래는 Rabby 지갑이 DEX 거래를 분석한 예시입니다:

이미지

사용자는 거래의 목표 주소에 대한 몇 가지 관련 정보를 확인할 수 있습니다. 예: EOA 주소인지, 주소 잔액, 계약 배포 시간 등. 사용자는 이러한 정보를 바탕으로 서명할 거래의 위험을 판단할 수 있습니다. 예를 들어 상호작용하는 주소가 EOA 주소이거나 상호작용하는 계약의 배포 시간이 7일 미만인 경우, 해당 작업은 상당한 위험이 있다고 판단할 수 있으며, 충분히 조사한 후에야 작업을 진행해야 합니다.

오픈 소스 프로토콜의 경우, 주류 브라우저 플러그인 지갑은 거래 데이터 분석을 지원하며, ABI 디코딩된 거래 내용을 확인함으로써 현재 어떤 작업을 수행하고 있는지 더 명확하게 이해할 수 있습니다. 계약 호출의 함수 이름은 그 기능에 대한 참고를 제공할 수 있습니다: 예를 들어 approve, swap, transfer, deposit 및 withdraw 등이 있습니다.

Rabby 및 imToken 지갑은 시뮬레이션 실행 기능을 통합하여, 사용자가 거래 확인 전에 거래 실행 결과를 직접 볼 수 있습니다. 거래 시뮬레이션 실행을 통해 사용자는 현재 거래가 초래할 다양한 자금 이동 상황을 확인할 수 있습니다. 사용자는 이를 면밀히 검토하고 예상과 일치하지 않는 실행 결과에 대해서는 서명을 거부해야 합니다.

일정한 기술적 지식을 가진 사용자는 자동화 도구가 거래를 원활하게 분석하지 못하는 경우, 다음과 같은 일반적인 수동 검사 방법을 사용할 수 있습니다:

  1. 상호작용 목표 계약 주소를 블록체인 탐색기(예: etherscan)에 복사하여 검사합니다. 검사 내용은 주로 계약이 오픈 소스인지, 최근에 대량 거래가 있었는지, Etherscan이 해당 주소에 공식 태그 또는 악성 태그를 부여했는지 여부입니다.

  2. 플러그인 지갑이 인식하지 못하는 거래가 발생한 경우, 원시 거래 데이터(raw_data, 16진수 데이터로 표시)에서 처음 8자리 숫자를 복사하여 https://openchain.xyz/signatures에서 조회하여 원래 함수 이름을 얻어 거래의 행동을 대략적으로 파악할 수 있습니다.

  3. Phalcon, Tenderly 및 Dedaub와 같은 거래 시뮬레이션 도구를 사용하여 시뮬레이션 실행을 통해 거래의 구체적인 실행 세부 사항을 확인합니다.

거래 후 처리

피싱 웹페이지와 악의적인 서명을 피했다고 해서 모든 것이 끝난 것은 아닙니다. 거래 후에도 여전히 위험 관리가 필요합니다.

거래 후에는 즉시 거래의 온체인 상태를 확인하고 서명 시 예상한 상태와 일치하는지 확인해야 합니다. 이상이 발견되면 즉시 자산 이동, 권한 해제 등의 손실 방지 작업을 수행해야 합니다.

ERC20 승인 관리도 매우 중요합니다. 일부 사례에서 사용자가 특정 계약에 대해 토큰 권한을 부여한 후, 수년 후 해당 계약이 공격을 받았고, 공격자는 공격받은 계약의 토큰 권한 한도를 이용하여 사용자의 자금을 탈취했습니다.

이러한 상황을 피하기 위해 Cobo 보안 팀은 사용자가 위험 방지를 위해 다음 기준을 따르도록 권장합니다:

  1. 권한 최소화. 토큰 권한을 부여할 때는 거래의 필요에 따라 해당 토큰 수량을 제한하여 권한을 부여해야 합니다. 예를 들어, 특정 거래에서 100 USDT의 권한을 부여해야 한다면, 이번 권한 부여 수량은 100 USDT로 제한해야 하며, 기본적으로 무한 권한을 사용하지 않아야 합니다.

  2. 필요하지 않은 토큰 권한을 즉시 철회합니다. Rabby 지갑의 Approval 기능을 사용하거나 revoke.cash에 로그인하여 해당 주소의 권한 상태를 조회하고, 오랜 시간 동안 상호작용이 없었던 프로토콜의 권한을 철회하여 프로토콜의 후속 취약점으로 인해 사용자의 권한 한도가 악용되는 것을 방지합니다.

기타 팁

위에서 언급한 거래 프로세스의 위험 외에도, 특정 도구에 통합된 기능을 합리적으로 활용하면 일부 위험을 회피할 수 있습니다.

  1. 일부 지갑은 내장된 지갑 가져오기 기능(예: Rabby)을 제공합니다. 다른 모바일 지갑의 주소를 가져와 거래 시 강제적인 이중 확인(지갑 호출, QR 코드 스캔 및 비밀번호 입력 확인)을 통해 피싱 위험을 줄일 수 있습니다. 동시에 모바일 지갑의 거래 안전 검사(화이트리스트, 시뮬레이션 실행 및 피싱 경고 등)를 누릴 수 있습니다.

  2. 일부 지갑은 가져올 수 있는 관찰자 지갑(예: Rabby, OneKey, TokenPocket, imToken 등)을 지원하며, 관찰자 지갑을 통해 낯선 웹사이트에 접근할 수 있습니다. 이 경우에도 정상적으로 메시지 서명 또는 거래 페이지를 호출할 수 있으며, 이때 서명할 내용을 면밀히 검토할 수 있습니다. 또한 개인 키가 없기 때문에 잘못된 조작으로 인한 확인 상황에 대해 걱정할 필요가 없습니다.

  3. Rabby 지갑의 Approvals 기능을 통해 주소의 권한 상태를 조회하고, 고위험 권한을 즉시 철회합니다. 팁: Rabby는 이 기능에서 여러 차원(역사적 권한 링크 총 금액/24시간 내 권한 취소 수/권한 부여 시간/권한 자산 수량)을 사용하여 권한 위험을 평가하여 사용자가 권한 위험을 인식하는 데 더 효과적으로 도와줍니다.

  4. 잘못된 조작으로 서명한 후, Rabby 지갑의 Signature Record 기능을 통해 자신이 서명한 거래 및 텍스트 데이터를 즉시 확인하고 권한 위험을 점검합니다.

위험 인식을 갖추고 충분한 위험 방지를 한 상태에서도, 효과적인 자금 분리를 수행하여 극단적인 상황에서 자금 손실 정도를 줄여야 합니다. Cobo 보안 팀은 다음과 같은 방법으로 자금을 보관할 것을 추천합니다:

  1. Gnosis Safe 다중 서명 지갑 또는 콜드 지갑을 사용하여 대규모 자금을 보관하십시오;

  2. 브라우저 지갑에서 생성된 주소 또는 다른 EOA 지갑을 사용하여 소규모 자금을 사용자와 상호작용하며, 정기적으로 핫 지갑 주소를 변경하십시오.

만약 실수로 피싱 상황이 발생했다면, 즉시 다음 작업을 수행하여 손실을 줄일 수 있습니다:

  1. Revoke.cash를 통해 즉시 권한을 취소하십시오;

  2. 피싱 permit 메시지에 서명했지만 자금이 이동하지 않았다면, 즉시 새로운 메시지에 서명하고 permit 호출을 시작하여 피싱 메시지 nonce를 무효화하십시오;

  3. 필요한 경우 계정 자금을 이동하십시오.

안전하게 에어드랍 받는 방법

에어드랍을 배포하는 것은 현재 프로젝트 측에서 사용자를 유치하기 위한 일반적인 방법이며, 동시에 사용자들이 피싱 공격을 받는 주요 지역입니다. 이를 위해, 위의 안전 거래 지침을 바탕으로 Cobo 보안 팀은 체인 상 에어드랍을 안전하게 수령하기 위한 상호작용 프로세스를 정리하였습니다:

  1. 먼저 Rabby 관찰자 지갑을 사용하여 상호작용 프로세스를 테스트하고, 토큰 권한 부여, 토큰 송금과 같은 거래가 없음을 확인합니다.

  2. 에어드랍 수령 과정에서 Permit 유형의 메시지 서명을 하지 않습니다. Approve 계약 호출을 하지 않습니다.

  3. 가능하면 "소규모 계정"을 사용하여 에어드랍을 수령합니다.

  4. 에어드랍 거래의 시뮬레이션 실행 결과를 확인하여 토큰이 전송되지 않았음을 확인합니다.

플러그인 도구 선택

블록체인 보안 규칙의 내용이 많기 때문에, 매번 상호작용 시 세밀한 검사를 수행하기 어려울 수 있습니다. 그렇다면 위험 판단을 보조할 수 있는 유용한 브라우저 플러그인이 있을까요?

Cobo 보안 팀은 시장에서 비교적 주류인 거래 위험 검사 플러그인을 경험하고, "피싱 웹사이트 차단", "악의적인 권한 주소 검사", "오픈 소스 여부" 세 가지 차원에서 정리한 표를 아래에 제공합니다. 사용자는 자신의 상황에 맞게 선택하여 사용할 수 있습니다:

warnning 위험 경고
app_icon
ChainCatcher Building the Web3 world with innovations.