
Strelka Web UI для отправки и анализа файлов
Strelka Web UI — это браузерный и API-ориентированный фронтенд для отправки файлов в Strelka Enterprise File Scanner. Он позволяет пользователям отправлять файлы в кластер Strelka и легко просматривать исторические результаты ответов. Strelka Web UI поддерживает LDAP-аутентификацию и доступ через API, обеспечивая безопасный и гибкий способ взаимодействия со сканером Strelka. В этом документе описано, как настроить и использовать Strelka Web UI, а также его возможности и связанные проекты.
UI для отправки файлов предоставляет следующие возможности:
По умолчанию Strelka UI настроен на использование минимального развёртывания «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.
Вы также можете задать ссылку в таблице отправок UI, чтобы позволить пользователям быстро переходить на внешний сайт на основе request.id. Изменив ./ui/src/config.js и следуя примеру SEARCH_URL в следующей таблице, вы можете предоставить пользователям ссылку на внешний сайт (например, SIEM / логгер). Убедитесь, что ваша ссылка содержит строку <REPLACE>, и UI заменит эту строку на идентификатор запроса соответствующего файла.
Поддерживаемые поля модификации в ./ui/src/config.js:
| Field Name | Value | Example |
|---|---|---|
| SEARCH_URL |
Если ваша сетевая среда требует пользовательского 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 UI также предоставляет маршруты API для доступа на основе пользовательских скриптов. Обратитесь к приведённым ниже маршрутам для получения подробностей:
Примеры того, как аутентифицироваться в API Strelka UI, собирать статистику сканирований и отправлять файл с помощью Python requests, можно найти в ./misc/examples/api_examples.py
База данных использует https://www.sqlalchemy.org/ в качестве ORM. Flask-Migrate используется для обеспечения миграций БД через Alembic. Предоставляется вспомогательный скрипт manage.py для помощи с типовыми задачами базы данных.
Если вы создаёте новую базу данных или изменяете текущую, вы должны выполнить следующие шаги — хотя при запуске кластера эти команды будут выполнены за вас:
Сгенерировать новую миграцию из изменений модели:
Обновить базу данных, используя текущую конфигурацию базы данных
Бэкенд-приложение преимущественно состоит из следующих технологий:
Фронтенд UI — это приложение на React JS, созданное с использованием React и обслуживаемое из Flask. UI использует библиотеку Antd и Antd ProComponents, а маршрутизация обрабатывается React Router.
Strelka UI и связанный с ним код выпускаются на условиях Apache 2.0 License.
| Field Name | Value | Required |
|---|
| STRELKA_HOST | Strelka hostname (e.g., 0.0.0.0) | Yes |
| STRELKA_PORT | Strelka port number (e.g., 57314) | Yes |
| STRELKA_CERT | Path to certificate for Strelka, if needed (e.g., /path/to/cert.pem) | No |
| CA_CERT_PATH | Path to CA certificates for LDAP, if needed (e.g., /path/to/ca_certs) | No |
| VIRUSTOTAL_API_KEY | API Key for VirusTotal Hash Lookup | Yes |
| VIRUSTOTAL_API_LIMIT | Limit how many files should be scanned by VirusTotal (Default: 30) | Yes |
| LDAP_URL | URL to LDAP server (e.g., ldaps://ldap.example.com:636) | No |
| LDAP_SEARCH_BASE | Search base for LDAP queries (e.g., DC=example,DC=com) | No |
| LDAP_USERNAME_ORGANIZATION | Username organization for LDAP queries (e.g., org//) | No |
| LDAP_ATTRIBUTE_ACCOUNT_NAME_FIELD | LDAP attribute for account name (e.g., sAMAccountName) | No |
| LDAP_ATTRIBUTE_FIRST_NAME_FIELD | LDAP attribute for first name (e.g., givenName) | No |
| LDAP_ATTRIBUTE_LAST_NAME_FIELD | LDAP attribute for last name (e.g., sn) | No |
| LDAP_ATTRIBUTE_MEMBER_OF_FIELD | LDAP attribute for member of (e.g., memberOf) | No |
| LDAP_ATTRIBUTE_MEMBER_REQUIREMENT_FIELD | LDAP attribute for member requirement (e.g., AD Attribute) | No |
| STATIC_ASSET_FOLDER | Build folder for UI (e.g., build) | Yes |
| MIGRATION_DIRECTORY | SQLAlchemy migrations directory (e.g., ./migrations) | Yes |
| DATABASE_USERNAME | Database username (e.g., admin) | Yes |
| DATABASE_PASSWORD | Database password (e.g., password123) | Yes |
| DATABASE_HOST | Database hostname (e.g., db.example.com) | Yes |
| DATABASE_PORT | Database port number (e.g., 5432) | Yes |
| DATABASE_DBNAME | Name of the database (e.g., mydb) | Yes |
| API_KEY_EXPIRATION | Duration in days of API key expiration (e.g., 30) | Yes |
| Search URL for the external application |
| Ex: https://search.com/?q=request.id= |
| SEARCH_NAME | Search name for the external application | Ex: Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | Default users to be exluded from Submission table view. Useful for hiding automations by default. | Ex: SearchBot |