Процесс сканирования(wip)
-
Если хосты указаны в grafana, то используется скрипт Python для сканирования портов на указанных хостах.
-
Если хосты надо взять из DT, то вначале выполняем скрипт по получению хостов из DT
-
Сначала скрипт проверяет наличие файла hosts.txt. Если файла нет, он выводит сообщение «no hosts file». Если есть, то удалит его.
-
Затем скрипт выполняет GET-запрос к DT, который формируется из переменных $DT_HOST, $PRODUCT.
-
Скрипт обрабатывает ответ от API, извлекает хосты из результатов и записывает их в файл hosts.txt.
-
Сохранение артефактов: Файл hosts.txt сохраняется как артефакт после выполнения задачи.
-
Запускаем скрипт Python для сканирования портов на сканирующей машине.
-
Сбор аргументов командной строки: Скрипт принимает аргументы командной строки, которые представляют собой параметры: хосты для сканирования и токены авторизации.
-
Получение типа теста: Скрипт выполняет GET-запрос к DT для получения ID типа теста Port Scan.
-
Получение списка тестов: Скрипт выполняет еще один GET-запрос к DT для получения списка тестов.
-
Скрипт ищет тест с типом сканирования Port Scan и определенным названием. Если такой тест не найден, скрипт создает новый тест с помощью POST-запроса. Если тест найден, скрипт обновляет его с помощью PATCH-запроса.
-
Скрипт запускает подпроцесс с командой nmap для выполнения сканирования портов.
-
Отслеживание прогресса: Скрипт отслеживает прогресс выполнения nmap, обновляя индикатор выполнения и отправляя PATCH-запросы к API для обновления процента выполнения теста.
-
После завершения процесса nmap скрипт обновляет статус теста на Done и устанавливает процент выполнения на 100.
Скрипт для отправки результатов в DT
- Скрипт получает аргументы командной строки, которые представляют собой параметры, такие DT url и токен авторизации. Он также получает текущую дату и время.
- Получаем XML-файл (если nmap) JSON (если nuclei) с результатами сканирования.
- Отправляет GET-запрос на сервер для получения списка тестов.
- Если тест с нужным типом скана и тегом не найден, создает новый тест с помощью POST-
- Запроса импортирует файл скана и прикрепляет файл к тесту.
- Если тест с нужным типом скана уже существует, выполняет реимпорт скана с помощью POST-запроса и прикрепляет файл к тесту.
Процесс приостановки и продолжения сканирования nmap и nuclei
Для приостановки процесса сканирования
- Скрипт читает PID процесса из аргументов командной строки.
- Отправляет сигнал SIGSTOP этому процессу, чтобы приостановить его. os.kill(pid, signal.SIGSTOP)
- Отправляет GET-запрос на сервер для получения списка тестов с определенными тегами и названием.
- Если тест найден, сохраняет его ID.
- Отправляет PATCH-запрос к DT для обновления версии теста на ‘Pause’.
Для продолжения процесса сканирования
- Читает PID процесса из аргументов командной строки.
- Отправляет сигнал SIGCONT этому процессу, чтобы возобновить его. os.kill(pid, signal.SIGCONT)
- Отправляет GET-запрос на сервер для получения списка тестов с определенными тегами и названием.
- Если тест найден, сохраняет его ID.
- Отправляет PATCH-запрос к DT для обновления версии теста на ‘Running’.
Процесс сканирования openvas отличается скриптом для запуска и приостановки сканирования
-
Получаем список тестов из DT.
-
Если тест с нужным типом скана не найден, создает новый тест с помощью POST-запроса.
-
Если тест найден, обновляет его данные с помощью PATCH-запроса.
-
Импортируем библиотки для работы с GVM (OpenVas)
-
Подключаемся к демону GVM через Unix-сокет.
-
Получаем конфигурации сканирования, списки портов и детали сканера из GVM.
-
Устанавливает соединение с GVM и аутентифицируется.
-
Получает ID конфигурации сканирования, ID списка портов и ID сканера.
-
Создаем таргет для сканирования.
-
Создаем задачу сканирования.
-
Запускаем задачу сканирования и получает ID отчета.
-
В цикле проверяем статус задачи до ее завершения, обновляя прогресс выполнения задачи (процент выполнения и статусы – Running, Stopped, Done) отправляем эти данные в DT.
-
После завершения задачи получаем отчет в форматах CSV.
-
Записывает отчет в файл.
Далее используем тот же скрипт, что и раньше для отправки результатов в DT.
