Hoppa yfir í efnið

Skráakerfismyndir og diskdeildir

Stundum fáum við eina skrá sem inniheldur ekki mynd, skjal eða kippuskrá heldur heilt skráakerfi. Inni í henni geta verið möppur, heimildir, faldar skrár og jafnvel fleiri diskdeildir. Til að skoða gögnin þurfum við fyrst að komast að því hvað myndin nær yfir og velja síðan örugga lesaðferð.

Í þessum kafla vinnum við aðeins með tilbúnar CTF-myndir sem verkefni afhendir. Við fjöllum ekki um að afrita raunverulega diska, síma eða USB-lykla og ekki um formlega meðferð sönnunargagna.

Ótraust skráakerfi fer inn í kjarnann

Þegar við tengjum ótrausta skráakerfismynd með mount les Linux-kjarninn flókna innri gagnaskipan hennar. Villa í skráakerfisrekli getur því verið hættuleg þótt við tengjum myndina aðeins til lestrar. Notaðu einnota sýndarvél eða annað einangrað æfingaumhverfi. Fyrir sérlega ótraust gögn er notendarýmislausn eins og guestmount --ro betri byrjun.

Þrjú ólík lög

Það hjálpar að greina þrjú hugtök:

  1. Skráakerfismynd (e. filesystem image) byrjar beint á skráakerfi, til dæmis ext4 eða FAT.
  2. Diskmynd (e. disk image) líkir eftir heilum diski og getur innihaldið deildatöflu og margar diskdeildir.
  3. Diskdeild (e. disk partition), einnig oft kölluð disksneið, er afmarkað bil á diski sem getur innihaldið eitt skráakerfi.
Heil diskmynd
├── deildatafla (MBR eða GPT)
├── diskdeild 1
│   └── FAT-skráakerfi
└── diskdeild 2
    └── ext4-skráakerfi

Þessi munur ræður næsta skrefi. Skráakerfismynd má oft tengja beint. Úr heilli diskmynd þurfum við fyrst að velja deild.

Vissir þú?

Gamla MBR-deildataflan geymir upphaf deilda í fyrstu geirum disksins. GPT notar mun stærri og sveigjanlegri töflu og geymir varaafrit af henni undir lok disksins.

Algeng skráakerfi

Skráakerfi Hvar sjáum við það oft? Athugasemd
ext4 Linux-kerfi og sýndarvélar Heimildir, eigendur og tákntenglar
XFS Stærri Linux-þjónar Öflugt dagbókarskráakerfi
Btrfs Sum Linux-kerfi Skyndimyndir og mörg innri gagnalög
FAT/FAT32 USB-lyklar og smærri miðlar Einfalt og víða stutt
exFAT Stórir færanlegir miðlar Algengt milli ólíkra stýrikerfa
NTFS Windows-diskar Linux-stuðningur fer eftir uppsetningu
ISO 9660 Geisladiskar og ISO-myndir Oft aðeins lesanlegt

Skráakerfi ákveður meðal annars hvernig skráarheiti, möppur, tímar, heimildir og laus pláss eru geymd. Við eigum því ekki að túlka öll skráakerfi eins. FAT geymir til dæmis ekki venjulegt Unix-eignarhald á sama hátt og ext4.

Fyrsta yfirferð

Búum til vinnumöppu og afrit:

mkdir -p ~/ctf/skraakerfi/{inntak,vinnu,mnt}
cp verkefni.raw ~/ctf/skraakerfi/inntak/
cp verkefni.raw ~/ctf/skraakerfi/vinnu/
cd ~/ctf/skraakerfi
sha256sum inntak/verkefni.raw vinnu/verkefni.raw

Þetta er einfalt CTF-vinnulag: ef við gerum mistök getum við byrjað aftur. Síðan skoðum við gerð og stærð:

file vinnu/verkefni.raw
ls -lh vinnu/verkefni.raw
du -h vinnu/verkefni.raw

Mögulegt svar fyrir beina skráakerfismynd:

Linux rev 1.0 ext4 filesystem data, UUID=..., volume name "CTF-DATA"

Mögulegt svar fyrir heila diskmynd:

DOS/MBR boot sector; partition 1 ...

file er vísbending. Við staðfestum með tólum sem skilja deildatöflur og skráakerfi.

Æfing 1: skráakerfi eða heill diskur?

Túlkaðu file

Tvær skrár gefa þessi svör:

a.img: Linux rev 1.0 ext4 filesystem data
b.img: DOS/MBR boot sector; partition 1 : ID=0x83

Hvora myndina reynum við fyrst að skoða sem beint ext4-skráakerfi og fyrir hvora skoðum við deildatöflu?

Lausn

a.img virðist byrja beint á ext4 og er því skráakerfismynd. b.img byrjar á MBR-deildatöflu og virðist vera heil diskmynd. Fyrir b.img notum við fdisk -l, parted eða mmls til að finna upphaf diskdeildar áður en við tengjum nokkuð.

Skoðum deildatöfluna

fdisk getur lesið deildatöflu beint úr myndskrá:

fdisk -l vinnu/verkefni.raw

Dæmi:

Disk verkefni.raw: 64 MiB, 67108864 bytes, 131072 sectors
Units: sectors of 1 * 512 = 512 bytes

Device          Boot Start    End Sectors Size Id Type
verkefni.raw1         2048  67583   65536  32M  c W95 FAT32 (LBA)
verkefni.raw2        67584 131071   63488  31M 83 Linux

Hér er geirastærðin 512 bæti. Fyrsta deild byrjar í geira 2048 en önnur í geira 67584.

Önnur tól:

parted vinnu/verkefni.raw unit s print
mmls vinnu/verkefni.raw

mmls tilheyrir Sleuth Kit og er ekki uppsett alls staðar. Kosturinn er skýrt yfirlit yfir byrjun og lengd deilda í geirum.

Bætarstaða deildar

mount með offset= vill fá stöðuna í bætum, ekki geirum:

\[ \text{bætarstaða} = \text{upphafsgeiri} \times \text{bæti á geira} \]

Fyrsta deildin í dæminu byrjar því hér:

2048 × 512 = 1.048.576 bæti

Skelin getur reiknað þetta fyrir okkur:

echo $((2048 * 512))

Æfing 2: reiknaðu bætarstöðu

Frá geira í bæti

Deild byrjar í geira 4096 og myndin notar 512 bæta geira. Hvaða offset þarf mount?

Lausn

Við margföldum:

4096 × 512 = 2.097.152

Bætarstaðan er því 2097152. Við tökum geirastærðina úr úttaki tólsins; hún þarf ekki alltaf að vera 512.

Lesum mynd án þess að tengja hana

Áður en við notum mount getum við stundum skoðað mynd með tólum í notendarými.

Fyrir ext-skráakerfi:

debugfs -R 'ls -l /' vinnu/ext4.img

Sleuth Kit getur listað skrár án tengingar:

fls -r -o 67584 vinnu/verkefni.raw

Stillingin -o fær upphaf deildar í geirum, ólíkt mount offset= sem fær bæti. Þetta er algeng gildra.

Sum almenn safntól geta einnig þekkt skráakerfi:

7z l vinnu/verkefni.raw

Stuðningur ræðst af skráakerfi og útgáfu tólsins. Ef eitt tól skilur ekki myndina þýðir það ekki sjálfkrafa að hún sé skemmd.

Tengjum beina skráakerfismynd aðeins til lestrar

Virkjunarstaður (e. mount point) er venjuleg tóm mappa þar sem efsta mappa skráakerfisins birtist.

mkdir -p mnt/ext4
sudo mount -o loop,ro,noload vinnu/ext4.img mnt/ext4
  • loop lætur Linux meðhöndla myndskrána eins og blokktæki,
  • ro biður um lesham,
  • noload hindrar endurspilun ext4-dagbókar.

