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

Når du snur smartkort, er sidekanalangrep kjent for å være ganske effektive på maskinvare. Men hva er det, og kan det brukes i programvare for omvendt utvikling og hvordan?

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

Et ' sidekanalangrep ' definerer enhver teknikk som vil vurdere utilsiktede og / eller indirekte informasjonskanaler for å nå målet hans. Det er først blitt definert i smartkort-kryptografi for å beskrive angrep som bruker utilsiktet informasjonslekkasje fra den innebygde brikken på kortet, og som kan brukes til å hente nøkler og data. For eksempel kan den brukes ved å overvåke:

  • Utførelsestid (Tidsangrep): For å skille hvilke operasjoner som er utført og gjette, for eksempel hvilken gren av koden som er valgt (og dermed verdien av testen).

  • Strømforbruk (Strømovervåking angrep): Til skille nøyaktig hvilken sekvens av instruksjoner som er utført og være i stand til å komponere verdiene til variablene på nytt. Vær oppmerksom på at det finnes flere analyseteknikker med samme inngang, men med litt annen måte å analysere den på. For eksempel kan vi liste opp: Single Power Analysis (SPA), Differential Power Analysis (DPA), High-order Differential Power Analysis (HO -DPA), Malangrep , ...

  • Elektromagnetisk stråling (elektromagnetiske angrep): Tett knyttet til strømforbruk , men kan også gi informasjon som ikke finnes i strømforbruket, spesielt på RFID- eller NFC-brikker.

Hvis du er mer interessert i å lære å utnytte denne informasjonen, kan jeg foreslår at du starter med å lese Strømanalyseangrep. Ikke bli "redd" bort av det faktum at boken handler om smartkort. Det meste av informasjonen gjelder også 1-til-1 på 'normale' (SoC) innebygde enheter.

Glemte å nevne at det er en åpen kildekodeplattform kalt OpenSCA og noe åpen kildekode-maskinvare. kalt FOBOS (Flexible Open-source BOard for Side-channel) som jeg ikke ser ut til å finne en riktig kobling hjemmefra.

Application to Software Reverse-engineering

Når vi snakker om anvendelse av sidekanalangrep i omvendt engineering av programvare, er det mer eller mindre angrep som vil stole på å bruke utilsiktet eller indirekte informasjonslekkasje. Det siste eksemplet er dette innlegget fra Jonathan Salwan som beskriver hvordan han gjettet passordet til en crackme bare ved å telle antall instruksjoner utført på forskjellige innganger med Pin.

Mer bredt, denne teknikken har blitt brukt lenge i programvare omvendt engineering uten å navngi den, eller kunne ha forbedret mange analyser. Den grunnleggende ideen er å først vurdere at hvis et programvare er for uklart til å forstå det raskt, kan vi betrakte det som en svart boks og tenke på å bruke en sidekanalsteknikk for å gjette vedlagte data gjennom en guidet prøve og feiling. teknikken.

Listen over sidekanaler som er tilgjengelig i programvare for omvendt utvikling er mye lenger enn den vi har innen maskinvare. Fordi den vedlegger den forrige listen og legger til noen nye kanaler som (ikke uttømmende liste):

  • Instruksjonsantall : Tillat å identifisere forskjellige atferd, avhengig av input.

  • Antall lese / skriv : Det samme som ovenfor, med flere muligheter til å identifisere mønstre fordi det også inkluderer instruksjon som er lest.

  • Raised Interrupt Count : Avhengig av hvilken type avbrudd som heves, når og hvordan, kan du identifisere annen atferd og være i stand til å bestemme den gode veien til målet ditt.

  • Tilgang til instruksjonsadresser : Tillat å gjenoppbygge de delene av programmet som er aktive i et presist øyeblikk.

  • Tilgjengelige minneadresser : Tillat å gjenopprette datamønster eller kompleks datastruktur som er lagret eller tilgjengelig i minnet (f.eks. i bunken).

Denne listen er langt fra uttømmende, men i utgangspunktet kan verktøy som Valgrind VM eller andre brukes til å utføre en slik analyse og raskt utlede informasjon om oppførselen til et gitt program, og dermed påskynde reversering.

