Elektronický klíč (též hardwarový klíč , někdy dongle z anglického dongle ) – hardwarový nástroj určený k ochraně softwaru (softwaru) a dat před kopírováním, nelegálním používáním a neoprávněnou distribucí.
Základem této technologie je specializovaný mikroobvod neboli mikrokontrolér chráněný před čtením , který má pro každou klávesu unikátní operační algoritmy . Dongles mají také chráněnou energeticky nezávislou paměť malého objemu, složitější zařízení mohou mít vestavěný kryptoprocesor (pro hardwarovou implementaci šifrovacích algoritmů), hodiny reálného času. Hardwarové klíče se dodávají v různých formách , ale nejčastěji se připojují k počítači přes USB . Také se vyskytuje s rozhraními LPT , SOIC nebo PCMCIA .
Klíč je připojen ke specifickému počítačovému rozhraní . Dále do něj chráněný program posílá informace prostřednictvím speciálního ovladače , které jsou zpracovány podle zadaného algoritmu a vráceny zpět. Pokud je odpověď na klíč správná, program pokračuje ve své práci. Jinak může provádět akce definované vývojářem, jako je přepnutí do demo režimu, zablokování přístupu k určitým funkcím.
Existují speciální klíče schopné licencovat (omezující počet kopií programu spuštěného v síti) chráněnou aplikaci přes síť. V tomto případě stačí jeden klíč pro celou lokální síť . Klíč je nainstalován na jakékoli pracovní stanici nebo síťovém serveru . Chráněné aplikace přistupují k dongle přes místní síť. Výhodou je, že pro práci s aplikací v rámci lokální sítě s sebou nemusí nosit dongle.
Ochrana softwaru před nelicencovaným používáním zvyšuje zisk vývojáře. K dnešnímu dni existuje několik přístupů k řešení tohoto problému. Naprostá většina softwarových vývojářů používá různé softwarové moduly, které řídí přístup uživatelů pomocí aktivačních klíčů, sériových čísel atd. Taková ochrana je levné řešení a nelze si nárokovat spolehlivost. Internet je plný programů, které umožňují nelegálně vygenerovat aktivační klíč ( generátory klíčů ) nebo zablokovat požadavek na sériové číslo / aktivační klíč ( záplaty , cracky ). Kromě toho nezapomínejte na to, že své sériové číslo může zveřejnit i sám legální uživatel.
Tyto zjevné nedostatky vedly k vytvoření hardwarové softwarové ochrany v podobě elektronického klíče. Je známo, že první elektronické klíče (tedy hardwarová zařízení na ochranu softwaru před nelegálním kopírováním) se objevily na počátku 80. let, nicméně z pochopitelných důvodů je velmi obtížné ustanovit prvenství v nápadu a přímém vytvoření zařízení.
Dongle jsou klasifikovány jako hardwarové metody ochrany softwaru, ale moderní hardwarové klíče jsou často definovány jako multiplatformní systémy hardwarově-softwarových nástrojů pro ochranu softwaru. Faktem je, že kromě samotného klíče poskytují společnosti, které elektronické klíče vydávají, SDK (Software Developer Kit - software developer kit). SDK obsahuje vše, co potřebujete, abyste mohli začít používat prezentovanou technologii ve svých vlastních softwarových produktech - vývojové nástroje, úplná technická dokumentace , podpora pro různé operační systémy , podrobné příklady, fragmenty kódu, nástroje automatické ochrany. SDK může také obsahovat ukázkové klíče pro vytváření testovacích projektů.
Technologie ochrany před neoprávněným použitím softwaru je založena na implementaci požadavků ze spustitelného souboru nebo dynamické knihovny na klíč s následným přijetím a případně analýzou odpovědi. Zde jsou některé typické dotazy:
Stojí za zmínku, že některé moderní klíče (Guardant Code od Aktiv, Sentinel od Thales, LOCK od Astroma Ltd., Rockey6 Smart od Feitian, Senselock od Seculab) umožňují vývojářům ukládat jejich vlastní algoritmy nebo dokonce samostatné části kódu aplikace ( například specifické vývojářské algoritmy, které přijímají velké množství parametrů jako vstup) a spouštějí je v klíči na jeho vlastním mikroprocesoru . Kromě ochrany softwaru před nelegálním používáním vám tento přístup umožňuje chránit algoritmus použitý v programu před studiem, klonováním a používáním v jeho aplikacích konkurenty. U jednoduchého algoritmu (a vývojáři často dělají chybu, když zvolí k načtení nedostatečně komplexní algoritmus), lze kryptoanalýzu provést pomocí metody analýzy černé skříňky.
Jak vyplývá z výše uvedeného, „srdcem“ elektronického klíče je převodní algoritmus (kryptografický či jiný). V moderních donglech je implementován v hardwaru - to prakticky vylučuje vytvoření úplného emulátoru klíče , protože šifrovací klíč se nikdy nepřenáší na výstup dongle, což vylučuje možnost jeho zachycení.
Šifrovací algoritmus může být tajný nebo veřejný. Tajné algoritmy jsou vyvíjeny výrobcem ochranných prostředků, a to i individuálně pro každého zákazníka. Hlavní nevýhodou použití takových algoritmů je nemožnost posouzení kryptografické síly . S jistotou bylo možné říci, jak spolehlivý byl algoritmus poté: zda byl hacknut nebo ne. Veřejný algoritmus neboli „open source“ má nesrovnatelně větší kryptografickou sílu. Takové algoritmy netestují náhodní lidé, ale řada odborníků, kteří se specializují na analýzu kryptografie . Příklady takových algoritmů jsou široce používané GOST 28147-89 , AES , RSA , Elgamal atd.
Pro většinu rodin hardwarových klíčů byly vyvinuty automatické nástroje (zahrnuté v SDK ), které umožňují chránit program „několika kliknutími myší“. V tomto případě je soubor aplikace „zabalen“ do vlastního kódu vývojáře. Funkčnost implementovaná tímto kódem se liší v závislosti na výrobci, ale nejčastěji kód kontroluje přítomnost klíče, řídí licenční politiku (nastavenou dodavatelem softwaru), implementuje mechanismus pro ochranu spustitelného souboru před laděním a dekompilací ( například komprimace spustitelného souboru) atd.
Důležité je, že pro použití nástroje automatické ochrany nepotřebujete přístup ke zdrojovému kódu aplikace . Například při lokalizaci cizích produktů (kdy není možnost zásahu do zdrojového kódu softwaru) je takový ochranný mechanismus nepostradatelný, ale neumožňuje využít plný potenciál elektronických klíčů a implementovat flexibilní a individuální ochranu.
Kromě použití automatické ochrany dostává vývojář softwaru možnost samostatně vyvíjet ochranu integrací systému ochrany do aplikace na úrovni zdrojového kódu. K tomu SDK obsahuje knihovny pro různé programovací jazyky , které obsahují popis funkčnosti API pro tento klíč. API je sada funkcí navržených pro výměnu dat mezi aplikací, systémovým ovladačem (a serverem v případě síťových klíčů) a samotným hardwarovým klíčem. Funkce API zajišťují různé operace s klíčem: vyhledávání, čtení a zápis paměti, šifrování a dešifrování dat pomocí hardwarových algoritmů, licencování síťového softwaru atd.
Šikovná aplikace této metody poskytuje vysokou úroveň zabezpečení aplikace. Neutralizovat ochranu zabudovanou v aplikaci je poměrně obtížné kvůli její jedinečnosti a „rozmazanosti“ v těle programu. Potřeba studovat a upravovat spustitelný kód chráněné aplikace za účelem obejití ochrany je sama o sobě vážnou překážkou pro její prolomení. Úkolem bezpečnostního vývojáře je proto především chránit před možnými automatizovanými metodami hackování implementací vlastní ochrany pomocí API pro práci s klíči.
Úkolem útočníka je donutit chráněný program, aby fungoval bez legálního klíče připojeného k počítači. Aniž bychom zacházeli do přílišných technických detailů, budeme předpokládat, že útočník má následující možnosti:
Tak široké možnosti nepřítele lze vysvětlit tím, že má přístup ke všem otevřeným rozhraním , dokumentaci , ovladačům a může je prakticky analyzovat jakýmkoliv způsobem.
Aby program fungoval jako s klíčem, můžete buď provést opravy v programu ( hacknout jeho programový modul ), nebo emulovat přítomnost klíče zachycením volání knihovny API pro výměnu klíčů.
Je třeba poznamenat, že moderní elektronické klíče (například klíče Guardant generace Sign a moderní klíče HASP HL ) poskytují silné šifrování protokolu elektronické výměny klíčů - knihovny API pro práci s klíčem . Ve výsledku jsou nejzranitelnějšími místy volací body funkcí tohoto API v aplikaci a logika zpracování jejich výsledku.
Během emulace nedochází k žádnému dopadu na kód programu a emulátor, pokud jej lze sestavit, jednoduše opakuje veškeré chování skutečného klíče. Emulátory jsou sestaveny na základě analýzy zachycených požadavků aplikací a odpovědí klíče na ně. Mohou být buď tabulkové (obsahují všechny odpovědi na požadavky na elektronický klíč nezbytné pro fungování programu), nebo úplné (zcela emulují činnost klíče, protože hackeři poznali vnitřní algoritmus práce).
Vybudování kompletního emulátoru moderního elektronického klíče je poměrně pracný proces, který vyžaduje spoustu času a značné investice. V minulosti to útočníci dokázali: například Aladdin přiznává, že v roce 1999 se útočníkům podařilo vyvinout celkem korektně fungující emulátor dongle HASP3 a HASP4. To bylo možné, protože klíč používal proprietární šifrovací algoritmus , který byl hacknut. Nyní většina klíčů používá veřejné kryptografické algoritmy, takže útočníci raději útočí na konkrétní chráněný produkt než na obecný obranný mechanismus. Pro moderní ochranné systémy HASP a Guardant neexistují žádné volně dostupné emulátory , protože se používá kryptosystém s veřejným klíčem .
Neexistovaly žádné informace o plné emulaci moderních hardwarových klíčů Guardant . Stávající emulátory tabulek jsou implementovány pouze pro konkrétní aplikace. Možnost jejich vytvoření byla způsobena nevyužíváním (nebo negramotným používáním) hlavní funkčnosti elektronických klíčů vývojáři ochrany.
Chybí také informace o úplné nebo alespoň částečné emulaci LOCK klíčů, ani o jiných způsobech, jak tuto ochranu obejít.
Útočník zkoumá logiku samotného programu, aby po analýze celého kódu aplikace izoloval ochranný blok a deaktivoval jej. Rozbití programů se provádí laděním (nebo krokováním), dekompilací a vyprázdněním hlavní paměti . Tyto metody analýzy spustitelného kódu programu útočníci nejčastěji používají v kombinaci.
Ladění se provádí pomocí speciálního programu - debuggeru, který vám umožňuje krok za krokem spouštět jakoukoli aplikaci a emulovat pro ni operační prostředí. Důležitou funkcí debuggeru je schopnost nastavit body (nebo podmínky) pro zastavení provádění kódu. Pomocí nich je pro útočníka snazší sledovat místa v kódu, kde jsou implementovány přístupy ke klíči (například se provádění zastaví na zprávě typu „Klíč chybí! Zkontrolujte přítomnost klíče v rozhraní USB“ ).
Disassembly je způsob, jak převést kód spustitelných modulů do lidsky čitelného programovacího jazyka - Assembler . V tomto případě útočník získá výpis ( seznam ) toho, co aplikace dělá.
Dekompilace je transformace spustitelného modulu aplikace do programového kódu vyšší úrovně jazyka a získání reprezentace aplikace, která se blíží zdrojovému kódu. Lze to provést pouze pro některé programovací jazyky (zejména pro aplikace .NET vytvořené v C# a distribuované v bytecode , což je interpretovaný jazyk na relativně vysoké úrovni).
Podstatou útoku pomocí výpisu paměti je načtení obsahu RAM v okamžiku, kdy se aplikace začala normálně vykonávat. Výsledkem je, že útočník obdrží pracovní kód (nebo část, která ho zajímá) v „čisté formě“ (pokud byl například kód aplikace zašifrován a je dešifrován pouze částečně během provádění určité sekce) . Hlavní věcí pro útočníka je vybrat správný okamžik.
Všimněte si, že existuje mnoho způsobů, jak čelit ladění a vývojáři zabezpečení je používají: nelineární kód, ( multithreading ), nedeterministická sekvence provádění, „zahazování“ kódu (zbytečné funkce, které provádějí složité operace, aby zmátly útočníka), pomocí nedokonalostí samotných debuggerů a dalších