Makale Özeti

Visual Studio 2005 pek çok şeyi kolaylaştırdığı gibi, güvenlikle ilgili yapmanız gereken şeylerde de kolaylıklar getiriyor.

Makale

Visual Studio 2005’teki yeni güvenlik özellikleri

Brian Johnson, Microsoft’ta Program Manager olarak çalışıyor ve MSDN’de Visual Studio, Visual C++, Security ve .NET Framework Developer Merkezlerinden sorumlu. http://msdn.microsoft.com/security/?pull=/library/en-us/dnvs05/html/vs05security.asp adresinde, Visual Studio 2005’teki yeni güvenlik özellikleri üzerine bir makalesi çıktı.
Bu yazımızda ağırlıklı olarak bu makaleden hareketle, 2005’te işinize yarayabilecek güvenlik konularından bahsedeceğiz.
Microsoft’un yazılımın altyapısı konusundaki genel yaklaşımı, altyapı unsurlarını mümkün olduğunca yazılım geliştiricinin sırtından almaya ve yazılım geliştiricinin kendi işle ilgili sorunlarıyla daha fazla uğraşabilmesi için ona zaman ve imkan oluşturmaya dayalı. Güvenlik de bu altyapı alanlarından. Ama yazılım geliştiricinin, daha çok da yazılım mimarisi tasarlayıcısının kararları, güvenliği yine de doğrudan etkiliyor. Yani güvenlik kaçınılmaz olarak ve her zaman bir üstyapı konusu aynı zamanda.
Güvenliğin altyapı ve üstyapıdaki pek çok uygulamadan etkilenmesi sebebiyle, yazılımcı olarak hiçbir zaman güvenliği de düşünmekten kurtulamayacaksınız. Microsoft’un bu konudaki genel hedefi, harcadığınız zaman ve çabada çok küçük artışlarla, güvenlik seviyenizde yüksek kazanımlar sağlamanıza yönelik. 2005’deki yeniliklerde bu genel hedefe uygun olarak geliştirilmiş.

NATİVE CODE İÇİN GÜVENLİK ZENGİNLEŞTİRMELERİ

Visual C++ derleyicisi, doğrudan native code üretebilen tek Visual Studio derleyicisi. Bu başlık altında bahsedilecek konular da –aksi belirtilmedikçe- sadece Visual C++ için geçerli.
Native code’da yer alan güvenlik problemlerinin çok büyük çoğunluğu ‘buffer overrun (bellek taşması)’ ile ilgili.
(Buffer overrun üzerine yazılım güvenliği kategorisinde yazılmış makalelerimden yararlanabilirsiniz. MVP Global Summit’teki oturumlardan birinde, Microsoft IT’nin güvenliğiyle ilgili bir ekibin başında yer alan Irfan Chaudry, karşılaştıkları problemlerin neredeyse tamamının buffer overrun, SQL injection ve cross-site scripting’den oluştuğunu anlatmıştı. Yönetilen kod kullanımının yaygınlaşması ve native code’ların da uygun şekilde yeniden derlenmesi sonucu, eskiden birinci sırada yer alan buffer overrun’ın ağırlığı şimdilerde bir hayli azalmış.)
Bellek taşmasına karşı, Visual Studio 2005, kullanabileceğiniz dört araç sunuyor size: Code Analysis, Application Verifier, Buffer security check / GS, güvenli CRT kütüphaneleri.

Code Analysis / analyze

Code Analysis, Visual Studio 2005 Team Edition for Software Developers’ın bir özelliği. Microsoft’ta öncelikle içte kullanılan, daha sonra da Device Driver Kit’le yayınlanan bir başka özellikten türetilmiş. C ve C++ kaynak kodunu her fonksiyondaki olası tüm çalıştırma yolları üzerinden adımlayarak ve her yolu problemler açısından değerlendirmek üzere simüle ederek çalışıyor. Bu yöntem kodu gerçekte çalıştırmadığı için tüm hataları yakalayamıyor, ama derleyicinin ihmal edebileceği bazı hataları yakalayabiliyor. Veri tipleri ve dönüşümleri, performans, güvenlik, ifadeler, döngüler, bellek ayrımları, format ifadeleri, dönüş değerleri ve hata ayıklama gibi alanlar, bu aracın yararlı olabileceği konulardan.
Visual Studio 2005’te Code Analysis etkin kılındığında, belirlenen hatalar Error List penceresinde gösteriliyor. /analyze opsiyonunu kullanarak bu özelliği etkin kılabilirsiniz. Ya da grafik arayüz üzerinde menülerden de bunu yapabilirsiniz. Menüleri kullanmak isterseniz, izlemeniz gereken yol: Property Pages’i açın. Code Analysis düğümüne gelin. Enable code analysis for C/C++ opsiyonunu Yes(/analyze) olarak ayarlayın.

Application Verifier

AppVerifier ilk olarak Application Compability Toolkit’le dağıtılmıştır. AppVerifier, programlardaki çalışma hatalarını belirlemeye yardımcı olan bir küme çalışma zamanı analiz testinden oluşur. Application Verifier, ağırlıklı olarak yazılım uyumluluğu, kararlılık ve güvenlik konuları üzerinde odaklanır. Ayarları Property Pages diyalog kutusundan, Application Verifier düğümünden yapılır.
Application Verifier’ı başlatmak için Debug menüsünden Start with Application Verifier’ı seçin. Application Verifier farklı doğrulama katmanlarında hatalar bulunduğunda çalışmayı durdurarak bilgiler verir. Böyle durumlarda ne yapılacağını yazılımcılar ayarlayabilir. Yapılabilecekler, akışı durdurmak ve kontrolü yazılımcıya vermek ya da hatayı loglamak gibi seçenekleri içerir.

Buffer Security Check / GS

Visual C++ Buffer Security Check derleyici opsiyonu (/GS) kötü niyetli kodların buffer overrun hatalarından yararlanmalarını önlemek üzere tasarlanmıştır. Bu opsiyon buffer alanının sonuna şifreli bir değer ekler ve kod çalıştırılırken bu değer kontrol edilir. Eğer değer değişmişse, program akışı durdurulur ve bir güvenlik istisnai durumu tetiklenir.
Bu opsiyon, buffer overrun’ın kendisine engel olmaz, ama program akışını durdurduğu için olası kötüye kullanımlarını engellemiş olur.

Güvenli CRT kütüphaneleri

Güvenli CRT kütüphaneleri, sorunlu olduğu bilinen fonksiyonlara buffer kontrolleri ekleyerek Visual C++ ile derlenmiş olan kodların güvenliğini geliştirmek üzere tasarlanmışlardır.
Bu değişiklikler, tüm büyük programlama kütüphanelerini etkiler: C Runtime Library (CRT), Standard C++ Library (SCL), Microsoft Foundation Classes (MFC) ve Active Template Library (ATL) dahil. MFC ve ATL güvenli C kütüphane fonksiyonları kullanılarak yeniden yapıldıkları için, MFC ve ATL uygulamalarını Visual C++ 2005’le yeniden derlemek, güvenli CRT kütüphanelerinin faydalarının bazılarının otomatik olarak sağlanmasını getirecektir.

YÖNETİLEN KOD İÇİN GÜVENLİK ZENGİNLEŞTİRMELERİ

Yönetilen kod için güvenlik kaygıları biraz daha farklıdır. CLR’in özellikle bellekle ilgili yönetimi sebebiyle geleneksel buffer overrun sorunlarının tehdidi büyük ölçüde azalmıştır. Sonuçta yönetilen kod yazan yazılımcılar için dikkat çekici güvenlik yenilikleri biraz daha farklıdır.

FxCop

Daha önceden tek başına bir uygulama olarak kullanılan FxCop artık Visual Studio 2005’in içinde geliyor. FxCop MSIL komut akışını inceler ve çağrı grafiğini, çoğunlukla .Net Framework Tasarım İlkelerine uygun olarak kullanıcının belirlediği kurallara göre ihlal var mı diye analiz eder. Bu kurallar güvenlik kurallarını, kütüphane tasarım kurallarını, globalizasyon, birlikte çalışabilirlik, isimlendirme, performans, güvenilirlik, kullanım ve diğer alanları içerebilir.
Visual Studio 2005’te FxCop işlevselliğine erişmek için, yönetilen uygulamanızda Project Properties sayfasından Code Analysis kulakçığına bakın.
Bu sayfada Enable Code Analysis kutucuğunu tıklayarak Code Analysis’i devreye almış olursunuz. Sunulan listeden hangi kuralların çalışmasını istiyorsanız, sadece onların seçili olmasını sağlayabilirsiniz. Böylelikle seçtiğiniz kurallarla ilgili uyarı varsa, Error List’te bunlar size gösterilir. Kuralları güvenlik kuralları, güvenilirlik kuralları gibi küme küme de seçebilirsiniz.

CAS (Code Access Security) / En az hak

.Net Framework uygulamaları Code Access Security adı verilen bir modelde çalışırlar. Bu sistem, kanıtlara dayalıdır. Assembly’nin yeri, assembly’nin imzası gibi kanıtlara dayalı olarak güvenlik hakları verilir. Bu kanıtlar kullanıcı, makine veya domain seviyesinde politika kümeleri ile karşılaştırılırlar. Faktörler ve politikaların birlikte kullanılmasıyla, çok özel hak ayarlamaları yapılabilir. Bu kavrama, kısmi güven (partial trust) denir.
Bu tür uygulamaları geliştirmedeki en büyük zorluklardan biri, geliştirme aşamasında kullanılacakları gibi test edebilmektir. Yazılımcı geliştirdiği uygulama ile ilgili tam haklara sahip olacaktır. Bu uygulamanın bir internet ya da intranet üzerinden ne haklara sahip olacağını görmek için uygulamayı bu ortamlara taşıyarak test etmesi gerekir. Visual Studio 2005, yazılımcılara IDE’den ayrılmadan, farklı güven seviyelerinde uygulamalarının nasıl davranacağını test etmek için çeşitli araçlar ve özellikler sağlar.

