Strings Beispiele: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 5: | Zeile 5: | ||
Alle Beispiele sind lokal reproduzierbar und basieren auf selbst erzeugten Dateien. | Alle Beispiele sind lokal reproduzierbar und basieren auf selbst erzeugten Dateien. | ||
Es werden keine externen Samples oder Malware benötigt. | Es werden keine externen Samples oder Malware benötigt. | ||
| − | + | == Vorarbeiten == | |
| + | *mkdir forensic | ||
| + | *wget https://xinux.de/downloads/forensic/sample1 | ||
| + | *wget https://xinux.de/downloads/forensic/usb.dd | ||
| + | *wget https://xinux.de/downloads/forensic/invoice-helper | ||
== Werkzeug == | == Werkzeug == | ||
* strings | * strings | ||
* file | * file | ||
* grep | * grep | ||
| − | |||
== Szenario 1 – Analyse eines verdächtigen Programms == | == Szenario 1 – Analyse eines verdächtigen Programms == | ||
| + | ;Datei runterladen | ||
| + | *wget | ||
| + | <!-- | ||
=== Datei erzeugen === | === Datei erzeugen === | ||
Die Beispieldatei wird lokal erzeugt und simuliert ein Programm mit hartkodierten Artefakten. | Die Beispieldatei wird lokal erzeugt und simuliert ein Programm mit hartkodierten Artefakten. | ||
| Zeile 30: | Zeile 36: | ||
</pre> | </pre> | ||
| − | *gcc sample1.c -o sample1 | + | *gcc sample1.c -o sample1 |
| − | + | --> | |
| − | |||
| − | |||
== Erste Einordnung der Datei == | == Erste Einordnung der Datei == | ||
| Zeile 46: | Zeile 50: | ||
;Netzwerkindikatoren | ;Netzwerkindikatoren | ||
| − | *strings sample1 | + | *strings sample1 | grep -Ei 'http|https|ftp' |
;Zugangsdaten | ;Zugangsdaten | ||
| − | *strings sample1 | + | *strings sample1 | grep -Ei 'user|pass|password' |
;Systempfade und Shells | ;Systempfade und Shells | ||
| − | *strings sample1 | + | *strings sample1 | grep -Ei '/bin/|/etc/' |
== Forensische Bewertung == | == Forensische Bewertung == | ||
| Zeile 96: | Zeile 100: | ||
* Hypothesenbildung | * Hypothesenbildung | ||
* Vorbereitung weiterführender Analyse | * Vorbereitung weiterführender Analyse | ||
| − | + | <!-- | |
| − | |||
| − | |||
| − | |||
=== Datei erzeugen === | === Datei erzeugen === | ||
| − | *cat > | + | *cat > invoice-helper.c <<'EOF' |
<pre> | <pre> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| − | int main() { | + | int main(int argc, char *argv[]) { |
| − | char *a = " | + | char *a = "InvoiceHelper 1.8.2"; |
| − | char *b = "build | + | char *b = "last build: 2024-10-14"; |
| − | char *c = "build | + | char *c = "build user: accounting"; |
| − | char *d = " | + | char *d = "/home/accounting/tools/invoice/"; |
| − | char *e = " | + | char *e = "config=/etc/invoice/helper.conf"; |
| − | char *f = " | + | char *f = "export path=/srv/invoices/export/"; |
| − | char *g = " | + | char *g = "https://billing.internal.local/api/upload"; |
| − | char *h = "X- | + | char *h = "X-API-Key: QUNDT1VOVElOR19LRVk="; |
| − | char *i = " | + | char *i = "tmp=/var/tmp/invoice-helper"; |
| − | if ( | + | |
| + | if (argc == 2 && argv[1][0] == 'x') { | ||
system("/bin/sh"); | system("/bin/sh"); | ||
} | } | ||
| − | printf("%s\n", a); | + | |
| + | printf("%s\n", a); | ||
return 0; | return 0; | ||
} | } | ||
EOF | EOF | ||
</pre> | </pre> | ||
| − | |||
| + | *gcc invoice-helper.c -o invoice-helper | ||
| + | --> | ||
| − | == Aufgaben | + | == Aufgaben == |
| − | + | ===Untersuchungen der Datei invoice-helper=== | |
| − | ; | + | ;Aufgabe 1 |
| − | * | + | * Suche mit '''strings''' gezielt nach: '''version''', '''build''', '''user''', '''/home'''. |
| − | * | + | *Notiere alle gefundenen Strings und ordne sie dem Entwicklungs- oder Einsatzkontext zu. |
| − | * | + | <!--strings invoice-helper | grep -Ei 'version|build|user|/home'--> |
| − | * | + | ;Aufgabe 2 |
| + | *Suche mit '''strings''' nach: '''/etc''', '''/var''', '''/srv''', '''/tmp'''. | ||
| + | <!--strings invoice-helper | grep -E '/etc/|/var/|/srv/|/tmp'--> | ||
| + | ;Aufgabe 3 | ||
| + | *Welche dieser Pfade deuten auf Konfiguration, temporäre Dateien oder Datenexport hin? | ||
| + | *Suche mit '''strings''' nach: '''http''', '''https''', '''api'''. | ||
| + | <!--strings invoice-helper | grep -Ei 'http|https|api'--> | ||
| + | ;Aufgabe 4 | ||
| + | *Welche Kommunikationsziele sind erkennbar? | ||
| + | *Suche mit '''strings''' nach: '''key''', '''api''', '''/bin/sh'''. | ||
| + | <!--strings invoice-helper | grep -Ei 'key|/bin/sh'--> | ||
| + | ;Aufgabe 5 | ||
| + | *Welche dieser Strings sind für ein Rechnungsprogramm ungewöhnlich? | ||
| + | <!-- | ||
| + | strings invoice-helper | grep -Ei 'key|api|/bin/sh' | ||
| − | + | Ungewöhnliche Strings: | |
| − | + | - X-API-Key: QUNDT1VOVElOR19LRVk= | |
| − | + | - /bin/sh | |
| − | |||
| − | + | Begründung: | |
| − | + | - Ein fest im Programm enthaltener API-Key gehört nicht zur Kernfunktion eines Rechnungsprogramms. | |
| − | + | - Ein Shell-Aufruf (/bin/sh) ist für eine reine Fachanwendung ungewöhnlich und sicherheitsrelevant. | |
| − | |||
| − | |||
--> | --> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Aktuelle Version vom 9. Februar 2026, 18:08 Uhr
strings – Praktische Nutzung in der IT-Forensik
Ziel
Dieses Kapitel zeigt den praktischen Einsatz des Linux-Werkzeugs strings in der IT-Forensik. Alle Beispiele sind lokal reproduzierbar und basieren auf selbst erzeugten Dateien. Es werden keine externen Samples oder Malware benötigt.
Vorarbeiten
- mkdir forensic
- wget https://xinux.de/downloads/forensic/sample1
- wget https://xinux.de/downloads/forensic/usb.dd
- wget https://xinux.de/downloads/forensic/invoice-helper
Werkzeug
- strings
- file
- grep
Szenario 1 – Analyse eines verdächtigen Programms
- Datei runterladen
- wget
Erste Einordnung der Datei
- file sample1.bin
Strings extrahieren
- strings sample1.bin
Zielgerichtete Auswertung
- Netzwerkindikatoren
- strings sample1 | grep -Ei 'http|https|ftp'
- Zugangsdaten
- strings sample1 | grep -Ei 'user|pass|password'
- Systempfade und Shells
- strings sample1 | grep -Ei '/bin/|/etc/'
Forensische Bewertung
- Das Programm enthält Klartext-Zugangsdaten
- Es nutzt eine Shell (/bin/sh)
- Es verweist auf ein externes Netzwerkziel
- Das Programm wurde nicht ausgeführt
Szenario 2 – Analyse eines Datenträger-Images
Image erzeugen
Es wird ein simuliertes USB-Image mit Klartextartefakten erstellt.
- dd if=/dev/zero of=usb.dd bs=1M count=5
- echo "admin@example.com" | dd of=usb.dd conv=notrunc
- echo "https://intranet.local/login" | dd of=usb.dd conv=notrunc seek=1024
Strings auf dem Image
- strings usb.dd
Typische Filter
- Mailadressen
- strings usb.dd | grep '@'
- URLs
- strings usb.dd | grep -Ei 'http|https'
Forensische Bewertung
- Auch in scheinbar leeren Images finden sich Klartextdaten
- Gelöschte oder überschrieben geglaubte Inhalte können sichtbar bleiben
Grenzen von strings
- Keine Zeitstempel
- Kein Beweis für Ausführung
- Kein Kontext
- Nur Hinweisquelle
Typische Einsatzphase
- Triage
- Erstbewertung
- Hypothesenbildung
- Vorbereitung weiterführender Analyse
Aufgaben
Untersuchungen der Datei invoice-helper
- Aufgabe 1
- Suche mit strings gezielt nach: version, build, user, /home.
- Notiere alle gefundenen Strings und ordne sie dem Entwicklungs- oder Einsatzkontext zu.
- Aufgabe 2
- Suche mit strings nach: /etc, /var, /srv, /tmp.
- Aufgabe 3
- Welche dieser Pfade deuten auf Konfiguration, temporäre Dateien oder Datenexport hin?
- Suche mit strings nach: http, https, api.
- Aufgabe 4
- Welche Kommunikationsziele sind erkennbar?
- Suche mit strings nach: key, api, /bin/sh.
- Aufgabe 5
- Welche dieser Strings sind für ein Rechnungsprogramm ungewöhnlich?