Ge­wis­te da­ta te­rug­vin­den

Ge­ge­vens ver­wij­de­ren en weer te­rug­vin­den

C’t Magazine - - Inhoud 11/2018 - Jürgen Sch­midt

Ik wil­de de ou­de wijs­he­den over het wis­sen van ge­ge­vens niet zo­maar ac­cep­te­ren. Dus ben ik zelf maar eens op zoek ge­gaan naar ver­wij­der­de ge­ge­vens. Je ge­looft nooit, wat ik toen vond.

De­ze twee ar­ti­ke­len over het op de juis­te ma­nier ver­wij­de­ren van ge­ge­vens ko­men voort uit een per­soon­lij­ke be­hoef­te. Ik was ver­ant­woor­de­lijk voor een Win­dows-pc waar­op on­ver­sleu­tel­de iPhone-back-ups wer­den ge­maakt. Die moesten daar weg en de com­pu­ter moest ver­der voor an­de­re din­gen ge­bruikt wor­den. Toen ik de back-ups had ver­wij­derd in iTu­nes, be­dacht ik me in­eens iets. De ge­ge­vens zelf wa­ren waar­schijn­lijk he­le­maal niet ver­dwe­nen. Wat nu? Al­le ge­raad­pleeg­de des­kun­di­gen wa­ren una­niem: "Al­les he­le­maal wis­sen is de eni­ge ma­nier om van die ge­ge­vens af te ko­men."

Dat kwam ech­ter om ver­schil­len­de re­de­nen niet in aan­mer­king. Ik wil­de ook niet zo­maar ge­noe­gen ne­men met die on­dui­de­lij­ke si­tu­a­tie. Er moest een tus­sen­weg zijn. Dus ging ik tes­ten. Na de eer­ste, enigs­zins ver­war­ren­de re­sul­ta­ten bracht ik meer en meer me­tho­diek in de tests aan om be­ter te be­grij­pen wat ik ei­gen­lijk zag. Hier is het re­sul­taat.

Wat de test be­treft: ik test­te naast el­kaar een stok­oud no­te­book met Win­dows Vis­ta en een con­ven­ti­o­ne­le har­de schijf en een mo­dern Win­dows 10-sys­teem met een ssd. Het ver­loop was steeds het­zelf­de. Ik heb met een paar snel in el­kaar ge­knut­sel­de Po­werShell-scripts veel be­stan­den van ver­schil­len­de groot­te aan­ge­maakt in een map­hi­ë­rar­chie. Al­le be­stan­den be­vat­ten de test­string 'ct­test123' in ver­schil­len­de va­ri­an­ten, die aan­ga­ven hoe groot het be­stand oor­spron­ke­lijk was en waar de tekst in het be­stand stond. De rest van het be­stand was wil­le­keu­ri­ge rom­mel of zelfs leeg.

Ver­vol­gens voer­de ik de ver­wij­der­op­dracht uit die ik wil­de tes­ten en sloot Win­dows af, want bij de tests mocht het be­stu­rings­sys­teem me zo min mo­ge­lijk voor de voe­ten lo­pen. Voor de ze­ker­heid voer­de ik voor de her­start nog een 'sync' uit, dat even­tu­e­le nog niet weg­ge­schre­ven blok­ken naar de schijf zou schrij­ven (Mark Rus­si­n­o­vich heeft die han­di­ge tool voor Unix ge­schikt ge­maakt voor Win­dows). Soms rom­mel­de ik zelf nog een beet­je rond op het sys­teem of liet het 's nachts draai­en, om Win­dows een beet­je tijd te ge­ven voor het op­rui­men. Daar­na start­te ik mijn ana­ly­se­sys­teem van­af een usb-stick. Daar­voor kun je ei­gen­lijk bij­na el­ke wil­le­keu­ri­ge li­veLi­nux ge­brui­ken. Gang­ba­re Li­nux-sys­te­men be­vat­ten al­le be­no­dig­de hulp­mid­de­len.

Som­mi­ge sys­te­men be­vat­ten ook de da­ta­re­co­ve­ry-tool pho­to­rec, die vaak ver­ba­zing­wek­kend pres­teert bij het te­rug­ha­len van ver­wij­der­de be­stan­den. Maar daar ging het mij niet om. Wat ik wil­de we­ten was iets fun­da­men­te­lers. Duikt mijn test­string nog op, en zo ja, waar dan? Voor mij een dui­de­lijk ge­val voor de uni­ver­se­le tool grep, die ik di­rect aan de slag zet­te op de test­par­ti­tie /dev/sda2. De pa­ra­me­ter -a in­stru­eer­de grep om dit block-de­vi­ce als een tekst­be­stand te door­zoe­ken op 'ct­test123', -b zorg­de voor de by­te-off­sets van de tref­fers. Toen kwam het eer­ste pro­bleem: grep stop­te er tel­kens mee met ge­heu­gen­fou­ten.

Een beet­je goog­e­len gaf de re­den en een op­los­sing: grep werkt per re­gel. Som­mi­ge be­stan­den be­vat­ten zul­ke lan­ge ge­ge­vens­blok­ken, zon­der re­ge­lein­den, dat grep te wei­nig ge­heu­gen had. De op­los­sing kwam van twee klei­ne Li­nux-tools:

cat /dev/sda2 | tr '\0' '\n' | grep

-ba 'ct­test123'

Dit ver­ving al­le null-te­kens door de re­ge­lein­den die grep no­dig heeft. Zoe­ken met grep in de­ze wir­war le­ver­de soms ver­ba­zing­wek­kend lan­ge lijs­ten met ct­test123hits op. Ik con­tro­leer­de de vond­sten steek­proefs­ge­wijs met een hex-dum­per:

xxd -s <off­set> /dev/sda2 | less

en in al­le ge­val­len stond daar in­der­daad de ge­zoch­te te­ken­reeks.

Om te be­pa­len in wel­ke con­text ze daar ston­den, wis­te ik sys­te­ma­tisch ver­schil­len­de de­len van het NTFS-be­stands­sys­teem met de Li­nux-tool ntfs­wi­pe en keek dan nog een keer. Ntfs­wi­pe is een bij­pro­duct van het NTFS-stuur­pro­gram­ma voor Li­nux, waar­mee het te ver­wij­de­ren ge­bied kan wor­den ge­se­lec­teerd. Je kunt kie­zen uit MFT, Pa­ge­fi­le, Tails, Di­rec­to­ry, Log­fi­le, Un­del­e­ta­ble en Unu­sed.

Het pro­gram­maatje maak­te ove­ri­gens een heel po­si­tie­ve in­druk in mijn tests en was zeer gron­dig. Na een run met --all vond de vol­gen­de con­tro­le­run over de he­le par­ti­tie in­der­daad geen test­strings meer, op één uit­zon­de­ring na, waar­op ik nog te­rug­kom. Daar­bij wer­den in to­taal hon­der­den ver­wij­der­ac­ties ge­com­bi­neerd, die geen pro­ble­men ver­oor­zaak­ten. Bo­ven­dien liet ntfs­wi­pe pre­cies zien waar het ver­wij­der­pro­ces ge­faald had. Maar ik loop op de za­ken voor­uit.

Mis­sers bij het wis­sen

Bij de eer­ste stap do­cu­men­teer­de ik een ge­wo­ne ver­wij­de­ring en wat daar­na nog op de schijf te zien was. Daar­bij heb ik ver­schil­len­de ver­wij­der­me­tho­den ge­test, zo­als het le­gen van de prul­len­bak, ver­wij­de­ren met in­ge­druk­te Shift-toets in Ver­ken­ner en het ver­wij­de­ren van­af de op­dracht­re­gel, zon­der daar­bij ver­schil­len te vin­den.

Zo­als ver­wacht wer­den bij­na al­le ver­wij­der­de be­stan­den gro­ten­deels in­tact te­rug­ge­von­den op de har­de schijf. Op de ssd wa­ren de ge­ge­vens ech­ter gro­ten­deels ver­dwe­nen. En dat bij­na met­een. Zo­als te ver­wach­ten, zorg­de de TRIM-op­dracht er­voor dat de ssd de ge­heu­gen­ge­bie­den van de ver­wij­der­de be­stan­den als vrij mar­keer­de. Hij re­tour­neer­de al­leen nul­len voor de vol­gen­de lees­ac­ties. Ten­min­ste, bij bij­na al­le be­stan­den.

Klei­ne be­stan­den, die een plaats von­den in de MFT zelf, ont­snap­ten re­gel­ma­tig aan de­ze be­wer­king. Niet al­le en ook niet al­tijd even­veel, maar grep kwam steeds met een aan­tal van die klei­ne ct­test123be­stan­den aan­zet­ten. Met ntfs­wi­pe -m wer­den de ge­ge­vens ech­ter op een be­trouw­ba­re ma­nier uit de MFT ver­wij­derd. In som­mi­ge ge­val­len be­von­den zich ook de­len van gro­te­re be­stan­den in het log­boek van het Win­dows-be­stands­sys­teem. Vreemd ge­noeg over­leef­den ze daar zelfs ver­schil­len­de Win­dows-her­starts.

Dit laat­ste her­haal­de zich tij­dens het vei­lig ver­wij­de­ren, dus het over­schrij­ven met de Sys­In­ter­nals-tool SDe­le­te. Zo­wel op de ssd als op de har­de schijf be­vat­te het log­be­stand van het NTFS-be­stands­sys­teem de­len van het be­gin van gro­te be­stan­den. De­ze res­te­ren­de ge­ge­vens ge­ven ech­ter re­la­tief wei­nig pro­ble­men. Ze ver­dwij­nen waar­schijn­lijk na een kor­te tijd van­zelf.

Ook bij het wis­sen van vrije ge­heu­gen­ge­bie­den met de Win­dows-toe­pas­sin­gen Cip­her en SDe­le­te ble­ven res­ten ach­ter. Som­mi­ge klei­ne test­be­stan­den von­den weer be­schut­ting in de MFT, en dat zo­wel op de ssd als de har­de schijf. Dat is wel een pro­bleem. De in­gan­gen in de MFT kun­nen slechts een zeer klei­ne hoe­veel­heid ge­ge­vens be­vat­ten, maar voor een wacht­woord­be­stand of een ge­hei­me sleu­tel kun­nen de ty­pi­sche 512 by­tes net ge­noeg zijn. En als ver­wij­de­ren­de ge­brui­ker heb ik geen idee wel­ke be­stan­den in de MFT staan.

Ik kan niet echt ver­kla­ren waar­om de­ze ge­ge­vens zo­wel het wis­sen van vrije ruim­te als de TRIM ont­lo­pen. Ik ver­moed dat Win­dows op de een of an­de­re ma­nier be­slag legt op de MFT-in­gan­gen en ze be­schermt te­gen over­schrij­ven door nieuw aan­ge­maak­te be­stan­den. Ntfs­wi­pe hoeft daar om­dat het van­uit Li­nux ope­reert geen re­ke­ning mee te hou­den en kan ge­woon de ge­ge­vens van al­le MFT-in­gan­gen ver­wij­de­ren die als vrij ge­mar­keerd zijn.

Ver­ra­der­lij­ke zoek­tocht

Bij toe­val stuit­te ik op iets in­te­res­sants. Toen ik op een och­tend niet meer ze­ker wist of ik de dag er­voor al nieu­we test­be­stan­den had ge­maakt, zocht ik een beet­je sla­pe­rig in Ver­ken­ner naar de test­string 'ct­test123'. Geen be­stan­den. De vol­gen­de testruns ont­hul­den ech­ter twee hard­nek­ki­ge ct­test123-tref­fers die zelfs ntfs­wi­pe niet kon eli­mi­ne­ren. Al snel drong het tot me door dat ik me­zelf in de nes­ten had ge­werkt. Win­dows had mijn zoek­op­drach­ten op­ge­sla­gen in de zoek­ge­schie­de­nis, die zich na­tuur­lijk op de har­de schijf be­vond. Om pre­cies te zijn, vond ik de te­ken­reeks in het be­stand NTUSER.DAT. Dat is de ge­brui­kerstak van het re­gis­ter.

Na­ïef als ik was, wis­te ik de zoek­ge­schie­de­nis met de be­tref­fen­de op­tie in Ver­ken­ner en dacht van het pro­bleem af te zijn. Tot mijn ver­ba­zing do­ken de­ze tref­fers bij de vol­gen­de keer zoe­ken nog steeds op. En dat niet al­leen in het au­to­ma­tisch aan­ge­maak­te be­stand ntuser.dat.LOG1, maar ook in het ori­gi­neel. Toen volg­de een uren­lan­ge Odys­see met als doel dat ver­draai­de 'ct­test123' uit het Win­dows-sys­teem te ver­wij­de­ren, zo­dat ik door kon gaan met de ver­wij­der­tests. Ui­t­ein­de­lijk greep ik in wan­hoop naar de bot­te bijl in de vorm van een hex-edi­tor. Daar­mee ver­an­der­de ik de te­kens 'ct' in 'ab', met voor­bij­gaan aan het be­stands­sys­teem, recht­streeks op de juis­te plek op de har­de schijf. De­ze Ha­ra­ki­riac­tie luk­te en had geen ver­de­re ge­vol­gen, maar pro­beer dat maar lie­ver niet thuis! Ik do­cu­men­teer dit al­leen om te la­ten zien hoe hard­nek­kig ge­ge­vens in een Win­dows­sys­teem kun­nen vast­zit­ten.

Na mijn tests be­grijp ik be­ter hoe het ver­wij­de­ren werkt en kan ik de ri­si­co's dat ver­wij­der­de ge­ge­vens weer op­dui­ken be­ter in­schat­ten. Het vol­gen­de is mijn per­soon­lij­ke con­clu­sie, die je al­leen met de no­di­ge voor­zich­tig­heid op je ei­gen si­tu­a­tie mag toe­pas­sen. Het groot­ste ge­vaar zit hem in de ko­pie­ën van de ge­ge­vens, die op­dui­ken op plaat­sen waar je ze niet ver­wacht en die dus ook niet ver­wij­derd wor­den, zo­als na een zoek­ac­tie in Ver­ken­ner. Af­ge­zien daar­van vol­doet bij ssd's met een wer­ken­de TRIM de ge­wo­ne ver­wij­de­ring aan mijn be­hoef­ten. Het re­s­t­ri­si­co van in the­o­rie uit­lees­baar flash­ge­heu­gen neem ik op de koop toe.

Als je vei­lig moet ver­wij­de­ren, is een com­bi­na­tie van over­schrij­ven en wis­sen van de vrije ruim­te het bes­te. Zorg­wek­kend zijn de klei­ne be­stan­den die in de MFT te­recht­ko­men. Daar­bij helpt ntfs­wi­pe, van­af een snel ge­star­te Li­nux-li­ve-cd. De Win­dows-in­stal­la­tie met de iPhone-back-ups kreeg in elk ge­val een twee­de le­ven na een gron­di­ge ntfs­wi­pe.

Door recht­streeks naar het blok-de­vi­ce te kij­ken, wa­ren al­le res­te­ren­de test­ge­ge­vens op de schijf op te spo­ren.

Een zoek­op­dracht slaat ook al ge­ge­vens op de har­de schijf op, die je maar moei­lijk weer weg krijgt.

Newspapers in Dutch

Newspapers from Netherlands

© PressReader. All rights reserved.