Skip to content

eriolnik/Scanner-VS7-Reports-Module

Repository files navigation

ScannerRep_Dep

Актуальная модель проекта

Теперь main — это единый источник правды для проекта.

Один и тот же scanner_report.py используется в трех сценариях:

  • CLI: python scanner_report.py
  • Windows: запуск собранного ScannerReport.exe
  • Linux: запуск через run_scanner_report.sh

Идея такая:

  • функционал отчета меняется один раз в scanner_report.py;
  • Windows и Linux отличаются только способом запуска и упаковкой;
  • новые доработки логики нужно вносить в main, а не разносить по отдельным копиям файла.

Скрипт для сборки HTML-отчетов по результатам работы СКАНЕР-ВС 7.2.

Проект объединяет три типа данных:

  • поиск уязвимостей;
  • подбор паролей;
  • аудит конфигурации.

На вход можно подавать как отдельные CSV, так и ZIP-архивы выгрузок из сканера. На выходе скрипт формирует человекочитаемые HTML-отчеты, поддерживает фильтрацию по CVE, активу и ПО, а также умеет строить diff-отчет по уязвимостям "до/после".

Что делает проект

Основной сценарий такой:

  1. В СКАНЕР-ВС 7.2 выгружаются отчеты по нужным задачам.
  2. Скрипт автоматически распознает тип входных файлов.
  3. Данные нормализуются, группируются по активам и частично дедуплицируются.
  4. Формируется итоговый HTML-отчет или специализированный отчет по запросу.

Поддерживаемые типы данных:

  • vuln — данные по уязвимостям;
  • pass — результаты подбора паролей;
  • audit — результаты аудита конфигурации.

Как пользоваться

По инструкции из папки Инструкция/СКАНЕРВС7 Инструкция по работе с отчетами.docx для нормальной работы нужно подготовить в сканере три базовые задачи:

  • поиск уязвимостей;
  • подбор паролей;
  • аудит конфигурации.

Важно:

  • после исследования сети для актива нужно настроить подключение по ssh / telnet / winrm через раздел секретов и подключений;
  • выгрузка может быть как по одному активу в CSV, так и по группе активов в ZIP;
  • структуру ZIP-архива менять нельзя;
  • архивы не нужно распаковывать вручную.

Быстрый старт

Требования:

  • Python 3;
  • любой современный браузер для открытия HTML;
  • для Windows удобно использовать VS Code, но это не обязательное требование.

Запуск:

python scanner_report.py

Если скрипт запущен без аргументов, он попросит ввести пути к файлам или архивам построчно.

Также можно передать пути сразу:

python scanner_report.py vuln.csv pass.csv audit.csv
python scanner_report.py report_after_without_astra.zip audit.csv pass.csv
python scanner_report.py .

Справка по параметрам:

python scanner_report.py --help

Режимы работы

1. Интерактивное меню

После загрузки данных доступны пункты:

  1. общий HTML-отчет;
  2. поиск по конкретной уязвимости (CVE / BDU);
  3. поиск по активу (IP, FQDN, имя хоста);
  4. поиск по ПО;
  5. diff-отчет по уязвимостям "до/после";
  6. выход.

2. Прямой запуск через аргументы

Скрипт поддерживает CLI-режим без входа в интерактивное меню:

python scanner_report.py --html report.html vuln.csv pass.csv audit.csv
python scanner_report.py --cve CVE-2023-1234 vuln.csv pass.csv audit.csv
python scanner_report.py --asset 10.10.10.5 vuln.csv pass.csv audit.csv
python scanner_report.py --software openssl vuln.csv
python scanner_report.py astra_do.csv --vuln-after astra_after.csv

Параметры:

  • --html — сразу сформировать общий HTML-отчет;
  • --cve — сформировать выборку по конкретной уязвимости;
  • --asset — сформировать выборку по конкретному активу;
  • --software — искать уязвимости по названию пакета/ПО;
  • --vuln-after — построить дифф по уязвимостям между двумя выгрузками.

Что попадает в отчеты

По коду и пользовательской инструкции проект формирует:

  • сводку по всем загруженным данным;
  • список источников данных;
  • фильтр по CVE;
  • фильтр по уязвимому ПО;
  • фильтр по активу;
  • агрегированную статистику по уязвимостям;
  • данные по аудиту конфигурации;
  • найденные пароли с возможностью скрыть/показать их в интерфейсе;
  • режимы печати;
  • отдельные HTML-отчеты по CVE и активу;
  • дифф-отчет с новыми и закрытыми уязвимостями.

Файлы, которые обычно генерируются:

  • report.html — общий отчет;
  • report_cve_<id>.html — отчет по одной уязвимости;
  • report_asset_<name>.html — отчет по одному активу;
  • report_vuln_diff.html — дифф по уязвимостям.

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

  • scanner_report.py — основной и фактически единственный production-скрипт;
  • Инструкция — пользовательская инструкция;
  • старые версии — архив прошлых итераций;
  • тест — черновые тестовые файлы и альтернативные варианты скрипта;
  • корень репозитория — примеры входных данных и уже сгенерированные HTML/ZIP/CSV.

Как проект устроен технически

Текущее решение построено как один большой Python-скрипт примерно на 2400+ строк, целиком на стандартной библиотеке.

