소프트웨어 지갑의 보안 모델 | 원장

소프트웨어 지갑의 보안 모델 | 원장

소스 노드 : 2671485

소프트웨어 지갑과 하드웨어 지갑이라는 두 가지 일반적인 유형의 지갑을 구분할 수 있습니다. 그들은 동일한 기능을 수행하지만 다른 방식으로 수행합니다. 소프트웨어 지갑은 사용하기 더 쉬운 것으로 간주됩니다. 단일 프로그램으로 트랜잭션을 생성, 검증 및 서명하는 데 충분합니다. 소프트웨어 지갑을 사용하면 소프트웨어에서 거래를 생성하고 하드웨어 장치에서 확인할 필요가 없습니다.

2 주 전, 금지된 이야기 전 세계 수천 명의 사람들에 대한 표적 공격을 공개했습니다. 이 공격은 Android 및 iOS의 취약점을 악용하여 NSO 그룹인 Pegasus에서 개발한 스파이웨어를 설치했습니다. 이 맬웨어는 장치의 전체 활동을 모니터링하고 개인 정보(SMS, WhatsApp 및 Signal 대화, 전화 통화 등)를 빼낼 수 있습니다. 이 문서에서는 이러한 조건에서 그러한 맬웨어가 모든 소프트웨어 지갑의 비밀, 휴대폰 소프트웨어 지갑과 데스크톱 컴퓨터의 보안 관점의 차이점.

이 문서는 그다지 기술적인 내용이 아닙니다. 비교적 단순하게 유지하기 위해 기본 기능만 설명합니다.

비밀 보호

암호화폐 지갑에는 무엇이 저장되나요?

지갑은 실제로 사용자의 암호화폐를 저장하지 않습니다. 암호화폐에 접근하고 이를 사용할 수 있는 비밀, 특히 개인 키만 저장합니다. 이러한 개인 키는 대부분 블록체인에 따라 다른 곡선의 ECC(타원 곡선 암호화) 개인 키입니다. 가장 일반적인 곡선은 secp256k1(Bitcoin, Ethereum…), Ed25519(Monero) 또는 BLS12-381(Ethereum 2)입니다.

이러한 키는 트랜잭션에 서명하고 보다 일반적으로 블록체인 자산과 상호 작용하는 데 사용됩니다.

이러한 키의 저장은 지갑 유형(결정론적 여부)에 따라 다릅니다. HD(Hierarchical Deterministic) 지갑을 사용하면 시드라고 하는 단일 마스터 비밀에서 키 트리를 생성할 수 있습니다(cf BIP44). 이 시드는 종종 사용자가 임의로 생성하거나 선택한 12, 18 또는 24단어의 니모닉 시퀀스에서 파생됩니다(cf.BIP39). 이러한 니모닉을 사용하면 저장할 키 수를 제한할 수 있습니다. 키는 시드에서 언제든지 다시 계산할 수 있습니다. HD 지갑은 이 니모닉 또는 시드만 저장합니다.

비결정적 지갑은 사용할 때마다 새로운 키를 생성하고 모두 저장해야 합니다. 비결정적 지갑은 백업이 호환되지 않기 때문에 다른 지갑으로 쉽게 마이그레이션할 수 없습니다.

지갑의 주요 보안 기능은 이러한 비밀을 적절하게 생성, 저장 및 사용하는 것입니다. 다양한 유형의 위협에 대해 다양한 수준의 보안이 있습니다.

  • "사악한 가정부" 공격에 대한 보호: 지갑에 일시적으로 액세스할 수 있는 공격자는 지갑 내부에 백도어를 추가하여 PIN 또는 비밀번호 보호 비밀을 훔칠 수 없어야 합니다.
  • 안전한 암호화 자료 : 지갑에서 생성된 키와 nonce는 절대 예측할 수 없어야 합니다. 또한 특정 시점에 생성된 비밀(시드 제외)에 대한 지식은 미래에 생성될 비밀을 예측할 수 없습니다.
  • 유휴 보호: 공격자가 소프트웨어 지갑의 영구 데이터를 얻은 경우 키를 추출할 수 없어야 합니다.
  • 비밀 사용 중 보호: 지갑이 잠금 해제되면 공격자나 맬웨어가 키에 액세스할 수 없어야 합니다.
하드웨어 지갑

