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.



Benzer belgeler
Encapsulation Hataları

Kod Kalitesi Hataları

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

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

Yeni Nesil Ağ Güvenliği

TC KİMLİK NO SMS GÖNDERİM SOAP API

COĞRAFİ BİLGİ SİSTEMLERİ SERVER MİMARİSİ SERVER UYGULAMA GELİŞTİRME EĞİTİMİ

Google Play Zararlısı İnceleme Raporu

Görsel Programlama DERS 12. Görsel Programlama - Ders12/

VIDEOCELL API. Versiyon 1.0.0

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

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

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

COM API v2.0 Belge sürümü : 2.0.3

Güvenlik Java ve Web Uygulama Güvenliği

Yrd. Doç. Dr. Caner ÖZCAN

MOKA ÖDEME SERVİSİ BAYİ İŞLEMLERİ ENTEGRASYON DOKÜMANI

Timer İle arka plan renk değişimi

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

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

Durum Yönetimi. Olan sayfalar ekleyelim. BasitSayac.aspx

Üst Düzey Programlama

BLM 6196 Bilgisayar Ağları ve Haberleşme Protokolleri

Üst Düzey Programlama

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

Yrd. Doç. Dr. Caner ÖZCAN

Simetrik (Gizli) Kriptografik Sistemler Blok Şifreler Standartlaştırma. DES-Data Encryption Standard (Bilgi Şifreleme Standardı)

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

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

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

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

WEB UYGULAMA GÜVENLİĞİ HAKKINDA. Mesut Güngör İzmir Yüksek Teknoloji Enstitüsü Bilgi İşlem Daire Başkanlığı

Sertan Kolat

C# nedir,.net Framework nedir?

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

MOBILEPAX SOAP PRODUCT API KULLANIM ŞEKLİ

Yazılım Tanımlı Ağlar Ders 6 SDN Programlama. Mehmet Demirci

ASP.NET 1. DURUM YÖNETİMİ. BLM 318 e-ticaret ve Uyg. Durum Yönetimi Nedir? Durum Yönetimi: Karșılaștırma İÇERİK. Sunucu-taraflı Durum Yönetimi

BLIND SQL INJECTION SALDIRILARI

MOBILEPAX XML PRODUCT API KULLANIM ŞEKLİ

BİL132 Bilgisayar Programlama II

Üst Düzey Programlama

Web Uygulama Güvenliği Kontrol Listesi 2010

// hataları işaret eden referans

PAKET TRANSFER SİSTEMİ

Web Application Penetration Test Report

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Yazılım Tanımlı Ağlar Ders 5 SDN Programlama. Mehmet Demirci

ÖZGÜR YAZILIMLAR İLE J2EE

Java String İşlemleri

Görsel Programlama 1


01 Şirket Profili

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

FIRAT ÜNİVERSİTESİ BİLGİSAYAR MÜH.

Yazılım Geliştirme Sürecinde OWASP Projeleri

e-logo e-fatura Özel Entegratör Sistemi

MaestroPanel Kurulum

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

Üst Düzey Programlama

C#(Sharp) Programlama Dili

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

PAKET TRANSFER SİSTEMİ

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

ERİŞİM ENGELLEME DOS VE DDOS:

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Üst Düzey Programlama

Ağ Yönetiminin Fonksiyonel Mimarisi

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

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Bilgi güvenliği konusunda farkındalık yaratmak. Mobil cihazlardaki riskleri anlatmak. Mobil uygulamaların bilgi güvenliği açısından incelemek 2

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

Tanımı Problemi 46 Şüpheci Yaklaşım 47 Tamsayı Taşması (Integer Overflow) 47 Tamsayı Taşması Java Uygulaması 48

SESSİON KULLANIMI. .Aşağıdaki Kodları da SessionDevam.asp adıyla kaydedelim. Language=VBScript Codepage="1254"%>

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Bilgi Servisleri (IS)

RSA ŞİFRELEME ALGORİTMASI

YZM 3215 İleri Web Programlama

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

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

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

HSancak Nesne Tabanlı Programlama I Ders Notları

Sorun Giderme. Genel. Disk. Aygıt Sürücüleri 3

ORTA DOĞU TEKNİK ÜNİVERSİTESİ BİLGİ İŞLEM DAİRE BAŞKANLIĞI. Güvenlik ve Virüsler. ODTÜ BİDB İbrahim Çalışır, Ozan Tuğluk, Cengiz Acartürk

Medula Eczane Stok Bilgileri Web Servisleri Kullanım Kılavuzu


PROGRAMLAMA DERSİ 1. İNTERNET

DNS. Linux Yaz Kampı Bolu 2012 Eray Aslan

PAPERWORK TEKNİK MİMARİ

Basit bir web uygulaması

Veritabanı İşlemleri

Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

GEÇERLİLİK KONTROLLERİ VALİDATİON CONTROLS. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

YZM 3215 İleri Web Programlama

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

Transkript:

Uygulama Programlama Arayüzü(API) İstismarları Fortify Taxonomy: Software Security Errors C# / VB.NET / ASP.NET API Abuse (https://www.fortify.com/vulncat/en/vulncat/dotnet/apia.html) Semih Gelişli, sgelisli-at-gmail-dot-com, 17 Ağustos 2011 API, istemci ve sunucu arasında bir sözleşme gibidir. API istismarları genel olarak API istemcisinin bu sözleşmenin bittiğini düşünmesinden kaynaklanmaktadır. Örneğin, bir program chroot() fonksiyonunu çağırdıktan sonra chdir() fonksiyonunu çağırma işlemi başarısız olursa, aktif olan klasörün güvenli modda nasıl değiştirileceği belirtilen sözleşmeyi ihlal etmiş olur. Kütüphanelerin, istemci tarafından güvenilir DNS bilgisi dönmesini beklemeleri de başka bir güzel örnek olarak verilebilir. Bu durumda, istemci istenilen API nın davranışı hakkında belirli varsayımda bulunarak API kuralını ihlal eder. Aynı ihlali API tarafından da görebiliriz. Örneğin, yazılımcı SecureRandom() alt sınıfını kullanıyorsa ve bu alt sınıf değer olarak rastgele olmayan değerler dönüyorsa sözleşme ihlal edilmiş olur. a) Kod Doğruluğu: GC.Collect() çağırma Çöp Toplayıcı(Garbage Collector) için açık istekler olası performans sorunlarını gösterir. Her.Net geliştiricisinin kariyerinin bir noktasında hata ayıklama sırasında alternatifi olmayan gizemli, aşılmaz ve ayıklaması zor olan durumlarla karşılaşılmıştır ve bu durumlar yüzünden Çöp Toplayıcı suçlanmıştır. Özellikle hata zaman ve durum ile ilgili ise ampirik kanıtlar bu teoriyi desteklemek için bir ipucu olabilir: Bazen GC.Collect() fonksiyonunu çağırmak sorunu giderebilir. Karşılaşılan çoğu durumda görebiliriz ki GC.Collect() fonksiyonunu çağırmış olmak bir hatadır. GC.Collect() fonksiyonu gereğinden fazla çağırılırsa performans sorunlarına yol açabilir. [1] StandardsMapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] StandardsMapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP6080 CAT II [3] StandardsMapping - CommonWeaknessEnumeration - (CWE) CWE ID 730 [4] RicoMariani PerformanceTidbits [5] StandardsMapping - PaymentCardIndustry Data Security StandardVersion1.1 - (PCI 1.1) Requirement 6.5.9 [6] Scott Holden Theperils of GC.Collect() b) Kod Doğruluğu: Equal() Tanımlı Olmayan Sınıf Equals() fonksiyonu tanımlı olmayan objede equals() fonksiyonunu çağırma 1

