PowerShellin käyttö tapaustietojen keräämiseen

PowerShell on melko yleinen automaatiotyökalu, jota käyttävät usein sekä haittaohjelmien kehittäjät että tietoturvaasiantuntijat.
Tässä artikkelissa käsitellään PowerShellin käyttöä tietojen etäkeräämiseen loppulaitteista, kun vastataan tietoturvahäiriöihin. Tätä varten sinun on kirjoitettava komentosarja, joka suoritetaan päätelaitteessa, ja sitten on yksityiskohtainen kuvaus tästä skriptistä.

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
		}

	}

}

Aloita luomalla funktio CSIRT-laajennus, joka ottaa argumentin - polun vastaanotettujen tietojen tallentamiseen. Koska useimmat cmdletit toimivat Powershell v5:ssä, PowerShell-version toiminta tarkistettiin.

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

Luoduissa tiedostoissa navigoinnin helpottamiseksi kaksi muuttujaa alustetaan: $date ja $Computer, joille annetaan tietokoneen nimi ja nykyinen päivämäärä.

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

Saamme luettelon käynnissä olevista prosesseista nykyisen käyttäjän puolesta seuraavasti: luo $process-muuttuja ja määritä sille get-ciminstance-cmdlet luokan win32_process kanssa. Select-Object-cmdletillä voit lisätä muita tulosparametreja, meidän tapauksessamme ne ovat parentprocessid (emoprosessin tunnus PPID), createdate (prosessin luontipäivämäärä), prosessoitu (prosessin tunnus PID), prosessin nimi (prosessin nimi), komentorivi ( suorita komento).

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

Saat luettelon kaikista TCP- ja UDP-yhteyksistä luomalla $netTCP- ja $netUDP-muuttujat määrittämällä niille Get-NetTCPConnection- ja Get-NetTCPConnection-cmdlet-käskyt, vastaavasti.

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

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

On tärkeää selvittää suunniteltujen tehtävien ja tehtävien luettelo. Käytämme tätä varten get-ScheduledTask- ja Get-ScheduledJob-cmdlet-komentoja. Määritetään heille muuttujat $tehtävä ja $job, koska Aluksi järjestelmässä on paljon ajoitettuja tehtäviä, sitten haitallisen toiminnan tunnistamiseksi kannattaa suodattaa lailliset ajoitetut tehtävät pois. Select-Object -cmdlet auttaa meitä tässä.

$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-tiedostojärjestelmässä on sellainen asia kuin vaihtoehtoiset tietovirrat (ADS). Tämä tarkoittaa, että NTFS-tiedosto voidaan valinnaisesti liittää useisiin mielivaltaisen kokoisiin tietovirtoihin. ADS:n avulla voit piilottaa tiedot, jotka eivät olisi näkyvissä tavallisilla järjestelmätarkistuksilla. Tämä mahdollistaa haitallisen koodin syöttämisen ja/tai tietojen piilottamisen.

Vaihtoehtoisten tietovirtojen näyttämiseksi PowerShellissä käytämme get-item cmdlet-komentoa ja sisäänrakennettua Windowsin virtaustyökalua, jossa on *-symboli, nähdäksemme kaikki mahdolliset tietovirrat. Tätä varten luomme $ADS-muuttujan.

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

On hyödyllistä selvittää järjestelmään kirjautuneiden käyttäjien luettelo, jota varten luomme $user-muuttujan ja kohdistamme sen quser-ohjelman suoritukseen.

$user = quser

Hyökkääjät voivat tehdä muutoksia automaattiseen käynnistykseen saadakseen jalansijaa järjestelmässä. Voit tarkastella käynnistysobjekteja Get-ItemProperty-cmdletillä.
Luodaan kaksi muuttujaa: $runUser - tarkastellaksesi käynnistystä käyttäjän puolesta ja $runMachine - tarkastellaksesi käynnistystä tietokoneen puolesta.

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

Jotta kaikki tiedot kirjoitetaan eri tiedostoihin, luomme taulukon muuttujilla ja taulukon tiedostonimillä.


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

Ja käyttämällä for-silmukkaa, vastaanotettu data kirjoitetaan tiedostoihin.

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

Skriptin suorittamisen jälkeen luodaan 9 tekstitiedostoa, jotka sisältävät tarvittavat tiedot.

Nykyään kyberturvallisuuden ammattilaiset voivat käyttää PowerShellia rikastaakseen tietoja, joita he tarvitsevat ratkaistakseen erilaisia ​​työtehtäviään. Lisäämällä skriptin käynnistykseen, saat tietoja poistamatta kaatopaikkoja, kuvia jne.

Lähde: will.com

Lisää kommentti