การใช้ PowerShell เพื่อรวบรวมข้อมูลเหตุการณ์

PowerShell เป็นเครื่องมืออัตโนมัติทั่วไปที่ทั้งนักพัฒนามัลแวร์และผู้เชี่ยวชาญด้านความปลอดภัยของข้อมูลมักใช้
บทความนี้จะกล่าวถึงตัวเลือกในการใช้ PowerShell เพื่อรวบรวมข้อมูลจากอุปกรณ์ปลายทางจากระยะไกลเมื่อตอบสนองต่อเหตุการณ์ด้านความปลอดภัยของข้อมูล ในการดำเนินการนี้ คุณจะต้องเขียนสคริปต์ที่จะทำงานบนอุปกรณ์ปลายทาง จากนั้นจะมีคำอธิบายโดยละเอียดของสคริปต์นี้

function CSIRT{
param($path)
if ($psversiontable.psversion.major -ge 5)
	{
	$date = Get-Date -Format dd.MM.yyyy_hh_mm
	$Computer = $env:COMPUTERNAME
	New-Item -Path $path$computer$date -ItemType 'Directory' -Force | Out-Null
	$path = "$path$computer$date"

	$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname,
	processid, commandline, parentprocessid

	$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state
	
	$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state

	$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname|
	where author -notlike '*Майкрософт*' | where author -ne $null |
	where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*'

	$job = Get-ScheduledJob

	$ADS =  get-item * -stream * | where stream -ne ':$Data'

	$user = quser

	$runUser = Get-ItemProperty "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"

	$runMachine =  Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

	$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
	$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
	"ScheduledJob", "AlternativeDataStream"


	for ($w = 0; $w -lt $array.count; $w++){
		$name = $arrayName[$w]
		$array[$w] >> $path$name.txt
		}

	}

}

ในการเริ่มต้น ให้สร้างฟังก์ชัน ส่วนขยาย CSIRTซึ่งจะใช้อาร์กิวเมนต์ - เส้นทางในการบันทึกข้อมูลที่ได้รับ เนื่องจาก cmdlets ส่วนใหญ่ทำงานใน Powershell v5 เวอร์ชัน PowerShell จึงได้รับการตรวจสอบการทำงานที่ถูกต้อง

