İçeriğe geç

17.1 · Seviye 2 · Güvenlik Düşüncesi

Zafiyet nedir?

tasarım, kod ve yapılandırma kaynaklı zayıflıklar

Siber Güvenlik Akademisi — M17, Zafiyetler ve Yama Yönetimi · 1.959 kelime · 3 saha durumu · ≈ 9 dk okuma · 13 dk dinleme

Saha durumlarındaki kişiler ve kurumlar kurgusaldır; kaynaklar gerçektir. Bu akademi savunma odaklıdır: saldırılar mekanizma düzeyinde anlatılır, adım adım saldırı tarifi verilmez. Uygulamalar yalnız kendi cihazında, kendi hesabında ya da yalıtılmış bir laboratuvarda yapılır; başkasının sistemine izinsiz erişim suçtur. Dersler hukuki danışmanlığın yerini tutmaz.

Açılış

Selin'in ekibinde haftalık kod incelemesi vardı ve o hafta sırada ürün yorumları özelliği duruyordu. Müşteriler bir ürünü aldıktan sonra yorum yazabilecek, yorumlar ürün sayfasında görünecekti.

Selin kodu okurken bir satırda durdu. Müşterinin yazdığı yorum, veritabanından alınıp sayfaya olduğu gibi basılıyordu. Kimse yorumun içinde ne olabileceğini sormamıştı. Normal bir müşteri "ürün çok güzel, hızlı geldi" yazardı. Ama bu alan, sayfaya tarayıcının metin değil kod olarak yorumlayacağı bir şey de taşıyabilirdi. O zaman o yorum, ürün sayfasını açan her müşterinin tarayıcısında, sitenin kendi koduymuş gibi çalışabilirdi.

Kodu yazan genç geliştirici şaşırdı. "Ama bu bir hata değil ki," dedi. "Özellik çalışıyor. Testlerin hepsi geçiyor."

Selin başını salladı. "Özellik çalışıyor, evet. Sorun da bu: özellik, yapmasını istemediğimiz bir şeyi de yapabiliyor."

O öğleden sonra ekip, "hata" ile "zafiyet" arasındaki farkı konuşmak için bir saat ayırdı.

Tek fikir

Zafiyet, bir sistemin bir saldırganın kullanabileceği bir kusurudur. Kusur üç yerden doğar: tasarımdan, koddan ya da yapılandırmadan. Hangisinden doğduğu, onu nasıl bulacağını, kimin düzelteceğini ve düzeltilene kadar ne yapacağını belirler.

Nasıl çalışır

Modül 1'in ilk dersinde zafiyeti, bir tehdidin varlığa ulaşmasını mümkün kılan zayıf nokta olarak tanımlamıştık. Bu modül o tanımı alıp içini açıyor: zafiyet nereden gelir, nasıl adlandırılır, nasıl puanlanır, nasıl kapatılır.

Önce bir ayrım. Her hata bir zafiyet değildir. Bir butonun yanlış renkte görünmesi bir hatadır ama kimse onu kullanarak bir veriyi çalamaz. Zafiyet, kötüye kullanılabilen kusurdur: gizliliği, bütünlüğü ya da erişilebilirliği bozmak için bir saldırganın elinde araç olabilen. Tersi de doğrudur: her zafiyet bir hata gibi görünmez. Selin'in ekibinin özelliği beklendiği gibi çalışıyordu.

Zafiyetleri ve onlara yol açan kusurları sınıflandırmak için dünyada en yaygın kullanılan ortak dili MITRE'nin yürüttüğü bir topluluk programı sağlar.

Bu ayrım neden önemli? Çünkü zafiyetleri tek tek kapatmak bir yarıştır, zayıflığı ortadan kaldırmak ise o yarışı bir türün bütünü için bitirir. Selin'in ekibi yorum alanını düzeltebilirdi; ama asıl soru, kodun başka hangi yerlerinde kullanıcı girdisinin aynı biçimde basıldığıydı.

Zafiyetlerin kaynağı üç büyük gruba ayrılır.

Birincisi tasarımdır. Modül 13'te tasarım kusurunu tanımlamıştık: kod kusursuz yazılsa bile, sistemin nasıl çalışacağına dair verilen bir karar onu savunmasız bırakır. Örneğin bir cihazın, kendisine gelen komutları kimden geldiğini hiç sormadan kabul edecek biçimde tasarlanması. Tasarım kusurları en pahalı düzeltilenlerdir, çünkü düzeltmek çoğu zaman sistemin bir kısmını yeniden düşünmeyi gerektirir.

İkincisi koddur.

Uygulama hataları en sık karşılaşılanlardır ve çoğu zaman bir yama ile düzeltilir. Modül 2'de yamayı bir yazılımdaki hatayı ya da zafiyeti düzelten değişiklik olarak tanımlamıştık; yamaların büyük çoğunluğu bu gruptaki kusurları kapatır.

Üçüncüsü yapılandırmadır.

Yanlış yapılandırmanın yamayla düzeltilememesi önemli bir farktır: üretici bir şey yayımlamaz, çünkü ürününde hata yoktur. Düzeltme, sistemi kuran ve yöneten kişinin işidir. Modül 14'te güvenli varsayılanları, Modül 16'da Defne Hanım'ın fabrika parolalı kamera kaydedicisini gördük; ikisi de bu grubun konusuydu.

Listenin başındaki iki zayıflığın da onlarca yıldır bilinmesi bu dersin en öğretici yanıdır. Zafiyetlerin çoğu yeni ve dâhice bir buluştan değil, bilinen bir türün bir kez daha tekrarlanmasından doğar.

Sahada

Savunma

Zafiyete karşı savunma, kaynağına göre değişir.

Tasarım kaynaklı zafiyetlerde savunma, işin başında başlar. Modül 13'teki tehdit modelleme, tasarım kusurlarını kod yazılmadan önce bulmanın yoludur. Mevcut bir sistemde tasarım kusuru bulunduğunda, çoğu zaman yamayla kapatılamaz; telafi edici önlemler alınır: ayırma, erişimi daraltma, izleme. Ve sistemin yenilenmesi plana yazılır.

Kod kaynaklı zafiyetlerde savunma iki yönlüdür. Yazılımı kullanıyorsan, yamaları zamanında uygularsın; bu modülün dördüncü dersi bunun sürecini anlatacak. Yazılımı geliştiriyorsan, zayıflık türünü ortadan kaldırmaya çalışırsın: varsayılan olarak güvenli çıktı üreten çerçeveler, girdiyi her yerde aynı biçimde ele alan ortak bileşenler, kod incelemesinde dışarıdan gelen veriye özel dikkat, ve tek tek zafiyetleri değil türleri hedefleyen düzeltmeler.

Yapılandırma kaynaklı zafiyetlerde savunma, kuranın ve yönetenin işidir. Varsayılan parolaları değiştirmek, kullanılmayan servisleri kapatmak, yönetim arayüzlerini yalnız gereken yerlere açmak, ve kurulumu yapan dış firmanın işini teslim alırken bu adımları kontrol etmek. Yanlış yapılandırmaya karşı en iyi araç, yazılı bir kurulum kontrol listesidir.

Her üç durumda da ilk adım aynıdır: neyin elinde olduğunu bilmek. Modül 2'deki envanter olmadan, bir zafiyet duyurusunun seni ilgilendirip ilgilendirmediğini bilemezsin.

Ve bir zafiyet bulunduğunda, kendine şu soruyu sorarsın: bu bir kerelik bir kusur mu, yoksa bir türün tek bir örneği mi? Cevap ikincisiyse, aynı türü başka yerlerde ara.

Uygulama

Kendi ev ağındaki ya da kendi bilgisayarındaki bir cihaz ya da program için üç kaynaklı bir zafiyet kontrolü yapacaksın.

Bittiğinde, bulduğun sorunların kaçının yapılandırmadan, kaçının güncel olmayan koddan kaynaklandığını say.

Defter: Üç ürün için tasarım, kod ve yapılandırma soruları ve cevapları, bulunan sorunlar ve grupları, her sorunun sahibi (sen ya da üretici), yapılan düzeltmeler.

Hata köşesi

Yaygın yanlış"Testlerin hepsi geçiyor, demek ki zafiyet yok."
Doğrusu

Testler çoğu zaman bir özelliğin yapması gerekeni yapıp yapmadığını sınar; yapmaması gerekeni yapıp yapmadığını değil. Selin'in ekibinin yorum özelliği bütün testleri geçiyordu. Zafiyet, beklenmeyen bir girdinin beklenmeyen bir şey yaptırmasıdır ve bunu ancak ona özel olarak bakan bir test ya da inceleme bulur.

Yaygın yanlış"Güncellemeleri yapıyorum, zafiyetlerden korunuyorum."
Doğrusu

Güncellemeler kod kaynaklı zafiyetleri kapatır. Yanlış yapılandırmayı hiçbir güncelleme kapatmaz, çünkü üreticinin ürününde hata yoktur. Defne Hanım'ın yazıcısı en güncel yazılımla çalışsa bile, parolasız yönetim arayüzü açık kalırdı.

Yaygın yanlış"Bu zafiyeti kapattık, iş bitti."
Doğrusu

Bir zafiyet çoğu zaman bir zayıflık türünün tek bir örneğidir. Selin'in ekibi yalnız yorum alanını düzeltseydi, aynı türün iki örneği daha kodda kalacaktı. Doğru soru "bunu kapattık mı" değil, "bu türden başka nerede var" sorusudur.

Etik ve sınırlar

Zafiyetlerin türlerini öğrenmek, onları başkalarının sistemlerinde aramaya yetki vermez. Bir web sitesinin yorum alanına "bakalım ne olacak" diye denemek için bir şey yazmak, sistemin sahibinin izni olmadan yapıldığında yetkisiz bir müdahaledir ve Türk Ceza Kanunu'nun bilişim sistemlerine yönelik suçlar bölümünün kapsamına girebilir; Modül 1'de bunu ayrıntılı konuşmuştuk. Kendi kodunda, kendi test ortamında, ya da bir şirketin açıkça izin verdiği bir hata ödül programının kuralları içinde zafiyet araştırmak ise meşru ve değerlidir. Bir başkasının sisteminde bir zafiyete tesadüfen rastlarsan, onu denemeden, kullanmadan ve kamuya duyurmadan önce sahibine bildirirsin; bu modülün son dersi bu sürecin nasıl yürüdüğünü anlatacak.

Kapanış

  1. Zafiyet, bir saldırganın gizliliği, bütünlüğü ya da erişilebilirliği bozmak için kullanabileceği bir kusurdur; her hata zafiyet değildir, her zafiyet de hata gibi görünmez.
  2. Zafiyetler üç kaynaktan doğar: tasarım, kod ve yapılandırma. Tasarım kusurları en pahalı düzeltilenlerdir, kod kusurları çoğu zaman yamayla kapanır, yanlış yapılandırmayı ise hiçbir yama kapatmaz.
  3. Zayıflık bir türdür, zafiyet o türün belirli bir örneğidir; iyi savunma tek tek zafiyetleri kapatmanın yanında, aynı türü başka yerlerde de arar ve ortadan kaldırmaya çalışır.

Üç soru

  1. Selin'in ekibinin yorum özelliği bütün testleri geçtiği hâlde neden bir zafiyet taşıyordu?
  2. Defne Hanım'ın yazıcısındaki sorun neden bir güncellemeyle kapanmayacaktı?
  3. Bora, laboratuvar cihazındaki kusuru yamayla kapatamadığında ne yaptı?

Yanıtlar

  1. Testler özelliğin yapması gerekeni, yorumu kaydedip göstermeyi, sınıyordu. Ama müşterinin yazdığı yorum sayfaya güvenli hâle getirilmeden basılıyordu; bu yüzden bir yorum, tarayıcının kod olarak yorumlayacağı bir şey taşıyabilirdi. Özellik çalışıyordu, ama yapmasını istemedikleri bir şeyi de yapabiliyordu. Bu bir uygulama hatasıydı ve listenin en başındaki zayıflık türüne uyuyordu.
  2. Yazıcının yazılımında bir hata yoktu; sorun, kurulumu yapan firmanın yönetici parolasını belirleme adımını atlamasıydı. Bu bir yanlış yapılandırmaydı. Üretici, ürününde hata olmadığı için bunu kapatacak bir güncelleme yayımlamazdı; düzeltme, cihazı yönetenlerin işiydi.
  3. Kusur cihazın tasarımından geliyordu ve düzeltmek yeni bir donanım nesli gerektiriyordu. Bora telafi edici önlemler aldı: cihazı yalnız laboratuvar bilgi sisteminden mesaj alabilen ayrı bir ağ bölümüne aldı, komutların yalnız o sistemden gelmesini güvenlik duvarında zorunlu kıldı ve cihazın yenilenmesini risk kayıt defterine yazdı.

Sonraki derse köprü

Bir zafiyeti bulduktan sonra herkesin onu aynı adla anabilmesi ve ne kadar ciddi olduğunu konuşabilmesi gerekir. Ders 17.2, CVE ve CVSS, zafiyetlere verilen ortak kimlik numaralarını ve şiddet puanlarını, ama özellikle de puanın senin ortamın hakkında söylemediklerini ele alıyor.

Anlamadığın bir yer mi var?

Mentor yalnız bu dersin metnine dayanarak cevap verir. Metinde geçmeyen bir şey sorarsan uydurmaz, geçmediğini söyler.