
एक प्रक्रिया निगरानी उपकरण जो शोषण का पता लगाने का प्रयास करता है
एक प्रक्रिया निगरानी उपकरण जो शोषण (exploitation) का पता लगाने का प्रयास करता है
[!IMPORTANT] उभरता खतरा: 21 अक्टूबर 2026, 14:00 UTC पर महत्वपूर्ण PHP सुरक्षा रिलीज़। PHP परियोजना ने इसकी घोषणा 20 अक्टूबर को की (घोषणा): दो गंभीर कमज़ोरियाँ, दोनों CVSS v4.0 9.2 रेटेड। विवरण, प्रभावित संस्करण और सुधार रिलीज़ के साथ आएंगे, जो विवरण सार्वजनिक होने या शोषण शुरू होने पर पहले भी आ सकती है। अभी से PHP अपडेट करने की तैयारी करें।
घोषणा यह नहीं बताती कि ये किस प्रकार की खामियाँ हैं। यदि कोई हमला PHP से प्रोग्राम शुरू करवाता है, तो process-watcher प्रत्येक को उसकी कमांड लाइन के साथ दिखाता है और वैकल्पिक रूप से आपके द्वारा नामित प्रोग्रामों को मार सकता है। यह इन खामियों को नहीं खोजता: यह कुछ भी नहीं रोकता और उस कोड को चूक जाता है जो बिना कोई प्रक्रिया शुरू किए PHP के अंदर चलता है, इसलिए यह एक डिटेक्शन परत जोड़ता है और पैच का विकल्प नहीं है।
यहाँ से शुरू करें: process-watcher के साथ PHP की निगरानी, या पूरी PHP गाइड पढ़ें।
देखें कि कोई सेवा क्या शुरू करती है। process-watcher किसी सेवा (एक वेब सर्वर, एक एप्लिकेशन सर्वर, ...) और उसके
द्वारा बनाई गई प्रत्येक प्रक्रिया को वास्तविक समय में ट्रैक करता है, और प्रत्येक शुरुआत, प्रोग्राम परिवर्तन और समाप्ति को
JSON के रूप में लॉग करता है, वैकल्पिक रूप से कमांड लाइन के साथ। जब आपका वेब सर्वर अचानक कोई शेल या curl चलाता है, तो
आप देखते हैं कि क्या शुरू किया गया, किस प्रक्रिया द्वारा और किस सेवा से। यह Linux (amd64, arm64) के लिए एक स्थिर
बाइनरी है: डाउनलोड करें, अनपैक करें, चलाएँ।
यह गतिविधि को दृश्यमान बनाता है; यह उसका निर्णय नहीं करता। बेसलाइन बनाना या यह तय करना कि क्या हमला है, आपके या उस
सिस्टम पर छोड़ा गया है जो इवेंट प्राप्त करता है (लॉग फ़ाइल, SIEM, webhook)। वैकल्पिक रूप से यह विशिष्ट चाइल्ड
प्रक्रियाओं पर लक्षित SIGKILL के साथ प्रतिक्रिया कर सकता है (Kill नियम)।
1. नवीनतम रिलीज़ को डाउनलोड और अनपैक करें (amd64 या
arm64, आपकी मशीन से पहचाना गया; संग्रह के नामों में संस्करण होता है, इसलिए दूसरी पंक्ति नवीनतम टैग खोजती है):
ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')
VERSION=$(curl -fsSLI -o /dev/null -w '%{url_effective}' https://github.com/Neo23x0/process-watcher/releases/latest | sed 's#.*/##')
curl -fsSLO https://github.com/Neo23x0/process-watcher/releases/download/$VERSION/process-watcher_${VERSION}_linux_${ARCH}.tar.gz
tar xzf process-watcher_${VERSION}_linux_${ARCH}.tar.gz && cd process-watcher_${VERSION}_linux_${ARCH}
2. इसे चलाएँ उस सेवा के विरुद्ध जिसे आप देखना चाहते हैं। इसके लिए root और BTF के साथ Linux 5.15 या नया आवश्यक है;
sudo ./process-watcher doctor आपको बताता है कि आपका होस्ट योग्य है या नहीं।
sudo ./process-watcher --watch-image-contains nginx --capture-argv=true
nginx आपकी सेवा के निष्पादन योग्य नाम (apache2, php-fpm, java, ...) का एक सबस्ट्रिंग है। एजेंट को
Ctrl-C से रोकें; यह इवेंट्स को ./process-watcher.jsonl में लिखता है। --capture-argv=true कमांड लाइनों को रिकॉर्ड करता है, जिनमें
सीक्रेट्स हो सकते हैं (Argument capture)। फ़ाइल पसंद है? बाइनरी के बगल में process-watcher.yaml संपादित करें
(यह स्वचालित रूप से मिल जाती है) और sudo ./process-watcher चलाएँ।
3. देखें कि सेवा क्या शुरू करती है (दूसरा टर्मिनल, वही डायरेक्टरी; jq JSON को पठनीय बनाता है):
sudo tail -f process-watcher.jsonl | jq -r '
select(.event_type=="process.exec" and .lineage.role=="descendant")
| "\(.timestamp[:19])Z \(.root.image) > \(.process.image) \(.process.argv // [] | join(" "))" | gsub("[[:cntrl:]]"; "?")'
उदाहरण: nginx नामक एक सेवा को एक शेल और कुछ प्रोग्राम चलाने के लिए बनाया गया है (एक स्टैंड-इन प्रोग्राम से अनुकरण किया गया):
2026-10-17T19:15:16Z nginx > dash sh -c id; uname -s
2026-10-17T19:15:16Z nginx > id id
2026-10-17T19:15:16Z nginx > uname uname -s
2026-10-17T19:15:16Z nginx > curl curl --version
2026-10-17T19:15:16Z nginx > sleep sleep 1
जो वेब या एप्लिकेशन सर्वर शेल, डाउनलोड टूल या इंटरप्रेटर (sh, curl, wget, nc, python, ...) लॉन्च करता है, वह वेब शेल या रिमोट कोड एक्ज़ीक्यूशन का एक क्लासिक निशान है। सभी जनरेशन का अनुसरण किया जाता है, पैरेंट के समाप्त होने के बाद भी। (jq केवल प्रदर्शन के लिए आर्ग्युमेंट्स को जोड़ता है; इवेंट उन्हें एक ऐरे के रूप में रखता है। sh dash के रूप में दिखाई देता है क्योंकि इमेज वह प्रोग्राम है जो वास्तव में चला।)
अगला: इसे systemd सेवा के रूप में चलाते रहें · --tcp-address, --udp-address या --webhook-url (आउटपुट) के साथ इवेंट्स को अपने SIEM या लॉग पाइपलाइन में भेजें · संदिग्ध चाइल्ड प्रोसेस को स्वचालित रूप से समाप्त करें (किल नियम)।
| आवश्यकता | मान |
|---|---|
| ऑपरेटिंग सिस्टम | Linux, amd64 या arm64 |
| कर्नेल | 5.15 या नया BTF के साथ (/sys/kernel/btf/vmlinux)। केवल वर्ज़न नंबर कोई गारंटी नहीं है: शुरू होने पर एजेंट उन फ़ंक्शन्स और कर्नेल स्ट्रक्चर फ़ील्ड्स की जाँच करता है जिनकी उसे आवश्यकता है। |
| विशेषाधिकार | root, या CAP_BPF + CAP_PERFMON (+ अन्य उपयोगकर्ताओं की प्रोसेस के /proc/<pid>/exe के लिए CAP_SYS_PTRACE, किल फ़ीचर के लिए CAP_KILL, कर्नेल 5.11 से पहले CAP_SYS_RESOURCE)। कर्नेल लॉकडाउन confidentiality संचालन को रोकता है। |
| PID नेमस्पेस | होस्ट का प्रारंभिक PID नेमस्पेस (सभी PID होस्ट PID हैं); कंटेनर के अंदर चलाने से इनकार कर दिया जाता है। |
यदि कोई आवश्यकता अनुपस्थित है, तो एजेंट एक ठोस निदान और एग्ज़िट कोड 3 के साथ रुक जाता है; यह कभी भी /proc को पोल करने पर वापस नहीं जाता, जिससे अल्पकालिक प्रोसेस छूट जाती हैं। sudo ./process-watcher doctor सब कुछ जाँचता है, प्रोग्राम लोड करता है और अपनी एक प्रोब प्रोसेस चलाता है। परीक्षित कर्नेल: docs/compatibility.md।
# in the directory the archive was downloaded to, with $VERSION and $ARCH from step 1
curl -fsSLO https://github.com/Neo23x0/process-watcher/releases/download/$VERSION/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
gh attestation verify process-watcher_${VERSION}_linux_${ARCH}.tar.gz --repo Neo23x0/process-watcher # build provenance
हर आर्काइव में एकल स्टैटिक बाइनरी (eBPF प्रोग्राम एम्बेडेड; रन टाइम पर और कुछ भी आवश्यक नहीं), टिप्पणी-सहित उदाहरण कॉन्फ़िगरेशन process-watcher.yaml, LICENSE, नीचे php/ में emerging-threats/ में PHP किट के दो कॉन्फ़िगरेशन, तुरंत उपयोग करने योग्य (process-watcher --config php/php-observe.yaml), और packaging/ में इसे इंस्टॉल करने वाली स्क्रिप्ट के साथ systemd यूनिट शामिल है। केवल amd64 और arm64 प्रदान किए गए हैं: eBPF कलेक्टर 64-बिट कर्नेल पॉइंटर्स मानता है, इसलिए 32-बिट कर्नेल (x86, ARM) समर्थित नहीं हैं।
अनपैक किए गए आर्काइव से: