
Scanner di vulnerabilità del codice sorgente basato sul web

Raptor è uno scanner di vulnerabilità sorgente basato sul web (web-service + UI) incentrato su GitHub; scansiona un repository semplicemente con l'URL del repo GitHub. Puoi configurare webhook per garantire scansioni automatiche ogni volta che fai un commit o unisci una pull request. La scansione avviene in modo asincrono e i risultati sono disponibili solo all'utente che ha avviato la scansione.
Alcune funzionalità di Raptor:
Questo strumento è un tentativo di aiutare la comunità e le startup a sottolineare l'importanza del secure-coding. Questo strumento potrebbe non eguagliare le funzionalità/qualità delle alternative commerciali, nulla è garantito e siete stati avvertiti. Questo strumento è pensato per essere utilizzato da revisori di sicurezza e/o sviluppatori con esperienza di secure-coding per individuare punti di ingresso delle vulnerabilità durante audit del codice o revisioni tra pari. Per favore NON fidatevi ciecamente dell'output dello strumento. È meglio utilizzarlo inserendo Raptor nella vostra pipeline CI/CD.
0.1 beta
Plugin integrati:
Nota: La maggior parte dei seguenti strumenti/moduli/librerie sono stati modificati pesantemente per poter integrarsi bene nel framework.
Rulepack disponibili:
Video di installazione: YouTube Install
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
Video di installazione: YouTube Usage
cd raptor-master
sudo sh start.sh #avvia il web-service backend
Ora punta il browser a Raptor Home (http://localhost/raptor/)
Accedi con il nome utente registrato sul corrispondente server GitHub a cui sei connesso e qualsiasi password (ma ricorda il nome utente per visualizzare la cronologia delle scansioni)
Per esempio:
Se sei registrato come foobar su https://github.com, usa lo stesso nome utente quando scansiona repo su https://github.com. Se invece sei registrato come foobar_corp sul tuo GitHub personale/aziendale (ad esempio https://github.corp.company.com) usa lo stesso nome utente se intendi scansionare repo su https://github.corp.company.com
Tuttavia, al momento la password può essere qualsiasi cosa, poiché NON abbiamo implementato un database nella versione di sviluppo.
Puoi utilizzare l'editor di regole lato client integrato e leggero per aggiungere nuove regole personalizzate per le tue esigenze specifiche, o qualsiasi altro editor di testo semplice poiché i file rulepack sono semplici strutture JSON. Usa il browser per aprire le regole situate in 'backend/rules'. Quando hai finito, salva il file delle regole nuovo/modificato nella stessa directory, cioè 'backend/rules'. Ora devi solo fare una modifica minore, qui: Init Script. Aggiungi il nome del tuo nuovo file rulepack a questo array senza l'estensione '.rulepack' e riavvia il server backend. Il gioco è fatto! 👍
Puoi accedervi qui: Rules Editor (http://localhost/raptor/editrules.php)
Aggiungi un pattern di nome file o directory da escludere dalla scansione. Utile per ignorare file noti come jquery.min.js o l'intera directory /test/. Ad esempio, nel contenuto di esempio qui sotto, jquery significa jquery ed è case-sensitive, quindi fai attenzione. Nella sezione plugins, il name del plugin è il nome del file rulepack senza estensione ".rulepack" come disponibile nella directory rules/. Il campo issue è l'ID del problema menzionato in ogni regola dei file rulepack: Esempio #1, Esempio #2. Il valore del campo match_type può essere regex o start o end. Il campo value è la stringa esatta da abbinare nel caso in cui match_type sia start o end. Se match_type è regex, il value deve contenere il pattern RegEx grezzo che deve essere codificato in Base64 per evitare problemi di escape della sintassi JSON. regex è un'abbinamento basato su espressioni regolari, start abbina l'inizio del frammento e end abbina la fine del frammento.
Il funzionamento è: quando lo scanner ha finito di scansionare per i problemi, itererà attraverso tutti i problemi trovati e rimuoverà quelli che corrispondono ai pattern (basati sul tipo di corrispondenza) di ciascun plugin menzionato nel file ignore_list.rulepack.
(contenuto di esempio sotto)
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories": [
"/node_modules/",
"/test/"
],
"plugins": [
{
"name": "common", <----- Nome del Plugin
"issue": "HARD_CRED1", <----- ID del problema
"patterns": [
{
"match_type": "start", <----- Tipo di corrispondenza: "regex", "start" o "end"
"value": "foreach" <----- La stringa effettiva da abbinare. Codifica Base64 questo pattern se match_type è "regex"
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
Puoi creare un nuovo rulepack e aggiungerlo allo scanner o scrivere il tuo plugin scanner e aggiungerlo al framework. Un file rulepack di esempio è una struttura JSON molto semplice.
{
"plugin_type": "plugin_name", <-- Dagli un nome (qualsiasi stringa)
"file_types": [
".java", <-- Aggiungi quante estensioni di file vuoi che lo scanner prenda in considerazione
".js"
],
"rules": [
{
"id": "HARD_CRED1", <-- Un IssueID unico, sii creativo.
"severity": "High", <-- Può essere High, Medium o Low. Questo influenzerà i grafici nell'UI.
"title": "Titolo del problema", <-- Il titolo del problema.
"description": "Questo testo verrà mostrato nell'UI come descrizione del problema.", <-- La descrizione del problema, opzionale.
"remediation": "Questo testo verrà mostrato nell'UI come passaggi per risolvere il problema", <-- La risoluzione del problema, opzionale.
"link": "Qualsiasi URL che abbia più risorse sul problema.", <-- URL del problema, opzionale.
"example_insecure": "Inserisci la versione insicura del frammento di codice a scopo didattico.", <-- Opzionale
"example_secure": "Inserisci la versione sicura del frammento di codice a scopo didattico.", <-- Opzionale
"platform_version": "all", <-- Lascia così
"enabled": "true", <-- Questo valore abilita o disabilita la regola durante la scansione. Può essere "true" o "false".
"logic": "Spiega la logica dietro questa regola per futuri aggiornamenti o personalizzazioni", <-- Opzionale
"signature": "base64encode(regexp)" <-- Scrivi l'espressione regolare del tuo pattern e poi codificala in base64 per metterla qui.
}
]
}
Se vuoi più controllo o aggiungere più intelligenza al tuo scanner anziché una semplice ricerca RegExp, puoi scrivere un plugin scanner rapido come questo e integrare lo script qui e aggiungere il nome dello script qui. Questo è tutto. È abbastanza semplice per chiunque abbia competenze di base di scripting Python.
Puoi usare Raptor per scansionare le istanze pubbliche e private di GitHub della tua organizzazione specificando gli endpoint del server giusti qui e qui.











Vuoi contribuire? Ottimo! Contattami se hai un'idea o sentiti libero di fare un fork e migliorare. 😊
GNU GPL v2.0
Software Libero, Sì!