Forvirring og mulige mottiltak

Å prøve å bygge en programvare som vil være motstandsdyktig mot slike angrep, vil også låne mye fra smartkortindustrien. Men ikke bare. Her er noen få triks jeg kunne tenke meg (men langt fra å være fullstendig om alt vi kan finne).

Armouring Program Branches

Antall instruksjoner er ekstremt effektiv for å oppdage hvilken gren er tatt i kode som denne:

  hvis (verdi) ret = foo (); ellers ret = bar ();  

Med foo () og bar () med forskjellig instruksjonsantall.

Dette kan beseires ved å utføre foo () og bar () uansett hvilken -verdi som er og bestemmer etterpå hva som er verdien av ret.

  tmp_foo = foo (); tmp_bar = bar (); hvis (verdi) ret = tmp_foo; ellers ret = tmp_bar;  

Denne teknikken gjør programmet ditt mye vanskeligere å gjette fra et sidekanalangrep, men også mye mindre effektiv. Man må finne en riktig avveining.

Å motvirke tidsangrep

Tidsangrep er ekstremt enkle å utføre og vanskelig å løse fordi sleep () ikke kan være et alternativ (for lett å oppdage i en kode, og uansett kan du ikke anta en bestemt hastighet for prosessoren). Programmereren må identifisere utførelsestiden for hver gren av programmet sitt og å balansere hver gren med ekstra ikke-nyttige operasjoner som har samme beregningskraft enn de fra de andre grenene. Poenget er å gjøre hver gren skille fra de andre bare basert på utførelsestiden.

Threading Madness

En annen måte å fortynne sidekanalen på er å multitråde programmet ditt. Tenk deg at hver gren av programmet ditt blir utført i en egen tråd, og en variabel forteller i hvilken tråd det aktuelle programmet virkelig er (hvis mulig på en kryptisk måte). Da vil sidekanalanalyse være mye vanskeligere å utføre.

Konklusjon og videre forskning

Sidekanalangrep har blitt undervurdert for programvare-reverse engineering, det kan drastisk øke hastigheten på omvendt av mange programmer. Men på samme tid eksisterer forvirkningsteknikker og må utvikles spesielt for å reversere programvare. Så ikke bli overrasket om du ser flere og flere nyheter relatert til dette feltet.

Dessverre er Wikipedia-artikkelen bare feil og forvirrende. Først og fremst bør vi ikke forveksle feilinjeksjon og sidekanalangrep, da er ikke DPA (Differential Power Analysis) engang nevnt, men det ser ut til å være det mer brukte angrepet i dag. Og til slutt, etter å ha lest denne wikipedia-artikkelen, ser jeg fortsatt ikke hva matematikken brukes til å avsløre nye data. Å sitere noen veiledninger kan også hjelpe.
Jeg innrømmer at jeg ikke har lest hele wiki-artikkelen fordi jeg trodde at informasjonen du ba om ble nevnt i starten. Jeg anbefaler fortsatt sterkt DPA-boken jeg nevnte. Den beskriver også matematikken. Etter det kan du prøve å finne papirer presentert på konferanser som [CHES] (http://www.iacr.org/workshops/ches/) for mer avanserte angrep. Hvis du vil ha en gratis introduksjon til noen sidekanalanalyseartskillere, kan du lese kapittel 3.7 i denne oppgaven [Principal Component analysis and SCA] (http://www.ru.nl/publish/pages/578936/principal_component_analysis_and_sca_-_jip_hogenboom.pdf)
Faktisk kritiserte jeg ikke ditt bidrag i det hele tatt (boken virker ekstremt interessant), men Wikipedia-artikkelen som mer er en detaljert liste uten reell definisjon (og dessuten klassifiserer de feilinjeksjon som et sidekanalangrep som er feil).
For alle som leter etter hovedkomponentanalysen og SCA-papiret som bare er nevnt (lenken er nå ødelagt), prøv her: http://www.ru.nl/publish/pages/769526/principal_component_analysis_and_sca_-_jip_hogenboom.pdf


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...