php

RIPSTech Ile PHP Bug Hunting Serüveni – 1

RIPS özellikle güvenlik araştırmacıları tarafından bilinen popüler bir araç. Month of PHP Security altında 2010 yılından ilk defa yayınlanan RIPS, uzun bir süre açık kaynak kod olarak devam etti. En son version 0.55 olarak açık kaynak kodlu versiyonu yayınlandı. Şu anda ise https://www.ripstech.com/ adresinden, ücretli bir ürün olarak, “bir çok” yeni özellikle harekete geçti.

Uzun süredir geliştirilmesine devam edilen bu araç, aslında temel bir ihtiyaçtan birazda hobi olarak başlayan bir serüvenden geçerek bu noktaya vardı. Temelde 15 farklı tipte zafiyeti kaynak kod üzerinde Token-based adı verilen bir yaklaşım ile tespit etmekteydi. En temel problemlerinden birisi OOP desteği olmayan bu versiyon, temel anlamda fonksiyon bazlı kontrollerden öteye geçmemekteydi. Bu haliyle bilde oldukça iş gördüğüne inandığım bu araç RIPS Technology ile yeni versiyona kavuştu. Yeni versiyonun özelliklerini yakından analiz edelim.

30+ Zafiyet Tipi Desteği

Özellikle Object Oriented Programming yani sınıf bazlı php kodlarınında üzerinde zafiyet analizi gerçekleştirme özelliği olan bu araç hemen hemen tüm “teknik zafiyetleri” tespit etme özelliğinde.

Cross-Site Scripting File System Manipulation Path Traversal
Code Execution File Write PHP Object Injection/Instantiation
Command Execution HTTP Response Splitting Reflection/Autoload Injection
CVE Information Leakage Resource Injection
Denial of Service Library Injection Server-Side JavaScript Injection
Directory Listing LDAP Injection Server-Side Request Forgery
Environment Manipulation Log Forgery Session Fixation
Execution After Redirect Mass Assignment SQL Injection
File Create Memcached Injection Variable Manipulation
File Delete MongoDB Injection Weak Cryptography
File Inclusion NoSQL Injection XML/XXE Injection
File Upload Open Redirect Xpath, Xquery Injection

900’den fazla Built-in Özellike Simülasyonu

PHP dünyasında aslında kullanımı doğrudan zararlı olan bir fonksiyon/yapı yoktur. Zafiyetin oluşması için her zaman belirli şartların gelişmesi gerekir. Aşağıdaki örneklere baktığımızda bu durum çok daha net bir şekilde anlaşılabilir.

ripscontext

Örneğin; urldecode() fonksiyonuna parametre olarak kullanıcısı girdisi gelmektedir. Fonksiyonun sonucu ise echo ile ekrana yazdırılmaktadır. Temel anlamda bir XSS zafiyetinin oluşması adına gerek ama yeterli olmayan şartlar bulunmaktadır. Çünkü (int)$_GET[‘id’] işlemi ile yapılan type-casting tüm string değeri integer’a dönüştürmeye zorlar. Bu nedenle aslında XSS zafiyeti yoktur. Bu tür PHP’nin built-in özelliklerine sahip bir kaynak kod analizi aracı son derece önemlidir.

40+ HTML Context Analizi

Özellikle XSS zafiyeti ile ilgili olan HTML Context, kullanıcı parametresinin kullanıldığı HTML yapısının analizi gerektirmektedir. Bu konuda farklı bir framework ve dili ele aldığım şu yazı detay bilgi isteyenler tarafından okunabilir.

ripscontext
Control Flow Analizi

Kaynak kod analizi süreçlerinin insan için en kolay, bilgisayarlar için ciddi derece zor olan kısımlarından bir tanesidir. İş akışlarının analizi yapılmalıdır. Örnek vermek gerekirse;

ripsfeatures
Görüldüğü üzere if-elseif olarak devam eden kontrol yapılarında, her kırılım farklı bir work-flow’u gerektirir. Örneğin ilk kontrol noktasında eğer kullanıcı parametresi 1 ise değer ekran yazılacaktır. Kullanıcıdan alınan değerin kontrolü yapıldığı için, daha sonrası bu değer üzerinden yapılacak tüm işlemler zafiyet gibi gözüküyor olsada, aslında değildir. Aynı şekilde ikinci ve üçüncü if kurallarına baktığınızda son istasyonda zafiyetin olduğu görülmektedir.

Second-Order Zafiyetleri

Tespiti son derece zahmetli olabilen bir zafiyet oluşum yoludur. Temelde olay akışı şu şekilde işler, kullanıcı uyguluma tarafından sunulan özeller aracılığı ile veri tabanı/session/file vb. sistemlerden bir değer kayıt eder. Bu değer daha sonra farklı bir modül veya tamamiyle farklı bir uygulama tarafında kullanılır.

ripssecondorder
Yukarıda teorik olarak bahsettiğim duruma en güzel örnek olarak Stored-XSS zafiyeti verilebilir.

Mevcut Başarılar

Geçtiğimiz günlerde phpMyAdmin uygulamasına NCCGroup tarafından kaynak kod analizi çalışması gerçekleştirilmişti. NCC Group tarafından herhangi bir kritik zafiyetin tespitinin olmayışı, güvenlik araştırmacılarının dikkatini çekmiş olsak gerek. phpMyAdmin tarafından yayınlanan blog yazısından sonra Cure53 isimli güvenlik firması -ki kendisini yakından tanırız :-) – RIPS aracını kullanarak bir adet Remote Code Execution zafiyeti tespit etti ( https://www.phpmyadmin.net/security/PMASA-2016-27/ )

Zafiyetin tespiti ve RIPS’in code flow takibi arayüzünü görmek için aşağıdaki linki ziyaret edebilirsiniz.

https://demo.ripstech.com/project/5/14/22/

Devam…

RIPS şu anda ciddi bir gelişim süreci göstermekte. Bir sonraki yazıda RIPS’in yeni versiyonu ile yaptığım kaynak kod analizi çalışmalarını, performans ölçeklerini ve umuyorum ki bulacağım 0day zafiyetler ile ilgili olacak.