Geçtiğimiz hafta Windows
sistemlere bulaşmış olabilecek zararlı yazılımları ve izinsiz erişimleri
tespit etmeye yardımcı olabilecek çok basit bir uygulamayı ücretsiz yayımladım. (Uygulamanın ayrıntılarına https://sparta.com.tr/rontgen/ adresinden ulaşabilirsiniz.) Sonrasında çıkan 1-2 trolün söylediklerini ciddiye aldığımdan değil, açık
kaynak yazılımların güvenlik seviyesine bakmak için iyi bir fırsat olduğu için
yazıyorum.
“Açık paketlerde problem yok” yazmış mesela bir tanesi… Açık kaynaklı yazılımlara yerleştirilen arka kapılara bakalım öyleyse.
Güvenlikle ilgili başımıza dert olan birkaç hurafeden
biridir bu. “Linuxlara virüs bulaşmaz” ve “MAClere kimse virüs yazmıyor” gibi bilimsel
herhangi bir temele bağlayamadığımız konulardan birisi.
Açık kaynak kodlu yazılımlar daha mı güvenilir?
Genel algı bu yazılımların kaynak kodlarının açık olması
sebebiyle pek çok kişi tarafından denetlendiği, dolayısıyla arka kapı
yerleştirmenin mümkün olmadığı yönündedir. Ne yazık ki bu tezi çürütecek pek
çok olay yaşandı. Bunlar phpmyadmin gibi çok geniş bir kullanıcı sayısına sahip
yazılımları da etkiledi, daha az bilinen ssh-decorator Python kütüphanesini de
etkiledi. Öncelikle herhangi bir açık kaynak yazılım projesine arka kapı eklenmesinin
çok zor olmadığını kabul etmek gerekir. Dolayısıyla konu eklenen arka kapının
tespit edilememesine geliyor.
Açık kaynak kodlu yazılım projelerini iki ana gruba
ayırabiliriz; ürün ve modül. “Ürün” olarak adlandırabileceklerimiz tek başına kullanılan
yazılımlardır (örn: ProFTD, VSFTP veya PHPmyAdmin). “Modül” dediklerimse yukarıda
sözünü ettiğim “ssh-decorator” gibi tek başına kullanılmayan ancak başka kodlar
içerisine dahil edilenlerdir.
2018 yılında açık kaynaklı event-stream Javascript
kütüphanesine bir arka kapı yerleştirildiği ortaya çıktı. Olay ortaya
çıktığında event-stream kütüphanesi 2 milyondan fazla yazılım içerisinde
kullanılıyordu. Açık kaynak yazılımın güvenliğine ayrıca dikkat edilmesi gerektiğine
dair önemli bir nokta çünkü bunların bir kısmı bizim “ticari” olarak
nitelendirdiğimiz yazılımların içerisinde. Yazılım geliştiriyorsanız veya size
özel bir yazılım geliştiriliyorsa bunun içerisindeki açık kaynak yazılım
oranını takip etmenizde fayda var. Böylece, en basiti GitHub’da bedava olan kodlara
mı para veriyorsunuz yoksa gerçekten size özel mi yazılıyor görebilirsiniz. Bu
konuda “açık kaynak kod oranı tespit hizmeti” veriyoruz ve bir müşterimizde
açık kaynak kod oranı %90’nın üzerinde bir projeye rastladık. Bunun yanında bünyenizde
kullanılan yazılımların içerisinde ortaya çıkması muhtemel bir güvenlik
açığının da sizi nasıl etkileyeceğini takip etme şansınız olur. Biraz önce
sözünü ettiğimiz event-stream kütüphanesi kuruluşunuzun bünyesinde bulunan açık
kaynaklı veya ticari lisanslı herhangi bir yazılım içerisinde kullanılmış mı
mesela?
Arka kapılar yazılımlardaki tek tehlike mi?
Asıl sorun daha büyük; yazılım hataları. Açık kaynak veya ticari
lisanslı olsun yaızlımı geliştirenlerin tamamen iyi niyetli olduklarını
düşünelim. Yaızlımın tasarlanma aşamasından geliştirmesine kadar pek çok
noktada hatalar yapıldığını görüyoruz. Bunların sonucunda yazılımlarda güvenlik
açıkları ve çeşitli hatalar meydana gelmektedir. Çok büyük açık kaynak kodlu
projelerde birden fazla yazılımcının çalıştığını görebiliriz ancak daha küçük
modüllerde genellikle tek kişinin ve günlük mesaisinin dışında kalan zamanlarda
çalıştığı bir senaryo daha gerçekçi oluyor. Bu durumda insanın aklına şu geliyor;
onlarca yazılımcısı, test mühendisi ve güvenli yazılım geliştirme süeci ve
yatırımı olan Microsoft hata yaparken bu arkadaşların hata yapma ihtimali yok mu
gerçekten? Elbette var ve genelde yazılım test konusuna ağırlık verilmediği
için basit hataların (örn. Tanımlanmış değişkenin kod içerisinde hiç kullanılmaması,
girdinin temizlenip çıktının temizlenmemesi, vb.) daha sık görülmesi
muhtemeldir. Hataların bir kısmının yine yazılım geliştirme hijyen kurallarına
uymamaktan kaynaklandığını görebiliyoruz (örn. Sınıfların tek bir işlev
yapması, controller sınıflarının olmaması, vs.).
2018 yılında BitPay ve CoPay kriptopara cüzdanı
uygulamalarında kullanılan bir NodeJS kütüphanesinin arka kapı barındırdığı
açıklanmıştı. Yazılım tedarik zincirimizin oluşturduğu riskleri
değerlendirmezsek bizlerin de, özellikle yerli ve milli yazılım geliştirme konusunda
gelişmeler yaşanırken, başını ağrıtabilecek bir konu haline gelebilir. Bu
örnekte NodeJS kütüphanesine eklenen zararlı kod parçası sıradan bir arka kapı
değil, özellikle kriptopara cüzdanı uygulamalarında kullanılması halinde devreye
girmek üzere planlanmış bir arka kapıydı. Özetle birisi şunu düşünmüş: “Ticari
lisanslı kriptopara cüzdanları var, bunlardaki paraları çalmak lazım. Bunun
için ben arka kapıyı açık kaynak koldu bileşene yerleştireyim, nasılsa fark
etmezler”. Kısmen haklıymış diyebiliriz çünkü arka kapının tespit edilmesi 3
aydan fazla sürmüş ve bu arada kriptopara cüzdanlarının 5.0.2 ile 5.1.0 arasındaki
sürümlerini etkilemiş.
Nasıl oluyor da gözden kaçıyor?
Yukarıda verdiğim kriptopara cüzdanı örneğinde kullanılan
arka kapı kodunun “okunabilir” formata getirilmiş hali aşağıda;
… Evet? Binlerce satırlık açık kaynak kodlu bir proje
içerisinde hemen göze çarpacağını iddia edemezsiniz herhalde. Kaynak kod
içerisine yerleştirilecek arka kapılar hayal ettiğimiz gibi “GET” veya “POST”
olarak gönderilen bir HTTP talebinden biraz daha farklıdır. Bu da arka kapıları
tespit etmeyi oldukça zorlaştırıyor. Üstelik proje içerisinde özellikle kaynak
kod incelemesi yapmaya gönüllü olmuş kimse yoksa zaten tespit edilmesi
neredeyse imkânsız. Bu kodu herhangi bir projenin Türkçe dil desteği paketine
rahatlıkla yerleştirebiliriz. (Laf aramızda İstihbaratta çalışsam gece gündüz
bu işle uğraşan bir ekibim olurdu ki hiç değilse belli başlı açık kaynaklı yazılımların
kullanıldığı sistemlere erişimimiz olsun).
Açık kaynaklı yazılımların güvenliği
Açık kaynak kodlu bir yazılım kullanıyorsanız veya
kuruluşunuza özel yazılımlar geliştiriliyorsa, bütçenizin el verdiği ölçüde,
aşağıdaki kontrol maddelerini yerine getirmeye çalışmakta fayda olur;
- Açık kaynak kod kullanım oranını takip edin
- Kullanılan açık kaynak kod parçalarının envanterini tutun
- Güvenli yazılım geliştirme prensiplerine uyun
- Kaynak kod analizi yapın
- Yazılım testlerini yapın
- Güvenlik testlerini yapın
- Güncellemelerden sonra testleri tekrarlayın
Yazılım güvenliği teoride basit pratikte neredeyse imkansıza
yakın bir konu olarak gündemimizde olmaya devam edecek.
No comments:
Post a Comment