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



Benzer belgeler
Üst Düzey Programlama

Üst Düzey Programlama

Web Uygulama Güvenliği Kontrol Listesi 2010

FINDIK Herkese Açık Filtre

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Özgür Uygulamalar ile Web Güvenliği. The OWASP

Apache Tomcat Güvenliği

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

PHP (II) Formlar. Dosya İşlemleri. 2002, Sanem SARIEL PHP Ders Notları 2 1. Formlar

Intercepting Filter Tasarım Şablonu KurumsalJava.com

SAMM ile Güvenli Yazılım Geliştirme

Apache Tomcat Güvenliği

Client Server Database

Spring Framework Eğitimi

Burp Suite ile Deneme - Yanılma Denetimi

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

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

Burak Kıymaz JAVA FX

LINQ (Temel Kavramlar)

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

ASP.NET ile Bir Web Sitesi Oluşturma

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

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

Web Güvenlik Topluluğu OWASP. The OWASP Foundation. 21 Haziran, 2008

C Konsol ve Komut Satırı

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

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Üst Düzey Programlama

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

MOBILEPAX SOAP PRODUCT API KULLANIM ŞEKLİ

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

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

JavaServer Faces (JSF) Sunucu Yazılım Teknolojileri 2008

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

Bundan 20 yıl kadar önce, bilgi işlem servisleri günümüzdeki kadar yaygın kullanılmadığından, bilişim sistemleri günümüzdeki kadar önemli bir yere

BİL-142 Bilgisayar Programlama II

Öğr. Gör. Serkan AKSU 1

ÖZGÜR YAZILIMLAR İLE J2EE

Üst Düzey Programlama

PHP ile İnternet Programlama

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

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan,

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

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

Veritabanı Sızma Testleri Türk Standardları Enstitüsü Yazılım Test ve Belgelendirme Dairesi Başkanlığı

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

Google Play Zararlısı İnceleme Raporu

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

DİZİN. Not: Koyu harfle yazılan sayfalar ilgili terimin yoğun olarak geçtiği sayfaları göstermektedir.

T.C.SOSYAL GÜVENLİK KURUMU. Genel Sağlık Sigortası Medula Optik E-reçete Web Servisleri Kullanım Kılavuzu

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

AMAÇLAR: GÜVENLİK TESTLERİNDE BİLGİ TOPLAMA: AKTİF BİLGİ TOPLAMA

Zararlı Kodlar& Analiz Temelleri ve Bir Saldırının Anatomisi

Selective Framebusting

WEB UYGULAMASINA YÖNELİK DENETLEMELERDE LİNK KEŞFETME TEKNİKLERİ VE ARAÇLARI. Deniz Çevik, <denizcev at gmail dot com>, webguvenligi.

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.

Üst Düzey Programlama

Başlangıç; Sayfa 1. Sanal pos tanımlandığında üye numarası admin kullanıcı adı parolası ile Garanti Bankasından tarafınıza iletilecektir.

UHeM ve Bulut Bilişim

MIRACLE DATA WORKS KURULUM DOKÜMANI

Film Arşiv Sistemi. Yazılım Tasarım Belgesi

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Ders 8: Metotlar. barisgokce.com

State Yönetimi. Bir web sayfası ile sunucu arasındaki etkileşim ;

Java Programlamaya Giriş

public static int Toplam int x, int y

«BM364» Veritabanı Uygulamaları

Web Server Sunucu Loglarının K-Komşu Algoritması ile İ ncelenmesi

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

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.


MOBILEPAX XML PRODUCT API KULLANIM ŞEKLİ


TUİK Netsis Erp Paketi Entegrasyonu ve Yıllık İş İstatistikleri Sanayi ve Hizmet Araştırması (YSHİ) Anketi

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

NicProxy Registrar AWBS Modül Kurulumu Versiyon 1.0

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme Emrah Ayanoğlu, Onur Özcan, Alperen Eraslan. Inet-TR 12 9 Kasım 2012

ÇÖZÜM BİLGİSAYAR KOLAY RANDEVU RANDEVU WEB SERVİSLERİ YAZILIM FİRMALARI ENTEGRASYON KILAVUZU Sürüm: 1.0

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

HTML isteklerini anlayarak HTML sonucu üreten ve yaygın olarak kullanılan temel Servlet sınıfı HttpServlet tir.

Online Protokol Üretim Projesi

Web Application Penetration Test Report

PAKET TRANSFER SİSTEMİ

Üst Düzey Programlama

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

Ülkemizdeki Üniversite Web Sayfalarının Siber Güvenlik Açısından Hızlı Bir Değerlendirmesi

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

MOBİL UYGULAMA GELİŞTİRME

Pac Dosyası İle Proxy Kullanmak

Sunum İçeriği. Programlamaya Giriş

Trickbot Zararlı Yazılımı İnceleme Raporu

PORT HABERLEŞME SERİ PORT FARUK BOZAN

UYGULA İÇİ SATIN ALMA. <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="com.android.vending.

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

Listview Kullanımı. Aşağıdaki örnekte bir ListView'ı birkaç ülke ismiyle dolduracağız.

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

JAVASCRIPT JAVASCRIPT DİLİ

Transkript:

Kaynak Kod Güvenliği Bir Güvensiz API Örneği Bedirhan Urgun, Ağustos 2010, WGT E-Dergi 6. Sayı Bu yazıda Tomcat J2EE kısmi uygulama sunucusunda bulunan bir güvenlik açığına, güvenlik probleminin kaynağına ve açıklamasına yer vermeye çalışacağız. CVE-2008-2370 kodlu açıklık Tomcat uygulama sunucusunun 4, 5 ve 6 versiyolarında Stefano Di Paola tarafından bulunmuştur. Tomcat kaynak kodunda bulunan bu zafiyet ile kullanıcılara (J2EE kod geliştiriciler) güvensiz bir API sağlanmıştır. Bu API ı kullanan geliştiriciler bilmeden yazdıkları yazılımlarda bir güvenlik problemi oluşturmaktadırlar. Girdi denetimi ile kolaylıkla her iki seviyede de düzeltilebilecek bu açık içeriği ile beraber aynı zamanda kod geliştirme aşamasında güvenli mimarinin de önemini bir kez daha anlatmaktadır. Yazılan algoritmalar üzerinde saldırgan gibi düşünebilen yazılımcılar bulunması kolay olmayabilir ancak örneklerle eğitilmiş bir yazılımcı kendi geliştirdiği yazılım üzerinde bir güvenlik uzmanından daha etkili incelemelerde bulunacaktır. Saldırgan Gözü İlgili Tomcat problemine detaylı göz atmadan saldırgan gözü ile zafiyetin nasıl exploit edilebildiğini görelim. Aşağıdaki yazılımcımız tarafından üretilmiş JSP parçasına bakalım; <% pagecontext.forward("/page2.jsp?somepar=someval&par="+request.getparameter("blah") ); %> Yapılmak istenen, kullanıcıdan alınan blah isimli parametre değerini kullanarak başka bir URL oluşturmak ve uygulama sunucu üzerinde bulunan bir diğer page2.jsp JSP dosyasını çalıştırıp sonucunu kullanıcıya dönmektir. Kullanıcı tarafından blah parametresinin değeri someotherval olarak verilirse, pagecontext.forward metoduna gönderilecek argüman aşağıdaki gibi olacaktır. /page2.jsp?somepar=someval&par=someotherval Ve page2.jsp JSP dosyası somepar ve par parametreleri ve verilen değerleri ile çalıştırılacaktır. Ancak kullanıcı blah parametresinin değeri olarak /../WEB-INF/web.xml verirse, forward metoduna gönderilecek parametre aşağıdaki gibi üretilecektir. /page2.jsp?somepar=someval&par=/../web-inf/web.xml 1 Web Güvenlik Topluluğu www.webguvenligi.org

Metodun çalışması ile beraber normalde /WEB-INF/ dizini altındaki ulaşılması yasaklanan dosyalara ulaşılabilecektir. Bu örnekte ulaşılmak istenen dosya J2EE uygulamaları yapılandırma dosyası web.xml dir. Geliştirici Gözü Peki sorun neden kaynaklanmaktadır? Bunu anlamak için pagecontext.forward metodu incelenmelidir. /** * Return a RequestDispatcher instance that acts as a * wrapper for the resource at the given path. The path must begin * with a "/" and is interpreted as relative to the current context root. * * @param path The path to the desired resource. */ public RequestDispatcher getrequestdispatcher(string path) { // Validate the path argument if (!path.startswith("/")) throw new IllegalArgumentException (sm.getstring ("applicationcontext.requestdispatcher.iae", path)); path = normalize(path); // Retrieve the thread local URI MessageBytes urimb = (MessageBytes) localurimb.get(); if (urimb == null) { 2 Web Güvenlik Topluluğu www.webguvenligi.org

urimb = MessageBytes.newInstance(); CharChunk uricc = urimb.getcharchunk(); uricc.setlimit(-1); localurimb.set(urimb); } else { urimb.recycle(); } Metod üzerinde kırmızı olarak gösterilmiş normalize metodu path argümanı içerisindeki değeri sistem için anlaşılabilir hale getirecektir (yani..,., / gibi meta karakterleri anlamları ile düzeltecektir). Yani kötü amaçlı kullanıcı tarafından gönderilmiş ve yazılım tarafından aşağıdaki gibi oluşturulmuş argüman, /page2.jsp?somepar=someval&par=/../web-inf/web.xml normalize metodundan geçtikten sonra aşağıdaki gibi bir hal alacaktır. /WEB-INF/web.xml Bu da, WEB-INF dizin altındaki web.xml dosyasının okunmasına ve kullanıcıya dönmesine neden olacaktır; getrequestdispatcher metodundaki problem, alınan argümandan URL sorgu bölümü çıkarılmadan normalize metodunun çağrılmasıdır. Bu şekilde sorgu bölümünde değişiklik yapma hakkı bulunan kötü amaçlı kullanıcı sistem üzerinde yol belirleyebilmektedir. Kodun Tomcat in diğer versiyonlarında nasıl düzeltildiğine bakalım. /** * Standard implementation of ServletContext that represents * a web application's execution environment.an instance of this class is * associated with each instance of StandardContext. * * @author Craig R. McClanahan 3 Web Güvenlik Topluluğu www.webguvenligi.org

* @author Remy Maucherat * @version $Revision$ $Date$ */ public class ApplicationContext implements ServletContext { /** * Return a RequestDispatcher instance that acts as a * wrapper for the resource at the given path.the path must begin * with a "/" and is interpreted as relative to the current context root. * * @param path The path to the desired resource. */ public RequestDispatcher getrequestdispatcher(string path) { // Validate the path argument if (!path.startswith("/")) throw new IllegalArgumentException (sm.getstring ("applicationcontext.requestdispatcher.iae", path)); 4 Web Güvenlik Topluluğu www.webguvenligi.org

// Get query string String querystring = null; int pos = path.indexof('?'); if (pos >= 0) { querystring = path.substring(pos + 1); path = path.substring(0, pos); } path = normalize(path); Kırmızı ile gösterilen kod parçası normalize metodunu kullanmadan önce, argümandaki muhtemel sorgu bölümlerini çıkarmaktadır. Bu da kullanıcıların argümanda değişiklik yapmalarının önüne geçmektedir. Sonuç Ancak alınan bu güvenlik önlemi de %100 koruma sağlamaz. Aşağıdaki gibi yazılmış bir kod parçasını korumak sadece ve sadece geliştiriciye kalmış gözükmektedir. <% pagecontext.forward("/dir/page"+request.getparameter("lang") + ".jsp"); &> veya <% pagecontext.forward(request.getparameter("lang") + ".jsp"); %> 5 Web Güvenlik Topluluğu www.webguvenligi.org

Kullanılan frameworklerin ve API ların güvenli geliştirme süreçlerinden geçmiş olmaları gerekmektedir. Bu manuel, otomatik denetimlerle gerçekleştirilmelidir. Bunların yanında yazılım geliştiricilerin farkındalıkları da uç yazılımların güvenliğinde büyük önem taşımaktadır. 6 Web Güvenlik Topluluğu www.webguvenligi.org