Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mongobleed-detector — MongoBleed 악용 탐지 스크립트 | Kitploit
도구/GitHubGitHub/neo23x0/mongobleed-detector
Vulnerability AnalysisScripting & AutomationForensicsDigital ForensicsThreat IntelligenceIncident ResponseDatabase SecurityLog Analysis
GitHubneo23x0/mongobleed-detector

mongobleed-detector

MongoBleed 악용 탐지 스크립트

저장소 보기
8113149개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MongoBleed 탐지기

CVE-2025-14847 (MongoBleed)에 대한 오프라인 MongoDB 분석 도구

여러 탐지 모듈을 사용하여 CVE-2025-14847의 악용 가능성을 식별하는 독립형 Linux 명령줄 도구입니다.

목차

  • 개요
  • 탐지 모듈
  • 요구 사항
  • 설치
  • 두 가지 작동 모드
  • 모드 1: 로컬 분석
  • 모드 2: 원격 수집
  • 명령줄 옵션
  • 신뢰도 수준
  • 출력 예시
  • 테스트
  • 주의사항 및 한계
  • 참조 및 크레딧
  • 라이선스

개요

MongoBleed(CVE-2025-14847)는 MongoDB의 zlib 압축 해제 과정에서 발생하는 메모리 노출 취약점으로, 공격자가 인증 없이 서버 메모리에서 자격 증명, 세션 토큰, 개인 식별 정보(PII) 등 민감한 데이터를 직접 추출할 수 있습니다.

이 도구는 사고 대응자가 여러 증거 소스를 사용하여 악용 시도를 탐지할 수 있도록 지원합니다:

  • 모듈 A: 로그 상관 분석 (연결 이벤트, 메타데이터 부재)
  • 모듈 B1: Assert 카운트 분석 (serverStatus.asserts 스냅샷)
  • 모듈 B2: FTDC 스파이크 탐지 (diagnostic.data 시계열)

주요 기능

  • 다중 모듈 탐지 - 여러 데이터 소스를 상관 분석하여 신뢰도 향상
  • 오프라인 및 에이전트리스 - 분석 중 네트워크 연결 불필요
  • 자동 검색 - 사용 가능한 데이터 소스를 자동으로 감지
  • 원격 수집 - SSH를 통해 여러 호스트에서 데이터 수집
  • 결합 점수 - HIGH/MEDIUM/LOW 신뢰도 판정
  • 스트리밍 처리 - 대용량 로그 파일을 효율적으로 처리

탐지 모듈

모듈 A: 로그 상관 분석

MongoDB JSON 로그를 분석하여 악용 패턴을 탐지합니다:

이벤트 ID유형설명
22943연결 수락클라이언트가 연결될 때 기록됨
51800클라이언트 메타데이터클라이언트가 드라이버/애플리케이션 정보를 보낼 때 기록됨
22944연결 종료클라이언트가 연결을 끊을 때 기록됨

핵심 통찰: 합법적인 MongoDB 드라이버는 항상 클라이언트 메타데이터를 보냅니다. MongoBleed 악용 코드는 연결하고 메모리를 추출한 후 연결을 끊지만 메타데이터는 절대 보내지 않습니다.

모듈 B1: Assert 카운트

db.serverStatus().asserts의 스냅샷을 분석하여 asserts.user 카운터에서 비정상적인 패턴을 탐지합니다:

  • 다중 스냅샷: 시간 경과에 따른 스냅샷을 비교하여 사용자 assertion의 급격한 증가를 탐지
  • 단일 스냅샷 휴리스틱: 스냅샷이 하나만 있는 경우, asserts.user를 다른 assertion 유형과 비교하여 의심스러운 패턴을 탐지합니다. 사용자 assert가 다른 유형에 비해 불균형적으로 높거나(비율 ≥250배) 다른 모든 유형이 0인 경우 MEDIUM 신뢰도로 의심스러운 것으로 플래그 지정

참고: 누적 카운터는 거짓 양성을 유발할 수 있습니다. 최상의 결과를 위해 FTDC(모듈 B2)와 함께 사용하십시오.

모듈 B2: FTDC 스파이크 탐지

