MetaMask Snaps 보안 환경 탐색

이 블로그는 MetaMask Snaps의 신뢰 모델을 탐구하며, web3 생태계 개발자를 위한 일반적인 보안 문제와 모범 사례를 자세히 설명합니다.

5분 읽기
MetaMask Snaps 보안 환경 탐색

MetaMask Snaps는 사용자가 MetaMask의 기능을 안전하게 확장할 수 있도록 지원하는 오픈소스 시스템으로, 새로운 지갑 경험을 제공합니다. 핵심적으로 Snap은 격리된 환경에서 MetaMask 내부에서 실행되는 JavaScript 프로그램입니다.

이 블로그에서는 MetaMask Snaps의 보안 환경을 살펴보겠습니다. Consensys Diligence 소속 블록체인 보안 감사자로서 저희는 스마트 컨트랙트 보안을 전문으로 합니다. Consensys Diligence는 web3 전반의 프로젝트가 안전한 dapp을 구축할 수 있도록 포괄적인 스마트 컨트랙트 감사 서비스를 제공하는 블록체인 보안 기업입니다.

MetaMask Snap 신뢰 모델 이해하기

모든 Snaps 개발자는 MetaMask Snaps에 내재된 신뢰 모델을 이해해야 합니다. 이 신뢰 모델은 다양한 참여자 간의 신뢰 경계를 명확히 정의합니다. 핵심 메시지는 최종 사용자는 MetaMask를 신뢰하지만 dapp은 신뢰하지 않는다는 것입니다.

아래 다이어그램에 신뢰 모델을 공식화하여 요약했습니다. 이 다이어그램은 개발자가 Snaps를 개발할 때 염두에 두어야 할 다양한 신뢰 경계를 보여줍니다:

web3 dapp, 사용자, MetaMask 간의 세 가지 주요 신뢰 경계

첫째, 사용자와 dapp 사이에 신뢰 경계가 존재합니다. 사용자는 dapp을 절대 신뢰하지 않습니다. 실제로 dapp은 악의적이거나 침해될 수 있습니다. dapp은 사용자가 특정 페이로드에 서명하고 있다고 믿게 만들지만, 실제로는 다른 내용에 서명하게 만들 수 있습니다.

둘째, MetaMask와 그 확장 프로그램 주변에 신뢰 경계가 있습니다. 사용자는 dapp을 신뢰하지 않지만 MetaMask는 신뢰합니다. MetaMask는 사용자에게 있어 진실의 원천입니다. 핵심 모듈이든 Snaps를 통해서든, MetaMask 내에서 표시되고 서명된 페이로드가 중요합니다.

셋째, MetaMask 핵심 모듈과 Snap 사이에도 신뢰 경계가 있습니다. Snaps 개발자는 Snaps API를 통해 MetaMask의 핵심 모듈과 상호작용할 수 있습니다. 이 API는 권한 시스템을 구현하여 개발자가 제한된 API 기능에 접근하기 전에 권한을 요청해야 합니다. 그러나 적절한 권한이 부여되면 Snaps는 MetaMask 루트 엔트로피 접근, 데이터 서명, 외부 API와의 통신 등 중요한 작업을 수행할 수 있습니다.

본질적으로 MetaMask 생태계에서 최종 사용자를 위한 핵심 원칙은 단순하면서도 심오합니다: 최종 사용자는 Trust Module이라고 알려진 MetaMask 및 MetaMask Snap 컨텍스트 내에서 발생하는 정보와 상호작용만 신뢰하면 됩니다.

MetaMask Snaps의 일반적인 문제 분석

MetaMask 신뢰 모델은 체계적인 감사 접근 방식을 가능하게 하고 감사자가 보안 문제를 식별하는 데 도움을 줍니다. Snaps 감사 과정에서 다양한 문제 카테고리를 확인했습니다. 저희는 다른 잠재적 카테고리에 대해서도 궁금했습니다. 이에 9개 감사 기업이 감사한 40개 Snaps에 대한 포괄적인 분석을 수행했습니다. 분류 체계를 만들고 이에 따라 문제를 분류했습니다. 아래에서 몇 가지 흥미로운 카테고리와 예시를 소개합니다. 이 목록은 완전하지 않습니다.

사용자 입력 유효성 검사:

  1. 마크다운 및 제어 문자 삽입: 사용자 입력의 마크다운이나 제어 문자를 통해 원치 않는 코드나 명령이 삽입될 위험이 있습니다.

  2. 사용자 입력 정제 및 유효성 검사:- 타입 확인/타입 혼동 및 파싱 문제

  • 잘못된 RPC 매개변수를 거부하지 않는 API: 잘못된 체인 ID, 주소 체크섬, 수수료 구조 등 유효하지 않은 매개변수를 API가 거부하지 못할 때 발생하는 문제입니다.

  • 부적절한 URI 유효성 검사: URI 유효성 검사 시 느슨한 정규식 표현을 사용할 때 발생할 수 있는 문제입니다.

사용자 동의 및 사용자 인터페이스 문제:

  1. MetaMask의 확립된 UX 패턴 위반: 애플리케이션이 MetaMask의 확립된 사용자 경험 패턴에서 벗어날 때 발생하는 문제입니다.- 계정 접근 시 사용자에게 확인 요청 미실시: MetaMask는 항상 dapp에 계정을 연결하기 전에 사용자에게 확인을 요청합니다. Snaps 개발자도 동일한 패턴을 따라야 합니다.

  • 계정 열거: 적절한 동의 없이 애플리케이션이 사용자 계정을 열거하거나 나열할 수 있는 개인정보 보호 문제입니다.

  1. 사용자 동의 미요청:- 페이로드 서명 시: 명시적인 사용자 승인 없이 애플리케이션이 서명 관련 작업을 수행하는 경우입니다.

  • 비밀번호 표시 토글 없이 개인 키 표시: 개인 키가 면책 조항 텍스트와 함께 클릭하여 공개하는 컴포넌트를 사용하지 않고 표시됩니다. 예를 들어 사용자가 공공장소에 있을 경우 문제가 될 수 있습니다.

  1. 불투명한 snap 다이얼로그: 투명성이나 명확성이 부족한 다이얼로그입니다.- 정보가 누락된 트랜잭션 서명 다이얼로그: 트랜잭션 서명 다이얼로그에서 필수 정보가 생략되거나 사용자에게 표시되는 정보가 사람이 읽을 수 없는 형태인 경우입니다.

  • 수수료 반올림 부정확성 문제: 수수료 계산 및 표시의 부정확성 또는 정밀도 부족과 관련된 문제입니다.

  • 출처 표시: Snaps가 작업의 출처를 표시하지 않습니다. 이로 인해 사용자가 실제로는 다른 dapp에서 시작된 작업을 특정 dapp에서 시작된 것으로 오해할 수 있습니다.

의존성 문제:

  1. 취약하거나 신뢰할 수 없는 의존성.

  2. 공급망 공격: 직접 또는 간접 공격 벡터를 통해 의존성이 침해될 수 있습니다.

  3. 오래된 의존성: 오래된 의존성에 의존하면 해당 의존성에 취약점이 포함될 수 있어 보안에 악영향을 미칠 수 있습니다.

권한 및 인가 문제:

  1. 불필요한 권한: 너무 많은 권한을 부여하면 보안이 약화됩니다.

  2. 저수준 권한 접근: 예를 들어 이더리움을 위한 MetaMask 루트 키 엔트로피를 부적절하게 관리하는 경우입니다.

  3. 암호화 자료 유출:- 개인 키에 대한 dapp 요청: 개인 키는 절대 MetaMask 밖으로 나가서는 안 됩니다!

  • 계정 관리: snap은 최초 연결 시 계정을 연결하기 전에 사용자에게 확인을 요청해야 합니다.

현재 분석 결과를 정제하고 새로운 인사이트를 발굴하고 있습니다. 곧 더 많은 내용을 공유할 예정입니다. 기대해 주세요 :)

Snap 개발자를 위한 핵심 사항

여러분은 신뢰 모듈을 개발하고 있다는 점을 명심하세요! 사용자는 MetaMask를 신뢰하지만 dapp은 신뢰하지 않습니다. 사용자는 모든 작업을 확인해야 하며, 정보에 입각한 결정을 내릴 수 있는 모든 정보가 제공되어야 합니다. 키는 절대 MetaMask 밖으로 나가지 않습니다. 따라서 Snaps 개발자로서 다음을 실천할 수 있습니다:

  1. 최소 권한 요청: Snaps는 공격 표면을 최소화하기 위해 작동에 필요한 특정 기능이나 데이터에 대한 접근만 요청해야 합니다.

  2. 오염된 입력 유효성 검사 및 정제: 삽입 공격이나 신뢰할 수 없는 코드 실행을 방지하세요. Snap이 사용자 지갑의 기능을 확장할 수 있는 만큼, 모든 입력이 안전하고 취약점이 없도록 보장하는 것은 지갑의 무결성과 사용자 자산을 보호하는 데 필수적입니다.

  3. 공급망 관리: 취약점을 방지하기 위해 의존성을 신중하게 선택하고 업데이트하세요.

개발 과정에서 이러한 원칙과 기저에 있는 일반적인 문제들을 염두에 두면 다음 10억 명의 사용자를 위한 Snaps의 미래가 훨씬 더 안전해집니다.

Consensys Diligence는 블록체인 생태계 전반의 다양한 프로젝트가 프로토콜을 출시 준비 상태로 만들고 사용자를 보호하도록 구축하는 데 도움을 주었습니다. Consensys Diligence는 맞춤형 감사를 통해 이러한 취약점과 그 이상을 여러분의 Snap에서 확인해 드릴 수 있습니다. 지금 문의하고 견적을 받아보세요!

Martin Ortner (tintinweb)

Valentin Quelquejay

Martin과 Valentin은 Consensys Diligence의 보안 전문가로, Snap 보안 연구의 최전선에서 플랫폼 보안 강화를 위해 열심히 활동하고 있습니다.

AI가 번역했습니다. 오류가 있을 수 있습니다. 항상 정보를 확인하시기 바랍니다.

번역 평가하기