Computer Eisenbahn Bilder
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.