Kod Kalitesi Hataları



Benzer belgeler
a) Kod Doğruluğu: GC.Collect() çağırma Özet Çöp Toplayıcı(Garbage Collector) için açık istekler olası performans sorunlarını gösterir.

Encapsulation Hataları

«BM364» Veritabanı Uygulamaları

Veritabanı İşlemleri

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Java Class Yapısında Finalize Metotunun Kullanımı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BİL-141 Bilgisayar Programlama I (Java)

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Java String İşlemleri

Yrd. Doç. Dr. Caner ÖZCAN

YZM 2105 Nesneye Yönelik Programlama

11- FONKSİYONLAR (FUNCTIONS)

BİL132 Bilgisayar Programlama II

HSancak Nesne Tabanlı Programlama I Ders Notları

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

HSancak Nesne Tabanlı Programlama I Ders Notları

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Yrd. Doç. Dr. Caner ÖZCAN

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

JAVA API v2.0 Belge sürümü: 2.0.2

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Timer İle arka plan renk değişimi

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

C# nedir,.net Framework nedir?

Sunum İçeriği. Programlamaya Giriş

Yazılım Kodlama ve İ simlendirme Standartları v1.0

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BİL-142 Bilgisayar Programlama II

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 3

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Ders 8: Metotlar. barisgokce.com

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

JSON Korsanlığı. Mesut Timur, Şubat 2010, WGT E-Dergi 4. Sayı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

HSancak Nesne Tabanlı Programlama I Ders Notları

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

1 JAVASCRIPT NEDİR? 1

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Lambda İfadeleri (Lambda Expressions)

PROGRAMLAMA DERSİ 1. İNTERNET

Operator Aşırı Yükleme (Operator OverLoading)

Mantıksal İşlemler. 7.1 true, false, nil

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

İş Parçacıkları Thread(s)

C# Metotlar ve Metot Tanımlama

Ders 8 Konu Özeti ve Problemler

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

NESNEYE YÖNELİK PROGRAMLAMA

ADOBE FLASH PLAYER / CVE (Sıfırıncı Gün Zafiyeti)

Karşılaştırma İşlemleri ve Koşullu İfadeler

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Nesneye Dayalı Programlama

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

Öğr. Gör. Serkan AKSU 1

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Görsel Programlama 1

BMH-303 Nesneye Yönelik Programlama

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Programlama Dilleri 3

Üst Düzey Programlama

public static int Toplam int x, int y

Erişim konusunda iki taraf vardır:

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

1-) Veritabanımıza bağlanmak için bir SqlConnection nesnesi, 2-) Veritabanındaki bilgileri kullanmak (seçme, kaydetme, silme, güncelleme) için

1 PROGRAMLAMAYA GİRİŞ

BİL-141 Bilgisayar Programlama I (Java)

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

Doküman JETSMS XML Mesaj Đşlemleri Yardım Dokümanı Tarih Sürüm 1.1.0

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

Göstericiler (Pointers)

Klavyeden Basit Giriş/Çıkış İşlemleri

ORT3167 İnternet Programcılığı 1 Ders1-2. Öğr. Grv. Aybike ŞİMŞEK

MOBİL UYGULAMA GELİŞTİRME

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Asp.Net Veritabanı İşlemleri

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

NESNEYE YÖNELİK PROGRAMLAMA

Kaynak Kod Güvenliği Bir Güvensiz API Örneği

Nesne Tabanlı Programlama

Nesne Yönelimli Programlama

COM API v.1.1 BELGE SÜRÜMÜ : 1.1

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Transkript:

Kod Kalitesi Hataları Fortify Taxonomy: Software Security Errors C# / VB.NET / ASP.NET Code Quality (https://www.fortify.com/vulncat/en/vulncat/dotnet/cq.html) Semih Gelişli, sgelisli-at-gmail-dot-com, 01 Eylül 2011 Kalitesiz kod, programın beklenilmeyen davranışlarda bulunmasına yol açabilir. Kalitesiz kod, kullanıcı açısından bakıldığında genellikle kullanılabilirliği zayıf olarak kendini gösterir, saldırgan kişilere ise sistemi beklenilmeyen yollardan zorlamak için fırsat verir. a) ASP.NET Kötü Kullanımlar: Kısaltılmamış Kod Kısaltılmamış(Unminified) JavaScript kodu bu dosyada yer almaktadır. Microsoft bu kısaltılmış JavaScript kütüphanelerini performans için önermektedir. Kısaltma(Minification), JavaScript dosyaları içeren uygulamalar için sayfa yükleme zamanını geliştirerek dosya boyutunu düşürür. Gereksiz boşluk, yorum, noktalı virgül, parantezleri kaldırılarak, yerel değişken isimlerini kısaltılarak ve ulaşılamaz kodları kaldırılarak Kısaltma(Minification) işlemi yapılmaktadır. Örnek 1: Aşağıdaki ASPX kodu Microsoft un jquery kütüphanesinden kısaltılmamış bir kod versiyonu içermektedir. <script src="http://applicationserver.application.com/lib/jquery/jquery-1.4.2.js" type="text/javascript"></script> 1 [1] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A1 Injection [2] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A1 Unvalidated Input [3] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A3 Malicious File Execution [4] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3510 CAT I, APP3600 CAT II [5] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 94 [6] Introduction to CSS Minification Microsoft [7] Microsoft AJAX Minifier Microsoft [8] Optimizations for Improving Load Times Microsoft [9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.3.1.1, Requirement 6.5.3 [10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.1 [11] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Risky Resource Management - CWE ID 094 [12] Standards Mapping - SANS Top 25 2010 - (SANS 2010) Risky Resource Management - CWE ID 098

[13] Standards Mapping - FIPS200 - (FISMA) SI b) Kod Doğruluğu: ICloneable Metodu Tanımı ICloneable ara yüzü kullandığı Clone metodu için zayıf bir sözleşme sunar ve kullanımından kaçınılmalıdır. ICloneable ara yüzü derinlemesine klonlamayı garanti etmez, bu ara yüzden klonlanan sınıflar beklendiği gibi davranmayabilir. ICloneable ara yüzünü kullanan sınıflar yüzeysel klonlama(sadece diğer objelere olan referansları içerecek şekilde objeyi kopyalama şekli) yaparlar ve beklenilmeyen davranışlarda bulanabilirler. Çünkü derinlemesine klonlama(bütün obje referanslarını içeren kopyalama şekli) beklenen metot davranışıdır. ICloneable ara yüzü hataya yatkındır ve kullanımından kaçınılmalıdır. [1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 398 [2] Krzysztof Cwalina, Brad Abrams Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable.NET Libraries. Chapter 8: Usage Guidelines Addison-Wesley c) Kod Doğruluğu: Sınıfların Hatalı Karşılaştırılması Sınıf adına göre sınıfın tipini belirlemek beklenilmeyen davranışlara yol açabilir ya da saldırgana kötü niyetli sınıf enjekte imkânı verebilir. Saldırganlar bir sınıfın adını kasten kopyalayarak programın kopyaladıkları kötü niyetli kodu çalıştırmasını sağlayabilirler. Bu sebepten ötürü sınıf isimleri iyi birer tanımlayıcı değildirler ve objelerin sınıflara güvenmesinde sınıf adları temel alınmamalıdır. Örnek 1: Aşağıdaki kod inputreader objesine gelen sınıfın adına göre çalışmaktadır. Eğer saldırgan; kötü niyetli kodu çalıştıran inputreader tanımlaması yapabilirse aşağıdaki program hangi sınıfın güvenilir hangi sınıfın güvenilmez olduğunu ayırt edemeyecektir. if (inputreader.gettype().fullname == "CompanyX.Transaction.Monetary") processtransaction(inputreader); [1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 486 d) Kod Doğruluğu: Eksik [Seri] Özelliği 2

