
Znowu procesy tym razem w innej postaci. Process Monitor w skrócie Procmon szczegółowo rejestruje aktywności wykonywane przez dany proces. Słowo szczegółowo nie jest tutaj żadnym przypadkiem, ponieważ na liście do późniejszej analizy zobaczymy kilkaset aktywności zarejestrowanych w ciągu 1/10 sekundy.

Zdarzenia rejestrowane w Procmon to:

- Operacje rejestru, takie jak tworzenie, wyliczanie, odpytywanie lub usuwanie kluczy i wartości.
- Operacje w lokalnym lub zdalnym systemie plików, włącznie z systemami lub urządzeniami dołączonymi w trakcie działania Procmon.
- Aktywność związana z protokołami UDP i TCP
- Tworzenie procesu, uruchomienie procesu, tworzenie wątku, zakończenie wątku, zakończenie procesu oraz ładowanie obrazów wykonywalnych do przestrzeni adresowej procesu.
- Generowanie i rejestrowanie zdarzenie dla każdego procesu i wątku w systemie, przechwytując czas trybu jądra i użytkownika, użycie pamięci i przełączenia kontekstu od czasu poprzedniego zdarzenia profilowania.
Domyślnie po uruchomieniu narzędzia mamy wyświetlane takie kolumny jak:
- Time of Day: sygnatura czasowa zdarzenia
- Process Name: nazwa procesu
- PID: identyfikator procesu
- Operation: nazwa niskopoziomowa operacji wraz z ikoną
- Path: ścieżka do obiektu
- Result: wynik operacji
- blank: operacja jeszcze trwa
- SUCCESS: operacja zakończona sukcesem
- ACCESS DENIED: operacja nie powiodła się, gdyż deskryptor zabezpieczeń obiektu nie daje wywołującemu prawa do żądanego działania
- SHARING VIOLATION: operacja nie powiodła się ponieważ obiekt nie pozwala na współużytkowanie
- PRIVILEGE NOT HELD: operacja nie powiodła się ze względu na brak przywileju
- NAME COLLISION: wywołujący próbował utworzyć obiekt, który już istnieje
- NAME NOT FOUND: wywołujący próbuje, który już nie istnieje
- PATH NOT FOUND: jw.
- NO SUCH FILE: jw.
- NAME INVALID: wywołujący żąda obiektu o nieprawidłowej nazwie
- NO MORE ENTRIES: koniec wpisów
- NO MORE FILES: koniec plików
- END OF FILE: wywołujący odczytał plik do końca
- REPARSE: wywołujący zażądał obiektu, który jest połączony z innym obiektem
- NOT REPARSE POINT: żądany obiekt nie łączy się z innym obiektem
- FAST IO DISALLOWED: wskazuje, że niskopoziomowy zoptymalizowany mechanizm nie jest dostępny dla żądanego obiektu systemu plików
- FILE LOCKED WITH ONLY READERS: plik tylko do odczytu
- FILE LOCKED WITH WRITERS: plik w którym przynajmniej jeden użytkownik może coś zapisać
- IS DIRECTORY: obiekt jest katalogiem
- INVALID DEVICE REQUEST: wskazane żądanie nie jest poprawną operacją dla urządzenia docelowego
- INVALID PARAMETER: nieprawidłowy parametr
- NOT GRANTED: żądana blokada dostępu do pliku nie może być przyznana z powodu innych istniejących blokad
- CANCELLED: żądanie I/O zostało anulowane
- CANNOT DELETE: obiektu nie można usunąć
- NOT EMPTY: kontener nie jest pusty
- BAD NETWORK PATH: nie można zlokalizować ścieżki sieciowej
- BAD NETWORK NAME: nie można znaleźć udziału w sieci
- MEDIA WRITE PROTECTED: ochrona przed zapisem
- KEY DELETED: klucz oznakowany do usunięcia
- NOT IMPLEMENTED: brak implementacji
- Detail: dodatkowe szczegóły operacji

Dodatkowo możemy wybrać takie kolumny jak:
- Sequence Number: numer sekwencyjny
- Event Class: klasa zdarzenia
- Category: kategoria
- Relative Time: czas względny, czas wystąpienia operacji od chwili uruchomienia Procmon
- Duration time: czas trwania operacji
- Completion Time: czas zakończenia
- User Name: nazwa użytkownika, w którego kontekście wykonywany jest dany proces
- Session ID: identyfikator sesji
- Integrity: poziom integralności
- Thread ID: identyfikator wątku
- Virtualized: sygnalizuje, czy dla procesu wykonującego operację włączona jest wirtualizacja UAC
Po dwukrotnym kliknięciu na interesującym nas obiekcie możemy mieć wgląd na więcej szczegółów.
- Karta Event została podzielona na dwie części. Pierwsza pokazuje datę i czas, wątek, klasę, operację wynik, ścieżkę oraz czas trwania. Druga część przedstawia szczegóły obiektu w bardziej czytelny sposób
- Karta Process zawiera szczegółowe informacje o procesie związanym ze zdarzeniem w chwili wystąpienia tego zdarzenia.
- Karta Stack wyświetla stos wywołań wątku z chwili zarejestrowania zdarzenia. Stos może być użyteczny dla ustalenia przyczyny wystąpienia zdarzenia i zidentyfikowania komponentu odpowiedzialnego za to zdarzenie.



Aby wyszukać interesujące nas zdarzenie wystarczy z paska narzędzi wybrać ikonkę lornetki i wpisać frazę w polu do tego przystosowanym. Procmon zaznaczy najbliższe zdarzenie zawierające wyszukiwaną przez nas frazę. Następnie możemy wybrać opcje „Jump to Object” co przeniesie nas do pliku lub wpisu w rejestrze. Możemy również po kliknięciu prawym klawiszem myszy wybrać opcję „Highlight” dzięki czemu na liście zaznaczone zostaną wszystkie zdarzenia odwołujące się do wybranego procesu.
Process Monitor jak zdążyliście zauważyć, zasypuje nas setkami tysięcy zdarzeń. Możemy skorzystać z filtrów, które wyłuskają dla nas tylko te najważniejsze w danym momencie zdarzenia. Po wybraniu opcji „Filter” możemy skorzystać z reguł które dostosujemy według potrzeb, a następnie zapisaną regułę możemy włączać lub wyłączać w dowolnym momencie.

Process Tree wyświetla wszystkie procesy, do których odwołuje się bieżący (aktywny lub załadowany z pliku) ślad w postaci hierarchicznej, odwzorowującej ich zależności rodzic-potomek, podobnie jak w widoku drzewa procesów w narzędziu Procexp.

Najważniejszą z punktu widzenia administratora sieci lub osoby odpowiedzialnej za prawidłowe działanie komputerów w organizacji jest możliwość zapisu logów Procmon-a. Zapisany plik może zostać do nas przesłany i przeanalizowany bez konieczności łączenia się z „problematyczną” maszyną. Dostępne mamy trzy formaty zapisu: PML natywny format pliku Procmona, zachowujący wszystkie przechwycone dane w całej szczegółowości, w tym informacje o stosie i modułach, CSV oraz XML.

Będąc przy analizie należy wspomnieć o narzędziach udostępnionych przez Procmon. W zakładce „Tools” w menu programu znajdziemy:
Process Activity Summary: podsumowanie aktywności procesów, wyświetla tabelę ze wszystkimi procesami, dla których istnieją zarejestrowane dane przy zastosowaniu bieżącego filtru.

File Summary: podsumowanie plików, agreguje informacje o wszystkich operacjach dotyczących systemu plików wyświetlanych w bieżącym filtrze i grupuje wyniki według ścieżek, folderów i rozszerzeń nazw plików na poszczególnych kartach okna.

Registry Summary: podsumowanie rejestru wylicza wszystkie ścieżki rejestru, do których odwołują się zarejestrowane operacje, w formie tabeli.

Stack Summary: podsumowanie stosu, zbiera wszystkie ślady stosu dla każdego zarejestrowanego zdarzenia, identyfikuje podobieństwa i rozbieżności pomiędzy nimi i prezentuje je w formie rozwijanych drzew.

Network Summary: podsumowanie sieci, wylicza wszystkie punkty końcowe TCP i UDP oraz porty występujące w przefiltrowanym śladzie, wraz z odpowiednimi liczbami połączeń, rozłączeń, operacji nadawania i odbioru.

Cross Reference Summary: podsumowanie odwołań, wylicza wszystkie ścieżki występujące w bieżącym filtrze, do których odwoływał się więcej niż jeden proces. W moim przypadku lista jest pusta.

Count Values Occurrences: zliczanie wystąpień wartości, wyświetli wszystkie różne wartości wybranego atrybutu oraz liczbę zdarzeń zawierających daną wartość

Na tym zakończymy omawianie Process Monitor-a. Podobnie jak w poprzednich wpisach zachęcamy Was do zagłębienia się w szczegóły czytając książkę 🙂 Zapraszamy do pakietu PsTools.