Geliştiriciler objeleri karşılaştırırken genellikle objelerin özelliklerini karşılaştırmak isterler. Ancak bir sınıftan Equals() metodunu çağırmak Equals() metodunun açıkça tanımlamış olmaz ve çağırıldığında metot özellikleri System.Object sınıfından miras olarak gelir. Obje üye alanlarının ya da diğer özelliklerinin karşılaştırılmasının yerine Object.Equals() metodu kullanılarak iki objenin aynı olup olmadığını karşılaştırır. Object.Equals() metodunun normal kullanımına izin verilmiş olmasına rağmen genellikle kodun hatalı olduğu izlenimi verir. [1] StandardsMapping - CommonWeaknessEnumeration - (CWE) CWE ID 398 c) Kod Doğruluğu: Dizide Array() kullanmak Dizi tanımında Array() fonksiyonu çağırmak Çoğu durumda dizi tanımında tostring() çağırmak dizinin içerdiği bilgiyi string olarak getirir. Ancak array üstünde direkt tostring() çağırmak dizinin türünü string olarak getirir. Kod örneği çıktı olarak System.String*+ verecek String[] stringarray = "element 1", "element 2", "element 3", "element 4" ; System.Diagnostics.Debug.WriteLine(stringArray.ToString()); [1] Class Arrays Microsoft [2] StandardsMapping - CommonWeaknessEnumeration - (CWE) CWE ID 398 d) Eksik Null Kontrolü Yapmak Program bir nullpointer e referans olarak verilmiş olabilir çünkü fonksiyondan dönen değerin null olup olmadığı kontrolü yapılmamıştır. Yazılım sistemlerine yapılan her ciddi saldırı yazılımcının düşük seviyede güvenlik varsayımlarından kaynaklanır. Saldırıdan sonra yazılımcının varsayımları zayıf ve çürük olarak görünür ancak saldırıdan önce her yazılımcı kendi varsayımlarını sonuna kadar savunabilir. İki varsayım vardır ki bunlar kod varsayımları için sabitlenmiştir ve onlar bu Bu fonksiyonun çağırımında kesinlikle sorun olmaz ve Bu fonksiyonun çağırımında sorun olursa önemli bir şey olmaz düşünceleridir. Eğer yazılımcı bir fonksiyondan dönen değeri kontrol etmez ise bu iki düşüncenin arkasına sığınmış olur. Aşağıdaki kod; Item() özelliğinden dönen değerin null olup olmadığını Equals() fonksiyonunu çağırmadan önce kontrol etmektedir ve null dereference sorununa sebep olmaktadır. 2

string itemname = request.item(item_name); if (itemname.equals(important_item))...... Bu kodun geleneksel savunması ise: Metoda gönderilen değer sürekli var olacak çünkü Eğer o değer olmazsa program istenen davranışı sağlayamaz ve bu yüzden ortaya çıkabilecek hatayı göz önüne alıp almamak önemli değildir. Özellikle istisnalar karmaşık ise saldırganlar kullandıkları programlar aracılığı ile beklenmedik açıklıklar bulabilirler. [1] StandardsMapping - OWASP Top 10 2004 - (OWASP 2004) A9 Application Denial of Service [2] StandardsMapping - Security Technical Implementation Guide Version 3 - (STIG3) APP3120 CAT II, APP6080 CAT II [3] StandardsMapping - CommonWeaknessEnumeration - (CWE) CWE ID 253, CWE ID 690 [4] StandardsMapping - PaymentCardIndustry Data Security StandardVersion1.1 - (PCI1.1) Requirement 6.5.9 e) Nesne Modeli İhlali: Sadece Equals() yada GetHashCode() fonksiyonlarından biri tanımlı Bu sınıf sadece Equals() ya da GetHashCode() fonksiyonunu geçersiz kılar..net objelerinin eşitlikle ilgili bazı değişmezlere uyması beklenir. Bu değişmezlerden biri ise eşit sınıfların eşit hash kodlara sahip olmasıdır. Diğer bir deyişle eğer a.equals(b)== true then a.getgashcode()== b.gethashcode() Sınıfın objeleri yığında tutulduğunda bu değişmezliği desteklemek başarısız olursa soruna yol açabilir. Soru içinde olan sınıfın objeleri hash tablosunda anahtar olarak tutulmuş ise veya kütüphaneye veri olarak girilmişse eşit objelerin eşit hash kodlara sahip olması kritik bir duruma gelir. Aşağıdaki sınıf kodu Equals() fonksiyonunu geçersiz kılmaktadır. public class Halfway() public override boolean Equals(object obj)... 3

