የአደጋ መረጃ ለመሰብሰብ 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 እና $Computer፣ የኮምፒዩተር ስም እና የአሁኑ ቀን ይመደባል።

$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 cmdlet ከ win32_process ክፍል ጋር በመመደብ። የ Select-Object cmdlet ን በመጠቀም ተጨማሪ የውጤት መለኪያዎችን ማከል ይችላሉ ፣ በእኛ ሁኔታ እነዚህ የወላጅ ሂደት (የወላጅ ሂደት መታወቂያ PPID) ፣ የፍጥረት ቀን (የሂደት ፈጠራ ቀን) ፣ የሂደት (የሂደት መታወቂያ PID) ፣ የሂደት ስም (የሂደቱ ስም) ፣ ትዕዛዝ መስመር (የሂደቱ ስም) ይሆናሉ። ትዕዛዝ አሂድ)።

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

ሁሉንም የTCP እና UDP ግንኙነቶች ዝርዝር ለማግኘት የ$netTCP እና $netUDP ተለዋዋጮችን በቅደም ተከተል Get-NetTPCConnection እና Get-NetTPCConnection cmdlets በመመደብ ይፍጠሩ።

$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 cmdlets እንጠቀማለን። ተለዋዋጮችን $task እና $ job እንመድባቸው፣ ምክንያቱም መጀመሪያ ላይ በስርዓቱ ውስጥ ብዙ የታቀዱ ተግባራት አሉ, ከዚያም ተንኮል አዘል ድርጊቶችን ለመለየት ህጋዊ የታቀዱ ስራዎችን ማጣራት ተገቢ ነው. የ 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 የፋይል ስርዓት ውስጥ እንደ አማራጭ የመረጃ ዥረቶች (ኤዲኤስ) ያለ ነገር አለ. ይህ ማለት በ NTFS ውስጥ ያለ ፋይል እንደ አማራጭ የዘፈቀደ መጠን ካላቸው ከበርካታ የውሂብ ዥረቶች ጋር ሊዛመድ ይችላል። ኤዲኤስን በመጠቀም በመደበኛ የስርዓት ፍተሻዎች የማይታዩ መረጃዎችን መደበቅ ይችላሉ። ይህ ተንኮል አዘል ኮድ ማስገባት እና/ወይም መረጃን መደበቅ ያስችላል።

በPowerShell ውስጥ አማራጭ የዳታ ዥረቶችን ለማሳየት get-item cmdlet እና አብሮ የተሰራውን የዊንዶውስ ዥረት መሳሪያ ከ* ምልክት ጋር እንጠቀማለን፣ለዚህም የ$ADS ተለዋዋጭ እንፈጥራለን።

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

ወደ ስርዓቱ የገቡትን የተጠቃሚዎች ዝርዝር ለማወቅ ይጠቅማል፤ ለዚህ ደግሞ $user variable ፈጥረን ለ quser ፕሮግራም አፈፃፀም እንመድባለን።

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

እና ለ loop በመጠቀም የተቀበለው ውሂብ ወደ ፋይሎች ይጻፋል።

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

ስክሪፕቱን ከፈጸሙ በኋላ አስፈላጊውን መረጃ የያዙ 9 የጽሑፍ ፋይሎች ይፈጠራሉ።

ዛሬ የሳይበር ደህንነት ባለሙያዎች በስራቸው ውስጥ የተለያዩ ስራዎችን ለመፍታት የሚያስፈልጋቸውን መረጃ ለማበልጸግ PowerShellን መጠቀም ይችላሉ። ጅምር ላይ ስክሪፕት በማከል ቆሻሻዎችን፣ ምስሎችን ወዘተ ሳያስወግዱ የተወሰነ መረጃ ማግኘት ይችላሉ።

ምንጭ: hab.com

አስተያየት ያክሉ