
Strelka Web UI para el envío y análisis de archivos
La Strelka Web UI es un frontend de envío de archivos basado en navegador y API para el Strelka Enterprise File Scanner. Permite a los usuarios enviar archivos a un clúster de Strelka y revisar fácilmente los resultados históricos de las respuestas. La Strelka Web UI admite autenticación LDAP y acceso API, proporcionando una forma segura y flexible de interactuar con el escáner Strelka. Este documento proporciona detalles sobre cómo configurar y usar la Strelka Web UI, así como sus características y proyectos relacionados.
La UI de envío de archivos proporciona las siguientes características:
De forma predeterminada, la Strelka UI está configurada para usar un despliegue mínimo de "inicio rápido" que permite a los usuarios probar el sistema. Este despliegue se dirigirá a una instancia local de Strelka e iniciará una base de datos local. Los usuarios podrán acceder a este sistema con el nombre de usuario / contraseña que deseen. Para obtener información adicional sobre cómo apuntar a una instancia remota de Strelka, la base de datos o usar LDAP para autenticación, consulta la sección Configuración adicional:
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
Esta sección proporciona detalles sobre cómo apuntar a una instancia remota de Strelka, una base de datos remota para almacenamiento y un servidor LDAP para autenticación para un uso más seguro. Para habilitarlos, puedes usar variables de entorno para anular los valores predeterminados.
La configuración del backend se proporciona a través de variables de entorno y se puede establecer estáticamente en ./app/config/config.py.
Al ejecutar localmente, la precedencia de la configuración es: System environment -> .env -> ./app/config/config.py.
Al ejecutar en Docker, la precedencia de la configuración es: Docker environment -> System environment -> ./app/config/config.py.
Consulta ./app/example.env para la configuración de variables de entorno.
Lo siguiente detalla los elementos de configuración en ./app/config/config.py.
También puedes establecer una referencia en la tabla de envíos de la UI para permitir a los usuarios redirigirse rápidamente a un sitio externo según el request.id. Modificando ./ui/src/config.js y siguiendo el ejemplo SEARCH_URL en la siguiente tabla, puedes proporcionar a los usuarios un enlace a un sitio externo (p. ej., SIEM / logger). Asegúrate de que tu enlace contenga la cadena <REPLACE> y la UI reemplazará esa cadena con el ID de solicitud del archivo correspondiente.
Campos de modificación admitidos en ./ui/src/config.js:
| Field Name | Value | Example |
|---|---|---|
Si tu entorno de red requiere un paquete de CA personalizado (p. ej., un proxy corporativo de inspección TLS), puedes proporcionarlo tanto en el momento de la compilación como en el tiempo de ejecución sin comprometer ningún archivo de certificado en el repositorio.
Tiempo de compilación — pasa la ruta a tu paquete de CA mediante CUSTOM_CA_CERT antes de ejecutar docker compose build. El certificado se monta de forma efímera usando un secreto de BuildKit y nunca se escribe en ninguna capa de imagen:
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
En redes abiertas donde no se necesita una CA personalizada, omite la variable por completo: la compilación se degrada correctamente:
docker compose up --build
Tiempo de ejecución — el directorio certs en la raíz del proyecto se monta en /certs dentro del contenedor en ejecución. Coloca tu paquete de CA allí y establece REQUESTS_CA_BUNDLE (y opcionalmente SSL_CERT_FILE) en ./app/strelka_ui/.env o como una variable de entorno de Docker:
# ./app/strelka_ui/.env
REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt
SSL_CERT_FILE=/certs/ca-bundle.crt
La Strelka UI también proporciona rutas API para el acceso basado en scripts de usuario. Consulta las siguientes rutas para obtener detalles:
Ejemplos de cómo autenticarse en la API de Strelka UI, recopilar estadísticas de escaneo y enviar un archivo usando Python requests se pueden encontrar en ./misc/examples/api_examples.py
La base de datos usa https://www.sqlalchemy.org/ como ORM. Flask-Migrate se utiliza para proporcionar migraciones de base de datos a través de Alembic. Se proporciona un archivo de script auxiliar, manage.py, para ayudar con tareas comunes de base de datos.
Si estás creando una nueva base de datos, o modificando la actual, debes realizar los siguientes pasos (aunque al iniciar el clúster, estos comandos se ejecutarán por ti):
Generar una nueva migración a partir de cambios en el modelo:
Actualizar la base de datos usando la configuración actual de la base de datos:
La aplicación backend se compone principalmente de las siguientes tecnologías:
La UI frontend es una aplicación React JS creada con React servida desde Flask. La UI usa la librería Antd y Antd ProComponents, y el enrutamiento lo maneja React Router.
Strelka UI y su código asociado se publican bajo los términos de la Licencia Apache 2.0.
| Field Name | Value | Required |
|---|
| STRELKA_HOST | Nombre de host de Strelka (p. ej., 0.0.0.0) | Sí |
| STRELKA_PORT | Número de puerto de Strelka (p. ej., 57314) | Sí |
| STRELKA_CERT | Ruta al certificado de Strelka, si es necesario (p. ej., /path/to/cert.pem) | No |
| CA_CERT_PATH | Ruta a los certificados CA para LDAP, si es necesario (p. ej., /path/to/ca_certs) | No |
| VIRUSTOTAL_API_KEY | Clave de API para la búsqueda de hash en VirusTotal | Sí |
| VIRUSTOTAL_API_LIMIT | Limitar cuántos archivos deben ser escaneados por VirusTotal (Predeterminado: 30) | Sí |
| LDAP_URL | URL del servidor LDAP (p. ej., ldaps://ldap.example.com:636) | No |
| LDAP_SEARCH_BASE | Base de búsqueda para consultas LDAP (p. ej., DC=example,DC=com) | No |
| LDAP_USERNAME_ORGANIZATION | Organización de nombre de usuario para consultas LDAP (p. ej., org//) | No |
| LDAP_ATTRIBUTE_ACCOUNT_NAME_FIELD | Atributo LDAP para nombre de cuenta (p. ej., sAMAccountName) | No |
| LDAP_ATTRIBUTE_FIRST_NAME_FIELD | Atributo LDAP para nombre (p. ej., givenName) | No |
| LDAP_ATTRIBUTE_LAST_NAME_FIELD | Atributo LDAP para apellido (p. ej., sn) | No |
| LDAP_ATTRIBUTE_MEMBER_OF_FIELD | Atributo LDAP para miembro de (p. ej., memberOf) | No |
| LDAP_ATTRIBUTE_MEMBER_REQUIREMENT_FIELD | Atributo LDAP para requisito de miembro (p. ej., AD Attribute) | No |
| STATIC_ASSET_FOLDER | Carpeta de compilación para la UI (p. ej., build) | Sí |
| MIGRATION_DIRECTORY | Directorio de migraciones de SQLAlchemy (p. ej., ./migrations) | Sí |
| DATABASE_USERNAME | Nombre de usuario de la base de datos (p. ej., admin) | Sí |
| DATABASE_PASSWORD | Contraseña de la base de datos (p. ej., password123) | Sí |
| DATABASE_HOST | Nombre de host de la base de datos (p. ej., db.example.com) | Sí |
| DATABASE_PORT | Número de puerto de la base de datos (p. ej., 5432) | Sí |
| DATABASE_DBNAME | Nombre de la base de datos (p. ej., mydb) | Sí |
| API_KEY_EXPIRATION | Duración en días de la expiración de la clave de API (p. ej., 30) | Sí |
| SEARCH_URL |
| URL de búsqueda para la aplicación externa |
| Ej: https://search.com/?q=request.id= |
| SEARCH_NAME | Nombre de búsqueda para la aplicación externa | Ej: Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | Usuarios predeterminados excluidos de la vista de la tabla de Envíos. Útil para ocultar automatizaciones por defecto. | Ej: SearchBot |