GNU/Linux >> Linux Esercitazione >  >> Linux

Trova i file persi con Scalpel

In qualità di amministratore di sistema, parte della tua responsabilità è aiutare gli utenti a gestire i propri dati. Uno degli aspetti vitali di questa operazione è garantire che la tua organizzazione disponga di un buon piano di backup e che i tuoi utenti eseguano i backup regolarmente oppure non debbano farlo perché hai automatizzato il processo.

Tuttavia, a volte accade il peggio. Un file viene eliminato per errore, un filesystem viene danneggiato o una partizione viene persa e, per qualsiasi motivo, i backup non contengono ciò di cui hai bisogno.

Come abbiamo discusso in Come prevenire e recuperare dall'eliminazione accidentale di file in Linux, prima di provare a recuperare i dati persi, devi scoprire perché i dati mancano in primo luogo. È possibile che un utente abbia semplicemente smarrito il file o che sia presente un backup di cui l'utente non è a conoscenza. Ma se un utente ha effettivamente rimosso un file senza backup, allora sai che devi recuperare un file eliminato. Se una tabella delle partizioni è stata criptata, tuttavia, i file non vanno affatto persi e potresti prendere in considerazione l'utilizzo di TestDisk per recuperare la tabella delle partizioni o la partizione stessa.

Cosa succede se il ripristino del file o della partizione non ha esito positivo o è solo in parte? Poi è il momento di Scalpel. Scalpel esegue operazioni di intaglio dei file in base a modelli che descrivono tipi di file univoci. Cerca questi modelli in base a stringhe binarie ed espressioni regolari, quindi estrae il file di conseguenza.

Questo strumento non è attualmente in fase di manutenzione, ma è sempre affidabile, compila e funziona esattamente come previsto. Se stai utilizzando Red Hat Enterprise Linux (RHEL) 7, RHEL 8 o Fedora, puoi scaricare i programmi di installazione RPM di Scalpel, insieme alla sua dipendenza, libtre , da klaatu.fedorapeople.org.

Iniziando con il bisturi

Scalpel viene fornito in bundle con un elenco completo di tipi di file e le loro caratteristiche di identificazione più uniche. A volte, un file può essere identificato da un testo prevedibile in testa e in coda:

htm    n    50000   <html         </html>

Mentre altre volte sono necessari codici esadecimali dall'aspetto criptico:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Scalpel si aspetta che tu duplichi /etc/scalpel.conf modifica la tua copia per includere i tipi di file che speri di recuperare e per escludere i tipi di file che sai di non aver bisogno. Ad esempio, se sai che non hai o ti interessa .fws file, quindi commenta quella riga fuori dal file. In questo modo è possibile accelerare il processo di recupero e ridurre i falsi positivi.

Nel file di configurazione, il formato di una definizione di file è, da sinistra a destra:

  • L'estensione del file.
  • Se l'intestazione e il piè di pagina fanno distinzione tra maiuscole e minuscole (y o n ).
  • La dimensione minima e massima del file che vuoi che Scalpel trovi.
  • Un'intestazione standard che identifica l'inizio del file.
  • Un piè di pagina standard che identifica la fine del file.

Il footer il campo è facoltativo. Se non viene fornito alcun piè di pagina, Scalpel estrae il numero di byte che hai impostato come valore massimo del tipo di file.

Potresti scoprire che uno sforzo di ripristino salva solo parte di un file, come questo JPG per lo più recuperato:

Questo risultato significa che probabilmente è necessario aumentare il valore massimo dei limiti del file, quindi eseguire nuovamente la scansione, in modo da poter recuperare anche la fine del file:

Definizione di nuovi tipi di file

Per prima cosa, fai una copia del file di configurazione di Scalpel. Se tutti i tuoi utenti generano dati simili, potresti aver bisogno di un solo file di configurazione per l'intera organizzazione. Oppure potresti trovare meglio avere un file di configurazione per reparto.

Per aggiungere i tuoi tipi di file a una configurazione di Scalpel, inizia con alcune indagini forensi.

Per i file di testo, idealmente hai una struttura prevedibile che puoi anticipare. Ad esempio, un file XML probabilmente inizia con <xml e termina con </xml . I file binari sono similmente prevedibili. Usando hexdump comando, è possibile visualizzare un'intestazione tipica dal tipo di file che si desidera definire. Ecco i risultati per un XCF, il file grafico a strati predefinito di GIMP:

$ head --bytes 8 example.xcf | hexdump --canonical
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Questo output proviene da un sistema Red Hat Enterprise Linux 8. Sui sistemi meno recenti, potrebbe essere necessaria una sintassi meno recente:

$ head --bytes 8 example.xcf | hexdump -C
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

L'output canonico di hexdump visualizza l'indirizzo nella colonna all'estrema sinistra e i valori decodificati all'estrema destra. Nella colonna centrale ci sono i byte esadecimali dei primi 8 byte della prima riga del file XCF.

La maggior parte dei file binari in /etc/scalpel.conf sembrano abbastanza simili a quell'output, tranne per il fatto che questi valori sono preceduti da \x sequenza di escape per indicare che i numeri sono in realtà cifre esadecimali. Ad esempio, un file JPG ha questo aspetto nel file di configurazione:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Confronta quel valore con un hexdump di prova dei primi 6 byte (perché sono quanti byte scalpel.conf contiene nella sua definizione JPG) di qualsiasi file JPG sul tuo sistema:

$ head --bytes 6 example.jpg | | hexdump --canonical
00000000  ff d8 ff e0 00 10                    |......|
00000006

Confronta il piè di pagina con gli ultimi 2 byte in modo che corrispondano a ciò che mostra il file di configurazione:

$ tail --bytes -2 example.jpg | hexdump --canonical
00000000  ff d9                        |..|
00000002

Questi valori corrispondono, quindi puoi essere certo che i file JPG validi probabilmente iniziano e finiscono tutti in una sequenza prevedibile.

Nota: La voce Ogg in scalpel.conf il file è fuorviante, poiché manca il \x sequenza di fuga. Se devi recuperare un file Ogg, correggilo o sostituisci la sua definizione.

Come mettersi al lavoro

Ora, per ottenere lo stesso livello di affidabilità per tutti i file è necessario ripristinare (come XCF, nell'esempio precedente). Per ribadire, questo è il tuo flusso di lavoro per definire i tipi di file binari comuni all'unità vittima: 

  1. Ottieni i valori esadecimali dei primi byte di un tipo di file usando head --bytes n comando.
  2. Ottieni gli ultimi byte usando tail --bytes -n comando.
  3. Ripeti questo processo su diversi file dello stesso tipo per confermare la coerenza di questo modello, regolando la lunghezza dei modelli di intestazione e piè di pagina come richiesto.
  4. Inserisci i valori di intestazione e piè di pagina nella configurazione personalizzata di Scalpel, utilizzando il \x notazione per identificare ogni byte come un carattere esadecimale.

Segui questa sequenza per ogni tipo di file binario importante che devi recuperare.

Se un file è in chiaro, fornisci un'intestazione e un piè di pagina comuni, ad esempio #!/bin/sh per gli script di shell, # (lo spazio dopo il # è importante) per i file markdown con un titolo di livello h1, <xml per file XML e così via.

Quando sei pronto per eseguire Scalpel, crea una directory in cui può posizionare i file salvati:

$ mkdir /run/media/seth/rescuer/scalped

Nota: Non creare questa directory sullo stesso volume che contiene i dati persi.

Se l'unità della vittima non è ancora montata, montala ed esegui Scalpel:

$ scalpel -c my-scalpel.conf \
  -o /run/media/seth/rescuer/scalped \
  /run/media/seth/victim

Puoi anche eseguire Scalpel su un'immagine disco:

$ scalpel -c my-scalpel.conf \
  -o ~/scalped ~/victim.img

Quando Scalpel ha finito, rivedi i file nella directory di salvataggio designata.

Tutto sommato, è meglio eseguire backup in modo da evitare di eseguire il ripristino dei file. Ma, se dovesse succedere il peggio, prova Scalpel e intaglia con cura.


Linux
  1. Trova file e directory su Linux con il comando find

  2. Come trovare file con il comando fd in Linux

  3. Trova i file e tarali (con spazi)

  4. Itera su un elenco di file con spazi

  5. Elenca tutti i file di immagini grafiche con find?

Comando Trova Linux con esempi pratici

Come trovare file in Debian 10

Come trovare file basati su timestamp in Linux

Come trovare file con il comando fd in Linux

Tutorial comando trova Linux (con esempi)

Come trovare file con dozzine di criteri con il comando Trova Bash