Ngagunakeun PowerShell pikeun ngumpulkeun Inpormasi Kajadian

PowerShell mangrupikeun alat otomatisasi anu cukup umum anu sering dianggo ku pamekar malware sareng spesialis kaamanan inpormasi.
Tulisan ieu bakal ngabahas pilihan ngagunakeun PowerShell pikeun ngumpulkeun data jarak jauh tina alat tungtung nalika ngaréspon kana insiden kaamanan inpormasi. Jang ngalampahkeun ieu, anjeun kedah nyerat naskah anu bakal dijalankeun dina alat tungtung teras bakal aya pedaran lengkep ngeunaan naskah ieu.

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
		}

	}

}

Pikeun ngamimitian, jieun hiji fungsi ekstensi CSIRT, anu bakal nyandak argumen - jalur pikeun ngahemat data anu ditampi. Kusabab kanyataan yén kalolobaan cmdlet tiasa dianggo dina Powershell v5, versi PowerShell dipariksa pikeun operasi anu leres.

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

Pikeun ngagampangkeun navigasi ngaliwatan file anu diciptakeun, dua variabel diinisialisasi: $date sareng $Computer, anu bakal ditugaskeun nami komputer sareng tanggal ayeuna.

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

Simkuring meunang daptar prosés ngajalankeun atas nama pamaké ayeuna kieu: nyieun variabel $ prosés, assigning eta teh get-ciminstance cmdlet kalawan win32_process kelas. Ngagunakeun Pilih-Objék cmdlet, Anjeun bisa nambah parameter kaluaran tambahan, bisi urang ieu bakal parentprocessid (prosés indungna ID PPID), creationdate (prosés tanggal kreasi), olahan (prosés ID PID), processname (prosés ngaran), commandline ( ngajalankeun paréntah).

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

Pikeun kéngingkeun daptar sadaya sambungan TCP sareng UDP, jieun variabel $ netTCP sareng $ netUDP ku cara masihan aranjeunna masing-masing Get-NetTCPConnection sareng Get-NetTCPConnection cmdlet.

$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 pikeun milarian daptar tugas sareng tugas anu direncanakeun. Jang ngalampahkeun ieu, kami nganggo get-ScheduledTask sareng Get-ScheduledJob cmdlet. Hayu urang napelkeun aranjeunna variabel $ tugas jeung $ pakasaban, sabab Mimitina, aya seueur tugas anu dijadwalkeun dina sistem, teras pikeun ngaidentipikasi kagiatan jahat kedah nyaring tugas anu dijadwalkeun anu sah. Cmdlet Pilih-Objék bakal ngabantosan urang ku ieu.

$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

Dina sistem file NTFS aya hiji hal kayaning alternatip data streams (ADS). Ieu ngandung harti yén hiji file dina NTFS bisa optionally pakait sareng sababaraha aliran data tina ukuran sawenang. Nganggo ADS, anjeun tiasa nyumputkeun data anu henteu katingali ku pamariksaan sistem standar. Hal ieu ngamungkinkeun pikeun nyuntik kode jahat jeung/atawa nyumputkeun data.

Pikeun ningalikeun aliran data alternatif dina PowerShell, kami bakal nganggo cmdlet get-item sareng alat aliran Windows anu diwangun kalayan simbol * pikeun ningali sadaya aliran anu mungkin, pikeun ieu kami bakal nyiptakeun variabel $ ADS.

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

Mangpaat pikeun manggihan daptar pamaké nu asup kana sistem; pikeun ieu kami bakal nyieun variabel $pamaké sarta nangtukeun kana palaksanaan program quser.

$user = quser

Panyerang tiasa ngadamel parobihan kana autorun pikeun kéngingkeun tapak dina sistem. Pikeun ningali objék ngamimitian, anjeun tiasa nganggo cmdlet Get-ItemProperty.
Hayu urang jieun dua variabel: $runUser - pikeun ningali ngamimitian atas nama pangguna sareng $runMachine - pikeun ningali ngamimitian atas nama komputer.

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

Sangkan sagala informasi ditulis kana file béda, urang nyieun hiji Asép Sunandar Sunarya kalawan variabel sarta Asép Sunandar Sunarya kalawan ngaran file.


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

Sareng nganggo loop for, data anu ditampi bakal diserat kana file.

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

Saatos ngalaksanakeun naskah, 9 file téks bakal didamel ngandung inpormasi anu diperyogikeun.

Kiwari, profésional cybersecurity tiasa nganggo PowerShell pikeun ngabeungharan inpormasi anu diperyogikeun pikeun ngarengsekeun rupa-rupa pancén dina padamelan na. Ku nambahkeun skrip pikeun ngamimitian, Anjeun bisa meunangkeun sababaraha informasi tanpa miceun dumps, gambar, jsb.

sumber: www.habr.com

Tambahkeun komentar