MongoDB의 FTDC(Full-Time Diagnostic Data Capture) 파일을 분석하여 assertion 카운터에서 시간 국소화된 스파이크를 탐지합니다. FTDC는 serverStatus를 주기적으로 샘플링하므로 잠재적 공격의 정확한 타이밍을 파악할 수 있습니다.

요구 사항

셸 스크립트 (mongobleed-detector.sh)

  • Linux 또는 macOS (bash 4+)
  • jq - JSON 프로세서
  • awk (gawk 권장)
  • gzip - 압축 로그 지원용

Python 구성 요소 (선택 사항, FTDC 디코딩용)

  • Python 3.8+
  • pymongo - FTDC 파일 디코딩용

원격 스캐너 (mongobleed-remote.py)

  • Python 3.8+
  • 네이티브 SSH 클라이언트 (ssh, scp 명령어)
  • 기본 작동을 위한 추가 Python 패키지 불필요

종속성 설치

# 셸 스크립트 종속성
# Debian/Ubuntu
apt-get install jq gawk gzip

# RHEL/CentOS/Fedora
dnf install jq gawk gzip

# macOS
brew install jq gawk

# Python 종속성 (FTDC 디코딩용)
pip install -r requirements.txt

설치

# 저장소 클론
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector

# 스크립트 실행 권한 부여
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py

# Python 종속성 설치 (선택 사항, FTDC 지원용)
pip install -r requirements.txt

두 가지 작동 모드

모드 1: 로컬 분석

MongoDB 호스트에서 수동으로 수집한 데이터를 분석합니다.

모드 2: 원격 수집

SSH를 통해 여러 호스트에서 자동으로 데이터를 수집한 후 로컬에서 분석합니다.

모드 1: 로컬 분석

1단계: 데이터 수집

MongoDB 호스트에서 데이터를 수집하여 다음 구조로 정리합니다:

./collected-data/
├── logs/                    # MongoDB JSON 로그
│   ├── mongod.log
│   ├── mongod.log.1
│   └── mongod.log.2.gz
├── assert-counts/           # serverStatus().asserts 스냅샷
│   ├── asserts-2025-01-01.json
│   └── asserts-2025-01-02.json
└── ftdc-files/              # FTDC diagnostic.data 내용
    ├── metrics.2025-01-02T10-00-00Z-00000
    └── metrics.interim

로그 수집

# 원격 호스트에서 복사
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/

Assert 카운트 수집

MongoDB 호스트에서 다음 명령을 실행합니다(mongosh 접근 필요):

mongosh --quiet --eval 'JSON.stringify({
  timestamp: new Date().toISOString(),
  hostname: db.hostInfo().system.hostname,
  asserts: db.serverStatus().asserts,
  uptime: db.serverStatus().uptime
})' > asserts-$(date +%Y%m%d-%H%M%S).json

결과 JSON 파일을 ./collected-data/assert-counts/에 복사합니다.

팁: 기준선을 설정하고 스파이크를 탐지하려면 이 명령을 여러 번(예: 매시간) 실행하십시오.

FTDC 파일 수집

FTDC 파일은 다음 위치에 있습니다:

  • mongod: <storage.dbPath>/diagnostic.data/ (일반적으로 /var/lib/mongodb/diagnostic.data/)
  • mongos: systemLog.path에서 파생됨 (예: /var/log/mongodb/mongos.diagnostic.data/)
# FTDC 파일 복사 (sudo가 필요할 수 있음)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/

2단계: 분석 실행

# 자동 검색 모드 - 사용 가능한 모든 데이터 분석
./mongobleed-detector.sh --data-dir ./collected-data/

# 사용자 지정 임계값 사용
./mongobleed-detector.sh --data-dir ./collected-data/ \
    -t 1440 \              # 24시간 조회 기간
    -c 50 \                # 더 낮은 연결 임계값
    --spike-threshold 50   # 더 낮은 스파이크 임계값

레거시 모드 (로그 전용)

이전 버전과의 호환성을 위해 로그를 직접 분석할 수도 있습니다:

# 기본 경로 스캔
./mongobleed-detector.sh

