Menggunakan PowerShell untuk Mengumpulkan Informasi Insiden

PowerShell adalah alat otomatisasi yang cukup umum yang sering digunakan oleh pengembang malware dan pakar keamanan informasi.
Artikel ini akan membahas opsi menggunakan PowerShell untuk mengumpulkan data dari perangkat akhir dari jarak jauh saat merespons insiden keamanan informasi. Untuk melakukan ini, Anda perlu menulis skrip yang akan berjalan di perangkat akhir dan kemudian akan ada penjelasan rinci tentang skrip ini.

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
		}

	}

}

Untuk memulai, buat sebuah fungsi CSIRT, yang akan mengambil argumen - jalur untuk menyimpan data yang diterima. Karena sebagian besar cmdlet berfungsi di Powershell v5, versi PowerShell telah diperiksa untuk pengoperasian yang benar.

function CSIRT{
		
param($path)# ΠΏΡ€ΠΈ запускС скрипта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для сохранСния
if ($psversiontable.psversion.major -ge 5)

Untuk kemudahan navigasi melalui file yang dibuat, dua variabel diinisialisasi: $tanggal dan $Komputer, yang akan diberi nama komputer dan tanggal saat ini.

$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"

Kami mendapatkan daftar proses yang berjalan atas nama pengguna saat ini sebagai berikut: buat variabel $process, tetapkan cmdlet get-ciminstance dengan kelas win32_process. Dengan menggunakan cmdlet Select-Object, Anda dapat menambahkan parameter output tambahan, dalam kasus kami ini adalah parentprocessid (PPID proses induk), tanggal pembuatan (tanggal pembuatan proses), diproses (ID proses PID), nama proses (nama proses), baris perintah ( jalankan perintah).

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

Untuk mendapatkan daftar semua koneksi TCP dan UDP, buat variabel $netTCP dan $netUDP dengan menetapkan masing-masing cmdlet Get-NetTCPConnection dan Get-NetTCPConnection.

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

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

Penting untuk mengetahui daftar tugas dan tugas yang direncanakan. Untuk melakukan ini, kami menggunakan cmdlet get-ScheduledTask dan Get-ScheduledJob. Mari kita berikan variabel $task dan $job kepada mereka, karena Awalnya, ada banyak tugas terjadwal di sistem, lalu untuk mengidentifikasi aktivitas jahat, ada baiknya menyaring tugas terjadwal yang sah. Cmdlet Select-Object akan membantu kita dalam hal ini.

$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

Dalam sistem file NTFS ada yang namanya aliran data alternatif (ADS). Ini berarti bahwa file di NTFS secara opsional dapat dikaitkan dengan beberapa aliran data dengan ukuran berapa pun. Dengan menggunakan ADS, Anda dapat menyembunyikan data yang tidak akan terlihat melalui pemeriksaan sistem standar. Hal ini memungkinkan untuk memasukkan kode berbahaya dan/atau menyembunyikan data.

Untuk menampilkan aliran data alternatif di PowerShell, kita akan menggunakan cmdlet get-item dan alat aliran Windows bawaan dengan simbol * untuk melihat semua kemungkinan aliran, untuk ini kita akan membuat variabel $ADS.

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

Akan berguna untuk mengetahui daftar pengguna yang masuk ke sistem; untuk ini kita akan membuat variabel $user dan menugaskannya ke eksekusi program quser.

$user = quser

Penyerang dapat membuat perubahan pada autorun untuk mendapatkan pijakan di sistem. Untuk melihat objek startup, Anda dapat menggunakan cmdlet Get-ItemProperty.
Mari kita buat dua variabel: $runUser - untuk melihat startup atas nama pengguna dan $runMachine - untuk melihat startup atas nama komputer.

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

Agar semua informasi ditulis ke file yang berbeda, kami membuat array dengan variabel dan array dengan nama file.


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

Dan menggunakan for loop, data yang diterima akan ditulis ke file.

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

Setelah menjalankan skrip, 9 file teks akan dibuat berisi informasi yang diperlukan.

Saat ini, para profesional keamanan siber dapat menggunakan PowerShell untuk memperkaya informasi yang mereka perlukan untuk menyelesaikan berbagai tugas dalam pekerjaan mereka. Dengan menambahkan skrip ke startup, Anda bisa mendapatkan beberapa informasi tanpa menghapus dump, gambar, dll.

Sumber: www.habr.com

Tambah komentar