Przejdź do treści

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 $nosnik wskazuje na katalog docelowy na zewnętrznym nośniku, w przeciwnym wypadku należy przypisać ją poniższym poleceniem
    $nosnik = "<katalog docelowy na zewnętrznym nośniku>" # Przykład: $nosnik="F:\Sekretariat-PC"
    

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).

doskey /history > F:\Sekretariat-PC\historia_cmd.txt 2>> F:\Sekretariat-PC\error_%COMPUTERNAME%.log

Ostatnia aktualizacja artykułu: 2026-09-02.