PowerShell - [решено] Разбор аудита SRP

Ответить
Аватара пользователя
Elven

PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

Имеются логи аудита SRP, кто имел с ними дело сразу поймут что это за кака с маком и что читать их "вручную" просто нереально. Посему нужен скрипт на парсинг этого счастья хотя бы по упрощенной схеме: отображение (или пересылка в файл) строк НЕ попадающих в список исключений находящихся в текстовом файле.

Т.е.:

Дано: куча логов


вида

[spoiler]forfiles.exe (PID = 5112) identified \??\C:\Windows\system32\IMM32.DLL as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

services.exe (PID = 752) identified C:\Program Files\Common Files\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPSVC.EXE as Unrestricted using path rule, Guid = {4a2371bb-8664-43de-a137-1aa6af4e215c}

services.exe (PID = 752) identified C:\Windows\system32\sppsvc.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

svchost.exe (PID = 1064) identified taskeng.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

cmd.exe (PID = 4924) identified C:\Windows\sep_install.cmd as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

services.exe (PID = 752) identified C:\Windows\System32\svchost.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

services.exe (PID = 752) identified taskhost.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

svchost.exe (PID = 1064) identified taskeng.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

cmd.exe (PID = 5784) identified C:\Windows\defrag_c.cmd as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

powershell.exe (PID = 5140) identified C:\Windows\SRP_LogRotation.ps1 as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

svchost.exe (PID = 1064) identified taskeng.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\ktmw32.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\wevtapi.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\IMM32.DLL as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\CRYPTBASE.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\CRYPTSP.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\rsaenh.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\SspiCli.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\RpcRtRemote.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\tschannel.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\XmlLite.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified C:\Windows\SYSTEM32\cmd.exe as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

taskeng.exe (PID = 1696) identified \??\C:\Windows\system32\apphelp.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

cmd.exe (PID = 4592) identified \??\C:\Windows\SYSTEM32\WINBRAND.dll as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}

cmd.exe (PID = 4592) identified \??\C:\Windows\system32\IMM32.DLL as Unrestricted using path rule, Guid = {b12c17a2-e0db-44c7-a400-a609e7da509b}[/spoiler]




Это маленький кусочек логов, на самом деле у отдельных людей они достигают 25 Mb в сутки.

список исключений


что-то вроде

[spoiler]C:\Windows\System32

C:\Program Files\

C:\Program Files x86\

c:\какая-нить_хитрая_софтина_которая_не_хочет_жить_в_programfiles[/spoiler]




Ну и хочется получить на выходе файл (или вывод в консоль) с теми строками, которые не попадают под список исключений.

Начинал писать на cmd, но понял, что обрабатываться оно будет до второго пришествия, из-за того лучше обратиться к PS, в котором я, к сожалению, все еще как известное животное в известных фруктах, вот помощи и прошу.



И если случайно у кого-то найдется готовое решение для парсинга логов SRP аудита то я буду просто в восторге.
Аватара пользователя
Kazun

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Kazun »

Код:

Код: Выделить всё

$ex = ("C:\Windows\System32","C:\Program Files x86\","C:\Program Files\","c:\какая-нить_хитрая_софтина_которая_не_хочет_жить_в_programfiles" | Foreach {
	[regex]::escape($_)
}) -join "|"
Get-Content Log.txt | Where {$_ -notmatch $ex}
Аватара пользователя
Elven

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

Здорово. Спасибо, я, откровенно говоря, в select-string полез. А можно данные все же из файла брать? Пока отладка идет исключений чуть больше чем много, неудобно в самом теле скрипта держать.
Аватара пользователя
y--

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение y-- »

Elven,

в случае одного файла лога:

Код:

Код: Выделить всё

FINDSTR /V /I /G:файл_списка_исключений.txt файл_лога.txt

в случае когда файлов логов много можно читать их из файла списка:

Код:

Код: Выделить всё

FINDSTR /V /I /G:файл_списка_исключений.txt /F:файл_списка_логов.txt

работает быстро
Аватара пользователя
Iska

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Iska »

Цитата Elven:



А можно данные все же из файла брать? Пока отладка идет исключений чуть больше чем много, неудобно в самом теле скрипта держать.
PowerShell - [решено] Разбор аудита SRP




Так берите, что мешает?! Код ровно тот же.



Код:

Код: Выделить всё

$ex = (Get-Content -Path 'C:\Мои проекты\0019\ExcludeList.txt' | Foreach {
	[regex]::escape($_)
}) -join "|"
Get-Content Log.txt | Where {$_ -notmatch $ex}
Аватара пользователя
Elven

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

Цитата y--:



работает быстро
PowerShell - [решено] Разбор аудита SRP




логов чуть больше чем много, и составить файл со списком логов представляется малореальным. Логи усекаются каждый день и раз в сутки переносятся на шару в папку с именем компьютера, т.е. файлы логов лежат не просто все в одной папке, а еще и в папках с именами компьютеров.


Примерно так

[spoiler]d:\SRP_audit_logs>tree /f

Структура папок

Серийный номер тома: 9847-DCE1

D:.

├───comp1

│ SRP_comp1_20161002.log

│ SRP_comp1_20161003.log

│ SRP_comp1_20161004.log

│ SRP_comp1_20161005.log

│ SRP_comp1_20161006.log

│ SRP_comp1_20161007.log

│ SRP_comp1_20161008.log

│ SRP_comp1_20161009.log



├───comp2

│ SRP_comp2_20161002.log

│ SRP_comp2_20161003.log

│ SRP_comp2_20161004.log

│ SRP_comp2_20161005.log

│ SRP_comp2_20161006.log

│ SRP_comp2_20161007.log

│ SRP_comp2_20161008.log

│ SRP_comp2_20161009.log



└───comp3

SRP_comp3_20161002.log

SRP_comp3_20161003.log

SRP_comp3_20161004.log

SRP_comp3_20161005.log

SRP_comp3_20161006.log

SRP_comp3_20161007.log

SRP_comp3_20161008.log

SRP_comp3_20161009.log[/spoiler]




Iska, если бы я знал PS хотя бы в той же степени что cmd/bat - возможно таких вопросов не возникло, пока же это для меня не столь очевидно, так что спасибо.





на текущий момент финальная версия

[spoiler]cls

$ex = (Get-Content -Path 'ExcludeList.txt' | Foreach {

[regex]::escape($_)

}) -join "|"



Get-Content *\*.log | Where {$_ -notmatch $ex}[/spoiler]
Аватара пользователя
y--

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение y-- »

Elven,
Цитата Elven:



логов чуть больше чем много, и составить файл со списком логов представляется малореальным
PowerShell - [решено] Разбор аудита SRP




во-первых не указано в исходной постановке задач, во вторых FOR по файловой системе сгенерит список (и не важно в файл или консоль) на раз-два.


Цитата Elven:



если бы я знал PS хотя бы в той же степени что cmd/bat
PowerShell - [решено] Разбор аудита SRP




не волнуйся, судя по всему, ты ими владеешь одинаково - что PS что CMD/BAT.
Аватара пользователя
Elven

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

y--, cmd я знаю в достаточной степени чтобы не городить "FOR по файловой системе" для findstr, для которого есть ключ /s, однако, мистер ироничный всезнайка, я не хочу использовать в данной задаче cmd, о чем можно судить хотя бы по названию темы.
Аватара пользователя
Elven

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

Для упрощения работы решил цеплять данные из реестра (список исключений), но уперся после получения списка веток, в которых находятся нужные ключи.



Код:

Код: Выделить всё

$DLvl = (Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers -Name DefaultLevel).DefaultLevel
$LvlPaths = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\' + $DLvl + '\Paths\*'
Get-ChildItem -Path $LvlPaths | select Name




Результат выполнения

[spoiler]Name

----

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{2eb12496-9f40-4911-827b-7465e032ff5e}

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{4a2371bb-8664-43de-a137-1aa6af4e215c}

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{547b917c-8d3d-455e-9b74-5a151a296eee}

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{b12c17a2-e0db-44c7-a400-a609e7da509b}[/spoiler]




т.о. получаю список имен веток, в каждой из веток есть ключ ItemData, каждый ключ - строка в списке исключений.

Собственно вопрос: как использовать эти ключи вместо списка исключений вот в таком скрипте:



Код:

Код: Выделить всё

$ex = (Get-Content -Path 'ExcludeList.txt' | Foreach {
	[regex]::escape($_)
}) -join "|"
Get-ChildItem *\*.log | ForEach-Object {
$nname = $_.DirectoryName + '\' + $_.BaseName + '_Cut' + $_.Extension
Get-Content $_.FullName | Where {$_ -notmatch $ex} >> $nname
}
Аватара пользователя
Elven

Re: PowerShell - [решено] Разбор аудита SRP

Сообщение Elven »

Кажись сам допер, но не до конца:



Код:

Код: Выделить всё

$DLvl = (Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers -Name DefaultLevel).DefaultLevel
$LvlPaths = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\' + $DLvl + '\Paths\*'
$ex = (Get-ChildItem -Path $LvlPaths | ForEach-Object {
$string = $_.Name
$ItemDataPath = $string.Replace("HKEY_LOCAL_MACHINE","HKLM:")
(Get-ItemProperty -Path $ItemDataPath -Name ItemData).ItemData
}) -join "|"
$ex = [regex]::escape($ex)
Get-ChildItem *\*.log | ForEach-Object {
$nname = $_.DirectoryName + '\' + $_.BaseName + '_Cut' + $_.Extension
Get-Content $_.FullName | Where {$_ -notmatch $ex} >> $nname
}

Вроде как должно работать но почему-то фильтр вообще не применяется



upd

Нашел где собака порылась, | при использовании [regex]::escape экранировался, и, т.о., появлялся лишний "\".



Код:

Код: Выделить всё

$DLvl = (Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers -Name DefaultLevel).DefaultLevel
$LvlPaths = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\' + $DLvl + '\Paths\*'
$ex = (
Get-ChildItem -Path $LvlPaths | ForEach-Object {
$string = $_.Name
$ItemDataPath = $string.Replace("HKEY_LOCAL_MACHINE","HKLM:")
(Get-ItemProperty -Path $ItemDataPath -Name ItemData).ItemData
}) -join "|"
$ex = [regex]::escape($ex).replace("\\\|","\\|")
Get-ChildItem *\*.log -exclude *cut.log | ForEach-Object {
$nname = $_.DirectoryName + '\' + $_.BaseName + '_Cut' + $_.Extension
Get-Content $_.FullName | Where {$_ -notmatch $ex} >> $nname
}
Ответить

Вернуться в «Скриптовые языки администрирования Windows»