Strelka Web UI 是一个基于浏览器和 API 的文件提交前端,用于 Strelka 企业文件扫描器。它允许用户向 Strelka 集群提交文件,并轻松查看历史响应结果。Strelka Web UI 支持 LDAP 认证和 API 访问,提供了与 Strelka 扫描器交互的安全灵活方式。本文档提供了有关如何设置和使用 Strelka Web UI 的详细信息,以及其功能和相关项目。
文件提交 UI 提供以下功能:
默认情况下,Strelka UI 配置为使用最小的“快速开始”部署,允许用户测试系统。此部署将针对本地 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 中静态设置。
在本地运行时,配置的优先级为:系统环境 -> .env -> ./app/config/config.py。在 Docker 中运行时,配置的优先级为:Docker 环境 -> 系统环境 -> ./app/config/config.py。
请参考 ./app/example.env 进行环境变量设置。
以下详细说明 ./app/config/config.py 中的配置项。
您还可以在 UI 提交表中设置引用,使用户能够根据 request.id 快速跳转到外部站点。通过修改 ./ui/src/config.js 并按照下表 SEARCH_URL 的示例,您可以为用户提供指向外部站点(例如 SIEM / 日志系统)的链接。确保您的链接中包含字符串 <REPLACE>,UI 将用相关文件的请求 ID 替换该字符串。
./ui/src/config.js 中支持的修改字段:
| Field Name | Value | Example |
|---|---|---|
| SEARCH_URL | 外部应用程序的搜索 URL | 例如:https://search.com/?q=request.id= |
如果您的网络环境需要自定义 CA 捆绑包(例如公司 TLS 检查代理),您可以在构建时和运行时提供它,而无需将任何证书文件提交到存储库。
构建时 — 在运行 docker compose build 之前,通过 CUSTOM_CA_CERT 传递 CA 捆绑包的路径。证书使用 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 捆绑包放在该目录中,并在 ./app/strelka_ui/.env 中或作为 Docker 环境变量设置 REQUESTS_CA_BUNDLE(可选地设置 SSL_CERT_FILE):
# ./app/strelka_ui/.env
REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt
SSL_CERT_FILE=/certs/ca-bundle.crt
Strelka UI 还为基于用户脚本的访问提供了 API 路由。请参考以下路由了解详细信息:
有关如何使用 Python requests 对 Strelka UI API 进行身份验证、收集扫描统计信息以及提交文件的示例,可在 ./misc/examples/api_examples.py 中找到。
数据库使用 https://www.sqlalchemy.org/ 作为 ORM。Flask-Migrate 用于通过 Alembic 提供数据库迁移。提供了辅助脚本文件 manage.py,以协助处理常见的数据库任务。
如果要创建新数据库或修改当前数据库,必须执行以下步骤 — 尽管在启动集群时会为您自动执行这些命令:
从模型更改生成新迁移:
使用当前数据库配置更新数据库:
后端应用程序主要由以下技术组成:
前端 UI 是使用 React 创建的 React JS 应用程序,由 Flask 提供服务。UI 使用 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 | LDAP 的 CA 证书路径,如果需要(例如 /path/to/ca_certs) | 否 |
| VIRUSTOTAL_API_KEY | 用于 VirusTotal 哈希查询的 API 密钥 | 是 |
| VIRUSTOTAL_API_LIMIT | 限制 VirusTotal 扫描的文件数量(默认:30) | 是 |
| LDAP_URL | LDAP 服务器的 URL(例如 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 | UI 的构建文件夹(例如 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_NAME | 外部应用程序的搜索名称 | 例如:Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | 默认从提交表视图中排除的用户。默认情况下可用于隐藏自动化任务。 | 例如:SearchBot |