ISerializable ara yüzü tanımlı sınıflar eğer Serializable özelliğini tanımlamazlarsa serileştirme gerçekleşmez..net çalışma ortamında Serializable özelliği tanımlı her objeye serileştirilme olanağı verilmektedir. Eğer obje.net Framework te varsayılan olarak tanımlanmış serileştirme metotlarını kullanabiliyorsa, bu durum objenin serileştirilebilmesi için hem önemlidir hem de yeterlidir. Eğer sınıfta özelleştirilmiş serileştirme metodunu kullanmak gerekiyorsa aynı zamanda ISerializable ara yüzü de tanımlanmalıdır. Ancak sınıf üzerinde yine de Serializable özelliği tanımlanmalıdır. Örnek: CustomStorage isimli sınıf ISerializable ara yüzünü tanımlamıştır. Ancak Serializable özelliğini tanımlarken hata almakta ve serileştirilememektedir. public class CustomStorage: ISerializable [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP6080 CAT II [3] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 730 [4] Mark ISerializable types with Serializable Microsoft Corporation [5] Piet Obermeyer and Jonathan Hawkins MSDN Library: Object Serialization in the.net Framework [6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.9 e) Kod Doğruluğu: Metot Adının Yanlış Yazımı.NET in ortak metotlarından birini yeniden yazmaya çalışma amacı gibi durmaktadır ama beklenilen etkiyi oluşturamaz. Bu metot adı.net in ortak metot isimlerine benzerdir ama ya metot adı yanlış yazılmıştır ya da değişken listesi metodun yeniden yazma işlemini geçersiz kılar. Örnek: Aşağıdaki kod System.Object.Equals() metodunu tekrar yazmaya çalışıyor public boolean Equals(string obj) Ancak System.Object.Equals() metodu object tipinde değişken aldığında yukarıdaki kod hiçbir zaman çalışmayacaktır. 3

[1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 398 f) Kod Doğruluğu: Equals() Metoduna null Değişken Göndermek obj.eqeals(null) gösterimi her zaman yanlış bir kullanımdır. Equals() metodunu kullanan program objeyi null ile karşılaştırmaktadır. Equals() metodu bu karşılaştırmaya her zaman false dönmelidir. [1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 398, CWE ID 754 [2] Standards Mapping - SANS Top 25 2010 - (SANS 2010) Risky Resource Management - CWE ID 754 g) Kullanılmayan Kod: Kullanılmayan Alanlar Bu alan direk ya da dolaylı olarak hiçbir metot tarafından kullanılmamaktadır. Kendi ölü kodu dışında bu alana hiçbir zaman bir giriş yapılmaz. Ölü kod, direk ya da dolaylı olarak hiçbir metot tarafından kullanılmayan kod parçasıdır. Kullanılmayan alanların basitçe unutulmuş olması olasıdır aynı zamanda kullanılmayan alanlar hatayı işaret ederler. Örnek 1: Glue isimli alan aşağıdaki sınıfta kullanılmamaktadır. Sınıfın programcısı tırnak işaretlerini glue ismine yanlışlıkla koymuştur ve alanı string sabitine çevirmiştir. public class Dead string glue; public string GetGlue() return "glue"; Örnek 2: Glue isimli alan sadece aşağıdaki metot tarafından kullanılmaktadır fakat o metot ortak metotlar tarafından kullanılmamaktadır. public class Dead string glue; private string GetGlue() return glue; 4

[1] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3050 CAT II [2] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 561 h) Kullanılmayan Kod: Kullanılmayan Metotlar Bu metot sınıf dışındaki hiçbir metot tarafından kullanılamaz. Bu metot hiçbir zaman çağırılmaz ya da başka bir ölü kod tarafından kullanılmaktadır. Ölü kod, direk ya da dolaylı olarak hiçbir metot tarafından kullanılmayan kod parçasıdır. Örnek 1: Aşağıdaki sınıfta dowork() metodu hiçbir zaman çağırılamaz. public class Dead private void DoWork() Console.Write("doing work"); public static void Main(string[] args) Console.Write("running Dead"); Örnek 2: Aşağıdaki sınıfta iki özel metot birbirini çağırmaktadır fakat başka yerden çağırılmamaktadırlar ve her ikisi de ölü koddur. public class DoubleDead private void DoTweedledee() DoTweedledumb(); private void DoTweedledumb() DoTweedledee(); public static void Main(string[] args) Console.Write("running DoubleDead"); 5

Bu durumda her iki metodun da ölü kod olduğunu düşünebiliriz çünkü programı sonsuz döngüye sokabilirler. [1] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3050 CAT II [2] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 561 i) Null Dereference Programın, NullException atarak null pointeri dereference yapma potansiyeli vardır. NullPointer hataları genellikle bir ya da daha fazla varsayımı ihlal etmektedir. Çoğu NullPointer hatası genel yazılım güvenliği problemi oluşturur, ama saldırgan null pointer deference tetikleyebilirse geri dönen hata cevabını kullanarak güvenlik mantığını aşabilir ya da debug bilgilerini ortaya çıkararak daha sonraki saldırılarında kullanabilir. Örnek: Aşağıdaki kodda programcı, sistemin her zaman cmd isimli bir özelliğinin tanımlı olduğunu varsaymaktadır. Eğer saldırgan program ortamını kontrol edebilirse cmd özelliğini kaldırır ve program trim() metodunu çağırdığında null pointer hatasının ortaya çıkmasını sağlayabilir. string cmd = null; cmd = Environment.GetEnvironmentVariable("cmd"); cmd = cmd.trim(); [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP6080 CAT II [3] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 476 [4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.9 j) Obsolete Deprecated ya da Obsolote fonksiyonlarının kullanımı ihmal edilmiş kodları gösterebilir. Programlama dilleri geliştikçe aşağıdaki sebeplerden dolayı fonksiyonlar ihmal edilmiştir: Yazılım dilindeki gelişmeler Operasyonların etkin ve güvenilir biçimde nasıl yapılacağının anlaşılması Belirli işlemleri yöneten sözleşmelerdeki değişiklikler 6

Programlama dillerinden kaldırılan fonksiyonlar yerine genellikle ayni işlevi daha değişik yöntem ve umutla yapan muadil fonksiyonlar gelmektedir. Örnek: Aşağıdaki kod, kullanıcıların veri tabanına bağlanmalarına nasıl izin verileceğini düzenleyen yeni bir SqlClientPermission objesi oluşturmaktadır. Bu örnekteki program false değerini ikinci parametre olarak Constructor a göndererek kullanıcıların şifre girmeksizin veri tabanına bağlanıp bağlanamayacağını kontrol ediyor. False değerini Constructor a göndermek şifre girmeden veri tabanına bağlanamayacağınızı göstermektedir. SCP = new SqlClientPermission(pstate, false); Ancak PermissionState objesinin ilk parametre olarak gönderilmesinden dolayı ikinci parametreye gönderilen herhangi bir değerin yerine geçer. Constructor ikinci parametreyi bu şekilde kullandırdığında veri tabanı için şifresiz erişim hakkı verir. Şifresiz erişimi engellemek için program ilk parametre olarak PermissionState.None göndermelidir. SqlClientPermission Constructor ının 2 parametreli kullanımının 1 parametreli kullanıma göre modası geçmiştir çünkü işlevselliğinde belirsizlikler vardır ve 1 parametreli kullanımın yanlış yorumlanması riski olmayıp aynı bilgiyi aktarmaktadır. Güvenlik riski oluşturmasından dolayı bütün fonksiyonlar kaldırılamaz yada değiştirilemez. Ancak modası geçmiş bir fonksiyonun varlığı genellikle etrafındaki kodun ihmal edildiğini gösterir ve bakıma ihtiyacı olabilir. Uzun bir süre boyunca yazılım güvenliği öncelik yada bir değerlendirme bile olmamıştır. Programda onaylanmamış yada eski fonksiyonların kullanılmış olması güvenlik sorunu olma olasılığını yükseltir. [1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 477 k) Serbest Bırakılamamış Kaynak: Streams Program, sistem kaynağını serbest bırakma aşamasında sorun yaşayabilir. Programın kendine ayırdığı sistem kaynağını serbest bırakamama potansiyeli vardır. Kaynak sızıntıları en az 2 ortak sebebe sahiptir: Hata durumları ve diğer istisnai durumlar Kaynağı, programın hangi parçasının serbest bırakacağı konusunda karışıklık 7

Serbest bırakılmayan sistem kaynakları genellikle programın güvenilirliğini sarsar ve eğer bir saldırgan kaynak sızıntısını tetikleyebilirse bütün kaynakları tüketerek programı servis veremeyecek duruma getirebilir. Örnek 1: Aşağıdaki metot açılmış olan dosyayı hiçbir zaman kapatmaz. StreamReader() için Finalize() metodu, işlemin sonunda Close() metodunu çağırır fakat ne kadar süre sonra Finalize() metodunun çağırılacağının bir garantisi yoktur. Aslında Finalize() metodunun çağırılacağının da garantisi yoktur. Meşgul bir sistem ortamında, işleyebileceği tüm dosyaları kullanarak VM e neden olabilir. private void processfile(string fname) StreamWriter sw = new StreamWriter(fName); string line; while ((line = sr.readline())!= null) processline(line); Örnek 2: Normal şartlar altında aşağıdaki kod veri tabanı sorgusu çalıştırmaktadır, veri tabanından gelen sonucu işler ve SqlConnection objesini kapatır. Eğer Sql sorgusu çalışırken ya da veri tabanından dönen sonucu işlerken bir sorun ile karşılaşılırsa SqlConnection objesi kapatılmayacaktır. Bunun olması veri tabanının kullanılabilecek imleçlerini tüketir ve başka bir Sql sorgusu çalıştıramayacak duruma getirir. SqlConnection conn = new SqlConnection(connString); SqlCommand cmd = new SqlCommand(queryString); cmd.connection = conn; conn.open(); SqlDataReader rdr = cmd.executereader(); HarvestResults(rdr); conn.connection.close(); [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP6080 CAT II [3] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 404 [4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.9 [5] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Risky Resource Management - CWE ID 404 8

l) Serbest Bırakılamamış Kaynak: Synchronization Program, tuttuğu anahtarı bırakamamakta ve kilitlenmeye sebep olmaktadır. Programın kendine ayırdığı sistem kaynağını serbest bırakamama potansiyeli vardır. Programın kendine ayırdığı sistem kaynağını serbest bırakamama potansiyeli vardır. Kaynak sızıntıları en az 2 ortak sebebe sahiptir: Hata durumları ve diğer istisnai durumlar Kaynağı, programın hangi parçasının serbest bırakacağı konusunda karışıklık Serbest bırakılmayan sistem kaynakları genellikle programın güvenilirliğini sarsar ve eğer bir saldırgan kaynak sızıntısını tetikleyebilirse bütün kaynakları tüketerek programı servis veremeyecek duruma getirebilir. Örnek: Aşağıdaki kod, performoperationincriticalsection() metodundan önce bir kilitlenme oluşturmaktadır ama bu metot çalışırken bir hata oluşursa kilitlenmeyi çözemeyecektir. Object synchronizationobject = new Object (); System.Threading.Monitor.Enter(synchronizationObject); performoperationincriticalsection(); System.Threading.Monitor.Exit(synchronizationObject); [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service m) Serbest Bırakılamamış Kaynak: Yönetilmeyen Obje Yönetilmeyen sistem kaynaklarını kullanan objenin kaldırılması başarısız olur. Yönetilmeyen sistem kaynaklarını kullanan objenin uygun şekilde kaldırılması başarısız olur. Yönetilmeyen sistem kaynaklarını kullanan objenin kaldırılamamasında en az 2 ortak sorun vardır: Hata durumları ve diğer istisnai durumlar Kaynağı programın hangi parçasının serbest bırakacağı konusunda karışıklık Yönetilen.NET objelerinden ufak bir küme yönetilmeyen sistem kaynaklarını kullanmaktadır. Garbage Collector, orijinal yönetilebilir objeleri tahmin etme işleminde serbest değildir. Örneğin, Garbage Collector yönetilmeyen objelerin kullandıkları kaynaklardan habersiz olarak uygulama olarak kullanılabilir ve sistem kaynaklarını tüketebilir. Çoğu yönetilmeyen kaynaklar sızıntı olaylarına sebep vererek yazılım güvenilirliği problemleri yaratmaktadır. Saldırgan yönetilmeyen bir sistem kaynağını sızıntısını tetikleyebilirse yönetilmeyen kaynak havuzunu tüketerek programın servis dışı kalmasını sağlayabilir. 9

Örnek: Aşağıdaki metot, incomingstream kullanrarak yönetilen bir Bitmap objesi oluşturmaktadır. Bitmap objesi outgoingstream fonksiyonunu manipüle etmektedir. incomingbitmap ve outgoingbitmap objelerinin Dispose()fonksiyonu açıkça çağırılamamaktadır. Normalde, yönetilmeyen sistem kaynaklarını kullanmayan yönetilen objeler güvenli bir zamanda Gargabe Collector a güvenirler. Garbage Collector uygun gördüğü zaman Bitmap.Dispose() fonksiyonunu çağırır. Ancak Bitmap nesnesi yönetilmeyen sınırlı sistem kaynaklarını kullanır. Garbage Collector, yönetilmeyen sistem kaynak havuzu bitmeden önce Dispose() çağırmada başarısız olabilir. private void processbitmap(stream incomingstream, Stream outgoingstream, int thumbnailsize) Bitmap incomingbitmap = (Bitmap)System.Drawing.Image.FromStream(incomingStream); bool validbitmap = validatebitmap(incomingbitmap); if (!validbitmap) throw new ValidationException(incomingBitmap); Bitmap outgoingbitmap = new Bitmap(incomingBitmap, new Size(thumbnailSize, thumbnailsize)); outgoingbitmap.save(outgoingstream, ImageFormat.Bmp); [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP6080 CAT II [3] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 404 [4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.9 [5] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Risky Resource Management - CWE ID 404 10