Spørgsmål:
Hvad er SCARE (Side-Channel Attacks Reverse-Engineering)?
perror
2013-04-23 00:24:32 UTC
view on stackexchange narkive permalink

Når du vender smart-kort, er sidekanalangreb kendt for at være ret effektive på hardware. Men hvad er det, og kan det bruges i reverse engineering af software, og hvordan?

En svar:
ixje
2013-04-23 00:59:34 UTC
view on stackexchange narkive permalink

Et ' sidekanalangreb ' definerer enhver teknik, der vil betragte utilsigtede og / eller indirekte informationskanaler for at nå sit mål. Det er først blevet defineret i smart-kort-kryptografi til at beskrive angreb, der bruger utilsigtet informationslækage fra den indlejrede chip på kortet, og som kan bruges til hentning af nøgler og data. For eksempel kan den bruges ved overvågning:

  • Udførelsestid (Timing-angreb): For at skelne mellem hvilke operationer der er udført og gætte f.eks. hvilken gren af ​​koden der er valgt (og dermed værdien af ​​testen).

  • Strømforbrug (Strømovervågningsangreb): Til skelne nøjagtigt, hvilken sekvens af instruktioner der er udført, og være i stand til at komponere værdierne for variablerne igen. Bemærk, at der findes flere analyseteknikker, der bruger den samme input, men med en lidt anden måde at analysere den på. For eksempel kan vi liste: Single Power Analysis (SPA), Differential Power Analysis (DPA), High-order Differential Power Analysis (HO -DPA), Skabelonangreb , ...

  • Elektromagnetisk stråling (elektromagnetiske angreb): Nært relateret til strømforbrug , men kan også give oplysninger, der ikke findes i strømforbruget, især på RFID- eller NFC-chips.

Hvis du er mere interesseret i at lære at udnytte disse oplysninger, så vil foreslå at starte med at læse Strømanalyseangreb. Bliv ikke 'bange' væk af det faktum, at bogen handler om smartkort. De fleste af oplysningerne gælder også 1-til-1 på 'normale' (SoC) indlejrede enheder.

Glemte at nævne, at der er en open source-platform kaldet OpenSCA og noget open source-hardware kaldet FOBOS (Fleksibel open source BOard til sidekanal), som jeg ikke synes at finde et ordentligt link hjemmefra.

Anvendelse til software Reverse-engineering

Når vi taler om anvendelse af sidekanalangreb i software reverse engineering nu, er det mere eller mindre ethvert angreb, der vil stole på at bruge utilsigtet eller indirekte informationslækage. Det bedste seneste eksempel er dette indlæg fra Jonathan Salwan, der beskriver, hvordan han gættede adgangskoden til en crackme ved blot at tælle antallet af instruktioner, der blev udført på forskellige indgange med Pin.

Mere bredt er denne teknik blevet brugt siden længe i software reverse engineering uden at navngive den, eller kunne have forbedret mange analyser. Grundideen er først at overveje, at hvis et stykke software er for uklart til at forstå det hurtigt, kan vi betragte det som en sort boks og tænke på at bruge en sidekanalsteknik til at gætte de vedlagte data gennem en guidet prøve og fejl teknik.

Listen over sidekanaler, der er tilgængelige i software reverse engineering er meget længere end den, vi har inden for hardware. Fordi det vedlægger den forrige liste og tilføjer nogle nye kanaler såsom (ikke udtømmende liste):

  • Instruktionsantal : Tillad at identificere forskellige adfærd afhængigt af input.

  • Læse / skrive tælle : Samme som ovenfor, med flere muligheder for at identificere mønstre, fordi det også inkluderer læst instruktion.

  • Raised Interrupt Count : Afhængigt af hvilken type afbrydelse der rejses, hvornår og hvordan, kan du muligvis identificere forskellige adfærdsmønstre og være i stand til at bestemme den gode vej til dit mål.

  • Adgang til instruktionsadresser : Tillad at genopbygge de dele af programmet, der er aktive i et præcist øjeblik.

  • Adgang til hukommelsesadresser : Tillad at genopbygge datamønster eller kompleks datastruktur, der er gemt eller tilgængelig i hukommelsen (f.eks. i bunken).

Denne liste er langt fra udtømmende, men dybest set kan værktøjer som Valgrind VM eller andre bruges til at udføre en sådan analyse og hurtigt udlede oplysninger om et givent programs opførsel og dermed fremskynde reverse engineering.

Forvirring og mulige modforanstaltninger

Forsøg på at opbygge en software, der er modstandsdygtig over for sådanne angreb, låner også meget fra smart-kortindustrien. Men ikke kun. Her er et par tricks, jeg kunne tænke på (men langt fra at være komplet om alt, hvad vi kan finde).

Armouring Program Branches

Instruktionstællingen er ekstremt effektiv til at opdage hvilken gren er taget i kode som denne:

  hvis (værdi) ret = foo (); ellers ret = bar ();  

Med foo () og bar () med forskellige instruktionstal.

Dette kan besejres ved at udføre foo () og bar () uanset hvilken -værdi der er, og derefter beslutter, hvad der er værdien af ​​ret.

  tmp_foo = foo (); tmp_bar = bar (); hvis (værdi) ret = tmp_foo; ellers ret = tmp_bar;  

Denne teknik gør dit program meget sværere at gætte fra et sidekanalangreb, men også meget mindre effektiv. Man skal finde en ordentlig kompromis.

Modvirkning af timingsangreb

Timingangreb er ekstremt lette at udføre og vanskelige at løse, fordi sleep () ikke kan være en mulighed (for let at opdage i en kode, og alligevel kan du ikke antage en bestemt hastighed for processoren). Programmøren skal identificere udførelsestiden for hver gren af ​​sit program og balancere hver gren med ekstra ikke-nyttige operationer, der har samme beregningskraft end dem fra de andre grene. Pointen er at gøre hver gren uadskillelig fra de andre kun baseret på udførelsestiden.

Threading Madness

En anden måde at fortynde sidekanalen på er at multitråde dit program massivt. Forestil dig, at hver gren af ​​dit program udføres i en separat tråd, og en variabel fortæller i hvilken tråd det aktuelle program virkelig er (hvis det er muligt på en kryptisk måde). Derefter vil sidekanalanalyse være meget sværere at udføre.

Konklusion og yderligere forskning

Sidekanalangreb er blevet undervurderet bredt til software reverse engineering, det kan drastisk fremskynde det omvendte af mange programmer. Men på samme tid findes der tiltrækningsteknikker, som skal udvikles specifikt rettet mod reverse engineering af software. Så vær ikke overrasket, hvis du ser flere og flere nyheder relateret til dette felt.

Desværre er Wikipedia-artiklen bare forkert og forvirrende. Først og fremmest bør vi ikke forveksle fejlinjektion og sidekanalangreb, så nævnes DPA (Differential Power Analysis) ikke engang, men det ser ud til at være det mere anvendte angreb i dag. Og endelig, efter at have læst denne wikipedia-artikel, kan jeg stadig ikke se, hvad matematikken bruges til at afsløre nye data. At citere et par selvstudier kan også hjælpe.
Jeg indrømmer ikke at have læst hele wiki-artiklen, fordi jeg troede, at de oplysninger, du bad om, blev nævnt i starten. Jeg anbefaler stadig stærkt den DPA-bog, jeg nævnte. Det beskriver også matematikken. Derefter kan du prøve at finde papirer præsenteret på konferencer som [CHES] (http://www.iacr.org/workshops/ches/) for mere avancerede angreb. Hvis du vil have en gratis introduktion til nogle sidekanalanalyseskillere, kan du læse kapitel 3.7 i denne artikel [Principal Component analysis and SCA] (http://www.ru.nl/publish/pages/578936/principal_component_analysis_and_sca_-_jip_hogenboom.pdf)
Faktisk kritiserede jeg slet ikke dit bidrag (bogen virker ekstremt interessant), men Wikipedia-artiklen, som mere er en detaljeret liste uden reel definition (og desuden klassificerer de fejlinjektion som et sidekanalangreb, som er forkert).
For enhver, der leder efter den vigtigste nævnte komponentanalyse og SCA-papir (link er nu brudt), prøv her: http://www.ru.nl/publish/pages/769526/principal_component_analysis_and_sca_-_jip_hogenboom.pdf


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...