Strings Beispiele: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(20 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
* gcc
 
  
 
== 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.bin
+
*gcc sample1.c -o sample1
 
+
-->
=== Wo liegt die Datei ===
 
*ls -l sample1.bin
 
  
 
== Erste Einordnung der Datei ==
 
== Erste Einordnung der Datei ==
Zeile 46: Zeile 50:
  
 
;Netzwerkindikatoren
 
;Netzwerkindikatoren
*strings sample1.bin | grep -Ei 'http|https|ftp'
+
*strings sample1 | grep -Ei 'http|https|ftp'
  
 
;Zugangsdaten
 
;Zugangsdaten
*strings sample1.bin | grep -Ei 'user|pass|password'
+
*strings sample1 | grep -Ei 'user|pass|password'
  
 
;Systempfade und Shells
 
;Systempfade und Shells
*strings sample1.bin | grep -Ei '/bin/|/etc/'
+
*strings sample1 | grep -Ei '/bin/|/etc/'
  
 
== Forensische Bewertung ==
 
== Forensische Bewertung ==
Zeile 96: Zeile 100:
 
* Hypothesenbildung
 
* Hypothesenbildung
 
* Vorbereitung weiterführender Analyse
 
* Vorbereitung weiterführender Analyse
 
= Aufgaben =
 
 
== Zusatz – Untersuchungsobjekt Programm ==
 
 
<!--
 
<!--
 
=== Datei erzeugen ===
 
=== Datei erzeugen ===
*cat > forensic-tool.c <<'EOF'
+
*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 = "Tool version 2.7.4";
+
     char *a = "InvoiceHelper 1.8.2";
     char *b = "build host: ci-runner-03";
+
     char *b = "last build: 2024-10-14";
     char *c = "build path: /srv/builds/forensic/";
+
     char *c = "build user: accounting";
     char *d = "config=/etc/forensic/tool.conf";
+
     char *d = "/home/accounting/tools/invoice/";
     char *e = "log=/var/log/forensic/tool-debug.log";
+
     char *e = "config=/etc/invoice/helper.conf";
     char *f = "POST /collector HTTP/1.1";
+
     char *f = "export path=/srv/invoices/export/";
     char *g = "Host: stats.internal.corp";
+
     char *g = "https://billing.internal.local/api/upload";
     char *h = "X-Auth: Zm9yZW5zaWM6c2VydmljZQ==";
+
     char *h = "X-API-Key: QUNDT1VOVElOR19LRVk=";
     char *i = "debug shell available";
+
     char *i = "tmp=/var/tmp/invoice-helper";
     if (getenv("FORENSIC_DEBUG")) {
+
 
 +
     if (argc == 2 && argv[1][0] == 'x') {
 
         system("/bin/sh");
 
         system("/bin/sh");
 
     }
 
     }
     printf("%s\n", a);:q!:
+
 
 +
     printf("%s\n", a);
 
     return 0;
 
     return 0;
 
}
 
}
 
EOF
 
EOF
 
</pre>
 
</pre>
*gcc forensic-tool.c -o forensic-tool.bin
 
  
 +
*gcc invoice-helper.c -o invoice-helper
 +
-->
  
== Aufgaben – Programm ==
+
== Aufgaben ==
 
+
===Untersuchungen der Datei invoice-helper===
;Untersuchung
+
;Aufgabe 1
* Identifiziere Hinweise auf Herkunft und Entwicklungsumgebung.
+
* Suche mit '''strings''' gezielt nach: '''version''', '''build''', '''user''', '''/home'''.
* Leite mögliche Kommunikationsziele ab.
+
*Notiere alle gefundenen Strings und ordne sie dem Entwicklungs- oder Einsatzkontext zu.
* Bewerte, ob das Programm für den Einsatz auf Produktivsystemen geeignet ist.
+
<!--strings invoice-helper | grep -Ei 'version|build|user|/home'-->
* Benenne Risiken, die sich allein aus den gefundenen Artefakten ergeben.
+
;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'
  
== Zusatz – Untersuchungsobjekt USB-Memory-Stick ==
+
Ungewöhnliche Strings:
<!--
+
- X-API-Key: QUNDT1VOVElOR19LRVk=
=== Image erzeugen ===
+
- /bin/sh
*dd if=/dev/zero of=memstick.dd bs=1M count=8
 
  
*echo "ssh admin@10.10.10.5" | dd of=memstick.dd conv=notrunc seek=20
+
Begründung:
*echo "rsync -av /data user@backup:/srv/backup" | dd of=memstick.dd conv=notrunc seek=200
+
- Ein fest im Programm enthaltener API-Key gehört nicht zur Kernfunktion eines Rechnungsprogramms.
*echo "BEGIN OPENSSH PRIVATE KEY" | dd of=memstick.dd conv=notrunc seek=600
+
- Ein Shell-Aufruf (/bin/sh) ist für eine reine Fachanwendung ungewöhnlich und sicherheitsrelevant.
*echo "vpn.internal.corp/config" | dd of=memstick.dd conv=notrunc seek=1000
 
*echo "Change window 2024-11-02 23:00" | dd of=memstick.dd conv=notrunc seek=1400
 
 
-->
 
-->
 
== Aufgaben – USB-Stick ==
 
 
;Untersuchung
 
* Ordne die gefundenen Artefakte möglichen Nutzungsszenarien zu.
 
* Unterscheide zwischen administrativen und sensiblen Inhalten.
 
* Entscheide, welche Funde sofort eskaliert werden müssten.
 
* Leite sinnvolle nächste forensische Schritte ab.
 

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

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

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?