
Strelka Web UI per l'invio e l'analisi di file
La Strelka Web UI è un frontend per l'invio di file basato su browser e API per lo Strelka Enterprise File Scanner. Consente agli utenti di inviare file a un cluster Strelka e di consultare facilmente i risultati storici delle risposte. La Strelka Web UI supporta l'autenticazione LDAP e l'accesso API, offrendo un modo sicuro e flessibile di interagire con lo scanner Strelka. Questo documento fornisce dettagli su come configurare e utilizzare la Strelka Web UI, oltre alle sue funzionalità e ai progetti correlati.
La UI di invio file fornisce le seguenti funzionalità:
Per impostazione predefinita, la Strelka UI è configurata per utilizzare una distribuzione minima "quickstart" che consente agli utenti di testare il sistema. Questa distribuzione punta a un'istanza Strelka locale e avvia un database locale. Gli utenti potranno accedere al sistema con qualsiasi nome utente / password desiderino. Per ulteriori informazioni su come puntare a un'istanza Strelka remota, a un database remoto o sull'uso di LDAP per l'autenticazione, vedere la sezione Configurazione aggiuntiva:
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
Questa sezione fornisce dettagli su come puntare a un'istanza Strelka remota, a un database remoto per l'archiviazione e a un server LDAP per l'autenticazione, per un uso più sicuro. Per abilitare queste opzioni, puoi utilizzare variabili d'ambiente per sovrascrivere le impostazioni predefinite.
La configurazione del backend è fornita tramite variabili d'ambiente e può essere impostata staticamente in ./app/config/config.py.
In esecuzione locale, la precedenza della configurazione è: System environment -> .env -> ./app/config/config.py.
In esecuzione in Docker, la precedenza della configurazione è: Docker environment -> System environment -> ./app/config/config.py.
Fare riferimento a ./app/example.env per la configurazione delle variabili d'ambiente.
Di seguito sono dettagliati gli elementi di configurazione in ./app/config/config.py.
È inoltre possibile impostare un riferimento nella tabella di invio della UI per consentire agli utenti di passare rapidamente a un sito esterno in base al request.id. Modificando ./ui/src/config.js e seguendo l'esempio SEARCH_URL nella tabella seguente, puoi fornire agli utenti un collegamento a un sito esterno (es., SIEM / logger). Assicurati che il collegamento contenga la stringa <REPLACE> e la UI sostituirà quella stringa con l'ID della richiesta del file pertinente.
Campi di modifica supportati in ./ui/src/config.js:
| Nome campo | Valore | Esempio |
|---|
Se il tuo ambiente di rete richiede un bundle CA personalizzato (es., un proxy aziendale di ispezione TLS), puoi fornirlo sia in fase di build che di runtime senza archiviare alcun file di certificato nel repository.
Fase di build — passa il percorso del tuo bundle CA tramite CUSTOM_CA_CERT prima di eseguire docker compose build. Il certificato viene montato temporaneamente utilizzando un segreto BuildKit e non viene mai scritto in alcun layer dell'immagine:
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
Sulle reti aperte in cui non è necessario un CA personalizzato, ometti del tutto la variabile: la build degrada con grazia:
docker compose up --build
Fase di runtime — la directory certs alla radice del progetto viene montata su /certs all'interno del container in esecuzione. Posiziona lì il tuo bundle CA e imposta REQUESTS_CA_BUNDLE (e opzionalmente SSL_CERT_FILE) in ./app/strelka_ui/.env o come variabile d'ambiente Docker:
# ./app/strelka_ui/.env
REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt
SSL_CERT_FILE=/certs/ca-bundle.crt
La Strelka UI fornisce anche route API per l'accesso basato su script utente. Fare riferimento alle route seguenti per i dettagli:
Esempi su come autenticarsi all'API della Strelka UI, raccogliere le statistiche delle scansioni e inviare un file utilizzando Python requests sono disponibili in ./misc/examples/api_examples.py.
Il database utilizza https://www.sqlalchemy.org/ come ORM. Flask-Migrate viene utilizzato per fornire migrazioni del database tramite Alembic. Viene fornito un file script di supporto, manage.py, per assistere nelle comuni attività del database.
Se stai creando un nuovo database o modificando quello corrente, devi eseguire i seguenti passaggi - anche se all'avvio del cluster questi comandi verranno eseguiti per te:
Genera una nuova migrazione dalle modifiche al modello:
Aggiorna il database utilizzando la configurazione corrente del database:
L'applicazione backend è composta prevalentemente dalle seguenti tecnologie:
La UI frontend è un'applicazione React JS creata con React e servita da Flask. La UI utilizza la libreria Antd e Antd ProComponents, e il routing è gestito da React Router.
La Strelka UI e il suo codice associato sono rilasciati secondo i termini della Licenza Apache 2.0.
| Nome campo | Valore | Obbligatorio |
|---|
| STRELKA_HOST | Hostname di Strelka (es., 0.0.0.0) | Sì |
| STRELKA_PORT | Numero di porta di Strelka (es., 57314) | Sì |
| STRELKA_CERT | Percorso del certificato per Strelka, se necessario (es., /path/to/cert.pem) | No |
| CA_CERT_PATH | Percorso dei certificati CA per LDAP, se necessario (es., /path/to/ca_certs) | No |
| VIRUSTOTAL_API_KEY | Chiave API per la ricerca hash su VirusTotal | Sì |
| VIRUSTOTAL_API_LIMIT | Limita il numero di file che devono essere scansionati da VirusTotal (Predefinito: 30) | Sì |
| LDAP_URL | URL del server LDAP (es., ldaps://ldap.example.com:636) | No |
| LDAP_SEARCH_BASE | Base di ricerca per le query LDAP (es., DC=example,DC=com) | No |
| LDAP_USERNAME_ORGANIZATION | Organizzazione del nome utente per le query LDAP (es., org//) | No |
| LDAP_ATTRIBUTE_ACCOUNT_NAME_FIELD | Attributo LDAP per il nome dell'account (es., sAMAccountName) | No |
| LDAP_ATTRIBUTE_FIRST_NAME_FIELD | Attributo LDAP per il nome (es., givenName) | No |
| LDAP_ATTRIBUTE_LAST_NAME_FIELD | Attributo LDAP per il cognome (es., sn) | No |
| LDAP_ATTRIBUTE_MEMBER_OF_FIELD | Attributo LDAP per l'appartenenza a un gruppo (es., memberOf) | No |
| LDAP_ATTRIBUTE_MEMBER_REQUIREMENT_FIELD | Attributo LDAP per il requisito di appartenenza (es., AD Attribute) | No |
| STATIC_ASSET_FOLDER | Cartella di build per la UI (es., build) | Sì |
| MIGRATION_DIRECTORY | Directory delle migrazioni SQLAlchemy (es., ./migrations) | Sì |
| DATABASE_USERNAME | Nome utente del database (es., admin) | Sì |
| DATABASE_PASSWORD | Password del database (es., password123) | Sì |
| DATABASE_HOST | Hostname del database (es., db.example.com) | Sì |
| DATABASE_PORT | Numero di porta del database (es., 5432) | Sì |
| DATABASE_DBNAME | Nome del database (es., mydb) | Sì |
| API_KEY_EXPIRATION | Durata in giorni della scadenza della chiave API (es., 30) | Sì |
| SEARCH_URL | URL di ricerca per l'applicazione esterna | Es: https://search.com/?q=request.id= |
| SEARCH_NAME | Nome di ricerca per l'applicazione esterna | Es: Splunk |
| DEFAULT_EXCLUDED_SUBMITTERS | Utenti predefiniti da escludere dalla vista della tabella degli invii. Utile per nascondere le automazioni per impostazione predefinita. | Es: SearchBot |