สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

ทำความเข้าใจกับ Windows Process

 

ใน post นี้เราจะพูดถึง windows process ต่างๆที่เกิดขึ้นเมื่อเราเปิดเครื่องขึ้นมา โดย Windows จะมี process ในการจัดการส่วนต่างๆของเครื่องมากมาย ซึ่งหากเราไม่ทราบถึงรายละเอียดเหล่านั้นก็อาจจะทำให้ไม่สามารถตรวจสอบการทำ งานของ Windows ได้ดีมากพอนั่นเอง มาดูกันว่า Windows Process ที่ว่านั้นมีอะไรกันบ้างครับ

Idle and System

  • ถูกสร้างโดย ntoskrnl.exe ผ่าน process manager function, ซึ่งใช้สำหรับสร้างและทำลาย processes และ threads.
  • ไม่มี parent processes
  • จะได้ PID เป็น 4
  • จากนั้นจะสร้าง smss.exe
  • หากเราดูผ่าน Process Manager หรือ Hacker Process เราควรจะเห็นส่วนนี้รันเพียงแค่หนึ่ง system process เท่านั้น

SMSS – Session Manager

  • เป็น user mode process อันแรก
  • Parent process คือ System
  • Base Priority เป็น 11
  • Username: NT AUTHORITY\SYSTEM
  • ใช้สำหรับลบไฟล์/rename
  • Loads known dlls
  • Runs จาก %systemroot%\System32\smss.exe
  • สร้าง session 0 (OS services)
  • สร้าง session 1 (User session)
  • สร้าง csrss และ winlogon จากนั้นก็จบไป, ทำให้ csrss และ winlogon ไม่มี parent process และทั้งคู่มี session ids เป็น 1
  • Runs ภายใน session 0
  • ควรจะมี smss.exe process แค่ process เดียวในแต่ละครั้ง.
  • สามารถมี sessions มากไปกว่านี้ได้ หากมี users logged on เข้ามาในระบบเพิ่ม.

CSRSS.EXE – Client/Server Run

  • เป็น Windows subsystem process.
  • Base Priority คือ 13
  • Runs จาก %SystemRoot%\system32\csrss.exe
  • Username: NT AUTHORITY\SYSTEM
  • ใช้สำหรับสร้าง/ลบ processes และ threads, Temp files, etc.
  • ใน Windows XP มันถูกใช้เพื่อเขียน text based console windows. หากเป็น Windows 7, จะมี conhost process ในการทำงานนั้น เช่น cmd.exe
  • One csrss process per session
  • ชื่อนี้มักจะถูกใช้โดย malwareเพื่อซ่อนอยู่ใน systems (CSSRS.EXE, CSRSSS.EXE, etc.)
  • Runs ใน session 0

WININIT.EXE – Windows Initialization Process

  • เป็น Parent process ของ services.exe (SCM), lsass.exe และ lsm.exe
  • สร้างโดย smss.exe, แต่เมื่อ smss.exe ปิดตัวไปจะไม่มี Parent Process.
  • Base Priority คือ 13
  • Username: NT AUTHORITY\SYSTEM
  • Runs จาก %SystemRoot%\system32\wininit.exe
  • ทำในส่วน user-mode initialization tasks
  • สร้าง %windir%\temp
  • Runs ใน session 0

SERVICES.EXE – Service Control Manager

  • เป็น Child process ของ WININIT.EXE
  • เป็น Parent  process ของ services เช่น svchost.exe, dllhost.exe, taskhost.exe, spoolsv.exe, etc. Services ต่างๆที่จะรันถูกกำหนดใน SYSTEM\CurrentControlSet\Services
  • Runs จาก %SystemRoot%\System32\wininit.exe
  • Username: NT AUTHORITY\SYSTEM
  • Base Priority คือ 9
  • Loads database ของ services ไปไว้ใน memory
  • Runs ใน session 0
  • services.exe process จะมีแค่ process เดียวเท่านั้น

LSASS.EXE – Local Security Authority

  • เป็น Child process ของ WININIT.EXE
  • lsass.exe process จะมีแค่ process เดียวเท่านั้น
  • Runs จาก %SystemRoot%\System32\lsass.exe
  • ดูแลเกี่ยวกับ local security policy รวมถึงการจัดการ users ในการ login, password policies, รวมถึงการเขียน security event log, etc.
  • มักจะเป็นเป้าหมายของ malware ในการ dump passwords. แถมมีการสร้างชื่อมาให้คล้ายกับ lsass.exe เพื่อหลบซ่อนการตรวจจับของ malware อีกด้วย mimicked by malware to hide on a system (lass.exe, lssass.exe, lsasss.exe, etc.). These “fake” names will not be a children of wininit.exe.
  • Base Priority of 9
  • Username: NT AUTHORITY\SYSTEM
  • Runs ใน session 0
  • ไม่มี child processes

SVCHOST.EXE – Service Hosting Process

  • svchost.exe สามารถทำงานหรือสร้างขึ้นมาได้หลาย process
  • Runs จาก %SystemRoot%\System32\svchost.exe
  • Username: เป็นไปได้ 3 อย่างคือ: NT AUTHORITY\SYSTEM, LOCAL SERVICE, หรือ NETWORK SERVICE
  • มี parent process คือ services.exe
  • Base Priority คือ 8
  • มักมีการสร้างชื่อมาให้คล้าย (scvhost, svch0st, etc.) แต่จะไม่ได้เป็น child ของ services.exe.
  • Command Line: svchost.exe -k <name>
  • -k <name> จะต้องเป็นค่าที่อยู่ใน registry Software\Microsoft\Windows NT\CurrentVersion\Svchost
  • บ่อยครั้งที่เมื่อ malware ใช้ svchost.exe ไปโหลด malicious service มักจะไม่มีการใช้ -k command line parameters และมักจะทำงานภายใต้ username ซึ่งจะไม่ตรงกับ 3 username ที่บอกไปก่อนหน้านี้
  • มักจะทำงานใน session 0

LSM.EXE – Load Session Manager Service

  • จัดการเกี่ยวกับ server sessions ใน local machine.ส่ง requests ไปยัง smss.exe เพื่อสร้าง sessions ใหม่.
  • เป็น Child process ของ wininit.exe
  • จะไม่มีการสร้าง child processes
  • เป็นตัวรับ logon/off, การสร้าง shell และการลบ shell , การเชื่อมต่อ/การตัดการเชื่อมต่อ​จาก session, และ lock/unlock desktop
  • Runs จาก %systemroot%\System32\lsm.exe
  • Base Priority คือ 8
  • Username: NT AUTHORITY\SYSTEM
  • Runs ใน session 0

WINLOGON.EXE – Windows Logon Process

  • ไม่มี parent process
  • สามารถมี child process เป็น LogonUI หากมีการใช้งาน smartcard, etc. ในการ authenticate
  • LogonUI จะถูก terminate เมื่อ user ใส่รหัสผ่านเรียบร้อยแล้ว. เมื่อรหัสผ่านถูกใส่เข้ามาจะถูกนำไปตรวจสอบโดยส่งไปยัง LSASS และจากนั้นจะถูกนำไปตรวจสอบกับ Active Directory หรือ SAM (the registry hive SAM), ซึ่งเก็บ local users และ group information.
  • Base Priority คือ 13
  • Runs ใน session 1
  • จัดการเกี่ยวกับ interactive user logons/logoffs เมื่อ SAS keystroke combination นั้นถูกกด (Ctrl+Alt+Delete)
  • Loads Userinit ใน Software\Microsoft\Windows NT\CurrentVersion\Winlogon
  • ค่า userinit value ใน registry ควรจะเป็น: Userinit.exe, . บางครั้ง Malware จะเพิ่ม values เข้าไปใน key นี้, เพื่อจะให้ load malware หลังจากการ login สำเร็จ
  • Userinit.exe จะออกทันทีหลังจากทำงานเสร็จ ดังนั้นเราจะไม่เห็น process นี้รันอยู่
  • Userinit จะเป็นตัวสร้าง user environment.รวมถึงการรัน GPOs และ logon scripts.
  • จะมีการรัน Shell ตามที่กำหนดใน registry Software\Microsoft\Windows NT\CurrentVersion\Winlogon.ซึ่งค่าที่ควรจะเป็นคือ Explorer.exe. Malware มักจะใช้ส่วนนี้เพื่อทำการ execute malware โดยการเพิ่มค่าของ malware เข้าไปใน registry นี้

Explorer.exe – AKA Windows Explorer

  • ไม่มี parent process
  • ค่าของ “Explorer.exe” จะถูกเก็บไว้ใน shell value ใน registry. โดย registry จะอยู่ที่: Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
  • Base Priority คือ 8
  • Username: user นั้นๆที่ login เข้าสู่ระบบ.
  • Runs จาก %Systemroot%\Explorer.exe
  • จะมี child processes มากมายต่างที่ user นั้นทำงาน
  • หลายๆคนจะรู้จักในชื่อของ “Windows Explorer”
  • Process นี้มักจะเป็นเป้าหมายโดย malware. Malware มักจะ inject เข้ามาใน process นี้. ข้อสังเกตุข้อนึงว่าติด Malware คือถ้า Explorer.exe มีการเชื่อมต่อออกไปยัง Internet ข้างนอก. (จริงๆมีอีกหลายๆข้อสังเกตุ แต่ข้อสังเกตุง่ายสุดก็ตามนั้นครับ)

สรุปว่าข้อสังเกตุที่จะมองว่าเป็นเรื่องความผิดปกติที่จะติด malware หรือไม่มีดังนี้

  • Check the parent/child และความสัมพันธ์ของ processes.
  • Check users names ของ processes นั้นๆ
  • Check command line parameters ของแต่ละ processes ที่ processes เหล่านั้นใช้
  • Check digital signatures ของ processes
  • Check base priorities ของ processes
  • Check location ว่ารันจาก path ไหน
  • Check ชื่อ processes
  • ตรวจสอบ memory analysis เพื่อหา hidden และ/หรือ injected process. malware บางตัวสามารถซ่อน processes โดยการไม่ยุ่งเกี่ยวกับ process อื่นใดๆ. Memory analysis เป็นส่วนที่สำคัญในการหา malware เหล่านั้น
  • เมื่อเราเริ่มคล่องตัวในการตรวจสอบขั้นพื้นฐานเหล่านี้แล้ว,ให้ขุดลึก เข้าไปอีกและตรวจสอบว่า modules อะไรที่ถูก loaded ในแต่ละ process.
  • Check และมองดูว่า processes ใดๆควรเชื่อมต่อไปยัง internet หรือไม่
  • Check process privileges
  • หาก wscript.exe process นั้นมีการรันอยู่ ควรตรวจสอบ command line ของการรันนั้นๆ.
  • ควรสืบและตั้งข้อสงสัยเกี่ยวกับ processes ที่ทำงานภายใน %temp%, %appdata%, %localappdata%, recycle bin, etc.
  • หาก rundll32.exe นั้นมีการรันอยู่ ควรตรวจสอบ command line ของการรันนั้นๆ.
  • user applications ส่วนใหญ่อย่าง Adobe, Web browsers, etc. ไม่ควรจะมีการสร้าง child processes อย่าง cmd.exe. ถ้าพบเหตุการณ์เหล่านั้น, เราควรสืบว่าเกิดขึ้นได้ยังไง
  • Core Windows processes ไม่ควรติดต่อไปยัง internet. ถ้าหากเจอเหตุการณ์แบบนั้นควรดูให้ลึกขึ้น มองหา URLs/IPs ที่ผิดปกติ น่าจะเป็น malware URL, C&C Server โดยการเช็ค process strings และอื่นๆ

Reference:: http://www.sysforensics.org/2014/01/know-your-windows-processes/
https://www.techsuii.com/2016/01/04/what-is-the-meaning-of-main-process-of-windows/