Skip to main content

Процесс сканирования(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.