하드웨어 지갑의 보안 모델은 이러한 보안 위협을 방지하는 것을 목표로 합니다. 하드웨어 지갑은 설계상 맬웨어로부터 보호합니다. 자체적으로 트랜잭션에 서명하는 독립적인 장치입니다. 암호화 자료는 항상 장치 내부에 있으며 통신하는 소프트웨어 응용 프로그램으로 전송되지 않습니다. 통신 인터페이스는 항상 단순하여 공격 표면을 크게 줄입니다. USB, Micro SD 또는 카메라 + 화면(QR 코드를 통해) 또는 Bluetooth 저에너지일 수 있습니다.

또한 하드웨어 지갑은 장치에 직접 화면을 내장하여 사용자가 비밀 키와 상호 작용할 때 수행하려는 작업을 확인할 수 있습니다. 장치에 대한 이러한 수동 검사는 컴퓨터/모바일의 맬웨어에 대한 매우 효율적인 대응책입니다. 컴퓨터/모바일 장치의 맬웨어가 비밀(시드 또는 개인 키)에 액세스하거나 사용자가 거래를 수행할 때 주소 또는 금액을 교환/수정할 수 있는 경우 하드웨어 지갑에서는 불가능합니다.

하드웨어 지갑은 또한 "사악한 가정부" 공격과 물리적 접근 권한이 있는 공격자로부터 보호하도록 설계되었습니다. 하드웨어 지갑에 따라 보안 수준이 다르지만 모든 경우에 이러한 위협으로부터 보호하도록 설계되었습니다. Ledger Nano 위협 모델에 대한 자세한 설명은 찾을 수 있습니다. 여기에서 지금 확인해 보세요..

소프트웨어 지갑

일반 소프트웨어 지갑은 규칙적인 수단으로 비밀을 보호합니다. 실행되는 운영 체제의 보안 메커니즘과 때로는 PIN 또는 비밀번호를 기반으로 한 액세스 제어입니다.

다음에서는 데스크톱(Windows, macOS, Linux) 지갑과 모바일 지갑을 고려합니다. 그들 사이의 주요 차이점은 대부분 운영 체제에서 제공하는 보안 메커니즘에 의존합니다.

컴퓨터의 소프트웨어 지갑

Electrum, Exodus, Atomic 또는 Bitcoin 코어와 같은 여러 인기 있는 지갑은 컴퓨터에서 실행됩니다.

컴퓨터에서 지갑 프로세스를 다른 프로세스와 격리하기 위해 운영 체제에서 제공하는 보안 메커니즘은 제한적입니다. 대부분의 앱은 동일한 사용자가 실행하며 앱은 다른 애플리케이션의 데이터를 읽을 수 있습니다.

이러한 소프트웨어 지갑의 보안은 주로 이를 보호하는 암호의 보안과 OS에서 실행되는 맬웨어가 없다는 사실에 주로 의존합니다(이는 보장하기가 매우 어렵습니다. Pegasus에 관한 최근 뉴스 참조).

대부분의 경우 시드는 비밀번호로 보호되는 암호화된 컨테이너에 저장됩니다. 멀웨어 또는 원격 관리 도구에 대한 직접적인 공격은 이 암호화된 컨테이너를 검색하여 공격자에게 보내는 것입니다. 그런 다음 비밀번호는 무차별 공격을 받거나 다음을 사용하여 얻을 수 있습니다. 키로거.

공격자가 암호화된 컨테이너에만 액세스하는 시나리오에서(공격자가 지갑이 포함된 USB 키를 찾거나 컴퓨터에 맬웨어를 설치하지만 피해자는 자신의 지갑 응용 프로그램을 열지 않음) 공격자는 암호를 무차별 대입해야 합니다.

대부분의 비밀번호는 나쁜. 웹에는 수십억 개의 비밀번호가 유출되었으며 많은 사람들이 여러 서비스에 비밀번호를 재사용하는 경향이 있습니다. 미리 만들어진 도구를 사용하면 다음과 같은 암호 화폐 지갑의 암호를 검색할 수 있습니다. btcrecover or 해시 캣. 암호는 복잡할 수 있지만 각 지갑 뒤에는 실제 돈이 있으므로 공격자는 이러한 암호를 해독하기 위해 리소스를 투자하는 것을 주저하지 않습니다.

비밀번호를 안전하게 유지하기 위한 두 가지 기본 보안 원칙은 비밀번호 관리자를 사용하고 비밀번호를 다른 용도로 절대 재사용하지 않는 것입니다.

소프트웨어 지갑에 대한 가장 우려되는 위협은 자금을 고갈시키기 위해 특별히 개발된 전용 맬웨어 및 도용자입니다. KPOT 또는 일렉트로RAT, 암호를 무차별 대입할 필요조차 없습니다. 암호를 입력할 때 암호를 직접 캡처하고 지갑 구성 데이터를 해독하고 시드를 유출할 수 있습니다.

다음은 Electrum 지갑을 대상으로 하는 이 기사용으로 개발된 장난감 애플리케이션입니다(다른 소프트웨어 지갑일 수도 있음). 피해자가 입력한 사용자 비밀번호를 훔치는 악성코드를 시뮬레이트합니다. 암호는 지갑 데이터를 해독하고 시드를 표시하는 데 사용됩니다.

보시다시피 비밀번호가 복잡하더라도 메모리에서 직접 스니핑하기 때문에 앱에서 비밀번호를 검색할 수 있습니다.

이 예는 최근의 예와 매우 유사합니다. .SCR 악성코드 cryptocurrencies를 훔치는 데 사용되는 캠페인. 범죄자들은 ​​사회 공학 기술을 사용하여 사용자가 악성 화면 보호기를 다운로드하도록 속였습니다. 이 스크린세이버는 실제로 컴퓨터 피해자로부터 지갑 및 암호화폐 거래소 정보를 포함한 정보를 훔치고 있었습니다.

컴퓨터에서 실행되는 소프트웨어 지갑에 대해 결론을 내리려면:

  • 대부분의 경우 컴퓨터에서 실행되는 소프트웨어 지갑은 암호를 사용하여 사용자의 시드를 보호합니다.
  • 이러한 지갑 파일에 대한 액세스 제어는 주로 컴퓨터의 보안에 의존합니다. 실제로 컴퓨터를 악성코드로부터 보호하는 것은 어렵고 암호화폐가 주류가 됨에 따라 지갑에 대한 공격은 점점 더 정교해질 것입니다.
  • 이러한 소프트웨어 지갑을 사용하여 디지털 자산을 보호하는 것은 좋은 생각이 아닙니다. 특수한 맬웨어는 지갑 파일을 가져오고 오프라인에서 암호를 찾거나 키로거를 통해 암호를 얻을 수 있습니다.
스마트폰의 소프트웨어 지갑

Android 및 iOS 스마트폰은 데스크톱 운영 체제에서 널리 사용되지 않는 기본 보안 기능을 제공합니다.

모바일 운영 체제는 앱 및 사용자 데이터 보호를 제공합니다. 특히 앱 샌드박스는 모든 앱에 필수입니다. 예를 들어 Windows에서는 그렇지 않습니다. 기본적으로 모든 응용 프로그램은 사용자 데이터에 액세스할 수 있습니다.

따라서 악성 앱은 다음과 같은 경우를 제외하고 다른 앱에서 데이터를 읽을 수 없습니다.

  • 해당 앱에서 취약점을 찾습니다.
  • 또는 예를 들어 커널 취약점을 악용하여 시스템에 대한 루트 액세스 권한을 얻을 수 있도록 권한을 에스컬레이션합니다.

불행히도 그러한 공격이 존재합니다. 오래된 버전의 Android 및 iOS와 타사 코드의 보안이 약한 구형 또는 저렴한 기기에서는 훨씬 쉽습니다.

최신 OS에서 이러한 공격은 더 어렵지만 원격으로 실행 불가능한 것은 아닙니다. 예를 들어 Ian Beer는 매우 인상적인 제로 클릭 공격 13.5년 2020월 iOS XNUMX에서. Guang Gong이 발표한 익스플로잇 체인 2020년 XNUMX월에 광범위한 Qualcomm 기반 Android 기기를 원격으로 루팅합니다. 그리고 XNUMX주 전에 금지된 이야기 NSO Group은 0-day 취약점을 사용하는 최신 iOS 및 Android 기기를 공격하기 위해 익스플로잇 체인을 사용했다고 발표했습니다.

덜 정교한 공격자는 로컬 취약점을 사용하여 악성 애플리케이션에서 지갑 데이터를 추출할 수 있습니다. 제로디움과 같은 취약점 브로커가 지불합니다. 에 $ 200,000까지 Android 및 iOS에서 루트로 권한 상승을 위해, 그러나 원격 공격의 경우 최대 $1,500,000입니다.

몇 가지 Android/iOS 지갑을 연구했습니다. 보안은 앱 자체뿐만 아니라 기본 OS의 보안 기능에 따라 달라집니다. 물론 운영 체제의 보안이 무너지면 응용 프로그램은 더 이상 안전하지 않습니다.

종자를 보호하는 두 가지 방법이 일반적으로 사용됩니다.

  • 암호 보호 – 지갑 데이터는 사용자가 입력한 비밀번호로 보호됩니다. 디자인은 데스크톱 지갑과 동일합니다. 위에서 설명한 이유로 악성 앱에서 앱 데이터를 검색하는 것이 기술적으로 더 어렵기 때문에 실제로는 컴퓨터에서 데이터를 추출하는 것보다 데이터를 추출하기가 더 어렵습니다. 그러나 실제로는 데이터를 도난당한 후 비밀번호를 검색하는 것이 더 쉽습니다. 휴대폰에 복잡한 비밀번호를 입력하는 것은 번거롭기 때문에 사용자는 더 간단한 비밀번호를 선택하는 경향이 있습니다. 또한 모바일 장치의 키 파생 메커니즘(비밀번호에서 키를 생성하는 데 사용됨)은 일반적으로 성능상의 이유로 더 가볍기 때문에 쉽게 깨기 쉽습니다.
  • 코 이노미 및 Metamask가 이러한 지갑의 예입니다.

다음 비디오에서는 이 기사를 위해 개발된 또 다른 장난감 앱을 보여줍니다. 가짜 비트코인 ​​티커 위젯으로 위장한 악성코드입니다. 맬웨어는 패치되지 않은 장치의 알려진 취약점을 악용하여 장치의 루트 액세스 권한을 얻고 암호화된 시드를 원격 서버로 유출합니다. 그런 다음 서버는 암호를 무차별 대입하여 시드를 해독합니다.

이 방법은 지갑에만 국한되지 않습니다. 암호로 보호되는 모든 지갑에 쉽게 적용할 수 있습니다. 다음은 Coinbase Wallet과 동일한 예입니다.

[포함 된 콘텐츠]

  • Android Keystore(또는 iOS 키체인) 기반 보안 – 이 경우 지갑 데이터는 Android Keystore(iOS 키체인)에 저장된 암호화 키로 암호화됩니다. 이러한 서비스는 처음에 암호화 키를 안전하게 저장하도록 설계되었으며 많은 앱에서 이를 사용하여 모든 민감한 사용자 데이터를 암호화하는 키를 생성합니다. 키 저장소를 사용하는 애플리케이션은 다음 메커니즘을 구현합니다.
    • 앱은 지정된 식별자에 대한 암호화 키를 생성하도록 키 저장소에 요청합니다. Keystore는 키를 생성하고 안전하게 저장합니다.
    • 앱이 blob을 암호화하거나 해독하려는 경우 키 식별자와 함께 blob을 키 저장소로 보냅니다.
    • 마지막으로 키 저장소는 앱이 실제로 이 키를 사용할 수 있는 권한이 있는지 확인하고 다시 앱으로 출력 데이터를 보냅니다.

이 모델을 사용하면 앱이 키의 값을 알 수 없지만 키를 사용할 수 있습니다. 추가 액세스 제어를 키에 연결하는 것도 가능합니다. 예를 들어 키 액세스는 사용자 인증(PIN 또는 잠금 해제 패턴 요청).

이 메커니즘은 암호 기반 보호에 비해 추가 보안을 제공할 수 있습니다. 실제로 최신 전화기에서 키 저장소는 TEE(신뢰할 수 있는 실행 환경) 또는 경우에 따라 보안 요소로 지원됩니다.

즉, 루트 권한을 가진 공격자는 키 저장소에서 암호화 키를 추출할 수 없습니다. 그럼에도 불구하고 그들은 Keystore를 복호화 오라클로 사용할 수 있고 원하는 데이터를 암호화하거나 복호화할 수 있습니다.

Keystore는 암호화뿐 아니라 서명 서비스도 제공합니다. 그렇다면 지갑이 암호화 키를 보호하여 추출하기 어렵게 만들 수 있습니까? 대답은 불행히도 아니오입니다. 소프트웨어 지갑은 키 저장소를 사용하여 거래에 서명하지 않습니다.및 개인 키는 항상 앱에 의해 일반 텍스트로 조작됩니다..

그 이유는 간단합니다. KeyStore 및 KeyChain은 일반 서명 및 암호화 서비스를 제공하지만 암호화폐에 사용되는 암호화를 지원하지 않습니다. 예를 들어, KeyStore는 ECDSA 서명을 구현하지만 FIPS 186-4(P-224, P-256, P-384 및 P-521)에 정의된 NIST 곡선에서만 구현합니다. Bitcoin은 다른 곡선을 사용합니다. secp256k1, 아직 지원되지 않습니다.

요약하면 키스토어와 키체인은 보호하기에 좋은 서비스입니다. 비밀 및 개인 키. 민감한 데이터를 암호화하여 어느 정도의 보안을 제공할 수 있습니다. 일부 취약성 클래스(예: 임의 파일 읽기)는 키 저장소 암호화로 해결됩니다. 그러나 루트 권한 에스컬레이션이 하드웨어 지원 키 저장소에서 키 값을 추출하기에 충분하지 않은 경우 중요한 데이터를 해독하는 데 충분합니다. 앱을 계측할 수 있는 공격자는 앱의 비밀을 검색할 수 있습니다.

모바일 지갑에 대한 결론:

  • iOS/Android에서 제공하는 앱 간의 격리 메커니즘은 컴퓨터에서 실행되는 소프트웨어 지갑에 비해 보안의 기준을 높입니다. 공격자가 앱 데이터에 액세스하려면 먼저 권한 에스컬레이션이 필요합니다. 이것은 오래된 장치에서 가능합니다. 숙련된 공격자(Ian Beer가 혼자서 6개월 만에 해냈지만… Ian Beer입니다)는 최근 패치된 장치에서도 해낼 수 있습니다.
  • 키 보호 서비스(KeyStore, KeyChain)는 미사용 비밀을 보호하기 위해 추가 보안 계층을 추가할 수 있습니다. 그럼에도 불구하고 암호화폐 애플리케이션을 위한 암호화 알고리즘을 지원하지 않기 때문에 여전히 키를 추출할 수 있습니다.
  • 모든 경우에 루트 액세스 권한이 있는 공격자는 유휴 상태의 시드를 사용하거나 사용자 권한을 활용하여 소프트웨어 지갑을 오라클로 사용하여 지갑을 비울 수 있습니다.

다음은 Blockchain.com 지갑을 대상으로 하는 장난감 스파이웨어의 마지막 예입니다(다른 많은 지갑에서도 쉽게 수행할 수 있음). 원격으로 설치되며 지갑을 모니터링합니다. 사용자가 지문을 사용하여 인증하면 암호화 키가 잠금 해제되고 지갑 데이터가 복호화됩니다. 스파이웨어는 이 암호화 키를 검색하기 위해 앱을 계측합니다. 그런 다음 키와 지갑 데이터를 원격 서버로 유출합니다.

[포함 된 콘텐츠]

결론

결론적으로 소프트웨어 지갑은 보안 수준이 다릅니다. 그러나 그들의 위협 모델은 권한 에스컬레이션을 통해 OS에서 실행되는 맬웨어의 경우를 다루지 않습니다. 이것은 의도적으로 설계된 것입니다. 지갑 앱은 실행되는 운영 체제보다 더 안전할 수 없습니다.

  • iOS/Android에서 제공하는 앱 간의 격리 메커니즘은 컴퓨터에서 실행되는 소프트웨어 지갑에 비해 보안의 기준을 높입니다. 공격자가 앱 데이터에 액세스하려면 먼저 권한 에스컬레이션이 필요합니다.
  • 키 보호 서비스(KeyStore, KeyChain)는 미사용 비밀을 보호하기 위해 추가 보안 계층을 추가할 수 있습니다. 그럼에도 불구하고 암호화폐 애플리케이션을 위한 암호화 알고리즘을 지원하지 않기 때문에 앱에서 직접 키를 조작해야 하므로 제한된 보호 기능을 제공합니다.
  • 모든 경우에 루트 액세스 권한이 있는 공격자는 유휴 상태의 시드를 사용하거나 사용자 권한을 활용하여 소프트웨어 지갑을 오라클로 사용하여 지갑을 비울 수 있습니다.

타임 스탬프 :

더보기 원장