Dün yaşanan ve pek çok web sitesi ile çevrimiçi hizmeti etkileyen büyük Cloudflare kesintisinin ilk etapta yoğun bir DDoS saldırısı olduğuna inanılmıştı. Ancak şirketin yaptığı detaylı incelemeler, sorunun tamamen şirket içi bir nedenden kaynaklandığını ortaya koydu: Önemli bir dosya beklenmedik şekilde iki katına çıktı ve tüm ağa yayıldı.
Bu durum, Cloudflare'ın güvenlik tehditlerine karşı koruma sağlayan makine öğrenmesi tabanlı bot yönetim sistemini güncellemek için gereken dosyayı okuması gereken yazılımlarda sorunlara yol açtı. Sorun, Cloudflare'ın temel CDN'i, güvenlik hizmetleri ve diğer birçok hizmetini etkiledi.
Şirket kurucusu ve CEO'su, yaşananlar hakkında yaptığı açıklamada, başlangıçta belirtilerin yoğun bir DDoS saldırısından kaynaklandığını düşündüklerini, ancak sorunun temel nedenini doğru bir şekilde tespit ettiklerini ve beklenenden büyük olan bu dosyanın yayılmasını durdurarak yerine önceki sürümünü koyduklarını belirtti.
Sorunun, veritabanı sistemlerinden birindeki izin değişikliklerinin, bot yönetim sisteminde kullanılan bir 'özellik dosyasının' birden fazla girdi içermesine neden olmasıyla tetiklendiği açıklandı. Bu özellik dosyası iki katına çıkınca, ağdaki tüm cihazlara yayıldı.
Bu cihazlar, trafiği Cloudflare ağı üzerinden yönlendiren yazılımları çalıştırıyor. Yazılım, bot yönetim sistemini sürekli değişen tehditlere karşı güncel tutmak için bu özellik dosyasını okuyor. Ancak yazılımın, bu özellik dosyasının boyutu için belirlediği sınır, dosyanın iki katına çıkan boyutunun altında kalınca, yazılım başarısız oldu.
Yaşanan aksaklıktan dolayı üzüntü duyduğunu belirten şirket, dosyanın önceki sürümüyle değiştirilmesinin ardından temel trafik akışının büyük ölçüde normale döndüğünü, ancak trafiğin tekrar çevrimiçi olmaya başlamasıyla ağın çeşitli bölümlerindeki yükü azaltmanın ek iki buçuk saat sürdüğünü ifade etti.
Amazon Web Services gibi Cloudflare'ın da birçok çevrimiçi hizmet tarafından kullanıldığı ve yaşanan teknik bir sorunun internetin büyük bir bölümünü etkileyebildiği vurgulandı. Şirket, yaşanan aksaklık nedeniyle tüm internetten özür dilediğini ve böyle bir kesintinin kabul edilemez olduğunu belirtti.
Cloudflare'ın bot yönetim sistemi, botları makine öğrenmesi modeliyle iyi veya kötü olarak sınıflandırıyor. Müşteriler, bu bot puanlarını sitelerine erişimi kontrol etmek için kullanıyor. Bu sistemin dayandığı yapılandırma dosyası, makine öğrenmesi modelinin bir isteğin otomatik olup olmadığını tahmin etmek için kullandığı özellikleri tanımlıyor. Bu dosya her beş dakikada bir güncelleniyor ve tüm ağa yayılarak internetteki trafik akışındaki değişikliklere hızlı tepki verilmesini sağlıyor. Bu, yeni bot türlerine ve saldırılarına karşı koymak için hayati önem taşıyor.
Her yeni dosya sürümü, bir ClickHouse veritabanı kümesinde çalışan bir sorgu tarafından oluşturuluyor. Cloudflare, veritabanı kullanıcılerine ek izinler veren bir değişiklik yaptığında, sorgu yanıtı beklenenden daha fazla meta veri içerdi. Bu durum, sorgunun veritabanı adını filtrelememesi nedeniyle sütunların yinelenmesine yol açtı. Bu ekstra meta veri, yanıt satırlarını iki katından fazla artırdı ve nihayetinde özellik dosyasındaki satır sayısını etkiledi.
Cloudflare'ın proxy hizmeti, aşırı bellek tüketimini önlemek için sınırlamalara sahip. Bot yönetim sisteminin çalışma zamanında kullanılabilecek makine öğrenmesi özellikleri için 200'lük bir sınırı var. 200'den fazla özelliğe sahip hatalı dosya sunuculara yayıldığında bu sınıra ulaşıldı ve sistem panikleyerek hatalar üretmeye başladı.
Normalde çok düşük seviyelerde olan 5xx hata kodlarının sayısı, hatalı dosya ağa yayıldıktan sonra büyük ölçüde arttı. Sistemdeki bu dalgalanmalar, hatalı özellik dosyasının yüklenmesi nedeniyle sistemin başarısız olduğunu gösterdi. Ancak sistemin belirli bir süre sonra kendini toparlaması, bu hatanın içsel bir hatadan kaynaklandığına işaret etti.
Bu dalgalanmaların nedeni, dosyanın her beş dakikada bir güncellenen bir sorgu tarafından oluşturulmasıydı. Güncelleme sadece kümenin belirli bir kısmında çalışırsa hatalı veri üretiliyordu. Sonuç olarak, her beş dakikada bir iyi veya kötü bir yapılandırma dosyası üretilme şansı vardı.
Bu durum başlangıçta saldırı ihtimalini düşündürdü. Ancak sonunda tüm ClickHouse düğümlerinin hatalı yapılandırma dosyası üretmesiyle dalgalanma durdu ve sistem kalıcı olarak hataya geçti.
Şirket, hatalı özellik dosyasının üretimini ve yayılmasını durdurup bilinen iyi bir dosyayı manuel olarak dağıtım kuyruğuna ekleyerek ve ardından temel proxy'i yeniden başlatarak sorunu çözdü. Daha sonra, günün ilerleyen saatlerinde 5xx hata kodlarının normal seviyeye dönmesi için diğer hizmetleri yeniden başlattı.
Yaşanan kesintinin 2019'dan bu yana en büyük Cloudflare kesintisi olduğu belirtildi. Şirket, benzer felaketleri önlemek için yapılandırma dosyası alımını güçlendirme, daha fazla küresel kapatma anahtarı etkinleştirme, hata raporlarının sistem kaynaklarını aşmasını engelleme ve tüm temel proxy modüllerinde hata koşulları için başarısızlık modlarını gözden geçirme gibi adımlar atıyor. Gelecekte de benzer kesintilerin yaşanmayacağının garantisini veremese de, geçmişte yaşanan kesintilerin her zaman daha dayanıklı sistemler inşa etmelerine yol açtığı vurgulandı.