-
Notifications
You must be signed in to change notification settings - Fork 0
Przechowywanie danych
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")
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
(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
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
(gdziesda1
jest identyfikatorem urządzenia i partycji w systemie, np./dev/sda1
) - symlinkowane do
/media/target
(zawsze będzie to najnowszy podłączony dysk)
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.
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
.
-
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). -
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).
-
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:
-
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). -
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).
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 plikutarget.uuid
- jeśli stworzyłeś dodatkowe partycje (zaszyfrowane lub nie), ich identyfikatory UUID również powinny zostać dodane do pliku
ignore.uuid
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
© 2020-2022 Tomasz Klim Payload.pl, Wszelkie prawa zastrzeżone.