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.
Ö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.
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;
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.
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.