Strings Beispiele: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 157: Zeile 157:
  
 
Befehle:
 
Befehle:
strings invoice-helper | grep -Ei 'version|build|user|/home'
+
<!--strings invoice-helper | grep -Ei 'version|build|user|/home'-->
strings invoice-helper | grep -E '/etc/|/var/|/srv/|/tmp'
+
<!--strings invoice-helper | grep -E '/etc/|/var/|/srv/|/tmp'-->
strings invoice-helper | grep -Ei 'http|https|api'
+
<!--strings invoice-helper | grep -Ei 'http|https|api'-->
strings invoice-helper | grep -Ei 'key|/bin/sh'
+
<!--strings invoice-helper | grep -Ei 'key|/bin/sh'-->
 
 
Ergebnisse:
 
- InvoiceHelper 1.8.2
 
- last build: 2024-10-14
 
- build user: accounting
 
- /home/accounting/tools/invoice/
 
- /etc/invoice/helper.conf
 
- /srv/invoices/export/
 
- /var/tmp/invoice-helper
 
- https://billing.internal.local/api/upload
 
- X-API-Key: QUNDT1VOVElOR19LRVk=
 
- /bin/sh
 
 
 
Einordnung:
 
- internes Programm aus Accounting-Umfeld
 
- externe Konfiguration und Datenexport
 
- Netzwerkkommunikation zu internem Dienst
 
- API-Key und Shell-Aufruf sicherheitsrelevant
 
-->
 
 
 
 
 
== Aufgabe 2 – USB-Memory-Stick ==
 
 
 
;Untersuchung
 
* Suche mit '''strings''' nach:
 
  '''ssh''', '''scp''', '''rsync'''.
 
  Welche Nutzung des Sticks lässt sich daraus ableiten?
 
 
 
* Suche mit '''strings''' nach:
 
  '''PRIVATE''', '''KEY'''.
 
  Welche Art von sensiblen Daten könnte betroffen sein?
 
 
 
* Suche mit '''strings''' nach:
 
  '''internal''', '''vpn''', '''incident'''.
 
  Welche organisatorischen Kontexte werden sichtbar?
 
 
 
* Entscheide anhand der gefundenen Strings,
 
  welche Funde besonders kritisch sind und warum.
 
 
 
 
 
<!--
 
MUSTERLÖSUNG – Aufgabe 2 (USB-Stick)
 
 
 
Befehle:
 
strings memstick.dd | grep -Ei 'ssh|scp|rsync'
 
strings memstick.dd | grep -Ei 'PRIVATE|KEY'
 
strings memstick.dd | grep -Ei 'internal|vpn|incident'
 
 
 
Ergebnisse:
 
- ssh admin@10.10.10.5
 
- rsync -av /data user@backup:/srv/backup
 
- BEGIN OPENSSH PRIVATE KEY
 
- vpn.internal.corp/config
 
- Change window 2024-11-02 23:00
 
 
 
Einordnung:
 
- administrativer Einsatz des Sticks
 
- Umgang mit Zugangsdaten / Schlüsselmaterial
 
- Bezug zu internen Systemen und Changes
 
- hohe Kritikalität trotz fragmentarischer Daten
 
-->
 
 
 
== Aufgaben – Programm ==
 
 
 
;Untersuchung
 
* Identifiziere Hinweise auf Herkunft und Entwicklungsumgebung.
 
* Leite mögliche Kommunikationsziele ab.
 
* Bewerte, ob das Programm für den Einsatz auf Produktivsystemen geeignet ist.
 
* Benenne Risiken, die sich allein aus den gefundenen Artefakten ergeben.
 
 
 
== Zusatz – Untersuchungsobjekt USB-Memory-Stick ==
 
<!--
 
=== Image erzeugen ===
 
*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
 
*echo "rsync -av /data user@backup:/srv/backup" | dd of=memstick.dd conv=notrunc seek=200
 
*echo "BEGIN OPENSSH PRIVATE KEY" | dd of=memstick.dd conv=notrunc seek=600
 
*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.
 

Version vom 9. Februar 2026, 17:42 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.

Werkzeug

  • strings
  • file
  • grep
  • gcc

Szenario 1 – Analyse eines verdächtigen Programms

Datei erzeugen

Die Beispieldatei wird lokal erzeugt und simuliert ein Programm mit hartkodierten Artefakten.

  • cat > sample1.c <<'EOF'
#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("Connecting to http://evil.example.com\n");
    printf("user=admin password=secret123\n");
    system("/bin/sh");
    return 0;
}
EOF
  • gcc sample1.c -o sample1.bin

Wo liegt die Datei

  • ls -l sample1.bin

Erste Einordnung der Datei

  • file sample1.bin

Strings extrahieren

  • strings sample1.bin

Zielgerichtete Auswertung

Netzwerkindikatoren
  • strings sample1.bin | grep -Ei 'http|https|ftp'
Zugangsdaten
  • strings sample1.bin | grep -Ei 'user|pass|password'
Systempfade und Shells
  • strings sample1.bin | 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

Zusatz – Untersuchungsobjekt Programm

Datei erzeugen

  • cat > invoice-helper.c <<'EOF'
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    char *a = "InvoiceHelper 1.8.2";
    char *b = "last build: 2024-10-14";
    char *c = "build user: accounting";
    char *d = "/home/accounting/tools/invoice/";
    char *e = "config=/etc/invoice/helper.conf";
    char *f = "export path=/srv/invoices/export/";
    char *g = "https://billing.internal.local/api/upload";
    char *h = "X-API-Key: QUNDT1VOVElOR19LRVk=";
    char *i = "tmp=/var/tmp/invoice-helper";

    if (argc == 2 && argv[1][0] == 'x') {
        system("/bin/sh");
    }

    printf("%s\n", a);
    return 0;
}
EOF
  • gcc invoice-helper.c -o invoice-helper


Aufgabe 1 – Programm

Untersuchung
  • Suche mit strings gezielt nach:
 version, build, user, /home.
 Notiere alle gefundenen Strings und ordne sie dem Entwicklungs- oder Einsatzkontext zu.
  • Suche mit strings nach:
 /etc, /var, /srv, /tmp.
 Welche dieser Pfade deuten auf Konfiguration, temporäre Dateien oder Datenexport hin?
  • Suche mit strings nach:
 http, https, api.
 Welche Kommunikationsziele sind erkennbar?
  • Suche mit strings nach:
 key, api, /bin/sh.
 Welche dieser Strings sind für ein Rechnungsprogramm ungewöhnlich?
  • Überlege anhand der gefundenen Strings,
 ob das Verhalten des Programms durch Startparameter beeinflusst werden könnte.