Tõsine turvalisus: Samba sisselogimisviga, mille põhjustab aegunud krüpto

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustab aegunud krüpto

SambaLihtsamalt öeldes on Microsoft Windowsis kasutatavate võrguprotokollide ülikasulik, megapopulaarne avatud lähtekoodiga uusrakendus ja selle ajaloolist tähtsust Interneti-töös (kahe erinevat tüüpi võrgu ühendamine) ei saa alahinnata.

1990. aastate lõpus kaotas Microsofti võrgundus oma läbipaistmatuse, patenteeritud olemuse ja sai avatud standardiks, mida tuntakse CIFS-i nime all. levinud Interneti-failisüsteem.

Kuid 1990. aastate alguses polnud selles midagi "üldist" ega "avatud", kui Austraalia akadeemik Andrew Tridgell otsustas seda parandada, rakendades ühilduva süsteemi, mis võimaldaks tal ühendada oma Unixi arvuti Windowsi võrku ja vastupidi.

Sel ajal nimetati protokolli ametlikult SMB-ks, lühendiks serveri sõnumiplokk (nimi, mida kuulete endiselt palju sagedamini kui CIFS), nii et Tridge, nagu Andrew Tridgell on tuntud, nimetas oma projekti arusaadavalt "SMBserveriks", sest see oli see.

Kuid sellenimeline kommertstoode oli juba olemas, seega oli vaja uut nime.

Siis sai projekt tuntuks kui Samba, meeldivalt meeldejääv nimi, mis tulenes sõnastikust sellise vormi sõnade otsimisest S?M?B?.

Tegelikult samba on endiselt esimene sõna väravast välja tähestikulises järjekorras dict Unixi arvutites tavaliselt leiduv fail, millele järgneb üsna halvasti sobiv sõna scramble ja täiesti sobimatu scumbag:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Mõned vead teete, kuid mõned vead saate

Aastate jooksul pole Samba projekt mitte ainult tutvustanud ja parandanud oma unikaalseid vigu, nagu iga keeruline tarkvaraprojekt tavaliselt teeb, vaid ka pärinud vead ja puudused aluseks olevas protokollis, arvestades, et selle eesmärk on alati olnud Windowsi võrkudega sujuv töötamine.

(Kahjuks nn vigade ühilduvus on sageli vältimatu osa uue süsteemi loomisel, mis töötab koos olemasolevaga.)

2022. aasta lõpus leiti üks neist „päritud haavatavustest” ja sellest teatati Microsoftile, võttes arvesse identifikaatorit. CVE-2022-38023ja paigatud 2022. aasta novembri XNUMX. aasta Patch Teisipäeva värskenduses.

See viga oleks võinud võimaldada ründajal muuta mõne võrgu andmepaketi sisu ilma, et teda oleks tuvastatud, hoolimata krüptograafiliste MAC-ide kasutamisest (sõnumite autentimiskoodid) mõeldud võltsimise ja võltsimise vältimiseks.

Eelkõige võivad kavalad küberkurjategijad sisselogimise ajal andmetega manipuleerides korraldada privileegide tõstmise (EoP) rünnaku.

Nad võiksid vähemalt teoreetiliselt petta serverit arvama, et nad on läbinud "kas teil on administraatori mandaadid?" test, kuigi neil polnud neid mandaate ja nende võltsandmed oleksid pidanud krüptograafilises kontrollis läbi kukkuma.

Krüptograafiline paindlikkus

Otsustasime sellest üsna esoteerilisest veast kirjutada mitte sellepärast, et me arvame, et teid see väga suure tõenäosusega ära kasutab (kuigi küberjulgeoleku osas võtame me sellise suhtumise ära iial ütle iial), kuid kuna see on a veel üks meeldetuletus sellest, miks krüptograafiline paindlikkus on oluline.



Kollektiivselt, vajame nii oskust kui ka tahet, et vanad algoritmid jäädavalt kõrvale jätta niipea, kui avastatakse, et need on vigased, ja mitte jätta neid lõpmatuseni lamama, kuni need muutuvad kellegi teise probleemiks. (See "keegi teine" võib kümne aasta pärast osutuda meie.)

Hämmastaval kombel eksisteeris haavatavus CVE-2022-38023, kuna nii Windows kui ka Samba toetasid endiselt terviklikkuse kaitse stiili, mis põhines ammu kasutusel olnud räsialgoritmil MD5.

Lihtsamalt öeldes võimaldas Microsofti Kerberose protokolli versiooni kasutav võrgu autentimine siiski andmete terviklikkuse kaitsmist (või kontrollsumma, kui kasutada juhuslikku, kuid mitte rangelt täpset žargooniterminit), kasutades vigast krüptograafiat.

Te ei tohiks MD5 enam kasutada, sest seda peetakse katkiseks: sihikindel ründaja võib kergesti leida kaks erinevat sisendit, mille tulemuseks on sama MD5 räsi.

Nagu te ilmselt juba teate, on krüptograafilist kvaliteeti nõudva räsi üks nõudeid, et see lihtsalt ei tohiks olla võimalik.

Žargoonis nimetatakse kahte sisendit, millel on sama räsi, kui a kokkupõrge, ja seal ei peaks olema programmilisi nippe ega otseteid, mis aitaksid teil neid kiiresti leida.

Mitte mingil juhul ei tohiks leida kokkupõrget, mis on parem kui lihtne õnn – proovige ikka ja jälle pidevalt muutuvate sisendfailidega, kuni saavutate jackpoti.

Kokkupõrke tegelik hind

Eeldades usaldusväärset algoritmi, millel puuduvad kasutatavad nõrkused, võiks eeldada, et X biti väljundiga räsi vajab umbes 2X-1 püüab leida teist sisendit, mis põrkas kokku olemasoleva faili räsiga.

Isegi kui tahtsite vaid leida suvalised kaks sisendit (kaks suvalist sisendit, olenemata sisust, suurusest või struktuurist), millel on just sama räsi, võiksite eeldada, et vajate veidi rohkem kui 2X / 2 proovib enne kokkupõrget tabada.

Mis tahes räsialgoritm, mida saab usaldusväärselt kiiremini purustada, ei ole krüptograafiliselt ohutu, sest olete näidanud, et selle sisemine protsess sisestatud andmete purustamiseks, tükeldamiseks ja segamiseks ei anna tõeliselt pseudojuhuslik tulemus.

Pange tähele, et mis tahes võimalusest parem krakkimisprotseduur, isegi kui see ainult kiirendab kokkupõrke genereerimise protsessi ja seetõttu ei kujutaks endast praegu reaalses elus ärakasutatavat ohtu, hävitab usu aluseks olevasse krüptoalgoritmi, õõnestades selle krüptograafilise õigsuse väiteid. .

Kui on 2X erinevaid võimalikke räsiväljundeid, loodate saavutada 50:50 tõenäosuse leida sisend konkreetse, ettemääratud räsiga pärast umbes poole vähem katseid ja 2X/ 2 = 2X-1. Kahe põrkuva faili leidmine on lihtsam, sest iga kord, kui proovite uut sisendit, võidate, kui teie uus räsi põrkab kokku mistahes eelmistest sisenditest, mida olete juba proovinud, sest lubatud on mis tahes sisendite paar. Sordi „selles hiiglaslikus mahus sobivad kõik kaks faili” kokkupõrke korral saavutate eduvõimaluse 50:50, mis on vaid veidi suurem kui võimalike räside ruutjuur ja √2X = 2X / 2. Seega võiks 128-bitise räsi (nt MD5) puhul oodata keskmiselt umbes 2127 plokid, et need sobiksid konkreetse väljundväärtusega, ja 264 põrkuvate sisendite paari leidmiseks.

Kiired MD5 kokkupõrked on tehtud lihtsaks

Kuna see juhtub, ei saa te lihtsalt genereerida kahte täiesti erinevat, omavahel mitteseotud pseudojuhuslikku sisendit, millel on sama MD5 räsi.

Ja te ei saa lihtsalt MD5 räsist tagasi minna, et avastada midagi konkreetse sisendi kohta, mis selle tekitas. See on veel üks krüptograafiline lubadus, mida usaldusväärne räsi peab täitma.

Kuid kui alustate kahe identse sisendiga ja sisestate iga sisendvoo samasse kohta teadlikult arvutatud paar kokkupõrkeid tekitavaid tükke, saate isegi tagasihoidlikus sülearvutis sekunditega usaldusväärselt luua MD5 kokkupõrkeid.

Näiteks siin on meie kirjutatud Lua programm, mille saab mugavalt tükeldada kolmeks erinevaks osaks, millest igaüks on 128 baiti pikk.

Seal on koodi eesliide, mis lõpeb tekstireaga, mis alustab Lua kommentaari (string, mis algab --[== real 8), siis on 128 baiti kommentaariteksti, mida saab asendada kõigega, mis meile meeldib, sest seda ignoreeritakse faili käitamisel (read 9 kuni 11) ja kommentaari sulgemiseks on 128-baidine koodiliide ( stringi alustamine --]== real 12) ja lõpetab programmi.

Isegi kui te pole programmeerija, näete tõenäoliselt, et aktiivne kood loeb lähtekoodifaili enda sisu [rida 14] (Lua puhul väärtus arg[0] real 5 on praegu töötava skriptifaili nimi), seejärel prindib selle välja hex dump-na [rida 15] , millele järgneb selle MD5 räsi [rida 17]:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Faili käitamine on sisuliselt ennast kirjeldav ja muudab kolm 128-baidist plokki ilmseks:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

MD5 kasutamine uurimistööriist kutsutud md5_fastcoll, mille algselt lõi matemaatik Marc Stevens Osana tema krüptograafia magistrikraadist 2007. aastal koostasime kiiresti kaks 128-baidist MD5 kokkupõrkeid loovat tükki, mida kasutasime ülaltoodud failis näidatud kommentaariteksti asendamiseks.

See lõi kaks faili, mis mõlemad töötavad endiselt nagu varem, kuna muudatused piirduvad kommentaariga, mis ei mõjuta kummagi faili käivitatavat koodi.

Kuid need on mitme baidi poolest nähtavalt erinevad ja seetõttu peaksid neil olema täiesti erinevad räsiväärtused, nagu järgmine koodide erinevus (žargoon tuvastatud erinevuste dump) paljastab.

Teisendasime selguse huvides 128-baidised kokkupõrkeid tekitavad tükid, mis ei ole prinditava tekstina mõistlikud, kuueteistkümnendsüsteemiks:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Nende mõlema käivitamine näitab aga selgelt, et need kujutavad endast räsikokkupõrget, kuna neil on sama MD5 väljund:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Kokkupõrke keerukus on uuritud

MD5 on 128-bitine räsi, nagu ülaltoodud väljundstringid näitavad.

Niisiis, nagu varem mainitud, eeldame, et vajame umbes 2128/2Või 264 püüab keskmiselt tekitada mis tahes MD5 kokkupõrget.

See tähendab minimaalselt umbes 18 kvintiljoni MD5 räsiploki töötlemist, kuna 264 = 18,446,744,073,709,551,616.

Hinnangulise MD5 räsisageduse tipptasemel, umbes 50,000,000 10,000 10,000 plokki sekundis meie sülearvutis, tähendab see, et peaksime ootama rohkem kui 100,000 XNUMX aastat ja kuigi hästi rahastatud ründajad võivad sellest hõlpsasti XNUMX XNUMX–XNUMX XNUMX korda kiiremini minna, isegi nemad seda teeksid. oodake nädalaid või kuid, kuni ilmneb üks juhuslik (ja mitte tingimata kasulik) kokkupõrge.

Kuid ülaltoodud kahepoolsete Lua-failide paar, millel on täpselt sama MD5 räsi, hoolimata sellest, et need ei ole selgelt identsed, võttis meil ettevalmistamiseks vaid paar sekundit.

Tõepoolest, 10 erineva kokkupõrke genereerimine 10 faili jaoks, kasutades 10 erinevat algusprefiksit, mille me ise valisime, võttis meil aega: 14.9 s, 4.7 s, 2.6 s, 2.1 s, 10.5 s, 2.4 s, 2.0 s, 0.14 sek. ja 8.4 sek.

On selge, et MD5 krüptograafiline lubadus pakkuda nn kokkupõrkekindlus on põhimõtteliselt katki...

…ilmselt koefitsiendiga vähemalt 25 miljardit, jagades kokkupõrke leidmiseks oodatava keskmise aja (tuhanded aastad, nagu ülalpool hinnatud) halvima ajaga, mille me tegelikult mõõdeti (14.9 sekundit) kokkupõrke ajal. kümme erinevat kokkupõrget ainult selle artikli jaoks.

Autentimisviga selgitatud

Aga kuidas on lood MD5 ebaturvalise kasutamisega CVE-2022-38023-s?

Lua-stiilis pseudokoodis oli sisselogimisel kasutatud vigane sõnumi autentimiskood arvutatakse niimoodi:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Selgituseks: kasutatava autentimiskoodi arvutab hmac.md5() funktsioonikutse real 15, kasutades nn a võtmega räsi, antud juhul HMAC-MD5.

Nimi HMAC on lühend sõnast krüptograafiline konstruktsioon räsipõhiste sõnumite autentimiskoodide genereerimiseks, ja järelliide -MD5 tähistab räsimisalgoritmi, mida see sisemiselt kasutab.

HMAC kasutab sõnumi autentimiskoodi loomiseks salajast võtit, mis on kombineeritud kahe aluseks oleva räsi kutsega, mitte ühe, vaid ühe:

Tõsine turvalisus: Samba sisselogimisviga, mille põhjustas vananenud krüpto PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.
Ülalpool kasutame MD5 sisemiselt, nii et seda algoritmi on tähistatud kui HMAC-MD5. Alternatiivsed konstruktsioonid, mida peetakse 2023. aastal ohutuks, hõlmavad HMAC-SHA-256 ja HMAC-SHA-512, kasutades tumepunases faasis räsifunktsiooni SHA-256 või SHA-512.

Võtme osad on esmalt ümber pööratud ja see lisatakse esitatud andmetele enne esimese räsi algust.

See vähendab oluliselt kontrolli, mida krüptokrakkerid räsimisprotsessis kokkupõrget või muud mittejuhuslikku käitumist provotseerida üritavad, räsifunktsiooni sisemise oleku üle, kui sisendandmete esimesed baidid on saavutatud.

Eelkõige takistab salajane võti ründajatel alustamast enda valitud sõnumi eesliitega, nagu me tegime twohash.lua näide ülalt.

Seejärel, kui esimene räsi on arvutatud, pööratakse võtmele teistsugune bittide komplekt, lisatakse see esimesele räsiväärtusele ja uued sisendandmed räsitakse teist korda.

See takistab ründajatel manipuleerimast ka HMAC-arvutuse viimase osaga, eriti takistades neil lisada räsiprotsessi viimasele etapile enda valitud järelliidet.

Tõepoolest, kuigi te ei peaks MD5-d üldse kasutama, ei ole me teadlikud ühestki praegusest rünnakust, mis võib algoritmi rikkuda, kui seda kasutatakse HMAC-MD5 vormis juhuslikult valitud võtmega.

Auk on keskel

Kasutatav auk ülaltoodud pseudokoodis ei ole seega ühelgi real, kus hmac.md5() funktsiooni kasutatakse.

Selle asemel on vea keskmes rida 11, kus andmed, mida soovite autentida, on tihendatud fikseeritud pikkusega stringiks ...

.. surudes selle läbi ühe lihtsa vana MD5 kutsumise.

Teisisõnu, olenemata sellest, millise HMAC-funktsiooni te real 15 valite ja kui tugev ja kokkupõrkekindel see viimane samm ka poleks, on teil siiski võimalus 11. real põhjustada räsikokkupõrge.

Lihtsamalt öeldes, kui teate andmeid, mis peaksid sisestama chksum() funktsioon autentida, ja saate kasutada kokkupõrkegeneraatorit, et leida sama MD5 räsiga erinev andmeplokk…

…rida 11 tähendab, et sa lõpetad täpselt sama sisendväärtusega (muutuja signdat pseudokoodis).

Seega, kuigi te võite lõpus kasutada tugeva võtmega sõnumi kokkuvõtte funktsiooni, võite siiski autentida MD5 räsi, mis tuletati petturitest andmetest.

Vähem oleks olnud rohkem

Nagu Samba oma turvabülletään kirjeldab probleemi kompaktselt:

Nõrkus […] seisneb selles, et turvaline kontrollsumma arvutatakse järgmiselt HMAC-MD5(MD5(DATA),KEY), mis tähendab, et aktiivne ründaja, kes teab lihtteksti andmeid, võib luua teistsuguse valiku DATA, sama MD5 kontrollsummaga ja asendada see andmevoos ilma tuvastamata.

Irooniline, jättes välja MD5(DATA) osa ülaltoodud HMAC valemist, mis esmapilgul näib suurendavat üldist "segamisprotsessi", parandaks kokkupõrkekindlust.

Ilma selle keskel oleva MD5 tihenduseta peaksite leidma kokkupõrke HMAC-MD5-s endas, mis pole tõenäoliselt 2023. aastal võimalik isegi peaaegu piiramatu valitsuse rahastamise korral, vähemalt mitte proovitud võrguseansi jooksul. kompromisse tegema.

Mis nii kaua aega võttis?

Nüüdseks olete ilmselt imestanud, nagu meiegi, miks see viga nii kaua avastamata või vähemalt parandamata seisis.

Lõppude lõpuks, RFC 6151, mis pärineb 2011. aastast ja kannab tähendusrikkalt kõlavat pealkirja Värskendatud turvakaalutlused MD5 Message-Digesti ja HMAC-MD5 algoritmide jaoks, annab nõu järgmiselt (meie rõhuasetus, rohkem kui kümme aastat hiljem):

Tundub, et HMAC-MD5 rünnakud ei viita praktilisele haavatavusele, kui seda kasutatakse sõnumi autentimiskoodina. Seetõttu ei pruugi olla kiireloomuline HMAC-MD5 eemaldamine olemasolevatest protokollidest. Kuid kuna MD5 ei tohi kasutada digitaalallkirjade andmiseks, uue protokolli kujunduse jaoks, šifrikomplekti HMAC-MD5-ga ei tohiks kaasata.

Näib siiski, et kuna enamikul viimastel SMB-serveriplatvormidel on HMAC-MD5 autentimine välja lülitatud, kui kasutajad proovivad sisse logida, siis seda ebaturvalist režiimi toetavad SMB-kliendid üldiselt seda ei kasutanud (ja oleks nagunii ebaõnnestunud, kui nad proovis).

Kliendid tundusid vaikimisi olevat "kaitstud" ja ebaturvaline kood näis olevat sama hästi kui kahjutu, sest nõrka autentimist polnud vaja ega kasutatud.

Nii et potentsiaalne probleem lihtsalt ei saanud kunagi väärilist tähelepanu.

Kahjuks ebaõnnestub selline "eelduste turvalisus" täielikult, kui juhtute sattuma (või teid meelitada) serverisse, mis selle ebaturvalisusega nõustub. chksum() algoritm sisselogimise ajal.

Selline "alandamise probleem" ei ole uus: juba 2015. aastal töötasid teadlased välja kurikuulsa FREAK ja LOGJAM rünnakud, mis meelitasid võrgukliente sihilikult kasutama niinimetatud EXPORT-šifreid, mis olid tahtlikult nõrgendatud krüpteerimisrežiimid, mida USA valitsus eelmisel sajandil seadusega kummaliselt nõudis.

Nagu me siis kirjutasime:

EXPORT-klahvi pikkused valiti 1990. aastatel peaaegu murduvateks, kuid protsessori kiiruse arenguga sammu pidamiseks neid ei pikendatud.

Selle põhjuseks on asjaolu, et USA loobus umbes 2000. aastal eksporditavatest šifritest.

Need olid algusest peale rumal idee: USA ettevõtted importisid lihtsalt krüptotarkvara, millel polnud ekspordipiiranguid, ja kahjustasid oma tarkvaratööstust.

Muidugi, kui seadusandjad järele andsid, muutusid EXPORT šifrikomplektid üleliigseks, nii et kõik lõpetasid nende kasutamise.

Kahjuks säilitasid paljud krüptograafilised tööriistakomplektid, sealhulgas OpenSSL ja Microsofti SChannel, koodi, et neid toetada, nii et teid (või mis veelgi murettekitavamalt informeeritud kelme) ei takistatud nende kasutamist.

Seekord näib, et peamine süüdlane serverite seas, mis endiselt seda katkist MD5-plus-HMAC-MD5 protsessi kasutavad, on NetApp vahemik, milles mõned tooted ilmselt jätkas (või tegi seda kuni viimase ajani) sellele riskantsele algoritmile tuginemist.

Seetõttu võite mõnikord siiski läbida haavatava võrgu sisselogimisprotsessi ja olla CVE-2022-38023 ohus, võib-olla isegi teadmata.

Mida teha?

See viga on lõpuks olemas tegeletud, vähemalt vaikimisi Samba uusimas versioonis.

Lihtsamalt öeldes, Samba versioon 4.17.5 sunnib nüüd kahte varianti reject md5 clients = yes ja reject md5 servers = yes.

See tähendab, et kõik krüptograafilised komponendid erinevates SMB võrguprotokollides, mis hõlmavad MD5 algoritmi (isegi kui need on teoreetiliselt ohutud, nagu HMAC-MD5), on vaikimisi keelatud.

Kui teil on seda tõesti vaja, saate need uuesti sisse lülitada, et pääseda juurde teie võrgu teatud serveritele.

Lihtsalt veenduge, kui loote erandeid, mida Interneti-standardid on juba rohkem kui kümme aastat ametlikult soovitanud ...

…et määrate endale kuupäeva, milleks need mittevaikimisi valikud igaveseks lõpetate!

Krüptograafilised rünnakud muutuvad üha targemaks ja kiiremaks, nii et ärge kunagi lootke aegunud protokollidele ja algoritmidele, mida lihtsalt "ei kasutata".

Eemaldage need oma koodist täielikult, sest kui neid üldse pole, EI SAA te neid kasutada ja keegi, kes püüab teid ebakindlusse meelitada, ei saa teid neid kasutama petta.


Ajatempel:

Veel alates Alasti turvalisus