
एक स्मार्ट Log4Shell/Log4j/CVE-2021-44228 स्कैनर
हालांकि संगठनों को क्रिटिकल Log4J / CVE-2021-44228 भेद्यता के प्रति संवेदनशील अनुप्रयोगों के लिए अपने वातावरण को स्कैन करने में मदद करने के लिए कुछ उत्कृष्ट उपकरण जारी किए गए हैं, मुझे लगा कि:
इसलिए Log4Shell Sentinel का जन्म हुआ। Log4Shell Sentinel एक फ़ाइल-आधारित स्कैनर है जिसमें कुछ अनूठी विशेषताएँ हैं। इसका उद्देश्य अन्य सभी उपलब्ध उपकरणों को बदलना नहीं है, बल्कि उनकी पूर्ति कर सकता है।
Log4Shell Sentinel एक फ़ाइल-आधारित स्कैनर है। यह लक्ष्य प्रणाली को निम्नलिखित फ़ाइल स्वरूपों की कलाकृतियों के लिए स्कैन करके Java-आधारित अनुप्रयोगों की खोज करता है:
| फ़ाइल प्रकार | विवरण |
|---|---|
| Simple jar | यह वह स्थिति है जहाँ log4j-core फ़ाइल एम्बेडेड नहीं है। |
| Fat / Uber jar | एक uber jar एक jar है जिसमें आपकी कक्षाएं/पैकेज और आपके एप्लिकेशन की सभी निर्भरताएँ (लाइब्रेरीज़, संसाधन और मेटाडेटा फ़ाइलें) एकल jar फ़ाइल के भीतर होती हैं। यह सबसे अधिक उपयोग की जाने वाली तैनाती विकल्प है। |
| WAR | एक war (Web Application Archive) फ़ाइल एक फ़ाइल है जिसमें आपके JSP, HTML और JavaScript कोड के अलावा आपकी लाइब्रेरीज़ और अन्य संसाधन शामिल होते हैं। यह प्रारूप कम इस्तेमाल होता है। |
| EAR | एक ear (Enterprise Application Archive) एक अन्य प्रारूप है जो Jakarta EE के साथ तैनाती के लिए पहले अधिक सामान्य था। |
और कमजोर log4j-core jars के उदाहरणों की खोज करता है। फिर यह:
कलाकृति का MD5 हैश की गणना करता है। यह एक विश्लेषक को विभिन्न मशीनों/कंटेनरों पर चलने वाले समान एप्लिकेशन की पहचान करने और उन्हें एकल खोज के रूप में मानने की अनुमति देता है।
उन फ़ाइलों के लिए जो कंटेनर से संबंधित होने का निर्धारण किया जाता है, जैसे: /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar, यह फ़ाइल को संबंधित इमेज से मैप करने का भारी काम करता है। उदाहरण के लिए, यह ऊपर दिए गए को निम्नलिखित इमेज में अनुवाद करेगा: ghcr.io/christophetd/log4shell-vulnerable-app:latest। चूँकि विभिन्न कंटेनर रनटाइम इस मैपिंग को विभिन्न तरीकों से संग्रहीत करते हैं, यह एक विश्लेषक के घंटों की निराशा बचा सकता है। यह एक विश्लेषक को एक ही एप्लिकेशन चलाने वाले कई कंटेनरों को एकल खोज के रूप में मानने की भी अनुमति देता है।
यह बेकार मैचों को हटाता है, जैसे कि वर्तमान में नहीं चल रहे कंटेनरों से संबंधित मैच, जिनमें कैश की गई इमेज शामिल हैं। यह एक विश्लेषक को महत्वपूर्ण पर ध्यान केंद्रित करने की अनुमति देता है और फिर से विश्लेषक के घंटों के अनावश्यक काम को बचाता है।
यह एक विश्लेषक को इस आधार पर मैचों को अनदेखा करने की अनुमति देता है:
यह विश्लेषक को उन अनुप्रयोगों को हटाने की अनुमति देता है जिनके बारे में वे जानते हैं कि वे कमजोर नहीं हैं या जो CLI-आधारित अनुप्रयोगों के अनुरूप हैं जो कोई खतरा पैदा नहीं करते हैं। उदाहरण के लिए, यदि Logstash का एक उदाहरण पाया जाता है, तो एक विश्लेषक इसे अनदेखा करना चुन सकता है यदि वे उपकरण नहीं चलाते हैं या केवल कभी-कभी CLI से चलाते हैं।
यह आपके कॉन्फ़िगरेशन प्रबंधन उपकरणों जैसे Ansible के साथ काम करने के लिए अनुकूलित है, जो आपको मिनटों में अपने वातावरण को जल्दी से स्कैन करने की क्षमता देता है।
Log4Shell Sentinel द्वारा जोड़े गए मेटाडेटा संवर्धन के विवरण के लिए, मेरे ब्लॉग पोस्ट का संदर्भ लें।
सबसे आसान तरीका केवल प्री-कंपाइल्ड बाइनरी डाउनलोड करना है।
फिर, यह सीधा-सादा है। हालांकि, आप शायद अपने वातावरण में GLIBC-संबंधित भिन्नताओं से बचने के लिए एक स्थिर रूप से संकलित संस्करण बनाना चाहेंगे। उपकरण निम्नलिखित मॉड्यूल का उपयोग करता है जो डिफ़ॉल्ट रूप से CGO का उपयोग करते हैं:
os/usernetइन लाइब्रेरियों के Go-संस्करणों का उपयोग करने वाला एक स्थिर रूप से संकलित संस्करण बनाने के लिए, बस रिपो को क्लोन करें और फिर चलाएँ:
$ CGO_ENABLED=0 go build -ldflags="-s -w"
$ ldd log4shell_sentinel
not a dynamic executable
$ ./log4shell_sentinel -h
NAME:
Log4Shell Sentinel - by Osama Elnaggar
USAGE:
log4shell_sentinel [global options] command [command options] [arguments...]
VERSION:
v1.0.0
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--path value, -p value Path to search (default: ".")
--no-banner, --nb Suppress banner (default: false)
--no-messages, --nm Suppress messages except for CSV output (default: false)
--no-header, --nh Suppress header in CSV output (default: false)
--imd5 value, --im value Ignore MD5 hashes. Refer to the GitHub page for expected format
--ipath value, --ip value Ignore file path matches. Refer to the GitHub page for expected format
--icimage value, --ic value Ignore container image matches. Refer to the GitHub page for expected format
--print-headers, --ph Print CSV Headers only (default: false)
--help, -h show help (default: false)
--version, -v print the version (default: false)
डिफ़ॉल्ट रूप से, एक स्कैन बस वर्तमान निर्देशिका को स्कैन करेगा। उदाहरण के लिए:
$ ./log4shell_sentinel
░█░░░█▀█░█▀▀░█░█░█▀▀░█░█░█▀▀░█░░░█░░░░░█▀▀░█▀▀░█▀█░▀█▀░▀█▀░█▀█░█▀▀░█░░
░█░░░█░█░█░█░░▀█░▀▀█░█▀█░█▀▀░█░░░█░░░░░▀▀█░█▀▀░█░█░░█░░░█░░█░█░█▀▀░█░░
░▀▀▀░▀▀▀░▀▀▀░░░▀░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀▀▀
- A CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 Scanner
- v1.0.0
- by Osama Elnaggar
[*] WARNING: Running as non-root user.
Non-readable files / dirs will be skipped
Container mapping will fail
[*] Starting shallow scan ............ [DONE]
[*] Starting deep scan ............... [DONE]
[*] Calculating MD5 hashes ........... [DONE]
[*] Performing container image lookups [DONE]
[*] Processing ignore list(s) ........ [DONE]
[*] Generating output ................ [DONE]
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar
यदि आप इसे गैर-root उपयोगकर्ता के रूप में चलाते हैं तो आपको तुरंत एक चेतावनी मिलेगी, क्योंकि इसे root अनुमतियों की आवश्यकता है:
यह root विशेषाधिकारों के बिना भी काम करेगा लेकिन सर्वोत्तम परिणाम नहीं दे सकता है।
एक नमूना निष्कर्ष इस प्रकार दिखता है:
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar
कुछ फ़ील्ड जानबूझकर खाली छोड़ दी गई हैं और विश्लेषक द्वारा Excel आदि में भरने के लिए छोड़ दी गई हैं। प्रत्येक फ़ील्ड का संक्षिप्त विवरण नीचे दिखाया गया है: