Elektroninen avain (myös laitteistoavain , joskus dongle englanninkielisestä donglesta ) - laitteistotyökalu, joka on suunniteltu suojaamaan ohjelmistoja (ohjelmistoja) ja tietoja kopioimiselta, laittomalta käytöltä ja luvattomalta jakelulta .
Tämän tekniikan perustana on erikoistunut mikropiiri tai lukemiselta suojattu mikrokontrolleri , jolla on yksilölliset toiminta- algoritmit jokaiselle avaimelle . Dongleilla on myös pienikokoinen suojattu haihtumaton muisti , monimutkaisemmissa laitteissa voi olla sisäänrakennettu kryptoprosessori ( salausalgoritmien laitteistototeutukseen ), reaaliaikainen kello. Laitteistongelejä on useita eri muotoja , mutta useimmiten ne liitetään tietokoneeseen USB :n kautta . Löytyy myös LPT- , SOIC- tai PCMCIA - liitännöistä.
Avain on kiinnitetty tiettyyn tietokoneliitäntään . Lisäksi suojattu ohjelma lähettää sille tietoja erityisen ohjaimen kautta , joka käsitellään määritellyn algoritmin mukaisesti ja palautetaan takaisin. Jos avaimen vastaus on oikea, ohjelma jatkaa työtään. Muussa tapauksessa se voi suorittaa kehittäjän määrittämiä toimintoja, kuten siirtyä esittelytilaan, estää pääsyn tiettyihin toimintoihin.
On olemassa erityisiä avaimia, joilla voidaan lisensoida (rajoittaa verkossa käynnissä olevan ohjelman kopioiden määrää) suojattu sovellus verkon yli. Tässä tapauksessa yksi avain riittää koko paikallisverkkoon . Avain asennetaan mihin tahansa työasemaan tai verkkopalvelimeen . Suojatut sovellukset käyttävät donglia paikallisverkon kautta. Etuna on, että voidakseen työskennellä sovelluksen kanssa paikallisessa verkossa, niiden ei tarvitse kantaa donglia mukanaan.
Ohjelmiston suojaaminen lisensoimattomalta käytöltä lisää kehittäjän voittoa. Tähän mennessä on olemassa useita lähestymistapoja tämän ongelman ratkaisemiseksi. Suurin osa ohjelmistokehittäjistä käyttää erilaisia ohjelmistomoduuleja, jotka ohjaavat käyttäjien pääsyä aktivointiavainten, sarjanumeroiden jne. avulla. Tällainen suojaus on halpa ratkaisu eikä voi väittää olevansa luotettava. Internet on täynnä ohjelmia, joiden avulla voit laittomasti luoda aktivointiavaimen ( avaingeneraattorit ) tai estää sarjanumeron/aktivointiavaimen pyynnön ( korjaukset , halkeamat ). Älä myöskään jätä huomiotta sitä tosiasiaa, että laillinen käyttäjä voi itse julkistaa sarjanumeronsa.
Nämä ilmeiset puutteet johtivat laitteisto-ohjelmistosuojauksen luomiseen elektronisen avaimen muodossa. Tiedetään, että ensimmäiset elektroniset avaimet (eli laitteistot ohjelmistojen laittomalta kopioinnilta suojaamiseksi) ilmestyivät 1980-luvun alussa, mutta ilmeisistä syistä on erittäin vaikea saada ensisijaisuutta laitteen ideassa ja suorassa luomisessa.
Donglit luokitellaan laitteistopohjaisiksi ohjelmistosuojausmenetelmiksi, mutta nykyaikaiset dongit määritellään usein ohjelmistosuojauksen monikäyttöisiksi laitteisto-ohjelmistotyökalujärjestelmiksi. Tosiasia on, että itse avaimen lisäksi sähköisiä avaimia myöntävät yritykset tarjoavat SDK :n (Software Developer Kit - ohjelmistokehityspaketti). SDK sisältää kaiken mitä tarvitset esitellyn teknologian käytön aloittamiseen omissa ohjelmistotuotteissasi - kehitystyökalut, täydelliset tekniset dokumentaatiot , tuki eri käyttöjärjestelmille , yksityiskohtaiset esimerkit, koodinpätkät, automaattiset suojaustyökalut. SDK voi sisältää myös demo-avaimia rakennustestiprojekteihin.
Ohjelmiston luvatonta käyttöä vastaan suojattu tekniikka perustuu pyyntöjen toteuttamiseen suoritettavasta tiedostosta tai dynaamisesta kirjastosta avaimeen, jonka jälkeen se vastaanottaa ja tarvittaessa analysoi vastauksen. Tässä on joitain tyypillisiä kyselyitä:
On syytä huomata, että jotkut nykyaikaiset avaimet (Guardant Code Aktivilta, Sentinel Thalesilta, LOCK Astroma Ltd.:ltä, Rockey6 Smart Feitianilta, Senselock Seculabilta) antavat kehittäjälle mahdollisuuden tallentaa omia algoritmejaan tai jopa erillisiä osia sovelluskoodista ( esimerkiksi tietyt kehittäjän algoritmit, jotka vastaanottavat suuren määrän parametreja syötteenä) ja suorittavat ne oman mikroprosessorin avaimessa . Sen lisäksi, että tämä lähestymistapa suojaa ohjelmistoa laittomalta käytöltä, sen avulla voit suojata ohjelmassa käytettyä algoritmia kilpailijoiden tutkimiselta, kloonaukselta ja käyttämiseltä sen sovelluksissa. Yksinkertaiselle algoritmille (ja kehittäjät tekevät usein virheen valitessaan ladattaviksi liian monimutkaisen algoritmin) kryptausanalyysi voidaan suorittaa käyttämällä black box -analyysimenetelmää.
Kuten yllä olevasta seuraa, elektronisen avaimen "sydän" on muunnosalgoritmi (salakirjoitus tai muu). Nykyaikaisissa dongleissa se on toteutettu laitteistossa - tämä käytännössä sulkee pois täyden avaimen emulaattorin luomisen , koska salausavainta ei koskaan lähetetä dongle-lähtöön, mikä sulkee pois mahdollisuuden sen sieppaamiseen.
Salausalgoritmi voi olla salainen tai julkinen. Suojavarusteiden valmistaja kehittää salaisia algoritmeja, myös erikseen jokaiselle asiakkaalle. Suurin haitta tällaisten algoritmien käytössä on salauksen vahvuuden arvioimisen mahdottomuus . Algoritmin luotettavuus oli mahdollista sanoa varmuudella vasta jälkikäteen: oliko se hakkeroitu vai ei. Julkisella algoritmilla tai "avoin lähdekoodilla" on verrattomasti suurempi salausvoimakkuus. Tällaisia algoritmeja eivät testaa satunnaiset ihmiset, vaan useat kryptografian analysointiin erikoistuneet asiantuntijat . Esimerkkejä tällaisista algoritmeista ovat laajalti käytetty GOST 28147-89 , AES , RSA , Elgamal jne.
Useimmille laiteavainperheille on kehitetty automaattisia työkaluja (sisältyvät SDK :hen ), joiden avulla voit suojata ohjelman "muutamalla hiiren napsautuksella". Tässä tapauksessa sovellustiedosto on "kääritty" kehittäjän omaan koodiin. Tämän koodin toteuttamat toiminnot vaihtelevat valmistajasta riippuen, mutta useimmiten koodi tarkistaa avaimen olemassaolon, ohjaa lisenssikäytäntöä (ohjelmiston toimittajan asettama), toteuttaa mekanismin, joka suojaa suoritettavaa tiedostoa virheenkorjaukselta ja käännökseltä ( esimerkiksi pakkaamalla suoritettavan tiedoston) jne.
Tärkeää on, että sinun ei tarvitse käyttää sovelluksen lähdekoodia käyttääksesi automaattista suojaustyökalua . Esimerkiksi ulkomaisia tuotteita lokalisoitaessa (kun ei ole mahdollisuutta häiritä ohjelmiston lähdekoodia) tällainen suojamekanismi on välttämätön, mutta se ei salli sähköisten avainten koko potentiaalin hyödyntämistä ja joustavan ja yksilöllisen suojauksen toteuttamista.
Automaattisen suojauksen käytön lisäksi ohjelmistokehittäjällä on mahdollisuus kehittää suojausta itsenäisesti integroimalla suojausjärjestelmä sovellukseen lähdekooditasolla. Tätä varten SDK sisältää kirjastoja eri ohjelmointikielille , jotka sisältävät kuvauksen tämän avaimen API -toiminnallisuudesta. API on joukko toimintoja, jotka on suunniteltu vaihtamaan tietoja sovelluksen, järjestelmäohjaimen (ja verkkoavainten tapauksessa palvelimen ) ja itse donglen välillä. API-toiminnot tarjoavat erilaisia toimintoja avaimella: muistin etsiminen, lukeminen ja kirjoittaminen, tietojen salaus ja salauksen purkaminen laitteistoalgoritmeilla, verkkoohjelmistojen lisensointi jne.
Tämän menetelmän taitava soveltaminen tarjoaa korkean sovellusturvallisuuden tason. Sovellukseen sisäänrakennettua suojausta on melko vaikea neutraloida sen ainutlaatuisuuden ja "sumeuden" vuoksi ohjelman rungossa. Jo sinänsä tarve tutkia ja muokata suojatun sovelluksen suoritettavaa koodia suojauksen ohittamiseksi on vakava este sen rikkomiselle. Siksi tietoturvakehittäjän tehtävänä on ennen kaikkea suojautua mahdollisilta automaattisilta hakkerointimenetelmiltä toteuttamalla oma suojaus API:lla avainten kanssa työskentelemiseen.
Hyökkääjän tehtävänä on pakottaa suojattu ohjelma toimimaan, jos tietokoneeseen ei ole kytketty laillista avainta. Menemättä liikaa teknisiin yksityiskohtiin oletamme, että hyökkääjällä on seuraavat vaihtoehdot:
Vihollisen laajat kyvyt selittyvät sillä, että hänellä on pääsy kaikkiin avoimiin liitäntöihin , dokumentaatioon , ohjaimiin ja hän voi analysoida niitä käytännössä millä tahansa keinolla.
Jotta ohjelma toimisi samalla tavalla kuin avaimen kanssa, voit joko tehdä ohjelmaan korjauksia ( hakkeroida sen ohjelmamoduulia ) tai emuloida avaimen läsnäoloa sieppaamalla avaimenvaihto-API-kirjaston kutsuja.
On huomattava, että nykyaikaiset elektroniset avaimet (esimerkiksi Sign-sukupolven Guardant -avaimet ja modernit HASP HL-avaimet) tarjoavat vahvan sähköisen avaimenvaihtoprotokollan salauksen - API-kirjaston avaimen kanssa työskentelemiseen . Tämän seurauksena haavoittuvimmat paikat ovat tämän API:n toimintojen kutsupisteet sovelluksessa ja niiden tuloksen käsittelylogiikka.
Emuloinnin aikana ohjelmakoodiin ei ole vaikutusta, ja emulaattori, jos se voidaan rakentaa, yksinkertaisesti toistaa kaiken oikean avaimen toiminnan. Emulaattorit rakennetaan siepattujen sovelluspyyntöjen ja avaimen niihin annettujen vastausten analyysin perusteella. Ne voivat olla joko taulukkomuotoisia (sisältää kaikki vastaukset ohjelman toimimiseen tarvittaviin sähköisen avaimen pyyntöihin) tai täydellisiä (ne emuloivat täysin avaimen toimintaa, koska hakkerit ovat tulleet tietoisiksi sisäisestä työalgoritmista).
Nykyaikaisen elektronisen avaimen täydellisen emulaattorin rakentaminen on melko työläs prosessi, joka vaatii paljon aikaa ja merkittäviä investointeja. Aiemmin hyökkääjät ovat pystyneet tähän: esimerkiksi Aladdin myöntää, että vuonna 1999 hyökkääjät onnistuivat kehittämään melko oikein toimivan HASP3- ja HASP4-dongle-emulaattorin. Tämä oli mahdollista, koska avain käytti omaa salausalgoritmia , joka hakkeroitiin. Nyt useimmat avaimet käyttävät julkisia salausalgoritmeja, joten hyökkääjät hyökkäävät mieluummin tiettyyn suojattuun tuotteeseen yleisen puolustusmekanismin sijaan. Nykyaikaisille HASP- ja Guardant -suojajärjestelmille ei ole vapaasti saatavilla emulaattoreita , koska käytetään julkisen avaimen salausjärjestelmää .
Ei ollut tietoa nykyaikaisten Guardant - dongien täydellisestä emuloinnista . Nykyiset taulukkoemulaattorit on otettu käyttöön vain tietyissä sovelluksissa. Niiden luomisen mahdollisuus johtui siitä, että suojauksen kehittäjät eivät käyttäneet (tai lukutaidottomia) sähköisten avainten päätoimintoja.
Ei myöskään ole tietoa LOCK-näppäinten täydellisestä tai ainakin osittaisesta emuloinnista tai muista tavoista ohittaa tämä suoja.
Hyökkääjä tutkii itse ohjelman logiikkaa analysoituaan koko sovelluskoodin, eristää suojauslohkon ja poistaa sen käytöstä. Ohjelmien rikkominen tehdään virheenkorjauksella (tai askeltamalla), purkamalla ja tyhjentämällä päämuisti . Hyökkääjät käyttävät useimmiten näitä menetelmiä ohjelman suoritettavan koodin analysoimiseksi yhdessä.
Virheenkorjaus suoritetaan erityisellä ohjelmalla - debuggerilla, jonka avulla voit suorittaa minkä tahansa sovelluksen askel askeleelta emuloimalla sen käyttöympäristöä. Tärkeä debuggerin toiminto on kyky asettaa pisteitä (tai ehtoja) koodin suorittamisen pysäyttämiseksi . Niiden avulla hyökkääjän on helpompi seurata koodin paikkoja, joissa avaimen käyttö on toteutettu (esimerkiksi "Avain puuttuu! Tarkista avaimen läsnäolo USB-liitännän kautta" -viestissä, suoritus pysähtyy. ).
Disassembly on tapa muuntaa suoritettavien moduulien koodi ihmisen luettavaksi ohjelmointikieleksi - Assembler . Tässä tapauksessa hyökkääjä saa tulosteen ( luettelon ) siitä, mitä sovellus tekee.
Purkaminen on sovelluksen suoritettavan moduulin muuntamista korkean tason kielen ohjelmakoodiksi ja sovelluksen esityksen hankkimista, joka on lähellä lähdekoodia. Se voidaan tehdä vain joillekin ohjelmointikielille (erityisesti C#-kielellä luoduille .NET-sovelluksille, jotka on jaettu tavukoodilla , suhteellisen korkean tason tulkitulla kielellä).
Hyökkäyksen olemus muistivedosta on lukea RAM-muistin sisältö sillä hetkellä, kun sovellus alkoi toimia normaalisti. Tämän seurauksena hyökkääjä saa toimivan koodin (tai häntä kiinnostavan osan) "puhtaassa muodossa" (jos esimerkiksi sovelluskoodi on salattu ja sen salaus puretaan vain osittain tietyn osion suorittamisen aikana) . Hyökkääjän tärkeintä on valita oikea hetki.
Huomaa, että virheenkorjauksen torjumiseksi on monia tapoja, ja tietoturvakehittäjät käyttävät niitä: epälineaarinen koodi, ( monisäikeisyys ), ei-deterministinen suoritusjärjestys, koodin roskaaminen (hyödyttömät toiminnot, jotka suorittavat monimutkaisia toimintoja hyökkääjän hämmentämiseksi), käyttämällä virheenkorjaajien itsensä ja muiden puutteita