|
|
|
Impressum |
| Scripte | |||
| Netzwerk | |||
| Software | |||
| Tips |
|
NessusScan
Dieses Script scannt einen kompletten IP-Adressbereich mit Hilfe des Nessus-Scanners und stellt das Ergebnis ins Intranet. Eine Mail über den Zeitpunkt des Scannens wird generiert. #!/bin/bash # # Scan Network with Nessus # Version 1.0 # Author: Thomas (Major Tom) Bauer <major-tom@tkb-net.org> # http://www.tkb-net.org # cd /etc/cron.sonstige # Start Nessusd, write start date to file echo Start Nessus-Daemon >nessustemp date >>nessustemp echo >>nessustemp nessusd -D # Start scan, write scan start to file echo Start Scan >>nessustemp date >>nessustemp echo >>nessustemp nessus -V -T html -q localhost 1241 username password nessus_target.txt result.html # Stop Nessusd, write stop date to file echo Stoppe Nessus-Daemon >>nessustemp killall nessusd date >>nessustemp echo >>nessustemp # Get actual date and move resultfile to webserver directory and rename resultfile NAME = `date +%F-%H-%M-%S` FILENAME = $NAME.html mv result.html /srv/www/htdocs/nessus/$FILENAME # Get actual date for link NAME1 = `date` # Create new entry in linkfile cd /srv/www/htdocs/nessus/ echo '<li>' >newscan echo '<a href="'$FILENAME'">'$NAME1'</a>' >>newscan echo '</li>' >>newscan # Copy files together cat newscan 02scanfile >newscanfile mv newscanfile 02scanfile cat 01startfile 02scanfile 03endfile >nessusnew # Remove old nessusfile and rename new file rm nessus.html mv nessusnew nessus.html # Send file nessustemp cd /etc/cron.sonstige if test -s nessustemp then mail admin@meine-domain.org -r admin@meine-domain.org -s Nessusscan-Server <nessustemp fi # Delete Tempfile rm nessustemp rm /srv/www/htdocs/nessus/newscan Erläuterung Zuerst wird der Nessus-Serverdienst gestartet. Auf Systemen, wo dieser Dienst die ganze Zeit läuft, kann man sich diesen Schritt sparen. Die aktuelle Zeit vor und nach dem Start wird in die Datei "nessustemp" geschrieben. Es dauert je nach System einige Minuten bis der Serverdienst alle Plugins (ca. 21.000) geladen hat. Falls man den Server zum ersten mal nutzt, werden evt. nur <1.000 Plugins geladen. In dem Fall ist der Serverdienst noch nicht bei Nessus regiestriert (siehe dazu die Man-Page des Dienstes). Bitte auch sicherstellen, das der Server über ein Serverzertifikat verfügt und ein User zum Zugriff auf der Serverdienst angelegt wurde (steht alles in der Man-page). Im nächster Schritt erfolgt der eigentliche Systemscan. Dazu wird der Nessusclient nessus gestartet. Dieser meldet sich mit dem User username und Passwort password am Serverdienst an. Da Server und Client auf der gleichen Maschine laufen, wird als Serveradresse "localhost" angegeben. Die "1241" ist die Standard-Portnummer des Serverdienstes. Der Schalter -T html sagt dem Client, das die Scanergebnisse in HTML ausgegeben werden sollen. "result.html" ist dabei die Ausgabedatei. Die zu scannenden Ziele werden in der Datei "nessus_target.txt" angegeben. Der Dateiname ist dabei fix vorgegeben. In dieser Textdatei werden einfach alle IP-Adresse, die gescannt werden sollen untereinander geschrieben. Soll ein ganzer IP-Adressbereich gescannt werden, schreibt man einfach 192.168.1.0/24 in die Datei. Dieser Beispieleintrag bedeutet, dass das Subnetz 192.168.1.0 komplett gescannt werden soll, also von 192.168.1.1 bis 192.168.1.255. Natürlich muss man hier seine eigenen Adressbereiche eintragen. Der Vorteil dieser Adressbereichseingabe ist, das ich die genauen IP-Adressen in meinem Netz nicht kennen muss, da die meisten PC (auch in privaten Netzen) ihre IP-Adressen dynamisch von einem DHCP-Server beziehen (und das ist auch die Standardeinstellung jedes handelsüblichen DSL-Routers). Im nächster Schritt wird die aktuelle Systemzeit wieder in die Datei "nessustemp" geschrieben und der Serverdienst mit killall beendet (soll der Dienst auf der Maschine ständig laufen, entfällt wieder dieser Schritt). Nun wird das aktuelle Systemdatum in eine Variable geschrieben und die soeben erstellte Datei "result.html" in eine Datei mit dem Namen des aktellen Datums umbenannt (z.B. "2008-04-26-20-26-38.html") und gleichzeitig in das Verzeichnis "/srv/www/htdocs/nessus/" kopiert. "/srv/www/htdocs/" ist dabei das Standardverzeichnis meines (Apache-)Webservers. Dieses Verzeichnis ist natürlich an die eigenen Servereinstellungen anzupassen. Das Verzeichnis "nessus" habe ich angelegt, damit die Scanndateien nicht in meinem Intranet-Hauptverzeichnis herumliegen. Die Schalter +%F-%H-%M-%S bewirken eine Datumsausgabe in der Form 2008-04-26-20-26-38. Nun wird die Webseite des Intranets mit den Links zu allen Scandateien mit dem Link des soeben durchgeführten Scans ergänzt. Dazu wird das aktuelle Systemdatum ausgelesen (es bildet später den Link-Text) und die Scriptausführung wird mit cd in das Verzeichnis "/srv/www/htdocs/nessus/" verlagert. Mit Hilfe von echo werden die entspechenden HTML-Befehle in die Datei "newscan" geschrieben. Mit cat werden die soeben erstellte Datei "newscan" sowie die vorhandene Datei "02scanfile" in einer neuen Datei zusammengefügt und diese Datei wieder nach "02scanfile" umgenannt. Damit wird erreicht, das alle Links auch von vorausgegangenen Scans in einer Datei "02scanfile" enthalten sind und der neueste Scan immer am Anfang steht. Die Dateien "01startfile" und "03endfile" enthalten die noch fehlenden Kopf- und Fusszeilen der HTML-Datei und werden jetzt zusammen mit "02scanfile" zu einer neuen Datei der Scaneinträge zusammengefügt. Auf diese ist auf der Startseite meines Webservers ein Link gesetzt, so das sie einfach aufgerufen werden kann. Die einzelnen Dateien können wie folgt aussehen: "01startfile" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Nessus - Scans</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor = "lightblue"> <center> <h1>Nessus-Scans</h1> <br> <ul> "03endfile" </ul> </center> </body> </html> Die Datei "02scanfile" wird erst einmal als leere Datei angelegt. Das Script füllt sie dann langsam mit den entsprechenden Links auf. Zum Schluss erfolgt noch eine Benachrichtigung über den Scan per Mail. In die Datei "nessustemp" wurden ja die Zeiten der einzelnen Scanschritte geschrieben. Dieses File wird jetzt in eine Mail geschrieben. Mit if test -s geprüft, ob die Datei "nessustemp" vorhanden und grösser als 0 ist. Ist das der Fall, sendet das Script mit dem Befehl mail den Inhalt der Datei "nessustemp" an den gewünschten Empfänger. Der Schalter -s setzt dabei den Betreff der Mail (in diesem Fall "Nessusscan-Server"), der Schalter -r setzt eine Absender-Mailadresse (nur nötig, wenn man die Mail über einen externen Mailserver leiten muss, sonst wird die Mail durch die dort vorhandenen Spam-Filter aufgehalten.). Zum Schluss werden die Dateien "nessustemp" und "/srv/www/htdocs/nessus/newscan" noch gelöscht, da sie jetzt nicht mehr benötigt werden. |