
Wie haben etliche Artikel rund um das Darknet und auch zur Open-Source-Monitoring-Lösung Checkmk. Und die kann man auch schön kombinieren! Einer der populärsten Checks in Checkmk ist der HTTP-Check: Dieser fragt eine Webseite an und zeigt dann je nach Status in Checkmk ein OK, WARN oder CRIT. Leider funktioniert das nicht mit Darknet-Seiten, denn Onion-Links brauchen natürlich eine Tor-Verbindung. Aber erfreulicherweise ist Checkmk ja einfach erweiterbar!
Darknet-Monitoring mit Checkmk
Ausgangspunkt ist im Grunde unser äußerst beliebter Artikel mit 50+ aktuell gehaltenen Darknet-Links. All diese Links ständig manuell aufzurufen war mir nach dem ersten mal zu lästig, also habe ich kleines Skript geschrieben, dass all diese Seiten anfragt und die Status ausgibt. Dazu haben gibt's auch einen eigenen Artikel.
Der Kniff dahinter: torify. Das kleine Kommandozeilen-Tool baut schlicht eine Tor-Verbindung auf und führt dann nachfolgende Befehle aus, hier zum Beispiel ein schlichtes curl-Kommando, das eben den Status einer Darknet-Seite zurückgibt.
Auf Checkmk-Seite gibt es nun ein Feature namens Local Check: Damit lassen sich quasi Light-Plugins betreiben, beliebige Skripte, die einfach nur Daten im Format Status Name Metriken Beschreibung ausgeben, also beispielsweise 0 Meinservice - Meine Beschreibung. Die anfängliche Ziffer steht dabei für den Status und der Bindestrich in diesem Fall für die ausbleibenden Metriken. Metriken wären beispielsweise prozentuale Auslastungen von CPU oder RAM, brauchen wir hier nicht. Auch zu lokalen Checks haben wir einen einen Artikel sowie ein Video.
Soll heißen: Das Skript wird so umgebaut, dass es Daten so zurückgibt, dass Checkmk sie als eigenen Service interpretieren kann, also etwa 0 http://123abc.onion - foobar.
Das Skript
Hier das Skript:
urls=$(curl -L https://www.tutonaut.de/darknet-links/ | html2text | grep 'http.*onion')
for f in $urls; do
status=$(torify curl -Is $f | grep HTTP | cut -d ' ' -f2)
if [ "$status" != "200" ]
then
echo "1 $f - Status ist 1 also warn also: $status"
else
echo "0 $f - Status ist 0 also okay also: $status"
fi
((i++))
sleep 1
done
Zunächst besorgt sich das Skript alle URLs aus dem Darknet-Links-Artikel und speichert sie in der Variablen url.
Die for-Schleife führt dann für jede URL eine torifizierte curl-Abfrage durch, schneidet den Status aus und gibt dann bei Status 200 (alles okay) einen Service mit führender 0 (OK) aus und bei allen anderen Status einen Service mit führender 1 (WARN). Das könnte man nun natürlich für diverse HTTP-Status anpassen, um etwa dauerhaft gelöschte Seiten mit einem CRIT zu markieren.
Die Ausgabe sieht dann in etwa so aus:
0 http://flamiuqldrsnkle2vwtoylbixov2gfru34fkrsnjrxuanogkd55yzsqd.onion/ - Status ist 0 also okay also: 200
0 http://juhanurmihxlp77nkq76byazcldy2hlmovfu2epvl5ankdibsot4csyd.onion - Status ist 0 also okay also: 200
0 http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion/ - Status ist 0 also okay also: 200
Die URL selbst dient hier also als Titel für jeden einzelnen Service, der aus jeder einzelnen Zeile in Checkmk generiert wird.
Checkmk-Konfiguration
Das Einbauen eines Local-Checks in Checkmk ist ganz furchbar einfach, es muss lediglich in das richtige Verzeichnis auf einem beliebigen Checkmk-Host - zum Beispiel auf dem Checkmk-Server selbst: /usr/lib/check_mk_agent/local. Fast! Das Blöde mit diesem Skript: Es läuft ewig ..., hier kommen schnell 10 Minuten zusammen. Und wenn Checkmk versucht, diese generierten Services zu erkennen, geht das garantiert in die Hose.
Die Lösung: Das Skript wird asynchron ausgeführt, also nicht bei jedem Durchlauf des Checkmk-Agenten, sondern zum Beispiel nur alle 20 Minuten oder alle 2 Tage. Die so generierten Daten werden dann gecachet und vom Agenten beim nächsten Durchlauf abgeholt. Und darum lautet der richtige Pfad: /usr/lib/check_mk_agent/local/1200 - wobei die 1200 für 1.200 Sekunden stehen. Entsprechende Ordner könnt Ihr einfach selbst erstellen.
In Checkmk müsst Ihr dann nur wie gewohnt eine Service-Erkennung durchführen und schon bekommt Ihr einen Haufen neuer Services:

Ideen
Das ganze Konzept lässt sich natürlich noch ausweiten und verfeinern. Wie schon erwähnt, könnten die unterschiedlichen HTTP-Status differenzierte berücksichtigt werden. In Checkmk wiederum ließen sich zudem Dashboards oder Ansichten bauen, die nur Seiten auf WARN oder CRIT zeigen, schließlich sind funktionierende Seiten ja nur mäßig interessant. Noch mehr Komfort kämen dann über Benachrichtigungen, so dass Ihr schlicht nur noch eine Mail oder eine Telegram-Nachricht bekommt, wenn eine Seite mal nicht mehr erreichbar ist.
Der Checkmk-eigene HTTP-Check kann zudem auch prüfen, ob bestimmte Texte auf der Seite vorhanden sind. Und auch das ließe sich ziemlich fix erledigen, indem die Seiten eben nicht nur mit curl abgerufen, sondern auch noch mit grep durchsucht werden. Und schon könntet Ihr zum Beispiel Darknet-Seiten, auf denen geklaute Accounts angeboten werden, auf Eure eigenen Nutzernamen oder Mail-Adressen überwachen.
Ich war im darknet drinnen nur meine Seiten sind alle exitcam seit können sie mir einen URL schicken anonym bitte danke