Analisis lalu lintas jaringan aplikasi seluler di iOS. Bagian 1 - proksi


Ada situasi ketika, ketika mengembangkan atau menguji aplikasi seluler, menjadi perlu untuk melihat lalu lintas jaringan aplikasi. Masih melihat lalu lintas aplikasi seluler dengan menampilkannya di konsol IDE Anda? Ada alat yang lebih efektif untuk tugas ini, misalnya, proksi. Pada artikel ini, kami akan menganalisis proksi HTTP (S) yang paling populer, mempelajari cara menggunakannya dalam pengembangan iOS, dan membandingkannya sesuai dengan berbagai kriteria.


Lebih lanjut kita akan berbicara tentang penggunaan proksi dalam pengembangan iOS, tetapi banyak hal juga berlaku dalam pengembangan Android.


Perhatian, di bawah banyak gambar yang dipotong.


Alat untuk menganalisis lalu lintas jaringan aplikasi seluler dapat dibagi menjadi:


  1. Tidak memerlukan integrasi ke dalam kode sumber aplikasi yang sedang diuji - proxy:
  2. Memerlukan integrasi ke dalam kode sumber aplikasi yang sedang diuji. Ini termasuk kerangka kerja debugging:

Ini adalah bagian pertama dari artikel di mana kami akan mempertimbangkan penggunaan proksi dan membandingkannya sesuai dengan berbagai kriteria. Di bagian kedua artikel, kita akan membahas kerangka kerja untuk debugging.


Mitmproxy



Mitmproxy adalah sumber bebas dan open source (~ 12.000 bintang di github) HTTP (S) -proxy, yang terdiri dari Mitmproxy sendiri, utilitas konsol untuk proxy lalu lintas, mitmdump, utilitas konsol tambahan yang menyajikan fungsionalitas yang mirip dengan tcpdump, tetapi untuk HTTP (S) lalu lintas, serta mitmweb, antarmuka web untuk Mitmproxy.


Anda dapat menginstal Mitmproxy menggunakan Homebrew:


brew install mitmproxy


Atau unduh versi yang diinginkan dari halaman rilis dari situs web resmi.


Setelah instalasi berhasil, untuk menganalisis lalu lintas HTTP dari simulator atau perangkat, Anda perlu menentukan proxy di pengaturan jaringan.


Untuk simulator, Anda perlu mengaktifkan proksi HTTP dan HTTPS di pengaturan jaringan Mac OS (Preferensi sistem -> Jaringan -> Lanjutan -> Proxy):



Skrip bash kecil untuk aktivasi / penonaktifan cepat proxy dalam pengaturan jaringan untuk Wi-Fi di Mac. (Setelah kami mendaftarkan IP dan port proxy di pengaturan dan kemudian menggunakan proxy on atau proxy off perintah proxy off dari konsol).


Untuk mencegat lalu lintas dari perangkat nyata, Anda perlu menentukan proxy di pengaturan jaringan iOS, sedangkan alamat IP komputer yang menjalankan Mitmproxy diatur sebagai alamat IP proxy, dan port 8080. (Alamat IP komputer dapat dilihat di Pengaturan> Jaringan)



Pada tahap ini, kita sudah dapat mencegat lalu lintas HTTP, tetapi untuk mencegat lalu lintas HTTPS, Anda harus menginstal sertifikat Mitmproxy pada simulator / perangkat.
Untuk melakukan ini, pada simulator, lakukan hal berikut (untuk perangkat nyata, langkah-langkahnya serupa):


  • Pastikan Mitmproxy berjalan dan proxy diaktifkan dan terdaftar dalam pengaturan jaringan (untuk simulator - pengaturan macOS, untuk perangkat - pengaturan iOS), seperti dijelaskan di atas. Sekarang pergi ke browser di mitm.it dan klik ikon Apple untuk mengunduh sertifikat Mitmproxy. Lansiran akan muncul dengan pesan bahwa situs web ini mencoba membuka pengaturan iOS: klik Izinkan.


  • Kemudian instal sertifikat Mitmproxy.


  • Dan sentuhan terakhir - untuk iOS versi 10.3 dan lebih tinggi, Anda harus mengaktifkan akses penuh ke sertifikat root Mitmproxy. Untuk melakukan ini, buka Pengaturan> Umum> Tentang> Pengaturan Kepercayaan Sertifikat dan aktifkan akses penuh untuk sertifikat Mitmproxy.


Sekarang kita dapat menganalisis lalu lintas HTTPS dari simulator. Tetap menambahkan klarifikasi kecil: sertifikat dipasang untuk simulator tertentu, yaitu, jika kita melakukannya hanya untuk simulator iPhone X, maka pada simulator iPhone 8 kita perlu melakukan hal yang sama sehingga proxy memotong lalu lintas HTTPS. Untuk mencegat lalu lintas HTTPS dari perangkat nyata, semua langkahnya serupa, yang utama adalah bahwa itu terhubung ke jaringan lokal yang sama dengan komputer dengan Mitmproxy.


Setelah itu, Anda dapat menjalankan mitmproxy dari konsol dan merasa seperti seorang hacker atau klien web mitmweb.


Klien konsol bertemu kami dengan antarmuka tabung (untuk pecinta GUI bahkan ada dukungan mouse), di mana semua permintaan dicegat ditampilkan.



Anda dapat melihat informasi terperinci untuk setiap permintaan (parameter permintaan, tajuk, respons, dll.)



Mitmproxy memiliki sistem penyaringan query yang kuat dengan dukungan untuk ekspresi reguler. Anda dapat memfilter permintaan berdasarkan kode, badan permintaan / respons, tajuk, domain, dll. Panggil bantuan pada pintasan yang tersedia dan filter ekspresi dengan mengklik ? . Misalnya, untuk menghapus daftar kueri untuk sesi saat ini, Anda cukup menekan z , dan untuk memfilter daftar kueri dengan URL di mana ada kata "apel" yang Anda perlu tekan f dan tulis ekspresi filter dengan URL ~u apple , yang mengambil ekspresi reguler.



Penggemar Vim juga akan senang dengan dukungan hjkl. Kami hampir lupa tentang q cara pintas yang sangat penting - ini berfungsi seperti tombol "kembali" ketika bergerak di antara layar, dan di layar utama dengan daftar pertanyaan ketika Anda mengklik pintasan ini, Mitmproxy akan menawarkan untuk keluar dari program.
Meskipun antarmuka konsol, menggunakan Mitmproxy adalah kesenangan berkat cara pintas yang nyaman dan kontrol intuitif yang sederhana. Di bawah ini adalah meja kecil dengan pintasan utama.


Jalan pintasDeskripsi
?Bantuan
zHapus daftar sesi saat ini
fPenyaringan Sesi
qKembali (keluar di layar utama)
dHapus permintaan dari daftar sesi
rUlangi permintaan
eSimpan permintaan ke file
gDaftar Sesi Teratas
GDi akhir daftar sesi

Jika Anda masih merupakan lawan yang gigih dari konsol dan hanya mengenali aplikasi GUI, maka mitmweb sedang terburu-buru untuk membantu kami, kami akan meluncurkannya untuk sementara waktu juga dari konsol, kemudian kita dapat membuat jalan pintas ke desktop.



Klien web masih dalam pengujian beta dan hanya berisi fungsionalitas mitmproxy dasar (cukup untuk 95% tugas), yang secara bertahap dilengkapi dengan fitur-fitur baru pada setiap rilis baru, tetapi meskipun demikian, sekarang dapat digunakan dan sangat nyaman. Beberapa pintasan dari versi konsol juga berfungsi di sini, misalnya, untuk menghapus daftar permintaan untuk sesi saat ini, cukup tekan z . Anda juga dapat memfilter permintaan yang dicegat melalui bidang "Cari", seperti yang kami lakukan di aplikasi konsol saat kami menerapkan filter ~u apple .



Mitmproxy mengklaim dukungan untuk standar Websocket, tetapi sayangnya tampilan frame Websocket di UI belum diimplementasikan dan, menurut pengembang, fungsionalitas Websocket hanya tersedia untuk utilitas mitmdump.


Charles



Charles mungkin merupakan proxy HTTP (S) paling populer untuk MacOS, satu-satunya kekurangannya adalah bahwa ia dibayar, pada saat penulisan, lisensi harganya $ 50. Namun, ada versi uji coba - ini berfungsi selama 30 menit, maka aplikasi harus di-restart, dan seluruh riwayat kueri hilang. Ada juga penundaan startup lima detik.


