W tym wpisie chciałbym rozpocząć temat tzw. kluczy ulotnych – to jest takich, które przechowywane są przez system operacyjny jedynie w pamięci operacyjnej komputera i nie są zapisywane na dysk twardy – a przynajmniej nie w plikach, które klucz
HKLM\SYSTEM\CurrentControlSet\Control\hivelist
wskazuje jako miejsce przechowywania zawartości rejestru przez system.
W skrócie, i posiłkując się opracowaniem, klucze ulotne nie różnią się zbytnio od kluczy stałych, poza tym, że:
- Przechowywane są wyłącznie w pamięci operacyjnej komputera – w związku z tym nie podlegają mechanizmowi synchronizacji pomiędzy pamięcią operacyjną a plikami (mechanizm ten zakłada, że aktualna – i spójna – wersja Rejestru, a przynajmniej jej część wykorzystywana w danym momencie przez system operacyjny i aplikacje, przechowywana jest w pamięci operacyjnej, i z tej korzystają wszystkie programy chcące z Rejestru skorzystać, natomiast w przeciągu kilku sekund od dokonania każdej zmiany zostania uaktualniona wersja przechowywana na dysku. NB na fakcie istnienia tego opóźnienia opiera się z jeden ataków typu exploit na system w oparciu o Rejestr, który w założeniu nie zostawi żadnych śladów po wyłączeniu komputera (szczegóły m.in. tu – w sekcji 7 wspomnianego opracowania))
- Inna jest struktura danych związana z przechowywaniem kluczy ulotnych, w związku z czym większość parserów Rejestru, jako że została zaprojektowana do pracy na plikach Rejestru a nie na zawartości pamięci operacyjnej, nie daje sobie rady z interpretowaniem porcji Rejestru związanych z kluczami ulotnymi,
- Najpopularniejsze aplikacje służące m.in. do ‘zrzucania’ zawartości Rejestru (np. FTK Imager) nie obejmują kluczy ulotnych – aplikacje te z zasady nie czerpią z wersji Rejestru udostępnianej przez system operacyjny, tylko dostają się do plików przechowywanych na twardym dysku a tam kluczy ulotnych nie ma.
Jak rozpoznać, czy dany klucz jest kluczem ulotnym? Chałupniczo, rozpoznać można próbując dodać do danego klucza podklucz, wykorzystując np. reg.exe:
Reg.exe add „HKLM\SYSTEM\CurrentControlSet\Enum\USB\ROOT_HUB20\4&17cf0892&0\Control\test”
który zwróci następujący błąd:
Error: Cannot create a stable subkey under a volatile parent key.
Uwaga – ta sama próba przeprowadzona w regedit.exe zwróci po prostu błąd “Cannot create key: Error writing to the registry.”, co nie musi oznaczać koniecznie klucza ulotnego (może być to po prostu związane z brakiem odpowiednich uprawnień).
Innym sposobem byłaby analiza struktur danych w pamięci operacyjnej, w której klucze są zapisywane. Co powoduje, że powinniśmy zadać bardziej podstawowe pytanie, czyli:
Gdzie szukać informacji o kluczach ulotnych?
W pamięci operacyjnej. Oczywiście pamięć operacyjna nie zawiera całości Rejestru – podsystem jądra Configuration Manager odpowiadający za udostępnianie Rejestru przechowuje jedynie aktualnie załadowane registry hives – no ale, na pewno przechowuje, z definicji, wszystkie klucze ulotne. We wspomnianym opracowaniu dokonano badań próbując odpowiedzieć na pytanie ile kluczy ulotnych i ile kluczy stałych można odnaleźć w pamięci operacyjnej (w stosunku do liczby kluczy w plikach na dysku). Generalnie, różnice pomiędzy poszczególnymi instalacjami systemu są znaczące, przy czym autorzy nie konkludują, z czego różnice te mogłyby wynikać (tj. jako potencjalne tłumaczenie brakujących kluczy wskazują dwie możliwości – Configuration manager albo nie załadował części hive’a w ogóle, albo był załadował natomiast później zapisał aktualną wersję z powrotem na dysk, a pamięć została zwolniona).
Niestety, nie jestem świadomy istnienia aplikacji, która potrafiłaby wykorzystując techniki pozyskania zawartości Rejestru z plików oraz zawartości Rejestru przechowywanej w pamięci operacyjnej, przedstawić pełny i aktualny Rejestr systemu Windows.
Co w przypadku, gdy komputer jest wyłączony (w związku z czym nie mamy dostępu do pamięci operacyjnej)? Hiberfil.sys – czyli zapis pamięci operacyjnej przy ostatniej hibernacji. Istnieją skrypty, które pozwalają na wyszukiwanie kluczy Rejestru w hiberfil.sys (tak jak i w obrazie pamięci operacyjnej) – np. Volatility, o którym opowiemy w jednym z kolejnych wpisów. Opowiemy również o tym, dlaczego wiedza o kluczach ulotnych może być bardzo przydatna z perspektywy informatyki śledczej.

