O modelu bezpieczeństwa portfeli programowych | Księga główna

O modelu bezpieczeństwa portfeli programowych | Księga główna

Węzeł źródłowy: 2671485

Możemy wyróżnić dwa dominujące typy portfeli: portfele programowe i sprzętowe. Spełniają tę samą funkcję, ale w inny sposób. Portfele programowe są uważane za prostsze w użyciu: wystarczy jeden program, aby utworzyć, zweryfikować i podpisać transakcje. W przypadku portfela programowego nie jest konieczne tworzenie transakcji na oprogramowaniu i potwierdzanie jej na urządzeniu sprzętowym.

Dwa tygodnie temu, Zakazane historie ujawnił ukierunkowany atak na tysiące ludzi na całym świecie. Atak ten wykorzystywał luki w systemach Android i iOS w celu zainstalowania oprogramowania szpiegującego opracowanego przez NSO Group: Pegasus. Szkodnik ten jest w stanie monitorować całą aktywność urządzenia i wykradać dane osobowe: SMS-y, rozmowy WhatsApp i Signal, rozmowy telefoniczne itp. W tym artykule wyjaśniono, jak w tych warunkach takie złośliwe oprogramowanie byłoby w stanie wyodrębnić wszystkie tajemnice portfeli programowych oraz różnice z punktu widzenia bezpieczeństwa pomiędzy portfelami programowymi w telefonach komórkowych i komputerach stacjonarnych.

Ten artykuł ma być niezbyt techniczny. Aby było to stosunkowo proste, omówione zostaną tylko podstawowe funkcje.

Ochrona tajemnic

Co jest przechowywane w portfelu kryptograficznym?

Portfele w rzeczywistości nie przechowują kryptowalut użytkowników: przechowują jedynie tajemnice, w szczególności klucze prywatne, które umożliwiają dostęp do kryptowalut i możliwość ich wydawania. Te klucze prywatne to głównie klucze prywatne ECC (eliptic curve cryptography) na różnych krzywych w zależności od łańcucha bloków. Najpopularniejsze krzywe to secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) lub BLS12-381 (Ethereum 2).

Te klucze są używane do podpisywania transakcji, a bardziej ogólnie do interakcji z zasobami łańcucha bloków.

Przechowywanie tych kluczy zależy od rodzaju portfela: deterministycznego lub nie. Hierarchiczny deterministyczny (HD) portfel umożliwia tworzenie drzewa kluczy z jednego głównego sekretu zwanego ziarnem (por. BIP44). To ziarno często pochodzi z mnemonicznej sekwencji 12, 18 lub 24 słów losowo wygenerowanych lub wybranych przez użytkownika (por.BIP39). Te mnemoniki pozwalają ograniczyć liczbę przechowywanych kluczy: można je przeliczyć w dowolnym momencie z materiału siewnego. Portfele HD przechowują tylko ten mnemonik lub ziarno.

Portfele niedeterministyczne generują nowy klucz dla każdego użycia i muszą przechowywać je wszystkie. Portfele niedeterministyczne nie mogą być łatwo migrowane do innego portfela, ponieważ kopie zapasowe nie są kompatybilne.

Główne cechy bezpieczeństwa portfela polegają na prawidłowym generowaniu, przechowywaniu i wykorzystywaniu tych tajemnic. Istnieją różne poziomy ochrony przed różnymi rodzajami zagrożeń:

  • Ochrona przed atakami „złej pokojówki” : Atakujący z tymczasowym dostępem do portfela nie może mieć możliwości dodania backdoora wewnątrz portfela, który pozwoliłby wykraść PIN lub hasło chroniące tajemnice.
  • Bezpieczny materiał kryptograficzny: Klucze i nonce generowane przez portfel nigdy nie mogą być przewidywalne. Ponadto znajomość tajemnic (z wyjątkiem ziarna) wygenerowanych w pewnym momencie nie pozwoli przewidzieć, jaka tajemnica zostanie wygenerowana w przyszłości.
  • Ochrona w stanie spoczynku: Jeśli osoba atakująca uzyska trwałe dane portfela oprogramowania, nie może mieć możliwości wyodrębnienia kluczy.
  • Ochrona podczas tajnego użytku: Gdy portfel jest odblokowany, klucze nie mogą być dostępne dla atakującego lub złośliwego oprogramowania.
Portfele sprzętowe

Model bezpieczeństwa portfela sprzętowego ma na celu uniknięcie tych zagrożeń bezpieczeństwa. Portfele sprzętowe z założenia chronią przed złośliwym oprogramowaniem. Są to niezależne urządzenia, które samodzielnie podpisują transakcje. Materiały kryptograficzne zawsze pozostają wewnątrz urządzenia i nigdy nie są wysyłane do aplikacji, z którą się komunikują. Interfejs komunikacyjny jest zawsze prosty, co drastycznie zmniejsza powierzchnię ataku. Może to być USB, Micro SD lub kamera + ekran (poprzez kod QR) lub Bluetooth Low Energy.

Co więcej, portfele sprzętowe osadzają ekran bezpośrednio w urządzeniu, umożliwiając użytkownikowi weryfikację działań, które zamierza wykonać, gdy wejdzie w interakcję ze swoimi tajnymi kluczami. Te ręczne kontrole urządzeń są bardzo skutecznym środkiem zaradczym przeciwko złośliwemu oprogramowaniu na komputerze/urządzeniu mobilnym. Tam, gdzie złośliwe oprogramowanie na komputerze/urządzeniu mobilnym może uzyskać dostęp do tajemnic (kluczy początkowych lub prywatnych), a nawet zamieniać/modyfikować adresy lub kwoty, gdy użytkownik wykonuje transakcję, nie jest to możliwe w przypadku portfela sprzętowego.

Portfele sprzętowe mają również chronić przed atakami „złej pokojówki” oraz przed atakującym z fizycznym dostępem. W zależności od portfela sprzętowego mają różne poziomy bezpieczeństwa, ale we wszystkich przypadkach są zaprojektowane tak, aby zabezpieczyć się przed tymi zagrożeniami. Szczegółowy opis modeli zagrożeń Ledger Nano można znaleźć tutaj.

Portfele oprogramowania

Zwykłe portfele programowe chronią tajemnice zwykłymi środkami: mechanizmami bezpieczeństwa systemu operacyjnego, na którym działają, a czasami kontrolą dostępu opartą na kodzie PIN lub haśle.

Poniżej uwzględniono portfele na komputery stacjonarne (Windows, macOS, Linux) i portfele mobilne. Główne różnice między nimi polegają głównie na mechanizmach bezpieczeństwa oferowanych przez system operacyjny.

Portfele programowe na komputerze

Na komputerach działa kilka popularnych portfeli, takich jak Electrum, Exodus, Atomic czy Bitcoin core.

Na komputerze mechanizmy bezpieczeństwa oferowane przez system operacyjny w celu odizolowania procesu portfela od innych procesów są ograniczone. Większość aplikacji jest uruchamiana przez tego samego użytkownika, a aplikacje mogą odczytywać dane innych aplikacji.

Bezpieczeństwo tych portfeli oprogramowania opiera się głównie na bezpieczeństwie hasła, które je chroni, a także na fakcie, że w systemie operacyjnym nie działa żadne złośliwe oprogramowanie (co jest dość trudne do zagwarantowania, patrz najnowsze wiadomości dotyczące Pegasusa).

W większości przypadków materiał siewny jest przechowywany w zaszyfrowanym kontenerze chronionym hasłem. Prosty atak polega na pobraniu przez złośliwe oprogramowanie lub narzędzie do zdalnej administracji tego zaszyfrowanego kontenera i wysłaniu go do atakującego. Następnie hasło można wymusić brutalnie lub uzyskać za pomocą keylogger.

W scenariuszu, w którym atakującemu udaje się tylko uzyskać dostęp do zaszyfrowanego kontenera (atakujący znajduje klucz USB zawierający portfel lub instaluje złośliwe oprogramowanie na komputerze, ale ofiara nigdy nie otwiera aplikacji portfela), atakujący musi brutalnie wymusić hasło.

Większość haseł jest zły. W sieci wyciekły miliardy haseł, a wiele osób ma tendencję do ponownego wykorzystywania swoich haseł w kilku usługach. Gotowe narzędzia pozwalają odzyskać hasła do portfeli kryptowalut, takich jak np btcrecover or haszysz. Hasła mogą być złożone, ale za każdym portfelem kryją się prawdziwe pieniądze, dlatego osoby atakujące nie zawahają się zainwestować środków w celu złamania takich haseł.

Dwie podstawowe zasady bezpieczeństwa zapewniające bezpieczeństwo haseł to korzystanie z menedżera haseł i nieużywanie hasła ponownie do innych celów.