noload er ext-sértæk stilling. Við notum hana ekki í blindni fyrir FAT, NTFS eða önnur skráakerfi. Fyrir þekkt FAT-skráakerfi gæti skipunin verið:

sudo mount -t vfat -o loop,ro vinnu/fat.img mnt/fat

Staðfestum hvernig tengingin birtist:

mountpoint mnt/ext4
findmnt mnt/ext4

ro er nauðsynlegt en ekki fullkominn sandkassi

Leshamur verndar myndina gegn venjulegum skrifum. Hann verndar ekki kjarnann gegn gallaðri innri skráakerfisskipan. Notum því samt einangraða vél og uppfært kerfi.

Æfing 3: veldu stillingar

Ext4-mynd í CTF

Þú hefur staðfest að flagdisk.ext4 sé bein ext4-skráakerfismynd. Hvaða skipun tengir vinnuafritið með varfærnum hætti?

Lausn

Í einnota Linux-sýndarvél:

mkdir -p mnt/flagdisk
sudo mount -o loop,ro,noload vinnu/flagdisk.ext4 mnt/flagdisk

Við notum vinnuafrit, lesham og sleppum endurspilun ext4-dagbókar. Eftir tengingu keyrum við ekki forrit úr myndinni.

Tengjum eina deild úr heilli diskmynd

Ef við þekkjum bætarstöðuna getum við tengt deild beint:

mkdir -p mnt/deild1
sudo mount -o loop,ro,offset=1048576 vinnu/verkefni.raw mnt/deild1

Ef deildin er ext4 með dagbók bætum við noload við:

sudo mount -o loop,ro,noload,offset=34603008 \
  vinnu/verkefni.raw mnt/deild2

Við getum líka búið til lykkjutæki (e. loop device) í lesham með deildaskönnun:

sudo losetup --find --show --read-only --partscan vinnu/verkefni.raw

Úttak gæti verið:

/dev/loop0

Skoðum deildirnar:

lsblk -f /dev/loop0
sudo blkid /dev/loop0p1 /dev/loop0p2

Tengjum síðan valda deild:

sudo mount -o ro /dev/loop0p1 mnt/deild1
sudo mount -o ro,noload /dev/loop0p2 mnt/deild2

Kosturinn við losetup --partscan er að deildir birtast sem aðskilin tæki. Ókosturinn er að við þurfum stjórnandaréttindi og verðum að hreinsa bæði tengingar og lykkjutæki rétt.

guestmount: notendarýmisleið

guestmount úr libguestfs getur birt skráakerfi í gegnum FUSE og keyrir skráakerfisgreiningu í sérstakri hjálparvél fremur en að tengja myndina beint við skráakerfisrekil hýsilsins.

Sjálfvirk skoðun á dæmigerðri diskmynd:

mkdir -p mnt/guest
guestmount --add vinnu/verkefni.raw --inspector --ro mnt/guest

Ef við þekkjum deildina:

guestmount --add vinnu/verkefni.raw \
  --mount /dev/sda2 --ro mnt/guest

Aftengjum með:

guestunmount mnt/guest

guestmount þarf ekki að styðja allar framandi eða skemmdar myndir, en er góður fyrsti kostur þegar það er tiltækt.

Skoðum tengdu gögnin

Við byrjum rólega:

ls -la mnt/deild2
find mnt/deild2 -xdev -maxdepth 3 -printf '%y %p\n' | less

-xdev segir find að fara ekki yfir í önnur skráakerfi sem kunna að birtast undir trénu. Skoðum áhugaverða skrá án þess að keyra hana:

file mnt/deild2/home/ctf/note.bin
stat mnt/deild2/home/ctf/note.bin
strings -n 8 mnt/deild2/home/ctf/note.bin | head

Ekki keyra efni myndarinnar

