సంఘటన సమాచారాన్ని సేకరించడానికి 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 = 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 వేరియబుల్‌ని సృష్టించండి, దానికి win32_process క్లాస్‌తో get-ciminstance cmdletని కేటాయించండి. Select-Object cmdletని ఉపయోగించి, మీరు అదనపు అవుట్‌పుట్ పారామితులను జోడించవచ్చు, మా విషయంలో ఇవి పేరెంట్‌ప్రాసెసిడ్ (పేరెంట్ ప్రాసెస్ ID PPID), క్రియేషన్ డేట్ (ప్రాసెస్ క్రియేషన్ డేట్), ప్రాసెస్డ్ (ప్రాసెస్ ID PID), ప్రాసెస్‌నేమ్ (ప్రాసెస్ పేరు), కమాండ్‌లైన్ ( ఆదేశాన్ని అమలు చేయండి).

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

అన్ని TCP మరియు UDP కనెక్షన్‌ల జాబితాను పొందడానికి, $netTCP మరియు $netUDP వేరియబుల్‌లకు వరుసగా Get-NetTCPConnection మరియు 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

ప్రణాళికాబద్ధమైన పనులు మరియు కేటాయింపుల జాబితాను కనుగొనడం చాలా ముఖ్యం. దీన్ని చేయడానికి, మేము get-ScheduledTask మరియు Get-ScheduledJob cmdletలను ఉపయోగిస్తాము. వారికి $టాస్క్ మరియు $జాబ్ అనే వేరియబుల్స్ కేటాయిద్దాం, ఎందుకంటే ప్రారంభంలో, సిస్టమ్‌లో చాలా షెడ్యూల్ చేసిన పనులు ఉన్నాయి, ఆపై హానికరమైన కార్యాచరణను గుర్తించడానికి చట్టబద్ధమైన షెడ్యూల్ చేసిన పనులను ఫిల్టర్ చేయడం విలువ. 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ని ఉపయోగించి, మీరు ప్రామాణిక సిస్టమ్ తనిఖీల ద్వారా కనిపించని డేటాను దాచవచ్చు. ఇది హానికరమైన కోడ్‌ను ఇంజెక్ట్ చేయడం మరియు/లేదా డేటాను దాచడం సాధ్యం చేస్తుంది.

పవర్‌షెల్‌లో ప్రత్యామ్నాయ డేటా స్ట్రీమ్‌లను ప్రదర్శించడానికి, మనం get-item కమాండ్‌లెట్ మరియు అంతర్నిర్మిత సాధనాన్ని ఉపయోగిస్తాము. Windows సాధ్యమయ్యే అన్ని స్ట్రీమ్‌లను వీక్షించడానికి * గుర్తును ఉపయోగించి స్ట్రీమ్ చేయండి, దీని కోసం మనం $ADS అనే వేరియబుల్‌ను సృష్టిస్తాము.

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

సిస్టమ్‌కు లాగిన్ అయిన వినియోగదారుల జాబితాను కనుగొనడం ఉపయోగకరంగా ఉంటుంది;

$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 ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

స్క్రిప్ట్‌ని అమలు చేసిన తర్వాత, అవసరమైన సమాచారాన్ని కలిగి ఉన్న 9 టెక్స్ట్ ఫైల్‌లు సృష్టించబడతాయి.

నేడు, సైబర్‌ సెక్యూరిటీ నిపుణులు తమ పనిలో వివిధ రకాల పనులను పరిష్కరించడానికి అవసరమైన సమాచారాన్ని మెరుగుపరచడానికి PowerShellని ఉపయోగించవచ్చు. స్టార్టప్‌కి స్క్రిప్ట్‌ని జోడించడం ద్వారా, మీరు డంప్‌లు, ఇమేజ్‌లు మొదలైనవాటిని తీసివేయకుండానే కొంత సమాచారాన్ని పొందవచ్చు.

మూలం: www.habr.com

DDoS రక్షణ, VPS VDS సర్వర్‌లతో సైట్‌ల కోసం నమ్మకమైన హోస్టింగ్‌ను కొనుగోలు చేయండి 🔥 DDoS రక్షణతో కూడిన నమ్మకమైన వెబ్‌సైట్ హోస్టింగ్, VPS VDS సర్వర్‌లను కొనండి | ProHoster