Setelah instalasi dan mulai pertama, Charles akan meminta Anda untuk memberikan akses untuk secara otomatis mengkonfigurasi proxy sistem, pilih "Berikan privelegies", atau ubah pengaturan proxy sistem setiap kali secara manual. Dengan demikian, Charles akan mengubah dan mengaktifkan sendiri pengaturan proxy sistem ketika sedang berjalan - ini nyaman ketika debugging pada simulator, tetapi pada perangkat nyata Anda harus secara manual mengatur pengaturan server proxy untuk jaringan, karena server proxy menentukan alamat IP dari komputer yang menjalankan Charles, sebagai port - 8888.


Pada tahap ini, kita hanya dapat melihat lalu lintas HTTP, untuk menganalisis lalu lintas HTTPS dari simulator atau perangkat nyata, kita perlu menginstal sertifikat Charles di atasnya, prosedurnya mirip dengan memasang sertifikat Mitmproxy. Pastikan proxy berjalan dan diaktifkan di pengaturan jaringan iOS (untuk perangkat nyata) atau dalam pengaturan jaringan macOS (untuk simulator). Kemudian kita akan pergi ke simulator / perangkat di browser di chls.pro/ssl , peringatan akan muncul dengan pesan bahwa situs web ini mencoba membuka pengaturan iOS: pilih Allow. Selanjutnya, pilih Instal untuk menginstal sertifikat. Setelah menginstal sertifikat untuk iOS versi 10.3 dan lebih tinggi, Anda harus mengaktifkan akses penuh ke sertifikat root Charles. Untuk melakukan ini, buka Pengaturan> Umum> Tentang> Pengaturan Kepercayaan Sertifikat dan aktifkan akses penuh untuk sertifikat Charles.



Terakhir, Anda perlu mengkonfigurasi proxy proxy di Charles, secara default tidak mendekripsi lalu lintas HTTPS, bahkan jika Anda telah menginstal semua sertifikat yang diperlukan. Untuk mengaktifkan proxy SSL, buka Proxy> SSL Proxying Setings dan aktifkan SSL Proxying, jika dinonaktifkan, maka kami memiliki dua opsi - mengaktifkan proxy proxy untuk semua domain atau hanya untuk yang spesifik. Untuk mengaktifkan proxy SSL untuk semua domain, Anda perlu menambahkan lokasi wildcard: klik tombol Tambah dan tentukan * di semua bidang, sehingga pengaturan SSL akan terlihat seperti ini.



Untuk mengaktifkan proksi SSl hanya untuk domain tertentu, Anda perlu menambahkannya ke daftar dan memastikan bahwa lokasi wildcard dinonaktifkan. Dalam hal ini, Charles masih akan mencegat semua lalu lintas, tetapi permintaan HTTPS untuk domain yang tidak ada dalam daftar tidak akan didekripsi.


Saat menggunakan Charles, akan lebih mudah untuk menggunakan filter intersepsi lalu lintas, yang dapat dikonfigurasikan di menu Proxy> Recording Settings: Anda dapat menentukan protokol, URL, port.



Sekarang kami memiliki kemampuan untuk melihat lalu lintas HTTPS.



Charles juga mendukung protokol Websocket dan menampilkan pesan dengan gaya iMessage, itu terlihat nyaman.



Proksi jenis pertama dari Charles untuk iOS pantas disebutkan secara khusus - versi mobile dari Charles, label harga di App Store pada saat penulisan adalah $ 9. Aplikasi ini berisi fungsionalitas dasar dari versi desktop: proxy lalu lintas HTTP (S), melihat konten permintaan / tanggapan dan pengaturan otomatis nyaman pengaturan proxy untuk jaringan Wi-Fi.



Burp Suite (Edisi Komunitas)



Burp Suite adalah pisau pentester dan peretas Swiss, berisi sejumlah alat dan fungsi yang tidak senonoh. Salah satu modul di Burp Suite adalah proxy, yang akan kita gunakan untuk menganalisis lalu lintas HTTP (S). Ada dua versi aplikasi: Edisi Profesional dan Komunitas. Versi komunitas gratis, tidak memiliki pemindai kerentanan dan ada batasan jumlah permintaan per unit waktu, tetapi meskipun demikian, versi gratis aplikasi adalah alat pengujian yang lengkap.


Setelah memulai aplikasi, Anda perlu menambah dan mengaktifkan proxy dengan masuk ke Proxy> Opsi.



Kemudian Anda perlu memastikan bahwa interseptor permintaan Intercept dimatikan, jika tidak maka akan mencegat permintaan dan menahan mereka sampai Anda mengatakan kepadanya apa yang harus dilakukan dengan permintaan ini - batalkan atau teruskan ke server. Karena itu, matikan, sekarang kita tidak membutuhkannya.



Selanjutnya, Anda perlu menginstal sertifikat Burp Suite pada simulator / perangkat, prosedur ini seharusnya sudah akrab bagi kita setelah menginstal sertifikat Mitmproxy dan Charles. Kami meluncurkan Burp Suite, dan jangan lupa untuk mengaktifkan proksi di pengaturan jaringan MacOS untuk simulator atau di iOS untuk perangkat asli (lihat bagian Mitmproxy bagaimana melakukannya), tentukan alamat IP komputer yang menjalankan Burp Suite sebagai server proxy, sebagai port - 8080. Kemudian kita pergi ke browser pada simulator dan masukkan alamat http: // sendawa . Selanjutnya, klik tombol di situs "CA Certificate" dan unduh sertifikat.



Kemudian instal sertifikat. Setelah menginstal sertifikat untuk iOS versi 10.3 dan lebih tinggi, Anda harus mengaktifkan akses penuh ke sertifikat root Burp Suite. Untuk melakukan ini, buka Pengaturan> Umum> Tentang> Pengaturan Kepercayaan Sertifikat dan aktifkan akses penuh untuk sertifikat Burp Suite.



Dengan membuka Proxy -> tab HTTP history, Anda dapat melihat lalu lintas HTTP (S) dari aplikasi seluler. Perlu dicatat bahwa downside di sini adalah kurangnya format JSON di tubuh permintaan / respons.



Masalah dengan pemformatan JSON dapat diselesaikan dengan menginstal plugin JSON Beautifier . Untuk menginstal, buka tab Extender> BApp Store, temukan JSON Beautifier dalam daftar plugins dan klik install.



Sekarang ada tab JSON Beautifier tambahan dengan JSON yang indah.



Burp Suite mendukung protokol Websocket. Pesan websocket dapat ditemukan di tab khusus Proxy> WebSockets history.



OWASP ZAP



Owasp ZAP adalah gagasan dari komunitas keamanan siber dunia yang terkenal di dunia, di samping itu, proksi adalah open source. Owasp ZAP sering dibandingkan dengan Burp Suite, tetapi yang terakhir lebih rendah popularitasnya. Owasp ZAP sepenuhnya gratis, tidak ada versi PRO dibandingkan dengan Burp Suite.


Setelah memulai aplikasi, Anda perlu memeriksa pengaturan proxy Preferensi> Proxy Lokal, pengaturan default akan terlihat seperti ini.



Lalu pergi ke Preferensi> Sertifikat SSL Dinamis untuk mengekspor sertifikat SSL. Klik tombol Simpan dan simpan sertifikat, misalnya, ke desktop.



Selanjutnya, cukup seret file sertifikat ke dalam simulator dan sebuah jendela membuka penawaran untuk menginstal sertifikat, kami setuju dan menginstal. Setelah menginstal sertifikat untuk iOS versi 10.3 dan lebih tinggi, Anda harus mengaktifkan akses penuh ke sertifikat root OWASP ZAP. Untuk melakukan ini, buka Pengaturan> Umum> Tentang> Pengaturan Kepercayaan Sertifikat dan aktifkan akses penuh untuk sertifikat ZAP OWASP.



Sekarang kami memiliki kemampuan untuk melihat lalu lintas HTTPS. JSON, sayangnya, tidak memiliki pemformatan yang indah di sini dan sejauh ini kami belum dapat memperbaiki situasi ini, dalam kasus yang ekstrem, Anda dapat menggunakan pemformat JSON pihak ketiga, misalnya yang ini .



OWASP ZAP mendukung protokol Websocket. Pesan websocket dapat ditemukan di tab WebSockets khusus, juga nyaman untuk memilih "saluran" untuk memfilter menurut domain.



Pinning SSL


Jika Pinning SSL diterapkan di aplikasi Anda, maka Anda tidak akan melihat lalu lintas aplikasi yang diproksi, karena proksi menggunakan sertifikatnya sendiri untuk SSL, dalam hal ini ada 4 opsi:


  1. Nonaktifkan Pinning SSL sementara saat debugging permintaan jaringan menggunakan proxy.
  2. Tambahkan sertifikat proxy / kunci publik ke sertifikat / kunci yang di-debug untuk build debug.
  3. Gunakan sertifikat server Anda untuk proksi alih-alih sertifikatnya sendiri yang dihasilkan olehnya.
  4. Alih-alih menggunakan proxy eksternal, gunakan kerangka kerja debugging (daftar kerangka kerja ditunjukkan di bagian paling awal artikel), yang akan mencegat dan menampilkan permintaan dan jawaban langsung dalam aplikasi itu sendiri, tetapi ini membutuhkan integrasi ke dalam kode sumber aplikasi yang ada, lebih lanjut tentang alat-alat ini di artikel berikutnya.

Ringkasan


Mari kita mulai dengan Charles. Mungkin proksi terbaik bagi mereka yang ingin semuanya berjalan baik dan seramah mungkin, walaupun Charles mungkin mengejutkan pengguna di beberapa titik, fungsi proxy sangat luas, ia juga memiliki antarmuka asli dan paling asli untuk macOS dari semua yang dijelaskan dalam artikel proksi. Jika Anda tidak keberatan mengeluarkan $ 50 untuk instrumen seperti itu, maka ini adalah pilihan Anda.


Mari kita beralih ke Burp Suite. Alat yang paling kuat, sesuai dengan fungsi tertentu dan bahkan kemudahan penggunaan, dalam beberapa kasus dengan mudah memberikan peluang Charles, di samping itu ada sistem untuk memperluas fungsionalitas dalam bentuk plug-in. Burp Suite telah lama memantapkan dirinya sebagai alat yang sangat andal dan akurat di tangan kanan. Jika Anda tidak memiliki fungsionalitas proxy Anda saat ini, maka saya menyarankan Anda untuk memperhatikan contoh ini.


Sekarang giliran Mitmproxy - proxy muda dan menjanjikan, yang secara aktif mendapatkan popularitas, yang sedang dikembangkan oleh komunitas Open Source. Proksi yang paling kontroversial yang kami lihat, tetapi pada saat yang sama tidak kalah menarik. Mitmproxy menonjol dari para pesaingnya dengan UI konsol yang sangat nyaman, sederhana dan fungsional. Dimungkinkan juga untuk menggunakan antarmuka web Mitmweb, tetapi sekarang dalam pengujian beta, itulah sebabnya jarang terjadi, tetapi bug muncul, tidak ada bagian dari fungsionalitas Mitmproxy canggih (sedang diselesaikan secara bertahap), dan juga sedikit lebih rendah dalam kenyamanan dibandingkan dengan lebih banyak pesaing asli. Dukungan untuk protokol Websocket juga mengecewakan, tetapi tidak ada tampilan di UI atau kami hanya tidak belajar bagaimana mempersiapkannya, karena kami tidak dapat meminta Mitmproxy untuk menampilkan pesan Websocket, meskipun kami tidak memiliki masalah dengan proxy lainnya.


Dan yang terakhir dalam daftar, tapi yang tidak kalah menarik adalah Owasp ZAP. Selain itu, ada sistem plug-in yang dapat diperluas (secara subyektif, jumlahnya kurang dari untuk Burp Suite), tetapi sayangnya kami tidak dapat mengonfigurasi tampilan JSON yang indah di badan permintaan / respons, yang merupakan kriteria yang agak kritis ketika memilih proxy untuk pengembangan seluler. Namun, Owasp ZAP memiliki sistem canggih untuk menguji lalu lintas Websocket, serta nama besar pengembang komunitas Owasp di belakang saya, jadi saya tidak akan mengabaikannya dan mengingat kasus-kasus yang jarang dan kompleks.


Di bawah ini adalah tabel ringkasan subyektif dari proksi yang kami analisis.


kriteria / proxyMitmproxyCharlesBurpsuite (CE)Owasp zap
Pemformatan JSON+++-
Mengedit dan Mengulangi Pertanyaan++++
Dukungan Websocket-+++
Perangkat lunak bebas+-++

Kami akan mengakhiri di sini, kami berharap artikel ini akan bermanfaat, kami juga akan dengan senang hati berkomentar dan jika Anda berbagi pengalaman Anda di bidang pengujian dan pemantauan lalu lintas aplikasi seluler.

Source: https://habr.com/ru/post/id421493/


All Articles