
Secure Coding Dojo es una plataforma para impartir conocimientos de codificación segura.
El Secure Coding Dojo es una plataforma para impartir formación en codificación segura. Si bien viene con su propia aplicación de entrenamiento vulnerable (el sitio web Insecure.Inc), el portal de formación puede utilizarse junto con otras aplicaciones de entrenamiento. La fortaleza de la plataforma es su extensibilidad y la integración con la plataforma de colaboración de desarrollo comúnmente utilizada, Slack. El portal de formación se puede configurar fácilmente en la nube y a continuación se ofrecen instrucciones para la configuración de AWS Elastic Beanstalk.
Asegúrate también de revisar la wiki para obtener más detalles sobre la implementación e instalación del Dojo.
Descarga la demo para hacerte una idea del portal de formación y de la aplicación Insecure.Inc.
También echa un vistazo a /screenshots

Los siguientes pasos te proporcionarán la configuración básica del Dojo. Para la configuración avanzada y las integraciones, consulta la wiki
Instala la última versión de Docker.
Clona el repositorio con Git
Cambia al directorio raíz del repositorio
Configura una variable de entorno DATA_DIR como punto de montaje para los archivos del dojo. En *nix/mac modifica .bash_profile de la siguiente manera
export DATA_DIR="/YOUR_DATA_DIR"
En Mac debes permitir que Docker acceda a este directorio en Docker > Preferences > File Sharing
Reinicia tu terminal
Ejecuta con
docker-compose up
Aunque los sitios de formación de código abierto para enseñar conceptos de seguridad en aplicaciones no son nuevos, el público objetivo de estos sitios han sido los pentesters y los hackers éticos. El Secure Coding Dojo está pensado principalmente como una plataforma de entrega para desarrolladores, y he aquí por qué:
Si bien no garantizamos el cumplimiento, la formación podría utilizarse para satisfacer requisitos de cumplimiento como PCI 6.5.a. Consulta el documento del plan de estudios de Insecure.Inc sobre el mapeo con SANS 25 / OWASP Top 10 / PCI 6.5
Portal de formación
Insecure.Inc
Portal de formación
Insecure.inc
Portal de formación
Insecure.Inc
Consulta la wiki.
Más información en la wiki.
Necesitarás crear una aplicación de Slack para la autenticación.
La autenticación de Google también se puede configurar en config.json. Necesitarás una cuenta de desarrollador de Google y obtener las credenciales OAuth desde la consola de Google API: https://console.developers.google.com
En el mismo lugar configurarás tu dominio y las URI de redirección autorizadas. Por ejemplo, para una configuración de localhost, la URL de redirección sería: http://localhost:8081/public/google/callback
Para equipos pequeños o imágenes preconfiguradas, la autenticación de Slack o Google puede no ser una opción. Para este escenario, puedes configurar la autenticación utilizando un archivo plano local.
Consulta la wiki para obtener más información.
Si no configuras una base de datos, el portal de formación simplemente utilizará una base de datos SQLite local
También puedes instalar MySQL y crear una base de datos y credenciales para esa base de datos. Anota tu nombre de usuario y contraseña; los necesitarás más adelante.
Tendrás que configurar las claves de cifrado como variables de entorno del sistema operativo. En *nix/mac modifica .bash_profile de la siguiente manera
export ENC_KEY="put something random here"
export ENC_KEY_IV="put something random here"
Lo siguiente es para evitar que los participantes generen sus propios códigos de desafío.
export CHALLENGE_MASTER_SALT="put something random here"
Puedes agregar nuevas lecciones siguiendo el modelo de las existentes.
Los desafíos se definen en ./trainingportal/static/lessons El archivo definitions.json apunta a la descripción html del desafío correspondiente, al enlace de juego y a los bloques de código correspondientes mediante el id del bloque de código. Sigue los ejemplos ya definidos para crear uno nuevo.
.
+-- /trainingportal/static/lessons
| +-- modules.json //configuration file where lesson modules are defined
| +-- /attack-grams //visual representations of attacks included in challenge descriptions
| +-- /blackBelt //lesson module
| +--definitions.json //individual lesson definitions
| +--cwe494.md // html or markdown file including the lesson description
| +--cwe494.sol.md //solution for the lesson
| ....
| +--quiz.html
| +-- /secondDegreeBlackBelt
Los bloques de código se definen en ./trainingportal/static/codeBlocks. Esta carpeta tiene una estructura similar con un json de definición y un conjunto de archivos html para cada desafío.
.
+-- /trainingportal/static/codeBlocks
| +-- codeBlocksDefinitions.json //configuration file where code blocks are defined
| +-- authenticationByDefault.html //code block description html
| ...
| +-- useStrongDataEncryption.html