
Analisi statica focalizzata sulla sicurezza per il framework Phoenix
Sobelow è uno strumento di analisi statica incentrato sulla sicurezza per Elixir e il framework Phoenix. Per i ricercatori di sicurezza, è uno strumento utile per ottenere una rapida visione dei punti di interesse. Per i manutentori di progetti, può essere utilizzato per prevenire l'introduzione di una serie di vulnerabilità comuni.
Attualmente Sobelow rileva alcuni tipi dei seguenti problemi di sicurezza:
Le potenziali vulnerabilità vengono segnalate in diversi colori in base al grado di confidenza nella loro insicurezza. Alta confidenza è rosso, media confidenza è giallo, bassa confidenza è verde.
Un risultato viene tipicamente contrassegnato come "bassa confidenza" se sembra che una funzione possa essere utilizzata in modo insicuro, ma non è possibile determinare in modo affidabile se la funzione accetta input fornito dall'utente. Cioè Se un risultato è contrassegnato in verde, potrebbe essere criticamente insicuro, ma richiederà una maggiore validazione manuale.
Nota: Questo progetto è in costante sviluppo e ulteriori vulnerabilità verranno segnalate col passare del tempo. Se incontri un bug o desideri richiedere funzionalità aggiuntive o controlli di sicurezza, per favore apri una segnalazione!
Per utilizzare Sobelow, puoi aggiungerlo alle dipendenze della tua applicazione.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
Puoi anche installare Sobelow globalmente eseguendo il seguente comando dalla riga di comando:
$ mix escript.install hex sobelow
Per installare dal branch master, anziché dall'ultima release, può essere utilizzato il seguente comando:
$ mix escript.install github nccgroup/sobelow
Dopo l'installazione, il modo più semplice per scansionare un progetto Phoenix è eseguire il seguente comando dalla radice del progetto:
$ mix sobelow
Nota: Qualsiasi argomento di percorso deve essere un percorso assoluto, o relativo alla radice dell'applicazione.
--root o -r - Specifica la directory radice dell'applicazione. Accetta un argomento percorso, es. ../my_project.
--verbose o -v - Stampa frammenti di codice e dettagli aggiuntivi del risultato.
--ignore o -i - Ignora determinati tipi di risultati. Accetta una lista separata da virgole di nomi di moduli, es. XSS.Raw,Traversal.
--ignore-files - Ignora file. Accetta una lista separata da virgole di nomi di file, es. config/prod.exs.
--details o -d - Ottieni dettagli del tipo di risultato. Accetta un singolo nome di modulo, es. Config.CSRF.
Sobelow consente agli utenti di salvare le opzioni usate frequentemente in un file di configurazione. Per esempio, se ti trovi a eseguire costantemente:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Puoi usare il flag --save-config per creare il tuo file di configurazione .sobelow-conf:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Questo comando creerà il file .sobelow-conf nella radice della tua applicazione. Puoi modificare direttamente questo file per apportare modifiche.
Puoi anche eseguire il comando senza alcuna opzione:
$ mix sobelow --save-config
quando inizi a usare questo pacchetto - il file di configurazione generato sarà popolato con i valori predefiniti per ogni opzione. (Questo aiuta a incorporare rapidamente questo pacchetto in un codebase preesistente.)
Ora se vuoi eseguire Sobelow con la configurazione salvata, puoi eseguire Sobelow con il flag --config.
$ mix sobelow --config
Sobelow favorisce la sovra-segnalazione rispetto alla sotto-segnalazione. Di conseguenza, potresti trovare un certo numero di falsi positivi in una scansione tipica. Questi risultati possono essere ignorati singolarmente aggiungendo un commento # sobelow_skip, insieme a una lista di moduli, prima della definizione della funzione.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Quando si integra Sobelow in un nuovo progetto, ci possono essere un gran numero di falsi positivi. Per marcare tutti i risultati stampati come falsi positivi, esegui sobelow con il flag --mark-skip-all.
Una volta che hai marcato i risultati appropriati, esegui Sobelow con il flag --skip.
$ mix sobelow --skip
Mentre i commenti # sobelow_skip possono marcare solo risultati a livello di funzione (e quindi non possono essere utilizzati per saltare problemi di configurazione), il flag --mark-skip-all può essere utilizzato per saltare qualsiasi tipo di risultato.
Le categorie di risultati sono suddivise in moduli. Questi moduli possono quindi essere utilizzati per ignorare classi di risultati (tramite le opzioni ignore e skip) o per ottenere dettagli sulle vulnerabilità (tramite l'opzione details).
Questa lista, e altre informazioni utili, possono essere trovate sulla riga di comando:
$ mix help sobelow
Per eseguire Sobelow su tutte le app figlio all'interno di un'app umbrella con un unico comando, puoi aggiungere un alias per sobelow nel tuo file mix.exs radice:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Se desideri utilizzare file di configurazione in un'app umbrella, crea un .sobelow-conf in ogni applicazione figlio e usa il flag --config.
Durante la scansione di un progetto, Sobelow controlla occasionalmente la presenza di aggiornamenti e stampa un avviso se è disponibile una nuova versione. Sobelow tiene traccia dell'ultimo controllo di aggiornamento creando un file .sobelow nella radice del progetto scansionato.
Se questa funzionalità non è desiderata, è possibile utilizzare il flag --private con la scansione.
--all-details - Ottieni dettagli di tutti i tipi di risultato.
--private - Salta i controlli di aggiornamento.
--router - Specifica la posizione del router. Ciò deve essere utilizzato solo se la posizione del router non è standard. Accetta un argomento percorso, es. my/strange/router.ex.
--exit - Restituisce uno stato di uscita non zero al di sopra o al di sotto di una soglia di confidenza di low, medium o high. Il valore predefinito è false che restituisce uno stato di uscita zero.
--threshold - Restituisce risultati a o al di sopra di un livello di confidenza di low (predefinito), medium o high.
--format o -f - Specifica il formato di output dei risultati. Accetta un formato, es. txt o json.
Nota che opzioni come --verbose non funzioneranno con il formato json. Tutti i risultati formattati json contengono una chiave type, file e line. Altre chiavi possono variare.
--quiet - Restituisce una singola riga che indica il numero di risultati. Altrimenti, non restituisce alcun output se non ci sono risultati.
--compact - Risultati minimi su una singola riga con output colorato in base alla confidenza.
--flycheck - Risultati minimi su una singola riga compatibili con strumenti basati su flycheck.
--save-config - Genera un file di configurazione basato sulle opzioni della riga di comando. Vedi File di Configurazione per maggiori informazioni.
--config - Esegui Sobelow con file di configurazione. Vedi File di Configurazione per maggiori informazioni.
--mark-skip-all - Segna tutti i risultati visualizzati come saltabili.
--clear-skip - Cancella la configurazione creata da --mark-skip-all.
--skip - Ignora i risultati che sono stati marcati per essere saltati. Vedi Falsi Positivi per maggiori informazioni.
--version - Restituisce la versione corrente di Sobelow. Utile per passaggi CI o integrazione con altri strumenti come Salus.