
Secure Coding Dojo는 안전한 코딩 지식을 전달하기 위한 플랫폼입니다.
Secure Coding Dojo는 안전한 코딩 교육을 제공하기 위한 플랫폼입니다. 자체적으로 취약한 훈련용 애플리케이션(Insecure.Inc 웹사이트)이 포함되어 있지만, 훈련 포털은 다른 훈련용 애플리케이션과 함께 사용할 수도 있습니다. 이 플랫폼의 강점은 확장성과 널리 사용되는 개발 협업 플랫폼인 Slack과의 통합입니다. 훈련 포털은 클라우드에 쉽게 구축할 수 있으며, AWS Elastic Beanstalk 설정 지침은 아래에서 확인할 수 있습니다.
Dojo 배포 및 설치에 대한 자세한 내용은 wiki도 확인하세요.
훈련 포털과 Insecure.Inc 애플리케이션을 살펴보려면 데모를 다운로드하세요.
/screenshots 디렉토리도 확인해 보세요.

다음 단계를 거치면 Dojo의 기본 구성을 얻을 수 있습니다. 고급 구성 및 통합에 대해서는 wiki를 확인하세요.
최신 버전의 Docker를 설치합니다.
저장소를 Git clone 합니다.
저장소 루트 디렉토리로 이동합니다.
dojo 파일의 마운트 지점으로 사용할 환경 변수 DATA_DIR을 구성합니다. *nix/mac에서는 .bash_profile을 다음과 같이 수정합니다.
export DATA_DIR="/YOUR_DATA_DIR"
Mac에서는 Docker > Preferences > File Sharing에서 이 디렉토리에 대한 Docker 접근을 허용해야 합니다.
터미널을 다시 시작합니다.
다음 명령으로 실행합니다.
docker-compose up
애플리케이션 보안 개념을 가르치는 오픈 소스 교육 사이트가 없었던 것은 아니지만, 기존 사이트들의 대상 사용자는 주로 침투 테스터와 윤리적 해커였습니다. Secure Coding Dojo는 주로 개발자를 위한 교육 제공 플랫폼으로 설계되었으며, 그 이유는 다음과 같습니다.
완전한 규정 준수를 보장하지는 않지만, 이 교육은 PCI 6.5.a와 같은 규정 준수 요구 사항을 충족하는 데 사용될 수 있습니다. SANS 25 / OWASP Top 10 / PCI 6.5 매핑에 대한 자세한 내용은 Insecure.Inc 교육 과정 문서를 참조하세요.
훈련 포털
Insecure.Inc
훈련 포털
Insecure.Inc
훈련 포털
Insecure.Inc
wiki를 확인하세요.
자세한 내용은 wiki에서 확인하세요.
인증을 위해 Slack 앱을 만들어야 합니다.
Google 인증도 config.json에서 구성할 수 있습니다. Google 개발자 계정이 필요하며 Google API 콘솔(https://console.developers.google.com)에서 OAuth 자격 증명을 받아야 합니다.
같은 곳에서 도메인과 승인된 리디렉션 URI를 설정합니다. 예를 들어 localhost 설정의 경우 리디렉션 URL은 다음과 같습니다: http://localhost:8081/public/google/callback
소규모 팀이나 사전 구성된 이미지의 경우 Slack 또는 Google 인증이 적합하지 않을 수 있습니다. 이 시나리오에서는 로컬 플랫 파일로 작동하는 인증을 구성할 수 있습니다.
자세한 내용은 wiki를 확인하세요.
DB를 구성하지 않으면 훈련 포털은 로컬 SQLite DB를 사용합니다.
MySQL을 설치하고 해당 DB에 대한 DB와 자격 증명을 만들 수도 있습니다. 나중에 필요하므로 사용자 이름과 비밀번호를 기록해 두세요.
암호화 키를 OS 환경 변수로 설정해야 합니다. *nix/mac에서는 .bash_profile을 다음과 같이 수정합니다.
export ENC_KEY="put something random here"
export ENC_KEY_IV="put something random here"
다음은 참가자가 자신만의 챌린지 코드를 생성하는 것을 방지하기 위한 것입니다.
export CHALLENGE_MASTER_SALT="put something random here"
기존 레슨의 모델을 따라 새 레슨을 추가할 수 있습니다.
챌린지는 ./trainingportal/static/lessons에 정의되어 있습니다. definitions.json 파일은 해당 html 챌린지 설명, 플레이 링크 및 해당 코드 블록(코드 블록 ID 기준)을 가리킵니다. 이미 정의된 예제를 따라 새 챌린지를 만들 수 있습니다.
.
+-- /trainingportal/static/lessons
| +-- modules.json //레슨 모듈이 정의된 구성 파일
| +-- /attack-grams //챌린지 설명에 포함된 공격의 시각적 표현
| +-- /blackBelt //레슨 모듈
| +--definitions.json //개별 레슨 정의
| +--cwe494.md //레슨 설명이 포함된 html 또는 마크다운 파일
| +--cwe494.sol.md //레슨에 대한 솔루션
| ....
| +--quiz.html
| +-- /secondDegreeBlackBelt
코드 블록은 ./trainingportal/static/codeBlocks에 정의되어 있습니다. 이 폴더는 정의 json과 각 챌린지에 대한 여러 html 파일로 구성된 유사한 구조를 가지고 있습니다.
.
+-- /trainingportal/static/codeBlocks
| +-- codeBlocksDefinitions.json //코드 블록이 정의된 구성 파일
| +-- authenticationByDefault.html //코드 블록 설명 html
| ...
| +-- useStrongDataEncryption.html