Historia poleceń w systemie Windows¶
Powłoka PowerShell w systemie Windows zapisuje polecenia wpisywane przez użytkownika, co ma ułatwić ich powtórne wykorzystanie w przyszłości. Analiza historii wykonanych poleceń pozwala odtworzyć polecenia wykonane przez atakującego po uzyskaniu dostępu do urządzenia, w tym uruchamiane narzędzia, ścieżki oraz polecenia zmieniające konfigurację systemu.
NIE URUCHAMIAJ WYŁĄCZONEGO URZĄDZENIA
Jeżeli urządzenie było połączone z zaatakowaną domeną lub siecią, mogło zostać skompromitowane. W takim przypadku nie jest zalecane uruchomienie go przed ustaleniem zakresu incydentu. Należy uznać je za skompromitowane i poddać analizie. Uruchomienie takiego urządzenia może spowodować zaszyfrowanie danych przez szkodliwe oprogramowanie, nawet jeśli urządzenie jest odłączone od sieci wewnętrznej instytucji.
Jeżeli urządzenie nie jest objęte atakiem ransomware, samo uruchomienie systemu operacyjnego może nadpisać kluczowe dla analizy dane, takie jak dzienniki zdarzeń czy pliki usunięte przez atakującego.
Zalecanym rozwiązaniem jest przekazanie dysków z takiego urządzenia lub całego urządzenia do wyspecjalizowanej instytucji, która zabezpieczy dane znajdującie się na dyskach w sposób nie nadpisujący ich zawartości, bez uruchamiania systemu.
Domyślna lokalizacja¶
PowerShell¶
Pliki historii znajdują się w katalogu %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ profilu użytkownika, pełna ścieżka C:\Users\<użytkownik>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\. Plik przechowuje same polecenia, bez znaczników czasu.
CMD¶
Powłoka CMD nie zapisuje domyślnie historii poleceń na dysku. Historia jest przechowywana wyłącznie w pamięci bieżącej sesji i ulega usunięciu po zamknięciu okna konsoli. Jeśli okno cmd, w którym wpisywano polecenia, jest nadal otwarte, można odczytać jego historię poleceniem doskey /history uruchomionym w tym samym oknie.
Wymagania¶
- Uruchomione urządzenie
- Dostęp do konta z uprawnieniami administratora
Wymagane narzędzia¶
- Urządzenie docelowe (nośnik USB, dysk zewnętrzny), na które zostaną zabezpieczone dane.
- Protokół zabezpieczenia materiału
Opis poleceń wykorzystanych w procedurze
| Polecenie | Opis |
|---|---|
Get-ChildItem |
Polecenie programu PowerShell wypisujące elementy we wskazanym katalogu. Z parametrem -Directory zwraca wyłącznie podkatalogi z folderu C:\Users odpowiadające profilom użytkowników. |
Test-Path |
Polecenie programu PowerShell sprawdzające, czy dana ścieżka istnieje. Pozwala pominąć profile, w których katalog PSReadLine nie występuje (np. Public). |
Copy-Item |
Polecenie programu PowerShell kopiujące plik historii na nośnik docelowy. |
doskey /history |
Polecenie wypisujące historię bieżącej sesji powłoki CMD zapisaną w pamięci. Działa wyłącznie w oknie cmd, w którym wpisywano polecenia; po jego zamknięciu historia ulega usunięciu. |
2>> "$nosnik\error.log" |
Przekierowuje strumień błędów polecenia do dziennika błędów na nośniku zewnętrznym. W powłoce CMD odpowiada mu 2>> %nosnik%\error_%COMPUTERNAME%.log. |
Przed rozpoczęciem procedury należy spełnić poniższe warunki:
- Terminal powłoki powershell jest uruchomiony z uprawnieniami administratora. Najszybsza metoda uruchomienia terminala to użycie skrótu klawiszowego Win + X i wybranie Windows Terminal (Administrator) i wykonanie polecenia
powershell. - Na nośniku docelowym utworzony został katalog o nazwie badanego urządzenia np.
Sekretariat-PC. - Zmienna
$nosnikwskazuje na katalog docelowy na zewnętrznym nośniku, w przeciwnym wypadku należy przypisać ją poniższym poleceniem
Procedura¶
Zabezpieczenie historii poleceń programu PowerShell¶
Należy zabezpieczyć pliki historii PSReadLine wszystkich użytkowników urządzenia. Polecenie iteruje po katalogach profili w C:\Users, dla każdego sprawdza obecność katalogu PSReadLine i kopiuje wszystkie pliki *_history.txt na nośnik docelowy, dodając do nazwy pliku nazwę użytkownika np. jan_ConsoleHost_history.txt. Profile bez katalogu PSReadLine (np. Public) są pomijane automatycznie. Zabezpieczone pliki zapisywane są na nośniku docelowym.
foreach($u in (Get-ChildItem C:\Users -Directory -ErrorAction SilentlyContinue)){ $p = "$($u.FullName)\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine"; if(Test-Path $p){ foreach($f in (Get-ChildItem "$p\*_history.txt" -File -ErrorAction SilentlyContinue)){ Copy-Item $f.FullName "$nosnik\$($u.Name)_$($f.Name)" } } } 2>> "$nosnik\error.log"
Zabezpieczenie historii poleceń powłoki CMD¶
Polecenie doskey /history działa wyłącznie w oknie cmd, w którym wpisywano polecenia; po jego zamknięciu historia ulega usunięciu. Zmienna $nosnik nie jest dostępna w powłoce CMD, dlatego w poleceniu należy podać pełną ścieżkę nośnika docelowego (w przykładzie F:\Sekretariat-PC).
Ostatnia aktualizacja artykułu: 2026-09-02.