Olay sadece aşırı UDP trafiği miydi? Yoksa onun yanında etkileşimden oluşan yan trafiklerin de bu kıyamette etkisi oldu mu?
Öncelikle aşırı UDP trafiğini biraz açıklamak istiyorum. MSSQL server 1434 numaralı portundan tek bytelik bir UDP paket aldığında (0x0A) bu paketi yollayana aynı paketle aynı porta cevap verir. Bunu bir çesit SQL pingi olarak isimlendirebiliriz. UDP `connectionless´ bir protocoldur (bağlantısız) Yani bir önceki paketten haberdar değildir. A sunucusu B sunucusuna bir SQLping yolladığında B sunucusu da aynı paketle A sunucusuna bu pinge cevap verdiğinde, A sunucusuna ilk pingleyen taraf olduğunu bildiğinden B`den gelen pakete cevap vermez. (Normalde A da aynı paketi aldığına göre cevap vermeliydi değil mi? ;) Peki diyelim ki kötü insan C bu iki SQL sunucusu birbirine düşürmek istiyor. Ne yapıyor? A´dan geliyormuş gibi bir paket yaratıyor ve B´ye yolluyor. (kaynak adresi: A) B ise aynı paketi ping cevabı şeklinde A´ya geri yolluyor, A ise bu durumdan haberdar değil! A da B`nin onu pinglediğini sanıyor ve aynı paketi geri yolluyor, B -> A, A -> B.... bu böyle sunuculardan birisi kapatılana kadar sürüyor. UDP bağlantısız bir protokol olduğundan TCP`den çok çok daha hızlı hareket edebiliyor. Böylece trafik katlanarak çoğalıp network`u doldurmaya başlıyor. (Basit ama gerçek, bu tip problemler 96`dan beri tartışılmakta: www.cert.org/advisories/CA-1996-01.html)
Gelelim yan etkilere. Peki dünya üzerinde SQL sunucu sayısı web sunucu sayısından daha az, neden code red yayılırken Internet durma noktasına gelmedi de bu olayda %95`lere varan ping kayıpları oldu? Bunun asıl cevabı UDP`nin hızlı trafiği olsa da buna bağlı olarak bence bir de SQL hizmeti sunmayan bilgisayarların (1434/1433 UDP port açık olmayan diyelim) geriye döndürdüğü ICMP cevaplarının (port unreachable gibi) routerları doldurup durma noktasına getirmesi de önemli bir unsurdu. ICMP önemli bir trafik. Çünkü birçok routerda üstünlük tanınabilen bir protokol. QoS önemli olduğu network uygulamalarında, ya da genel olarak karşı tarafın durumunun bilinmesinin hayati önem taşıdığı hallerde (VOIP, Video Stream, Finansal iletisim, vs...) ICMP öncelikli pakettir. ICMP paketlerindeki dramatik artış bu tip uygulamaların çalışmamasına sebep olabilir. (Bank of America ATMlerinin durması bu nedenden olabilir)
Evet, günümüzde yanlış yazılmış kodların ve bunların duzeltilmesine rağmen ihmal edilmelerinin önüne geçebildiğimizi, ve de geçebileceğimizi söylemek çok güç. Bu boyle geldi uzun bir süre daha böyle gidecek gibi gözüküyor. Ama hey? bi dakka! böyle gitmezse bizler aç kalırız değil mi? ;) (Işler böyle gitmesin, ben aç kalmaya razıyım)
Mini kaynakça:
Unauthenticated Remote Compromise in MS SQL Server 2000
CERT® Advisory CA-1996-01 UDP Port Denial-of-Service Attack
Sapphire worm code disassembled (eEye Digital Security: Jan 25, 2003)
Evet hepimiz biliyoruz ki SQ_Hell, Slammer, veya ne isim verirseniz bu kurtçuk Internet'i hafta sonundan itibaren esir aldı. Bizlere fazlamesai yaptırdı, bolbol küfür ettirirken bazı şeylere de dikkatimizi çekmeyi sağladı. Örneğin patch ne demek bir kere daha ögrendik. Ya da geç kalınmış ve tamamen test edilmemiş SP'lerin insanların başına neler getirebildiğini gördük. Ama bunlardan bahsetmeyeceğim. Bahsedeceğim şey neden Internetin bu problemden dolayı durma aşamasına geldiği?