Najbardziej niepokojącym zagrożeniem dla portfeli oprogramowania są dedykowane złośliwe oprogramowanie i narzędzia do kradzieży, opracowane specjalnie w celu drenażu funduszy. Takie złośliwe oprogramowanie, takie jak KPOT lub ElektroRAT, nie muszą nawet brutalnie wymuszać Twojego hasła: mogą je bezpośrednio przechwycić, gdy je wprowadzasz, odszyfrować dane konfiguracyjne portfela i eksfiltrować seed.

Oto zabawkowa aplikacja, opracowana na potrzeby tego artykułu, której celem jest portfel Electrum (chociaż mógł to być inny portfel programowy). Symuluje złośliwe oprogramowanie, które kradnie hasło użytkownika, gdy jest ono wprowadzane przez ofiarę. Hasło jest następnie używane do odszyfrowania danych portfela i wyświetlenia materiału siewnego:

Jak widać, nawet jeśli hasło jest złożone, aplikacja jest w stanie je odzyskać, ponieważ bezpośrednio węszy je w pamięci.

Ten przykład jest bardzo podobny do ostatniego Złośliwe oprogramowanie .SCR kampanie wykorzystywane do kradzieży kryptowalut. Przestępcy wykorzystali techniki inżynierii społecznej, aby nakłonić użytkowników do pobrania złośliwego wygaszacza ekranu. Ten wygaszacz ekranu w rzeczywistości kradł informacje od ofiary komputera, w tym informacje dotyczące portfela i giełdy kryptowalut.

Podsumowując na temat portfeli programowych działających na komputerach:

  • W większości przypadków portfele programowe działające na komputerach chronią seed użytkownika za pomocą hasła.
  • Kontrola dostępu do tych plików portfela opiera się głównie na bezpieczeństwie komputera. W praktyce trudno jest chronić komputery przed złośliwym oprogramowaniem, a ponieważ kryptowaluty stają się głównym nurtem, ataki na portfele będą coraz bardziej wyrafinowane.
  • Używanie takich portfeli programowych do zabezpieczania zasobów cyfrowych nie jest dobrym pomysłem. Każde wyspecjalizowane złośliwe oprogramowanie będzie w stanie uzyskać pliki portfela i znaleźć hasła w trybie offline lub uzyskać hasło za pomocą keyloggera.
Portfele programowe na smartfonie

Smartfony z systemem Android i iOS oferują domyślnie funkcje bezpieczeństwa, które nie są powszechnie stosowane w systemach operacyjnych dla komputerów stacjonarnych.

Mobilne systemy operacyjne zapewniają ochronę aplikacji i danych użytkowników. W szczególności piaskownice aplikacji są obowiązkowe dla wszystkich aplikacji. Inaczej jest na przykład w systemie Windows: domyślnie każda aplikacja ma dostęp do danych użytkownika.

W związku z tym złośliwa aplikacja nie może odczytywać danych z innej aplikacji, chyba że:

  • Znajduje lukę w tej aplikacji.
  • Lub udaje mu się eskalować uprawnienia, na przykład wykorzystując lukę w jądrze, umożliwiając mu uzyskanie dostępu roota do systemu.

Niestety, takie ataki istnieją. Są znacznie łatwiejsze w przypadku przestarzałych wersji Androida i iOS oraz starszych lub tanich urządzeń, na których kod strony trzeciej jest często mniej bezpieczny.

W aktualnym systemie operacyjnym ataki te są trudniejsze, ale nie niewykonalne. Na przykład Ian Beer pokazał niezwykle imponujący atak zerowym kliknięciem na iOS 13.5 w grudniu 2020 r. Guang Gong zaprezentował eksploatować łańcuch zdalnie zrootować szeroką gamę urządzeń z systemem Android opartych na technologii Qualcomm w czerwcu 2020 r. A dwa tygodnie temu Zakazane historie ujawnił, że NSO Group wykorzystała łańcuch exploitów do ataku na najnowsze urządzenia z systemem iOS i Android przy użyciu luk typu 0-day.

Mniej wyrafinowani napastnicy mogą wykorzystać lokalne luki w zabezpieczeniach, aby wydobyć dane portfela ze złośliwej aplikacji. Brokerzy luk w zabezpieczeniach, tacy jak Zerodium pay do $ 200,000 za eskalację uprawnień do rootowania na Androidzie i iOS, ale do 1,500,000 XNUMX XNUMX USD za zdalne ataki.

