Комментарий пользователя
У нас около сорока хостов, но сканирую я их руками. Обычно перед аудитом, то есть раз в квартал. Понятно, что это не сканирование, а самоуспокоение: между проверками полгода никто ничего не смотрит. Хочу настроить так, чтобы это происходило само и я получал готовый отчет. Сканер-ВС есть, API вроде бы тоже. С чего начать и из чего вообще должна состоять такая схема?
Ответ специалиста
Здравствуйте, Артём!
Схема собирается из трех частей: cron для запуска по расписанию, скрипт и API Сканер-ВС для управления процессом. Список проверяемых адресов следует держать отдельно от скрипта. Это дает возможность менять состав проверяемой инфраструктуры, не трогая код, причем на любом этапе работы — логику это не ломает.
Важная деталь — cron только запускает скрипт, самими этапами сканирования он не управляет.
На старте скрипт загружает JSON-файл со списком IP-адресов и подсетей, создает для них ресурсы и сохраняет полученные идентификаторы:
...
clients = load_client_list(client_list_file)
for client in clients:
client_ip = client.get("ip")
id_asset = client.get("id_asset")
if id_asset:
print(f" Asset для IP: {client_ip} уже существует (ID Asset: {id_asset}). Пропускаем.")
continue
id_asset = create_asset(auth_cookies, client_ip)
if id_asset:
client["id_asset"] = id_asset
save_client_list(client_list_file, clients)
...
Обратите внимание на continue: если ресурс уже создан, он не перезаписывается, а пропускается. Файл со списком становится хранилищем состояния для всего конвейера — к этому мы еще вернемся.
Далее адреса группируются по имени, и для каждой отдельной инфраструктуры или клиента создается сетевое сканирование. После его завершения запускается поиск уязвимостей, затем формируется отчет. Cron не управляет этапами сканирований и нужен только для запуска скрипта.
Отдельная тема — что произойдет, если cron запустит скрипт, пока предыдущее сканирование еще идет. Разбираю это в ответе на вопрос. Подробно разобрал этот сценарий в ответе на вопрос «Как запускать сканирование по расписанию».