
Strelka Web UI для отправки и анализа файлов
Веб-интерфейс Strelka — это браузерный и API-ориентированный фронтенд для отправки файлов в Strelka Enterprise File Scanner. Он позволяет пользователям отправлять файлы в кластер Strelka и легко просматривать сохранённые результаты ответов. Веб-интерфейс Strelka поддерживает LDAP-аутентификацию и доступ через API, обеспечивая безопасный и гибкий способ взаимодействия со сканером Strelka. В этом документе приведены сведения о настройке и использовании веб-интерфейса Strelka, а также о его возможностях и связанных проектах.
Интерфейс отправки файлов предоставляет следующие возможности:
По умолчанию веб-интерфейс Strelka настроен на минимальное развёртывание «quickstart», позволяющее пользователям протестировать систему. Такое развёртывание будет использовать локальный экземпляр Strelka и запустит локальную базу данных. Пользователи смогут получить доступ к этой системе с любыми именем пользователя и паролем. Дополнительные сведения о подключении к удалённому экземпляру Strelka, базе данных или использовании LDAP для аутентификации см. в разделе Дополнительная настройка:
Start or ensure Strelka cluster is ready and accessible.
See https://github.com/target/strelka for more information.
# Terminal 1
# From the ./strelka-ui directory
$ docker-compose -f docker-compose.yml up
1) Open A Browser
2) Navigate to 0.0.0.0:8080
3) Login with:
- Username: strelka
- Password: strelka
В этом разделе приведены сведения о том, как подключиться к удалённому экземпляру Strelka, удалённой базе данных для хранения и LDAP-серверу для аутентификации с целью более безопасного использования. Для этого можно использовать переменные окружения, чтобы переопределить значения по умолчанию.
Конфигурация бэкенда задаётся через переменные окружения и может быть статически установлена в ./app/config/config.py.
При локальном запуске приоритет конфигурации: System environment -> .env -> ./app/config/config.py.
При запуске в Docker приоритет конфигурации: Docker environment -> System environment -> ./app/config/config.py.
Обратитесь к ./app/example.env для настройки переменных окружения.
Ниже описаны параметры конфигурации в ./app/config/config.py.
Вы также можете задать ссылку в таблице отправки интерфейса, чтобы пользователи могли быстро переходить на внешний сайт на основе request.id. Изменив ./ui/src/config.js и следуя примеру SEARCH_URL в приведённой ниже таблице, вы можете предоставить пользователям ссылку на внешний сайт (например, SIEM / система логирования). Убедитесь, что в вашей ссылке есть строка <REPLACE>, и интерфейс заменит её на идентификатор запроса соответствующего файла.
Поддерживаемые поля для изменения в ./ui/src/config.js:
| Field Name | Value | Example |
|---|---|---|
Если в вашей сетевой среде требуется пользовательский набор сертификатов CA (например, корпоративный прокси, инспектирующий TLS), вы можете передать его как на этапе сборки, так и во время выполнения, не добавляя файлы сертификатов в репозиторий.
Время сборки — передайте путь к вашему набору CA через CUSTOM_CA_CERT перед запуском docker compose build. Сертификат монтируется эфемерно с помощью секрета BuildKit и никогда не записывается ни в один слой образа:
CUSTOM_CA_CERT=/path/to/your/ca-bundle.crt docker compose build
# or, combined with up:
CUSTOM_CA_CERT=/path/to/your/ca-bundle.crt docker compose up --build
В открытых сетях, где пользовательский CA не требуется, просто не задавайте переменную — сборка корректно выполнится и без неё:
docker compose up --build
Время выполнения — каталог certs в корне проекта монтируется в /certs внутри запущенного контейнера. Поместите туда ваш набор CA и задайте REQUESTS_CA_BUNDLE (и опционально SSL_CERT_FILE) в ./app/strelka_ui/.env или как переменную окружения Docker:
# ./app/strelka_ui/.env
REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt
SSL_CERT_FILE=/certs/ca-bundle.crt
Веб-интерфейс Strelka также предоставляет API-маршруты для доступа с помощью пользовательских скриптов. Обратитесь к приведённым ниже маршрутам для получения подробной информации:
Примеры аутентификации в API веб-интерфейса Strelka, получения статистики сканирования и отправки файла с использованием Python requests можно найти в ./misc/examples/api_examples.py
База данных использует https://www.sqlalchemy.org/ в качестве ORM. Flask-Migrate используется для миграций базы данных через Alembic. Вспомогательный файл скрипта manage.py предоставляется для выполнения типовых задач с базой данных.
Если вы создаёте новую базу данных или изменяете существующую, необходимо выполнить следующие шаги — хотя при запуске кластера эти команды будут выполнены автоматически.
Создайте новую миграцию из изменений модели:
Обновите базу данных, используя текущую конфигурацию базы данных:
Бэкенд-приложение в основном состоит из следующих технологий:
Фронтенд-интерфейс — это React JS-приложение, созданное с помощью React и раздаваемое Flask. В интерфейсе используются библиотека Antd и Antd ProComponents, а маршрутизация осуществляется через React Router.
Strelka UI и связанный с ним код выпущены на условиях лицензии Apache 2.0.
| Field Name | Value | Required |
|---|
| STRELKA_HOST | Имя хоста Strelka (например, 0.0.0.0) | Да |
| STRELKA_PORT | Номер порта Strelka (например, 57314) | Да |
| STRELKA_CERT | Путь к сертификату для Strelka, если требуется (например, /path/to/cert.pem) | Нет |
| CA_CERT_PATH | Путь к сертификатам CA для LDAP, если требуется (например, /path/to/ca_certs) | Нет |
| VIRUSTOTAL_API_KEY | API-ключ для проверки хешей в VirusTotal | Да |
| VIRUSTOTAL_API_LIMIT | Ограничение количества файлов, сканируемых VirusTotal (по умолчанию: 30) | Да |
| LDAP_URL | URL LDAP-сервера (например, ldaps://ldap.example.com:636) | Нет |
| LDAP_SEARCH_BASE | База поиска для LDAP-запросов (например, DC=example,DC=com) | Нет |
| LDAP_USERNAME_ORGANIZATION | Организация имени пользователя для LDAP-запросов (например, org//) | Нет |
| LDAP_ATTRIBUTE_ACCOUNT_NAME_FIELD | Атрибут LDAP для имени учётной записи (например, sAMAccountName) | Нет |
| LDAP_ATTRIBUTE_FIRST_NAME_FIELD | Атрибут LDAP для имени (например, givenName) | Нет |
| LDAP_ATTRIBUTE_LAST_NAME_FIELD | Атрибут LDAP для фамилии (например, sn) | Нет |
| LDAP_ATTRIBUTE_MEMBER_OF_FIELD | Атрибут LDAP для членства (например, memberOf) | Нет |
| LDAP_ATTRIBUTE_MEMBER_REQUIREMENT_FIELD | Атрибут LDAP для требования членства (например, AD Attribute) | Нет |
| STATIC_ASSET_FOLDER | Папка сборки для интерфейса (например, build) | Да |
| MIGRATION_DIRECTORY | Каталог миграций SQLAlchemy (например, ./migrations) | Да |
| DATABASE_USERNAME | Имя пользователя базы данных (например, admin) | Да |
| DATABASE_PASSWORD | Пароль базы данных (например, password123) | Да |
| DATABASE_HOST | Имя хоста базы данных (например, db.example.com) | Да |
| DATABASE_PORT | Номер порта базы данных (например, 5432) | Да |
| DATABASE_DBNAME | Имя базы данных (например, mydb) | Да |
| API_KEY_EXPIRATION | Срок действия API-ключа в днях (например, 30) | Да |
| SEARCH_URL |
| Поисковый URL внешнего приложения |
| Например: https://search.com/?q=request.id= |
| SEARCH_NAME | Имя поиска во внешнем приложении | Например: Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | Пользователи, исключаемые из представления таблицы отправок по умолчанию. Полезно для скрытия автоматизаций по умолчанию. | Например: SearchBot |