İçeriğe geç

Flutter iOS – SSL Pinning Bypass

Giriş

Daha öncesinde flutter testi yaptığımı hatırlamıyorum. Yeni bir iş geldiğinde uygulamanın kaynak kodlarını jadx-gui ile incelediğimde uygulamanın flutter ile yazıldığını gördüm. Tabi ki bu kodları apk üzerinden inceledim ilk olarak. Buradan çıkarımla ios kodlarınında flutter ile geliştiridiğinin yorumunu yaptım. Android uygulamasında geliştirici ekip birkaç sorun olduğunu dile getirdi ben de bunun üzerine ios uygulaması üzerinden teste başlamaya karar verdim. Bu yazı içerisinde flutter uygulamasının SSL Pinning mekanizmasını nasıl bypass edebileceğimizi açıklamaya çalışacağım. İlk olarak ihtiyacımız olan varlıklara bakalım:

  • Jailbroke edlmiş bir iPhone
  • iPhone'a Cydia üzerinden frida server kurun
  • Bilgisayarınızda frida yüklü olsun
  • Burp Suite
  • Open VPN

Flutter Framewok

Normal şartlar altında kotlin ya da swift gibi native dillerle kod yazdığınızda siz özellikle belirtmedikçe uygulamalar cihazın root sertifikasını kullanırlar. Burp'ün sertifikasını root sertifika olarak belirlerseniz ve eğer SSL Pinning uygulamada yoksa direkt olarak bütün trafiği elde edebilirsiniz.

Flutter geliştiricileri bunu bir zafiyet olarak görmüş olacaklar ki cihazın root sertifikasını kullanmıyorlar. Buda demek oluyorki siz root sertifikayı değiştirseniz bile flutter uygulamaları için bir anlam ifade etmeyecektir. Bunun için ipa dosyasını elde edip içerisindeki flutter frameworkünü patchlememiz gerekcektir. Github üzerinden mevcut frameworkü indirip root sertifikasını kullanması gerektiğini söyleyip daha sonrasında build alarak mevcut ipa içerisindeki kütüphanelerle değiştirmemiz ve tekrardan paketlememiz gerekecek. Şakaydı 😀

Open VPN Kurulumu

Normalde elbette proxy ayarlarını değiştirerek istekleri elde edebiliriz. Ancak uygulamada proxy detection gibi bir önlem varsa bu işlem işe yaramayacaktır. Ayrıca VPN ile daha kesin bir şekilde yönlendirme yapılacaktır.

wget https://git.io/vpn -O openvpn-install.sh
sed -i "$(($(grep -ni "debian is too old" openvpn-install.sh | cut  -d : -f 1)+1))d" ./openvpn-install.sh
chmod +x openvpn-install.sh 
sudo ./openvpn-install.sh

Yukarıdaki komutları kali üzerinde çalıştırdığımızda çok hızlı bir şekilde vpn sunucusu kurabilirsiniz. sh dosyasını başlattıktan sonra aşağıdaki gibi bir konfigürasyon gerçekleştirebilirsiniz.

# Choose the following options:
Public IPv4 address / hostname [xx.xx.xx.xx]: 192.168.1.193     <<< Change with your public IP address.
Protocol [1]: 1         (UDP)
Port [1194]: 1194 
DNS server [1]: 3              (1.1.1.1)
Name [client]: kuday

Bu işlem sonucundan root klasörü altında profil oluşturulmuş olacaktır. VPN sunucusunu başlatabilirsiniz. Şimdi ise bu dosyayı telefonumuza yüklememiz gerekir. Marketten direkt olarak Openvpn uygulamasını telfona indirin ve profili çalıştırın.

MITM

Şimdi MITM yapalım. isteklerimiz kalimize yani vpn sunucumuza gelecek. Buraya gelen HTTP ve HTTPS isteklerini Burp Suite yönlendirmemiz gerekecektir. Aşağıdaki iptables komutları ile bu işlemi gerçekleştirebilirsiniz.

# For OpenVPN: -i tun0
sudo iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 443 -j REDIRECT --to-port 8080
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Not: Burp ekranında Invisible Proxy ayarını enable edin.

Frida

Lab ortamını kurduktan sonra BoringSSL kütüphanesini https://raw.githubusercontent.com/NVISOsecurity/disable-flutter-tls-verification/main/disable-flutter-tls.js adresindeki frida scripti ile patchleyip bypass edebiliriz.


Referans:

Kategori:FlutteriOSSSL

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir