Einfache Datenauswertung für OSINT

Eine wichtige Kompetenz in OSINT ist nicht nur das Finden und Sammeln von Daten sondern auch die Auswertung. So fragt Dutch Osint Guy Nico Dekens in diesem Artikel zurecht: Was machst Du, wenn du 800 PDFs hast, von denen jedes 300 Seiten lang ist und du nach einer E-Mail-Adresse suchst? Er verbindet diese Frage mit der Nutzung von Künstlicher Intelligenz.

Bei dieser Frage handelt es sich um eine noch relativ niederschwellige Auswertung von großen Datenmengen, die man sicherlich auf vielen Wegen ermöglichen kann. Eine Möglichkeit ist schon seit Jahrzehnten vorhanden und nennt sich Bash – also so etwas wie die „Eingabeaufforderung“ bzw. „DOS Box“ unter Linux.

Mit der Bash hat man eine Werkzeugsammlung, welche sich auf viele Daten anwenden lässt. Es gibt Programme die doc, docx, xls, xlsx, pdf usw. in Text umwandeln. Anschließend lassen sie sich mit Mitteln der Bash durchsuchen und in ein maschinenlesbares Format wie csv bringen. (OK, bei zum Beispiel xls, xlsx oder Logfiles hat man ein Format, welches sich in der Regel auch als Importgrundlage für Programme, die die Datenvisualisierung ermöglichen, eignet.) Ein einfaches Beispiel möchte ich daher im folgenden darstellen.

Folgende Programme können diese Umwandlungen durchführen:
pdf: pdftotext
doc: antiword
docx: docx2txt
xls: xls2csv
xlsx: xlsx2csv

Da die einzelnen Programme nicht aus einer Hand stammen muß man sich die genaue Verwendung ansehen. Hilfreich sind dabei natürlich immer die Manpages. Im folgenden zeige ich wie die einzelnen Programme die Datei am besten aufbereiten und anschließend wieder ausgeben:

pdf: pdftotext -layout dateiname –
doc: antiword dateiname
docx: docx2txt dateiname –
xls: xls2csv dateiname
xlsx: xlsx2csv dateiname –

pdftotext, docx2txt und xls2csv speichern standardmäßig eine Textdatei, will man eine Ausgabe erzeugen, auf die man weitere Befehle anwenden kann, muß man ein Minus ans Ende der Befehlszeile setzen. Sollte eines der Programme nicht installiert sein, kann dies auf Debian-basierten Systemen mit >>sudo apt install programmname<< nachinstalliert werden.

Nicht jedes dieser Programme kann mit mehreren Dateien umgehen, dabei kann man sich aber mit einem Trick behelfen. Mit dem Programm awk kann man sich beliebige Texte erzeugen. Das kann man ausnutzen um sich Befehle mit Platzhaltern für die Dateinamen zu schreiben. Leitet man diese Befehle an bash weiter werden sie ausgeführt. Das sähe dann in einem Beispiel für PDF-Dateien so aus:

ls -1 *.pdf | awk '{print "pdftotext -layout " $1 " -"}

hier würde folgende Beispielausgabe erzeugt:
pdftotext -layout 1.pdf –
pdftotext -layout 2.pdf –
pdftotext -layout 3.pdf –

Werden diese Befehle nun an die Bash weitergeleitet, werden diese einzelnen von awk geschriebenen Befehle ausgeführt.

ls -1 *.pdf | awk '{print "pdftotext -layout " $1 " -"} | bash

Im Anschluss kann man mit grep die Daten durchsuchen und ausschneiden. Zum Beispiel kann man nach regulären Ausdrücken oder nach eindeutigen Zeichenfolgen suchen:

ls -1 *.pdf | awk '{print "pdftotext -layout " $1 " -"} | bash | grep "email@example.org" -o

Will man reguläre Ausdrücke schreiben muß man grep -E oder egrep verwenden (wobei egrep als deprecated gilt und nicht mehr verwendet werden sollte)

Beispiele für reguläre Ausdrücke:
E-Mail-Adresse: \<[A-Za-z0-9\._%\+\-]+@[A-Za-z0-9\.\-]+.[A-Za-z]{2,63}>
Bitcoin Adressen: \<[13][a-km-zA-HJ-NP-Z1-9]{25,34})|(^bc1[ac-hj-np-z02-9]{6,87}>
Kreditkartennummern: \<[0-9]{13,16}\>

Wenn Du nicht weißt wie Du so einen regulären Ausdruck selber schreibst, frag eine beliebige KI wie you.com, ChatGPT, Bard oder Perplexity.ai oder lern es mit meinen Videos 😉

Mit solchen regulären Ausdrücken kannst Du nach Inhalten suchen, egal welche Zeichen nun genau in welcher Abfolge drin stehen. Reguläre Ausdrücke beschreiben lediglich die Regel, wie die gesuchten Daten unabhängig von ihrem Inhalt aussehen. Mit o.g. Regeln würdest Du also alle E-Mail-Adressen, Bitcoin Adressen oder Kreditkartennummern in den Texten finden. Natürlich können auch Fehltreffer dabei sein, z.B. sind Zahlen die 13-16 Stellen haben, nicht nur bei Kreditkarten möglich, Auch Telefonnummern können diese Länge haben.

Möchtest Du also den Kontext sehen, in dem die Werte ausgegeben wurden, dann lass -o beim grep weg, dann siehst Du die komplette Zeile in der der Wert stand:

ls -1 *.pdf | awk '{print "pdftotext -layout " $1 " -"} | bash | grep "email@example.org"

Falls Dir der Kontext nicht reicht kannst Du statt dem -o auch andere Parameter mit geben

-A Zahl
-B Zahl
-C Zahl

Zahl definiert die Anzahl der Zeilen, die danach (-A), davor (-B) oder drum herum (-C) ausgegeben werden sollen.

ls -1 *.pdf | awk '{print "pdftotext -layout " $1 " -"} | bash | grep "email@example.org" -C 3

Du hast keine Bash?
Installiere dir eine Virtuelle Maschine mit z.B. einem Linux Mint. Dazu habe ich bereits einen Artikel geschrieben. (Alternativ eignet sich dafür auch das Windows Subsystem für Linux von Microsoft.) Außerdem findest du in meinem Youtube Kanal viele weitere Tutorials, wie man mit der Bash Daten aufbereiten kann.

Nachtrag:
@schnedan@social.tchncs.de hat mich auf Mastodon darauf aufmerksam gemacht, dass es für PDFs auch den pdfgrep gibt.