
Il Secure Coding Dojo è una piattaforma per diffondere conoscenze di codifica sicura.
Il Secure Coding Dojo è una piattaforma per fornire formazione sulla codifica sicura. Sebbene includa una propria applicazione di formazione vulnerabile (il sito Insecure.Inc), il portale di formazione può essere utilizzato insieme ad altre applicazioni di formazione. Il punto di forza della piattaforma è la sua estensibilità e l'integrazione con la piattaforma di collaborazione di sviluppo comunemente usata Slack. Il portale di formazione può essere facilmente configurato nel cloud e le istruzioni per la configurazione su AWS Elastic Beanstalk sono disponibili di seguito.
Assicurati di dare un'occhiata anche al wiki per maggiori dettagli su come distribuire e installare il Dojo.
Scarica la demo per avere un'idea del portale di formazione e dell'applicazione Insecure.Inc.
Dai anche un'occhiata in /screenshots

I seguenti passaggi ti daranno la configurazione di base per il Dojo. Per configurazioni avanzate e integrazioni, consulta il wiki
Installa l'ultima versione di Docker.
Clona il repository con Git
Spostati nella directory principale del repository
Configura una variabile d'ambiente DATA_DIR come punto di mount per i file del dojo. Su *nix/mac modifica .bash_profile come segue
export DATA_DIR="/YOUR_DATA_DIR"
Su Mac devi consentire l'accesso di Docker a questa directory in Docker > Preferenze > Condivisione file
Riavvia il terminale
Esegui con
docker-compose up
Sebbene i siti open source per insegnare concetti di sicurezza applicativa non siano nuovi, il pubblico target di questi siti è stato quello dei penetration tester e degli hacker etici. Il Secure Coding Dojo è pensato principalmente come piattaforma di erogazione per sviluppatori, ed ecco perché:
Sebbene non garantiamo la conformità, la formazione potrebbe essere utilizzata per soddisfare requisiti normativi come PCI 6.5.a. Vedi il documento del curriculum di Insecure.Inc sulla mappatura con SANS 25 / OWASP Top 10 / PCI 6.5
Portale di formazione
Insecure.Inc
Portale di formazione
Insecure.inc
Portale di formazione
Insecure.Inc
Consulta il wiki.
Maggiori informazioni sul wiki.
Dovrai creare un'app Slack per l'autenticazione.
L'autenticazione Google può essere configurata anche nel config.json. Avrai bisogno di un account sviluppatore Google e di ottenere le credenziali OAuth dalla console API di Google: https://console.developers.google.com
Nella stessa console configurerai il tuo dominio e gli URI di reindirizzamento autorizzati. Ad esempio, per una configurazione localhost, l'URL di reindirizzamento sarebbe: http://localhost:8081/public/google/callback
Per team piccoli o immagini preconfigurate, l'autenticazione tramite Slack o Google potrebbe non essere un'opzione. In questo scenario puoi configurare l'autenticazione utilizzando un file flat locale.
Consulta il wiki per maggiori informazioni.
Se non configuri un DB, il portale di formazione utilizzerà un database SQLite locale
Puoi anche installare MySQL e creare un DB con le relative credenziali. Prendi nota del nome utente e della password: ti serviranno in seguito.
Dovrai impostare le chiavi di crittografia come variabili d'ambiente del sistema operativo. Su *nix/mac modifica .bash_profile come segue
export ENC_KEY="metti qualcosa di casuale qui"
export ENC_KEY_IV="metti qualcosa di casuale qui"
Quanto segue serve per impedire ai partecipanti di generare i propri codici sfida.
export CHALLENGE_MASTER_SALT="metti qualcosa di casuale qui"
Puoi aggiungere nuove lezioni seguendo il modello di quelle esistenti.
Le sfide sono definite in ./trainingportal/static/lessons Il file definitions.json punta alla corrispondente descrizione della sfida in html, al link di gioco e ai corrispondenti blocchi di codice tramite ID blocco di codice. Segui gli esempi già definiti per crearne uno nuovo.
.
+-- /trainingportal/static/lessons
| +-- modules.json //file di configurazione in cui sono definiti i moduli delle lezioni
| +-- /attack-grams //rappresentazioni visive degli attacchi incluse nelle descrizioni delle sfide
| +-- /blackBelt //modulo lezione
| +--definitions.json //definizioni delle singole lezioni
| +--cwe494.md //file html o markdown contenente la descrizione della lezione
| +--cwe494.sol.md //soluzione della lezione
| ....
| +--quiz.html
| +-- /secondDegreeBlackBelt
I blocchi di codice sono definiti in ./trainingportal/static/codeBlocks. Questa cartella ha una struttura simile: un json di definizione e una serie di file html per ogni sfida.
.
+-- /trainingportal/static/codeBlocks
| +-- codeBlocksDefinitions.json //file di configurazione in cui sono definiti i blocchi di codice
| +-- authenticationByDefault.html //file html di descrizione del blocco di codice
| ...
| +-- useStrongDataEncryption.html