최근 보안 사고 중 하나로, 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 관련 구성 객체의 전체 계층 구조와 암호화 키까지 추출할 수 있다.
주의사항
이러한 도구들은 오직 정당한 승인 하의 보안 점검 또는 자체 자산 진단에만 사용되어야 하며, 무단 접근 및 정보 유출은 법적 책임을 초래할 수 있다.