3 Eylül 2012 Pazartesi

Bir Güvenlik Açığını Yayınlamak

Tarih : 25 Mayıs 2007

Geçtiğimiz aylarda çalışma arkadaşım Çağlar Çakıcı ile beraber çok sayıda saldırı tespit ve önleme sisteminde önemli bir güvenlik açığı saptadık. Ancak bu güvenlik açığını üreticilere kabul ettirmek ve yayınlamak düşündüğümüz kadar kolay olmadı. Sevgili dostum Deniz Tuncalp'in de Bilgi Güvenliği - Tartışma Listesi'nde yaptığı öneriyle beraber bunların bazılarını kaleme almanın doğru olduğunu düşündüm. Umuyorum yazdıklarım, bizler gibi güvenlik açıklarını saptayan uzmanların, yayınlama aşamasında işine yarar ve onlara bir nebze yardımcı olur.


Güvenlik açığını bir web uygulamasını denetler iken keşfettik, uygulama farklı kodlama yöntemleri kullandığımızda normal dışı tepkiler üretmekte ve kullanmakta olduğu güvenlik özelliklerini başarılı biçimde uygulayamamaktaydı. Ancak denetim esnasında farkettiğimiz bir diğer durum, uygulamayı koruyan bir web uygulama güvenlik duvarı olduğu, bilinen türde saldırılar yaptığımızda engellediği; ancak bahsettiğimiz farklı dil kodlamasını kullandığımızda engelleme uygulayamamasıydı. Daha sonra aynı web güvenlik duvarının bulunduğu bir başka müşterimize de yaptığımız denetim esnasında söz konusu açığı kullandık ve başarılı oldu. Bu noktada ki en büyük şansımız iki denetimin neredeyse eş zamanlı yürümesiydi, böylece iki ayrı yapılandırmaya sahip aynı türde sistemi denetleyebildik. Sonuç olarak atlatma türündeki güvenlik açığının ilgili web güvenlik duvarında olduğunu saptadık. Kısa süre içinde gelen bir diğer denetimde, farklı bir saldırı önleme sistemi olduğunu gördük ve aynı yöntemi denedik, sonuç atlatmanın başarıyla sonuçlanmasıydı. Özetle güvenlik pazarının lider firmalarına ait iki ayrı türde web güvenlik duvarı ve saldırı önleme sisteminde bu güvenlik açığının bulunduğunu gördük.

Açıkçası ilk bulduğumuz güvenlik açığı olmaması ve denetimin doğası gereği bu duruma pek şaşırmadık. Ancak söz konusu atlatma yönteminin evrensel bir yöntem olduğu ve çok sayıda saldırı tespit/önleme sisteminde işleyebileceğini görünce yayınlamaya karar verdik. Yayınlama süreci oldukça basit görünebilen, bazı yeraltı sitelerine, SecurityFocus - Bugtraq gibi e-posta listelerine veya güvenlik duyurularının detaylı olmasını isteyen grupların listelerine bir e-posta atılmasının yeterli olduğu düşünülen bir süreçtir. Çok sayıda üretici ve tabi etkilenen çok sayıda müşteri kurum söz konusu olduğunda güvenlik açığını doğrudan ve kullanım yöntemiyle açıklamak pek mantıklı gelmedi. Sonrasında firmalar ile haberleşme sürecimiz başladı.

Bu noktada detaya girmeden kabaca bir güvenlik duyurusunun nasıl yayınlanabileceğini listelersek ;
1 - Sadece siz ve yakın olduğunuz bazı kişiler bilirsiniz (Pek doğru görünmüyor, zaten adı da yayınlama değil kendine saklama olmalı)
2 - Yeraltı gruplar olarak nitelenen gruplara ait forum/posta listesi/sohbet veya toplantılarda açıklayabilir, ün kazanabilirsiniz (Doğru görünmediği gibi kullanım yönteminin yeterince kötü niyete sahip kişilere ulaşmasının doğrudan ve en kolay yoludur)
3 - Üreticilere kısıtlı bir zaman verip, güvenlik açığını ne olursa olsun verdiğiniz tarihte duyurursunuz
3a - Duyuruda kullanım yönteminin detaylı olarak açıklayabilirsiniz
3b - Kullanım yönteminden bahsetmez olabildiğinde muğlak ifadeler kullanabilirsiniz
3c - Doğrudan kullanım yöntemini vermeseniz de yakınlarında dolaşır, ehil kişilerin durumu farketmelerini sağlarsınız
4 - Üreticiden bir tebrik almak adına açığı onlara bildirir, üreticinin yamayı yayınlamayı planladığı çok uzun süreli tarihi beklersiniz. Güvenlik duyurusunda ise 3b maddesi gibi muğlak ifadeler kullanıp açığın kullanımından bahsetmessiniz.

Liste zorlanırsa uzayıp gidebilir ancak belli başlı yayınlama biçimleri bunlardır. 3 ve 4 ile alt maddeleri gri alanlarda kalmaktadır, bazı kişilere göre biri bazılarına göre tümü haklıdır.

Sorun şu ki bizim durumumuza yukarıdaki şıkların hiçbiri uygun değildi. Söz konusu olan bir üretici olunca tepkileri ölçmek, yama hazırlama süreçleri hakkında fikir sahibi olmak veya etkilenen müşterilerin boyutunu hesaplamak mümkün görünüyor. Çok sayıda üretici ise açıkçası birçok sıkıntıyı beraberinde getiriyor, bu yüzden bizim geçtiğimiz yola geri dönüp özetlemek, belki benzer açıkları bulanlara kolaylık sağlayabilir.

Bizim durumumuzda açığın sadece iki üreticinin ürünlerinde olduğunu doğrulayabildik; ancak çok sayıda saldırı tespit/önleme sisteminin de durumdan etkilendiği oldukça açıktı. Ya tüm üreticilerin ürünlerini aynı testlerden geçirecektik ( Yaklaşık 100 üretici x 4 ürün x 1 saat test süresi x 4 saat test ortamı kurulumu) yada başka bir yol uygulayacaktık.

Öncelikle doğruladığımız kurumlar ile irtibata geçtik, olumlu karşıladılar ve çok yardımcı oldular. Açık konuşmak gerekirse oldukça büyük bir veritabanı üreticisinin bana benzer bir durum için vermiş olduğu cevap beni uzun süre "bulduğun sende kalsa daha iyi" düşüncelerine sevk etmişti. Ancak bu kadar yardımcı olmalarını beklemediğim için ben de duruma oldukça istekli yaklaştım ve elimizdeki her türlü kaynağı onlara sağlamaya çalıştım. Gecenin bir saati uluslararası görüşmeler, telefonda durumu açıklamanın zorlukları ve yama geliştirme süreci tahminlerinin yanıltıcılığı hesaba katılınca zor birkaç gün geçirdik.

2 üretici ile görüşmemizde öncelikle basit birkaç konuyu halletmeye çalıştık; açık gerçekten açık mı ? , üreticiler bunu nasıl yamalar ? , tahmini yama geliştirme süresi ne kadar ? ve son olarak biz güvenlik duyurularında nerede olacağız ? (Öyle demeyin çok önemli, açığın öneminden geçtim kaç gece uykusuz telefonlardaydık :) Diğer üreticilerin de durumdan nasıl etkilendikleri, bahsi geçen sorulara cevapları önemliydi. Her durumda onları haberdar etmek için sebebe ihtiyacımız vardı; fakat ürünlerini deneyemiyorduk (kabul ediyorum bu zor yola başta girmeye çalıştık ama 2-3 üreticiyi test için ancak ikna edince vazgeçtik). Sonuçta bu noktada US CERT imdadımıza yetişti, IBM/ISS'ten Peter'ın önerisi ile konuyu onlara anlattık ve çok yardımcı oldular. Güvenlik açığının net kullanımı ve etkilerini kendilerine izah ettikten sonra tüm şüphelenilen üreticilere bildirimde bulundular, bizim işimizde epey kolaylaştı. Hazır yazıyor iken bu süreçte bizlere kolaylık sağlayıp bu sürecin az sancılı geçmesini sağlayan ve teşekkürü hakeden üç kişiyi de unutmak olmaz, Jeff Gennari (US CERT), Michael Kapelevich (Checkpoint) ve Peter Allor (IBM/ISS XForce).

Üretici ile temas kurma ve açığı yayınlama aşamasında altın birkaç kuralı hatırlatmakta fayda var;
1- Doğru kişi/kurum/ekip ve e-posta adresini bulmalısınız, tercihen önce Internet'i biraz araştırın.
2- Asla seçtiğiniz kişiye güvenlik açığını anlatan bir e-postayı kriptosuz göndermeyin, bu adımın son adım olduğunu unutmayın.
3- Seçtiğiniz kişinin doğru kişi olduğu, güvenlik açığını doğru yetkililere ilettiği, ciddiye alınabilecek biri olduğu ve iyi niyetli olduğu varsayımlarını tekrar gözden geçirin; tercihen araştırıp emin olun.
4- Öncelikle bir güvenlik açığı bulduğunuzu belirtin, kendisinin bu konuda yetkili olup olmadığı ve tartışmayı PGP veya S/MIME ile sürdürüp sürdüremeyeceğinizi sorun. Birçok kurumun web sitesinde önemli yazışmalar ve ekiplerin e-posta adresleri için PGP açık anahtarları yer almaktadır.
5- Doğru ve güvenilir bir kişi ise kendisine KRIPTOLU olarak güvenlik açığının açıklamasını, etkisini, risk seviyesini, kullanma yöntemini ve varsa çözüm önerinizi iletin.
6- Üreticiden açığı doğrulamasını isteyin; akabinde tahmini yama geliştirme sürelerini isteyin.
7- Eğer açık doğrulanır, tahmini yama/duyuru yayınlama süresi de size uygun ise sizleri duyuruda nasıl konumlandırmalarını istediğinizi belirtin.
8- Yama süresi size pek mantıklı gelmiyor ise (Bkz. Sıfır Gün Aciklari Kimin Umrunda ? [Bolum 1] [Bolum 2]) yayınlama adımındaki 3. maddenin alt maddelerinden uygun olanlarını araştırın.
9- Üretici ile beraber veya farklı zamanlardaki duyurular için güvenlik duyurunuzu hazırlayın. Güvenlik duyurunuzun, kalıcı bir web adresi, tarih, sürüm numarası, güvenlik açığının açıklamaları, etkilenen sistemler, etki türü, risk seviyesi, çözüm önerileri, sizin bilgileriniz ve referansları içerdiğine emin olun. Açığın kullanım yöntemi ise seçimliktir, seçtiğiniz yönteme uygun şekilde davranabilirsiniz. Risk seviyesi konusunda ise sizin verdiğiniz önemi üreticiler ürünlerini korumak adına vermeyecektir; çok umursamamanızda fayda var. Özellikle çok sayıda üretici olduğunda bu durum çok eğlenceli olabiliyor, örneğin bizim açığımız için yüksek/orta/düşük ibarelerinin tamamı farklı kaynaklarda kullanıldı.
10- Güvenlik duyurunuzu öncelikle kendi sayfanızda yayınlayın ve ilgili kurumun duyurusuna bağlantı verin. SecurityFocus'un Bugtraq e-posta listesine ve diğer güvenlik listelerine duyurunuzu iletin. Tek tek güvenlik açığı veritabanı, güvenlik sitesi ve açık numarası atama siteleri bu duyuruyu takiben gerekli süreçleri başlatacaklardır. Herbiri için tek tek bilgilendirme yapmanıza gerek yok, yaparsanız da birşey kaybetmezsiniz.
11- Güvenlik duyurunuzu aralıklı olarak güncelleyin, etkilenen sistemlerin, yayınlanan yamalara verilecek bağlantıların, CVE/Bugtraq/XForce numaralarının duyurunuzda yer almasını sağlayın.

Bizim karşılaştığımız bir diğer problem ise her üreticinin farklı yama geliştirme süreleri olmasıydı. Bir üretici diğerine göre daha erken haberdar edilmişti ve daha hızlı yama hazırladı; ancak birçoğu güvenlik açığı için verdiğimiz tarihe maalesef yetişemedi. Sonuçta güvenlik duyuru tarihini birkaç kez erteledikten sonra sabitledik ve üreticilerin bu tarihe yetişmelerini talep ettik. Toplam süremiz 2 ayı buldu ve birçok üretici yama hazırladı. Yazının yazıldığı an itibariyle sadece 4 üretici ürünleri için yama hazırlamış ve yayınlamış durumdaydı, bu duruma rağmen ilgili güvenlik duyurusunu yayınladık.

Açığının kullanımının yayınlanması noktası ise bizim için biraz karmaşıktı; bir yanda her açığın detaylı açıklamasının olması ve çözümün tartışılması durur iken diğer yanda ehil eller sendromu vardı. Özellikle çok sayıda üretici/müşteri söz konusu ise etki düzeyi de korkutucu olabilirdi. Orta nokta ise basitçe kopyala/yapıştır yapılamayacak ancak ehil bir kişinin kolayca farkedebileceği şekilde açığının kullanımının yayınlanması oldu.

Sonuç olarak yorucu bir süreçti ama aldığımız olumlu tepkilerden başarı ile bu işi tamamladığımızı düşünüyorum. Çok sayıda kurumu etkileyen bir güvenlik açığından bahsetmez iken durum kolay iken aksi durumda ne kadar zorlaşabileceğini bir nebze olsun anlatmak istedim. Şunu da belirtmeden geçmemek lazım, bu güvenlik açığı ne ilkti, ne de son olacaktır. Birçok yerli/yabancı kurum veya kişi bu yoldan geçmiştir/geçecektir, her bir kurum bir diğerinin tecrübesinden de bu yolda faydalanacaktır. Bizlerde bu güvenlik açığını keşfederken veya denetimlerimizde kullandığımız yöntemleri geliştirirken birçok kişinin tecrübesinden faydalandık. Hatta saptadığımız güvenlik açığı, farklı kaynaklarda problem olabileceği uzun süre önce öngörülen bir durumdu. Ancak şu unutulmamalı ki her öngörülen durumun gerçeklemesi farklıdır ve her olayda değişim göstermektedir. Bir açığın çok önceden öngörülmüş olması yazılımların bu açığı barındırmayacağı anlamına gelmemektedir. Buffer Overflow açıkları 197x'lerde öngörülüyordu, buna rağmen hergün aynı türde yeni açıklar yayınlanmaktadır. Bu noktada önemli olan ise öngörüyü geliştirmek, gerçek hayattaki kullanımlarını araştırmak ve tecrübenizi kullanıp farklılıklar yaratmaktır. Umuyorum bu döküman bir açığın bulunması anlamında olmasa da (ki hedeflenen bu değildi) yayınlanması aşamasında size ışık tutacaktır. Bağlantılar arasında farklı güvenlik açığı yayınlama süreçleri ve yaklaşımlarına ait bağlantılarda bulunuyor, ilgilenen arkadaşlar daha detaylı araştırmalar yapabilirler.

Fatih Ozavci
Bilg Güvenliği Danışmanı


Bağlantılar :

GS07-01 Tam/Yarım Genişlikteki Evrensel Dil Kodlaması ile Saldırı Tespit ve Önleme Sistemlerinin Aşılması
http://www.gamasec.net/gs07-01.html

US-CERT Vulnerability Note VU#739224
http://www.kb.cert.org/vuls/id/739224

Security Focus - IDS Evasion with Unicode
http://www.securityfocus.com/infocus/1232

ISS XForce - Serious flaw in Microsoft IIS Unicode translation
http://xforce.iss.net/xforce/alerts/id/advise68

OIS Guidelines for Security Vulnerability Reporting and Response, V2.0
http://www.oisafety.org/guidelines/secresp.html

RFP - Full Disclosure Policy (RFPolicy) v2.0
http://www.wiretrip.net/rfp/policy.html

Schneier: Full Disclosure of Security Vulnerabilities a 'Damned Good Idea'
http://www2.csoonline.com/exclusives/column.html?CID=28073

Microsoft: Responsible Vulnerability Disclosure Protects Users
http://www2.csoonline.com/exclusives/column.html?CID=28071