Docs
Личный кабинетЛК

Установка и настройка сетевого сканера


Описание

Сканер - клиентское приложение, устанавливающееся на выделенный сервер и позволяющее производить сканирование разрешенных сетей.

Системные требования

  • Операционная система: Сервер с ОС 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/roles
cd exploitdog/roles
git clone https://github.com/exploitdog/ansible-net-scanner.git

Вернитесь в каталог exploitdog

cd ..

Создайте плейбук, например net-scanner.yaml, со следующим содержимым:

## Указанные параметры в переменных, являются значениями по умолчанию
- hosts: example
roles:
- ansible-net-scanner
vars:
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: "" ## Идентификатор клиента OAuth
exploitdog_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 личного кабинета. Например, для облачного решения:

Пример:

exploitdog/net-scanner.yaml
- hosts: example
roles:
- ansible-net-scanner
vars:
exploitdog_net_scanner_url: https://main-url.com
vm_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/tvMYCINsaXjM65AN3uYqMobf7QdeAnQSifK7SBVw4AZGV
0OXpKyOwI8wJo6Cv+zRmsxZNeSRAlNXG1JUuch/heXAiawxHtv1frH5IwN+PNUJZ
q24gTIQtriFZSFnP2j6Fn6OlFCEiQUJpaKcJQ7t+dZ8NJMP2mWvTc2axpQIDAQAB
AoGATHiwR7muta9JUq3fdin5J/7cGrVIPTpyQ7AnnqKToOnvXfZ01I6yH5HlSa+A
ig65aaYR+1ZFfqT3wm5dR+CN7Oh6eMMBvVd+rtIuilAeskup6A5iW5HTB/surD8R
TT5HKfimnWxDxfZiv8pVWfAoCdE7sUy1g0QUOVhMoE9FiAECQQDC9tuoyMf8uxUQ
jk9eAX3EnnNdKWiFkyTlY6D2/ztdu9kh/U4pkArHkcElAknEvqJOrrxN98wHeHVn
u0PAUTx1AkEAv0x/C/3LmPlHAS9EtQ7+G7eONV7hhMOwwmd1wHBfhuxAEW8DaAR2
3BfoCcGjxEez7SZ1aVRDTi1HtZMWR2a6cQJBAIkKX+hKCVi6X9odTehz/+VewxRu
8MtDXKHo39H+IcqHKd7cYD6SwyD4cN0EuLmUjh3kcPQVA9MUduINHVhnQakCQDgG
tWbTq99fkpYcO+kzPOTtO28SHMZ/cbNeDbSQtMmVQ6ZXdw3t0MnhDopc9hO0VFPu
YZC5pwSsakYZj/rVcWECQQC6f4rd1jhS7wxNqZ7O/I+uwMmraq/BovKyL1zidN8K
AlkAiHg6FJb1WvRy44caOvlPAuP+/YQIr8/SKkZDu6tU
-----END RSA PRIVATE KEY-----

Далее необходимо создать инвентарь и указать в нём параметры подключения для всех машин, на которые необходимо установить сетевой сканер, в примере файл будет называться hosts:

[example]
10.0.0.1 ansible_user=root ansible_port=22
10.0.0.2 ansible_user=root ansible_port=22
10.0.0.3 ansible_user=root ansible_port=22

Структура директории должна иметь следующий вид:

roles/
ansible-net-scanner/
hosts
net-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-серверы для разрешения доменов-
concurrentintegerМаксимальное количество одновременно обрабатываемых заданий (не опирается на количество CPU)10
serverURLURLБазовый URL сервера (только HTTPS). Для облачного решения: -
proxyURLURLПрокси-сервер для подключения (см. Особенности настройки proxyURL)-
logLevelstringУровень логирования (debug, info, warn, error)info
clientIdstringИдентификатор клиента OAuth (см. Как создать Сервис аккаунт)-
clientSecretstringСекретный ключ клиента (см. Как создать Сервис аккаунт)-
ipAddressIPСтатический IP текущего узлаавтоопределение
hostIdstringУникальный идентификатор хоста-
fqdnstringПолное доменное имя устройства-
rateLimitintegerЛимит запросов в секунду (RPS)-
secretsmapСекреты приложения (см. Конфигурационный файл JSON)-

Особенности настройки proxyURL

  1. Поддерживаемые схемы прокси
    • http://
    • https://
  2. Учетные данные (логин/пароль) передаются через URL
    • http://username:password@proxy-host:port
    • https://username:password@proxy-host:port
  3. Таймауты и производительность
    • Общий таймаут клиента (5 секунд) включает установку соединения с прокси. Если прокси не отвечает вовремя, запрос прерывается.
  4. Прозрачность работы
    • Прокси обязан поддерживать метод CONNECT для работы с HTTPS.
    • Все запросы от сканера будут проходить через прокси.
  5. Примеры рабочих конфигураций
    • HTTP-прокси: http://proxy.example.com:8080
    • HTTPS-прокси с аутентификацией: https://user:pass@secure-proxy.com:3128

Для работы с https схемой proxy берутся системные сертификаты.

Методы конфигурации

1. Конфигурационный файл JSON

  • Расположение: /etc/exploitdog_net_scanner/config.json
  • Требования к правам: 0600
/etc/exploitdog_net_scanner/config.json
{
"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

Приоритет конфигурации

Конфигурационные источники применяются в следующем порядке (чем выше в списке - выше приоритет):

  1. Параметры командной строки
  2. JSON-файл
  3. Переменные окружения

Особенности

  • После установки и первичной конфигурации (см. Установка сетевого сканера) сканер производит http запрос для OAuth авторизации и регистрации себя в системе . В ответ он получает дополнительную конфигурацию и JWT токен для авторизации. Такой запрос может выполняться раз в час (по истечению ttl jwt-токена) или при запуске сканера.

  • Сканер может выступать в роли прокси шлюза по адресу 0.0.0.0:8080. Прокси используется в сетях L3 для передачи данных от агента на целевом хосте в сервис, который может находиться вне контура, по адресу serverURL из параметра конфигурирования. Подробнее про количество передаваемой информации можно почитать в документации к агенту (см. Требования к рабочему месту пользователя )

  • Сканер передает на сервер телеметрию о себе. Данную информацию можно будет посмотреть в карточке сканера.

Назад
oauth
Вперед
Сканирования