
डिस्क पर और Java Archive Files के अंदर भी असुरक्षित Log4j2 संस्करण खोजें (Log4Shell CVE-2021-44228, CVE-2021-45046, CVE-2021-45105)
फ़ाइल सिस्टम को स्कैन करने के लिए एक Python3 स्क्रिप्ट जो Log4Shell (CVE-2021-44228 और CVE-2021-45046 और CVE-2021-45105) के प्रति संवेदनशील Log4j2 को ढूँढती है।
यह डिस्क पर और Java Archive फ़ाइलों (JARs) के अंदर (नेस्टेड) दोनों में पुनरावर्ती रूप से स्कैन करती है।

log4j-finder आपके फ़ाइल सिस्टम पर log4j2 लाइब्रेरीज़ की पहचान ज्ञात खराब और ज्ञात अच्छे MD5 हैश की एक सूची का उपयोग करके करता है, जो विशिष्ट फ़ाइलों (वर्तमान में केवल JndiManager.class) के लिए हैं, जो log4j2-core-* पैकेजों में मौजूद हैं; यह मुख्य पैकेज है जो log4shell से प्रभावित है। यह Java Archive फ़ाइलों के अंदर और फ़ाइल सिस्टम पर इन फ़ाइलों की खोज करता है। log4j2 संस्करण तब इस फ़ाइल के MD5 हैश के आधार पर पहचाना जाता है।
स्कैनिंग गति को अनुकूलित करने के लिए, यह फ़ाइल सिस्टम को खोजता है और केवल निम्नलिखित फ़ाइल नामों को संसाधित करता है:
Java ARchive फ़ाइल एक्सटेंशन हैं (इन आर्काइव में नेस्टेड भी):
*.jar, *.war, *.earJndiManager.classयदि फ़ाइल ऊपर वर्णित एक्सटेंशनों में से किसी एक से मेल खाती है, तो यह इन आर्काइव के अंदर (सब कुछ मेमोरी में, कुछ भी अनपैक नहीं किया जाता) फ़ाइल नामों की खोज करने के लिए जाँच करेगा, जिनके लिए स्क्रिप्ट के पास ज्ञात हैश हैं। यह नेस्टेड आर्काइव के अंदर भी देखता है, उदाहरण के लिए, एक WAR फ़ाइल में एक JAR फ़ाइल।
स्क्रिप्ट अन्य आर्काइव फ़ाइल एक्सटेंशन जैसे 7z, RAR, TAR, BZ2, आदि को स्कैन नहीं करती है। इसलिए, उदाहरण के लिए, यदि कोई JAR फ़ाइल किसी 7z फ़ाइल के अंदर है, तो स्क्रिप्ट उसे नहीं ढूँढेगी। इसका तर्क यह है कि Java केवल Java ARchive प्रारूपों को लोड कर सकता है, इसलिए हम केवल उन्हीं को स्कैन करते हैं।
अज्ञात MD5 हैश UNKNOWN के रूप में दिखाए जाते हैं; यह तब हो सकता है जब कोई गैर-log4j2 Java पैकेज उसी फ़ाइल नाम का उपयोग करता है जिसे यह स्क्रिप्ट खोजती है।
यह संभवतः log4j2 नहीं है यदि पहचानी गई फ़ाइल पथ में org/apache/logging/log4j के संदर्भ शामिल नहीं हैं। हालाँकि, मैन्युअल सत्यापन अभी भी अनुशंसित है।
आप निम्नलिखित विधियों में से एक का उपयोग करके log4j-finder स्थापित कर सकते हैं:
आप अपने ऑपरेटिंग सिस्टम के लिए सही बाइनरी डाउनलोड कर सकते हैं:
यदि आप Linux पर हैं, तो आप नवीनतम रिलीज़ डाउनलोड कर सकते हैं और निम्नलिखित तरीकों में से एक का उपयोग करके चला सकते हैं:
curl -L https://github.com/fox-it/log4j-finder/releases/latest/download/log4j-finder -o log4j-finder
chmod +x log4j-finder
sudo ./log4j-finder
wget https://github.com/fox-it/log4j-finder/releases/latest/download/log4j-finder -O log4j-finder
chmod +x log4j-finder
sudo ./log4j-finder
Python 3.6+ स्थापित वितरण के लिए, निम्नलिखित विधियों में से एक भी काम करती है:
curl -L https://github.com/fox-it/log4j-finder/raw/main/log4j-finder.py -o log4j-finder.py
sudo python3 log4j-finder.py
wget https://github.com/fox-it/log4j-finder/raw/main/log4j-finder.py
sudo python3 log4j-finder.py
git clone https://github.com/fox-it/log4j-finder
cd log4j-finder
sudo python3 log4j-finder.py
रिपॉजिटरी में एक GitHub Action है जो प्रत्येक कमिट पर PyInstaller का उपयोग करके स्वचालित रूप से log4j-finder.py स्क्रिप्ट की एक विंडोज और लिनक्स बाइनरी उत्पन्न करता है। इन वर्कफ़्लो रन के बिल्ड आर्टिफैक्ट्स को रिलीज़ पेज से जोड़ने के लिए उपयोग किया जाता है।
हम जानते हैं कि कुछ एंटी वायरस विक्रेता विंडोज बाइनरी को पसंद नहीं करते हैं, उस स्थिति में हम निम्नलिखित चरणों का उपयोग करके स्वयं निष्पादनयोग्य बनाने की सलाह देते हैं (ध्यान दें कि अब हम हस्ताक्षरित बाइनरी भी प्रदान करते हैं)।
यदि आपके पास Python 3.6 या उच्चतर स्थापित नहीं है, तो पहले इसे https://www.python.org/downloads/ से डाउनलोड करें
Python 3.8.10 चुनें:
Add Python 3.x to PATH चुनें, इससे निम्नलिखित चरण बहुत आसान हो जाते हैं।एक कमांड प्रॉम्प्ट खोलें और pyinstaller पैकेज को स्थापित करने के लिए pip का उपयोग करें:
pip install pyinstaller
# आउटपुट में आप देखेंगे कि pyinstaller कहाँ स्थापित है, उदाहरण के लिए:
# C:\Users\User\AppData\Roaming\Python\Python310\Scripts
#
# --version का उपयोग करके सत्यापित करें
C:\Users\User\AppData\Roaming\Python\Python310\Scripts\pyinstaller.exe --version
4.7
वैकल्पिक रूप से रंगों के लिए समर्थन जोड़ने के लिए colorama पैकेज स्थापित करें:
pip install colorama
pyinstaller --onefile --hidden-import colorama log4j-finder.py
विंडोज निष्पादनयोग्य तब dist निर्देशिका में होता है: dist\log4j-finder.exe
डेबियन 11 के लिए उदाहरण दिया गया है:
# pip3 का उपयोग करके PyInstaller स्थापित करें
sudo apt update
sudo apt install python3-pip git
pip3 install --user pyinstaller
# Git clone और PyInstaller का उपयोग करके बिल्ड करें
git clone https://github.com/fox-it/log4j-finder
cd log4j-finder
~/.local/bin/pyinstaller --onefile log4j-finder.spec
# सत्यापित करें कि बाइनरी काम करती है
./dist/log4j-finder --help
किसी पथ को स्कैन करने का उदाहरण (डिफ़ॉल्ट / है):
$ python3 log4j-finder.py /path/to/scan
या सीधे एक JAR फ़ाइल:
$ python3 log4j-finder.py /path/to/jarfile.jar
या एकाधिक निर्देशिकाएँ और/या फ़ाइलें:
$ python3 log4j-finder.py /path/to/dir1 /path/to/dir2 /path/to/jarfile.jar
फ़ाइलों या निर्देशिकाओं को बाहर करें:
$ python3 log4j-finder.py / --exclude "/*/.dontgohere" --exclude "/home/user/*.war"
ध्यान दें कि विंडोज पर यदि आप कोई अतिरिक्त तर्क नहीं देते हैं तो यह केवल रूट c:\ ड्राइव को स्कैन करता है।
हम उन ड्राइव्स को निर्दिष्ट करने की सलाह देते हैं जिन्हें आपको कमांडलाइन पर स्कैन करने की आवश्यकता है, जैसे (जो ड्राइव मौजूद नहीं हैं उन्हें छोड़ दिया जाता है):
log4j-finder.exe c:\ d:\ e:\ f:\
जिन फ़ाइलों या निर्देशिकाओं तक पहुँचा नहीं जा सकता (अनुमति अस्वीकृत त्रुटियाँ) उन्हें मुद्रित नहीं किया जाता है।
यदि आप अधिक आउटपुट देखना चाहते हैं, तो आप वर्बोज़ के लिए -v फ्लैग दे सकते हैं, या डीबग मोड के लिए -vv (केवल डीबगिंग उद्देश्यों के लिए अनुशंसित)।
एप्लिकेशन तर्क:
positional arguments:
PATH स्कैन करने के लिए निर्देशिका या फ़ाइल(एँ) (पुनरावर्ती रूप से) (डिफ़ॉल्ट:
['/'])
optional arguments:
-h, --help यह सहायता संदेश दिखाएँ और बाहर निकलें
-v, --verbose विस्तृत आउटपुट (-v जानकारी है, -vv डीबग है) (डिफ़ॉल्ट: 0)
-n, --no-color रंग आउटपुट अक्षम करें (डिफ़ॉल्ट: False)
-q, --quiet अधिक शांत रहें, बैनर और सारांश अक्षम करता है (डिफ़ॉल्ट:
False)
-b, --no-banner बैनर अक्षम करें (डिफ़ॉल्ट: False)
-V, --version प्रोग्राम का संस्करण संख्या दिखाएँ और बाहर निकलें
-e PATTERN, --exclude PATTERN
पैटर्न द्वारा फ़ाइलों/निर्देशिकाओं को बाहर करें (एकाधिक बार उपयोग किया जा सकता
है) (डिफ़ॉल्ट: None)
फ़ाइलों को पुनरावर्ती रूप से स्कैन किया जाता है, डिस्क पर और (नेस्टेड) Java Archive फ़ाइलों में दोनों।
log4j-finder.py स्क्रिप्ट का नवीनतम संस्करण डाउनलोड करें और फिर PyInstaller चलाएँ: