[linux]Odzyskiwanie-danych-z-linuksowych-systemow-plikow.pdf

(621 KB) Pobierz
291259155 UNPDF
Odzyskiwanie danych
z linuksowych systemów
plików
Bartosz Przybylski
Kiedy, na przykład w wyniku
włamania, zdarzy się nam utrata
ważnych plików w Linuksie, nie
musimy rozpaczać. Istnieje wiele
metod odzyskania danych. Choć
często jest to czasochłonne
zajęcie, dobry zestaw narzędzi
pozwoli na odzyskanie nawet
całej zawartości uszkodzonego
systemu plików.
Intruz był na tyle złośliwy, że pokaso-
wał nam z dysku sporo ważnych pli-
ków, w tym program nad którym pracowaliśmy
parę miesięcy. Zanim zrobimy reinstalację sys-
temu (aby nie pozostał w nim na pewno żaden
złośliwy kod pozostawiony przez włamywacza)
warto byłoby odzyskać dane. Aby to zrobić,
musimy posłużyć się kilkoma narzędziami, któ-
re zawiera każda dystrybucja Linuksa.
Przygotowanie partycji do
odzyskania danych
Niezależnie od systemu plików, z którego bę-
dziemy odzyskiwać dane, musimy odmonto-
wać partycję, na której będziemy pracować.
Aby mieć chociaż cząstkową pewność, że na-
sze dane nie zostały w żaden sposób naruszo-
ne powinniśmy ten krok wykonać jak najszyb-
ciej po usunięciu plików.
Aby odmontować partycję wystarczy umount
/dev/hdaX (gdzie X to numer partycji, z której ska-
sowano dane, w naszym przypadku nosi ona nu-
Potrzebne narzędzia
Pierwszym niezbędnym elementem jest zbiór
narzędzi do pracy na systemach plików ext2
i xt3 – mowa o pakiecie e2fsprogs . Dla nas
najważniejszy będzie debugfs , który, jak na-
zwa wskazuje, służy do debugowania systemu
plików. Standardowo (dla platformy x86) cały
pakiet instalowany jest razem z systemem.
Następnym niezbędnym narzędziem jest re-
iserfsck będący częścią pakietu reiserfsprogs ,
służącego do edycji systemu plików ReiserFS .
Ten pakiet również powinien być załączony do
systemu. Z kolei program dd posłuży nam do
odzyskania całej partycji z systemem plików
ReiserFS i jako alternatywa do odzyskania da-
nych z różnych typów systemów plików.
Z artykułu dowiesz się...
• jak odzyskiwać dane z systemów plików typu
ext2 i ext3 ,
• w jaki sposób uratować pliki z partycji Re-
iserFS .
Co powinieneś wiedzieć...
• powinieneś umieć posługiwać się linią poleceń
w Linuksie,
• powinieneś znać podstawy budowy systemów
plików.
64
www.hakin9.org
hakin9 Nr 3/2005
N asz serwer padł oiarą włamywacza.
291259155.037.png 291259155.038.png
Odzyskiwanie danych
Pojęcia związane z przestrzenią dyskową
I-węzły
I-węzeł (ang. inode ) to struktura danych używana w linuksowych systemach plików do
opisu pliku. W skład i-węzła wchodzi:
sy są nam zbędne, wystarczy je za-
bić poleceniem:
fuser -k -v -m /dev/hda10
Jeśli natomiast wolimy normalnie za-
kończyć procesy, powinniśmy wyko-
nać:
• typ pliku – plik zwykły, katalog lub plik urządzenia,
• identyikator UID właściciela,
• wykaz bloków dyskowych i ich fragmentów tworzących plik.
# fuser -TERM -v -m /dev/hda10
I-węzeł możemy traktować jako swoisty identyikator pliku na dysku, którym system po-
sługuje się w celu odnalezienia żądanego pliku. Każdy plik na danej partycji ma przypo-
rządkowany tylko jeden i-węzeł.
Drugim sposobem na odmontowa-
nie systemu plików jest przełączenie
go w tryb RO ( read only ). W ten spo-
sób nasze pliki nie będą mogły zostać
nadpisane. Aby wykonać tę czynność,
wydajmy następujące polecenie:
Blok dyskowy
Blok dyskowy to przechowująca informacje część przestrzeni na partycji. Rozmiar blo-
ku deiniowany jest przez użytkownika podczas podziału dysku na partycje. Może jed-
nak zostać zmieniony przy użyciu programów modyikujących dany system plików.
W przeciwieństwie do i-węzłów, wiele bloków może należeć do jednego pliku.
Księgowanie
Księgowanie (ang. journaling , rejestrowanie zmian) jest jedną z metod przechowywa-
nia danych na dysku. Zasada jest prosta, ale nadzwyczaj skuteczna. Nieco uproszczo-
ny schemat działania widoczny jest na Rysunku 1.
Jak widać, Plik1 po zmodyikowaniu nie zmieni danych zawartych w swoim sta-
rym położeniu (w przeciwieństwie do systemów plików bez księgowania), lecz dane
zostaną zapisane w nowym miejscu. Jest to duża zaleta – gdy dojdziemy do wniosku,
że poprzednia wersja była lepsza, nawet po znacznej modyikacji możemy odzyskać
starą postać pliku.
# mount -o ro, remount /dev/hda10
Uwaga: polecenie nie zadziała, jeżeli
partycja to root directory , czyli głów-
ny system plików. Jeżeli tak w istocie
jest, musimy powiadomić o tym pro-
gram mount , aby zmian nie zapisał
do pliku /etc/mtab . W tym celu doda-
jemy przełącznik -n .
mer 10). Jeżeli jednak podczas tej
operacji otrzymamy komunikat:
cego do identyikacji użytkowników
i procesów korzystających z określo-
nych plików lub soketów:
Odzyskiwanie danych
w Ext2fs
Pierwszym rodzajem systemu pli-
ków, jakim się zajmiemy jest ext2fs
(aby dowiedzieć się nieco więcej
o tym i innych systemach plików,
warto zajrzeć do Ramki Linuksowe
systemy plików ). Zaczniemy od od-
nalezienia skasowanych i-węzłów.
# umount /dev/hda10
umount: /tmp: device is busy
# fuser -v -m /dev/hda10
oznacza to, że jakiś proces korzysta
z tej partycji.
Z takiej sytuacji są dwa wyjścia.
Jednym z nich jest zabicie proce-
su wykorzystującego daną partycję.
Najpierw trzeba jednak sprawdzić,
jakie procesy blokują partycję. Sko-
rzystamy z programu fuser , służą-
Opcja -m /dev/hda10 nakaże progra-
mowi sprawdzić jakie usługi używają
partycji hda10 . Natomiast przełącz-
nik -v ( verbose ) uczyni dane wyjścio-
we bardziej szczegółowymi, przez
co zamiast samych numerów PID uj-
rzymy także zerowe argumenty pro-
gramów. Jeśli stwierdzimy, że proce-
Szukanie skasowanych
i-węzłów
Aby wykonać ten krok, użyjemy pro-
gramu debugfs z pakietu e2fsprogs .
Uruchommy aplikację otwierając żą-
daną partycję:
# debugfs /dev/hda10
Rysunek 1. Schemat działania księgowania
Gdy ukaże się znak zachęty, powin-
niśmy wykonać polecenie lsdel , któ-
re pokaże nam wszystkie skasowa-
ne pliki od czasu stworzenia tej par-
tycji (w przypadku systemów publicz-
nych lista ta może mieć tysiące linii,
jej stworzenie wymaga czasem tro-
chę czasu). Teraz – wyłącznie na
podstawie daty skasowania, UID
użytkownika i rozmiaru – możemy
hakin9 Nr 3/2005
www.hakin9.org
65
291259155.039.png 291259155.040.png 291259155.001.png 291259155.002.png 291259155.003.png 291259155.004.png
Listing 1. Efekt polecenia lsdel programu debugfs
Pozostał nam do odzyskania
plik z i-węzła 20 (patrz Listing 1).
Zajmuje 14 bloków, a jak wspo-
mnieliśmy, metoda zrzucenia da-
nych z i-węzła liczącego więcej niż
12 bloków nie kończy się powodze-
niem (patrz Ramka Bloki i ich hie-
rarchia w ext2fs ). Dlatego do odzy-
skania 20. i-węzła użyjemy progra-
mu dd .
Zanim odzyskamy plik, sprawdź-
my podstawowe dane, czyli numery
bloków i rozmiar bloku na partycji.
Aby sprawdzić rozmiar bloku, użyje-
my polecenia:
debugfs: lsdel
Inode Owner Mode Size Blocks Time deleted
(...)
20 0 100644 41370 14/14 Tue Feb 15 19:13:25 2005
24 0 100644 17104 5/5 Tue Feb 15 19:13:26 2005
352 deleted inodes found.
debugfs:
Listing 2. Zrzucenie odzyskanych danych do pliku
debugfs: dump <24> /home/aqu3l/recovered.000
debugfs: quit
# cat /home/aqu3l/recovered.000
(...)
wywnioskować, które pliki należały
do nas i które chcemy odzyskać. Do-
brym pomysłem jest spisanie lub wy-
drukowanie numerów i-węzłów.
Przyjrzyjmy się bliżej wynikowi
polecenia lsdel (patrz Listing 1). Ko-
lumny w wynikach polecenia lsdel
przedstawiają kolejno:
odzyskanego pliku mogą się poja-
wić różne znaki-śmieci; są to pozo-
stałości po innych nadpisanych pli-
kach. Można je usunąć przy użyciu
dowolnego edytora tekstu. Metoda
ta skutkuje tylko w przypadku plików
tekstowych.
# dumpe2fs /dev/hda10 \
| grep "Block size"
W odpowiedzi powinniśmy otrzy-
mać:
dumpe2fs 1.35 (28-Feb-2004)
Block size: 4096
• numer i-węzła ( inode ),
• właściciela ( owner ),
• opcje dostępu ( mode ),
• rozmiar w bajtach ( size ),
• liczbę zajmowanych bloków
( blocks ),
• czas skasowania ( time deleted ).
Linuksowe systemy plików
Ext2fs
System plików, którego głównym twórcą jest Theodore Ts'o. Nie posiada księgowania.
Został zaprojektowany w taki sposób, aby możliwe było odzyskanie danych z party-
cji. Jest jednym z najpopularniejszych (właśnie ze względu na łatwość odzyskiwania)
uniksowych systemów plików.
Ext3fs
Teoretycznie kolejna wersja ext2 . Choć nie został zaprojektowany tak dobrze jak je-
go poprzednik, to oferuje możliwość księgowania. Ma także swoje wady – jedną z nich
jest to, że projektanci nie przewidzieli w ext3 możliwości odzyskania skasowanego pli-
ku. Dzieje się tak, ponieważ system po oznaczeniu pliku jako usuniętego zwalnia tak-
że zajmowany przez niego i-węzeł, uniemożliwiając w ten sposób odczytanie usunię-
tych i-węzłów.
Jak widać, skasowane pliki mają nu-
mery i-węzłów równe 20 i 24. To wła-
śnie te dane spróbujemy odzyskać.
Zrzucanie danych
Możemy teraz spróbować odzyskać
i-węzeł 24 poprzez zrzucenie (ang.
dump ) danych do innego pliku. Jak wi-
dać na Listingu 1, zajmuje on 5 blo-
ków. Jest to dość ważna informacja
– ta metoda może nie zawsze skutko-
wać przy plikach zajmujących więcej
niż 12 bloków. Przykład takiego odzy-
skania znajduje się na Listingu 2.
W nawiasach ostrych podaje-
my nazwę pliku bądź numer i-węzła.
Drugim parametrem jest nazwa pli-
ku docelowego – należy ją podawać
z pełną ścieżką dostępu, więc skró-
towe ~/ nie poskutkuje.
Po wykonaniu polecenia wpisu-
jemy quit i czytamy zawartość od-
zyskanego pliku. Często na końcu
ReiserFS
System plików stworzony przez irmę NameSys, a dokładniej głównie przez Hansa
Reisera, (stąd nazwa). Także udostępnia księgowanie; został zbudowany na algoryt-
mie zbilansowanego drzewa (ang. balanced tree ). Więcej informacji o specyicznej bu-
dowie reiserfs można znaleźć na stronie WWW twórców (patrz Ramka W Sieci ).
Jfs
Jfs ( IBM's Journaled File System for Linux ) jest systemem plików napisanym przez
IBM dla platformy Linux. Miał na celu usprawnienie komunikacji z produktami IBM.
Opiera się na podobnej zasadzie księgowania co reszta stosujących go systemów.
Oznacza to, że nowo zapisane dane wędrują na początek dysku, a informacje w bloku
głównym zostają zaktualizowane.
Xfs
Extended ilesystem zaprojektowany został z myślą o komputerach, które wymagają
przechowywania dużej ilości plików w jednym katalogu i muszą mieć do nich błyska-
wiczny dostęp. Choć projektowany głównie z myślą o Iriksie, znalazł także zastosowa-
nie w superkomputerach działających z systemem GNU/Linux. Ciekawostką jest fakt,
że system potrai przechowywać w jednym katalogu nawet 32 miliony plików.
66
www.hakin9.org
hakin9 Nr 3/2005
291259155.005.png 291259155.006.png 291259155.007.png
 
291259155.008.png 291259155.009.png 291259155.010.png 291259155.011.png
Odzyskiwanie danych
Bloki i ich hierarchia w ext2fs
Bloki na dysku nie są jednym ciągiem przypisanym do pliku (i-węzła). W pewnych
miejscach(zależnych od systemu plików, nie użytkownika) występują tzw. bloki po-
średniczące, w trzech rodzajach:
# dd bs=4k if=/dev/hda10 \
skip=22015 count=12 \
> ~/recovered.001
# dd bs=4k if=/dev/hda10 \
skip=22028 count=1 \
>> ~/recovered.001
• blok pośredni (ang. indirect block ) – IND,
• blok podwójnie pośredni (ang. double indirect block ) – DIND,
• blok potrójnie pośredni (ang. triple indirect block ) – TIND.
Kilka słów wyjaśnienia:
bs oznacza rozmiar bloku (poda-
ny w kilobajtach), który otrzymy-
waliśmy wcześniej,
if oznacza plik wejściowy (ang.
input ile ),
skip nakazuje programowi prze-
skoczyć 22015 bloków o zada-
nym rozmiarze bs ,
count oznacza liczbę bloków do
zebrania.
Każdy kolejno numerowany blok jest zależny od tego numerowanego wyżej, ale też
każdy kolejny może przechowywać większą ilość bloków:
• numery pierwszych 12 bloków przechowywanie są bezpośrednio w i-węźle (to
one często nazywane są blokami pośrednimi),
• i-węzeł zawiera numer pośredniego bloku; blok pośredni zawiera numery kolej-
nych 256 bloków z danymi,
• i-węzeł zawiera numer podwójnie pośredniego bloku; blok podwójnie pośredni
zawiera numery dodatkowych 256 bloków pośrednich,
• i-węzeł zawiera numer potrójnie pośredniego bloku; blok potrójnie pośredni za-
wiera numery dodatkowych 256 bloków podwójnie pośrednich.
Blok 22027 jest podwójnie pośredni,
więc ominęliśmy go i od razu zebrali-
śmy blok 22028.
Strukturę przedstawia Rysunek 2.
Właśnie ta ostatnia liczba (4096) jest
rozmiarem bloku. Teraz, gdy mamy
już rozmiar bloku, sprawdźmy bloki do
odzyskania. Tę operację widzimy na
Listingu 3 – zwróćmy uwagę, że blok
22027 jest blokiem pośrednim (IND).
Interesuje nas przedostatnia linia,
w niej właśnie podane są bloki należą-
ce do danego i-węzła. Wykorzystajmy
program dd do odzyskania bloków od
0 (od tej liczby zawsze rozpoczynamy
liczenie bloków) do 11:
Modyikacja i-węzłów
Teraz zajmiemy się innym sposo-
bem odzyskiwania danych – bezpo-
średnią modyikacją i-węzłów. Po-
lega ona na takiej zmianie i-węzła,
żeby system plików potraktował od-
powiednie dane jako nigdy nie ka-
sowane i przy najbliższym spraw-
dzeniu dysku przeniósł skasowany
plik do folderu lost+found na danej
partycji. Do modyikacji także uży-
jemy programu debugfs , a przebieg
całej operacji znajduje się na Li-
stingu 4.
Jak widać, modyikacji uległy tyl-
ko dwa wpisy: czas skasowania ( de-
letion time – nie jest to jednak do
końca prawda, bo system nie jest
przecież w stanie określić daty usu-
nięcia pliku) oraz liczba dowiązań do
pliku ( link count ). Teraz, po zakoń-
czeniu pracy przez debugfs , wystar-
czy wykonać polecenie:
Listing 3. Sprawdzenie bloków do odzyskania
# debugfs /dev/hda10
debugfs: stat <20>
Inode: 20 Type: regular Mode: 0644 Flags: 0x0 Generation: 14863
User: 0 Group: 0 Size: 41370
(...)
BLOCKS:
(0-11):22015-22026, (IND): 22027, (12):22028
TOTAL: 14
Listing 4. Odzyskanie plików przez bezpośrednią modyikację i-węzła
# debugfs -w /dev/hda10
debugfs: mi <24>
Mode [0100644]
User ID [0]
Group ID [0]
(...)
Deletion time [1108684119] 0
Link count [0] 1
(...)
debugfs: quit
# e2fsck -f /dev/hda10
e2fsck 1.35 (28-Feb-2004)
(...)
Unattached inode 14
Connect to /lost+found<y>? yes
(...)
# e2fsck -f /dev/hda10
Program po napotkaniu zmodyiko-
wanego i-węzła uzna, że jest on bez
nadzoru (ang. unattached ) i zapyta,
czy dane opisane w tym i-węźle do-
wiązać do folderu lost+found . Je-
żeli zależy nam na pliku, to oczy-
wiście wciskamy klawisz y . Jednak
nie ma róży bez ognia – po zajrze-
hakin9 Nr 3/2005
www.hakin9.org
67
291259155.012.png 291259155.013.png 291259155.014.png 291259155.015.png
niu do folderu zobaczymy nie ele-
ganckie nazwy plików, lecz wyłącz-
nie numery odbudowanych i-wę-
złów (np. 24 ). Należy więc przej-
rzeć plik i po treści rozpoznać jego
oryginalną nazwę.
Ext3fs
Odzyskiwanie danych w tym syste-
mie plików jest specyiczne, czasem
nawet bardzo czasochłonne (patrz
też Ramka Linuksowe systemy pli-
ków ). Prawdę mówiąc, nie ma żad-
nego zatwierdzonego sposobu od-
zysku z tego typu partycji. Istnieją
jednak nieoicjalne metody ratowa-
nia danych.
Czy to ext3 czy ext2?
Ext3 i ext2 są bardzo podobnymi
systemami plików (z wyjątkiem księ-
gowania i sposobu kasowania pli-
ków) – wykorzystajmy więc ten fakt,
aby odzyskać nasze dane. Spróbuje-
my użyć debugfs ; proces ten przed-
stawiono na Listingu 5.
Spójrzmy na Listing 5. Nasze
i-węzły zostały skasowane przez
system plików. Wybrana przez nas
droga z pozoru prowadzi donikąd.
Możemy jednak spróbować pew-
nej sztuczki – sprawić, by system
operacyjny traktował system plików
jako ext2 . Rozwiązanie to dzieli się
na trzy etapy:
Rysunek 2. Struktura bloków w systemie plików ext2
• odmontowanie systemu plików,
• ponowne zamontowanie, ale tym
razem jako ext2 ,
• odzyskanie plików.
Listing 5. Wyszukanie skasowanych i-węzłów w ext3fs
# debugfs /dev/hda10
debugfs: lsdel
Inode Owner Mode Size Blocks Time deleted
0 deleted inodes found.
debugfs: q
Odmontujmy więc partycję:
# umount /dev/hda10
Następnie musimy ją ponownie
zamontować jako ext2 , dla więk-
szego bezpieczeństwa w trybie
read only :
Listing 6. Odzyskanie danych z partycji ext3 zamontowanej jako ext2
debugfs: lsdel
Inode Owner Mode Size Blocks Time deleted
(...)
20 0 100644 41370 14/14 Tue Feb 14 19:20:25 2005
(...)
24 0 100644 17104 5/5 Tue Feb 15 19:13:26 2005
352 deleted inodes found.
debugfs:
# mount -o ro -t ext2 \
/dev/hda10 /tmp
Teraz spróbujmy pracować z de-
bugfs w sposób, który przedstawili-
śmy przy omawianiu systemu ext2 .
Wyszukiwanie usuniętych z partycji
68
www.hakin9.org
hakin9 Nr 3/2005
291259155.016.png 291259155.017.png 291259155.018.png
 
291259155.019.png 291259155.020.png 291259155.021.png 291259155.022.png 291259155.023.png 291259155.024.png 291259155.025.png 291259155.026.png 291259155.027.png 291259155.028.png 291259155.029.png 291259155.030.png 291259155.031.png 291259155.032.png 291259155.033.png 291259155.034.png 291259155.035.png 291259155.036.png
 
Zgłoś jeśli naruszono regulamin