Przeanalizowaliśmy kilka portfeli z systemem Android/iOS. Ich bezpieczeństwo zależy od samej aplikacji, ale także od funkcji bezpieczeństwa bazowego systemu operacyjnego. Oczywiście, gdy zabezpieczenia systemu operacyjnego zostaną pokonane, aplikacja nie jest już bezpieczna

Powszechnie stosuje się dwie metody ochrony nasion:

  • Zabezpieczenie hasłem – dane portfela chronione są hasłem wprowadzanym przez użytkownika. Projekt jest taki sam jak w przypadku portfeli stacjonarnych. W praktyce dane są trudniejsze do wydobycia niż z komputera, ponieważ odzyskanie danych aplikacji ze złośliwej aplikacji jest technicznie trudniejsze z powodów wyjaśnionych powyżej. Jednak odzyskanie hasła po kradzieży danych jest w praktyce łatwiejsze: wprowadzanie skomplikowanych haseł w telefonach komórkowych jest uciążliwe, dlatego użytkownicy wybierają prostsze. Co więcej, mechanizmy wyprowadzania klucza (służące do tworzenia klucza na podstawie hasła) na urządzeniach mobilnych są zwykle łatwiejsze do złamania, ponieważ często są lżejsze ze względu na wydajność.
  • Coinomi i Metamask to przykłady takich portfeli.

W poniższym filmie pokazujemy inną zabawkową aplikację opracowaną na potrzeby tego artykułu. Jest to złośliwe oprogramowanie przebrane za fałszywy widżet Bitcoin ticker. Złośliwe oprogramowanie wykorzystuje znaną lukę w niezałatanym urządzeniu, aby uzyskać dostęp do konta root na urządzeniu i wyeksfiltrować zaszyfrowany materiał siewny na zdalny serwer. Następnie serwer brutalnie wymusza hasło w celu odszyfrowania materiału siewnego.

Ta metoda nie jest specyficzna dla portfela. Można go (mniej lub bardziej) łatwo dostosować do dowolnego portfela chronionego hasłem. Oto ten sam przykład z portfelem Coinbase:

[Osadzone treści]

  • Bezpieczeństwo oparte na Android Keystore (lub iOS Keychain) – W takim przypadku dane portfela są szyfrowane za pomocą klucza szyfrującego przechowywanego w Android Keystore (iOS Keychain). Usługi te zostały pierwotnie zaprojektowane w celu bezpiecznego przechowywania kluczy szyfrowania, a wiele aplikacji używa ich do generowania klucza, który zaszyfruje wszystkie wrażliwe dane użytkownika. Aplikacje korzystające z magazynu kluczy implementują następujący mechanizm:
    • Aplikacja prosi Magazyn kluczy o wygenerowanie klucza szyfrującego dla danego identyfikatora. Magazyn kluczy generuje klucz i bezpiecznie go przechowuje.
    • Gdy aplikacja chce zaszyfrować lub odszyfrować obiekt blob, wysyła obiekt blob wraz z identyfikatorem klucza do magazynu kluczy.
    • Na koniec magazyn kluczy sprawdza, czy aplikacja rzeczywiście ma uprawnienia do używania tego klucza, i odsyła dane wyjściowe do aplikacji.

W tym modelu aplikacja nie może znać wartości klucza, ale może go użyć. Możliwe jest również powiązanie z kluczem dodatkowych kontroli dostępu: na przykład dostęp do klucza można uzależnić od uwierzytelnienia użytkownika (żądanie kodu PIN lub wzoru odblokowania).

Mechanizm ten może zapewnić dodatkowe bezpieczeństwo w porównaniu z ochroną opartą na haśle. Rzeczywiście, w najnowszych telefonach magazyn kluczy jest wspierany przez Trusted Execution Environment (TEE), a czasami przez bezpieczny element.

Oznacza to, że osoba atakująca z uprawnieniami administratora nie będzie mogła wyodrębnić kluczy szyfrowania z magazynu kluczy. Niemniej jednak będą mogli używać magazynu kluczy jako wyroczni deszyfrującej i szyfrować lub odszyfrowywać dowolne dane.

Keystore oferuje szyfrowanie, ale także usługi podpisywania. Czy zatem portfel może chronić swoje klucze szyfrujące, utrudniając ich wydobycie? Odpowiedź brzmi niestety nie: portfele programowe nie używają magazynu kluczy do podpisywania transakcjiklucze prywatne są zawsze manipulowane przez aplikację w postaci zwykłego tekstu.

