Bulut güvenliği şirketi Veracode son on sekiz ay içerisinde yazılmış 50.000 farklı uygulama üzerine yaptığı kod analizi ve taraması sonrasında en güvenli ve güvensiz programlama dillerinin bir listesini yayınladı. Son dönemlerde birçok kez hacklenen PHP’nin açık arayla en güvensiz programlama dili olması, yazılım mühendislerini hiç şaşırtmadı.
Raporda PHP, Java, Microsoft Classic ASP, .NET, iOS, Android, C ve C++, JavaScript, ColdFusion, Ruby ve COBOL gibi günümüzde en çok kullanılan programlama dilleri yer alıyor. İncelenen programlar içerisinde PHP ile yazılmış olanların yaklaşık %86’sının en az birinde (XSS) açığı olduğu, %56’sında en az bir SQL injection yazılım hatası olduğu ve %73’ünde şifreleme sorunları olduğu tespit edildi. PHP’ye benzer bir kodlama yapısı olan ve çok fazla açığı olmasıyla bilinen ColdFusion diliyle yazılan uygulamaların ise %62’sinde bir SQL injection yazılım hatası olduğu ortaya çıktı.
Java uygulamalarının %21’inde SQL injection açığı, Microsoft’un farklı temel dilleri tek bir işletim ortamında bir araya getirmeyi amaçlayan .NET çerçevesiyle yazılan uygulamaların ise %29’unda SQL açığı olduğu tespit edildi.
Elbette farklı diller farklı amaçlar için kullanılır ve PHP ile Java veya C++’ı karşılaştırmak elma ile armudu karşılaştırmak gibidir. PHP özünde interneti bir arada tutmak için kullanılırken, Java ve C++ daha ziyade derlenmiş/yürütülebilir yazılımlar geliştirmek için kullanılır. PHP bir web tarayıcısıyla çalışırken, Java (ve diğerleri) bizzat web tarayıcısını çalıştırır.
Raporda SQL injection’u ve Siteler Arası Kod Çalıştırma gibi web açıklarının .NET ve Java uygulamalarından ziyade Classic ASP, ColdFusion ve PHP gibi web kod dilleri arasında yaygın olması dikkat çekici olduğu gözlemleniyor. Bu durum büyük ihtimalle her dilin özellik setleri arasındaki farklılıklardan kaynaklanıyor. Classic ASP, PHP ve ColdFusion içerisinde .NET ve Java’da olduğundan daha az güvenlik API’si bulunmakta.
Özellikle Java’da güvenlik açıkları otomatik olarak temizleniyor. Bu da dilin (ya da yürütme ortamının, yani Java Sanal Makine’nin) programları sistemin belleği içerisinde istenmeyen şeyler yapmaktan alıkoyduğu anlamına geliyor. Veracode’un raporunda Java ve .NET dil ailesi gibi diller, geliştiricilerin belleği doğrudan tahsis etme ihtiyacını ortadan kaldırarak, başta arabellek aşımları olmak üzere bellek tahsisiyle ilgili tüm açıkların önüne geçiyor bilgisi veriliyor.
Sorunun bir kısmını da bu dilleri kimlerin kullandığı ve bu kişilerin deneyim seviyelerinin ne olduğu oluşturuyor. Veracode Teknoloji Sorumlusu Chris Wysopal Information Week’in yaptığı bir konuşmasında “.NET ve Java programları genellikle bu dilleri okulda öğrenmiş bilgisayar mezunları tarafından kullanılır” diyor. “ColdFusion, PHP ve ASP gibi birçok kod yazım dili ise web sitesi tasarlanan, kod yazmanın ve siteleri daha interaktif hale getirmenin öğrenildiği web geliştiriciliği dünyasından geldiğini belirtiyor.”
10 yorumlar
Cok sacma. Dilin guvenli olup olmadigina karar vermek icin 50000 uygulamayi test etmek. Neden? Cunku bu 50000 uygulamayi gelistiren kisilerin kac tanesi gercek anlamda guvenli uygulama gelistirme prensiplerini biliyor? Kac tanesi uygulamalarini gelistirirken bunlara dikkat etti? vs vs vs
Nitekim soyledigim gibi php uygulamalarinin hacklenen taraflarina bakarsak, sql injection (php den kaynakli degil tamamen developer hatasi) xss ( agirlikli developer eksigi), sifreleme sorunu demis (kastettigi sifrelemenin ne oldugu belli degil ama sorun php de degildir bence dusuk seviye cipher kullanan developerdadir)…
Yanlis anlasilmasin php kodlamiyorum. Sadece mantiki bir analiz yapyorum. Peki neden php uygulamalari bu kadar guvensiz? Cok basit internette kisa bir arastirma yaparsaniz php hakkinda egitim videolarinin ne kadar cok oldugunu gorursunuz. ekrana birseyler bastirmaya baslayan herkes php developer olarak cikiyor ortaya. Ama bu arkadaslarin cogu gercek anlamda developer olmak ne demek bilmiyor. Sadece birseyler yapabiliyorlar. Kendilierini bu anlamda destekliyorum. Ama gelecek guvenli olacaksa, daha fazla egitim ve bilgi gerekli.
Gokhan , makalenin sonunda
“.NET ve Java programları genellikle bu dilleri okulda öğrenmiş bilgisayar mezunları tarafından kullanılır” diyor. “ColdFusion, PHP ve ASP gibi birçok kod yazım dili ise web sitesi tasarlanan, kod yazmanın ve siteleri daha interaktif hale getirmenin öğrenildiği web geliştiriciliği dünyasından geldiğini belirtiyor.””
söyle bir not var. Zaten direk senin dediğini not olarak eklemiş adamlar.
Bence en büyük eksiklik , yazıları tam okumamak :))
5. paragrafta yer alan, dikkat çektiği söylenen ama sebebi yanlış aktarılan konuya açıklık getirmek istiyorum. .net ve java “framework” olarak geçen geliştirme ortamlarıdır, PHP ise programlama dilidir. Örneğin, .net frameworkü altında C# veya başka dillerle (https://en.wikipedia.org/wiki/List_of_CLI_languages) kod yazabiliyorken, Java frameworkü altında yine kendi adıyla bilinen Java dili ile kod yazılabilir, Laravel frameworkü kullanarak da PHP kodu yazılması mümkündür. Söz konusu paragraftaki güvenlik farkının sebebi, frameworklerin, uygulama geliştiricinin bilinçsiz olabileceğini öngörerek sunucuya yapılan sorgularda filtrelemeler yapmalarıdır. Fakat bu filtrelerin de aşılabileceği unutulmamalıdır(Örn: https://infosecauditor.wordpress.com/2013/05/27/bypassing-asp-net-validaterequest-for-script-injection-attacks/). Bu sebeple, bu tür bir araştırmanın doğru bir şekilde analiz edilmesi taraftarıyım.
Ayrıca PHP kodlayıcılarının kendi hata paylarını göz ardı ederek ısrarla framework kullanmaması bu makalede dilin “güvensiz” olarak anılmasına sebebiyet vermektedir. Dilin güvenliği ile uygulama geliştiricinin güvenlik bilgisi birbirine karıştırılmamalıdır.
Son olarak, “Elma ile armudu karşılaştırmamak gerek” diyerek elma ile armudu karşılaştırdığının bilincinde olmak elma ile armudun karşılaştırılmasını mantıklı yapmıyor. C++ ile PHP veya Java dilleri karşılaştırılacaksa, bunun buffer overflow gibi zafiyetler üzerinden yapılması daha mantıklı olacaktır.
Burada C++ ile php’i veya asp veya diğerleri karşılaştırmak elma ile armutu karşılaştırmak gibi olur, doğru elbet. Ama bunları kullanım oranlarına göre karşıaştırabiliriz. Örnek vermek gerekirse hacklenmeye müsait yazılımlar, hedef olanlar açık ara web tabanlı yazılımlardır ve bunların arasında en yaygını php dir. Dolayısıyla en çok php yazılımların hacklenmesi gayet normaldir.
Bu durum biraz Linux un Windows a göre daha güvenli olduğu safsatasına benziyor. Kullanım oranı ve hedef olma durumlarını göz önüne almakta fayda var.
Sonuç olarak linux’un şu anki durumda daha güvenli olduğu gerçeği mi değişiyor ki bu durumu safsata olarak nitelendiriyorsunuz?
Sizin safsata dediğiniz şey hackerların kendi aralarında yaptığı, bilgisayar ele geçirme festivallerinden çıkan sonuçlar. Bu tür festivallerde microsoft ve linux oslara sahip sistemler hackerlar tarafından kırılmaya çalışılır. Sonuç ise ezici çoğunlukla linux sistemlerin daha güvenli olduğunu gösterir. microsoft ise hem microdur hem de soft.
Bir festivalden değil gerçekten bahsediyorum. Linux tabanlı işletim sistemlerinin bir çoğunu severek kullanıyorum fakat bu linuxun daha az kullanıldığı için daha güvenli olduğu gerçeğini değiştirmiyor. Güvenli programlama dili yada güvenli işletim sistemi diye bir safsata olamaz. Hepsinin açığı var ve ne kadar kırıldıkları ne kadar kullanıldıklarına ne kadar hedef olduklarına bağlı. Eğer adam gibi kodlarsan tüm diller tüm platformlar güvenlidir.
Programlama dilleri değil programcı güvenli olacak. Herkes kod yazar ama bazılarının yazdığı kodlar daha güvenli olur. Sen sql injection dikkat etme açıkları kontrol etme istersen en güvenli dili kullan gene de patlatırlar
Serkan akbaba durum tamda belirttiğin kadar basit ama tabi programlama dilinin de küçük bir etkisi var. Kendine tuzak kurmalısın ki başkası seni tuzağa düşürmesin. Kimlerin hangi yollardan seni sıkıntıya sokacağını bilirsen ve buna göre algoritma geliştirirsen risk ve güvenlik açığı minimum düzeye inecektir. Ancak web dillerini kullanan web programcıları bu riskleri pek göz önünde bulundurmuyolar kısmına sonuna kadar katılıyorum. “Mühendis mühendistir.” Bu kadar basit.