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

Funkcjonariusz Mobilny zapisuje eksfiltrowane dane:

  • na nośniku wewnętrznym (karcie pamięci w przypadku platform Raspberry Pi i NanoPi, albo dysku SSD w przypadku innych platform - jest to tzw. tryb "fallback storage")
  • na zewnętrznym dysku USB SSD (zwanym dyskiem na dane, lub w niektórych miejscach "celem" - z ang. "target drive")

Jak działa wykrywanie podłączanych dysków

Kiedy urządzenie klasy USB Mass Storage jest podłączane (lub odłączane) do komputera z Linuxem, jądro generuje całą serię różnych zdarzeń, które mechanizm udev przetwarza za pomocą reguł i we współpracy z demonem systemd konfiguruje odpowiednie interfejsy - np. pliki urządzeń w katalogu /dev, czy linki symboliczne w różnych katalogach.

Konkretnie w przypadku podsystemu "usb" i zdarzeń "add", dodawane są linki symboliczne dla poszczególnych partycji w katalogach /dev/disk/by-uuid i /dev/disk/by-id (i kilku innych, które nie są tutaj istotne).

Funkcjonariusz Mobilny rozszerza standardowe reguły udev o kilka własnych, które dla każdej nowo skonfigurowanej partycji tworzą dynamiczną usługę systemd, która z kolei uruchamia eksfiltrację danych z tej partycji. Szczegółowo wygląda to następująco:

  • rozpoznanie typu i ustawień partycji
  • sprawdzenie czy jest zaszyfrowana (przy użyciu dokładnie tych samych mechanizmów i kluczy, co w przypadku Funkcjonariusza)
  • odszyfrowanie (jeśli udało się znaleźć pasujący klucz)
  • zamontowanie tylko do odczytu
  • uruchomienie hooków (ponownie, dokładnie tych samych, co w przypadku Funkcjonariusza)
  • właściwa eksfiltracja (z użyciem tych samych repozytoriów konfiguracyjnych, co w przypadku Funkcjonariusza)
  • jeśli udało się dopasować jakiś injector:
    • przemontowanie partycji w tryb do zapisu (jeśli urządzenie pod spodem na to pozwala, a Linux obsługuje zapis do tego typu systemu plików)
    • uruchomienie injectora (jeśli udało się zamontować system plików do zapisu)
  • odmontowanie

Pliki ignore.uuid

Pliki ignore.uuid (dostarczane w repozytoriach konfiguracyjnych) zawierają listy identyfikatorów partycji (UUID), po jednym w każdej linii:

2021-02-18-17-44-06-00
2021-02-18-17-16-26-00
1366-8586
FFFF-FFFF

Partycje zdefiniowane w tych plikach (może być ich wiele, dostarczonych przez kilka odrębnych repozytoriów) będą kompletnie ignorowane przez Funkcjonariusza Mobilnego.

Dostępne są 2 gotowe, publiczne repozytoria z plikami ignore.uuid:

  • ignore-known - lista realnych, dobrze znanych identyfikatorów UUID różnych wersji partycji z Kali Linuxem Live (nie ma sensu tracić czasu na eksfiltrację gotowych obrazów ISO ze znaną zawartością) - repozytorium to jest domyślnie instalowane przez przykładowy skrypt instalacyjny
  • target-demo - repozytorium demonstracyjne (nie powinieneś go bezpośrednio instalować, ale przygotować na jego podstawie własne repozytorium prywatne), pokazujące jak skonfigurować swoje własne urządzenia z Funkcjonariuszem i Funkcjonariuszem Mobilnym

Pliki target.uuid

Pliki target.uuid zawierają listy identyfikatorów partycji (UUID), po jednym w każdej linii - identycznie do plików ignore.uuid.

Partycje zdefiniowane w plikach target.uuid będą:

  • automatycznie montowane w katalogach typu /media/targets/sda1 (gdzie sda1 jest identyfikatorem urządzenia i partycji w systemie, np. /dev/sda1)
  • symlinkowane do /media/target (zawsze będzie to najnowszy podłączony dysk)

Kolejność zdarzeń

Jeśli podłączysz do Funkcjonariusza Mobilnego więcej niż 1 dysk docelowy na dane jednocześnie, wówczas:

  • tylko ostatni podłączony i prawidłowo rozpoznany dysk będzie używany do zapisywania danych
  • odłączenie dowolnego z dysków spowoduje przełączenie Funkcjonariusza Mobilnego w tryb "fallback storage"

Aby to naprawić, po prostu odłącz swój dysk na dane, poczekaj 10 sekund i podłącz go ponownie.

Natomiast jeśli chcesz zmienić dysk (który się np. zapełnił), najpierw odłącz stary, potem podłącz nowy - nigdy odwrotnie.

Skrypt rebuild-uuid-lists.sh

