<<< ELMŰ vs DíjnetTudodki? >>>

Nagy port kavart fel a napokban az Apple SSL megvalósításában felbukkant hiba. Egy eltévedt goto utasítás (amiről az egyetemen azt tanultuk, hogy lehetőleg soha ne használjuk, mert óriási kalamajkát okozhat) miatt érvénytelen tanúsítványokat is elfogadott. Lényegében minden Apple terméket érintett a hiba, az IOS-t futtató (iPhone, iPad, i*) rendszereket is, és az OSX-et futtató Mac-eket is.

Érdekes módon nem találkoztam arra vonatkozó állítással, hogy a hibás kód tényleg minden tanúsítványt elfogadott, vagy csak bizonyos csillagállások (speciális módon összeállított tanúsítványok) esetén engedett át tanúsítványt ellenőrzés nélkül. A Buhera blogon szereplő kódrészlet szerint mintha hash-elés közben szakadna meg az ellenőrzés, ami azt is jelentheti, hogy a minden tanúsítványt elfogad, de az is igaz, hogy tanúsítvány ellenőrzése közben nagyon sok ponton kell hash-elni. Ha tényleg minden tanúsítványt elfogadott, akkor nagyon furcsa, hogy az Apple-nél nem bukott ki az egész egy automata teszten. Hozzáteszem, nem nyomoztam a kérdésben.

Schneier arról spekulál, hogy talán szándékos volt a hiba, míg egy másik cikk szerint talán mégis véletlen, mert elég béna megoldás így helyezni el kiskapukat. (Szomorú, hogy ma ez a kérdés komolyan fel kell, hogy merüljön.)

A napokban a GnuTLS-ben is fény dserült egy hasonló hibára, bár kapásból nem jut eszembe egy olyan alkalmazás sem, amely GnuTLS-t használna.

Furcsa, hogy ilyen sok hibára derül fény a tanúsítványok ellenőrzése körül? Furcsa, hogy évekig (sőt, évtizedekig) rejtve maradnak? - Az internetes tanúsítványok ellenőrzésének módját az RFC 5280 6. fejezete írja le, és több, mint 20 oldalon keresztül taglalja az algoritmust. Az X.509 is hosszú és bonyolult leírást ad a kérdésről. Részt vettem az ETSI PKI szabványosítási munkájában, dolgoztam IETF-es PKI-s kollégákkal is, sok PKI-hoz értő embert ismerek itthon is, külföldön is, és a következőt látom:

  1. Nagyon kevesen értik pontosan, még a PKI-hoz értő kollégák között is, hogy hogyan kell ellenőrizni egy tanúsítványt.

  2. Nem tudok két olyan embert embert mondani, akik pontosan ugyanúgy értenék a szabványt, és nem tudok két olyan implementációt, amelyek ugyanúgy működnének.

Az X.509 nagyot akart meríteni, így rendkívül komplex lett. Rengeteg opcionális elemet, kiterjesztést tartalmaz, és ezek között rafinált relációkat határozhatunk meg. Önmagában az is bonyolulttá teszi a helyzetet, hogy nem minden hitelesítés-szolgáltató használ, és nem minden alkalmazás ismer és kezel minden elemet. Vegyük hozzá, hogy nagyon sok hibás vagy nem szabványos tanúsítvány kering az Interneten, és ezeket sokszor nagyon nehéz lecserélni. Az X.509-nek egy igen szűk részhalmaza terjedt el, és ott is mindenki arra a néhány alapvető esetre fókuszál, ahol az alkalmazások nagyjából ugyanúgy működnek.

A téma iránt érdeklődőknek Peter Gutman X.509 Style Guide című írását javaslom, de vigyázat, a kínos pontok felemlegetése mellett a szerző még Lovecraft idézetekkel is riogatja az olvasót.

Csoda, hogy hibás implementációk vannak, amikor az sem egyértelmű, hogy kellene jól működnie?

 

 

 
Ez az én személyes honlapom, amit itt írok, az az én saját, személyes véleményem, nem feltétlenül egyezik a munkahelyem véleményével. A blogomban szereplő tartalom a Creative Commons CC BY licenc szerint (azaz a szerző és a forrás megnevezésével) szabadon felhasználható.