Mis on SHAttered? SHA-1 kokkupõrke rünnakud, selgitatud
2016. aasta esimesel päeval lõpetas Mozilla Firefoxi veebibrauseris toetuse nõrgeneva turvatehnoloogia SHA-1 toetuseks. Peaaegu kohe vahetasid nad oma otsuse tagasi, sest see vähendaks juurdepääsu mõnele vanemale veebisaidile. Kuid 2017. aasta veebruaris tõid nende hirmud lõpuks välja: teadlased murdsid SHA-1, luues esimese reaalse maailma kokkupõrke rünnaku. Siin on see, mida see kõik tähendab.
Mis on SHA-1?
SHA-1 SHA tähistab Turvaline Hash algoritm, ja lihtsalt öeldes võite seda mõelda mingi matemaatika probleemina või meetodina skrambleerib talle pandud andmed. Ameerika Ühendriikide julgeolekuameti poolt välja töötatud paljude tehnoloogiate põhikomponent, mida kasutatakse oluliste edastuste krüptimiseks Internetis. Tavapärased krüpteerimismeetodid, mida SSL ja TLS on kuulnud, võivad kasutada räsifunktsiooni nagu SHA-1, et luua oma brauseri tööriistaribal näha olevad allkirjastatud sertifikaadid.
Me ei lähe sügavale ükskõik millise SHA funktsiooni matemaatika- ja arvutiteadusesse, kuid siin on põhiidee. „Hash” on unikaalne kood, mis põhineb mis tahes andmete sisendil. Isegi väike, juhuslik tähtede rida, mis sisestatakse räsifunktsioonile nagu SHA-1, tagastab pika, määratud arvu märke, mis muudab (potentsiaalselt) võimatuks märkide rea tagasi pöörduda algandmetesse. Nii toimib tavaliselt paroolide salvestamine. Parooli loomisel salvestab server parooli ja salvestab selle. Kui naasete oma parooli sisestades, on see uuesti hõivatud. Kui see vastab algsele hash-le, võib eeldada, et sisend on sama ja teile antakse juurdepääs teie andmetele.
Hashfunktsioonid on kasulikud eelkõige seetõttu, et nende abil on lihtne öelda, kas sisend, näiteks fail või parool on muutunud. Kui sisendandmed on salajased, nagu parool, on räsi peaaegu võimatu algandmeid tagasi pöörata ja taastada (tuntud ka kui „võti”). See on natuke erinev “krüpteerimisest”, mille eesmärk on andmete krüptimine, et seda hiljem krüpteerida ja salajasi võtmeid kasutada. Hashes on lihtsalt mõeldud selleks, et tagada andmete terviklikkus - veendumaks, et kõik on sama. Git, avatud lähtekoodiga versioonide kontrollimise ja levitamise tarkvara, kasutab sel põhjusel SHA-1 hashes.
See on palju tehnilist teavet, kuid lihtsalt öeldes: räsi ei ole sama, mis krüpteerimisel seda kasutatakse, et tuvastada, kas fail on muutunud.
Kuidas see tehnoloogia mind mõjutab?
Oletame, et pead külastama veebisaiti privaatselt. Teie pank, teie e-post, isegi teie Facebooki konto kõik kasutavad krüpteerimist, et hoida teie poolt privaatselt saadetud andmeid. Professionaalne veebisait pakub krüpteerimist, saades usaldusväärse asutuse - kolmanda osapoole - sertifikaadi, mis on usaldusväärne, et tagada krüpteerimine veebisaidi ja kasutaja vahel, mitte ükski teine pool. See suhe kolmanda osapoolega, mida kutsutakse Sertifitseerimisasutused, või CA, on väga oluline, sest iga kasutaja saab luua „ise allkirjastatud” sertifikaadi - seda saate teha ka ise masinaga, kus töötab Linux Open SSL-iga. Symantec ja Digicert on kaks laialdaselt tuntud CA ettevõtet.
Käime läbi teoreetilise stsenaariumi: How-To Geek soovib hoida kasutajate seansside privaatset krüpteerimist, nii et ta avaldab sellisele CA-le nagu Symantec Sertifikaadi allkirjastamise taotlus, või CSR. Nad loovad a avalik võti ja isiklik võti Interneti kaudu saadetud andmete krüptimiseks ja dekrüpteerimiseks. CSR-i taotlus saadab Symantecile avaliku võtme koos veebisaidi teabega. Symantec kontrollib võtit oma rekordi vastu, et kontrollida, kas kõik osapooled ei muutu andmeid, sest andmete väike muutmine muudab räsi radikaalselt erinevaks.
Need avalikud võtmed ja digitaalsed sertifikaadid allkirjastatakse räsifunktsioonidega, sest nende funktsioonide väljund on lihtne näha. Avalik võti ja sertifikaat, millel on kontrollitud räsi Symantec'ilt (meie näites), on asutus, mis tagab kasutajale How-To Geeki, et võti on muutmata ja mitte keegi pahatahtlik.
Kuna räsi on kergesti jälgitav ja võimatu (mõned ütlevad "raskeks"), siis on õige, kontrollitud räsikirjeldus tähendab, et sertifikaati ja ühendust saab usaldada ning andmeid saab kokku leppida, et need oleksid krüpteeritud lõpust lõpuni . Aga mis siis, kui räsi ei olnud tegelikult ainulaadne?
Mis on kokkupõrke rünnak ja kas see on reaalses maailmas võimalik?
Võib-olla olete kuulnud matemaatika “sünnipäevaprobleemist”, kuigi te ei pruugi teada, mida seda kutsuti. Põhiidee on, et kui kogute piisavalt suure hulga inimesi, on tõenäoline, et kaks või enam inimest saavad sama sünnipäeva. Kõrgem kui soovisite, tegelikult küllalt, et see tundub imelik kokkusattumus. 23-liikmelises rühmas on 50% tõenäosus, et kaks jagavad sünnipäeva.
See on loomulik nõrkus kõigis hashides, sh SHA-1. Teoreetiliselt peaks SHA funktsioon looma unikaalse räsi mis tahes selles sisalduvate andmete jaoks, kuid kui suureneb hashide arv, muutub üha tõenäolisemaks, et erinevad andmete paarid võivad luua sama räsi. Seega võiks usaldusväärse sertifikaadiga luua ebausaldusväärse sertifikaadi, millel on identne räsi. Kui nad said selle ebausaldusväärse sertifikaadi installimise, võib see maskeerida usaldusväärseks ja levitada pahatahtlikke andmeid.
Sobivate räsi leidmine kahes failis nimetatakse a kokkupõrke rünnak. On teada, et MD5 hashide puhul on juba juhtunud vähemalt üks suuremahuline kokkupõrkehoog. Kuid 27. veebruaril 2017 teatas Google SHAtteredest, mis oli esimene SHA-1 kokkupõrge. Google suutis luua PDF-faili, millel oli samasugune SHA-1 räsi kui teine PDF-fail, vaatamata sellele, et sisu on erinev.
SHAttered teostati PDF-failil. PDF-failid on suhteliselt lahtised; palju pisikesi, bititaseme muudatusi saab teha, takistamata lugejaid selle avamist ega nähtavaid erinevusi. PDF-faile kasutatakse sageli ka pahavara edastamiseks. Kuigi SHAttered võivad töötada muud tüüpi failidega, näiteks ISO-dega, on sertifikaadid jäigalt määratletud, mistõttu selline rünnak on ebatõenäoline.
Niisiis, kui lihtne see rünnak on? SHAttered põhines Marc Stevens'i poolt 2012. aastal avastatud meetodil, mis nõudis üle 2 ^ 60,3 (9,223 kvintillioni) SHA-1 toiminguid - uskumatu arvu. See meetod on siiski veel 100 000 korda vähem toiminguid, kui oleks vaja sama tulemuse saavutamiseks brutse jõuga. Google leidis, et paralleelselt töötavate 110 kõrgekvaliteedilise graafikakaardiga kokkupõrke tegemiseks kulub umbes üks aasta. Selle arvutusaja rentimine Amazon AWSilt maksaks umbes 110 000 dollarit. Pidage meeles, et kuna arvuti osade hinnad langevad ja saad vähem võimsust, on SHAttered nagu rünnakud kergemini välja tõmmata.
110 000 dollarit võib tunduda palju, kuid mõnede organisatsioonide jaoks on see taskukohasuse piires - mis tähendab, et reaalses elus cybervillians suudab luua digitaalsete dokumentide allkirju, segada varundus- ja versioonikontrollisüsteeme nagu Git ja SVN või teha pahatahtlikku Linuxi ISO-d seaduslikuks.
Õnneks on selliseid rünnakuid takistavaid tegureid. SHA-1 kasutatakse enamasti digitaalsete allkirjade jaoks. Sertifitseerimisasutused ei anna enam sertifikaate, mis on allkirjastatud SHA-1-ga, ning nii Chrome kui ka Firefox on nende toetused loobunud. Linuxi distributsioonid vabastavad tavaliselt sagedamini kui üks kord aastas, mistõttu ründajal on ebapraktiline luua pahatahtlik versioon ja seejärel genereerida üks polsterdatud, et saada sama SHA-1 räsi.
Teisest küljest toimuvad mõned reaalses maailmas SHAtteredel põhinevad rünnakud. SVN-i versioonikontrollisüsteem kasutab failide eristamiseks SHA-1. Kahe identse SHA-1 räsi abil PDF-faili üleslaadimine SVN-i hoidlasse põhjustab selle korrumpeerumise.
Kuidas kaitsta ennast SHA-1 rünnakute eest?
Tavalise kasutaja jaoks ei ole palju. Kui kasutate failide võrdlemiseks kontrollsummasid, tuleks SHA-1 või MD5 asemel kasutada SHA-2 (SHA-256) või SHA-3. Samuti, kui olete arendaja, kasutage kindlasti kaasaegsemaid müristamisalgoritme nagu SHA-2, SHA-3 või bcrypt. Kui olete mures selle pärast, et SHAttered on kasutatud kahe erineva faili andmiseks sama räsi kohta, on Google avaldanud SHAttered saidil tööriista, mis võib teie jaoks kontrollida.
Image Credits: Lego Firefox, palju Hash, palun ärge vigastage veebi autorit teadmata, Google.