function CSIRT{
		
param($path)# при запуске скрипта необходимо указать директорию для сохранения
if ($psversiontable.psversion.major -ge 5)

เพื่อความสะดวกในการนำทางผ่านไฟล์ที่สร้างขึ้น ตัวแปรสองตัวจะถูกเตรียมใช้งาน: $date และ $Computer ซึ่งจะกำหนดชื่อคอมพิวเตอร์และวันที่ปัจจุบัน

$date = Get-Date -Format dd.MM.yyyy_hh_mm
$Computer = $env:COMPUTERNAME
New-Item -Path $path$computer$date –ItemType 'Directory' -Force | Out-Null 
$path = "$path$computer$date"

เราได้รับรายการกระบวนการที่ทำงานอยู่ในนามของผู้ใช้ปัจจุบันดังนี้: สร้างตัวแปร $process โดยกำหนด get-ciminstance cmdlet ด้วยคลาส win32_process การใช้ Select-Object cmdlet คุณสามารถเพิ่มพารามิเตอร์เอาต์พุตเพิ่มเติมได้ ในกรณีของเรา สิ่งเหล่านี้จะเป็น parentprocessid (PPID กระบวนการหลัก), วันที่สร้าง (วันที่สร้างกระบวนการ), ประมวลผล (ID กระบวนการ PID), ชื่อกระบวนการ (ชื่อกระบวนการ), commandline ( เรียกใช้คำสั่ง)

$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessid

หากต้องการรับรายการการเชื่อมต่อ TCP และ UDP ทั้งหมด ให้สร้างตัวแปร $netTCP และ $netUDP โดยกำหนด Get-NetTCPConnection และ Get-NetTCPConnection cmdlets ตามลำดับ

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

การค้นหารายการงานและการมอบหมายที่วางแผนไว้เป็นสิ่งสำคัญ เมื่อต้องการทำเช่นนี้ เราใช้ cmdlets get-ScheduledTask และ Get-ScheduledJob มากำหนดตัวแปร $task และ $job ให้พวกเขากันดีกว่า เริ่มแรก มีงานที่กำหนดเวลาไว้จำนวนมากในระบบ ดังนั้นเพื่อระบุกิจกรรมที่เป็นอันตราย จึงควรกรองงานที่กำหนดเวลาไว้ที่ถูกต้องออก Select-Object cmdlet จะช่วยเราในเรื่องนี้

$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname| where author -notlike '*Майкрософт*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task исключает авторов, содержащих “Майкрософт”, “Microsoft”, “*@%systemroot%*”, а также «пустых» авторов
$job = Get-ScheduledJob

ในระบบไฟล์ NTFS มีสิ่งที่เรียกว่าสตรีมข้อมูลทางเลือก (ADS) ซึ่งหมายความว่าไฟล์ใน NTFS สามารถเลือกเชื่อมโยงกับสตรีมข้อมูลหลายขนาดตามต้องการได้ เมื่อใช้ ADS คุณสามารถซ่อนข้อมูลที่ไม่สามารถมองเห็นได้ผ่านการตรวจสอบระบบมาตรฐาน ทำให้สามารถแทรกโค้ดที่เป็นอันตรายและ/หรือซ่อนข้อมูลได้

ในการแสดงสตรีมข้อมูลทางเลือกใน PowerShell เราจะใช้ get-item cmdlet และเครื่องมือสตรีม Windows ในตัวที่มีสัญลักษณ์ * เพื่อดูสตรีมที่เป็นไปได้ทั้งหมด สำหรับสิ่งนี้ เราจะสร้างตัวแปร $ADS

$ADS = get-item * -stream * | where stream –ne ':$Data' 

มันจะมีประโยชน์ในการค้นหารายชื่อผู้ใช้ที่เข้าสู่ระบบ สำหรับสิ่งนี้ เราจะสร้างตัวแปร $user และกำหนดให้กับการทำงานของโปรแกรม quser

$user = quser

ผู้โจมตีสามารถทำการเปลี่ยนแปลงการทำงานอัตโนมัติเพื่อตั้งหลักในระบบ เมื่อต้องการดูวัตถุเริ่มต้น คุณสามารถใช้ Get-ItemProperty cmdlet
มาสร้างตัวแปรสองตัวกัน: $runUser - เพื่อดูการเริ่มต้นในนามของผู้ใช้ และ $runMachine - เพื่อดูการเริ่มต้นในนามของคอมพิวเตอร์

$runUser = Get-ItemProperty 
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty 
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

เพื่อให้ข้อมูลทั้งหมดถูกเขียนลงในไฟล์ต่างๆ เราจึงสร้างอาร์เรย์ที่มีตัวแปรและอาร์เรย์ที่มีชื่อไฟล์


$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect" "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"

และเมื่อใช้ for loop ข้อมูลที่ได้รับจะถูกเขียนลงไฟล์

for ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

หลังจากรันสคริปต์แล้ว ไฟล์ข้อความ 9 ไฟล์จะถูกสร้างขึ้นซึ่งมีข้อมูลที่จำเป็น

ปัจจุบัน ผู้เชี่ยวชาญด้านความปลอดภัยทางไซเบอร์สามารถใช้ PowerShell เพื่อเพิ่มข้อมูลที่จำเป็นสำหรับการแก้ปัญหางานต่างๆ ในงานของตนได้ ด้วยการเพิ่มสคริปต์ในการเริ่มต้น คุณสามารถรับข้อมูลบางอย่างได้โดยไม่ต้องลบดัมพ์ รูปภาพ ฯลฯ

ที่มา: will.com

เพิ่มความคิดเห็น