TCP broken beyond repair?

An den we­ni­gen Posts der letz­ten Wo­chen läßt sich leicht er­ah­nen, daß ich bis über beide Ohren in Ar­beit ste­cke - aber die Schlag­zei­le "dead­ly TCP de­ni­al-of-ser­vice at­tack - TCP bro­ken bey­ond re­pair?" hat mich dann doch auf­hor­chen las­sen. Die Ent­wi­cker des Port­scan­ners Uni­corn­scan sind auf (meh­re­re?) neue An­griffs­vek­to­ren auf TCP ge­sto­ßen; De­tails wol­len sie auf der T2-Kon­fe­renz Mitte Ok­to­ber 2008 in Hel­sin­ki vor­stel­len, ei­ni­ge grobe In­for­ma­tio­nen konn­te man die­sem Pod­cast-In­ter­view ent­neh­men (Seite si­cher bald ge-slash­dot-tet, hier die Epi­so­de im Coral Cache; das eng­lisch­spra­chi­ge In­ter­view be­ginnt bei 5:50 Mi­nu­ten und dau­ert ca. 35 Mi­nu­ten).

In dem In­ter­view be­rich­ten die Ent­wick­ler, daß sie auf das Pro­blem durch Zu­fall ge­sto­ßen sind: Bei der Ent­wick­lung eines mög­lichst schnel­len Port­scan­ners haben sie den TCP-Stack (zu­min­dest zu Tei­len) nach­im­ple­men­tiert. Um mög­lichst viele Ver­bin­dun­gen schnell tes­ten zu kön­nen, haben sie ana­lo­ge Pro­blem zu einem Ser­ver, der mit vie­len Ver­bin­dun­gen gleich­zei­tig um­ge­hen muß: Es müs­sen sich die Zu­stän­de der je­wei­li­gen Ver­bin­dung ge­merkt und ein­ge­hen­de Pa­ke­te die­sen Zu­stän­den zu­ge­ord­net wer­den. Hier­zu be­dient sich Uni­corn­scan des­sel­ben Tricks, mit dem sich Ser­ver vor SYN-Flood-An­grif­fen schüt­zen: Diese co­die­ren eine Au­then­ti­sie­rungs-In­for­ma­ti­on in der Ant­wort auf ein SYN-Pa­ket (hier wei­te­re De­tails über SYN-Coo­kies); Uni­corn­scan be­nutzt ein "in­ver­ses SYN-Coo­kie", die Zu­standsin­for­ma­tio­nen für den Ver­bin­dungs­auf­bau wer­den eben­falls in der TCP se­quence num­ber co­diert. Nun ist das Pro­gramm in der Lage, ein pas­sen­des ACK-Pa­ket zum end­gül­ti­gen Auf­bau der Ver­bin­dung zu schi­cken, ohne selbst grö­ße­re Men­gen an Res­sour­cen zu ver­brau­chen. Der Ser­ver hin­ge­gen er­hält das ACK-Pa­ket und al­lo­kiert die nö­ti­gen Res­sour­cen für die ver­meint­lich er­folg­reich auf­ge­bau­te Ver­bin­dung. Das Er­geb­nis hier­von ist ein De­ni­al-of-Ser­vice ähn­lich dem 1985 pu­bli­zier­ten SYN-Floo­ding; der ein­zi­ge Un­ter­schied zum An­griff von da­mals ist, daß die Ab­sen­de­r­adres­se kor­rekt sein muß (der An­grei­fer muß ja auch das pas­sen­de ACK-Pa­ket ge­ne­rie­ren).
Auf dem Ser­ver wer­den meh­re­re Res­sour­cen in An­spruch ge­nom­men: Zu­nächst wird Spei­cher für die Zu­stands­da­ten der ge­öff­ne­ten Ver­bin­dung al­lo­kiert. Die meis­ten Be­triebs­sys­te­me be­sit­zen eine harte Ober­gren­ze für die ma­xi­ma­le An­zahl of­fe­ner TCP-Ver­bin­dun­gen. Zu­sätz­lich wird eine Ti­mer-Re­sour­ce be­nö­tigt, um Pa­ke­te ohne Be­stä­ti­gung er­neut zu über­tra­gen. Laut dem In­ter­view ge­nügt eine ge­rin­ge Band­brei­te (ge­nannt wur­den 10 Pa­ke­te pro Se­kun­de), um einen Ser­ver so zu stres­sen, daß er keine wei­te­ren TCP-Ver­bin­dun­gen mehr an­nimmt.
Im Ge­spräch wur­den An­griffs­va­ri­an­ten mit un­ter­schied­li­chen Aus­wir­kun­gen an­ge­spro­chen - in wie weit diese auf Im­ple­men­tie­rungs­feh­ler ein­zel­ner Sys­te­me oder prin­zi­pi­el­le Pro­to­koll­schwä­chen zu­rück­zu­füh­ren sind, wird sich nach der voll­stän­di­gen Pu­bli­ka­ti­on zei­gen. Er­wähnt wur­den Ge­rä­te, wel­che in einem Be­stimm­ten Zu­stand des TCP-Hand­shakes ein Paket ohne Ab­bruch wie­der und wie­der über­tru­gen. An­de­re Sys­te­me fro­ren kom­plett ein oder boo­te­ten neu (ich ver­mu­te, daß es sich hier um ein Pro­blem mit den aus­ge­hen­den Ti­mer-Res­sour­cen o.ä. han­delt).

Alles in allem sehen die Ent­wick­ler kei­nen "easy fix" für die Mi­se­re. Al­ler­dings sind sie zu­ver­sicht­lich, daß die In­ter­net Com­mu­ni­ty eine Lö­sung fin­den wird: Schlie­ß­lich sind über 90% des E-Mail-Ver­kehrs Spam, und trotz­dem ist E-Mail als Me­di­um un­ge­bro­chen po­pu­lär und ver­wen­det nach wie vor das alte SMTP.

Auf­grund der ge­nann­ten tech­ni­schen Um­stän­de lin­dert mög­li­cher­wei­se eine Ra­ten­li­mi­tie­rung das Pro­blem. Wegen des in­ver­se-SYN-Coo­kies kann der An­grei­fer zwar mü­he­los be­lie­big viele Ver­bin­dun­gen in­iti­ie­ren, je­doch muß er eine kor­rek­te Ab­sen­de­r­adres­se an­ge­ben. Unter Linux könn­te man bei­spiels­wei­se (zu­sätz­lich zum SYN-Coo­kie-Schutz) mit Hilfe von ip­ta­bles die An­zahl an Ver­bin­dun­gen pro IP und pro Zeit­ein­heit li­mi­tie­ren. Damit würde zu­min­dest ein ge­wis­ser Schutz gegen ein­zel­ne An­grei­fer ge­währ­leis­tet - eine Lö­sung des Pro­blems wäre dies al­ler­dings noch nicht.

Bleibt also ab­zu­war­ten, was in der Ver­öf­fent­li­chung an wei­te­ren tech­ni­schen De­tails zu lesen sein wird. Die Idee mit den in­ver­sen SYN-Coo­kies ist je­den­falls cool - ich bin ge­spannt.

(via Slash­dot)