-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Jak zasymulować bad sectory na dysku?

24 maja 2013, 17:55 | Teksty | komentarzy 13

Jakiś czas temu na jednym szkoleniu miałem potrzebę zapewnienia uczestnikom możliwości pracy na uszkodzonych dyskach (np. w grę wchodziła realizacja obrazu posektorowego tego typu dysków). Z różnych powodów nie chciałem używać realnie uszkodzonego sprzętu – choćby ze względu na słabą powtarzalność. Z pomocą przyszedł „The Device Mapper”.

Czym jest ten mechanizm? Zobaczmy na jeden z bardziej rozbudowanych opisów:

The Device Mapper is a kernel driver that provides a framework for volume management. It provides a generic way of creating mapped devices, which may be used as logical volumes. It does not specifically know about volume groups or metadata formats.

Dalej w sekcji „The error Mapping Target” czytamy:

An error mapping target can be used for testing. To test how a device behaves in failure, you can create a device mapping with a bad sector in the middle of a device (…)

Wygląda obiecująco, szczególnie że ktoś już próbował tego wcześniej. Czas zakasać rękawy:

1. Przygotowanie pustego pliku bazowego na naszą symulację dysku.

root@securitum-tst:~# dd if=/dev/zero of=disk.img bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.0228352 s, 448 MB/s

2.  Stworzenie filesystemu na pliku.

root@securitum-tst:~# mkfs -t ext3 disk.img
mke2fs 1.41.12 (17-May-2010)
disk.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
2512 inodes, 10000 blocks
500 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=10485760
2 block groups
8192 blocks per group, 8192 fragments per group
1256 inodes per group
Superblock backups stored on blocks:
        8193

Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

3. Umożliwienie wykorzystania naszego pliku jako 'realnego urządzenia’.

root@securitum-tst:~# losetup /dev/loop0 disk.img

4.  Stworzenie dysku z wirtualnym jednym bad sectorem.

root@securitum-tst:~# dmsetup create bad_disk << EOF
  0 8       linear /dev/loop0 0
  8 1       error
  9 2000    linear /dev/loop0 9
EOF

5. Zamontowanie dysku.

mount /dev/mapper/bad_disk /mnt/bad/

W porządku. Spróbujmy teraz wykonać kopię posektorową tego dysku, z wykorzystaniem narzędzia dd:

root@securitum-tst:~# dd if=/dev/mapper/bad_disk of=x.img
dd: reading `/dev/mapper/bad_disk': Input/output error
8+0 records in
8+0 records out
4096 bytes (4.1 kB) copied, 0.000551803 s, 7.4 MB/s

Wygląda na to, że całość działa poprawnie (to znaczy niepoprawnie działa nasz dysk ;-) ). Widać też pewne charakterystyczne zachowanie narzędzia dd – tj. zatrzymanie działania po napotkaniu błędu. Obraz x.img ma tylko 4096 bajtów!

root@securitum-tst:~# ls -l x.img
-rw-r--r-- 1 root root 4096 May 24 19:46 x.img

Teraz do gry można włączyć narzędzia typu ddrescue czy dd_rescue, ale to już temat na osobny wpis. Miłego odzyskiwania danych z uszkodzonych dysków! :-)

— michal.sajdak<at>securitum.pl

 

 

 

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. soal

    Wystarczy właściwie parametr conv=noerror zamiast używać od razu ddrescue ;)

    Odpowiedz
    • @soal – słuszna uwaga, tej opcji nie znałem :-)

      Choć ddrescue ma prawdopodobnie trochę bardziej złożone możliwości. Np. dzielenie sektora aby odzyskać dane z jego części, powtarzanie odczytu (może za którymś razem się uda? ;) itd.
      Więcej info np. tutaj: http://www.forensicswiki.org/wiki/Ddrescue

      –ms

      Odpowiedz
      • Duży Pies

        Także program MHDD ma możliwość tworzenia bad sectorów na dysku. MHDD to znakomity program do diagnostyki i wykonywania niskopoziomowych operacji na dyskach twardych.

        Odpowiedz
  2. Damian

    Bardzo fajnie. Mało takich postów… producenci dysków zapewne uzywają podobnych narzędzi do testowania zachowania dysków na ich prace.

    Odpowiedz
    • @Damian
      No…choć bardziej do przydatne jest w temacie testowania narzędzi do odzyskiwania danych. Do parametrów dysku polecam za to np. hdparm.

      Odpowiedz
  3. Mateusz

    Świetny artykuł, choć chciałbym uzupełnienia odnośnie tego, co się dzieje w czwartym punkcie. Leniwy jestem, nie chce mi się zerkać do manuala dm_setup ;-)

    Odpowiedz
    • @Mateusz – tam jest definicja nowego „dysku”. Tj kopiowane jest (mapowane) kilka pierwszych sektorów z oryginalnego hdd – później wstawiany jeden bad sector i później znowu liniowo kopia z oryginalnego hdd. Tj. w zasadzie ten nowy dysk jest starym z tym że posiada jeden wprowadzony bad sector.

      –ms

      Odpowiedz
  4. soal

    @sekurak: Tak, zgadza się, ale do takich prostych testów taka opcja idealnie się nadaje. A oczywiście ddrescue przyda się do działania w przypadku ważniejszych danych ;) (chociaż backupy też b. ważna rzecz)

    Odpowiedz
  5. mbr

    # hdparm –help
    […]
    –make-bad-sector Deliberately corrupt a sector directly on the media (VERY DANGEROUS)

    a potem

    –write-sector Repair/overwrite a (possibly bad) sector directly on the media (VERY DANGEROUS)

    Mógłbyś przygotować zestaw fizycznych dysków z „uszkodzonymi” tymi samymi sektorami. :)

    Odpowiedz
  6. Zawsze można użyć MHDD i komendy MAKEBAD albo RANDOMBAD :)

    Odpowiedz
  7. Fajny artykuł. Jest też druga metoda symulowania uszkodzonych sektorów, oparta o narzędzia badblocks i e2fsck, umożliwiająca bardziej kontrolowane nanoszenie informacji o uszkodzeniach na istniejące systemy plików.

    Natomiast obie metody mają wspólną wadę: zakładają, że podczas dalszego postępowania z uszkodzonym dyskiem, dysk ten będzie z jednej strony uszkodzony, a z drugiej jednak na tyle sprawny, że próba odczytu uszkodzonego sektora nie zakończy się wywaleniem całego systemu operacyjnego.

    To, co by było naprawdę ciekawe, to artykuł opisujący postępowanie z dyskami „bardziej uszkodzonymi”, gdzie już nie mówimy o wadliwych pojedynczych sektorach, ale właśnie o uszkodzonej elektronice dysku, odbitym talerzu, uszkodzonej głowicy itd. – innymi słowy postępowanie w sytuacjach, gdzie:

    a) zwykły system operacyjny nie daje rady

    b) podejrzewamy, że każda próba operacji na dysku wprowadzi nieodwracalne uszkodzenia i musimy wymyślić strategię odczytania jak największej liczby danych, bądź konkretnych danych na zasadzie „po nitce do kłębka”

    Odpowiedz
  8. socrtp

    Symulacja fajna, ale przy prawdziwym dysku może się trochę inaczej wszystko zachowywać. Dawno temu miałem uszkodzony dysk i próbowałem odzyskać dane właśnie korzystając z opcji conv=noerror w dd, jednak firmware dysku okazał się być przeszkodą. Po natrafieniu na uszkodzony sektor firmware automatycznie zapamiętywał ten sektor jako uszodzony, ale dodatkowo uznawał kolejnych bodajże 15 sektorów za uszkodzone, a tak naprawdę uszkodzone były tylko 4 sektory. Po restarcie sprzętu do pozostałych 12 sektorów dobrałem się zgrywając dane sektor po sektorze, ale lecąc od ostatniego.

    Odpowiedz

Odpowiedz na Duży Pies