Główną funkcjonalnością Funkcjonariusza jest eksfiltracja danych. Natomiast posiada on też funkcjonalność modyfikacji eksfiltrowanych systemów plików - tj. tworzenia plików i katalogów, zapisu danych, zmian nazw, kasowania itp.
Funkcjonalność ta w oryginalnym projekcie Drive Badger (wersji Funkcjonariusza kierowanej na rynek międzynarodowy) nazywa się "filesystem injection", a rozszerzenia ją realizujące "injectorami". W repozytorium injectors-playground znajdziesz przykładowe injectory, na podstawie których możesz tworzyć własne rozwiązania.
Ta funkcjonalność może być potencjalnie nadużywana, np. do podkładania dowodów. Dlatego też jej użycie w trakcie przeszukania w trybie art. 220 § 3 Kodeksu postępowania karnego (a tym bardziej w trybie art. 44 § 4 Kodeksu postępowania w sprawach o wykroczenia) jest niedozwolone.
W Polsce funkcjonalności tej można legalnie używać jedynie w celach naukowych i testowych, oraz można ją instalować i konfigurować w ramach prowadzenia przygotowań technicznych (np. jako outsourcing usług IT) do działań, które prowadzone będą w krajach, w których nie łamią one lokalnego prawa (np. Brazylia, Wietnam, Korea, Wenezuela itd.).
Injectory to proste skrypty, instalowane (bardzo podobnie do hooków) w katalogu /opt/drivebadger/injectors
. Są one uruchamiane:
Injector jest katalogiem (lokalnym lub kopią roboczą repozytorium) zawierającym skrypt o nazwie injector.sh
i opcjonalnie inne pliki (np. zdjęcia, które mają być kopiowane na modyfikowane systemy plików). Skrypt ten otrzymuje w parametrze $1
ścieżkę do zamontowanego systemu plików i może w ramach tego systemu robić właściwie cokolwiek. Należy jednak pamiętać o kilku ograniczeniach:
C:\Windows
to co innego niż C:\WINDOWS
)Nie. Injectory działają na zasadzie "best effort" - czyli zapis może się udać, ale jeśli się nie uda, to nie będzie to błędem.
Injectory mogą się nie uruchomić, albo mogą nie być w stanie zmodyfikować systemu plików - np.:
mount
w trybie rw
zwraca błąd z dowolnej innej przyczyny - np. system plików NTFS, który nie został prawidłowo zamknięty, może być zamontowany pod Linuxem tylko do odczytu.Funkcjonariusz przetwarza wszystkie partycje w następującej kolejności działań:
rsync
).Wyjątek: w przypadku szyfrowania VeraCrypt, partycje są od samego początku montowane w trybie do zapisu, a po eksfiltracji, modyfikowane bez przemontowywania.
Injectory są dopasowywane przez skrypt get-injector-script.sh
. Zwraca on nazwę najlepiej pasującego injectora na podstawie kilku warunków:
ext4
, ntfs
) - taki injector będzie uruchamiany dla wszystkich partycji danego typu, więc należy unikać stosowania takich injectorów do prawdziwych ataków (natomiast takie uproszczone dopasowanie bardzo ułatwia niektóre testy).Zawsze uruchamiany jest tylko pierwszy, najlepiej dopasowany injector.
Co to oznacza w praktyce:
Injectory dopasowywane po UUID są najlepszym wyborem (o ile znamy UUID atakowanej partycji) w przypadku rzeczywistych ataków - celują bowiem w jedną, konkretną partycję.
Injectory dopasowywane po numerze seryjnym dysku twardego mogą być o tyle praktyczniejsze, że taki numer seryjny można dyskretnie odczytać bez działającego systemu - po prostu odczytując go z etykiety na wyłączonym dysku, albo wręcz z faktury czy dokumentów gwarancyjnych. Dodatkowym założeniem jest to, że nie znamy numeru ani UUID partycji - co najwyżej jej typ (wynikający z używanego systemu operacyjnego).
Dlatego też injector taki będzie uruchamiany kilka razy, osobno dla każdej z partycji - musisz więc zaimplementować w nim dodatkowe testy, np. czy istnieje katalog, w którym chcesz dorzucić jakieś dodatkowe pliki. Tak aby finalnie modyfikować tylko jedną partycję.
Injectory dopasowane tylko po typie partycji (lub metody szyfrowania) - powinny one być używane tylko w specjalnych okolicznościach i bardzo ostrożnie, gdyż mogą łatwo wyrządzić nienaprawialne szkody. Są one generalnie przeznaczone do testów, oraz do działania w warunkach, w którym nie znamy wcześniej UUID-ów partycji ani numerów seryjnych dysków - mamy jedynie pewną szczątkową wiedzę nt. użytkownika, np. jego imię i nazwisko - możemy wówczas próbować odgadnąć jego login i zaimplementować własne testy na możliwe ścieżki katalogu domowego, i dopiero po prawidłowym odgadnięciu takiej ścieżki robić cokolwiek więcej.
Injectory jak najbardziej obsługują zaszyfrowane dyski. Istnieje natomiast kilka drobnych ograniczeń:
bitlocker
, veracrypt
i luks
nadpisują przy rozpoznawaniu faktyczny system plików:ext4
zaszyfrowane LUKS mogą być dopasowywane tylko typem luks
, ext4
nie zadziałabitlocker
lub veracrypt
zamiast ntfs
Repozytorium injectors-playground zawiera szereg prostych przykładów injectorów, które robią prosty test na istnienie określonego katalogu, po czym tworzą w nim mały plik tekstowy.
Ciekawym przykładem jest też injector dla partycji luks
, który dodaje klucz publiczny ssh do pliku /root/.ssh/authorized_keys
na wszystkich partycjach szyfrowanych LUKS, na których istnieje katalog /root
.