Debian und OpenSSL: Die Schonzeit ist vorbei

De­bi­an (und De­bi­an-De­ri­va­te wie Ubu­ntu) hat ein aku­tes Pro­blem mit OpenS­SL-Schlüs­seln, die nach dem 17.9.2006(!) er­zeugt wur­den: Durch einen De­bi­an-spe­zi­fi­schen Patch sind die ver­wen­de­ten Zu­falls­zah­len so schwach, daß die Schlüs­sel leicht ge­bro­chen wer­den kön­nen und somit die Ver­schüs­se­lung von OpenS­SH, https und vie­len wei­te­ren mehr oder min­der hin­fäl­lig ist. Seit ges­tern exis­tiert ein Pro­gramm zum au­to­ma­ti­schen Bre­chen sol­cher Schlüs­sel - es ist also höchs­te Zeit, sein Schlüs­sel­ma­te­ri­al zu ak­tua­li­sie­ren und auf mög­li­che Ein­brü­che zu prü­fen! Die Ge­schich­te hin­ter dem Bug liest sich üb­ri­gens mehr als gru­se­lig:

Ein De­bi­an-Ent­wick­ler hat nach die­sem Be­richt OpenS­SL mit val­grind un­ter­sucht. Val­grind ist ein Tool, um Spei­cher­lecks und di­ver­se Pro­gram­mier­feh­ler auf­zu­spü­ren. Val­grind ent­deck­te tat­säch­lich ein po­ten­ti­el­les Pro­blem: An einer Stel­le wurde auf nicht in­i­ta­li­sier­ten Spei­cher zu­ge­grif­fen - also Spei­cher, der vom Pro­gramm an­ge­for­dert, aber noch nicht sinn­voll be­legt wurde (ein ty­pi­scher Pro­gram­mier­feh­ler ist es, ver­se­hent­lich mit dem po­ten­ti­el­len Da­ten­müll zu ar­bei­ten). Dar­auf­hin ent­fern­te der De­bi­an-Ent­wlick­ler den Auf­ruf, der zu dem Feh­ler führ­te. Dum­mer­wei­se war dies ein Teil der Rou­ti­ne, wel­che Zu­falls­zah­len für die Ge­ne­rie­rung von Schlüs­seln be­sorgt - OpenS­SL nutzt of­fen­sicht­lich sol­chen Spei­cher­müll als En­tro­pie­quel­le.
Autsch - wie kann man nur in einem si­cher­heits­kri­ti­schen Pro­gramm so un­kri­tisch her­um­fuhr­wer­ken? Ich stel­le mir ge­ra­de den zu­ge­hö­ri­gen Log­ein­trag vor: "Auf­ruf der Rou­ti­ne ent­fernt, diese lie­fer­te keine sinn­vol­len Daten, nur zu­fäl­li­ge Bits"...

Die Ana­ly­se die­ser "Ver­bes­se­rung" zeigt, daß die er­zeug­ten Schlüs­sel nun ein­zig und al­lein von der Pro­zeß-ID des Pro­gramm­laufs ab­hi­en­gen - damit schrumpf­te der Raum der Zu­falls­zah­len auf 32768 ver­schie­de­ne Werte. Daß man diese tri­vi­al durch­pro­bie­ren kann, ist wohl of­fen­sicht­lich.

Ein ge­knack­ter Schlüs­sel be­deu­tet, daß sich der be­trof­fe­ne Da­ten­ver­kehr ab­hö­ren oder via man-in-the-midd­le ma­ni­pu­lie­ren läßt. Damit wird de facto ssh zu tel­net und https zu http, jede sol­che Ver­bin­dung kann po­ten­ti­ell ab­ge­hört wer­den. ssh-Keys zur Au­then­ti­sie­rung via Schlüs­sel sind ebe­falls be­trof­fen, so kann eine sol­che Au­then­ti­sie­rung mit (im Schnitt) ca. 16000 Log­in-Ver­su­chen ge­knackt wer­den. In kri­ti­schen Um­ge­bun­gen müs­sen auch ssh-Keys, die zwar mit einer nicht kom­pro­mit­tier­ten Ver­si­on ge­ne­riert wur­den, aber deren Se­cret Key auf einem Sys­tem mit schwa­chem ssh-Host-Key lag, als kom­pro­mit­tiert be­trach­tet wer­den.

Unter dem As­pekt, daß man so nur we­ni­ge ssh-Keys für einen Ac­count durch­pro­bie­ren muß, er­schei­nen auch die ssh-Scans nach root-Ac­counts, die ich seit dem 7. Mai in mei­nen Logs finde, in einem ganz an­de­ren Licht. In die­sem Blog­ein­trag habe ich Links auf das svn-Re­po­si­to­ry von De­bi­an ge­fun­den: dies war der fa­ta­le Patch und dies ist der Fix. Der Fix wurde also 5 Tage vor dem of­fi­zi­el­len Ad­vi­so­ry, also am 8. Mai ein­ge­spielt! Dies läßt die De­bia­ner in einem dop­pelt schlech­ten Licht er­schei­nen: Zum einen wurde ein wirk­lich wich­ti­ger Patch nicht zeit­nah kom­mu­ni­ziert, zum an­dern drängt sich die Ver­mu­tung auf, daß Leute, wel­che von dem Pro­blem Kennt­nis hat­ten (was ins­be­son­de­re De­bia­ner ge­we­sen sein dürf­ten), ganz schnell ans Scan­nen ge­macht haben.

De­bi­an lie­fert im ak­tua­li­sier­ten Paket ein Tool na­mens ssh-vuln­key mit, mit dem ge­prüft wer­den kann, ob ein Schlüs­sel mit einer de­fek­ten opens­sl-Ver­si­on er­zeugt wurde. Man kann damit aber auch über­prü­fen, wel­che Web­sei­ten schwa­che Schlüs­sel be­nut­zen - so zum Bei­spiel whitehouse.​gov... ich habe die Be­fürch­tung, daß die Be­zeich­nung "se­cu­ri­ty fuck­up des Jah­res" keine allzu große Un­ter­trei­bung sein dürf­te.