CryptoPost ile HTTP POST Parametelerini RSA ile Şifrelemek

Merhaba

Web Uygulamalarına gelen saldırılar, HTTP talepleri ile gönderilen parametelerin değiştirilmesine dayanmaktadır. Örnek olarak aşağıdaki ekran görüntüsü analiz edildiğinde, gönderilen HTTP parametrelerinin isimleri ve değerleri From Data sekmesinde gözükmektedir. Bu değerler, Burp Suite gibi proxy yazılımlar ile durdurulup, değiştirilerek web uygulamasına saldırılar gerçekleştirilir.

http plain-text

 

CryptoPost Nedir ?

CryptoPost ben ve @abilgegunduz tarafından geliştirilmekte olan jquery temelli bir kütüphanedir. Kaynak kodlara https://github.com/mmetince/crypto_post adresinden erişilebilir.

CryptoPost, html sayfalarında bulunan form’ların submit butonuna basıldığında aktif hale gelerek o anda gönderilen HTTP talebinin POST parametelerini alır, RSA ile şifreler ve tüm clear-text değişkenleri silerek, yerlerine şifreli string’i yazar. Bu şekilde saldırganlar, hedef uygulama için üretilen POST taleplerinin içeriğini, parametreleri ve parametrelerin değerlerini görememektedirler.

Kullanımı

CryptoPost’un temelinde public ve private key bulunmaktadır. Kullanıcıya public key gönderilir. Tüm verileri bu key ile şifrelenmektedir. Sunucu tarafındaki uygulama ise gelen bu talepleri, sunucu tarafından saklı tutulan private key ile çözer. Bu sayede tüm parameteler saldırganlardan gizlenmiş olur.

Demo

CryptoPost’u kullanan basit bir PHP implementasyonu aşağıdadır. Aynı mantığı kullanarak kendi uygulamalarınıza entegre edebilirsiniz.

Client’a gönderilen view dosyası aşağıdadır. RSA Key’ler oluşturularak kullanıcının oturum bilgilerinde saklanır. Ardından sadece public key javascript değişkeni olarak kullanıcıya sunulur.

jquery.cryptopost.js dosyasında ise aşağıdaki kodlar bulunmaktadır. Görüldüğü üzere tüm form’lara on metodu ile hook atılmıştır. Bu hook üzerinden gönderilen anlık HTTP talebine müdahile edilerek parametreler şifrelenmiştir.

GÖnderilen HTTP talebine tekrar bakıldığında aşağıdaki şekilde şifrelenmiş olacaktır.

cryptopost

Sunucu tarafında çalışan server.php uygulaması aşağıdadır. SESSION’da saklanan ve kullanıcılar ile paylaşılmayan private_key ile gelen talep çözümlenmektedir. Ekrana gönderilen HTTP Talebinin body kısmı ve çözümlenilince elde edilen string yazdırılmaktadır.

İleriki Adımlar

İlk fırsatta popüler frameworkler için -tabikide ASP.NET hariç!- destek verebilmeyi planlamaktayız. Bu noktada github üzerinden fork’lara ve yeni fikirlere açığız.

 

  • Önay Metin Kıvılcım

    Benim gibi SSL sertifikalarına para veremeyen(malesef) kişiler için oldukça güzel bir araç. Elinize sağlık.

  • Mehmet

    Güzel bir uygulama.Elinize sağlık.