Spring Boot 힙 덤프 분석을 통한 민감 정보 유출 탐지 도구 활용

최근 보안 사고 중 하나로, Spring Boot 기반 애플리케이션의 /actuator/heapdump 엔드포인트를 통해 힙 메모리 덤프 파일이 무단 노출되는 문제가 자주 발생하고 있다. 이 덤프 파일에는 애플리케이션 실행 중 로드된 모든 객체가 포함되어 있어 데이터베이스 비밀번호, API 키, 시크릿 키 등 민감 정보가 추출될 수 있다.

이러한 위험성을 점검하거나 정당한 권한 하에 보안 진단을 수행하기 위해 개발된 오픈소스 도구들이 있으며, 그중 대표적인 두 가지는 다음과 같다:

JDumpSpider

JDumpSpider는 Java 힙 덤프에서 민감 정보를 빠르게 추출할 수 있도록 설계된 도구이다. 사용 방법은 간단하며, 명령어 한 줄로도 전체 분석 결과를 출력할 수 있다.

java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump.hprof >> result.txt

분석 결과는 지정한 텍스트 파일에 저장되며, URL, 파일 경로, IP 주소, 인증 토큰 등의 패턴을 자동으로 식별하여 출력한다.

HeapDump 분석 도구 (wyzxxz/dioos886 버전)

다른 하나는 GitHub에서 공개된 heapdump_tool.jar로, jhat 기반으로 동작하며 다양한 검색 기능을 제공한다. JDK 설치 및 환경 변수 설정이 필수이며, jhat 명령어가 정상 작동하는지 미리 확인해야 한다.

다운로드 링크: heapdump_tool.jar

기본 사용법

java -jar heapdump_tool.jar heapdump.hprof

지원되는 검색 옵션

  • 키워드 검색: password, apikey 등 특정 문자열 검색
  • 길이 기반 추출: len=16 — 길이가 16인 모든 값 출력
  • 범위 기반 출력: num=1-100 — 처음 100개 항목 출력
  • 클래스 기반 탐색: class="shiro".web.mgt — 해당 클래스 계층의 인스턴스 정보 출력
  • ID 조회: id=0xabcdef — 특정 객체 ID의 내용 확인
  • 정규식 검색: re=[a-zA-Z0-9]{32} — 사용자 정의 정규식으로 매칭
  • 특수 정보 추출:
    • geturl: 문자열 내 URL 추출
    • getfile: 파일 경로 및 이름 추출
    • getip: IP 주소 추출
    • shirokey: Shiro 암호화 키 자동 탐지
    • systemproperties, allproperties: JVM 및 애플리케이션 속성 출력
    • hashtable: 해시 테이블 구조 분석을 통한 추가 정보 확보

대용량 힙 덤프 처리 모드

객체 수가 많을 경우(예: 15만 개 이상), 전체 로딩 없이 빠르게 검색할 수 있는 모드 선택이 가능하다.

  • 모드 0: 빠른 검색, 일부 데이터 누락 가능성 있음
  • 모드 1: 전체 로딩, 정확도 높음, 시간 소요 큼

실제 사례 기반 분석 흐름

일부 시스템에서 /actuator/env를 통해 다음과 같은 구성 정보를 확인할 수 있다:

{
  "spring.datasource.url": {
    "value": "jdbc:mysql://db.example.com:3306/appdb",
    "origin": "config/application.yml"
  },
  "spring.datasource.username": {
    "value": "appuser"
  },
  "spring.datasource.password": {
    "value": "******"
  }
}

비밀번호는 마스킹 되어 있으나, 힙 덤프를 다운로드 후 아래와 같이 도구를 이용해 실제 값을 복원할 수 있다:

> java -jar heapdump_tool.jar heapdump.hprof
> spring.datasource.password
>> spring.datasource.password -> real_password_123

> accessKey
>> accessKey -> LTAIxxxxxxxxxxxxxxx

> shirokey
>> kPH+bIxk5D2deZiIxcaaaA==

또한, class="shiro".web.mgt와 같은 쿼리를 통해 Shiro 관련 구성 객체의 전체 계층 구조와 암호화 키까지 추출할 수 있다.

주의사항

이러한 도구들은 오직 정당한 승인 하의 보안 점검 또는 자체 자산 진단에만 사용되어야 하며, 무단 접근 및 정보 유출은 법적 책임을 초래할 수 있다.

태그: Spring Boot heapdump Security jhat jdumbspider

9월 25일 20:55에 게시됨