
MongoBleed शोषण के लिए डिटेक्शन स्क्रिप्ट
CVE-2025-14847 (MongoBleed) के लिए ऑफ़लाइन MongoDB विश्लेषण उपकरण
एक स्टैंडअलोन Linux कमांड-लाइन उपकरण जो कई डिटेक्शन मॉड्यूल का उपयोग करके CVE-2025-14847 के संभावित शोषण की पहचान करने के लिए MongoDB डेटा का विश्लेषण करता है।
MongoBleed (CVE-2025-14847) MongoDB के zlib डीकंप्रेसन में एक मेमोरी डिस्क्लोज़र भेद्यता है, जो हमलावरों को बिना प्रमाणीकरण के सर्वर मेमोरी से सीधे संवेदनशील डेटा—क्रेडेंशियल, सत्र टोकन, PII—निकालने की अनुमति देती है।
यह उपकरण घटना प्रतिक्रिया टीमों को कई साक्ष्य स्रोतों का उपयोग करके शोषण प्रयासों का पता लगाने में मदद करता है:
शोषण पैटर्न का पता लगाने के लिए MongoDB JSON लॉग का विश्लेषण करता है:
| इवेंट ID | प्रकार | विवरण |
|---|---|---|
| 22943 | कनेक्शन स्वीकृत | क्लाइंट के कनेक्ट होने पर लॉग किया जाता है |
| 51800 | क्लाइंट मेटाडेटा | जब क्लाइंट ड्राइवर/एप्लिकेशन जानकारी भेजता है तब लॉग किया जाता है |
| 22944 | कनेक्शन बंद | क्लाइंट के डिस्कनेक्ट होने पर लॉग किया जाता है |
मुख्य अंतर्दृष्टि: वैध MongoDB ड्राइवर हमेशा क्लाइंट मेटाडेटा भेजते हैं। MongoBleed शोषण कनेक्ट करता है, मेमोरी निकालता है और डिस्कनेक्ट करता है—लेकिन मेटाडेटा कभी नहीं भेजता।
db.serverStatus().asserts के स्नैपशॉट का विश्लेषण करके asserts.user काउंटरों में असामान्य पैटर्न का पता लगाता है:
asserts.user की अन्य असर्ट प्रकारों से तुलना करके संदिग्ध पैटर्न का पता लगाता है। यदि यूज़र असर्ट असमान रूप से अधिक हों (अनुपात ≥250x) या अन्य सभी प्रकार शून्य हों, तो संदिग्ध के रूप में चिह्नित करता है (MEDIUM विश्वास)नोट: संचयी काउंटर गलत-सकारात्मक परिणाम उत्पन्न कर सकते हैं। सर्वोत्तम परिणामों के लिए FTDC (मॉड्यूल B2) के साथ संयोजन में उपयोग करें।
असर्ट काउंटरों में समय-स्थानीयकृत स्पाइक का पता लगाने के लिए MongoDB की Full-Time Diagnostic Data Capture (FTDC) फ़ाइलों का विश्लेषण करता है। FTDC समय-समय पर serverStatus का नमूना लेता है, जिससे संभावित हमलों का सटीक समय निर्धारण संभव होता है।
jq - JSON प्रोसेसरawk (gawk अनुशंसित)gzip - संपीड़ित लॉग समर्थन के लिएpymongo - FTDC फ़ाइल डिकोडिंग के लिएssh, scp कमांड)# Shell script dependencies
# Debian/Ubuntu
apt-get install jq gawk gzip
# RHEL/CentOS/Fedora
dnf install jq gawk gzip
# macOS
brew install jq gawk
# Python dependencies (for FTDC decoding)
pip install -r requirements.txt
# Clone the repository
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector
# Make scripts executable
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py
# Install Python dependencies (optional, for FTDC support)
pip install -r requirements.txt
MongoDB होस्ट से मैन्युअल रूप से एकत्र किए गए डेटा का विश्लेषण करें।
SSH के माध्यम से स्वचालित रूप से कई होस्ट से डेटा एकत्र करें, फिर स्थानीय रूप से विश्लेषण करें।
अपने MongoDB होस्ट से डेटा एकत्र करें और इसे इस संरचना में व्यवस्थित करें:
./collected-data/
├── logs/ # MongoDB JSON logs
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # serverStatus().asserts snapshots
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # FTDC diagnostic.data contents
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copy from remote host
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
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 फ़ाइलें यहां स्थित हैं:
<storage.dbPath>/diagnostic.data/ (सामान्यतः /var/lib/mongodb/diagnostic.data/)systemLog.path से व्युत्पन्न (जैसे, /var/log/mongodb/mongos.diagnostic.data/)# Copy FTDC files (may require sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
# Auto-discovery mode - analyzes all available data
./mongobleed-detector.sh --data-dir ./collected-data/
# With custom thresholds
./mongobleed-detector.sh --data-dir ./collected-data/ \
-t 1440 \ # 24-hour lookback
-c 50 \ # Lower connection threshold
--spike-threshold 50 # Lower spike threshold
पिछड़ी संगतता के लिए, आप अभी भी लॉग का सीधे विश्लेषण कर सकते हैं:
# Scan default paths
./mongobleed-detector.sh
# Scan specific log files
./mongobleed-detector.sh -p /path/to/logs/*.json
# Forensic mode (analyze multiple hosts)
./mongobleed-detector.sh --forensic-dir /evidence/
कई होस्ट से स्वचालित रूप से डेटा एकत्र करें और विश्लेषण करें:
# Create hosts file
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF
# Collect and analyze
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/
# Use specific SSH key
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key
# Parallel execution
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10
# Skip FTDC collection (faster)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc
# Collect only, analyze later
./mongobleed-remote.py --hosts-file hosts.txt --user admin --collect-only
# Pass SSH options (e.g., jump host)
./mongobleed-remote.py --hosts-file hosts.txt --user admin \
-o "ProxyJump=bastion.example.com"