
자바 애플리케이션의 보호된 리소스 접근을 로그 메시지로 외부화합니다.
JVMXRay는 바이트코드 주입을 통해 Java 애플리케이션을 실시간으로 모니터링하여 코드 변경 없이 취약점과 의심스러운 활동을 탐지합니다. 19개의 모듈식 센서가 파일 액세스, 네트워크 연결, SQL 쿼리, 암호화 작업, 인증, 프로세스 실행 등을 추적하여 자동 교차 센서 상관 분석으로 구조화된 기계 판독 가능 보안 이벤트를 생성합니다.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Maven의 테스트 단계에서 Turtle이라는 작은 프로그램이 새로 빌드된 JVMXRay 에이전트 아래에서 실행됩니다. Turtle은 파일 I/O, 암호화, 프로세스 실행, 직렬화, 리플렉션 및 기타 센서를 트리거하는 활동을 수행하므로, 성공적인 빌드만으로도 ./target/test-jvmxray/에서 실제 보안 이벤트 로그를 탐색할 수 있습니다. 빠른 실험을 위해 ./target/test-jvmxray/common/data/jvmxray-test.db에 SQLite 데이터베이스도 생성됩니다. 자세한 내용은 문서를 참조하세요.
자체 애플리케이션에 Java 에이전트로 배포:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id와 scope_chain으로 상관된 이벤트를 통해 SOC 팀이 단일 쿼리로 HTTP 요청부터 SQL 인젝션, 데이터 유출까지 인시던트를 추적할 수 있습니다.명심하세요, JVMXRay는 Java 애플리케이션이 무엇을 하는지에 대한 진실의 원천(source of truth)이지 분석 엔진이 아닙니다. 분석은 중앙 집중식 로깅 솔루션 및/또는 AI 도구 프로젝트에서 제공됩니다.
모든 센서 이벤트에는 공격 체인 재구성을 위한 상관 필드가 포함됩니다.
HTTP>Serialization>Reflection>Process와 같은 범위 체인은 한눈에 역직렬화 공격 시그니처입니다. TRACE_ID 열은 데이터베이스에 인덱싱되어 빠른 상관 쿼리를 지원합니다.
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (isolated classloader)
|
ByteBuddy installs sensor interceptors
|
Sensors fire on method entry/exit
|
LogProxy merges MCC correlation context
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
이 프로젝트는 다음에서 가져온 아이디어, 아키텍처 및 일부 코드를 사용하여 개발되었습니다.
Milton Smith — 프로젝트 창시자, 리더
고지: JVMXRay는 Oracle Corporation의 승인, 보증 또는 제휴를 받지 않았습니다.
| 센서 | 모니터링 대상 |
|---|
| 파일 I/O | 파일 읽기, 쓰기, 삭제, 권한, 심볼릭 링크(경로 확인 포함) 및 집계 I/O 통계 |
| 네트워크 | 소켓 연결/수락/바인드/닫기, TLS 감지, 사설 IP 분류, 타이밍 |
| SQL | 매개변수화 감지, 작업 유형, 지속 시간, 연결 메타데이터를 포함한 쿼리 캡처 |
| HTTP | 보안 헤더 분석, 사용자/세션 상관 관계를 포함한 요청/응답 |
| 프로세스 | ProcessBuilder.start() 및 Runtime.exec(), 명령 인수, 지속 시간, 종료 상태 |
| 암호화 | 약한 알고리즘 감지 및 키 강도 검증을 포함한 Cipher/KeyStore/MessageDigest/SSL |
| 인증 | 세션 작업, JAAS 로그인, Spring Security 인증, 보안 주체 쿼리(성공/실패 추적 포함) |
| API 호출 | HttpClient.send() (URI, 메서드, 호스트, TLS, 응답 상태, 타이밍 포함) |
| 스크립트 엔진 | 엔진 식별, 콘텐츠 해싱, 의심스러운 패턴 감지, 위험 수준을 포함한 ScriptEngine.eval() |
| 직렬화 | 가젯 체인 감지를 포함한 Java 네이티브, Jackson, Gson, XStream 역직렬화 |
| 리플렉션 | 위협 분류를 포함한 Class.forName, Method.invoke, Field 액세스, setAccessible |
| 구성 | 보안 주석이 포함된 시스템 속성, 환경 변수, Properties 파일, Preferences |
| 라이브러리 | SHA-256, Maven 좌표, 패키지 인벤토리를 포함한 정적/동적 JAR 로딩 |
| 모니터 | JVM 상태: 메모리, 스레드, GC, CPU, 열린 파일, 데드락 감지 (60초 간격) |
| 처리되지 않은 예외 | 충돌 진단: 전체 스택, 메모리 상태, 스레드 덤프, 원인 체인, 인시던트 ID |
| 앱 초기화 | 일회성 시작 캡처: JVM 버전, OS, 컨테이너 감지, 환경 변수 (편집됨) |
| 데이터 전송 | InputStream.read() 바이트 카운팅 (현재 비활성화 — 너무 광범위함) |
| 스레드 | 스레드 수명 주기 모니터링 (현재 비활성화 — 재귀 로깅 수정 필요) |
| 메모리 | 메모리 할당 추적 (현재 비활성화 — 재귀 로깅 수정 필요) |
| 필드 | 예시 | 목적 |
|---|
trace_id | a1b2c3d4e5f6 | 동일한 실행 컨텍스트의 모든 이벤트 연결 |
scope_chain | HTTP>SQL>FileIO | 중첩 센서 경로 — "보안 스택트레이스" |
parent_scope | SQL | 트리 재구성을 위한 직계 부모 |
scope_depth | 3 | 중첩 수준 — 깊이 6 이상은 조사 필요 |