ext2fs pl, -=Hacking=-, FAQ

[ Pobierz całość w formacie PDF ]
Odzyskiwanie danych
z linuksowych
systemów plików
Bartosz Przybylski
Artykuł opublikowany w numerze 3/2005 magazynu
hakin9
Wszelkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie artykułu dozwolone
pod warunkiem zachowania jego obecnej formy i treści.
Magazyn
hakin9
, Wydawnictwo Software, ul. Piaskowa 3, 01-067 Warszawa,
pl@hakin9.org
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.
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
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
 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
[ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • materaceopole.pev.pl






  • Formularz

    POst

    Post*

    **Add some explanations if needed