
취약한 코드와 수정된 코드, 공격 시나리오, 소스/싱크 감사 노트, 보안 코딩 지침을 포함한 종합적인 Java 취약점 실습 환경으로, 보안 교육 및 도구 평가에 활용됩니다.
JavaSecLab - 종합 Java 취약점 실습 환경JavaSecLab은 애플리케이션 보안 학습, 코드 감사 실습, 보안 개발 교육, 보안 도구 평가를 위한 종합 Java 취약점 실습 환경입니다. Spring Boot를 기반으로 구축되었으며, 취약한 코드, 수정된 구현, 현실적인 공격 시나리오, 감사 지향적인 소스 및 싱크 노트, 개선 가이드, 보안 코딩 설명, 트래픽 분석 예제를 제공합니다.
목표는 실용적입니다. 사용자가 취약점이 어떻게 악용되는지뿐만 아니라 코드에서 왜 존재하는지, 그리고 어떻게 수정해야 하는지를 이해하도록 돕는 것입니다.


JavaSecLab은 다양한 Java 웹 보안 시나리오를 다루며, 다음을 포함합니다:
데모 사이트: http://whgojp.top/
기본 계정: admin/admin
JavaSecLab은 의도적으로 취약하게 설계되었으며 위험한 엔드포인트, 취약한 의존성, 안전하지 않은 구성을 포함합니다. 자체 배포는 격리된 환경에서만 실행하십시오. 공용 인터넷에 직접 노출하지 마십시오.
저자는 기업 보안 역할에서 일하며 취약점의 전체 수명 주기를 경험했습니다. 침투 테스트나 보안 평가 후 취약점은 종종 TAPD나 Jira와 같은 시스템을 통해 개발 팀에 할당됩니다. 실제로 두 가지 질문이 반복적으로 제기됩니다:
JavaSecLab은 취약점 동작, 취약한 코드, 개선 접근 방식, 감사 사고를 연결하기 위해 만들어졌습니다. 텍스트만 있는 보고서나 PoC와 비교하여, 이 프로젝트는 코드 관점에서 취약점을 이해하는 것을 강조합니다.
코드 감사에서 일반적인 워크플로는 먼저 싱크를 찾는 것입니다. 예를 들어 명령 실행, SQL 실행, 파일 접근, 템플릿 렌더링, 역직렬화, 응답 출력 등입니다. 그런 다음 감사자는 역으로 추적하여 해당 소스를 식별합니다. 예를 들어 요청 파라미터, 헤더, 쿠키, 업로드된 파일, 직렬화된 데이터, 데이터베이스 내용 등입니다. 많은 JavaSecLab 시나리오는 이 소스-투-싱크 경로를 중심으로 설계되어 학습과 도구 검증 모두에 유용합니다.
동일한 취약점 유형은 실제 시스템에서 여러 트리거 경로를 통해 나타나는 경우가 많습니다. 따라서 JavaSecLab은 가능한 경우 핵심 취약점 클래스에 대해 여러 시나리오를 제공하여 사용자가 다양한 코딩 패턴, 프레임워크 기능, 비즈니스 흐름이 위험에 어떻게 영향을 미치는지 비교할 수 있도록 합니다.
JavaSecLab은 학습자가 요청/응답 동작을 코드 실행과 연결할 수 있도록 취약점 트래픽 분석 예제를 포함합니다. 더 명확한 패킷, 더 나은 재현 노트, 추가 분석 예제를 포함한 기여를 환영합니다.

예를 들어, 시간 기반 SQL 인젝션 시나리오에서 트래픽 패턴은 응답 지연을 통해 관찰할 수 있습니다. 서버는 약 5초 후에 응답합니다.

저장소를 클론합니다:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

요구 사항:
데이터베이스를 생성하고 sql/JavaSecLab.sql을 가져옵니다.
src/main/resources/application.yml에서 활성 프로파일을 dev로 설정합니다:
spring:
profiles:
active: dev
src/main/resources/application-dev.yml에서 데이터베이스 연결을 업데이트합니다:
username: root
password: QWE123qwe
url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
IDEA 또는 Maven으로 애플리케이션을 시작합니다.
기본 계정: admin/admin

요구 사항:
옵션 1: 게시된 이미지로 시작:
docker compose -f docker-compose.image.yml up -d
옵션 2: 이미지를 로컬에서 빌드하고 실습 환경을 시작:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
시작 후 데이터베이스가 비어 있으면 sql/JavaSecLab.sql을 수동으로 가져옵니다.


더 많은 배포 옵션과 문제 해결 노트는 배포 가이드를 참조하십시오.
JavaSecLab은 취약한 실습 프로젝트입니다. 재현과 교육을 위해 위험한 엔드포인트, 취약한 의존성, 안전하지 않은 구성을 의도적으로 유지합니다. 로컬 또는 격리된 네트워크에서만 실행하십시오.
권장 예방 조치:
이 프로젝트의 보안 코드 예제는 교육 및 시연용입니다. 실제 비즈니스 시스템은 일반적으로 인증, 감사, 속도 제한, 데이터 검증, 의존성 관리, 모니터링, 경고, 심층 방어를 필요로 합니다.
이슈와 풀 리퀘스트를 환영합니다. 좋은 기여에는 다음이 포함됩니다:
우리가 자유 소프트웨어를 말할 때, 우리는 가격이 아닌 자유를 의미합니다.
JavaSecLab은 Apache License 2.0에 따라 배포됩니다. 자세한 내용은 LICENSE를 참조하십시오.
릴리스 노트와 프로젝트 이력은 업데이트 로그를 참조하십시오.
작성자 블로그: 今天是几号
애플리케이션 보안, 보안 개발, SDL, DevSecOps, 취약점 실습 환경에 관심이 있으시면 커뮤니티 그룹에 자유롭게 참여하십시오.
JavaSecLab이 도움이 되셨다면 후원을 감사히 받겠습니다. 지원금은 온라인 환경 유지와 프로젝트 지속적 개선에 사용됩니다.