Elektronisk nyckel

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 17 augusti 2020; verifiering kräver 1 redigering .

Elektronisk nyckel (även hårdvarunyckel , ibland dongel från engelska  dongle ) - ett hårdvaruverktyg utformat för att skydda programvara (mjukvara) och data från kopiering, olaglig användning och otillåten distribution.

Grunden för denna teknik är en specialiserad mikrokrets , eller en mikrokontroller skyddad från läsning , som har unika operationsalgoritmer för varje nyckel . Donglar har också ett skyddat icke-flyktigt minne med en liten volym, mer komplexa enheter kan ha en inbyggd kryptoprocessor (för hårdvaruimplementering av krypteringsalgoritmer ), en realtidsklocka. Hårdvarudonglar finns i en mängd olika formfaktorer , men är oftast anslutna till en dator via USB . Finns även med LPT , SOIC eller PCMCIA -gränssnitt.

Hur det fungerar

Nyckeln är ansluten till ett specifikt datorgränssnitt . Vidare skickar det skyddade programmet information till det genom en speciell drivrutin , som bearbetas i enlighet med den specificerade algoritmen och returneras tillbaka. Om svaret på nyckeln är korrekt, fortsätter programmet sitt arbete. Annars kan den utföra utvecklardefinierade åtgärder, som att byta till demoläge, blockera åtkomst till vissa funktioner.

Det finns specialnycklar som kan licensiera (begränsa antalet kopior av programmet som körs på nätverket) en skyddad applikation över nätverket. I det här fallet räcker en nyckel för hela det lokala nätverket . Nyckeln installeras på valfri arbetsstation eller nätverksserver . Skyddade applikationer kommer åt dongeln över det lokala nätverket. Fördelen är att för att kunna arbeta med applikationen inom det lokala nätverket behöver de inte ha en dongel med sig.

Historik

Att skydda programvara från olicensierad användning ökar utvecklarens vinst. Hittills finns det flera sätt att lösa detta problem. De allra flesta mjukvaruutvecklare använder olika programvarumoduler som styr användaråtkomst med hjälp av aktiveringsnycklar, serienummer etc. Sådant skydd är en billig lösning och kan inte göra anspråk på att vara tillförlitligt. Internet är fullt av program som låter dig skapa en aktiveringsnyckel ( nyckelgeneratorer ) eller blockera en begäran om ett serienummer/aktiveringsnyckel ( lappar , sprickor ). Dessutom, försumma inte det faktum att den lagliga användaren själv kan offentliggöra sitt serienummer.

Dessa uppenbara brister ledde till skapandet av hårdvaruskydd i form av en elektronisk nyckel. Det är känt att de första elektroniska nycklarna (det vill säga hårdvaruenheter för att skydda programvara från illegal kopiering) dök upp i början av 1980-talet, men av uppenbara skäl är det mycket svårt att etablera företräde i idén och direkt skapandet av enheten.

Programvaruskydd med en elektronisk nyckel

Software Development Kit

Donglar klassificeras som hårdvarubaserade mjukvaruskyddsmetoder, men moderna donglar definieras ofta som multiplattforms hårdvara-mjukvaruverktygssystem för mjukvaruskydd. Faktum är att förutom själva nyckeln tillhandahåller företag som utfärdar elektroniska nycklar ett SDK (Software Developer Kit - mjukvaruutvecklarkit). SDK innehåller allt du behöver för att börja använda den presenterade tekniken i dina egna mjukvaruprodukter - utvecklingsverktyg, fullständig teknisk dokumentation , stöd för olika operativsystem , detaljerade exempel, kodfragment, automatiska skyddsverktyg. SDK:n kan också inkludera demo-nycklar för byggtestprojekt.

Säkerhetsteknik

Tekniken för skydd mot obehörig användning av programvara är baserad på implementering av förfrågningar från en körbar fil eller ett dynamiskt bibliotek till en nyckel med efterföljande mottagande och, om nödvändigt, analys av svaret. Här är några typiska frågor:

Det är värt att notera att vissa moderna nycklar (Guardant Code från Aktiv, Sentinel från Thales, LOCK från Astroma Ltd., Rockey6 Smart från Feitian, Senselock från Seculab) tillåter utvecklaren att lagra sina egna algoritmer eller till och med separata delar av applikationskoden ( till exempel specifika utvecklares algoritmer som tar emot ett stort antal parametrar som indata) och exekverar dem i nyckeln på sin egen mikroprocessor . Förutom att skydda programvara från olaglig användning, tillåter detta tillvägagångssätt dig att skydda algoritmen som används i programmet från att studeras, klonas och användas i dess applikationer av konkurrenter. Men för en enkel algoritm (och utvecklare gör ofta misstaget att välja en otillräckligt komplex algoritm för att ladda), kan kryptoanalys utföras med hjälp av analysmetoden för svart låda.

Som följer av ovanstående är "hjärtat" av den elektroniska nyckeln konverteringsalgoritmen (kryptografisk eller annan). I moderna donglar är det implementerat i hårdvara - detta utesluter praktiskt taget skapandet av en fullständig nyckelemulator , eftersom krypteringsnyckeln aldrig överförs till dongelutgången, vilket utesluter möjligheten att avlyssna den.

Krypteringsalgoritmen kan vara hemlig eller offentlig. Hemliga algoritmer utvecklas av tillverkaren av skyddsutrustning, inklusive individuellt för varje kund. Den största nackdelen med att använda sådana algoritmer är omöjligheten att bedöma kryptografisk styrka . Det var bara möjligt att säga med säkerhet hur tillförlitlig algoritmen var i efterhand: om den var hackad eller inte. En offentlig algoritm, eller "öppen källkod", har ojämförligt större kryptografisk styrka. Sådana algoritmer testas inte av slumpmässiga personer, utan av ett antal experter som är specialiserade på analys av kryptografi . Exempel på sådana algoritmer är den allmänt använda GOST 28147-89 , AES , RSA , Elgamal , etc.

Skydd med automatiska medel

För de flesta familjer av hårdvarudonglar har automatiska verktyg (ingår i SDK ) utvecklats som låter dig skydda programmet "med några få musklick". I det här fallet är applikationsfilen "inlindad" i utvecklarens egen kod. Funktionaliteten som implementeras av den här koden varierar beroende på tillverkaren, men oftast kontrollerar koden om det finns en nyckel, kontrollerar licenspolicyn (inställd av programvaruleverantören), implementerar en mekanism för att skydda den körbara filen från felsökning och dekompilering ( till exempel, komprimera den körbara filen), etc.

Det viktiga är att du inte behöver tillgång till programmets källkod för att använda det automatiska skyddsverktyget . Till exempel, när du lokaliserar utländska produkter (när det inte finns någon möjlighet att störa programvarans källkod), är en sådan skyddsmekanism oumbärlig, men den tillåter inte att använda den fulla potentialen hos elektroniska nycklar och implementera flexibelt och individuellt skydd.

Implementering av säkerhet med API-funktioner

Utöver att använda automatiskt skydd ges mjukvaruutvecklaren möjlighet att självständigt utveckla skydd genom att integrera skyddssystemet i applikationen på källkodsnivå. För att göra detta inkluderar SDK:n bibliotek för olika programmeringsspråk som innehåller en beskrivning av API- funktionaliteten för denna nyckel. API:t är en uppsättning funktioner utformade för att utbyta data mellan applikationen, systemdrivrutinen (och servern i fallet med nätverksdonglar) och själva dongeln. API-funktioner ger olika operationer med nyckeln: sökning, läsning och skrivning av minne, kryptering och dekryptering av data med hårdvarualgoritmer, licensiering av nätverksprogram, etc.

Skicklig tillämpning av denna metod ger en hög nivå av applikationssäkerhet. Det är ganska svårt att neutralisera det inbyggda skyddet i applikationen på grund av dess unika och "fuzziness" i programmets kropp. I sig är behovet av att studera och modifiera den körbara koden för en skyddad applikation för att kringgå skyddet ett allvarligt hinder för att bryta det. Därför är säkerhetsutvecklarens uppgift först och främst att skydda mot eventuella automatiserade hackningsmetoder genom att implementera sitt eget skydd med hjälp av API:et för att arbeta med nycklar.

Säkerhetsförbikoppling

Angriparens uppgift  är att tvinga det skyddade programmet att fungera i avsaknad av en juridisk nyckel ansluten till datorn. Utan att gå in på för mycket tekniska detaljer kommer vi att anta att angriparen har följande alternativ:

Sådana breda möjligheter hos fienden kan förklaras av det faktum att han har tillgång till alla öppna gränssnitt , dokumentation , drivrutiner och kan analysera dem i praktiken med alla medel.

För att få programmet att fungera som det skulle med nyckeln kan du antingen göra korrigeringar i programmet ( hacka dess programmodul ), eller emulera närvaron av nyckeln genom att avlyssna anrop till API-biblioteket för nyckelutbyte.

Det bör noteras att moderna elektroniska nycklar (till exempel Guardant- nycklar från Sign-generationen och moderna HASP HL-nycklar) ger stark kryptering av det elektroniska nyckelutbytesprotokollet  - API-biblioteket för att arbeta med nyckeln . Som ett resultat är de mest sårbara platserna anropspunkterna för funktionerna i detta API i applikationen och logiken för att bearbeta deras resultat.

Nyckelemulering

Under emulering sker ingen påverkan på programkoden, och emulatorn, om den kan byggas, upprepar helt enkelt allt beteende hos den riktiga nyckeln. Emulatorer är byggda baserat på analysen av avlyssnade applikationsförfrågningar och nyckelns svar på dem. De kan vara antingen tabellformade (innehåller alla svar på förfrågningar till den elektroniska nyckeln som krävs för att programmet ska fungera), eller kompletta (de emulerar helt nyckelns funktion, eftersom hackarna har blivit medvetna om den interna algoritmen för arbetet).

Att bygga en komplett emulator av en modern elektronisk nyckel är en ganska mödosam process som kräver mycket tid och betydande investeringar. Tidigare har angripare kunnat göra detta: till exempel medger Aladdin att 1999 lyckades angripare utveckla en ganska korrekt fungerande HASP3- och HASP4-dongleemulator. Detta möjliggjordes eftersom nyckeln använde en proprietär krypteringsalgoritm , som hackades. Nu använder de flesta nycklar offentliga kryptografiska algoritmer, så angripare föredrar att attackera en specifik skyddad produkt snarare än en allmän försvarsmekanism. Det finns inga fritt tillgängliga emulatorer för moderna HASP- och Guardant- skyddssystem, eftersom ett kryptosystem med publik nyckel används .

Det fanns ingen information om den fullständiga emuleringen av moderna Guardant- donglar . Befintliga tabellemulatorer implementeras endast för specifika applikationer. Möjligheten att skapa dem berodde på att skyddsutvecklare inte använde (eller analfabeter) av de viktigaste funktionerna hos elektroniska nycklar.

Det finns heller ingen information om fullständig eller åtminstone delvis emulering av LOCK-nycklar, eller om några andra sätt att kringgå detta skydd.

Hacka en mjukvarumodul

En angripare undersöker logiken i själva programmet för att, efter att ha analyserat hela applikationskoden, isolera skyddsblocket och avaktivera det. Att bryta program görs genom att felsöka (eller stega), dekompilera och dumpa huvudminnet . Dessa metoder för att analysera den körbara koden för ett program används oftast av angripare i kombination.

Debugging utförs med hjälp av ett speciellt program - en debugger, som låter dig exekvera vilken applikation som helst steg för steg och emulera operativmiljön för den. En viktig funktion hos en debugger är förmågan att ställa in punkter (eller villkor) för att stoppa kodexekveringen. Genom att använda dem är det enklare för en angripare att spåra platserna i koden där åtkomster till nyckeln är implementerade (exekvering avbryts till exempel på ett meddelande som "Nyckel saknas! Kontrollera om nyckeln finns i USB-gränssnittet" ).

Demontering  är ett sätt att konvertera koden för körbara moduler till ett programmeringsspråk som kan läsas av människor - Assembler . I det här fallet får angriparen en utskrift ( listning ) av vad applikationen gör.

Dekompilering  är omvandlingen av en applikations körbara modul till en högnivåspråksprogramkod och erhållande av en representation av applikationen som ligger nära källkoden. Det kan bara göras för vissa programmeringsspråk (särskilt för .NET-applikationer skapade i C# och distribuerade i bytecode  , ett relativt högnivåtolkat språk).

Kärnan i attacken med en minnesdump är att läsa innehållet i RAM-minnet i det ögonblick då programmet började köras normalt. Som ett resultat får angriparen arbetskoden (eller den del av intresse för honom) i en "ren form" (om till exempel applikationskoden var krypterad och dekrypteras endast delvis under körningen av ett visst avsnitt) . Det viktigaste för en angripare är att välja rätt ögonblick.

Observera att det finns många sätt att motverka felsökning, och säkerhetsutvecklare använder dem: icke-linjär kod, ( multithreading ), icke-deterministisk exekveringssekvens, kod "nedskräpning" (onyttiga funktioner som utför komplexa operationer för att förvirra angriparen), genom att använda ofullkomligheterna hos felsökarna själva och andra

Litteratur

Se även

Länkar