Pliki ignore.uuid i target.uuid nie są używane bezpośrednio - zamiast tego, po każdej aktualizacji urządzenia, pliki te są przetwarzane przez skrypt /opt/drivebadger/internal/mobile/rebuild-uuid-lists.sh, który generuje z nich docelowe pliki konfiguracyjne, nie zawierające już komentarzy ani pustych linii.

Jeśli wgrywasz aktualizacje na swoje urządzenia z Funkcjonariuszem Mobilnym inaczej niż za pomocą skryptu /opt/drivebadger/update.sh aktualizującego sklonowane repozytoria Git, pamiętaj aby na końcu procesu aktualizacji uruchomić skrypt rebuild-uuid-lists.sh.

Dodatkowe ograniczenia dla partycji na dane

  1. Największą wydajność zapisu danych uzyskasz dla partycji ext4 - natomiast tak naprawdę możesz użyć dowolnego typu partycji, do którego Linux posiada sterowniki obsługujące zapis, w tym NTFS (pamiętaj jednak, że zapis na NTFS jest ponad 2x wolniejszy).

  2. Nie jest obsługiwane szyfrowanie LUKS - chyba że zainstalujesz Funkcjonariusza Mobilnego na laptopie lub komputerze stacjonarnym, na bazie Kali Linuxa (zamiast Raspberry Pi i Raspbiana).

  3. Partycja na dane musi mieć ręcznie utworzony jeden z podanych łańcuchów katalogów:

.support/.files
.files/.data
files/data

eksfiltrowane dane są wówczas zapisywane wewnątrz podkatalogu np.

/media/target/.files/.data/20210723/$deviceserial/$partition

Jeśli na podłączonym dysku nie istnieje żaden z powyższych łańcuchów katalogów, Funkcjonariusz Mobilny przejdzie w tryb "fallback storage". Jest to prosty mechanizm zabezpieczający, mający na celu:

  1. Uniknięcie zapisania danych na niewłaściwy dysk, jeśli partycja na nim została omyłkowo dopisana do pliku target.uuid (podwójna weryfikacja).

  2. Proste zabezpieczenie przed przypadkowym ujawnieniem nazw i numerów seryjnych eksfiltrowanych dysków, jeśli ktoś przypadkowo przechwyci Twój dysk z danymi i podłączy do komputera, aby szybko przejrzeć jego zawartość. Dodatkowo możesz dla niepoznaki wgrać do głównego katalogu tego dysku jakieś pliki mp3, filmy itp., a katalog .files będzie ukrywany przez wiele menedżerów plików. Dzięki temu, w sytuacjach kryzysowych masz dużą szansę przejść z sukcesem pobieżną inspekcję nośników (np. na przejściu granicznym).

Czy partycje "persistent" od Funkcjonariusza mogą być używane z Funkcjonariuszem Mobilnym?

Funkcjonariusz używa partycji typu ext4, z opcjonalnym - aczkolwiek bardzo mocno rekomendowanym - szyfrowaniem LUKS. Funkcjonariusz Mobilny może używać partycji od Funkcjonariusza, ale tylko tych niezaszyfrowanych.

W praktyce, jeśli zależy Ci na ograniczeniu kosztu nośników użytych do ataku, warto rozważyć połączenie dysku zapasowego z Funkcjonariuszem, do eksfiltracji starych komputerów, które mają problem z obsługą szyfrowania LUKS (który to dysk nie będzie szyfrowany), z dyskiem docelowym dla Funkcjonariusza Mobilnego.

Dysk z Funkcjonariuszem zawiera 3 (lub czasem więcej) partycje:

  • pierwsze dwie to standardowe partycje Kali Linuxa Live - ich identyfikatory UUID powinny być dodane do pliku ignore.uuid
  • trzecia partycja (a jeśli jest ich więcej, to partycja ext4 z etykietą persistence) jest partycją na dane i jej identyfikator UUID powinien zostać dodany do pliku target.uuid
  • jeśli stworzyłeś dodatkowe partycje (zaszyfrowane lub nie), ich identyfikatory UUID również powinny zostać dodane do pliku ignore.uuid

Tryb "fallback storage"

Jeśli:

  • nie jest podłączony żaden dysk docelowy na dane
  • dysk docelowy jest podłączony, ale inny dysk docelowy, podłączony wcześniej, został odłączony (zwróć uwagę na kolejność zdarzeń)
  • dysk docelowy nie zawiera żadnego z wymaganych łańcuchów katalogów

wówczas Funkcjonariusz Mobilny będzie pracował w trybie "fallback storage" - czyli:

  • katalog /media/target będzie linkiem symbolicznym do /media/fallback (a ten katalog leży na głównym systemie plików, a więc na karcie pamięci lub dysku wewnętrznym, zależnie od wybranej platformy sprzętowej)
  • eksfiltrowane dane będą zapisywane do podkatalogu np. /media/fallback/20210723/$deviceserial/$partition