четверг, 20 марта 2025 г.

ScanOval. Улучшаем инструмент. Часть 1.

 Приветствую, уважаемый читатель!

При проведении аттестации по требованиям безопасности информации уже достаточно давно необходимо подтвердить отсутствие уязвимостей критического и высокого уровня. Если на объекте есть САЗ - проблем нет, если САЗ нет на помощь приходит сканер от ФСТЭК (ScanOval). У данного сканера есть проблема, а именно экспорт результатов сканирования в формат, который позволит удобно работать с выявленными уязвимостями в SIEM.

Критиковать бесплатный инструмент дело неблагодарное, но работать как-то нужно. Не придумал ничего лучше, чем распарсить выходной HTML-файл отчёта, достать значимые поля и отправить в SIEM. Кому интересно, скрипт парсинга ниже)

Итак, алгоритм работы со ScanOval подразумевает установку ПО на каждый хост, который необходимо просканировать. Результаты можно выгрузить на каждом АРМ или сервере в HTML-файл и....всё.

Имеем изначально такой отчёт:



 






На выходе получаем коллекцию объектов, которую можно любым способом отправить в SIEM (мне лично ближе HTTP коллекторы).


Скрипт парсинга ниже + добавил на будущее ссылку на описание уязвимости в БДУ ФСТЭК:

clear

$vuln_id = Select-String -Path "D:\Work\ScanOVAL\ScanOval_Report_06_03_2025_host1.html" -SimpleMatch 'class="bdu"'  

$vuln_crit = Select-String -Path "D:\Work\ScanOVAL\ScanOval_Report_06_03_2025_host1.html" -SimpleMatch 'class="bdu"' -Context 0,2 

$vuln_desc = Select-String -Path "D:\Work\ScanOVAL\ScanOval_Report_06_03_2025_host1.html" -SimpleMatch 'class="desc"'


$vuln_objects = @()

$counter = 0


foreach ($vuln in $vuln_id) {

    write-host 'New -------------------------------------------------------------- ' + $counter

    $Vuln_scanname = $vuln.Filename

    $Vuln_IDs = $vuln.Line -replace '\<(.{1,15})\>','' -replace '\s', ''

    $Vuln_Descr = $vuln_desc[$counter].Line -replace '\<(.{1,15})\>','' -replace '\s{16}',''

    $Vuln_Critic = $vuln_crit[$counter].Context.PostContext[1] -replace '\<(.{1,40})\>','' -replace '\s', ''

    $Vuln_Link = 'https://bdu.fstec.ru/vul/' + ($vuln.Line -replace '\<(.{1,15})\>','' -replace 'BDU:','' -replace '\s', '') 

    

    $object = New-Object PSObject

    Add-Member -InputObject $object -MemberType NoteProperty -Name ScanName -Value $Vuln_scanname

    Add-Member -InputObject $object -MemberType NoteProperty -Name ID -Value $Vuln_IDs

    Add-Member -InputObject $object -MemberType NoteProperty -Name Description -Value $Vuln_Descr

    Add-Member -InputObject $object -MemberType NoteProperty -Name Critical -Value $Vuln_Critic

    Add-Member -InputObject $object -MemberType NoteProperty -Name BDU -Value $Vuln_Link         

    $vuln_objects += $object

    $counter++

}

$vuln_objects | fl




Комментариев нет:

Отправить комментарий