
नेस्टेड बाइनरीज़ के अंदर CVE-2021-44228 के लिए डिटेक्शन
इस रिपॉजिटरी में YARA नियमों का एक सेट है जो log4j के उन संस्करणों का पता लगाने के लिए है जो CVE-2021-44228, CVE-2021-45046, और/या CVE-2021-45105 के प्रति संवेदनशील हैं, प्रभावित संस्करणों में दिखाई देने वाली कई विशेषताओं को देखकर।
यह उपकरण बाइनरी फ़ाइलों जैसे Docker इमेज, सिस्टम पैकेज, फ़ाइलसिस्टम इमेज, और यहाँ तक कि इंस्टॉलेशन मीडिया पर पुनरावर्ती रूप से काम करता है। समर्थित फ़ाइल प्रारूपों की पूरी सूची के लिए "यह कैसे काम करता है?" अनुभाग देखें।
JndiManager निर्माता के हस्ताक्षर की खोज करता है (< 2.15.0)।Interpolator वर्गों की खोज करता है जो JndiManager आयात नहीं करते हैं (< 2.16.0)।AbstractConfiguration वर्गों की खोज करता है जो ConfigurationStrSubstitutor आयात नहीं करते हैं (< 2.17.0)।हालाँकि CodeQL या Semgrep का उपयोग करके log4j के असुरक्षित उपयोग का पता लगाने के लिए कई संसाधन उपलब्ध हैं, फिर भी बाइनरी आर्टिफैक्ट्स के अंदर संभावित रूप से संवेदनशील log4j संस्करणों का पता लगाने के लिए अभी तक कोई संसाधन उपलब्ध नहीं कराया गया है।
यह उन संगठनों के लिए एक चुनौती पेश करता है जो एंटरप्राइज़ एप्लिकेशन चला रहे हैं जो आंतरिक रूप से विकसित नहीं किए गए थे, या जहां प्रारंभिक ट्राइएज करने वाली टीमों को स्रोत कोड तुरंत उपलब्ध नहीं है।
चूंकि यह भेद्यता विभिन्न "अप्रत्याशित" स्थानों पर सामने आने की संभावना है, इसलिए यह टूलिंग संकलित आर्टिफैक्ट्स के अंदर log4j के संवेदनशील संस्करणों का पता लगाने में सहायता करने का इरादा रखती है, जिसे बाद में शोषण क्षमता निर्धारित करने के लिए मैन्युअल रूप से समीक्षा की जा सकती है।
अस्पष्ट कोड (Obfuscated code) के परिणामस्वरूप गलत नकारात्मक परिणाम (false negatives) होंगे, जहाँ एक संभावित रूप से संवेदनशील विजेट अस्पष्टता के उपयोग के कारण पता लगाने में असमर्थ होता है।
इस उपकरण को चलाने के लिए इस रिपॉजिटरी को क्लोन करें और निम्नलिखित चरणों का पालन करें। यह मानता है कि Docker और jq स्थापित हैं।
artifacts/ फ़ोल्डर में जोड़ें./quickstart.sh)वैकल्पिक रूप से, रन को निम्नलिखित कमांड का उपयोग करके अनुकूलित किया जा सकता है:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
यदि आप केवल CVE-2021-44228 की तलाश करना चाहते हैं, तो निम्नलिखित कमांड का उपयोग किया जा सकता है:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
यदि आप केवल CVE-2021-45046 की तलाश करना चाहते हैं, तो निम्नलिखित कमांड का उपयोग किया जा सकता है:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
यदि आप केवल CVE-2021-45105 की तलाश करना चाहते हैं, तो निम्नलिखित कमांड का उपयोग किया जा सकता है:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
इस उपकरण को Docker के बिना भी चलाया जा सकता है। कृपया STACS को Docker के बिना स्थापित करने के तरीके के लिए STACS स्थापना निर्देश देखें।
Docker इमेज को स्कैन करने के लिए पहले इसे स्कैनिंग के लिए artifacts निर्देशिका में निर्यात करना होगा। यह निम्नलिखित कमांड का उपयोग करके किया जा सकता है:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
वैकल्पिक रूप से, एक चल रहे कंटेनर को केवल इसका उपयोग करके निर्यात किया जा सकता है:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
आपको यह समझने के लिए एप्लिकेशन में log4j के उपयोग की जाँच करनी होगी कि क्या उत्पाद संवेदनशील है। यदि यह संभव नहीं है, स्रोत कोड तक पहुँच की कमी या अन्यथा के कारण, तो आपको जाँचना चाहिए कि क्या विक्रेता ने इस मामले पर कोई एडवाइज़री प्रकाशित की है।
यह कोई गारंटी नहीं है कि log4j के एक संवेदनशील संस्करण का शामिल होना यह दर्शाता है कि उत्पाद संवेदनशील है!
यदि आपको कोई एडवाइज़री नहीं मिलती है, तो आपको उत्पाद पर इस भेद्यता के प्रभाव के बारे में पूछने के लिए विक्रेता से संपर्क करना चाहिए।
साथ ही log4j प्रोजेक्ट द्वारा प्रकाशित शमन (mitigations) से परामर्श लें। वैकल्पिक रूप से, और अधिमानतः, log4j के एक अप्रभावित संस्करण में अपग्रेड करें।
हालाँकि इस उद्देश्य के लिए डिज़ाइन नहीं किया गया है, यह उपकरण बल्क बाइनरी डीकंपोज़िशन और विश्लेषण के लिए STACS इंजन का उपयोग करता है।
STACS एक YARA-संचालित स्थैतिक क्रेडेंशियल स्कैनर है जो बाइनरी फ़ाइल प्रारूपों, नेस्टेड आर्काइव के विश्लेषण, रचनात्मक नियमसेट और अनदेखा सूची, और SARIF रिपोर्टिंग का समर्थन करता है।
एक उदाहरण के रूप में, यह उपकरण एक tarball का विश्लेषण कर सकता है जिसमें एक निर्यातित Docker इमेज होती है, जिसमें फ़ाइलसिस्टम पर कहीं एक JAR होता है जो इस भेद्यता से प्रभावित है।
यह नेस्टेड tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso, आदि का भी विश्लेषण कर सकता है।
कृपया एक Github issue खोलें जिसमें समस्या का वर्णन हो, और प्रभावित बाइनरी आर्टिफैक्ट से लिंक हो - जहाँ संभव हो।
नियमसेट को समायोजित करने के लिए पुल रिक्वेस्ट की भी बहुत सराहना की जाएगी!
इस नियमसेट के मान्यकरण से लॉग फ़ाइलों के एक सेट के लिए validation/ निर्देशिका देखें।