Dzieje się tak z prostego powodu: KeyStore i KeyChain oferują ogólne usługi podpisu i szyfrowania, ale nie obsługują kryptografii używanej w kryptowalutach. Na przykład KeyStore implementuje podpis ECDSA, ale tylko na krzywych NIST zdefiniowanych w FIPS 186-4 (P-224, P-256, P-384 i P-521). Bitcoin wykorzystuje inną krzywą, secp256k1, która nie jest jeszcze obsługiwana.

Podsumowując, Keystore i Keychain to dobre usługi do ochrony tajne i prywatne klucze. Mogą zapewnić pewne bezpieczeństwo poprzez szyfrowanie poufnych danych: niektóre klasy luk (na przykład odczyt dowolnego pliku) zostaną zablokowane przez szyfrowanie magazynu kluczy. Jeśli jednak eskalacja uprawnień administratora nie wystarczy do wyodrębnienia wartości kluczy ze sprzętowego magazynu kluczy, wystarczy odszyfrować poufne dane. Osoba atakująca, która jest w stanie oprzyrządować aplikację, jest w stanie odzyskać jej sekrety.

Podsumowując na temat portfeli mobilnych:

  • Mechanizm izolacji między aplikacjami dostarczany przez system iOS/Android podnosi poprzeczkę w zakresie bezpieczeństwa w porównaniu z portfelem programowym działającym na komputerze. Osoba atakująca musi najpierw uzyskać eskalację uprawnień, aby uzyskać dostęp do danych aplikacji. Jest to wykonalne na przestarzałych urządzeniach. Wykwalifikowani hakerzy (Ian Beer zrobił to w ciągu 6 miesięcy, ale… to Ian Beer) mogą to zrobić również na najnowszych, załatanych urządzeniach.
  • Usługi ochrony kluczy (KeyStore, KeyChain) mogą dodać dodatkową warstwę zabezpieczeń do ochrony tajemnic w stanie spoczynku. Niemniej jednak, ponieważ nie obsługują algorytmów kryptograficznych dla aplikacji kryptowalutowych, klucz nadal można wyodrębnić.
  • We wszystkich przypadkach osoba atakująca z dostępem do konta root może albo odzyskać ziarno w spoczynku, gdy jest używane, albo wykorzystać prawa użytkownika do opróżnienia portfela, używając portfela programowego jako wyroczni.

Oto ostatni przykład zabawkowego oprogramowania szpiegującego atakującego portfel Blockchain.com (choć równie łatwo można to zrobić na wielu innych portfelach). Jest instalowany zdalnie i monitoruje portfel. Gdy użytkownik uwierzytelni się za pomocą odcisku palca, klucz szyfrowania zostaje odblokowany, a dane portfela odszyfrowane. Spyware instruuje aplikację, aby pobrać ten klucz szyfrowania. Następnie eksfiltruje klucz i dane portfela na zdalny serwer:

[Osadzone treści]

Wnioski

Podsumowując, portfele oprogramowania mają różne poziomy bezpieczeństwa. Jednak ich model zagrożeń nie obejmuje przypadku złośliwego oprogramowania działającego w systemie operacyjnym z eskalacją uprawnień. Jest to zgodne z projektem: aplikacja portfela nie może być bezpieczniejsza niż system operacyjny, na którym działa.

  • Mechanizm izolacji między aplikacjami dostarczany przez system iOS/Android podnosi poprzeczkę w zakresie bezpieczeństwa w porównaniu z portfelem programowym działającym na komputerze. Osoba atakująca musi najpierw uzyskać eskalację uprawnień, aby uzyskać dostęp do danych aplikacji.
  • Usługi ochrony kluczy (KeyStore, KeyChain) mogą dodać dodatkową warstwę zabezpieczeń do ochrony tajemnic w stanie spoczynku. Niemniej jednak, ponieważ nie obsługują algorytmów kryptograficznych dla aplikacji kryptowalutowych, klucze muszą być manipulowane bezpośrednio z aplikacji, więc oferują ograniczoną ochronę.
  • We wszystkich przypadkach osoba atakująca z dostępem do konta root może albo odzyskać ziarno w stanie spoczynku, gdy jest używane, albo wykorzystać prawa użytkownika do opróżnienia portfela, używając portfela programowego jako wyroczni.

Znak czasu:

Więcej z Księga główna