Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mongobleed-detector — Detection Script for MongoBleed Exploitation | Kitploit
도구/GitHubGitHub/neo23x0/mongobleed-detector
Vulnerability AnalysisScripting & AutomationForensicsDigital ForensicsThreat IntelligenceIncident ResponseDatabase SecurityLog Analysis
GitHubneo23x0/mongobleed-detector

mongobleed-detector

Detection Script for MongoBleed Exploitation

저장소 보기
81137개월 전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 패키지 불필요

종속성 설치

root@kitploit:~
# 셸 스크립트 종속성
# 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

설치

root@kitploit:~
# 저장소 클론
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 호스트에서 데이터를 수집하여 다음 구조로 정리합니다:

root@kitploit:~
./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

로그 수집

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

Assert 카운트 수집

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

root@kitploit:~
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/)
root@kitploit:~
# FTDC 파일 복사 (sudo가 필요할 수 있음)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/

2단계: 분석 실행

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

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

레거시 모드 (로그 전용)

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

root@kitploit:~
# 기본 경로 스캔
./mongobleed-detector.sh

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

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

모드 2: 원격 수집

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

root@kitploit:~
# 호스트 파일 생성
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/

원격 스캐너 옵션

root@kitploit:~
# 특정 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)가 필요합니다.

수집되는 내용

명령줄 옵션

mongobleed-detector.sh

mongobleed-remote.py

종료 코드

코드의미
0HIGH 또는 MEDIUM 발견 사항 없음
1HIGH 또는 MEDIUM 발견 사항 감지됨
2오류 (종속성 누락, 데이터 없음 등)

신뢰도 수준

도구는 사용 가능한 모든 증거를 기반으로 결합된 신뢰도 판정을 제공합니다:

모듈별 위험 수준

로그 상관 분석(모듈 A)의 경우 개별 IP는 다음과 같이 분류됩니다:

위험기준
HIGH연결 수 ≥ 임계값, 메타데이터율 < 10%, 버스트율 ≥ 400/분
MEDIUM연결 수 ≥ 임계값, 메타데이터율 < 10%, 버스트율 < 400/분
LOW

출력 예시

root@kitploit:~
INFO: Auto-discovery mode: analyzing ./collected-data/
INFO: Module A: Analyzing 3 log file(s)...
INFO: Module B1: Analyzing assert-counts...

╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                              MongoBleed (CVE-2025-14847) Detection Results                                       ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

Module Status:
  [✓] Module A (Log Correlation): 3 log file(s) found
  [✓] Module B1 (Assert Counts): 4 snapshot(s) found
  [−] Module B2 (FTDC Spikes): No FTDC files or decoder unavailable

Analysis Parameters:
  Time Window:        4320 minutes
  Connection Thresh:  100
  Burst Rate Thresh:  400/min
  Metadata Rate:      0.10
  Spike Threshold:    100
  User Ratio Thresh:  250x

Module A - Log Correlation Findings:

Risk     SourceIP                                  ConnCount  MetaCount  DiscCount    MetaRate%    BurstRate/m FirstSeen (UTC)        LastSeen (UTC)        
-------- ---------------------------------------- ---------- ---------- ---------- ------------ -------------- ---------------------- ----------------------
HIGH     137.137.137.137                                8172          0       8172        0.00%         490.32 2025-12-27T12:55:52Z   2025-12-27T13:12:32Z  

Module B1 - Assert Counts Analysis:
  Analyzed 4 snapshots from 2025-01-01T10:00:00Z to 2025-01-01T11:30:00Z
    asserts.user: 100 -> 860 (delta: 760)
  SPIKE DETECTED: 2025-01-01T10:30:00Z to 2025-01-01T11:00:00Z
    Delta: +740 user asserts (110 -> 850)

═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Combined Verdict:
  MEDIUM CONFIDENCE - Investigation recommended
    - Suspicious connection patterns but FTDC data unavailable for correlation

⚠ IMPORTANT: If exploitation is confirmed, patching alone is insufficient.
  - Rotate all credentials that may have been exposed
  - Review accessed data for sensitive information disclosure
  - Check for lateral movement from affected systems
  - Preserve logs for forensic analysis

Caveats:
  - Connection metadata absence is PoC-specific and can be evaded
  - Assertion counters are cumulative - false positives possible without baseline
  - FTDC provides timing but not perfect attribution
  - Patch + rotate secrets remains mandatory regardless of detection results

테스트

저장소에는 탐지기를 검증하기 위한 테스트 스위트가 포함되어 있습니다.

실제 예제 데이터

example-data/ 디렉터리에는 MongoBleed PoC를 사용하여 공격받은 MongoDB 8.0.16 인스턴스의 실제 데이터가 포함되어 있습니다:

root@kitploit:~
example-data/
├── logs/                    # 공격 패턴이 포함된 실제 MongoDB 로그
│   ├── mongod.log
│   └── mongod.log.1.gz
├── assert-counts/           # 공격 후 serverStatus().asserts 스냅샷
│   └── asserts-post-attack.json
└── ftdc-files/              # 실제 FTDC 진단 데이터 파일
    └── metrics.*

이 데이터는 다음을 보여줍니다:

  • 공격자 IP 137.137.137.137에서 16,344개 연결, 메타데이터 0%
  • 공격 중 누적된 37,384개의 사용자 assert
  • 공격 시간대에 걸친 FTDC 파일

합성 테스트 데이터 생성

root@kitploit:~
./test/generate-test-logs.sh

