MBFuzzer ile içeriklerin değiştirilmesi

20:22 Mehmet Kılıç 0 Comments

     MBFuzzer projesi geldiği aşamada HTTP/HTTPS proxy hizmetini sunmaktadır. Bunun yanı sıra mobil bir uygulama ile sunucu arasında gerçekleşen iletişimde sunucunun mobil uygulamaya gönderdiği cevapların içeriğinde hazırlanan yapılandırma dosyası kullanılarak RAW ve XML içeriklerde değişikler yapmakta ve sonrasında değişiklik yapılan bu içeriği uzunluğu gibi gerekli bilgilerinide düzenleyerek  mobil uygulama tarafına göndermektedir.

     Yapılandırma dosyası içerisinde belirlenen ve içeriklere uygulanacak şimdilik “searchreplace“(bul ve değiştir), “bigdata“(büyük veri yerleştir) yapıları bulunmaktadır. Mobil uygulamanın yaptığı istek  doğrultusunda sunucudan gelen içeriklerde değiştirmek istediğimiz herhangi bir veri bulunuyorsa, bunu yapılandırma dosyasında bulunan searchreplace yapısına,

    <searchreplace>
            <target>değiştirilmesi hedeflenen veri</target>
            <newdata>girilmek istenen yeni veri</newdata>
    </searchreplace>

gerekli olan bilgileri ekleyerek değiştirmek istenilen veri yapılandırma dosyasındaki yerini almaktadır. Bir diğer yapı bigdata ise aynı şekilde sunucu tarafından gönderilen ve mobil uygulama tarafında bir değişken içerisinde tutulacak bir verinin değiştirilerek beklenmeyecek şekilde büyük boyutlu bir değişken  yerleştirme işlemi  için,

    <bigdata>
        <name>hedeflenen değişken ismi</name>
        <data>yerleştirilmek istenen veri</data>
        <count>verinin kaç defa tekrar edeceği</count>  
    </bigdata>

yapısına uygun bilgilerin yapılandırma dosyasına yerleştirilmesi halinde hedeflenen değişkene büyük verinin göderilmesi sonraki adım için hazır hale gelmektedir.

     MBFuzzer projesi için yapılandırma dosyasında hazırlanan searchreplace ve bigdata yapılarının kullanımı MBContent sınıfının içerisinde bulunan load_actions fonksiyonu yardımı ile ilk olarak parse edilmekte ve kullanıma hazır hale getirilmektedir.
    
    # load_actions fonksiyonu yapılandırma dosyası ile çalışmaktadır
    def load_actions(config_file)       
        # yapılandırma dosyasında bulunan yapıların parse işlemi
        action = XmlSimple.new.xml_in(config_file, { 'ForceArray' => false })             

        # her yapı uygun hash yapısına aktarılmaktadır
        action.each do |a_name,a_attr|

            case a_name
                when "searchreplace" then @actions['searchreplace'] = a_attr
                when "bigdata" then @actions['bigdata'] = a_attr
            end
        end

    end

     MBProxy mobil uygulama ve sunucu arasındaki iletişimi üzerinden geçirirken şimdilik sadece HTTP cevaplarını MBContent katmanındaki analiz kısmana göndermekte ve oradaki içeriğin türüne göre ayrıştırılması yapılarak hazırlanan yapılar RAW için searchreplace ve XML içerikleri içinde bigdata işlemleri yapılmaktadır. Yaptığım bazı denemelerde yapılandırma dosyasına Name değişkenine sahip bigdata yapısı ekledim ve sanal mobil cihaza yüklediğim bazı uygulamarda sonucunu gözlemledim ve uygulamanın hazırladığım yapı nedeniyle uygulamanın çökmesi ile karşılaştım. Bunun ile beraber RAW data olarak da belirlediğim searchreplace yapısında belirlediğim verinin görünmesini de MBFuzzer sağlamış oldu.

     MBFuzzer projesinin son hali kullanabilmek için mobil sanal cihaz kurmalı ve proxy ayarları hazır şekild ebaşlatmasınız ki bunu önceki blog yazılarımda bulabilirsiniz. Sonrasında mevcut searchreplace ve bigdata yapısına uygun farkı veriler girerek MBFuzzer'ın test klasörü altında bulunan proxy_test dosyasının çalıştırılmasınından sonra mobil uygulamaların vereceği cevapları gözlemleyebilirsiniz. 







0 yorum:

MBContent Katmanı

18:22 Mehmet Kılıç 0 Comments

     MBProxy kütüphanesi sayesinde mobil uygulama ile sunucu arasında gerçekleşen HTTP/HTTPS istek ve cevaplarının yönledirmesini sağlanıyor. Bundan sonraki adımda ise bu istek ve cevapların analizinin yapıldıkdan sonra uygun fuzzing içeriklerinin bu istek ve cevaplara yerleştirilmesi işlemi vardır. Bu hedef uygun, içeriklerin analizini ve parse işlemini yapan MBContent kütüphanesi hazırladım.

     
     MBContent kütüphanesi başlangıç olarak gelen istek veya cevap içeriklerini XML yapısında kabul edip ki bu tür içeriği basit bir koşul ifadesi ile sağlanıyor.  XML türündeki içeriği analyse_content metodu ile alıp kendi içerisinde Content-Type içeriğin ne tür de olacağını belirtir, Content-Length gelen içeriğin uzunuluğunu verir, vb. türdeki değişkenler içerik hakkındaki temel özellikleri belirtmektedir. MBContent’in analyse_content() metodu ile bu özellikleri  içerik ile ilgili değişiklik yaptığımızda uzunluğu değişecek ve bozuk bir içerik olmaması sağlamak için    Content-Length’de düzenleme yapmak gerekecektir. Bu nedenle, analyse_content() metodu içerik özelliklerini parse ederek bir yapı içerisine yerleştirir.  İçeriğin temel özelliklerini belirten bu tür bilgilerden sonra “\n\n” gerçek içeriğin başladığını belirtmektedir.

# içerik içerisinde xml türünün olup olmadığına bakar
# xml olan içeriği analiz etmeye başlar
            if content =~ /Content-Type: text\/xml/
                  new_content = MBContent.new.analyse_content(content)
            end

     Şimdilik XML içeriklerini ele aldığım için doğrudan XML içeriğini parse eden ve bunu yaparken Ruby’nin XmlSimple kütüphanesini kullanan bir XMLParser kütüphanesi hazırladım. Bu kütüphanenin şu anda xml içeriği hash map’e ve hash map de bulunan içeriğide XML’e çeviren iki işlevi bulunmaktadır. Bu özelliklerin iyileştirmesi üzerinde çalışmaktayım.  

 # xml kütüphanesi işlevelerinin kullanımı
 hash_xml_content = XMLParser.new().parse(xml_content)
             xml_content = XMLParser.new().convert_from_hash(hash_xml_content)

     MBContent kütüphanesi son olarak analiz ettiği içeriği tekrardan birleştire görevi gören create_new_content() metoduna sahiptir. Bu metod ile mevcut içerik özellikleri tekrardan içerik yapısına uygun şekilde birleştirilir ve Content-Length’inde yeni XML içeriğinin uzunluğu belirlenerek düzenlenir. Tabi ki şu anda fuzzing işlemi yapılmadığı için XML içeriğinde bir değişme gözlenmemektedir.
   

0 yorum:

Mobil Uygulamalar ve MBProxy

21:07 Mehmet Kılıç 0 Comments

Mobil uygulamaların güvenilirliğini test etmek için sunucu ve uygulama arasındaki iletişimin takip edilmesi ve sunucudan dönen cevaplarda değişiklikler yaparak  uygulama tarafına gönderilmesi gerekmektedir. Bu amaca hizmet etmesi için geliştirilen MBProxy kütüphanesinin  android cihazı ile konfigürasyonunu gerçekleştirerek sunucu ve uygulamalar arasındaki iletişim izlenebilir.


Öncelikle sanal bir android cihazının kurulması gerekmektedir. Bu kurulumun detaylarını Google’ın geliştiriceler için hazırladığı kaynakları kullanabilir.  Oluşturulan sanal android cihazı proxy ayarları için iki yöntem kullanabilirsiniz;
    • Terminal kullanarak , Android SDK içerisinde bulunan platform-tools dizini altında
    emulator -avd [ sanal_cihaz_adı ] -http-proxy [ proxy_adresi : port ]
komutu ile sanal cihazı proxy ayarları yapılı bir şekilde başlatabilirsiniz ya da

    • Sanal cihaz ekranı ile manuel olarak
    Ayarlar → Diğer ayarlar → Mobil Ağlar → Erişim Noktası Adları → Operatör Adı →
        Proxy : [proxy_adresi]
        Bağlantı noktası : [port]
parametrelerini girerek oluşturabiliriz.


    Sanal android cihazı için proxy ayarlarını yaptıktan sonra aynı proxy adresi ve port numaras ile  MBFuzzer projesinin sahip olduğu MBProxy kütüphanesini çalıştırıp mobil uygulama ve sunucu arasındaki iletişimi proxy üzerinden gerçekleşmesini sağlayabilirsiniz.
    #proxy’nin çalışması için     #proxy’i durdurmak için Ctrl+C
    MBProxy.new(proxyt_adresi,port)    



0 yorum: