Titkosított pendrive Linux és Windows alatt root jog nélkül

Most nézem, alig írtam tavaly szeptember óta, az egész elfér az oldalsó tízes listában. Ez a bejegyzést még valamikor az őszi félévben kezdtem el, azóta sem jutottam a végére. Már nem is fogok, de később még esetleg jól jöhetnek az itt leírtak.

Az előző félévben elég sok laborom volt, többnyire Windows XP-s gépekkel, rendszergazdai jog nélkül. A gépeken persze sosem voltak fent a kedvenc programjaim, mint a Firefox, Putty, WinSCP stb. Ezeket pendrive-on hurcolásztam magammal, de jó lett volna titkosítani is a fájlokat, ki tudja mikor hagyom el az eszközt. Windowsra is létezik pár on-the-fly titkosító, de ezek telepítéséhez adminisztrátori jog szükséges, másrészt telepíteni sem lett volna kedvem minden labor előtt.

Az előbbiek miatt kezdtem el egy olyan titkosítási megoldáson dolgozni, amihez nem szükséges rendszergazdai jog. A félév végére nem fejeztem be teljesen, azóta meg már nincs is rá szükségem, a most használt gépekhez van root jogom és tudom használni a LUKS-os megoldást, amiről már korábban írtam.

Szóval laborokon tipikusan Windows XP-s gépek előtt ücsörgünk, saját pendrive-val, de jobb lenne, ha a rajta lévő adatok titkosítva lennének. További igény, hogy a titkosított adatok Linux alatt is előcsalhatóak legyenek.

Kész megoldás hiányában nekiálltam barkácsolni, amihez olyan GNU/GPL licences eszközöket használtam amelyek léteznek mind Linux, mind Windows alá.

Először jelszavas ZIP fájlokra gondoltam, amelyeket egy-egy batch fájl csomagolna ki és be, hogy lehetőleg csak egyet kelljen kattintani (illetve begépelni a jelszót). Ahogy nézegettem a man oldalakat, úgy tűnik, hogy nem minden ZIP tömörítő kezeli ugyanúgy a titkosított fájlokat, valamint az USA jogi korlátozásai is bejátszhatnak. Persze, ha én viszem a zip- és unzip.exe-t is, akkor ez nem annyira gond. Viszont ha már titkosítani kell, akkor legyen GnuPG, biztos ami biztos alapon. Tud szimmetrikusan is kódolni, alapértelmezetten CAST5 algoritmust használ, bár biztosan le lehet cserélni, ha nem tetszik. Windowsos portja természetesen van.

A GPG-vel viszont annyi baj van, hogy könyvtárat nem tud titkosítani, csak a fájlokat darabonként, így a titkosítás előtt valamivel előtte össze kell csomagolni a fájlokat. Erre a ZIP is használható. (A fájlonkét történő titkosítás az eredeti fájl- és könyvtárnevek meghagyásával egyébként sem szerencsés, ezekből is lehet információkat kinyerni.)

A tömörítés után még törölni kell az eredeti fájlokat. Ezt a ZIP is képes megtenni, de ezt nem szabad rábízni. Törlés helyett inkább felül kell írni őket. A felülírást kihagyva egy kicsit is felkészült támadó bármikor vissza tudná állítani őket, hiszen törlésnél csak a fájl bejegyzése törlődik, az adatok még ott maradnak a lemez blokkjaiban. Ugyanez a helyzet a GPG által titkosított eredeti ZIP fájllal is.

Mágneses elven működő lemezeknél a felülírást többször is érdemes megejteni, tudomásom szerint viszont a flash-nél ezt elegendő egyszer végrehajtani ahhoz, hogy ne lehessen többet kinyerni a pendrive-ról a korábbi adatainkat. (Bár azért vannak kétségeim.)

Erre a felülírásra az Unix/Linux-okon régóta megtalálható shred tökéletes, neki is van Windows portja.

Az eddigi háromlépéses titkosítási művelet összefogható egy batch fájlba. Pontosabban kettőbe. Az első a pendrive bedugása után dekódolja a ZIP fájlt, majd kitömöríti, végül törli a ZIP fájlt, illetve a titkosított változatot is. Lehúzás előtt a másik fájl pedig ugyanezt eljátssza visszafele: tömöríti a titkosítandó tartalmakat, titkosít, majd felülírja és törli a titkosítatlan fájlokat.

A folyamatból látszik, hogy (legrosszabb esetben) csak az eredeti tárterület harmadát lehet csak hasznos adat tárolására használni. Egyharmad kell az eredeti fájloknak, egyharmad az ZIP fájlnak, a harmadik harmad pedig a titkosított ZIP fájlnak. Ezen kívül még szükséges némi hely a segédprogramok számára is.

A sorrenden picit lehet optimalizálni. Ha a dekódolás után rögtön töröljük a titkosított fájlt, és csak utána kezdjük el kicsomagolni az így létrejött ZIP-et, akkor a rendelkezésre álló tárterület harmada helyett akár felét is hasznosíthatjuk. Ugyanez érvényes az eltávolítás előtti titkosításra.

Beszerzendő fájlok

A fentebb vázolt rendszer összerakásához a következő listában felsoroltam a beszerzendő programokat. Töltsd le mindet, hozz létre a pendrive-on egy \bin könyvtárat, majd másold bele az említett binárisokat. Bár mindegyik valamilyen szabad licenc alatt érhető el, mégsem akartam kész csomagot készíteni. Félek, hogy a későbbieknek nem frissíteném és elavulttá válnának az összeállításban szereplő programok. Ez egy GnuPG-ben előforduló biztonsági hiba esetén különösen nagy veszélyt jelentene.

Ha ezek megvannak, akkor a következő két bat fájlt kell a pendrive gyökérkönyvtárába tenni.

pack.bat

Ez a batch fájl tömöríti és titkosítja a secure könyvtár tartalmát. Esetleg érdemes lehet a tömörítés mértékén állítani (-2 kapcsolóban nagyobb számot kell megadni – 9 a maximum). A -T hatására a tömörítés után még le is teszteli az elkészült archívumot.

Nyerhetünk még némi időt, ha a ZIP kimenetét rögtön átadjuk a GPG-nek (bin\zip -r - secure | gpg --output secure.zip.gpg --symmetric), de ekkor a -T kapcsoló hatástalan, így elmaradna ez az ellenőrzés.

@echo off
echo pack.bat by palacsint - 2007. 10. 27. - http://palacsint.hu/ - GNU/GPL

bin\zip -T -r -2 secure.zip secure
if errorlevel 1 goto zipError
echo "Zip OK"

bin\find.exe secure -type f -exec bin\shred --iterations=1 --zero --remove {} ;
rd secure

bin\gpg --output secure.zip.gpg --symmetric secure.zip
if errorlevel 1 goto gpgError

echo "gpg OK"

bin\shred --zero --iterations=1 --remove secure.zip

exit /b 0

:zipError
echo "ZIP error"
exit /b 1

:gpgError
echo "gpg error"
exit /b 2

unpack.bat

Végül a dekódolást és kitömörítést végző batch fájl:

@echo off
echo unpack.bat by palacsint - 2007. 10. 27. - http://palacsint.hu/ - GNU/GPL

if NOT EXIST secure.zip.gpg goto fileNotFound

bin\gpg --output secure.zip --decrypt secure.zip.gpg
if errorlevel 1 goto gpgError
bin\shred --zero --iterations=1 --remove secure.zip.gpg

echo "gpg OK"

bin\unzip secure.zip
if errorlevel 1 goto unzipError

echo "unzip OK"

bin\shred --zero --iterations=1 --remove secure.zip
exit /b 0


:unzipError
echo "unzip error"
exit /b 1

:gpgError
echo "gpg error"
exit /b 2


:fileNotFound
echo secure.zip.gpg not found.
exit /b 3

Valami hasonló összerakható Linux alatt is shell szkriptként.

Hozzászólások

Valami hasonló összerakható Linux alatt is shell szkriptként.

Szia!
Tetszik a megoldasod!
Irnal egy shell szkriptet is ide?
Udv: kemecs

Nem készült el...

Hali!
A linuxos shell szkript nem készült el végül, mire időm lett volna rá, már vége volt a félévnek. Azóta meg ezt sem használom, van minden gépre admin accom, amit használok, így pedig a FreeOTFE kényelmesebb.

üdv,
Miki

Tartalom átvétel