ClickOnce Dağıtım

ClickOnce, Visual Studio 2005 içine gömülmüş ve kısıtlı haklarla çalışan hesaplara sahip kullanıcılara uygulama dağıtmak üzere uygulamalar yapmayı yazılımcılar için kolaylaştıracak bir teknolojidir. Bu uygulamalar lokal olarak, bir intranet paylaşımı üzerinden, ya da bir web sayfasındaki http linkinden çalıştırılabilirler. Network lokasyonları üzerinden çalıştırılan uygulamalar lokal olarak depolanıp çalıştırılırlar, ama sadece geldikleri network lokasyonuna tanınan haklarla. İlgili network lokasyonuna yazılımcı tarafından yeni bir versiyon gönderilmişse, son kullanıcı uygulamayı başlattığında, öncelikle yeni versiyonun varlığı kontrol edilip yerel depolama alanındaki kopya güncellenir, ardından güncel haliyle kullanılır.
Visual Studio 2005 bu tür kısmi güvenilen uygulamaların IDE’den test edilebilmesi için gerekli ortamı sunar. Bu, CAS altında çalışacak uygulamalar geliştirmek ve test etmekte çok önemli zaman kazançları sağlayacaktır.

‘Debug in Zone’

‘Debug in Zone’ özelliği yazılımcılara, uygulama geliştirirken ilgili uygulamayı hangi zone’de çalışır gibi test edeceklerini seçme hakkı verir. Böylelikle farklı seviyelerde izinler içeren politikaların geçerli olduğu durumda, geliştirdiklerin uygulamanın beklendiği gibi çalışıp çalışmayacağını test etmiş olurlar. Yönetilen uygulamalar için bu özelliğe ‘Project Properties’ sayfasından ‘Security’ kulakçığı ile erişilebilir. Burada uygulamanızın ‘partial trust’ olduğunu belirtebilirsiniz. Sonra da hangi ‘zone’da uygulamanızı test etmek istediğinizi belirtebilirsiniz. Hatta ‘zone’ların genel ayarlarını özelleştirebilirsiniz de… Böylelikle uygulamanızın çalışacağı makine ya da etki alanlarının yöneticilerinin yapabileceği güvenlik ayarlarını burada simüle etme şansınız olur.

Hata ayıklama sırasında daha gelişmiş güvenlik istisnaları

Zone’ununuzu bir kez belirledikten sonra, uygulamanız çalışırken o ‘zone’da normalde oluşacak istisnaları verir. Yeni güvenlik istisnası diyalogu size çok daha fazla bilgi verir. Sadece hata değil, hatanın ne gibi yollarla düzeltilebileceği konusunda da detaylı bilgi bulursunuz.

‘IntelliSense in the Zone’ (Visual Basic)

‘IntelliSense in the Zone’ Visual Basic’e özgün bir güvenlik özelliğidir. Bu özellik, IntelliSense’in sadece o zone için izin verilen API’lerle sınırlı kalmasını sağlar. Etkin zone’da geçerli olmayan fonksiyonlar, gri olarak görüntülenir. Bu da yazılımcıların sadece o zone’da izin verildiği bilinen API’leri kullanmalarını sağlamış olur.

PermCalc

PermCalc, .Net yazılımcıları tarafından bir yönetilen uygulamanın başarıyla çalıştırılabilmesi için gereken izinlerin analiz edilmesinde kullanılan ve tek başına çalıştırılabilen bir uygulamadır. Bu özellik 2005’le birlikte Visual Studio’ya eklenmiştir ve yönetilen bir uygulama için Project Properties sayfasında Security kulakçığından bir tıkla ulaşılabilir.
PermCalc’ı IDE’den kullanmak için uygulamanız için kurulum zone’unu ayarlayın ve Calculate Permissions düğmesini tıklayın. Bu alan için normalde verilen daha fazla izne gereksinimi varsa uygulamanızın, bu izinlerle ilgili olarak size rapor verilir. Böylelikle uygulamanızın gerektiği ama çalışacağı zone’un ayarlarında varsayılan olarak verilmeyen, sorun çıkarabilecek izinleri görmüş olursunuz. Eğer uygulamanız çalışabilmek için full trust istiyorsa, bu listede değil, ayrı bir mesaj kutusunda görüntülenecektir.

