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:
- Skráakerfismynd (e. filesystem image) byrjar beint á skráakerfi, til dæmis ext4 eða FAT.
- Diskmynd (e. disk image) líkir eftir heilum diski og getur innihaldið deildatöflu og margar diskdeildir.
- 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:
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
looplætur Linux meðhöndla myndskrána eins og blokktæki,robiður um lesham,noloadhindrar 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
cdút úr tengda trénu.umountá öllum tengdum deildum.losetup -dá lykkjutækinu.lsblkeðalosetup -atil 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
noloadfyrir ext-skráakerfi þegar við viljum forðast dagbókarendurspilun, - búa til read-only lykkjutæki með deildaskönnun,
- nota
guestmount --rosem 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.