Keyranleg skrá, skeljaskrift, .desktop-skrá eða tákntengill getur verið gildra. Ekki keyra forrit, tvísmella á skrár eða fylgja tákntenglum út úr tengda trénu. Afritaðu áhugaverða skrá í sérstaka greiningarmöppu og skoðaðu gerð hennar fyrst.

Við eigum einnig að muna að eigendaauðkenni í myndinni eru aðeins tölur. Notandi 1000 í myndinni þarf ekki að vera sami einstaklingur og notandi 1000 á hýsingarvélinni.

Aftengjum og hreinsum

Fyrst förum við út úr virkjunarstaðnum:

cd ~/ctf/skraakerfi

Aftengjum síðan:

sudo umount mnt/deild1
sudo umount mnt/deild2

Ef umount segir að tækið sé upptekið athugum við hvort skelin, less eða annað forrit sé enn inni í möppunni:

findmnt mnt/deild2
fuser -m mnt/deild2

Eftir að allar deildir lykkjutækisins hafa verið aftengdar losum við tækið:

sudo losetup -d /dev/loop0

Staðfestum:

lsblk
losetup -a

Rétt röð

Aftengdu fyrst skráakerfin og losaðu síðan lykkjutækið. Ekki eyða virkjunarmöppunni eða vinnuafritinu meðan það er enn tengt.

Æfing 4: settu hreinsun í röð

Hvaða skref kemur fyrst?

Raðaðu: losetup -d, cd út úr möppunni, umount, lsblk.

Lausn
  1. cd út úr tengda trénu.
  2. umount á öllum tengdum deildum.
  3. losetup -d á lykkjutækinu.
  4. lsblk eða losetup -a til að staðfesta hreinsun.

Lokaverkefni: tvær deildir

Æfing 5

mystery.raw gefur eftirfarandi styttu fdisk-úttak:

Units: sectors of 1 * 512 = 512 bytes
Device        Start    End Sectors Type
mystery.raw1   2048  34815   32768 W95 FAT32
mystery.raw2  34816  67583   32768 Linux

Verkefnalýsingin segir að fáninn sé í Linux-deildinni. Skrifaðu örugga leið frá auðkenningu að hreinsun.

Möguleg lausn

Við vinnum í einnota VM og staðfestum fyrst myndina með file og fdisk -l. Linux-deildin byrjar í geira 34816, svo bætarstaðan er:

34816 × 512 = 17.825.792

Tengjum vinnuafritið sem ext4 í lesham og án dagbókarendurspilunar:

mkdir -p mnt/linux
sudo mount -o loop,ro,noload,offset=17825792 \
  vinnu/mystery.raw mnt/linux

Skoðum tréð án keyrslu:

find mnt/linux -xdev -maxdepth 4 -printf '%y %p\n' | less
grep -r --devices=skip --binary-files=without-match 'gg{' mnt/linux 2>/dev/null

Eftir að fáninn finnst förum við út og aftengjum:

cd ~/ctf/skraakerfi
sudo umount mnt/linux

Ef við hefðum notað losetup myndum við einnig losa lykkjutækið eftir umount.

Samantekt

Í þessum kafla lærðum við að:

  • greina beina skráakerfismynd frá heilli diskmynd,
  • lesa deildatöflu og reikna bætarstöðu úr geirum,
  • þekkja algeng Linux-, Windows- og færanleg skráakerfi,
  • skoða myndir með debugfs, Sleuth Kit eða öðrum notendarýmistólum,
  • tengja beina mynd eða eina diskdeild í lesham,
  • nota noload fyrir ext-skráakerfi þegar við viljum forðast dagbókarendurspilun,
  • búa til read-only lykkjutæki með deildaskönnun,
  • nota guestmount --ro sem betur einangraðan valkost,
  • skoða tengd gögn án þess að keyra þau,
  • aftengja skráakerfi áður en lykkjutæki er losað.

Í næsta kafla skoðum við lýsigögn inni í myndum, skjölum og hljóðskrám.