
आपके लॉग में Log4Shell CVE-2021-44228 IOC से मेल खाने वाला PCRE RegEx
निम्नलिखित RegEx को Log4Shell (CVE-2021-44228 और CVE-2021-45046) शोषण के संकेतकों से मिलान करने के प्रयास में लिखा गया था।
यदि आप 2021/12/21 से पहले का संस्करण चला रहे हैं, तो परीक्षण और अपडेट करने की अत्यधिक अनुशंसा की जाती है।
मैंने कुछ खामियों को दूर किया है और प्रदर्शन में वृद्धि की है।
RegEx का उद्देश्य PCRE संगत होना है, लेकिन इसे re2 और संभावित रूप से अधिक RegEx इंजनों पर भी चलना चाहिए।
RegEx:```regex (?im)(?:^|[\n]).?(?:[\x24]|%(?:25%?)24|\u?0(?:44|24))(?:[\x7b]|%(?:25%?)7b|\u?0(?:7b|173))[^\n]?((?:j|%(?:25%?)(?:4a|6a)|\u?0(?:112|6a|4a|152))[^\n]?(?:n|%(?:25%?)(?:4e|6e)|\u?0*(?:4e|156|116|6e))[^\n]?(?:d|%(?:25%?)(?:44|64)|\u?0*(?:44|144|104|64))[^\n]?(?:[i\x{130}\x{131}]|%(?:25%?)(?:49|69|C4%(?:25%?)B0|C4%(?:25%?)B1)|\u?0(?:111|69|49|151|130|460|131|461))[^\n]?(?:[\x3a]|%(?:25%?)3a|\u?0(?:72|3a))[^\n]?((?:l|%(?:25%?)(?:4c|6c)|\u?0*(?:154|114|6c|4c))[^\n]?(?:d|%(?:25%?)(?:44|64)|\u?0*(?:44|144|104|64))[^\n]?(?:a|%(?:25%?)(?:41|61)|\u?0*(?:101|61|41|141))[^\n]?(?:p|%(?:25%?)(?:50|70)|\u?0*(?:70|50|160|120))(?:[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163)))?|(?:r|%(?:25%?)(?:52|72)|\u?0(?:122|72|52|162))[^\n]?(?:m|%(?:25%?)(?:4d|6d)|\u?0*(?:4d|155|115|6d))[^\n]?(?:[i\x{130}\x{131}]|%(?:25%?)(?:49|69|C4%(?:25%?)B0|C4%(?:25%?)B1)|\u?0(?:111|69|49|151|130|460|131|461))|(?:d|%(?:25%?)(?:44|64)|\u?0*(?:44|144|104|64))[^\n]?(?:n|%(?:25%?)(?:4e|6e)|\u?0*(?:4e|156|116|6e))[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163))|(?:n|%(?:25%?)(?:4e|6e)|\u?0(?:4e|156|116|6e))[^\n]?(?:[i\x{130}\x{131}]|%(?:25%?)(?:49|69|C4%(?:25%?)B0|C4%(?:25%?)B1)|\u?0(?:111|69|49|151|130|460|131|461))[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163))|(?:[^\n]?(?:[i\x{130}\x{131}]|%(?:25%?)(?:49|69|C4%(?:25%?)B0|C4%(?:25%?)B1)|\u?0(?:111|69|49|151|130|460|131|461))){2}[^\n]?(?:o|%(?:25%?)(?:4f|6f)|\u?0*(?:6f|4f|157|117))[^\n]?(?:p|%(?:25%?)(?:50|70)|\u?0*(?:70|50|160|120))|(?:c|%(?:25%?)(?:43|63)|\u?0(?:143|103|63|43))[^\n]?(?:o|%(?:25%?)(?:4f|6f)|\u?0*(?:6f|4f|157|117))[^\n]?(?:r|%(?:25%?)(?:52|72)|\u?0*(?:122|72|52|162))[^\n]?(?:b|%(?:25%?)(?:42|62)|\u?0*(?:102|62|42|142))[^\n]?(?:a|%(?:25%?)(?:41|61)|\u?0*(?:101|61|41|141))|(?:n|%(?:25%?)(?:4e|6e)|\u?0(?:4e|156|116|6e))[^\n]?(?:d|%(?:25%?)(?:44|64)|\u?0*(?:44|144|104|64))[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163))|(?:h|%(?:25%?)(?:48|68)|\u?0(?:110|68|48|150))(?:[^\n]?(?:t|%(?:25%?)(?:54|74)|\u?0*(?:124|74|54|164))){2}[^\n]?(?:p|%(?:25%?)(?:50|70)|\u?0*(?:70|50|160|120))(?:[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163)))?)[^\n]?(?:[\x3a]|%(?:25%?)3a|\u?0(?:72|3a))|(?:b|%(?:25%?)(?:42|62)|\u?0*(?:102|62|42|142))[^\n]?(?:a|%(?:25%?)(?:41|61)|\u?0*(?:101|61|41|141))[^\n]?(?:[s\x{17f}]|%(?:25%?)(?:53|73|C5%(?:25%?)BF)|\u?0(?:17f|123|577|73|53|163))[^\n]?(?:e|%(?:25%?)(?:45|65)|\u?0*(?:45|145|105|65))[^\n]*?(?:[\x3a]|%(?:25%?)3a|\u?0(?:72|3a))(JH[s-v]|[\x2b\x2f-9A-Za-z][CSiy]R7|[\x2b\x2f-9A-Za-z]{2}[048AEIMQUYcgkosw]ke[\x2b\x2f-9w-z]))
## क्षमताएँ
अब तक, यह regex शोषण से मेल खाना चाहिए, बावजूद इसके:
- बस लॉग किया गया
- केस-असंवेदनशील (सभी समर्थित एन्कोडिंग में भी)
- URL एन्कोडेड
- पुनरावर्ती रूप से URL एन्कोडेड
- यूनिकोड एन्कोडिंग के साथ
- ऑक्टल एन्कोडिंग के साथ
- Base64 एन्कोडेड (मूलभूत)
### पृष्ठभूमि
लक्ष्य एक ऐसा RegEx होना है जो यथासंभव अधिक से अधिक हमले के प्रयासों का पता लगाने और स्वीकार्य संख्या में गलत सकारात्मक परिणामों के बीच एक उचित समझौते का प्रतिनिधित्व करता है।
APT हमलावर यदि आवश्यक हो तो एक रास्ता ढूंढ लेगा, लेकिन कम विस्तृत हमले चेतावनी की रोशनी को जलता छोड़ देंगे।
एक (एकल) RegEx क्यों: क्योंकि इसे CLI या SIEM में बिना किसी अतिरिक्त उपकरण के आसानी से निष्पादित किया जा सकता है। यदि उपकरण निष्पादित किए जा सकते हैं, तो करें, वे मौजूद हैं।
रेगेक्स की लंबाई इसके प्रदर्शन की तुलना में कम समस्या है। लंबाई के बावजूद, RegEx औसत लॉग डेटा पर निष्पादित करने के लिए स्वीकार्य रूप से तेज़ होना चाहिए।
### कार्रवाई का आह्वान
मैं वास्तविक दुनिया के परिदृश्यों में हमले को छिपाना कठिन बनाना चाहता हूँ।
यदि यह RegEx किसी ऐसी चीज़ से मेल नहीं खाता जो आपने जंगली में देखी है या शोषण योग्य दिखा सकता है, तो कृपया एक मुद्दा बनाएँ।
यह ज्ञात है कि आप Base64 का उपयोग करके हमले के पैटर्न के विभिन्न भागों को एन्कोड करके RegEx को आसानी से दरकिनार कर सकते हैं। हालांकि, यह स्वीकार किया जाता है, क्योंकि `base64` अभी तक आधिकारिक Log4j रिलीज़ में अंतिम रूप से शामिल नहीं हुआ है। ([LOG4J2-2446](https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-2446))
### उपकरण