Padding oracle attack

Kriptografian, Padding Oracle Attack eraso bat da, mezu kriptografiko baten padding balidazioa erabiltzen duena honen testu zifratua deszifratzeko. Kriptografian, testu argiko (plaintext) mezuak luzera aldakorrekoak direnak gehienetan bete egin behar izaten dira (zabalduak), azpian datzan kriptografia primitiboarekin bateragarria izateko. Erasoa "Padding Oracle" bat edukitzean oinarritzen da, zeinak libreki erantzuten dien mezu bat behar bezala beteta dagoen ala ez jakiteko galderei. Informazioa zuzenean eman zitekeen, edo zeharkako kanal batetik filtratu.

Padding oracle erabiliz ezaguna den lehen eraso famatua 1998ko Bleichenbacheren erasoa izan zen, PKCS #1 v1.5 padding[1] erabiliz RSAri erasotzen diona. "Padding oracle" terminoa 2002an agertu zen literaturan,[2] Serge Vaudenayk CBC moduko deszifraketa simetrikoetan padding oracle erabiliz egindako erasoaren ondoren.[3] Bi erasoen aldaerek arrakasta izaten jarraitzen dute jatorriz argitaratu zirenetik hamar urte baino gehiago igaro ondoren. [1][4][5]

Kriptografia asimetrikoa

1998an, Daniel Bleichenbacherek paper garrantzitsu bat argitaratu zuen, geroago "Bleichenbacheren erasoa" (edo "milioi mezuen erasoa") izenarekin ezagutzen zena. Erasoak padding oracle erabiltzen du PKCS #1 v1.5 padding erabiliz RSAri erasotzeko, baina terminoa ez da bertan erabiltzen. Geroago egileek haren erasoa padding oracle erasotzat sailkatu dute. [1]

Mangerek (2001) PKCS #1 v1.5 paddingaren ordezkoari, PKCS #1 v2.0 "OAEP"ari, eraso egiten dio.[6]

Kriptografia simetrikoa

Kriptografia simetrikoan, padding oracle erasoa CBC funtzionamendu moduan aplika daiteke. Betegarriaren baliozkotasunari buruz iragazitako datuei esker, erasotzaileek mezuak deszifratu (eta, batzuetan, zifratu) ditzakete Oracleren bidez, Oracleren gakoa erabiliz, zifratze-gakoa ezagutu gabe.

Bleichenbacherrek RSAri PKCS # 1 v1.5 bidez egindako erasoarekin alderatuta, Vaudenayk CBCri egindako erasoa askoz ere eraginkorragoa da.[1] Bi erasoek garaiko kripto-sistemak dituzte helburu:CBC Secure Sockets Layer (SSL) delakoan erabilitako jatorrizko modua da, eta TLSrekin bateragarria izaten jarraitzen du.[4]

Erasotzaileek deszifratze softwarea oracle gisa jardutea saihesteko zenbait neurri hartu dira, baina denboran oinarritutako eraso berriek oraclearen berragerpena behin eta berriz ekarri dute. TLS 1.2k autentifikatutako zifratze moduak sartzen ditu, CBCn oinarritzen ez direnak.[4]

CBC zifraketan padding oracle erasoa

Blokeen zifratuetan CBC deszifratzearen ezarpen estandarra testu zifratuko bloke guztiak deszifratzeko, paddinga baliozkotzeko, PKCS7 paddinga kentzeko eta mezuaren testu argia itzultzeko diseinatuta dago. Zerbitzariak "padding baliogabea" errorea itzultzen badu, "deszifraketak huts egin du" errore orokor baten ordez, erasotzaileak zerbitzaria padding oracle gisa erabil dezake mezuak deszifratzeko (eta batzuetan zifratzeko).








CBC deszifratzeko formula matematikoa hau da:

Goian adierazita dagoen bezala, CBC deszifratzerako orduan, testu argi bakoitzaren blokeak aurreko blokearekin XOR egiten du. Ondorioz, bloke batean () byte bakarreko aldaketa batek aldaketa bat eragingo du -n dagoen byte bakar batean.

Demagun erasotzaileak bi zifratutako bloke dituela, eta , eta bigarren blokea deszifratu nahi duela, testua lortzeko. Erasotzaileak eko azken bytea aldatzen du ( sortuz) eta (IV, , ) zerbitzarira bidaltzen du. Zerbitzariak, orduan, deszifratutako azken blokean () PKCS#7 padding balioduna den ala ez jakinarazten du. Paddinga zuzena bada, erasotzaileak orain badaki () ⊕ azken bytea 0x01 dela, azken bi byteak 0x02 direla, azken hiru byteak 0x03 direla, edo azken zortzi byteak 0x08 direla. Erasotzaileak bigarren azken bytea alda dezake (edozein bit bihurtuz) azken bytea 0x01 izateko. (Bestela, erasotzaileak aurreko byteak aldatu eta bilaketa bitarra egin dezake paddinga identifikatzeko. Adibidez, hirugarren azken bytea aldatzea zuzena bada, baina bigarren azken bytea aldatzea okerra bada, orduan azken bi byteak 0x02 direla jakiten da, eta biak deszifratu daitezke). Ondorioz, ()ren azken bytea ⊕ 0x01 da. Paddinga zuzena ez bada, erasotzaileak eko azken bytea hurrengo balio posible bihurtu dezake. Gehienez ere, erasotzaileak 256 saiakera beharko ditu ren azken bytea aurkitzeko, 255 saiakera byte bakoitzaren aukera guztietarako (256 aukera, bat kenduta eremu-printzipioagatik), gehi saiakera bat padding anbiguoa ezabatzeko.[7]

ren azken bytea zehaztu ondoren, erasotzaileak teknika bera erabil dezake ren bigarren azken bytea lortzeko. Erasotzaileak ren azken bytea 0x02 ezartzen du, eko azken bytea () ⊕ 0x02 bihurtuz. Ondoren, aurreko metodo bera erabiltzen du, oraingoan bigarren azken bytea aldatuz paddinga zuzena izan arte (0x02, 0x02).

Bloke batek 128 bit dituenean (AES, adibidez), hau da, 16 byte, erasotzaileak testu argia gehienez ere 256⋅16 = 4096 saiakeretan lortuko du. Honek askoz azkarrago egiten du 128 biteko giltza bat indar handiko erasoaren bidez deskodetzea baino, hau saiakera behar izango lituzke honek.

Mezuak enkriptatzea Padding Oracle erasoarekin (CBC-R)

CBC-R[8] decripzio testu bat enkriptatutako testua bihurtzen du, eta batez ere padding oracle aurkako erasoetan erakusten da.

Padding oracle eraso bat erabiliz, CBC-Rek hasieratze bektore bat eta zifratutako bloke bat sortu ditzake edozein testurentzat:

  • edozein zifratutako testu deszifratu Pi = PODecrypt( Ci ) XOR Ci−1,
  • aurreko zifratze-blokea Cx−1  aukeratu,
  • zifratze/testu argi bikote balioduna ekoitzi Cx-1 = Px XOR PODecrypt( Ci ).

N bloke luzeko zifratu bat sortzeko, erasotzaileak N padding oracle eraso egin behar ditu. Eraso hauek kateatu egiten dira, mezuaren amaieratik hasita (CN) mezuaren hasierara (C0, IV) testu argi egokia eraikitzeko. Pauso bakoitzean, padding oracle eraso bat erabiltzen da aurretik aukeratutako zifratze-testurako IVa eraikitzeko.

CBC-R erasoak ez du funtzionatuko zifratze eskema baten aurka, zifratutako testua deszifratu aurretik autentifikatzen badu (mezu autentifikazio kode bat edo antzeko bat erabiliz).

Padding oracle erasoa erabiltzen

Jatorrizko CBCren aurkako erasoa Serge Vaudenayk argitaratu zuen 2002an.[3] Erasoaren instantziak SSL[9] eta IPSec[10][11] protokoloen aurka gauzatu ziren geroago. Era berean, hainbat web esparruetan ere aplikatu zen, hala nola JavaServer Faces, Ruby on Rails[12] eta ASP.NET[13][14][15], baita beste software batzuetan ere, esaterako Steam joko bezeroan.[16] 2012an, PKCS 11 kriptografia tokenen aurka eraginkorra zela frogatu zen.[1]

Eraso hauek gehienbat TLS implementazioaren bidez konponduak izan ziren, eta haren iragarpen publikoa iritsi zen ondoren, baina bertsio berri bat, Lucky Thirteen erasoak, 2013an argitaratua, denbora-tarte bat erabili zuen zaurgarritasuna berriro irekitzeko, baita aurretik finkatutako ezarpenetan ere. 2014aren hasieran, erasoa ez da jada mehatxutzat hartzen bizitza errealean, nahiz eta teoriaren arabera oraindik posible den (ikus seinale-zarata ratioa) makina klase jakin baten aurka. 2015etik aurrera, Interneteko trafikoa segurtatzeko erabiltzen diren protokolo kriptografikoen aurkako erasoen garapen-eremu aktiboena jaitsiera-erasoak dira, hala nola Logjam[17] eta Export RSA/FREAK[18] erasoak, bezeroak engainatzen dituzte eragiketa kriptografiko ez hain seguruak erabil ditzaten. Eragiketa horiek ondareko bezeroen bateragarritasuna aurreikusten dute, seguruagoak direnean. POODLE[19] izeneko eraso batek (2014aren amaieran) konbinatzen ditu bai beheranzko eraso bat (SSL 3.0ra) bai zaharrenen aurkako Padding Oracle eraso bat, protokolo ez-segurua, transmititutako datuen konpromisoa ahalbidetzeko. 2016ko maiatzean CVE-2016-2107an Lucky Thirteenen aurkako konponbide bat sortu zen, OpenSSLn denbora-oinarritutako padding oracle berria erabiliz.[20][21]

Erreferentziak

  1. a b c d e (Ingelesez) Bardou, Romain; Focardi, Riccardo; Kawamoto, Yusuke; Simionato, Lorenzo; Steel, Graham; Tsay, Joe-Kai. (2012-04-27). Efficient Padding Oracle Attacks on Cryptographic Hardware. INRIA (Noiz kontsultatua: 2024-12-08).
  2. «11th Annual USENIX Security Symposium — Technical Paper» www.usenix.org (Noiz kontsultatua: 2024-12-08).
  3. a b Serge Vaudenay (2002).https://www.iacr.org/cryptodb/archive/2002/EUROCRYPT/2850/2850.pdf
  4. a b c (Ingelesez) «Padding oracles and the decline of CBC-mode cipher suites» The Cloudflare Blog 2016-02-12 (Noiz kontsultatua: 2024-12-08).
  5. (Ingelesez) «The ROBOT Attack» robotattack.org (Noiz kontsultatua: 2024-12-08).
  6. Manger, James (2001).http://archiv.infsec.ethz.ch/education/fs08/secsem/Manger01.pdf
  7. (Ingelesez) «Is the 'Padding Oracle attack' deterministic?» Cryptography Stack Exchange (Noiz kontsultatua: 2024-12-08).
  8. Juliano Rizzo; Thai Duong (25 May 2010). http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf
  9. Brice Canvel; Alain Hiltgen; Serge Vaudenay; Martin Vuagnoux (2003),https://www.iacr.org/cryptodb/archive/2003/CRYPTO/1069/1069.pdf
  10. Jean Paul Degabriele; Kenneth G. Paterson (2007)https://web.archive.org/web/20181219001535/https://eprint.iacr.org/2007/125.pdf
  11. (Ingelesez) CiteSeerX. 2024-05-02 (Noiz kontsultatua: 2024-12-08).
  12. Juliano Rizzo; Thai Duong (25 May 2010). Practical Padding Oracle Attacks (PDF). USENIX WOOT 2010.
  13. Thai Duong; Juliano Rizzo (2011). Cryptography in the Web: The Case of Cryptographic Design Flaws in ASP.NET (PDF). IEEE Symposium on Security and Privacy 2011.
  14. «'Padding Oracle' Crypto Attack Affects Millions of ASP.NET Apps | threatpost» web.archive.org 2010-10-13 (Noiz kontsultatua: 2024-12-08).
  15. «“Padding Oracle” ASP.NET Vulnerability Explanation - LINQED.NET» web.archive.org 2010-10-23 (Noiz kontsultatua: 2024-12-08).
  16. (Ingelesez) «Breaking Steam Client Cryptography» SteamDB (Noiz kontsultatua: 2024-12-08).
  17. Matthew Green; Nadia Heninger; Paul Zimmerman; et al. (2015), Imperfect Forward Secrecy: How Diffie–Hellman Fails in Practice (PDF). For further information see https://www.weakdh.org Archived 22 December 2019 at the Wayback Machine.
  18. Matthew Green (3 March 2015). "Attack of the week: FREAK (or 'factoring the NSA for fun and profit')"; see https://www.freakattack.com Archived 5 March 2015 at the Wayback Machine for more information.
  19. (Ingelesez) «Attack of the week: POODLE» A Few Thoughts on Cryptographic Engineering 2014-10-15 (Noiz kontsultatua: 2024-12-08).
  20. OpenSSL Security Advisory [3rd May 2016]
  21. (Ingelesez) «Yet Another Padding Oracle in OpenSSL CBC Ciphersuites» The Cloudflare Blog 2016-05-04 (Noiz kontsultatua: 2024-12-08).