Keepass a Yubikey

Keepass a Yubikey

Categories
You are here:
< Zpět

Minulý článek bylo takové nakousnutí toho, co všechno je potřeba pořešit pro kvalitní zabezpečení kritických dat. Dneska bych se chtěl věnovat tomu, jak vytvořit opravdu bezpečné úložiště pro Vaše data a přitom mít možnost ho mít kdekoli v cloudu. To jsou totiž většinou dva největší protiklady. Naštěstí je způsob, jak toto skloubit.

Odpovědí je aplikace KeePass a Dropbox (nebo kterékoli jiné synchronizované úložiště). Úplně slyším, jak teď většina z Vás říká cosi o tom, že je pěkná blbost dát do Dropboxu super-bezpečná data. Kupodivu to blbost není. Pojdmě na to.

Začnu KeePassem. Jak jsem už psal, jde o free a open-source bezpečnostní program, který umožňuje bezpečně a strukturovaně ukládat informace. KeePass tu je již řadu let a za tu dobu získal spoustu ocenění a certifikací, takže ho lze považovat za bezpečný.

V základu není KeePass nic jiného, než jakási kartotéka, kde můžete do složek přidávat položky. Ke každé položce můžete přiřadit uživatelské jméno, heslo, poznámku, url a pak hromadu dalších informací. Všechna zadaná data KeePass ukládá do jednoho souboru, který může (a měl by být) být zašifrován.

V základu umožňuje KeePass zašifrovat soubor pouze heslem, což není špatné, ale abychom dosáhli požadované super-bezpečnosti, muselo by být heslo raději opravdu dlouhé. Problém dlouhého a složitého hesla je pak v jeho zadávání. Je to zdlouhavé a otravné.

A tady přicházejí na řadu pluginy (rozšíření) do KeePassu. Díky nim lze do KeePassu doplnit obrovské množství dalších funkcí.

To, co jako první do KeePassu doplníme, je podpora pro Yubikey. Způsobů, jak Yubikey do KeePassu integrovat je více, ale nejlépe mi vychází integrace skrz Challenge-Response protocol, který Yubikey podporuje. Zároveň je možné nastavit stejné heslo do více Yubikey, takže není nutné přenášet jeden fyzický klíč, ale lze použít neomezené množství klíčů.

Abych trošku vysvětlil, o co jde. Zabezpečení Challenge-response spočívá v tom, že máte nějaký tajný klíč, který nahrajete jak do Vašeho Yubikey (viz dále), tak ho nastavíte do KeePassu. Během přihlašování pak KeePass vygeneruje náhodný řetězec, který do Yubikey pošle a nechá ho v Yubikey zašifrovat (klíčem, který jste tam původně nastavili). Yubikey poté náhodný řetězec vrátí a KeePass ho porovná s hodnotou, kterou sám vypočítal pomocí tajného klíče. Tím ověří, že Yubikey zná správné heslo. Zároveň ale toto tajné heslo nikdy neopustí ani KeePass, ani Yubikey. Prosté a jednoduché :).

Díky tomu přidáváte velkou část zabezpečení, aniž byste museli cokoli složitého psát. Zároveň se ale nelze obejít úplně bez hesla. Důvod je, že (alespoň u nás doma) zůstavají Yubikey zastrčené v PC. Představa přenášení a neustálého odpojování nebyla akceptována z důvodu snadného použití. Proto je potřeba pořešit ještě situace, kdy by Vám někdo ukradl notebook včetně Yubikey. Bez hesla by najednou existoval způsob, jak se Vám do Vašich dat dostat.

A proto je potřeba přidat ještě heslo. Ale to už nemusí být extra složité. A to ze dvou důvodů. Zaprvé, díky Yubikey klíči už nelze tak snadno použít brute-force útok (automatické tipování miliard kombinací), jelikož pro každé vygenerování hesla z Yubikey je potřeba ručně stlačit tlačítko na klíči. A zadruhé, v případě krádeže se o ni pravděpodobně vcelku rychle dozvíte a můžete provést náležitá protiopatření, takže i kdyby se nějaký útok uskutečnil, než proláme i to jednoduché heslo, vy už budete mít dávno kritické přístupy změněny.

Třetí obrovský benefit napojení Yubikey na KeePass je v tom, že se do KeePassu nelze přihlásit na dálku. Představme si scénář, kdy se Vám do počítače dostane škodlivý kód, který odposlouchává všechny Vaše stisky kláves a zároveň umožňuje ovládání Vašeho počítače někomu cizímu. I když tento účastník uvidí, co píšete za heslo, tak on nebude schopný se na dálku do Vašeho KeePasu dostat. Je to proto, že aby Yubikey vygeneroval challenge-response heslo, je nutné se fyzicky dotknout klíče. A tím totálně eliminuje vzdálený útok.

Jak vidíte, zabezpečení KeePassu jen heslem je o dost méně bezpečné.

  • Kdokoli může zkoušet náhodný útok přes všechny možné hesla. A i když to bude trvat, udělat takový útok lze.
  • Kdokoli, kdo odposlechne stisky Vaši klávesnice, se může poté na dálku přihlásit do Vašeho KeePasu.
  • Heslo je potřeba mít dostatečně dlouhé a složité, což ale zase dost komplikuje jeho využití, když ho máte zadávat několikrát denně.

Poslední, co zbývá je synchronizace KeePassu. A tady přichází na řadu zmíněný Dropbox. Věřím, že po přečtení předchozích řádků je Vám jasné, že je úplně jedno, kam svůj datový soubor s hesly umístíte. Díky Yubikey a heslu je totiž šifrovaný tak dobře, že se do něj nikdo a nijak nedostane. V extrému byste ho mohli vyvěsit klidně veřejně na webu. Samozřejmě je stále lepší ho držet alespoň trochu rozumně bezpečně, ale, teoreticky by to mělo být opravdu jedno.

A proto si můžeme dovolit použít Dropbox. I když i ten by měl být sám o sobě bezpečný, už to znamená mít své věci někde v cloudu. Tam k nim teoreticky může mít přístup kdekdo, navíc stále existuje riziko, že Vám Dropbox můžou hacknout. Proto i s ostatními daty v něm opatrně.

Pro naše účely je ale Dropbox naopak naprosto ideální. Uložíme si na něj zaheslovaný KeePass soubor a díky tomu k němu můžeme přistupovat odkudkoli, kde budeme mít Yubikey klíčenku. Díky tomu jsem schopný se doma do dat dostat jak z pracovního PC, tak z jakéhokoli notebooku.

Jak nastavit Yubikey

Teorii máme za sebou, pojďme nastavovat. Jako první nakonfigurujeme Yubikey, konkrétně jeho slot2 (každý Yubikey má dva programovatelné sloty). Na to je nutné stáhnout a nainstalovat Yubikey Personalisation Tool.

 

V aplikaci pak zvolíme “Challenge-Response” položku v horním menu a zvolíme variantu HMAC-SHA1.

V následujícím okně pak zvolíte, že chcete programovat slot 2,  že chcete využít fixed 64byte input a stisknete tlačítko “Generate”

Heslo, které se Vám vygenerovalo, si uložte rovnou do KeePass, nebo dočasně někam do souboru na počítači, kde ho ho ale poté musíte 100% zlikvidovat. Jde totiž právě o ono super-bezpečné heslo, pomocí kterého se bude Váš KeePass synchronizovat s Yubikey. A proto se Vám k němu nesmí nikdo dostat.

Až budete mít heslo uloženo, stistkněte tlačítko Write Configuration. Ještě před samotným zápisem Vám aplikace nabídne uložit jakýsi CSV soubor, který obsahuje právě toto zmíněné heslo. Zde zvolte “Cancel”, protože rozhodně nepotřebujete, aby bylo heslo uloženo ještě v nějakém dalším souboru.

Tím máte Yubikey nakonfigurovaný. Pokud v budoucnu budete chtít spárovat další yubikey, stačí postupovat přesně stejným postupem jen s tím rozdílem, že namísto tlačítka “Generate” zkopírujete Vaše heslo do políčka Secret Key (v mém případě 61 4a 11 19 d0 14 85 75 db ce 85 07 ba bf a0 28 f3 e5 e1 eb). Takto můžete spárovat tolik klíčenek, kolik budete potřebovat.

Jak nastavit KeePass

Nejprve si KeePass stáhněte z oficiálních stránek (nikdy nestahuje odjinud, nemáte jistotu, že není kód jakkoli upraven ve Váš neprospěch).

A ze seznamu “Plugins” si stáhněte KeeChallenge plugin (https://keepass.info/plugins.html), případně ho lze stáhnout rovnou zde http://richardbenjaminrush.com/keechallenge/. Plugin rozbalte a umístěte do podsložky “Plugins” ve složce KeePass.

To, že jste plugin aktivovali správně, poznátek tak, že vyberete menu Tools->Plugins a uvidíte v seznamu pluginů KeeChallenge.

Pokud máte plugin nainstalovaný, pojďme se pustit do vytvoření bezpečného úložiště. Z menu zvolte “File” a “New”.

A potvrďte následující okno, kde Vás KeePass informuje, že si máte dobře zapamatovat heslo, které zadáte 🙂

V dalším kroku zvolte, kde se má soubor uložit a jak se má jmenovat. Já osobně ho mám uložený přímo ve složce s KeePassem, který mám celý v Dropboxu. Výhoda tohoto řešení je, že se mi krom samotného datového souboru synchronizuje i celé nastavení Dropboxu se všemu pluginy. Nemusím se proto starat o každý počítač zvlášť, ale všude mám stále stejné nastavení.

A teď se dostáváme k tomu zajímavému. V následujícím okně nyní zvolte Vaše “Master password”, tzn. heslo, které budete zadávat. Krom toho ale zaškrtněte ještě volbu “Show export options”

Po zaškrtnutí “Show expert options” se Vám ukáží další volby k nastavení. Vy dále zaškrtněte “Key file / provider” a ze seznamu vyberte “Yubikey challenge-response”.

A volbu potvrďte stisknutím “OK”.

Zobrazí se Vám další okno, kam nyní zadáte Vaše tajné heslo, které jste si vygenerovali v Yubikey.

V mém případě tak zadávám “61 4a 11 19 d0 14 85 75 db ce 85 07 ba bf a0 28 f3 e5 e1 eb”. Volbu “Variable Length Challenge” nechte odškrtlou. Opět stiskněte OK.

Nyní se Vám rozsvítí Váš Yubikey a vyskočí okno, kde běží časový odpočet. Klikněte na tlačítko na Yubikey. Tím je spárování dokončeno.

 

V tomto kroku můžete nyní nastavit parametry Vašeho KeePass souboru. Krom jeho popisu a názvu lze ještě dále upravit způsoby šifrování. Osobně využívám v defaultním nastavení. Toto lze v budoucny kdykoli změnit. Opět potvrďte OK.

V dalším kroku Vám KeePass nabídne vytisknutí formuláře, kam si můžete poznamenat veškeré bezpečností nastavení a hesla, která jste zvolili. Osobně dávám Skip a hesla ukládám jinam.

A tím je hotovo. Máte vytvořený bezpečnostní soubor, kam se Vám nikdo nedostane.

Nyní aplikaci zavřete a zkuste ji znovu pustit a přihlásit se. Ať si ověříte, že vše funguje jak má.

Po zadání hesla a jeho potvrzení byste měli opět vidět výzvu na stisknutí tlačítka na Yubikey spolu s rozsvícením Yubikey.

Dodatečná nastavení KeePass

Tak, máme nastavený Yubikey a KeePass, nyní ještě nastavíme pár dalších věcí v KeePassu. V základu totiž KeePass po odemknutí úložiště zůstane odemknut. Takže pokud počítač usne / zapne spořič a vy odejdete, tak je databáze stále odemknuta a někdo by se Vám fyzicky mohl k datům stále dostat.

I toto naštěstí umí KeePass vyřešit. Lze nastavit, aby se KeePass automaticky zpět zahesloval po x-minutách neaktivity, nebo při usnutí PC, nebo při spuštění screensaveru, nebo při stisku klávesy ESC v případě, že už víte, že přístup nebudete potřebovat. Díky tomu jsou data odemknuta po opravdu minimální nezbytnou dobu a jinak jsou data zaheslována a nepřístupná.

V menu Opitions najdete hromadu voleb, včetně:

  • “Lock workspace when computer is about to be suspended”, která říká, že má KeePass být zamčen při usnutí.
  • “Lock workspace after global user inactivity”, která říká, za jak dlouho KeePass sam zamkne, pokud se na PC nic neděje

Je toho opravdu spousta, co lze nastvit. Ostatní položky ponechám k vlastnímu studiu, jelikož už záleží na vkusu uživatele. Například, zda se má KeePass zobrazovat jako běžící aplikace nebo v Tray, zda Close tlačítko zavírá aplikaci, nebo ji jen minimalizuje do Tray, atd.

Obnova přístupu k datům

Poslední kapitola bude už dříve zmiňované “coby-kdyby”. Jak zajistit, že se k těmto datům dostanou i jiní v případě nouze. Já to pro tyto účely mám řešeno následovně.

  • Je potřeba si na papír poznamenat heslo, které je zadáno do Yubikey (tzn 61 4a 11….), dále pak heslo, které se zadává přímo do KeePassu (v případě tohoto dema “heslo”).
  • Kromě toho je pak potřeba ještě uživatel a heslo do Dropboxu.
  • A k tomu nějaký návod, jak vše obnovit. V mém případě link na tento článek 🙂

Tyto údaje jsou zapsané na papíru, odkud je nelze nijak elektronicky zcizit. Papír pak lze dle uvážení vložit do bezpečnostní schránky banky, kde ke schránce nastavíte přístup i dalším osobám, případně jej zakopat někde na zahradě a lokaci sdělit ostantím. Případně poslední varianta je pak zalepená obálka, kterou uschováte u důvěryhodných osob pro případ nouze.

Všechna další data, závěti nebo krizové plány již můžete průběžně ukládat a měnit v KeePasu. To hodně usnadňuje distribuci těchto kritických informací. Jediné, kdy musíte obsah obálky a schránky aktualizovat, je, když změníte Yubikey heslo, KeePass heslo, nebo přístup do Dropboxu.

Závěrem

Tak, další část návodu mám za sebou. Stále je toho spousta, jak zabezpečit vše ostatní. Primárně právě 2FA ochrana, o které budu mluvit příště. Jak ale vidíte, jen samotné zabezpečení KeePassu je kapitola sama o sobě. Když se to ale udělá správně, je to úložiště naprosto bezpečné, zároveň synchronizované a k tomu obnovitelné v případě nouze.

Pokud Vám návod pomůže, zvažte zaslání nějaké té koruny na podporu našeho blogu. Jen pro představu, článek jako je tento jsem zpracovával dnes 3 hodiny. Je fajn ostatním pomáhat, ale je i fajn vidět, že to lidé dokáží ocenit. Díky!

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉
Table of Contents

9 thoughts on “Keepass a Yubikey

  1. “Zabezpečení Challenge-response spočívá v tom, že máte nějaký tajný klíč, který nahrajete jak do Vašeho Yubikey (viz dále), tak ho nastavíte do KeePassu.”

    Rád bych upozornil, že takto to nefunguje. Funguje to na základě privátního (tajného) a veřejného klíče. Privátní klíč nikdy neopustí yubikey, je to klíč který nesmí nikdo znát. Veřejný klíč můžete dát kamkoliv a komukoliv. Takže třeba do keepasu. Veřejný klíč používá protistrana k zašifrování dat a jen ten kdo má privátní klíč dokáže data dešifrovat.

  2. Moje chyba, mel jsem si to precist detailneji. Ja myslel ze myslite https://developers.yubico.com/U2F/Protocol_details/Overview.html Tam se prave challenge response resi jak jsem psal a to je bezpecne.
    Kazdopadne ta metoda s HMAC-SHA1 a AES256 je bezpecna jen v pripade, ze je nutne stisknout tlacitko na yubikey. Protoze yubikey vlastne generuje staticke heslo pro keepas plugin a to asi neni problem odchytit. A ten “secret key” je sdileny tajny klic ne tajny klic. Tajny klic je jen jeden v yubikey, ten se nikdy nesmi dostat ven.

    1. Ano, U2F je uplne jiny protokol.

      V pripade u2f se vyuziva unikatni klic flashnuty primo v yubikey. Ale (jak jsem psal ve clanku), ma to i sve negativa.

      Jelikoz se neda yubiky clonovat, tak je to na urcite typy zabezpeceni defakto nepouzitelne.

      A to z toho duvodu, ze pokud klic rozbijete/ztratite, tak se k datum uz nedostanete.

      Prave proto jsem volil a v clanku popisoval metody, jak vyuzit z Yubikey takove funkce, ktere lze nahrat do dvou a vice klinecek zaroven.

      Diky tomu pak mate jednu nekde v trezoru a druhou vyuzivate a v pripade ztraty pak mate stale zalohu k obnoveni.

      Ohledne odchytavani, nevim co presne chcete odchytavat, jestli vysledny text, ten se ovsem vzdy meni. To je prave ten trik v pripade challenge-reposponse protokolu.

      Ten funguje tak, ze keepass vygeneruje random hash, ten posle do yubikey, ten ho pomoci tajneho hesla zkonvertuje do vysledku a ten se pak overi i v keepasu.

      Uz z pouzitych algoritmu je jasne, ze se jedna o jednosmernou hashovaci funkci, tzn odchytnuti Vam nicemu nevadi, puvodni klic z nej nedostanete a znovu ho rovnez nepouzijete.

      Myslim, ze hledate problemy nekde, kde nejsou (at uz v clanku, nebo v pouzite metodice).

  3. Na zacatku bych chtel rict, ze jsem rad za podobne clanky a i za trn vas. Sam jsem tady na blogu nasel inspiraci a par dobrych napadu 🙂 Ale cim vic jsem nad tim premyslel, tak mi to nedavalo smysl kde je ta bezpecnost. Takze po vasi prvni odpovedi jsem to zacal podrobneji zkoumat a ted se snazim upozornit na to, ze to nemusi byt tak bezpecne. Neberte to tedy prosim jako nejaky hate.
    Autor pluginu pise:

    Your secret is used as the key to encrypt the database. In order to avoid storing the secret in plain text, we generate a challenge-response pair ahead of time. The challenge is stored to be issued on the next login and the response is used as an AES256 key to encrypt the secret. All relevant data is stored in a xml file in the same directory as your database.

    Ten plugin aby sdilene heslo neulozil jako text, musi predem vygenerovat challenge a response a ulozi ho zasifrovane. Tedy keepas ani plugin negeneruje zadny nahodny hashe. Yubikey pres sve api vydava vlastne staticky heslo k te databazi. Ted je otazka jak snadne je to vydavani z yubikey odchytit. Treba nekde v pameti, ci poslouchanim primo api yubikey? Vlastne nepomuze ani to tlacitko. Jinak mrknete treba sem https://sourceforge.net/p/keepass/discussion/329220/thread/273fdad3/, nejsem jediny kdo to resil 🙂 Takze vlastne super tajne master heslo k databazi keepasu je stejne dobre, nezavisle na (ne) pouziti yubikey.
    Co je na tom super, ze clovek nemusi vymyslet super tajne heslo a yubikey z toho super tajne heslo udela. Ale otazkou je jak snadne je ho odchytit no. Zase to neodchyti keylogger jako v pripade kdy se pouzije jen silne heslo 🙂

    U U2F by to melo fungovat tak, ze yubikey generuje privatni klic(e) pro kazdou sluzbu viz odkaz co jsem posilal. Nemel by tam ted byt jeden klic a nejak natvrdo zapsany. Zase je to narocnejsi na implementaci.

    1. Jo, a jeste k tomu klici, atd.

      Pekne je to shrnuto tady:

      In practical terms, if you have specialised malware on your system running at the same or higher privilege than KeePass, then your database is compromised as soon as it is unlocked. The malware wouldn’t need to intercept the password or key, it could just extract the contents of the (unlocked) database immediately.

      Zkratka, je uplne jedno, jestli utocnik bude znat heslo nebo odchytne USB komunikaci. Pokud se nejaky bordel dostane primo do PC, staci mu pockat, az si clovek tu databazi odemkne a vyluxovat az samotnou databazi.

      Na toto by bylo pak idealni reseni poustet ten keepass uplne izolovane, virtualizovane v nejake samostatne VM nebo treba pres docker. TIm padem by nebyl pro malware vubec viditelny.

      Nad tim se zamyslim, jak to co nejjednoduseji izlovat.

  4. Okej, tohle beru a diky za to. Jsem si vedom, ze uz asi reaguju trochu podrazdene na ruzne vytky, protoze se za posledni dobu na blogu objevilo par novych lidi, kteri tu akorat hejtuji a postuji zpravy typu “Tedy rada pro autora, prestat kafrat, prestat zebrat s patreonem, prestat psat o lopateni na zahrade ” a mne uz to nejak unavuje 😉

    Ted k te bezpecnosti. Pravdu mate, tady jsem vychazel z nejakeho jineho challenge-response, kde se posilal nahodny hash do klice, ten ho “podepsal” tim secret klicem a az vysledek se poslal zpet. Takze odpoved byla vzdy jina. Ale v tomto pripade jde zrejme (dle textu na webu) opravdu jen o opakovane zasilani stejne odpovedi.

    Co se tyka U2F, puvodne jsem ho pro Keepas pouzit chtel. Ono se da dokonce do dvou Youbikey nahrat identicky kod, akorat ten klic pak nezacina tusim “p” jako private, ale treba “c” jako custom. Tim se pozna, jestli uz ten yubikey byl nejak prehran nebo ne. “p” klice nejdou znovu nahrat.

    Problem byl, ze i kdyz jsem synchronizoval ty “c” klice na obou klicenkach, tak jsem bud nenasel spravny U2F plugin pro keepas, a kdyz sem pak zkousel ty yubikey pro google -auth (nebo treba bitmex-auth), tak oni nepouzivaji tenhle protokol, ale jeste nejaky jiny, co ma Yubikey a co proste nejde synchronizovat mezi dvema klicenkama.

    Problem totiz je, ze napriklad Bitmex neumoznuje zaregistrovat dve klicenky. To treba google umi, takze tam vyuzivame nativni Yubikey, kdy do uctu mam regnuto vic klicenek. Ale u sluzeb jako je Bitmex nebo Binance to nejde.

    A mit chranenou burzu s penezma pouze jednim yubikey, ktery kdyz odejde, taks se tam clovek nedostane, je trochu nesikovne. A moc si nedokazu predstavit, jak pak probiha recovery. Protoze bud to burza dovoli odstranit, ale pak to ztraci smysl a nebo to nedovoli, a pak se tam clovek uz nedostane. A toto sem proste nevyresil a proto pro binance/bitmex radeji pouzivam silne heslo + TOTP klice generovane z Keepasu, ktery je chraneny silnym master heslem + tim challenge-response.

    Uz samotne reseni je vice nez nestandardni, takze by to nemelo byt cileno klasickymi utoky. Samozrejme, pokud se nekdo zameri na konkretni PC a pujde po konkretnim uctu, tak je to mnohem horsi a obavam se, ze vzdy jde vsechno prolomit.

    Jak jste psal, nekde v pameti to minimalne chvilku byt musi. Mam zkusenost s bojem s crackery, kdy nas nastroj i pres vcelku sofistikovanou ochranu prolomili (ackoli na foru mezi sebou resili, ze to byla jedna z nejslozitejsich ochran co delali). Jakmile je aplikace spustitelna na lokalnim PC, tak aby to mohlo bezet, musi to mit vsechna data k dispozici. a tim padem existuje nejake slabe misto, kudy se tam da dostat a je to jen otazka casu.

    1. Pravda, je fakt, ze asi kdyby clovek poslal foto ze vsech stran, fotky vsech bankovnich vypisu, uctu elektriky a dalsich, tak by je ukecal 😉

      Ale je to zbytecna komplikace, kdyz lze klicenku proste zazalohovat, pripadne by umoznili klicenky registrovat dve.

      Navic nemluvim o situaci, kdy ma clovek treba vic klicenek, pripadne k uctu pristupuji treba dva lidi.

Leave a Reply

Your email address will not be published. Required fields are marked *