Problembeskrivelse
Lad os antage et par antagelser. Software er opdelt i funktionelle komponenter. Licenser er til funktionelle komponenter inden for denne softwarepakke. Licenser kan baseres på tid, på version eller på et antal anvendelser, dvs. du kan bruge funktionaliteten indtil et sæt tid, du kan muligvis funktionaliteten i den version, du har købt, eller noget mindre afledt af den, eller du kan bruge den en antal gange. Der er to hovedscenarier, du skal løse, hvor en angriber ikke har adgang til en licens, og hvor han har.
Angriber uden licens
Det første scenario er, hvor din hacker ikke har adgang til en gyldig licens til dit produkt. Dette problem er let at løse. Du skal blot tildele en separat krypteringsnøgle til hver af de funktionelle licenserede dele af din software. Krypter hver funktionel del med krypteringsnøglen designet til den del. Nu kan du distribuere din software uden bekymring for, at nogen kan dekryptere funktioner, som de ikke har licens, da du aldrig sender dem nøglen.
Angriber med adgang til licens
Det andet scenario, som er meget sværere at løse, er når din hacker har en gyldig licens til din software, men han enten ønsker at omfordele de funktioner, han har licens, eller at udvide sin licens tidsmæssigt.
Nu har du brug for en pålidelig tidskilde, dette kan løses ved:
- at integrere en offentlig nøgle i en dongle og lade donglen udgive en tilfældig udfordring, som skal sendes til en tidsserver. Tidsserveren reagerer ved at underskrive det aktuelle tidspunkt og udfordringen og returnere den til klienten, som derefter sender den til nøglen, og nøglen opdaterer derefter sit interne ur og låses op.
- opdatering af det interne ur baseret på gang den er tilsluttet computeren. USB-porten leverer strøm til din dongle hele tiden, mens den er tilsluttet.
- opdatering af det interne ur baseret på tidsstempler sendt fra drivere installeret på maskinen, det er knyttet til. Tillad kun tidsstempler fremad i tiden. Tillad kun bevægelse baglæns i tiden, hvis tidskilden er en ekstern pålidelig tidsserver, der leverer en underskrevet tidsstempel.
Hvis din licens er baseret på versioner, har du faktisk et angreb, der ikke har adgang til en licens, fordi din nøgleafledningsfunktion for den funktionelle enhed tager både identifikatoren for den funktionelle enhed og versionen af den som input.
Nøgledistribution
Så når du har separate nøgler til hver funktionel enhed, bliver dine licenser stort set et spørgsmål om at distribuere symmetriske nøgler, så de kan sendes til donglen. Dette gøres normalt ved at integrere en hemmelig symmetrisk nøgle i donglen, kryptere licensdekrypteringsnøglerne med den delte hemmelige nøgle og derefter underskrive de krypterede nøgleopdateringsfiler. De underskrevne opdateringsfiler sendes derefter til donglen, der validerer signaturen på opdateringen, dekrypterer de nye nøgler med den delte symmetriske nøgle og gemmer dem til senere brug.
Nøgleopbevaring
Alle dongler skal have adgang til sikker opbevaring for at kunne gemme licensdekrypteringsnøgler, udløbstidsstempler og så videre. Generelt implementeres dette ikke på ekstern flashhukommelse eller EEPROM. Hvis det er, skal det krypteres med en intern nøgle til ASIC eller FPGA og underskrives således, at den ikke kan ændres.
Almindelig teksthul
Når brugeren har en licens til din funktionelle komponent, selvom han ikke kan udtrække din hemmelige nøgle, kan han bruge din dongle til at dekryptere den funktionelle komponent. Dette fører til problemet, at han muligvis udtrækker al din almindelig tekst og erstatter dekrypteringsopkaldet med et direkte opkald til den udpakkede almindelige tekst. Nogle dongler dækker dette problem ved at integrere en processor i donglen. Den funktionelle komponent sendes derefter krypteret til donglen, der dekrypterer komponenten og udfører den internt. Dette betyder, at donglen i det væsentlige bliver en sort boks, og at de funktionelle komponenter, der sendes til donglen, skal undersøges individuelt for at finde deres egenskaber.
Orakler
Mange dongler er krypterings- og dekrypteringsorakler, hvilket fører til potentielle problemer med Valgte ciphertext-angreb, f.eks. De nylige padding-oracle-angreb.
Sidekanalangreb
Udover oracle-problemerne har du også en masse bekymringer med alle de hidtil kendte sidekanalangreb. Du skal også være bekymret over enhver potentiel, men uopdaget sidekanal.
Dekapsulation
Vær opmærksom på, at der er en række virksomheder i verden, der specialiserer sig ved plukning og revision af sikre chips. Nogle af de mest kendte virksomheder er sandsynligvis Chris Tarnovsky fra flylogic, nu en del af IOActive og chipworks. Denne form for angreb er dyrt, men kan være en reel trussel afhængigt af værdien af dit mål. Det ville overraske mig, hvis kun få, muligvis ingen af dongler i dag er i stand til at modstå denne slags angriber med højt budget.
Fungerer de
Givet en dongle, der er baseret på stærk kryptering, er ikke tidsbaseret, da du ikke kan udløbe krypteringsnøgler baseret på tid, og heller ikke er tiden absolut, fri for sidekanalangreb og udfører koden på chippen, ja det vil gøre det at opdage den underliggende kode svarende til sondering af en sort boks. De fleste af pauserne, der sker med disse dongler, er baseret på implementeringssvagheder hos licenshaverne af hardwarelicenssystemet på grund af, at implementøren ikke er bekendt med reverse engineering og computersikkerhed generelt.
Vær også opmærksom på, at selv software, hvor størstedelen af logikken er implementeret på en internetvendt server, er blevet brudt simpelthen ved at undersøge den sorte boks og udlede serverens sidekode baseret på klientkodens forventninger. Forbered dig altid på, at din ansøgning bliver brudt, og udvikl en plan for, hvordan du skal håndtere den, når den sker.