Pitanje:
Mogu li hardverski dongli zaštititi vaš softver?
Mellowcandle
2013-03-23 13:39:26 UTC
view on stackexchange narkive permalink

Razne softverske tvrtke distribuiraju svoj softver s hardverskom sigurnošću, obično dongle koji se mora montirati kako bi softver mogao raditi.

Nemam iskustva s njima, ali pitam se da li imaju stvarno radi?

Što dongle zapravo radi? Mislim da jedini način da se nametne sigurnost pomoću ove metode i spriječi emulacija hardvera, hardver mora obavljati neke važne funkcije softvera, možda implementirati neki algoritam itd.

Uredite naslov svog pitanja tako da odgovara tijelu pitanja. Moj [prijedlog] (http://reverseengineering.stackexchange.com/review/suggest-edits/118) je odbijen. Vaše se pitanje odnosi na dongle za zaštitu od kopiranja, a ne na recimo pametnu karticu ili HSM. Ti se ključevi * uvijek * odnose na zaštitu od kopiranja: čak i kad skrivaju algoritam, poanta je u tome da netko ne može duplicirati algoritam. To je sasvim drugačiji problem od recimo skrivanja kriptografskih ključeva.
Uklonio sam oznaku `copyprotection`; trebalo bi se pisati `zaštita od kopiranja`, ali sustav mi neće dopustiti stvaranje te oznake sve dok` copyprotection` ne nestane (što će se dogoditi nakon otprilike jednog dana nakon što bude uklonjeno iz svih pitanja).
Smatram da je ovo pitanje trenutno izuzetno široko i glasam da ga zatvorim.
Tri odgovori:
#1
+15
Peter Andersson
2013-03-23 15:36:47 UTC
view on stackexchange narkive permalink

Opis problema

Napravimo nekoliko pretpostavki. Softver je podijeljen na funkcionalne komponente. Licence se odnose na funkcionalne komponente unutar tog softverskog paketa. Licence se mogu temeljiti na vremenu, verziji ili na više načina, tj. Možete koristiti funkciju do određenog vremena, možete funkcionalnost verzije koju ste kupili ili neki njen manji derivat ili je možete koristiti broj puta. Dva su glavna scenarija koja morate riješiti, gdje napadač nema pristup licenci, a gdje ih ima.

Napadač bez licence

Prvi je scenarij kada vaš napadač nema pristup valjanoj licenci za vaš proizvod. Ovaj je problem lako riješiti. Jednostavno dodijelite zasebni ključ za šifriranje svakom od funkcionalnih dijelova softvera koji se mogu licencirati. Šifrirajte svaki funkcionalni dio ključem za šifriranje dizajniranim za taj dio. Sada svoj softver možete distribuirati bez brige da će netko moći dešifrirati funkcije koje nisu licencirali jer im nikada ne pošaljete ključ.

Napadač s pristupom licenci

Drugi scenarij, koji je puno teže riješiti, je kada vaš napadač ima valjanu licencu za vaš softver, ali ili želi preraspodijeliti funkcije koje je licencirao ili produžiti vrijeme licence.

Sada vam je potreban pouzdan izvor vremena, to se može riješiti:

  • ugrađivanjem javnog ključa u dongle i postavljanjem donglea slučajnog izazova koji se mora proslijediti vremenskom poslužitelju. Vremenski poslužitelj odgovara potpisivanjem trenutnog vremena i izazova te ga vraća klijentu koji ga zatim šalje ključu, a ključ zatim ažurira svoj interni sat i otključava se.
  • ažurirajući interni sat na temelju vrijeme je priključeno na računalo. USB priključak cijelo vrijeme napaja vaš dongle dok je uključen.
  • ažuriranje internog sata na temelju vremenskih žigova poslanih od upravljačkih programa instaliranih na računalu na koji je priključen. Vremenske oznake dopustite samo na vrijeme. Dopustite kretanje unatrag u vremenu samo ako je izvor vremena udaljeni pouzdani vremenski poslužitelj koji daje potpisanu vremensku oznaku.

Ako se vaša licenca temelji na verzijama koje zapravo imate napadnuti koji nemaju pristup licenca jer vaša funkcija izvođenja ključa za funkcionalnu jedinicu uzima kao identifikator funkcionalne jedinice i njenu verziju kao ulaz.

Distribucija ključa

Dakle, nakon što imate zasebne ključeve za svaku funkcionalnu jedinicu, vaše licence u osnovi postaju stvar distribucije simetričnih ključeva kako bi ih mogli poslati na dongle. To se obično postiže ugrađivanjem tajnog simetričnog ključa u dongle, šifriranjem ključeva za dešifriranje licence zajedničkim tajnim ključem i potom potpisivanjem datoteka za ažuriranje šifriranog ključa. Potpisane datoteke ažuriranja zatim se prosljeđuju dongleu koji potvrđuje potpis na ažuriranju, dešifrira nove ključeve zajedničkim simetričnim ključem i pohranjuje ih za kasniju upotrebu.

Pohrana ključa

Svi ključevi moraju imati pristup sigurnoj pohrani kako bi mogli pohraniti ključeve za dešifriranje licence, vremenske oznake isteka i tako dalje. Općenito se to ne primjenjuje na vanjskoj flash memoriji ili EEPROM-u. Ako jest, mora biti šifriran ključem unutar ASIC-a ili FPGA-e i potpisan tako da se ne može mijenjati.

Rupa u običnom tekstu

Jednom kada korisnik ima licencu za vašu funkcionalnu komponentu, čak i ako ne može izvući vaš tajni ključ, može upotrijebiti vaš ključ za dešifriranje te funkcionalne komponente. To dovodi do problema da on može izdvojiti sav vaš obični tekst i zamijeniti poziv za dešifriranje izravnim pozivom izvađenog običnog teksta. Neki dongli pokrivaju ovaj problem ugrađivanjem procesora u dongle. Funkcionalna komponenta se zatim šifrirano šalje na dongle koji dešifrira komponentu i izvršava je interno. To znači da dongle u osnovi postaje crni okvir, a funkcionalne komponente poslane dongleu moraju se pojedinačno ispitivati ​​kako bi se otkrila njihova svojstva.

Oracles

Mnogo je ključeva proročanstava o šifriranju i dešifriranju, što dovodi do potencijalnih problema s napadima odabranog šifriranog teksta, npr. Nedavni napadi na dodavanje oraclea.

Napadi na bočni kanal

Osim problema s oracleom, imate i puno problema sa svim do sada poznatim napadima na bočni kanal. Također vas treba zabrinuti bilo koji potencijalni, ali neotkriveni bočni kanal.

Dekapsulacija

Imajte na umu da postoji niz tvrtki u svijetu koje su se specijalizirale u izdvajanju i reviziji sigurnih čipova. Neke od najpoznatijih tvrtki vjerojatno su Chris Tarnovsky iz flylogic, koji je sada dio IOActive-a i chipworks-a. Ova vrsta napada je skupa, ali može predstavljati stvarnu prijetnju ovisno o vrijednosti vaše mete. Iznenadilo bi me ako je nekoliko, možda niti jedan dongles danas u stanju izdržati ovu vrstu visokobudžetnih napadača.

Djeluju li

S obzirom na dongle koji se temelji na jakoj enkripciji, nije li zasnovan na vremenu jer ne možete isteći ključeve za šifriranje na temelju vremena niti je vrijeme apsolutno, bez ikakvih napada bočnih kanala i izvršava kôd na čipu, da učinit će otkrivanje temeljnog koda ekvivalentnim ispitivanju crnog okvira. Većina pauza koje se događaju s tim donglovima temelje se na slabostima implementacije od strane vlasnika licence sustava za licenciranje hardvera zbog toga što implementator nije upoznat s obrnutim inženjeringom i računalnom sigurnošću općenito.

Također, shvatite da je čak i softver u kojem je većina logike implementirana na poslužitelju s Internetom slomljen jednostavnim ispitivanjem crnog okvira i zaključivanjem koda na strani poslužitelja na temelju očekivanja klijentskog koda. Uvijek se pripremite za razbijanje prijave i izradite plan kako se nositi s njom kad se dogodi.

#2
+14
0xC0000022L
2013-03-25 06:11:26 UTC
view on stackexchange narkive permalink

Jasno je da je Peter obratio glavne točke pravilne provedbe. S obzirom na to da sam - bez objavljivanja rezultata - u prošlosti "razbio" dva različita dongle sustava, volio bih podijeliti i svoja saznanja. user276 već dijelom nagovještava u čemu je problem.

Mnogi dobavljači softvera misle da kupuju neku vrstu osiguranja za svoj model licenciranja prilikom licenciranja dongle sustava. Ne mogu biti dalje od istine. Sve što rade je da dobiju alate koji im omogućuju da implementiraju relativno siguran sustav (unutar granica istaknutih u odgovoru Peters-a).

U čemu je uopće problem sa zaštitom od kopiranja? Ako softver koristi matematički ispravnu enkripciju za svoju shemu licenciranja, to nema utjecaja na sigurnost zaštite od kopiranja kao takvog. Zašto? Pa, završili ste u situaciji ulova 22. Ne vjerujete korisniku (jer bi korisnik mogao kopirati softver), pa šifrirate stvari ili nekako koristite šifriranje u svojoj shemi zaštite od kopiranja. Jao, u proizvodu trebate imati svoj privatni ključ da biste koristili šifriranje, što je potpuno u suprotnosti s pojmom nepovjerenja u korisnika. Donglovi pokušavaju staviti privatni ključ (i / ili algoritam i / ili druge sastojke) u hardver tako da korisnik uopće nema pristup.

Međutim, budući da su mnogi dobavljači pod dojmom da imaju kupujući osiguranje iz kutije, ne ulažu napor u ispravnu provedbu. Što me dovodi do prvog primjera. To je CAD program koji je koristila moja majka. Iz znanja da dongli koji povezuju LPT često propadaju češće nego njihovi noviji USB kolege, krenuo sam u "zaobilaženje" ovog. Bilo je to oko 2005.

Nije mi trebalo predugo. Zapravo sam koristio jednostavan napad na DLL postavljanje (naziv pod kojim je scenarij kasnije postao poznat) da bih ubacio svoj kôd. I taj kod nije bio previše razrađen. Samo je jedna određena funkcija vratila vrijednost koju bi dongle obično očitavao (serijski broj) i to je bilo to. Preostale funkcije prebacio bih na izvorni DLL koji dobavljač donglea mora instalirati zajedno s upravljačkim programom.

Drugi dongle bio je malo prije toga. Ovdje je problem bio taj što sam radio za kooperanta i imali smo ograničen pristup samo softveru za koji smo trebali razviti. Uistinu se radilo o birokraciji između tvrtke koja je licencirala softver i dobavljača softvera, ali nam je to stvorilo velike probleme. U ovom je slučaju bilo malo izazovnije zaobići dongle. Prije svega, morao je biti napisan vozač koji njuši IRP-ove s uređaja i na njega. Tada je trebalo saznati algoritam koji se koristi za šifriranje. Srećom nije sve bilo izvedeno u hardveru koji nam je pružio rupu za petlju. Na kraju smo imali malog vozača koji bi se predstavljao kao dongle. Njegova je funkcionalnost proširena tako da očitava pravi dongle, sprema podatke (zapravo ih prosljeđuje u program korisničkog načina spremanja), a zatim ih učitava natrag kako bi se predstavljala kao taj dongle.

Zaključak: ključevi, bez obzira na vrstu, ako implementiraju osnovnu funkcionalnost programa kojem pripadaju, teško će se razbiti. Za sve ostalo uglavnom ovisi o odlučnosti i volji da se na vrijeme postave osobe koje su krenule u zaobilaženje donglea. Kao takav rekao bih da dongli predstavljaju značajnu prepreku - ako se pravilno primijene - ali u slučajevima nemara dijela dobavljača softvera koji želi zaštititi svoju kreaciju također puko zmijsko ulje.

Obratite pažnju na posljednji odlomak u Petersovom odgovoru. Ali želio bih dodati još jednu misao. Softver koji se uistinu isplati zaštititi, jer je jedinstven u određenom smislu, ne bi trebao biti zaštićen na osnovu uznemiravanja od strane kupaca (== većina shema zaštite od kopiranja). Umjesto toga, razmotrite primjer IDA Pro, koji se sigurno može smatrati prilično jedinstvenim softverom. Oni vodeni žig postavljaju kako bi mogli pronaći osobu koja je procurila iz određenog snopa. Naravno, kao što smo vidjeli kod curenja ESET-a, to ne pomaže uvijek, ali stvara odvraćanje. Bit će manje vjerojatno da će se grupa krekera, na primjer, domoći kopije.

#3
+6
rev
2013-03-24 18:12:57 UTC
view on stackexchange narkive permalink

Kao što je Peter naznačio, gledanje kako se dongle koristi za sigurnost polazna je točka za identificiranje vektora napada. U većini slučajeva programeri softvera koji implementiraju dongle sigurnost su najslabija točka.

U prošlosti, kada sam testirao softver pomoću donglesa, koristio sam besplatne alate poput ProcessMonitor i RegShot kako bih identificirao jednostavne ranjivosti za pobjedu lošeg implementacije dongle sigurnosti.

Vidio sam softver koji prilikom pokretanja provjerava prisutnost donglea, a zatim nastavlja s radom bez upotrebe donglea dok se ponovno ne pokrene. U tim slučajevima krpanje aplikacije s OllyDbg nije tako teško reći aplikaciji da radi s punom funkcionalnošću sve dok dongle NIJE priključen na sustav.

Također sam vidio softver koji omogućuje korisnik da klikne na gumb u softveru tako da korisnik ne mora imati umetnuti dongle. Softver je tvrdio da je to dodatna funkcionalnost poput opcije "Zapamti me". RegShot i ProcessMonitor pokazali su mi da je datoteka napisana s nekim informacijama i sve dok je datoteka prisutna u očekivanoj mapi, mogu pokretati softver na više sustava bez dongle-a.

Samo zato što netko koristi AES ili Hardverski dongli ili bilo koji XYZ ne znači da su sigurni. Važno je samo provode li one sigurnosne mjere na ispravan način pod pretpostavkom da u sigurnosnoj mjeri sada postoje poznate (ili 0-dnevne ranjivosti).



Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...