Kutumia PowerShell Kukusanya Taarifa za Tukio

PowerShell ni zana ya kawaida ya otomatiki ambayo mara nyingi hutumiwa na wasanidi programu hasidi na wataalamu wa usalama wa habari.
Makala haya yatajadili chaguo la kutumia PowerShell kukusanya data kutoka kwa vifaa vya mwisho wakati wa kujibu matukio ya usalama wa habari. Ili kufanya hivyo, utahitaji kuandika hati ambayo itaendesha kwenye kifaa cha mwisho na kisha kutakuwa na maelezo ya kina ya hati hii.

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
		}

	}

}

Ili kuanza, unda chaguo la kukokotoa Ugani wa CSIRT, ambayo itachukua hoja - njia ya kuokoa data iliyopokelewa. Kutokana na ukweli kwamba cmdlets nyingi hufanya kazi katika Powershell v5, toleo la PowerShell liliangaliwa kwa uendeshaji sahihi.

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

Kwa urahisi wa urambazaji kupitia faili zilizoundwa, vigezo viwili vinaanzishwa: $date na $Computer, ambayo itapewa jina la kompyuta na tarehe ya sasa.

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

Tunapata orodha ya michakato inayoendeshwa kwa niaba ya mtumiaji wa sasa kama ifuatavyo: tengeneza tofauti ya mchakato wa $, ukiikabidhi get-ciminstance cmdlet na darasa la win32_process. Kwa kutumia Select-Object cmdlet, unaweza kuongeza vigezo vya ziada vya pato, kwa upande wetu hizi zitakuwa parentprocessid (Kitambulisho cha mchakato wa mzazi PPID), tarehe ya kuundwa (tarehe ya uundaji wa mchakato), iliyochakatwa (PID ya mchakato), jina la mchakato (jina la mchakato), mstari wa amri ( kukimbia amri).

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

Ili kupata orodha ya miunganisho yote ya TCP na UDP, unda vigeu vya $netTCP na $netUDP kwa kuzikabidhi cmdlets za Get-NetTCPConnection na Get-NetTCPConnection, mtawalia.

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

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

Itakuwa muhimu kujua orodha ya kazi zilizopangwa na kazi. Ili kufanya hivyo, tunatumia get-ScheduledTask na Get-ScheduledJob cmdlets. Wacha tuwape vijiwezo vya $task na $job, kwa sababu Hapo awali, kuna kazi nyingi zilizopangwa kwenye mfumo, basi ili kutambua shughuli mbaya inafaa kuchuja kazi zilizopangwa halali. Chagua-Kitu cmdlet itatusaidia na hili.

$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

Katika mfumo wa faili wa NTFS kuna kitu kama mitiririko mbadala ya data (ADS). Hii ina maana kwamba faili katika NTFS inaweza kwa hiari kuhusishwa na mitiririko mingi ya data ya ukubwa usio na mpangilio. Kwa kutumia ADS, unaweza kuficha data ambayo isingeonekana kupitia ukaguzi wa kawaida wa mfumo. Hii inafanya uwezekano wa kuingiza msimbo hasidi na/au kuficha data.

Ili kuonyesha mitiririko mbadala ya data katika PowerShell, tutatumia cmdlet ya kupata-kipengee na kifaa kilichojengewa ndani Windows sambaza kwa kutumia alama ya * ili kuona mitiririko yote inayowezekana, kwa hili tutaunda kigezo cha $ADS.

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

Itakuwa muhimu kujua orodha ya watumiaji walioingia kwenye mfumo; kwa hili tutaunda tofauti ya $user na kuikabidhi kwa utekelezaji wa programu ya quser.

$user = quser

Wavamizi wanaweza kufanya mabadiliko ya kujiendesha ili kupata nafasi katika mfumo. Kuangalia vitu vya kuanza, unaweza kutumia Get-ItemProperty cmdlet.
Hebu tuunde vigezo viwili: $runUser - kutazama uanzishaji kwa niaba ya mtumiaji na $runMachine - kutazama uanzishaji kwa niaba ya kompyuta.

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

Ili taarifa zote zimeandikwa kwa faili tofauti, tunaunda safu na vigezo na safu yenye majina ya faili.


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

Na kwa kutumia kitanzi, data iliyopokelewa itaandikwa kwa faili.

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

Baada ya kutekeleza hati, faili 9 za maandishi zitaundwa zilizo na habari muhimu.

Leo, wataalamu wa usalama wa mtandao wanaweza kutumia PowerShell kuimarisha taarifa wanazohitaji kutatua kazi mbalimbali katika kazi zao. Kwa kuongeza hati ili kuanza, unaweza kupata maelezo bila kuondoa utupaji, picha n.k.

Chanzo: mapenzi.com

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster