David Solomon – Windows internals: Process and thread trobleshooting – Part 2


이전 blog 에 이어서 David Solomon 의 세미나 내용을 정리 합니다.

http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=56&PUID=00030000804624B5

 

대부분의 내용이 Process Explorer 에 대한 설명 입니다.

thread 사용률은 10ms 당 sampling 으로 수집된 결과 입니다.
processor 당 Idiel thread 가 있습니다.
thread 에는 context switch 정보가 있는데 이것은 context 가 된 횟수만을 보여주고 얼마나 오래 실행 되었는지는 보여주지 않습니다.
Process explorer 에 Context delta 가 추가 되어 context switch 값이 증가 하는 것을 보여줍니다. CPU 사용율이 10ms 의 sampleing 으로 정확한 값을 얻을 수 없기 때문에 이것을 통해서 실제로 실행된 thread 가 있는지 확인할 수 있습니다. 1초에 한번씩 delta 를 계산합니다.
특정 process 가 CPU 를 많이 사용하고 있으나 kill 하고 싶지는 않을 경우 suspond 하면 됩니다.

perfmon 에서 Processor 의 DPC time, Interrupt time 에 기록됩니다. 특정 thread 의 Processor 의 사용에 포함되지 않습니다.
task manager 에서는 Interrupt time, DPC time 을 idel process 에 포함 시킵니다.
DPC 는 kernrate 를 사용해서 어떤 드라이버에서 사용하는지 파악할 수 있습니다. XP SP2 와 2003 SP1 에서는 모든 ISR 과 DPC tracing 을 포함합니다.
Svchost, Inetinfo, Dllhost 는 mulit-component process 입니다.
Svchost 의 속성 정보 중 Thread 정보를 확인한 후 StartAddress 중 하나의 모듈정보를 보면 어떤 역할을 하는지 파악할 수 있습니다.
CallStack 을 통해서도 어떤 모듈의 어떤 함수들이 호출 되었는지를 통해 어떤 역할을 하는지 파악할 수 있습니다.

Process Explorer 를 이용한 분석 예를 설명해 주는데 강사가 PPT 를 시작하는데 60초 정도의 Hang 이 발생하였는데 PPT 가 하나의 Thread 만 사용중 이었으며 CallStack 을 확인해 보니 Network Printer 의 응답을 기다리는 중 임을 알 수 있었습니다.

Dump 생성방법
adplus, Drwtsn32 -p pid
system process 는 OS 와 Driver 의 container 입니다.
dir /s computer\c:$ 를 통해 system process 에 부하를 준 후 system process 의 정보를 확인해 srv 가 동작하는 것을 보여주었습니다.

열려있는 handle 을 보기 위해서는 oh.exe 나 openfile.exe 를 사용해야 하나 gflags.exe 를 사용해서 maintain objects list 를 켜야 합나 process explorer 를 사용하면 그냥 볼 수 있습니다. cd 를  통해서 폴더를 이동하면 이동전 폴더에 대한 핸들은 close 되고 새로운 폴더는 open 됨을 확인할 수 있습니다.
process handle 은 pagedpool 에 할당됩니다.
DLL view 는 Memory Mapped File 의 list 를 보여줍니다.

 

악성 코드인지 확인하려면 Parent process, dll, tcpip, binary 내의 string 정보 등의 정보를 확인해 보는게 좋습니다.
Startup 시점에 실행되는 binary 는 msconfig 로 확인할 수 있으나 몇가지 놓치는 부분이 있어  Autorun 으로 확인할 수 있습니다.


Skip to main content