Основные блоки:

  • чтение и определение формата CSV;
  • чтение ZIP-архивов и поиск вложенных CSV;
  • нормализация идентификаторов активов;
  • агрегация уязвимостей, паролей и аудита;
  • генерация HTML с встроенными CSS и JavaScript;
  • CLI и интерактивное меню.

Из полезного:

  • нет внешних зависимостей;
  • можно запускать на чистом Python 3;
  • поддерживаются и одиночные выгрузки, и архивы;
  • логика приближена к реальному рабочему процессу пользователя, а не к "идеальному" учебному примеру.

Что я думаю о проекте

Проект практичный и живой. Видно, что он вырос из реальной потребности быстро сводить результаты сканера в один понятный отчет, а не из попытки построить "правильную архитектуру с нуля". В этом его сильная сторона: скрипт сразу полезен, дает результат и закрывает реальный ручной процесс.

Сильные стороны:

  • полезная предметная автоматизация;
  • поддержка ZIP без ручной распаковки;
  • понятный прикладной CLI;
  • отчеты ориентированы на эксплуатацию: фильтрация, печать, отдельные выборки;
  • использование только стандартной библиотеки упрощает перенос между машинами.

Слабые стороны и технический долг:

  • весь проект сосредоточен в одном большом файле, поэтому его трудно сопровождать;
  • бизнес-логика, HTML, CSS, JavaScript и CLI сильно перемешаны;
  • нет явного набора автотестов;
  • нет requirements.txt, pyproject.toml или отдельного описания окружения;
  • в репозитории смешаны исходники, примеры данных, готовые отчеты, тестовые артефакты и старые версии;
  • часть логики дублируется между интерактивным режимом и CLI;
  • проект сложно расширять без риска что-то сломать.

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

Что я бы улучшил в первую очередь

  1. Разбил бы scanner_report.py на модули io, normalize, summary, reports, cli.
  2. Вынес бы HTML-шаблоны отдельно, чтобы не держать всю верстку внутри Python-строк.
  3. Добавил бы минимальные автотесты на классификацию CSV, дедупликацию, diff-логику и поиск по активу.
  4. Очистил бы корень репозитория от артефактов и вынес примеры в examples/.
  5. Добавил бы подробную проектную документацию по запуску и рабочему процессу.
  6. Добавил бы предупреждения по безопасности, потому что отчеты могут содержать пароли.

Часть этих пунктов этот README уже закрывает, но архитектурно проекту все еще есть куда расти.

Ограничения и риски

  • качество результата зависит от структуры выгрузок из сканера;
  • определение типа файла завязано на названия колонок;
  • дедупликация выполнена эвристически и может не покрыть все кейсы;
  • при работе с чувствительными данными нужно аккуратно хранить HTML-отчеты и CSV/ZIP;
  • большие объемы данных будут обрабатываться целиком в памяти.

Безопасность

Проект работает с чувствительными данными:

  • уязвимости;
  • результаты аудита;
  • найденные пароли;
  • сведения об активах.

Рекомендуется:

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

Итог

Это хороший внутренний инструмент для операционной работы с отчетами СКАНЕР-ВС 7.2. Его главная ценность не в "красоте кода", а в том, что он реально экономит время на сведении результатов сканирования и подготовке понятных HTML-отчетов.

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

Веб-интерфейс и portable .exe

Теперь проект можно запускать не только через терминал, но и как локальное веб-приложение:

python scanner_report.py --web

Что происходит:

  • поднимается локальный HTTP-сервер на 127.0.0.1;
  • автоматически открывается браузер;
  • пользователь загружает CSV и/или ZIP через форму;
  • после нажатия кнопки создается HTML-отчет;
  • на стартовой странице доступен и diff-режим до/после;
  • отчет сохраняется в папку generated_reports рядом со скриптом или .exe;
  • в браузере открывается отдельная страница просмотра отчета;
  • готовый HTML можно не только открыть, но и скачать как файл через кнопку Скачать HTML-файл.

Дополнительные параметры веб-режима:

python scanner_report.py --web --port 8780
python scanner_report.py --web --no-browser

Сборка в .exe без установки

Для сборки portable-версии добавлен скрипт:

.\build_portable_exe.ps1

Результат сборки:

  • dist/ScannerReport.exe

Особенность portable-сборки:

  • если запустить ScannerReport.exe без аргументов, он сразу откроет локальный веб-интерфейс;
  • консоль пользователю не нужна;
  • браузер откроется автоматически;
  • для завершения работы можно нажать кнопку Завершить программу в веб-интерфейсе.

Linux запуск через .sh

Для Linux добавлен отдельный launcher-скрипт:

chmod +x run_scanner_report.sh
./run_scanner_report.sh

Что он делает:

  • находит python3 или python;
  • запускает scanner_report.py --web;
  • поднимает локальный веб-интерфейс на 127.0.0.1:8765;
  • открывает браузер через встроенную Python-логику;
  • если браузер не открылся, в консоли будет показан локальный URL.

Можно переопределить host и port через переменные окружения:

SCANNER_REPORT_PORT=8780 ./run_scanner_report.sh
SCANNER_REPORT_HOST=127.0.0.1 ./run_scanner_report.sh

Можно передавать и дополнительные аргументы Python-режима:

./run_scanner_report.sh --no-browser

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages