Cheie electronică

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 17 august 2020; verificarea necesită 1 editare .

Cheie electronică (de asemenea cheie hardware , uneori dongle din engleză  dongle ) - un instrument hardware conceput pentru a proteja software -ul (software-ul) și datele împotriva copierii, utilizării ilegale și distribuției neautorizate.

Baza acestei tehnologii este un microcircuit specializat , sau un microcontroler protejat de citire , care are algoritmi de operare unici pentru fiecare cheie . Donglele au, de asemenea, o memorie nevolatilă protejată de un volum mic, dispozitivele mai complexe pot avea un criptoprocesor încorporat (pentru implementarea hardware a algoritmilor de criptare ), un ceas în timp real. Dongle hardware vin într-o varietate de factori de formă , dar cel mai frecvent sunt conectate la un computer prin USB . Se găsește și cu interfețe LPT , SOIC sau PCMCIA .

Cum funcționează

Cheia este atașată unei anumite interfețe de computer . În plus, programul protejat îi trimite informații printr-un driver special , care este procesat în conformitate cu algoritmul specificat și returnat înapoi. Dacă răspunsul cheii este corect, atunci programul își continuă activitatea. În caz contrar, poate efectua acțiuni definite de dezvoltator, cum ar fi trecerea la modul demo, blocarea accesului la anumite funcții.

Există chei speciale capabile să licențieze (limitând numărul de copii ale programului care rulează în rețea) o aplicație protejată în rețea. În acest caz, o cheie este suficientă pentru întreaga rețea locală . Cheia este instalată pe orice stație de lucru sau server de rețea . Aplicațiile protejate accesează dongle-ul prin rețeaua locală. Avantajul este că, pentru a funcționa cu aplicația în rețeaua locală, nu trebuie să poarte un dongle cu ei.

Istorie

Protejarea software-ului împotriva utilizării fără licență crește profitul dezvoltatorului. Până în prezent, există mai multe abordări pentru a rezolva această problemă. Marea majoritate a dezvoltatorilor de software utilizează diverse module software care controlează accesul utilizatorilor folosind chei de activare, numere de serie etc. O astfel de protecție este o soluție ieftină și nu poate pretinde că este de încredere. Internetul este plin de programe care vă permit să generați ilegal o cheie de activare ( generatoare de chei ) sau să blocați o solicitare pentru un număr de serie/cheie de activare ( patch-uri , fisuri ). În plus, nu neglijați faptul că utilizatorul legal însuși își poate face public numărul de serie.

Aceste neajunsuri evidente au dus la crearea protecției software hardware sub forma unei chei electronice. Se știe că primele chei electronice (adică dispozitive hardware pentru protejarea software-ului împotriva copierii ilegale) au apărut la începutul anilor 1980, totuși, din motive evidente, este foarte dificil să se stabilească primatul în ideea și crearea directă a dispozitivului.

Protecție software cu cheie electronică

Kit de dezvoltare software

Dongle-urile sunt clasificate ca metode de protecție software bazate pe hardware, dar dongle-urile moderne sunt adesea definite ca sisteme de instrumente hardware-software multiplatforme pentru protecția software-ului. Cert este că, pe lângă cheia în sine, companiile care emit chei electronice oferă un SDK (Software Developer Kit - software developer kit). SDK -ul include tot ce aveți nevoie pentru a începe să utilizați tehnologia prezentată în propriile produse software - instrumente de dezvoltare, documentație tehnică completă , suport pentru diverse sisteme de operare , exemple detaliate, fragmente de cod, instrumente de protecție automată. SDK-ul poate include, de asemenea, chei demo pentru construirea proiectelor de testare.

Tehnologia de securitate

Tehnologia de protecție împotriva utilizării neautorizate a software-ului se bazează pe implementarea solicitărilor dintr -un fișier executabil sau dintr- o bibliotecă dinamică la o cheie cu primirea ulterioară și, dacă este necesar, analiza răspunsului. Iată câteva interogări tipice:

Este de remarcat faptul că unele chei moderne (Guardant Code de la Aktiv, Sentinel de la Thales, LOCK de la Astroma Ltd., Rockey6 Smart de la Feitian, Senselock de la Seculab) permit dezvoltatorului să-și stocheze proprii algoritmi sau chiar părți separate ale codului aplicației ( de exemplu, algoritmi specifici dezvoltatorului care primesc un număr mare de parametri ca intrare) și îi execută în cheie pe propriul microprocesor . Pe lângă protejarea software-ului împotriva utilizării ilegale, această abordare vă permite să protejați algoritmul utilizat în program împotriva studierii, clonării și utilizării în aplicațiile sale de către concurenți. Cu toate acestea, pentru un algoritm simplu (și dezvoltatorii fac adesea greșeala de a alege un algoritm insuficient de complex pentru a încărca), criptoanaliza poate fi efectuată folosind metoda de analiză a cutiei negre.

După cum reiese din cele de mai sus, „inima” cheii electronice este algoritmul de conversie (criptografic sau de altă natură). În dongle-urile moderne, este implementat în hardware - acest lucru exclude practic crearea unui emulator complet de cheie , deoarece cheia de criptare nu este niciodată transmisă la ieșirea dongle-ului, ceea ce exclude posibilitatea interceptării acesteia.

Algoritmul de criptare poate fi secret sau public. Algoritmii secreti sunt dezvoltați de producătorul echipamentului de protecție, inclusiv individual pentru fiecare client. Principalul dezavantaj al utilizării unor astfel de algoritmi este imposibilitatea evaluării puterii criptografice . Nu a fost posibil decât să spunem cu certitudine cât de fiabil a fost algoritmul după fapt: dacă a fost piratat sau nu. Un algoritm public, sau „open source”, are o putere criptografică incomparabil mai mare. Astfel de algoritmi nu sunt testați de persoane aleatorii, ci de un număr de experți specializați în analiza criptografiei . Exemple de astfel de algoritmi sunt GOST 28147-89 , AES , RSA , Elgamal , etc.

Protecție prin mijloace automate

Pentru majoritatea familiilor de dongle hardware, au fost dezvoltate instrumente automate (incluse în SDK ) care vă permit să protejați programul „cu câteva clicuri de mouse”. În acest caz, fișierul aplicației este „înfășurat” în codul propriu al dezvoltatorului. Funcționalitatea implementată de acest cod variază în funcție de producător, dar cel mai adesea codul verifică prezența unei chei, controlează politica de licență (setată de furnizorul de software), implementează un mecanism pentru a proteja fișierul executabil de depanare și decompilare ( de exemplu, comprimarea fișierului executabil), etc.

Important este că nu aveți nevoie de acces la codul sursă al aplicației pentru a utiliza instrumentul de protecție automată . De exemplu, la localizarea produselor străine (când nu există posibilitatea de a interfera cu codul sursă al software-ului), un astfel de mecanism de protecție este indispensabil, dar nu permite utilizarea întregului potențial al cheilor electronice și implementarea protecției flexibile și individuale.

Implementarea securității cu funcții API

Pe lângă utilizarea protecției automate, dezvoltatorului de software i se oferă posibilitatea de a dezvolta în mod independent protecția prin integrarea sistemului de protecție în aplicație la nivel de cod sursă. Pentru a face acest lucru, SDK-ul include biblioteci pentru diferite limbaje de programare care conțin o descriere a funcționalității API pentru această cheie. API-ul este un set de funcții concepute pentru a face schimb de date între aplicație, driverul de sistem (și serverul în cazul dongle-urilor de rețea) și dongle-ul în sine. Funcțiile API oferă diverse operațiuni cu cheia: căutarea, citirea și scrierea memoriei, criptarea și decriptarea datelor folosind algoritmi hardware, licențierea software-ului de rețea etc.

Aplicarea cu pricepere a acestei metode oferă un nivel ridicat de securitate a aplicației. Este destul de dificil să neutralizezi protecția încorporată în aplicație datorită unicității și „neclarității” sale în corpul programului. În sine, necesitatea de a studia și modifica codul executabil al unei aplicații protejate pentru a ocoli protecția este un obstacol serios în calea spargerii acesteia. Prin urmare, sarcina dezvoltatorului de securitate este, în primul rând, să se protejeze împotriva posibilelor metode automate de hacking prin implementarea propriei protecții folosind API-ul pentru lucrul cu chei.

Ocolire de securitate

Sarcina atacatorului  este de a forța programul protejat să funcționeze în absența unei chei legale conectate la computer. Fără a intra în prea multe detalii tehnice, vom presupune că atacatorul are următoarele opțiuni:

Aceste capacități largi ale inamicului pot fi explicate prin faptul că are acces la toate interfețele deschise , documentația , driverele și le poate analiza în practică folosind orice mijloace.

Pentru ca programul să funcționeze așa cum ar funcționa cu cheia, puteți fie să faceți corecții programului (să pirateze modulul programului său ), fie să emulați prezența cheii prin interceptarea apelurilor către biblioteca API de schimb de chei.

Trebuie remarcat faptul că cheile electronice moderne (de exemplu, cheile Guardant ale generației Sign și cheile moderne HASP HL) oferă o criptare puternică a protocolului de schimb electronic de chei  - biblioteca API pentru lucrul cu cheia . Ca urmare, cele mai vulnerabile locuri sunt punctele de apel ale funcțiilor acestui API din aplicație și logica procesării rezultatului acestora.

Emulare cheie

În timpul emulării , nu are loc niciun impact asupra codului programului, iar emulatorul, dacă poate fi construit, repetă pur și simplu tot comportamentul cheii reale. Emulatoarele sunt construite pe baza analizei cererilor de aplicații interceptate și a răspunsurilor cheii la acestea. Acestea pot fi fie tabulare (conțin toate răspunsurile la solicitările la cheia electronică necesare pentru ca programul să funcționeze), fie complete (ele emulează complet funcționarea cheii, deoarece hackerii au devenit conștienți de algoritmul intern de lucru).

Construirea unui emulator complet al unei chei electronice moderne este un proces destul de laborios, care necesită mult timp și investiții semnificative. În trecut, atacatorii au reușit să facă acest lucru: de exemplu, Aladdin admite că în 1999, atacatorii au reușit să dezvolte un emulator de dongle HASP3 și HASP4 care funcționează destul de corect. Acest lucru a fost posibil deoarece cheia a folosit un algoritm de criptare proprietar , care a fost piratat. Acum majoritatea cheilor folosesc algoritmi criptografici publici, astfel încât atacatorii preferă să atace un anumit produs protejat, mai degrabă decât un mecanism general de apărare. Nu există emulatori disponibile gratuit pentru sistemele moderne de protecție HASP și Guardant , deoarece este utilizat un criptosistem cu cheie publică .

Nu existau informații despre emularea completă a dongle -urilor Guardant moderne . Emulatoarele de tabel existente sunt implementate doar pentru aplicații specifice. Posibilitatea creării lor s-a datorat neutilizarii (sau utilizării analfabete) a principalelor funcționalități ale cheilor electronice de către dezvoltatorii de protecție.

De asemenea, nu există informații despre emularea completă sau cel puțin parțială a tastelor LOCK sau despre orice alte modalități de a ocoli această protecție.

Hackerea unui modul software

Un atacator examinează logica programului în sine pentru a, după analizarea întregului cod al aplicației, să izoleze blocul de protecție și să-l dezactiveze. Ruperea programelor se face prin depanare (sau stepping), decompilare și descărcarea memoriei principale . Aceste metode de analiză a codului executabil al unui program sunt cel mai des folosite de atacatori în combinație.

Depanarea se realizează folosind un program special - un depanator, care vă permite să executați orice aplicație pas cu pas, emulând mediul de operare pentru aceasta. O funcție importantă a unui depanator este capacitatea de a seta puncte (sau condiții) pentru a opri execuția codului. Folosindu-le, este mai ușor pentru un atacator să urmărească locurile din cod în care sunt implementate accesările la cheie (de exemplu, execuția se oprește la un mesaj de genul „Cheia lipsește! Verificați prezența cheii în interfața USB” ).

Dezasamblarea  este o modalitate de a converti codul modulelor executabile într-un limbaj de programare care poate fi citit de om - Assembler . În acest caz, atacatorul primește o imprimare ( listare ) a ceea ce face aplicația.

Decompilarea  este transformarea unui modul executabil al unei aplicații într-un cod de program de limbaj de nivel înalt și obținerea unei reprezentări a aplicației care este apropiată de codul sursă. Se poate face doar pentru unele limbaje de programare (în special, pentru aplicațiile .NET create în C# și distribuite în bytecode  , un limbaj interpretat de nivel relativ înalt).

Esența atacului folosind un dump de memorie este de a citi conținutul RAM în momentul în care aplicația a început să se execute normal. Drept urmare, atacatorul primește codul de lucru (sau partea care îl interesează) într-o „formă pură” (dacă, de exemplu, codul aplicației a fost criptat și este decriptat doar parțial, în timpul executării unei anumite secțiuni) . Principalul lucru pentru un atacator este să aleagă momentul potrivit.

Rețineți că există multe modalități de a contracara depanarea, iar dezvoltatorii de securitate le folosesc: cod neliniar, ( multithreading ), secvență de execuție nedeterministă, „littering” de cod (funcții inutile care efectuează operațiuni complexe pentru a deruta atacatorul), folosind imperfecțiunile depanatorilor înșiși și ale altora

Literatură

Vezi și

Link -uri