Portál AbcLinuxu, 2. května 2025 17:47
`yes ahoj`
) a pak rebootnout. Po rebootu bys teoreticky měl vidět ty řetězce (ale jak říkám, funguje to jen na některých deskách).
echo
jako builtin.
if [ $HESLO = nbusr123 ]; then
Proč je v unlock-sudo.sh to ověřování i proti jinému heslu?To nbusr123 je v tomhle clanku heslo ke klici pro sifrovany disk. To jako myslis vazne, ze bych nekam do shell scriptu napsal heslo k sifrovanymu disku???? Jediny heslo v plaintextu mam heslo pro automount pro sambu k Windows AD uctu, je to citelny pouze pro roota (automount) a heslo k linuxu mam jiny nez to do Windows.
/opt/paranoid/unlock-sudo.sh
)
$HESLO != nbusr123
nebo testovat login heslo $HESLO = login-heslo
. Pak to pri login heslu vyskoci a nebude resumovat luks.
Mozna by bylo lepsi tam testovat nejake non-luks a non-system heslo, cili uplne nejakej jine, pak ale ztraci to zadavani hesla trosku smysl. To by bylo mozna lepsi spis otevrit po prihlaseni k xscreensaveru pak nahodit jeste jedno pro zadani hesla k disku a nebo manualne nastartovat (kvuli policii, aby nevidela, ze tam chce dalsi heslo).
#!/bin/bash
# unlock.sh - spustí se po pokusu o autentizaci přes PAM
cat - | sudo /opt/paranoid/unlock-sudo.sh `whoami`
exit $?
#!/bin/bash
# unlock-sudo.sh - je spouštěn z unlock.sh, protože se mi nepodařilo přinutit pam_exec, aby spouštěl přes sudo rovnou…
# poznámka: pokud bude návratový kód 0, obrazovka se odemkne
HESLO=`cat -`
me=$1
if [[ `grep $me /etc/shadow | awk -F "$" -v heslo="$HESLO" '{print "echo " heslo " | openssl passwd -1 -salt " $3 " -stdin"}' | sh` = ` grep $me /etc/shadow | awk -F ":" '{print $2}'` ]]; then
exit 0;
fi
echo "$HESLO" | cryptsetup luksResume home
exit $?
Mozna by bylo lepsi tam testovat nejake non-luks a non-system hesloOsobně testuji systémové, ale jinak je celkem jedno, jestli systémové nebo nějaké jiné - pokud někdo dokáže ten soubor přečíst, znamená to, že už stejně má přístup do systému a systémové heslo je mu pak už k ničemu.
Mno na standardne nastavenym firemnim notesu nenabootujes zniceho jinyho nez z disku.Což z jedné minuty dělá dvě, že :).
A nez ten vymenis, tak se ti data z pameti vypari.Instalace backdooru pokud vím, data z paměti vůbec nepotřebuje.
Ostatne i pri nejlepsich moznych podminkach pro tenhle typ utoku mas jen relativne malou pravdepodobnost (ale nenulovou samo), ze ziskas co hledas.Záleží o kterém typu se bavíme, pokud o nasazení backdooru, tak tím se dá v získat přístup k libovolným datům na počítači, která dotyčný odemkne.
Mne z toho vychádza len to, že šíriš návod, ktorý je užitočný pedofilom a teroristom, ktorý sú prakticky jedinými skupinami, kde má cold boot attack zmysel. Veď kto nerobí nič zlé, nemusí sa podobnými blbosťami zaoberať, pretože sa nemá čoho báť.Nemuzu si pomoct, ale z obou vet mi vstavaj vlasy hruzou na hlave. Ta prvni je blaznive paranoidni a ta druha zase blaznive idealisticka ... Kam na tyhle nazory ty lidi chodej.
dd if=/dev/urandom of=/tmp/bigfilea az se zaplni disk, tak smazat /tmp/bigfile
Na Linux může tohle kdykoliv přijít taky (šířilo se to přes děravý Firefox), výhoda Linuxu tady je snad adress space randomizationVýhoda Linuxu je taky třeba AppArmor – pomocí něj můžeš „zabednit“ prohlížeč (jakýkoli, ne jen Firefox) tak, aby mohl dělat jen to, co nezbytně ke svojí činnosti potřebuje – takže se např. nepodívá do ~/.ssh, ~/.gnupg nebude fungovat jako server, nebude spouštět další procesy atd.
Nejsem si jistý, jestli si všichni tihle promažou paměť, aby se z ní nedalo vytáhnout heslo, spíš bych řekl, že ne. Nic o tom nevím. Dokud nebudu mít tyhle komponenty pod kontrolou a záruku, že nikdo z nich v paměti heslo nenechal, nemůžu si být jistý.Chápu, ale líp to asi udělat nejde. Správný paranoik by možná zadával heslo rovnou na virtuální konzoli a ne přes X, čímž by to omezil v podstatě jen na ten ovladač klávesnice. Nicméně je to zajímavý námět na experiment s virtuálním strojem.
Pokud jsem dřív měl hesla aj. v nešifrovaných souborech, tak po zabezpečení mi na disku žádné takové soubory nesmí zůstat.Já to instaloval na panenský disk (respektive byla tam původně OEM Windows), nic svého jsem tam ještě neměl.
Je nějaký šikovný program, co vymaže všechno, co je na disku mimo soubory?Ano, stačí zaplnit velkým souborem. Dělá se to i při zálohování obrazu disku, kdy se takhle vytvoří dlouhé sekvence nul, které se následně zkomprimují gzipem.
Chápu, ale líp to asi udělat nejde. Správný paranoik by možná zadával heslo rovnou na virtuální konzoli a ne přes X, čímž by to omezil v podstatě jen na ten ovladač klávesnice. Nicméně je to zajímavý námět na experiment s virtuálním strojem.Tuším, že takhle se dá vytahat heslo k biosu - BIOS jede v "reálném módu" (16bit), kde na adrese 0040:001A až 0040:003D (segment : offset) je kruhový buffer na 16 kláves. Ve chvíli, kdy nastartuje systém, tak ten si obvykle začne řešit klávesnici jinak (přes různé ovladače a něco jako kruhový buffer na stisknuté klávesy má někde jinde). Bohužel často ten systém zapomene ten původní BIOSový buffer promazat a pokud tu paměť nepoužije na nic jiného (vzhledem k tomu, že na takhle nízkých adresách je tabulka přerušení a další důležité věci, tak to tam spíš asi zůstane), tak v tom bufferu to naklofané heslo zůstane.
Je nějaký šikovný program, co vymaže všechno, co je na disku mimo soubory
dd if=/dev/zero of=/cesta/libovolne_jmeno_souboru && sync && rm /cesta/libovolne_jmeno_souboru
Obrana? Co takhle ten klíč prostě rozsekat na několik kousků, přidat mezi ně slušnej padding (třeba random data) a nechat OS, ať to nastránkuje na různá místa paměti? Stránka má myslím 4K (nebo už 8K?) a těch pár KB zbytečně zaplněné paměti navíc by se mohlo vyplatit.
Já vím, jak ale jinak "schovat" klíč? To "řešení" s cache processoru je vlastně taky "obscurity". Šlo mi o to, že pokud by takto nějaký userspace program rozsekal klíč do spousty menších částí, sníží schopnost úspěšně rozluštit (pravděpodobně) poškozenou tabulku stránek a tudíž poskládat finální klíč.
Já vím, jak ale jinak "schovat" klíč?Takhle určitě ne. Ten program, který ho takhle rozstrká a pak zase zpětně sestaví, musí být v jádře. A jádro je natažené v paměti a nešifrované na disku (v /boot). Odradí to asi jenom script kiddies.
To "řešení" s cache processoru je vlastně taky "obscurity".Ne, to se zakládá na tom, že cache procesoru zvenku nevyčteš, hardwarovým zásahem asi taky těžko a po resetu se okamžitě zaplní jinými daty. Je to podobné, jako kdybys měl system-on-chip nebo TPM (jak to bylo) mezi dvěma komorami s náhodným tlakem, takže když jednu provrtáš, čip se rozpadne na kousky.
Má pointa byla čistě z pohledu userspace, to rozsekání by provedl program a jádro by to náhodně "fragmentovalo" na stránky, které by mohly být náhodně spojené/rozházené. Takový Firefox má těžko naalokováno 500MB vedle sebe ve fyzické (ne virtuální) paměti.
Na druhou stranu - je pravda, že kernel vývojáři v současnosti pracují na defragmentaci paměti, takže výsledný efekt by nemusel stát za to.
Ani TPM, ani jiné šifrovací karty neumí to, co potřebujeme – nemít otevřená data jinde než v procesoru. My nepotřebujeme černou krabičku, z které padá otevřený text. My potřebujeme procesor, z kterého lezou zašifrovaná data určená pro fyzickou paměť.
Dost to komplikuje architektura x86, která má do určitého bloku mapované I/O a která má DMA buffery v téže fyzické paměti, kterou chceme mít zašifrovanou.
nehledě k tomu, že na Linuxu je backend k Truecryptu dm-cryptTruecrypt má na linuxu jako backend dm-crypt? Měl jsem za to, že novější verze (tuším od 5.0 výše) už nemají modul do kernelu, ale fugují přes FUSE ...
Tohle jde jednoduše testovat ve virtuálním stroji, který suspendnete a hledáte známou sekvenci - heslo zadané z klávesnice - v obrazu RAM na diskuTohle je trochu ztížené tím, že to heslo se tam nemusí objevit "v plaintextu" - pokud bude za každou klávesou pár bajtů pro flagy (v DOSu byl v 16znakovém buferu 2. bajt na extended flagy), případně bude navíc každá klávesa dvakrát (zmáčknuto + odmáčknuto) tak mezi jednotlivými znaky hela bude "nějaký bordel", v horším případě se tam ty klávesy objeví nějak "zakódované" (Q=1, W=2, E=3, R=4, T=5 ....) kdy to heslo takhle nebude vidět, v "nejhorším" případě tam může být např. nějaký spoják s ukazateli, takže to heslo tam nemusí být ani popořadě.
luksSuspend maže z paměti klíče používané v cryptoAPI (to je přesně to, co hledá ten prográmek) a klíč v interní mapovací tabulce dm-cryptu (jíž je klíč součástí, "dmsetup table --showkeys"). Pozor na to, že v paměti jsou stále stránky s odšifrovanými (plaintext) daty. Něco jde vypláchnout, ale některá data tam prostě zůstanou.Teoreticky by to šlo řešit, že při suspend se vygeneruje náhodný klíč, tím se zašifruje skoro celá RAM včetně všech klíčů (tedy kromě suspend a téhle šifrovací/dešifrovací rutiny), pak se vygeneruje z hesla kterým má být prováděno resume další klíč, kterým se zašifruje ten náhodný (jehož originál se pak smaže, ale může se uložit jeho hash) Při dešifrování se zadá heslo, dešifruje se klíč od paměti, pokud hash sedí, dešifruje se pamět, pokud ne, bylo zadáno blbé heslo (pokud by se pokračovalo v dešifrování paměti, byl by z toho akorát odpad) Ve chvíli, kdy je to takhle suspendováno, tak by to mělo být rezistantní i vůči coldboot (klíče v paměti nejsou ...)
Truecrypt má na linuxu jako backend dm-crypt? Měl jsem za to, že novější verze (tuším od 5.0 výše) už nemají modul do kernelu, ale fugují přes FUSE ...Ano, IIRC verze 4 mela vlastni dm modul, 5 mela ciste FUSE, 6 a vyse pouziva dm-crypt (krome nejakych kompatibilnich konterjneru, takze FUSE tam je stale take).
Tohle je trochu ztížené tím, že to heslo se tam nemusí objevit "v plaintextu"jiste. ale v nejake forme to tam bude. a pokud to nekomu stoji za to, urcite si da praci to poskladat. a s tom virtualni masinou si muzu udelat snapshot pred zadanim a po zadani a podivat se, co se kde zmenilo. jakmile vim, jake patterny to generuje, jde to automatizovat.
Teoreticky by to šlo řešit, že při suspend se vygeneruje náhodný klíč, tím se zašifruje skoro celá RAM včetně všech klíčůdm-crypt je driver na blokove zarizeni, to by byl uplne jiny projekt, ktery by musel byt navazany na memory management. a nemyslim, ze by to k necemu bylo - proc to pak nehibernovat do sifrovaneho swapu radsi?
proc to pak nehibernovat do sifrovaneho swapu radsi?Odswapovat 2 - 16 GB paměti (dle stroje) trvá ... dlouho, řádově minuty (dle RAM a rychlosti disku). To samé pak zpětné načtení z disku. Přešifrovat celou paměť sice také není úplně hned (dle Truecrypt benchmarku core 2 quad dosahuje s AES 344 MB/sec, rozumně rychlé harddisky mají řádově tak 80 - 100 MB/sec), ale je to o dost rychlejší (v obou případech šifruji tak jako tak celou paměť, jen to pak nemusím pak ukládat na disk :)
PS2: Má někdo nápad jak tuto obranu prolomit kromě fyzického vytlučení hesla z uživatele?
Nenápadná neutralizace panic keyboard
To by si měl přečíst Tom co poslal disk na reklamaci do Mironetu. Nebo aspoň něco o šifrování.
Jinak krom ColdBoot útoku mě napadl další způsob. Např. v takovém Ubuntu, pokud nainstaluješ kexec, tak ti automaticky bez jakéhokoliv ptaní přidá k parametrům jádra crashkernel=128M (vzhledem k tomu, že GRUB2 už nezobrazuje ani nabídku jsem si toho všiml až když mi ta paměť začala scházet). Pak si stačí jen vyčíhat okamžik, kdy bude klíč v paměti, pomocí klávesového komba Alt+SysRQ+C ručně navodit umělý Crash systému (Kernel Panic), počkat než jádro sletí a přebootuje pomocí kexecu nové (crash) jádro, které krom roota také nabídne v souboru /proc/vmcore, předchozí jádro jak vypadalo v okamžiku zmáčknutí zkratky. Stačí už jen někam zkopírovat, stáhnou k příslušnému jádru debugovací symboly (vzhledem k tomu, že většina běžících jader je distribučních to ani není moc namáhavé), podívat se jakým systémem byl zašifrovaný příslušný oddíl nebo adresář, mkrknout do zdrojáků v které proměnné nebo v kterém bufferu je držen klíč, spustit gdb a k němu příslučný dump, print jmeno_promenne a práce je hotová. Některé pokročilejší distra (jako Fedora) to jádro dokonnce pěkně pročistí a neservírují ho do /var/crash (schálně, kdo šifruje /var, tak nechť hodí kamenem) a nebo mají takové pokročilé featury jako přímý debuging spadeného jádra přímo z crashkernelu, takže člověk se nemusí ani namáhat s rebootem. Asi si něco zašifruju abych se mohl hrát.
A věřím, že každé distro obsahuje takových kachen několik. Vždyť např. v mém případě není neobvyklé abych přišel k počítači a u Fedory mi v rožku viselo upozornění na update balíků kvůli bezpečnostním chybám některých důležitých služeb (které většinou běží pod rootem) a u každé bezpečností chyby link na bugreport (holt chlapci z RedHatu jsou svědomití) kdy u některých nemusí být ani nemožné natrefit na demonstrační expolit. Se pak člověk nemusí babrat ani s rebootem a pokud se mu podaří dostat se do některého rootovského procesu, může si libovolně šmejdit po paměti a najít si ten klíč (nadruhou stranu, když je někdo rootem, tak se asi ani nemusí babrat s tím klíčem).
Nemít paměť tak na ráně. Například zařízení typu system-on-chip mají paměť spolu s procesorem v jednom BGA pouzdře, případně ji mají zalitou takovým tím hnusným asfaltem.No, nevim. Ještě jsem teda na SoC s integrovanou pamětí nenarazil. Až takový najdeš, dej mi prosím vědět. Ihned odkoupím. Většina boardů ji má vyvednou do samotného čipu a se SoC pomocí plošňáku propojenou. Na druhou stranu je pravda, že většina jich je natvrdo na ten plošňák připájených a má to tak malé piny, že i ten epoxid je proti tomu hadr (ale jde to – buď s mikropájkou a pevnou rukou a nebo pomocí nějakých triků ke kterým klidně nabídnu link). No zas většina takových boardů má JTAG (ale to má skoro valná většina dnešních zařízení – vždyť Xboxy se už dneska pomalu ani jinak nehackují) a nebo rovnou eJTAG. Přes ten není problém přepnout procesor do debug módu a podstrčit mu libovolné instrukce. Já se teď např. hrabu v PrAcc kódu, který má za úkol dostat se skrze virtuální adresu na NAND a vytáhnout z ní do Test Data Out její obsah. No přepsat tu virtuální adresu z adresy NAND čipu na RAM čip je minimum. Takže není problém přijít, udělat si v rychlosti skrze JTAG dump celé paměti (novější mrchy skrze ten JTAG podporují už i DMA módy
The industry standard finally became an IEEE standard in 1990 as IEEE Std. 1149.1-1990[1] after many years of initial use. That same year Intel released the first processor with JTAG: the 80486takže bůh ví jak jsou na tom se zpětnou kompatibilitou Intelí procesory dnes. Ale všechny ostatní populární non-X86 ho mají určitě. I s dokumentací. A to včetně TouchBooku.
Na konferenci LinuxAlt (6.-7. 11. 2010) předvede Petr Krčmář ve svém příspěvku Jak prolomit šifrování disku za dvě sekundy takzvaný cold boot útok.Sakra, to je mi docela líto že jsem nebyl přítomen. Mohla to být docela sranda. Doufám, že to bude někde dostupné.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.