# 특정 로그 파일 스캔
./mongobleed-detector.sh -p /path/to/logs/*.json

# 포렌식 모드 (여러 호스트 분석)
./mongobleed-detector.sh --forensic-dir /evidence/

모드 2: 원격 수집

여러 호스트에서 자동으로 데이터를 수집하고 분석합니다:

# 호스트 파일 생성
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF

# 수집 및 분석
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/

원격 스캐너 옵션

# 특정 SSH 키 사용
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key

# 병렬 실행
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10

# FTDC 수집 건너뛰기 (더 빠름)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc

# 수집만 하고 나중에 분석
./mongobleed-remote.py --hosts-file hosts.txt --user admin --collect-only

# SSH 옵션 전달 (예: 점프 호스트)
./mongobleed-remote.py --hosts-file hosts.txt --user admin \
    -o "ProxyJump=bastion.example.com"

# 권한이 필요한 파일 접근에 sudo 사용 (FTDC 파일은 종종 제한됨)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --sudo

# 연결 문제 해결을 위한 디버그 모드
./mongobleed-remote.py --hosts-file hosts.txt --user admin --debug

FTDC 권한 참고: /var/lib/mongodb/diagnostic.data/의 FTDC 파일은 일반적으로 mongodb 사용자가 소유하며 일반 사용자가 읽을 수 없습니다. "FTDC 권한 문제" 경고가 표시되면 --sudo 플래그를 사용하십시오. 이를 위해서는 원격 사용자에게 암호 없는 sudo 액세스(sudoers에 NOPASSWD)가 필요합니다.

수집되는 내용

데이터 유형소스대상
로그/var/log/mongodb/mongod.log*<output-dir>/<hostname>/logs/
Assert 카운트mongosh 명령어<output-dir>/<hostname>/assert-counts/
FTDC 파일/var/lib/mongodb/diagnostic.data/metrics.*<output-dir>/<hostname>/ftdc-files/

명령줄 옵션

mongobleed-detector.sh

옵션설명기본값
-d, --data-dir <path>수집된 데이터가 있는 디렉터리 (자동 검색 모드)-
-p, --path <glob>추가 로그 경로/glob (반복 가능)-
-t, --time <minutes>조회 기간(분)4320 (3일)
-c, --conn-threshold연결 수 임계값100
-b, --burst-threshold분당 버스트율 임계값400
-m, --metadata-rate메타데이터율 임계값 (0.0-1.0)0.10
--spike-thresholdAssert 스파이크 임계값100
--user-ratio-threshold단일 스냅샷 탐지를 위한 사용자/기타 assert 비율250
--no-default-paths기본 로그 경로 건너뛰기false
--forensic-dir <path>하위 디렉터리를 별도 호스트로 분석-

mongobleed-remote.py

옵션설명기본값
-H, --host <hostname>스캔할 원격 호스트 (반복 가능)-
-f, --hosts-file <file>호스트명이 포함된 파일 (한 줄에 하나)-
-u, --user <user>SSH 사용자 이름현재 사용자
-k, --key <file>SSH 개인 키 파일ssh-agent
-P, --port <port>SSH 포트22
-o, --ssh-options <opt>추가 SSH 옵션 (반복 가능)-
--sudo권한이 필요한 파일 접근(FTDC)에 sudo 사용false
-O, --output-dir <path>수집된 데이터를 저장할 디렉터리./collected-data
--log-path <path>수집할 원격 로그 경로 (반복 가능)표준 경로
--ftdc-path <path>원격 FTDC 디렉터리 경로 (반복 가능)표준 경로
--skip-logs로그 수집 건너뛰기false
--skip-assertsserverStatus().asserts 수집 건너뛰기false
--skip-ftdcFTDC 파일 수집 건너뛰기false
--collect-only데이터만 수집하고 분석 실행 안 함false
-j, --parallel <n>병렬 연결 수5
--timeout <seconds>SSH 명령 타임아웃300
-d, --debug디버그 출력 활성화 (SSH 명령 표시)false
-q, --quiet진행 메시지 숨기기false

종료 코드

도구 다운로드