DİĞER GÜVENLİK ZENGİNLEŞTİRMELERİ

Getirilen yeniliklerden bazıları hem native hem de yönetilen projeler için faydalar içerir. Bunlar temelde iki alanda yer alır: En az haklarla geliştirme ve testler.

En az haklarla geliştirme ve hata ayıklama

Kötü niyetli kodların verebileceği zararları kısıtlamanın en önemli yöntemlerinden birisi, kodların gerekli en az haklarla çalışacağı bir ortam oluşturmaktır. Bu yönde kısıtlamalar olmazsa, çoğu kişinin administrator yetkileri olan hesaplarla çalıştırdığı makinelerde kötü niyetli kod bir şekilde çalışmayı üzerine çektiğinde, her türlü hakka sahip olacaktır. Genel bir güvenlik ilkesi olarak admin hakları olan hesaplarla sürekli çalışmaktan şiddetle kaçınmak gerekir.
Yazılım geliştiriciler açısından özel bir sakınca ise, admin haklarıyla çalıştıklarında karşılaşmayacakları bazı hataların ya da mesajların, admin yetkisi olmadan uygulamayı kullanacak kişilerin karşısına çıkacak olmasıdır.
Visual Studio’nun eski versiyonlarında kısıtlı haklarla uygulama geliştirmek ve hata ayıklamak zordu, çünkü Visual Studio’nun kendisi zaten yüksek ayrıcalıklı haklarla en iyi çalışabiliyordu. 2005 versiyonunda bu durum değişmiştir. Visual Studio 2005, daha önce bir Administrator ya da Debugger User’la çalıştığınız gibi temiz bir şekilde normal bir kullanıcı hesabıyla çalışmanıza ve hata ayıklamanıza izin verir.
Visual Studio 2005’te bile yüksek ayrıcalıklı hesaplarla çalışmak üzere tasarlanmış eklentilerde sorun yaşayabileceğinizi unutmayın.

Test özellikleri

Bağlantılı bir ortamda çalışacak bir uygulamanız için güvenlik açısından yapacağınız testler çok önemlidir. Visual Studio 2005 Team System size daha güvenli uygulamalar geliştirmeniz için çeşitli test araçları sunar.

Birim testleri

Birim testlerinin kullanılma amaçlarından biri, bir metodun belirli girdiler verilmişken dönüş değerinin beklenen değer ya da değerler olmasından emin olmaktır. Kullanıcı verisini işlerken, verinin beklediğiniz özelliklerde olmasını sağlamak önemlidir. Daha veriyi işlemeye başlamadan önce test etmeniz gereken iki şey, veri tipi ve verinin uzunluğudur. Birim testleri, bir fonksiyona rastsal veri göndermek ve uygulamanın veriyi gerektiği gibi kullandığının ve uygulamanın genelinin beklendiği gibi çalıştığının sağlamasını yapmak üzere kullanılabilir.
Ayrıca birim testlerde kod kapsama da etkin kılınabilir. Uygulamanın kodlarının tamamının test edilmesini sağlar. Az kullanılan kodların mesela SEH (structured exception handling) kodları böylelikle gözden kaçırılmamış olur. Normal akışın parçası olmayan kodlar da saldırıya uğrayabilir. Saldırganlar uygulamayı özellikle normal akışından çıkaracak hatalar yaptırıp buralarda çalışan kodlardaki olası açıkları değerlendirmeye çalışırlar.
Visual Studio 2005 birim testler oluşturmanıza izin veren çeşitli test araçları içerir. Visual C++, Visual CSharp ya da Visual Basic’te Add New Test diyalog kutusunu kullanarak elle test ekleyebilirsiniz. Aynı diyalog kutusundan Unit Test Wizard’ı da çalıştırabilirsiniz. Bu sihirbaz, bu tip testlerin nasıl çalıştığını anlamak ve kendi testlerinizi geliştirmek yolunda size bir başlangıç sağlayacaktır.

Yük testleri

Yük testleri önemlidir. Çünkü DoS (Denial of Service) senaryoları gibi ataklara karşı web uygulamalarınızın test edilmesini sağlar. Load Test Wizard’ı çalıştırmak için Add New Test diyalog kutusunda Load Test şablonunu tıklayın. Bu aracı, hem uygulamanızın taşıması gerekecek yükleri test etmek için, hem de normal dışı durumları test etmek için kullanabilirsiniz. Böylelikle bu tür saldırıları simüle edip uygulamanızın cevaplama şekline göre hata ayıklama ve değişiklikler yapabilirsiniz.

SONUÇ

Daha güvenli uygulamaları geliştirmek için gerekli şeyleri daha kolay yapmanızı sağlayan Visual Studio 2005’in bu özelliklerini deneyin.