이 명령은 다양한 패턴의 추가 합성 테스트 데이터를 생성합니다:

  • HIGH/MEDIUM/LOW/INFO 위험 패턴이 있는 로그 파일
  • Assert 카운트 JSON 스냅샷 (스파이크 포함 및 미포함)
  • 가장자리 사례 (IPv6, 잘못된 형식의 입력 등)

테스트 실행

root@kitploit:~
./test/test-detector.sh

예상 출력:

root@kitploit:~
╔════════════════════════════════════════════════════════╗
║       MongoBleed Detector Test Suite                   ║
╚════════════════════════════════════════════════════════╝

Module A Tests (Log Correlation):
✓ PASS: Exit code is 1 (findings detected)
✓ PASS: Detected source IP 137.137.137.137
...

Module B1 Tests (Assert Counts):
✓ PASS: Shows Module B1 status
✓ PASS: Detected assert spike
...

Auto-Discovery Mode Tests:
✓ PASS: Shows Module A status
✓ PASS: Shows combined verdict
...

Results:
  Passed: 24
  Failed: 0

All tests passed!

주의사항 및 한계

⚠️ 중요한 한계

탐지 한계

  1. PoC 특정 탐지: 메타데이터 부재 탐지는 알려진 MongoBleed PoC 동작을 기반으로 합니다. 정교한 공격자는 가짜 메타데이터를 보내도록 익스플로잇을 수정할 수 있지만, 이는 공격 속도를 저하시킬 수 있습니다.

  2. 누적 카운터: asserts.user는 mongod 재시작 이후 누적됩니다. 기준 스냅샷이 없으면 장기 실행 인스턴스의 높은 값이 정상일 수 있습니다. 시간에 따른 여러 스냅샷이 정확성을 크게 향상시킵니다.

  3. FTDC 타이밍: FTDC는 타이밍 정보를 제공하지만 완벽한 귀속은 불가능합니다. 최상의 결과를 위해 로그 상관 분석과 함께 사용하십시오.

  4. 로그 보존: 존재하는 로그만 분석할 수 있습니다. 공격적인 로그 순환 또는 공격자의 로그 삭제는 증거를 파괴합니다.

기술 요구 사항

  1. JSON 로깅 필요: MongoDB 4.4+는 기본적으로 JSON 로그를 사용합니다. 레거시 텍스트 로그는 지원되지 않습니다.

  2. FTDC 디코더: FTDC 디코딩에는 pymongo가 포함된 Python 3이 필요합니다. 없으면 모듈 B2를 사용할 수 없습니다.

  3. mongosh 접근: Assert 카운트 수집에는 적절한 권한이 있는 mongosh가 필요합니다.

탐지 후 조치

HIGH 또는 MEDIUM 발견 사항이 확인되면:

  1. 증거 보존 - 로그가 순환되기 전에 복사
  2. 자격 증명 교체 - 모든 MongoDB 자격 증명과 메모리에 있을 수 있는 모든 비밀 교체
  3. 데이터 검토 - 어떤 민감한 데이터가 노출되었을 수 있는지 평가
  4. 측면 이동 - 공격자가 다른 시스템으로 이동했는지 확인
  5. 즉시 패치 - MongoDB 보안 업데이트 적용
  6. 보고 - 사고 대응 절차에 따라 보고

참조 및 크레딧

탐지 연구

이 도구의 탐지 논리는 Eric Capuano와 Tamir Zimerman의 연구를 기반으로 합니다:

  • Hunting MongoBleed (CVE-2025-14847) - Eric Capuano의 취약점 및 탐지 방법론 관련 글
  • A Different MongoBleed Perspective - Tamir Zimerman의 assertion 기반 탐지 분석

MongoDB 문서

  • serverStatus 명령어 - asserts 필드 문서
  • 전체 시간 진단 데이터 캡처 - FTDC 저장 위치
  • MongoDB FTDC란 - FTDC 형식 배경

영향을 받는 버전

라이선스

LICENSE 파일을 참조하십시오.

기여

기여는 환영합니다! 이슈와 풀 리퀘스트를 제출해 주세요.

프로덕션 데이터에서 이 도구를 테스트하는 경우, 특히 다음에 대한 피드백을 주시면 감사하겠습니다:

  • 거짓 양성 비율
  • 정상 트래픽 패턴
  • 가장자리 사례 또는 파싱 실패
  • FTDC 디코딩 문제
도구 다운로드
데이터 유형소스대상
로그/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/
옵션설명기본값
-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>하위 디렉터리를 별도 호스트로 분석-
옵션설명기본값
-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
신뢰도기준해석
HIGHFTDC 피크가 감지됨 AND 동일한 시간대에 의심스러운 로그악용의 강력한 지표
MEDIUMFTDC 피크 또는 의심스러운 로그 (상관 관계 없음)조사 권장
LOW스파이크 없이 누적 assert 카운트만 있음이상 징후 감지, 약한 증거
INFO유의미한 발견 사항 없음정상 활동
연결 수 ≥ 임계값, 메타데이터율 ≥ 10%
INFO연결 수 < 임계값
버전취약수정 버전
8.2.x8.2.0 - 8.2.28.2.3
8.0.x8.0.0 - 8.0.168.0.17
7.0.x7.0.0 - 7.0.277.0.28
6.0.x6.0.0 - 6.0.266.0.27
5.0.x5.0.0 - 5.0.315.0.32
4.4.x4.4.0 - 4.4.294.4.30
4.2.x4.2.0+수정 사항 없음
4.0.x4.0.0+수정 사항 없음
3.6.x3.6.0+수정 사항 없음