
Strelka Web-UI für Dateiübermittlung und -analyse
Die Strelka-Web-UI ist ein browser- und API-basiertes Frontend zur Dateiübermittlung für den Strelka Enterprise File Scanner. Sie ermöglicht es Benutzern, Dateien an einen Strelka-Cluster zu übermitteln und frühere Antwortergebnisse bequem einzusehen. Die Strelka-Web-UI unterstützt LDAP-Authentifizierung und API-Zugriff und bietet so eine sichere und flexible Möglichkeit zur Interaktion mit dem Strelka-Scanner. Dieses Dokument enthält Details zur Einrichtung und Verwendung der Strelka-Web-UI sowie zu ihren Funktionen und verwandten Projekten.
Die Dateiübermittlungs-Benutzeroberfläche bietet die folgenden Funktionen:
Standardmäßig ist die Strelka-UI für eine minimale „Quickstart“-Bereitstellung konfiguriert, mit der Benutzer das System testen können. Diese Bereitstellung verwendet eine lokale Strelka-Instanz und startet eine lokale Datenbank. Benutzer können mit einem beliebigen Benutzernamen/Passwort auf dieses System zugreifen. Weitere Informationen zur Verwendung einer entfernten Strelka-Instanz, Datenbank oder zur LDAP-Authentifizierung finden Sie im Abschnitt Zusätzliche Einrichtung:
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
Dieser Abschnitt enthält Details zur Verwendung einer entfernten Strelka-Instanz, einer entfernten Datenbank zur Speicherung und eines LDAP-Servers zur Authentifizierung für eine sicherere Nutzung. Um diese zu aktivieren, können Sie Umgebungsvariablen verwenden, um die Standardwerte zu überschreiben.
Die Backend-Konfiguration erfolgt über Umgebungsvariablen und kann statisch in ./app/config/config.py festgelegt werden.
Bei lokaler Ausführung lautet die Prioritätsreihenfolge der Konfiguration: System environment -> .env -> ./app/config/config.py.
Bei Ausführung in Docker lautet die Prioritätsreihenfolge der Konfiguration: Docker environment -> System environment -> ./app/config/config.py.
Bitte beachten Sie ./app/example.env für die Einrichtung der Umgebungsvariablen.
Im Folgenden werden die Konfigurationselemente in ./app/config/config.py aufgeführt.
Sie können auch einen Verweis in der Übermittlungstabelle der Benutzeroberfläche festlegen, damit Benutzer anhand der request.id schnell zu einer externen Website wechseln können. Durch Ändern von ./ui/src/config.js und Befolgen des SEARCH_URL-Beispiels in der folgenden Tabelle können Sie Benutzern einen Link zu einer externen Website (z. B. SIEM / Logger) bereitstellen. Stellen Sie sicher, dass Ihr Link die Zeichenfolge <REPLACE> enthält; die Benutzeroberfläche ersetzt diese Zeichenfolge durch die relevante Datei-Request-ID.
Unterstützte Änderungsfelder in ./ui/src/config.js:
| Feldname | Wert | Beispiel |
|---|
Falls Ihre Netzwerkumgebung ein benutzerdefiniertes CA-Bundle erfordert (z. B. einen Unternehmens-TLS-Inspektionsproxy), können Sie es sowohl zur Build-Zeit als auch zur Laufzeit bereitstellen, ohne Zertifikatsdateien in das Repository zu committen.
Build-Zeit – Übergeben Sie den Pfad zu Ihrem CA-Bundle über CUSTOM_CA_CERT, bevor Sie docker compose build ausführen. Das Zertifikat wird mithilfe eines BuildKit-Secrets temporär eingebunden und niemals in einer Image-Ebene gespeichert:
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
In offenen Netzwerken, in denen kein benutzerdefiniertes CA erforderlich ist, lassen Sie die Variable einfach weg – der Build funktioniert auch ohne sie:
docker compose up --build
Laufzeit – Das Verzeichnis certs im Projektstamm wird in den laufenden Container unter /certs eingebunden. Platzieren Sie Ihr CA-Bundle dort und setzen Sie REQUESTS_CA_BUNDLE (und optional SSL_CERT_FILE) in ./app/strelka_ui/.env oder als Docker-Umgebungsvariable:
# ./app/strelka_ui/.env
REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt
SSL_CERT_FILE=/certs/ca-bundle.crt
Die Strelka-UI bietet außerdem API-Routen für den Zugriff über Benutzerskripte. Details finden Sie in den folgenden Routen:
Beispiele für die Authentifizierung an der Strelka-UI-API, das Abrufen von Scan-Statistiken und das Übermitteln einer Datei mit Python requests finden Sie in ./misc/examples/api_examples.py.
Die Datenbank verwendet https://www.sqlalchemy.org/ als ORM. Flask-Migrate wird verwendet, um Datenbankmigrationen über Alembic bereitzustellen. Eine Hilfsskriptdatei manage.py wird zur Unterstützung allgemeiner Datenbankaufgaben bereitgestellt.
Wenn Sie eine neue Datenbank erstellen oder die aktuelle ändern, müssen Sie die folgenden Schritte ausführen – diese Befehle werden beim Starten des Clusters für Sie ausgeführt:
Neue Migration aus Modelländerungen erstellen:
Datenbank mit der aktuellen Datenbankkonfiguration aktualisieren
Die Backend-Anwendung besteht überwiegend aus den folgenden Technologien:
Die Frontend-Benutzeroberfläche ist eine React-JS-Anwendung, die mit React erstellt und von Flask bereitgestellt wird. Die Benutzeroberfläche verwendet die Bibliothek Antd und Antd ProComponents; das Routing wird von React Router übernommen.
Die Strelka-UI und der zugehörige Code werden unter den Bedingungen der Apache-2.0-Lizenz veröffentlicht.
| Feldname | Wert | Erforderlich |
|---|
| STRELKA_HOST | Strelka-Hostname (z. B. 0.0.0.0) | Ja |
| STRELKA_PORT | Strelka-Portnummer (z. B. 57314) | Ja |
| STRELKA_CERT | Pfad zum Zertifikat für Strelka, falls erforderlich (z. B. /path/to/cert.pem) | Nein |
| CA_CERT_PATH | Pfad zu CA-Zertifikaten für LDAP, falls erforderlich (z. B. /path/to/ca_certs) | Nein |
| VIRUSTOTAL_API_KEY | API-Schlüssel für VirusTotal-Hash-Abfrage | Ja |
| VIRUSTOTAL_API_LIMIT | Limit für die Anzahl der Dateien, die von VirusTotal gescannt werden sollen (Standard: 30) | Ja |
| LDAP_URL | URL zum LDAP-Server (z. B. ldaps://ldap.example.com:636) | Nein |
| LDAP_SEARCH_BASE | Suchbasis für LDAP-Abfragen (z. B. DC=example,DC=com) | Nein |
| LDAP_USERNAME_ORGANIZATION | Benutzernamen-Organisation für LDAP-Abfragen (z. B. org//) | Nein |
| LDAP_ATTRIBUTE_ACCOUNT_NAME_FIELD | LDAP-Attribut für den Kontonamen (z. B. sAMAccountName) | Nein |
| LDAP_ATTRIBUTE_FIRST_NAME_FIELD | LDAP-Attribut für den Vornamen (z. B. givenName) | Nein |
| LDAP_ATTRIBUTE_LAST_NAME_FIELD | LDAP-Attribut für den Nachnamen (z. B. sn) | Nein |
| LDAP_ATTRIBUTE_MEMBER_OF_FIELD | LDAP-Attribut für die Mitgliedschaft (z. B. memberOf) | Nein |
| LDAP_ATTRIBUTE_MEMBER_REQUIREMENT_FIELD | LDAP-Attribut für die Mitgliedschaftsanforderung (z. B. AD Attribute) | Nein |
| STATIC_ASSET_FOLDER | Build-Ordner für die Benutzeroberfläche (z. B. build) | Ja |
| MIGRATION_DIRECTORY | SQLAlchemy-Migrationsverzeichnis (z. B. ./migrations) | Ja |
| DATABASE_USERNAME | Datenbank-Benutzername (z. B. admin) | Ja |
| DATABASE_PASSWORD | Datenbank-Passwort (z. B. password123) | Ja |
| DATABASE_HOST | Datenbank-Hostname (z. B. db.example.com) | Ja |
| DATABASE_PORT | Datenbank-Portnummer (z. B. 5432) | Ja |
| DATABASE_DBNAME | Name der Datenbank (z. B. mydb) | Ja |
| API_KEY_EXPIRATION | Gültigkeitsdauer des API-Schlüssels in Tagen (z. B. 30) | Ja |
| SEARCH_URL | Such-URL für die externe Anwendung | z. B.: https://search.com/?q=request.id= |
| SEARCH_NAME | Suchname für die externe Anwendung | z. B.: Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | Standardbenutzer, die von der Übermittlungstabellenansicht ausgeschlossen werden. Nützlich, um Automatisierungen standardmäßig auszublenden. | z. B.: SearchBot |