Установка и настройка сетевого сканера
Описание
Сканер - клиентское приложение, устанавливающееся на выделенный сервер и позволяющее производить сканирование разрешенных сетей.
Системные требования
- Операционная система: Сервер с ОС Linux
- Рекомендации: Выделенный сервер с полным доступом к аппаратным ресурсам
Важно:
- Сканер должен использовать систему управления службами systemd.
- Предполагается что сканер может полностью утилизировать ресурсы выделенного ему сервера
Поддерживаемые системы и дистрибутивы
- Debian GNU/Linux 11, 12
Регистрация сервис аккаунта
Авторизация сканера проходит через сервис аккаунт по OAuth2 протоколу. В панели администратора необходимо создать сервис аккаунт
(см. Как создать Сервис аккаунт) и выбрать группу скоупов uc
, которая включает в себя uc:list
и uc:get
.
Данные скоупы дают доступ для просмотра и скачивания сканера и агентов.
Установка сетевого сканера
Установка и удаление сетевого сканера производится через ansible роль. Роль и инструкция по настройке находится в репозитории (см. ansible-net-scanner).
Ansible - система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций. Применяется для автоматизации настройки и развёртывания программного обеспечения.
Документация ansible: https://docs.ansible.com/
Для установки сетевого сканера необходимо, чтобы на основной машине был доступ по SSH до всех целевых машин.
Создайте директорию, в которой будут находиться файлы для установки сетевого сканера:
mkdir exploitdog
Создайте дочернюю директорию и скачайте ansible роль сетевого сканера
mkdir exploitdog/rolescd exploitdog/rolesgit clone https://github.com/exploitdog/ansible-net-scanner.git
Вернитесь в каталог exploitdog
cd ..
Создайте плейбук, например net-scanner.yaml
, со следующим содержимым:
## Указанные параметры в переменных, являются значениями по умолчанию- hosts: exampleroles:- ansible-net-scannervars:exploitdog_net_scanner_url: "" ## URL-адрес (обязательный параметр)vm_network_interfaces: [] ## Сетевые интерфейсы для сканированияexploitdog_net_scanner_allowed_ips: [] ## Разрешенные IP-подсети для сканированияvm_dns_servers: [] ## DNS-серверы для разрешения доменовexploitdog_net_scanner_log_level: "info" ## Уровень журнала: "debug", "info", "warning", "error"exploitdog_sa_client_id: "" ## Идентификатор клиента OAuthexploitdog_sa_client_secret: "" ## Секретный ключ клиентаexploitdog_net_scanner_secrets: [] ## Секреты приложенияexploitdog_net_scanner_version: "0.0.1-rc.3" ## Версия сборки (обязательный параметр, если не указан exploitdog_net_scanner_build_id)exploitdog_net_scanner_build_id: "" ## ID сборки приложения (обязательный параметр, если не указан exploitdog_net_scanner_version)
В поле exploitdog_net_scanner_url
необходимо указать URL личного кабинета. Например, для облачного решения:
Пример:
- hosts: exampleroles:- ansible-net-scannervars:exploitdog_net_scanner_url: https://main-url.comvm_network_interfaces:- "en0"- "lo"exploitdog_net_scanner_allowed_ips:- "192.168.0.1/24"- "10.10.1.123/32"- "10.10.2.1/24"vm_dns_servers:- "8.8.8.8"- "1.1.1.1"exploitdog_net_scanner_log_level: "info"exploitdog_sa_client_id: "327e4a1403d21b134534078c36bc8369"exploitdog_sa_client_secret: "e8g_4a815534c5637667c098474d5b9b5988969590f7e40960f38c09cc59cad0dfa1da083ce7aa8f732797b58a155179f1cbb68897a740e5fb9c486aad1588738732d4b0aef8"exploitdog_net_scanner_version: "0.0.1-rc.22"exploitdog_net_scanner_secrets:USER: "agent"PASSWORD: "fujeIzLtwk9rYhDk"AGENT_TOKEN: "213f1cc6-1549-475a-bea8-6d3890ceeaa7"PRIVATE_KEY: |-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCRsG/tvMYCINsaXjM65AN3uYqMobf7QdeAnQSifK7SBVw4AZGV0OXpKyOwI8wJo6Cv+zRmsxZNeSRAlNXG1JUuch/heXAiawxHtv1frH5IwN+PNUJZq24gTIQtriFZSFnP2j6Fn6OlFCEiQUJpaKcJQ7t+dZ8NJMP2mWvTc2axpQIDAQABAoGATHiwR7muta9JUq3fdin5J/7cGrVIPTpyQ7AnnqKToOnvXfZ01I6yH5HlSa+Aig65aaYR+1ZFfqT3wm5dR+CN7Oh6eMMBvVd+rtIuilAeskup6A5iW5HTB/surD8RTT5HKfimnWxDxfZiv8pVWfAoCdE7sUy1g0QUOVhMoE9FiAECQQDC9tuoyMf8uxUQjk9eAX3EnnNdKWiFkyTlY6D2/ztdu9kh/U4pkArHkcElAknEvqJOrrxN98wHeHVnu0PAUTx1AkEAv0x/C/3LmPlHAS9EtQ7+G7eONV7hhMOwwmd1wHBfhuxAEW8DaAR23BfoCcGjxEez7SZ1aVRDTi1HtZMWR2a6cQJBAIkKX+hKCVi6X9odTehz/+VewxRu8MtDXKHo39H+IcqHKd7cYD6SwyD4cN0EuLmUjh3kcPQVA9MUduINHVhnQakCQDgGtWbTq99fkpYcO+kzPOTtO28SHMZ/cbNeDbSQtMmVQ6ZXdw3t0MnhDopc9hO0VFPuYZC5pwSsakYZj/rVcWECQQC6f4rd1jhS7wxNqZ7O/I+uwMmraq/BovKyL1zidN8KAlkAiHg6FJb1WvRy44caOvlPAuP+/YQIr8/SKkZDu6tU-----END RSA PRIVATE KEY-----
Далее необходимо создать инвентарь и указать в нём параметры подключения для всех машин, на которые необходимо установить сетевой сканер, в примере файл будет называться hosts:
[example]10.0.0.1 ansible_user=root ansible_port=2210.0.0.2 ansible_user=root ansible_port=2210.0.0.3 ansible_user=root ansible_port=22
Структура директории должна иметь следующий вид:
roles/ansible-net-scanner/hostsnet-scanner.yaml
Теперь можно запустить установку:
ansible-playbook -i hosts net-scanner.yaml
Удаление сетевого сканера
Для удаления сетевого сканера необходимо запустить плейбук с указанием переменной uninstall=true
:
ansible-playbook -i hosts net-scanner.yaml --extra-vars='uninstall=true'
Доступные параметры для конфигурирования
Параметр | Тип | Обязательность | Описание | По умолчанию |
---|---|---|---|---|
allowedIPs[] | CIDR[] | ✅ | Разрешенные IP-подсети для сканирования (например 192.168.1.0/24 ) | - |
interfaces[] | string[] | ✅ | Сетевые интерфейсы для сканирования | - |
dns[] | IP[] | ✅ | DNS-серверы для разрешения доменов | - |
concurrent | integer | ❌ | Максимальное количество одновременно обрабатываемых заданий (не опирается на количество CPU) | 10 |
serverURL | URL | ✅ | Базовый URL сервера (только HTTPS). Для облачного решения: | - |
proxyURL | URL | ❌ | Прокси-сервер для подключения (см. Особенности настройки proxyURL) | - |
logLevel | string | ❌ | Уровень логирования (debug , info , warn , error ) | info |
clientId | string | ✅ | Идентификатор клиента OAuth (см. Как создать Сервис аккаунт) | - |
clientSecret | string | ✅ | Секретный ключ клиента (см. Как создать Сервис аккаунт) | - |
ipAddress | IP | ❌ | Статический IP текущего узла | автоопределение |
hostId | string | ❌ | Уникальный идентификатор хоста | - |
fqdn | string | ❌ | Полное доменное имя устройства | - |
rateLimit | integer | ❌ | Лимит запросов в секунду (RPS) | - |
secrets | map | ❌ | Секреты приложения (см. Конфигурационный файл JSON) | - |
Особенности настройки proxyURL
- Поддерживаемые схемы прокси
http://
https://
- Учетные данные (логин/пароль) передаются через URL
http://username:password@proxy-host:port
https://username:password@proxy-host:port
- Таймауты и производительность
- Общий таймаут клиента (5 секунд) включает установку соединения с прокси. Если прокси не отвечает вовремя, запрос прерывается.
- Прозрачность работы
- Прокси обязан поддерживать метод
CONNECT
для работы с HTTPS. - Все запросы от сканера будут проходить через прокси.
- Прокси обязан поддерживать метод
- Примеры рабочих конфигураций
- HTTP-прокси:
http://proxy.example.com:8080
- HTTPS-прокси с аутентификацией:
https://user:pass@secure-proxy.com:3128
- HTTP-прокси:
Для работы с https
схемой proxy берутся системные сертификаты.
Методы конфигурации
1. Конфигурационный файл JSON
- Расположение:
/etc/exploitdog_net_scanner/config.json
- Требования к правам:
0600
{"allowedIPs": ["192.168.0.1/24","10.10.1.123/32","10.10.2.1/24"],"interfaces": ["lo0", "en0"],"dns": ["8.8.8.8"],"serverURL": "https://main-url.com","clientId": "327e4a1403d21b134534078c36bc8369","clientSecret": "e8g_4a815534c5637667c098474d5b9b5988969590f7e40960f38c09cc59cad0dfa1da083ce7aa8f732797b58a155179f1cbb68897a740e5fb9c486aad1588738732d4b0aef8","secrets": {"USER": "agent","PASSWORD": "fujeIzLtwk9rYhDk","AGENT_TOKEN": "213f1cc6-1549-475a-bea8-6d3890ceeaa7","PRIVATE_KEY": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDKj29BlC\nocEWuVhQ94/RjoAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIIw1gSurPTDwZidA\n2AIjQZgoQi3IFn9jBtFdP10/Jj7DAAAAoFGkQbB2teSU7ikUsnc7ct2aH3pitM359lNVUh\n7DQbJWMjbQFbrBYyDJP+ALj1/RZmP2yoIf7/wr99q53/pm28Xp1gGP5V2RGRJYCA6kgFIH\nxdB6KEw1Ce7Bz8JaDIeagAGd3xtQTH3cuuleVxCZZnk9NspsPxigADKCls/RUiK7F+z3Qf\nLvs9+PH8nIuhFMYZgo3liqZbVS5z4Fqhyzyq4=\n-----END OPENSSH PRIVATE KEY-----"}}
Важно:
- объект
secrets
доступен только через конфигурационный файл. Заполняется для модулей с агентом - ключи в объекте
secrets
регистрозависимые. Т.е. USER != user. Если в конфигурации сканирования указывается секрет${{secrets.AGENT_TOKEN}}
то в конфигурационном файле должен быть прописан секрет"AGENT_TOKEN": "<token>"
2. Переменные окружения
- Префикс:
NS_
- Ограничение: Не поддерживает массивы/списки
export NS_SERVER_URL="https://main-url.com"export NS_CLIENT_ID="327e4a1403d21b134534078c36bc8369"export NS_CLIENT_SECRET="e8g_4a815534c5637667c098474d5b9b5988969590f7e40960f38c09cc59cad0dfa1da083ce7aa8f732797b58a155179f1cbb68897a740e5fb9c486aad1588738732d4b0aef8"
3. Параметры командной строки
- Формат: Поддерживает множественные значения через повторение параметра
./net_scanner \--serverURL=https://main-url.com \--clientId=327e4a1403d21b134534078c36bc8369 \--clientSecret=e8g_4a815534c5637667c098474d5b9b5988969590f7e40960f38c09cc59cad0dfa1da083ce7aa8f732797b58a155179f1cbb68897a740e5fb9c486aad1588738732d4b0aef8 \--interfaces=lo0 \--interfaces=en0 \--dns=8.8.8.8 \--dns=1.1.1.1 \--allowedIPs=192.168.0.1/24 \--allowedIPs=10.10.1.123/32 \--allowedIPs=10.10.2.1/24
Приоритет конфигурации
Конфигурационные источники применяются в следующем порядке (чем выше в списке - выше приоритет):
- Параметры командной строки
- JSON-файл
- Переменные окружения
Особенности
После установки и первичной конфигурации (см. Установка сетевого сканера) сканер производит http запрос для OAuth авторизации и регистрации себя в системе . В ответ он получает дополнительную конфигурацию и JWT токен для авторизации. Такой запрос может выполняться раз в час (по истечению ttl jwt-токена) или при запуске сканера.
Сканер может выступать в роли прокси шлюза по адресу
0.0.0.0:8080
. Прокси используется в сетях L3 для передачи данных от агента на целевом хосте в сервис, который может находиться вне контура, по адресуserverURL
из параметра конфигурирования. Подробнее про количество передаваемой информации можно почитать в документации к агенту (см. Требования к рабочему месту пользователя )Сканер передает на сервер телеметрию о себе. Данную информацию можно будет посмотреть в карточке сканера.