[1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 581 [2] MSDN Library: Equals Method (Object) Microsoft Corporation [3] MSDN Library: GetHashCode Method (Object) Microsoft Corporation f) Genel Yanlış Kullanım: Kimlik Doğrulama Saldırganlar DNS girdilerini kendi DNS leri gibi gösterebilirler. DNS isimlerini güvenlik açısından güvenmeyiniz. Çoğu DNS sunucusu saldırılara karşı savunmasız durumdadır. Bundan dolayı geliştirdiğiniz yazılımın güvensiz bir DNS sunucusu ile çalışabileceğini göz önünde bulundurmalısınız. Eğer saldırganlar DNS sunucusundaki girdileri istedikleri şekilde güncellerler ise sizin ağ trafiğinizi kendi sistemlerine yönlendirebilirler veya kendi IP lerini sizin sisteminizin bir parçası olarak gösterebilirler. Sistem güvenliğinizi DNS isimlerine göre düzenlemeyiniz. Aşağıdaki kod DNS lookup fonksiyonunu kullanırken DNS sunucusundan dönen cevabın güvenilir olup olmadığını sorgulamamaktadır. Eğer saldırgan DNS önbelleklerini ele geçirirse sistem tarafından güvenilir bir pozisyona gelmiş olurlar. IPAddress hostipaddress = IPAddress.Parse(RemoteIpAddress); IPHostEntry hostinfo = Dns.GetHostByAddress(hostIPAddress); if (hostinfo.hostname.endswith("trustme.com")) trusted = true; IP adresler DNS isimlerine göre daha güvenilir olmasına rağmen IP adresleri de ele geçirilebilir. Saldırganlar gönderdikleri paketlerin kaynak IP sini kolaylıkla düzenleyebilirler fakat gönderilen paketlere dönen cevaplar verilen kaynak adreslerine geri gönderilirler. Saldırgan cevap olarak gönderilen paketleri görmek için istemci ve sunucu arasındaki trafiği izinsiz olarak kayıt altına almaya çalışırlar. İşlemi başarı ile bitirmek için kendilerini istemci bilgisayarın olduğu ağa yerleştirirler. Saldırganlar kaynak yönlendirme kullanarak kendilerini ağa yerleştirme işlemine ihtiyaç duymayabilirler ama kaynak yönlendirme Internet in çoğunda devre dışı duruma getirilmiştir. le IP adres doğrulama işlemi Kimlik Doğrulama işleminin bir parçası olarak kullanışlı olabilir ama Kimlik Doğrulama işlemi içinde tek faktör olmamalıdır. [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A3 Broken Authentication and Session Management [2] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A3 Broken Authentication and Session Management [3] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A7 Broken Authentication and Session Management [4] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG3) APP3460 CAT I 4

[5] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 247, CWE ID 292, CWE ID 558, CWE 807 [6] Standards Mapping - FIPS200 - (FISMA) IA [7] Standards Mapping - Web Application Security Consortium 24 + 2 - (WASC 24 +2) Insufficient Authentication [8] Standards Mapping - SANS Top 25 2010 - (SANS 2010) Porus Defense - CWE ID 807 [9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.3 [10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.5.7 g) Denetlenmeyen Dönüş Değeri Bir metodun yada fonksiyonun geri dönüş değerinin göz ardı edilmesi programı beklenilmeyen durumlara ve koşullara sokabilir. Programcılar için Read() ve System.IO sınıflarının bir çok fonksiyonunu yanlış anlamak alışılmadık bir şey değildir. Çoğu hata ve olağan dışı durumlar.net te exception hatalarının atılmasında ortaya çıkar.(bu durum.net in C dili gibi diğer yazılım dillerine göre avantajıdır: Exception lar programcıların sorunun nerede olduğunu anlamalarını kolaylaştırır.) Ama küçük bir miktar verilerin kullanılabilir hale gelmesi durumunda Stream ve Reader sınıflarını olağandışı düşünmüyoruz. Bu sınıflar küçük miktaradaki verileri arabelleğe alarak geri dönüş yapar ve geri dönüş değeri olarak bayt yada karakter sayısını verir. Bu davranış Read() ve diğer IO metotlarından dönen değeri anlamak için programcılar için önemlidir ve bekledikleri veriyi almalarını sağlar. Aşağıdaki kod bir kullanıcı dizisine girerek her kullanıcı için özel bir dosya okumaktadır. Programcı bütün dosyaların her zaman 1kb olacağını varsaymıştır ve Read() metotundan dönen değeri kontrol etmemiştir. Eğer saldırgan daha ufak bir dosya oluşturabilirse 1kb veri doldurabilmek için bir önceki kullanıcının verilerine ulaşacaktır ve verinin saldırgana ait olacağını düşünecektir. char[] bytearray = new char[1024]; for (IEnumerator i=users.getenumerator(); i.movenext() ;i.current()) string username = (string) i.current(); string pfilename = PFILE_ROOT + "/" + username; StreamReader sr = new StreamReader(pFileName); sr.read(bytearray,0,1024); //dosya büyüklüğü her zaman 1kb sr.close(); processpfile(username, bytearray); 5

[1] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A6 Information Leakage and Improper Error Handling [2] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A7 Improper Error Handling [3] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3120 CAT II [4] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 252, CWE ID 754 [5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.3.1.2, Requirement 6.5.6 [6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.7 [7] Standards Mapping - SANS Top 25 2010 - (SANS 2010) Risky Resource Management - CWE ID 754 6