Funkcjonariusz: platforma open source do szybkiej eksfiltracji danych z komputerów, serwerów, telefonów, tabletów, aparatów cyfrowych i innych urządzeń USB.

kontakt@funkcjonariusz.com

TL;DR jak długo w praktyce trwa atak na przeciętny komputer?

Na szybkim komputerze (umownie Intel Core i5/i7/i9, AMD Ryzen), oraz przy użyciu jednego z polecanych dysków zewnętrznych SSD, podłączonego do portu USB 3.0, z ilością danych typową dla menedżera, pracownika HR, lub pracownika biurowego, cały atak nie powinien przekroczyć 2 minut.

Ale na wolnym komputerze (Intel Atom, Core 2 Duo, stare modele Celeronów i Pentium, budżetowe AMD itp.), oraz przy większej ilości danych (np. typowej dla programisty), najprawdopodobniej zajmie on ponad godzinę, a w skrajnych przypadkach (np. zastosowanie wolnego pen drive'a zamiast dysku SSD) może się rozciągnąć nawet na wiele godzin.

Wstęp

Poniższy artykuł wyjaśnia, jak wygląda proces rozruchu (boot) komputera, oraz jak wyliczyć szacunkowy czas eksfiltracji danych z konkretnego komputera na podstawie posiadanych, często mało szczegółowych informacji.

Jak można zdroworozsądkowo przypuszczać, wydajność procesu eksfiltracji zależy głównie od wydajności procesora w atakowanym komputerze, oraz od wydajności zapisu użytego dysku SSD. Ale do czasu właściwej eksfiltracji danych należy jeszcze dodać sumaryczny czas różnych opóźnień, wynikających z bardzo różnych przyczyn - w dużej części wynikających z celowych działań producentów komputerów, mających na celu utrudnienie działania narzędzi takich jak Funkcjonariusz. A czas ten zależy w dużej części od sprawności reakcji operatora (zwłaszcza kiedy zajmuje się on kilkoma komputerami jednocześnie).

Niestandardowe działania poprzedzające rozruch

Dla większości użytkowników komputerów, właściwy proces rozruchu wydaje się bardzo prosty i jednolity pomiędzy komputerami. Dzieje się tak dlatego, że używają oni komputerów od jednej do trzech marek i często nie są świadomi różnych drobnych, ale utrudniających automatyzację różnic w procesie rozruchu pomiędzy poszczególnymi markami.

Kiedy pracujesz na jednym komputerze, przyzwyczajasz się do jego dziwnych zachowań i przestajesz je postrzegać jako dziwne - np.:

  • pracując na laptopach Lenovo z przyciskiem "Novo Button", przypuszczalnie uważasz za standard to, że aby wejść do konfiguracji UEFI, należy włączyć laptopa tym właśnie przyciskiem, zamiast Power
  • pracując na laptopach gamingowych MSI, przypuszczalnie uważasz za standard to, że można je uruchomić z dysku USB, ale tylko z niektórych portów USB (najczęściej tych po prawej stronie obudowy)
  • pracując tylko na laptopach HP, przypuszczalnie spędzisz kilka minut, zanim samodzielnie znajdziesz sposób wejścia do menu rozruchowego (boot menu) na laptopach Lenovo Ideapad

Wszystkie te drobne różnice nie mają zbyt wiele wspólnego ze standardami. Niektóre z tego typu różnic są wynikiem jakichś zaszłości, jednak większość jest działaniem jak najbardziej celowym, aby chronić komputery (i użytkowników) przed złośliwymi działaniami osób trzecich (np. w miejscach publicznych, gdzie teoretycznie komputer pozostaje pod nadzorem, ale w praktyce dość łatwo jest uzyskać do niego wyłączny dostęp na raptem kilka-kilkanaście sekund).

To niestety wpływa również na działanie Funkcjonariusza - poniższa tabelka wyjaśnia po kolei proces rozruchu wraz z różnymi drobnymi różnicami, na które operator powinien być przygotowany, dzięki czemu nie musi on mieć wykształcenia ani doświadczenia IT.

Fazy rozruchu komputera

Id Faza Czeka na
S1 Wyłączenie zainstalowanego systemu operacyjnego Windows wyłącza automatycznie programy działające jako usługi - ale programy działające w tle na koncie zalogowanego użytkownika już tylko prosi o wyłączenie. Jeśli otwarty jest np. Outlook usuwający maile z serwera przy zamknięciu, wówczas taka operacja może opóźnić zamknięcie systemu nawet o 2 minuty, a powód nie zawsze będzie wprost widoczny na ekranie.
S2 Restart komputera z poziomu ACPI Standard ACPI obowiązuje jeszcze od lat 90-tych i w większości przypadków działa bez problemów - zawodzi najczęściej gdy używany system operacyjny uruchomiony jest z wyłączonym ACPI z uwagi na problemy ze sterownikami, albo gdy Windows Update wyłączy obsługę ACPI w trakcie aplikowania poprawek. Po prostu bądź gotowy w razie czego ręcznie zrestartować komputer.
H1 Start BIOS/UEFI, testy wewnętrzne, uruchamianie dodatkowego firmware (kart sieciowych, kontrolerów RAID, kart graficznych, interfejsów do zarządzania serwerem itp.)
H2 Wykrywanie konfiguracji RAID/dysków twardych
H3 Wykrywanie serwerów DHCP / rozruchu PXE przez kartę sieciową To w skrajnych przypadkach może zająć nawet ponad 5 minut, jeśli kabel LAN jest podłączony, ale żaden serwer DHCP nie odpowiada, a w konfiguracji BIOS/UEFI włączone są wszystkie opcje rozruchu sieciowego. Najczęściej możesz to pominąć w kilka sekund, wciskając Esc, gdy tylko zobaczysz komunikaty mówiące o DHCP lub PXE.
H4 Uruchomienie menu rozruchowego (boot menu) Pokazuje się tylko po wciśnięciu w trakcie poprzednich faz jednego z klawiszy F9/F11/F12/F10/F8/F2/Del (zależnie od modelu, z wyjątkiem Lenovo, gdzie należy uruchomić komputer za pomocą przycisku NovoButton, który z reguły umieszczony jest wśród złącz, a nie na klawiaturze).
H5 Menu rozruchowe Pokazuje urządzenia, z których można uruchomić komputer. Jeśli nie widzisz na tej liście dysku z Funkcjonariuszem, spróbuj przepiąć go do innego portu USB (szczególnie w laptopach MSI), a jeśli to nie wystarczy, wejdź do konfiguracji BIOS/UEFI i ustaw opcję "Boot mode", "Secure boot" lub podobną na "Legacy".
B1 Załadowanie MBR i menu GRUB Na tym etapie powinieneś zobaczyć niebieski ekran graficzny Kali Linux z listą możliwych trybów startu (Live, Live failsafe itd.). W niektórych przypadkach zobaczysz tylko czarny ekran, pusty albo z pojedynczą linią tekstu zaczynającą się od SYSLINUX. W takim przypadku sprawdź konfigurację BIOS/UEFI pod kątem wyłączonych opcji związanych z grafiką.
B2 Menu GRUB Niebieski ekran będzie czekał w nieskończoność na Twój wybór - na tym etapie musisz wybrać opcję "Live USB Encrypted Persistence". W razie zagrożenia wybierz domyślną opcję, wówczas uruchomi się zwykły Kali Linux Live, a partycja z eksfiltrowanymi danymi i sam Funkcjonariusz będą całkowicie niewidoczne i niedostępne.
B3 Konfigurowanie trybu graficznego, załadowanie sterowników, uruchomienie jądra systemu Linux Niezależnie od wybranej opcji, zacznie się uruchamianie Linuxa (w trybie Live lub instalatora systemu). Zależnie od modelu komputera i ustawień karty graficznej, ekran albo przejdzie do trybu tekstowego, albo na środku niebieskiego ekranu zostanie wyświetlona czarna ramka z konsolą tekstową. Na niektórych komputerach Dell, w tym miejscu system się zawiesza i pozostaje tylko wyłączyć komputer przyciskiem zasilania.
B4 Oczekiwanie na podanie hasła LUKS do zaszyfrowanej partycji z danymi Pytanie o hasło może być wyświetlone albo w trybie tekstowym, albo graficznym, na tle logotypu Kali Linux. W obu przypadkach system będzie czekał w nieskończoność na podanie hasła.
B5 Wyliczenie klucza z podanego hasła za pomocą algorytmu PBKDF2 Zależnie od wybranego algorytmu hashującego, liczby iteracji i mocy procesora, może to potrwać od ułamków sekundy (a bardziej realnie od kilku sekund) nawet do kilku minut.
B6 Otwarcie partycji z danymi Jeśli hasło LUKS było nieprawidłowe, następuje przeskok do fazy B4 i ponowne pytanie o hasło. W przypadku, gdy partycja z danymi nie jest zaszyfrowana (generalnie odradzamy takie rozwiązanie), fazy B4 i B5 są pomijane.
B7 Uruchomienie systemd, wczytanie konfiguracji usług
B8 Uruchamianie poszczególnych usług przez systemd W tym uruchomienie udevd i wykrycie obecnego w komputerze sprzętu, uruchomienie klienta DHCP i próba otrzymania adresu IP, oraz uruchomienie Funkcjonariusza.
B9 Uruchomienie lokalnej konsoli Od tego momentu masz dostęp do konsoli bez podawania hasła, jako użytkownik nieuprzywilejowany kali, oraz możliwość przełączenia się na roota (sudo su -). Możesz np. uruchomić jakiś program maskujący przed osobami trzecimi to, co dzieje się w tle.
A1 Funkcjonariusz w tle odlicza 15 lub 25 sekund Czeka na potencjalną konfigurację sieci przez DHCP.
A2 Jeśli został uruchomiony tryb graficzny (proces Xorg), Funkcjonariusz czeka jeszcze 20 sekund Dodatkowe 20 sekund daje systemowi czas na gładkie załadowanie elementów trybu graficznego, aby potencjalne osoby trzecie nie zobaczyły spowolnienia, jakie wywoła start rsync.
A3 Funkcjonariusz zaczyna przetwarzać kolejne partycje Zaczyna się właściwy atak.
A4 Atak się kończy, kiedy ostatni z uruchomionych w tle skryptów kończy pracę Konsola cały czas działa, komputer nie wyłączy się automatycznie - możesz spokojnie dokończyć to, co "oficjalnie" robiłeś. Pamiętaj, aby na koniec wyłączyć komputer.

Czynniki wpływające na wydajność ataku

Jak widać, większość zdarzeń opisanych w powyższej tabeli ma miejsce przed właściwym atakiem i:

  • część z nich może go spowolnić (np. oczekiwanie Windows na zamknięcie Outlooka, który próbuje zsynchronizować usunięte maile z serwerem)
  • część może go całkowicie zatrzymać do momentu reakcji operatora (np. pytanie o hasło do zaszyfrowanej partycji z danymi)

Zależnie od konkretnego sprzętu, dostęp do menu rozruchowego może być prostszy lub trudniejszy. Jeśli masz szczęście, przejdziesz przez cały proces rozruchu dosłownie w kilkanaście sekund. Jeśli nie - w skrajnych przypadkach możesz spędzić nawet godziny próbując uruchomić sprzęt sprawiający dziwne problemy (w pewnych sytuacjach alternatywą może być wymontowanie z problematycznego komputera dysków twardych i tymczasowe podłączenie ich do innego komputera, lub do Funkcjonariusza Mobilnego).

Na większości komputerów, rozruch i uruchomienie Funkcjonariusza nie powinny zająć więcej niż 15 minut (licząc od zamknięcia Windows do uruchomienia usług i konsoli Kali Linuxa, tj. do końca fazy B9).

Wydajność fazy A3 (czyli właściwego ataku) zależy natomiast od:

  • generalnej wydajności komputera (szybkość procesora, wielkość cache, ilość pamięci RAM, typ dysku twardego)
  • portu USB - 3.0 czy 2.0
  • rodzaju użytego nośnika z Funkcjonariuszem
  • ilości danych do eksfiltracji (niekoniecznie równej ilości wszystkich danych)
  • istnienia ewentualnych udziałów sieciowych do eksfiltracji, wydajności sieci i ilości danych na nich

Atak właściwy (faza A3) krok po kroku

Funkcjonariusz został napisany w Unix Shellu, możliwie wysokopoziomowo, stawiając przede wszystkim na czytelność kodu i możliwość weryfikacji jego sposobu działania:

  • główna logika zawarta jest w pojedynczym skrypcie internal/kali/main.sh, mającym raptem ok. 50 linii kodu
  • wszystkie operacje wywoływane przez ten skrypt realizowane są przez osobne skrypty, których działanie można testować niezależnie od całości

Kroki:

  1. Konfiguracja katalogu, w którym będą zapisywane eksfiltrowane dane i ustalenie, który dysk (i partycje na nim) pominąć.

  2. Pobranie listy partycji posiadających UUID (z katalogu /dev/disk/by-uuid utworzonego przez udevd)

  3. Każda partycja po kolei jest:

    • skanowana pod kątem pasującego klucza i deszyfrowana (jeśli klucz został znaleziony i oczywiście jeśli w ogóle była zaszyfrowana)
    • montowana
    • przetwarzana przez kolejne hooki
    • eksfiltrowana (dane są kopiowane programem rsync z zestawem reguł wykluczających)
    • jeśli został dopasowany chociaż jeden injector:
      • przełączana w tryb do zapisu (o ile nośnik i system plików na to pozwalają)
      • modyfikowana przez injector
  4. Po przetworzeniu wszystkich partycji z UUID, skrypt szuka partycji nie posiadających UUID:

    • niesformatowanych
    • zaszyfrowanych metodą, której nie potrafi rozpoznać udevd (głównie Bitlocker i VeraCrypt)
    • różnych partycji specjalnych, zarezerwowanych itp.

    Na tak znalezionych partycjach testowane są skonfigurowane klucze Bitlocker i VeraCrypt, a jeśli uda się dopasować klucz, dalsze przetwarzanie takiej partycji przebiega podobnie jak dla partycji z UUID.

Różnice pomiędzy rsync i hookami:

  • rsync działa synchronicznie, kopiując jedną partycję po drugiej
  • hooki również są uruchamiane synchronicznie (tuż przed rsync dla danej partycji), ale mogą one uruchamiać kolejne skrypty przetwarzające już w tle (skrypty te będą działać równolegle z rsync)

Najbardziej czasochłonne fazy, nie wymagające interakcji operatora

Generalnie najbardziej czasochłonna jest cała faza A3, czyli właściwy atak, w tym:

  • skanowanie listy skonfigurowanych kluczy w poszukiwaniu klucza pasującego do przetwarzanej właśnie partycji (im więcej kluczy jest załadowanych na Twój dysk, tym dłużej potrwa ich przeszukiwanie)
  • eksfiltracja danych z udziałów sieciowych (rsync/wget z FTP)

Jak przyspieszyć właściwy atak?

W przypadku większych ataków (np. na firmy z setkami lub więcej komputerów), istnieją 3 zasadnicze metody przyspieszenia ataku:

  1. Obsługa więcej niż jednego komputera jednocześnie (jeśli np. mamy kilka komputerów w jednym pokoju i możemy się pomiędzy nimi bardzo szybko przemieszczać).

  2. Implementacja własnych, dodatkowych zestawów reguł wykluczających - np. jeśli celem jest firma, w której na 300 komputerach spodziewasz się programu AutoCAD 2013, nie ma sensu go kopiować z każdego komputera. Zaoszczędzisz sporo czasu i miejsca na dyskach, dodając regułę wykluczającą Program Files/Autodesk/AutoCAD 2013.

  3. Skrócenie list kluczy szyfrujących do przeszukania:

    • przypisanie kluczy do numerów seryjnych dysków (jeśli udało Ci się wejść w posiadanie odpowiednio szczegółowej listy kluczy)
    • podział posiadanych kluczy na wiele dysków wg posiadanej wiedzy - np. klucze do komputerów zarządu na jednym dysku, do komputerów programistów na drugim itd.

Fazy wymagające interakcji operatora

  • uruchomienie menu rozruchowego (H4)
  • wybór właściwego trybu startu Kali Linuxa (B2, opcja "Live USB Encrypted Persistence")
  • podanie hasła do zaszyfrowanej partycji z danymi (B4)

Tak wygląda menu GRUB (etap B2) systemu Kali Linux Live: