Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Разбор аудита SRP

Ответить
Настройки темы
PowerShell - [решено] Разбор аудита SRP

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Elven
Дата: 10-10-2016
Имеются логи аудита SRP, кто имел с ними дело сразу поймут что это за кака с маком и что читать их "вручную" просто нереально. Посему нужен скрипт на парсинг этого счастья хотя бы по упрощенной схеме: отображение (или пересылка в файл) строк НЕ попадающих в список исключений находящихся в текстовом файле.
Т.е.:
Дано: куча логов
вида
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}

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

C:\Windows\System32
C:\Program Files\
C:\Program Files x86\
c:\какая-нить_хитрая_софтина_которая_не_хочет_жить_в_programfiles

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

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

Отправлено: 17:17, 10-10-2016

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$ex = ("C:\Windows\System32","C:\Program Files x86\","C:\Program Files\","c:\какая-нить_хитрая_софтина_которая_не_хочет_жить_в_programfiles" | Foreach {
	[regex]::escape($_)
}) -join "|"

Get-Content Log.txt | Where {$_ -notmatch $ex}
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:32, 10-10-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 17:42, 10-10-2016 | #3

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


Elven,
в случае одного файла лога:
Код: Выделить весь код
FINDSTR /V /I /G:файл_списка_исключений.txt файл_лога.txt
в случае когда файлов логов много можно читать их из файла списка:
Код: Выделить весь код
FINDSTR /V /I /G:файл_списка_исключений.txt /F:файл_списка_логов.txt
работает быстро

-------
Ты это - заходи если что...


Отправлено: 22:50, 10-10-2016 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Elven:
А можно данные все же из файла брать? Пока отладка идет исключений чуть больше чем много, неудобно в самом теле скрипта держать. »
Так берите, что мешает?! Код ровно тот же.
Код: Выделить весь код
$ex = (Get-Content -Path 'C:\Мои проекты\0019\ExcludeList.txt' | Foreach {
	[regex]::escape($_)
}) -join "|"

Get-Content Log.txt | Where {$_ -notmatch $ex}
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:54, 11-10-2016 | #5


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Цитата y--:
работает быстро »
логов чуть больше чем много, и составить файл со списком логов представляется малореальным. Логи усекаются каждый день и раз в сутки переносятся на шару в папку с именем компьютера, т.е. файлы логов лежат не просто все в одной папке, а еще и в папках с именами компьютеров.
Примерно так
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

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

на текущий момент финальная версия
cls
$ex = (Get-Content -Path 'ExcludeList.txt' | Foreach {
[regex]::escape($_)
}) -join "|"

Get-Content *\*.log | Where {$_ -notmatch $ex}

Последний раз редактировалось Elven, 11-10-2016 в 12:14.


Отправлено: 11:36, 11-10-2016 | #6

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


Elven,
Цитата Elven:
логов чуть больше чем много, и составить файл со списком логов представляется малореальным »
во-первых не указано в исходной постановке задач, во вторых FOR по файловой системе сгенерит список (и не важно в файл или консоль) на раз-два.
Цитата Elven:
если бы я знал PS хотя бы в той же степени что cmd/bat »
не волнуйся, судя по всему, ты ими владеешь одинаково - что PS что CMD/BAT.

-------
Ты это - заходи если что...


Отправлено: 12:14, 11-10-2016 | #7


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 12:33, 11-10-2016 | #8


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Для упрощения работы решил цеплять данные из реестра (список исключений), но уперся после получения списка веток, в которых находятся нужные ключи.
Код: Выделить весь код
$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
Результат выполнения
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}

т.о. получаю список имен веток, в каждой из веток есть ключ 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
}

Отправлено: 14:28, 20-10-2016 | #9


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Кажись сам допер, но не до конца:
Код: Выделить весь код
$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
}

Последний раз редактировалось Elven, 20-10-2016 в 16:09.


Отправлено: 15:32, 20-10-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Разбор аудита SRP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вопрос - Шифровальщики вымогатели и SRP dislike Защита компьютерных систем 20 06-09-2016 14:53
2008 R2 - Почему KmPlayer игнорирует SRP? zionkv Windows Server 2008/2008 R2 1 15-02-2016 11:12
Вопрос - Домашний ПК: антивирус или SRP VasylUA Защита компьютерных систем 131 06-12-2014 19:06
2008 R2 - [решено] Подскажите по srp nokogerra Windows Server 2008/2008 R2 4 15-10-2012 15:34
[решено] Пара вопросов про GPO и SRP. PoliceMan Microsoft Windows NT/2000/2003 1 29-10-2009 14:00




 
Переход