Selamat datang! Repositori ini adalah bagian dari serangkaian posting blog ini tentang teknik keamanan API praktis. Serial ini memandu Anda melalui proses mempertahankan backend API seluler terhadap berbagai eksploitasi yang dapat digunakan penyerang untuk mendapatkan akses ke data yang dipegangnya. Dalam skenario demonstrasi ini, serangan ini memungkinkan pengguna nyata sistem untuk mendapatkan keuntungan bisnis yang tidak adil dengan mengorbankan perusahaan.
Repositori ini memiliki ketiga komponen yang digunakan untuk menggambarkan kisah Shipfast:
Kami telah menyimpan semua 3 proyek dalam repositori yang sama dan menyusun kode untuk memasukkan semua langkah dari progresi seri blog. Kami berharap ini membuatnya lebih mudah dipahami secara keseluruhan.
Setelah mengatur adegan di posting blog pertama, entri berturut -turut menunjukkan bagaimana langkah -langkah keamanan dapat diperkuat (atau dilewati) menggunakan tautan ke kode dalam repositori GitHub ini jika perlu. Seri blog dapat diringkas dengan merujuk pada metode keamanan utama yang sedang dibahas di masing -masing:
Kami menyediakan penyebaran dua layanan dan apks yang tersedia secara bebas untuk Anda unduh dan instal, sehingga Anda dapat bekerja dengannya saat Anda membaca blog. Bagian berikut memberikan ringkasan singkat dari layanan yang telah kami gunakan, aplikasi yang kami sediakan, di mana menemukan kode terkait dalam repositori ini, dan di mana perubahan untuk setiap posting blog berada.
Kode API Shipfast dapat ditemukan di folder Server/Shipfast-API. Kode ini digunakan di cloud dan tersedia di https://shipfast.demo.approov.io.
API Shipfast diversi dari v1 ke v4 untuk mengikuti cerita blog dan Anda dapat mengakses setiap tahap menggunakan URL berikut:
Halaman rilis repositori ini berisi APK untuk setiap tahap. Mereka diatur sehingga Anda dapat menginstal semuanya sekaligus di perangkat Android Anda (maaf tidak ada iOS saat ini).
Kode untuk aplikasi semuanya ada dalam satu proyek Androidstudio: App/Android/Kotlin/Shipfast.
Kami telah menggunakan skema warna yang berbeda di setiap versi aplikasi sehingga Anda dapat dengan cepat mengidentifikasi mana yang sedang berjalan:
Warnanya tidak memiliki makna khusus, tetapi jelas, hijau adalah yang terbaik.
Layanan Web Rogue, Shipraider, diatur oleh bajak laut jahat untuk membantu pengemudi kapal memanfaatkan persenan pelanggan Shipfast. Kode ini dapat ditemukan di folder server/shipraider-rogue-web.
Setiap versi situs web disajikan dari domain yang berbeda:
Situs web Shipraider mengikuti skema warna yang sama dengan aplikasi seluler untuk membedakan antara versi.
Di bawah ini kami memberikan gambaran singkat tentang teknik yang digunakan dalam seri blog untuk mengunci API dengan tautan ke baris kode yang relevan dan posting blog terkait.
Metode yang paling umum digunakan oleh pengembang untuk mengidentifikasi apa yang membuat permintaan ke server API adalah menggunakan string panjang di header permintaan, paling sering disebut Api-Key , lihat posting blog pertama.
Kunci API sangat mudah diimplementasikan di server dan klien. Kode aplikasi ini menambahkan kunci ke setiap permintaan dan server memvalidasi permintaan dengan pemeriksaan header sederhana, seperti yang ditunjukkan oleh kode ini.
Sayangnya, melewati perlindungan kunci API juga mudah, karena itu adalah rahasia yang dikomunikasikan pada setiap permintaan. Blog kedua dalam seri dimulai dengan menunjukkan cara mengekstrak kunci API dengan serangan MITM (Man in the Middle). Kuncinya kemudian ditambahkan ke situs web Shipraider untuk digunakan dalam permintaan yang dibuatnya ke API Shipfast.
Untuk meningkatkan perlindungan, posting blog kedua memperkenalkan HMAC untuk menandatangani permintaan API secara digital dan karenanya mencegah mereka dibajak atau dirusak. Ini lebih baik daripada kunci API karena bagian rahasia tidak pernah secara eksplisit dikirim dari klien ke server dan dalam versi ini secara statis tertanam dalam kode.
Implementasi HMAC sedikit lebih rumit daripada implementasi kunci API, tetapi masih sederhana. Anda dapat memeriksa kode ini untuk implementasi server API, dan kode ini untuk implementasi aplikasi seluler.
Namun, jika rahasia HMAC adalah kode keras, maka masih mudah untuk diekstrak oleh penyerang. Posting blog ketiga menunjukkan ini dengan menggunakan alat analisis biner open source untuk mengungkapkan rahasia HMAC dan algoritma terkait yang digunakan untuk menandatangani permintaan. Setelah ini disalin ke Kode Shipraider, situs web nakal dapat bangun dan berjalan lagi.
Skenario serangan kedua mengungkapkan bahwa menggunakan rahasia statis untuk algoritma HMAC adalah titik yang lemah. Pertahanan berikutnya adalah menggunakan rahasia dinamis; Salah satu yang dihitung saat runtime. Posting blog ketiga menjelaskan cara menggabungkan rahasia statis dengan data dinamis untuk menghasilkan rahasia dinamis untuk menginisialisasi algoritma HMAC.
Implementasi untuk aplikasi seluler dapat dilihat dalam baris kode ini sementara yang setara dengan server API dapat dilihat di sini.
Menghitung rahasia HMAC saat runtime membuatnya lebih sulit untuk memotong tetapi bukan tidak mungkin. Penyerang sekarang perlu memahami bagian kode yang lebih besar untuk mereproduksi perilaku di situs web Shipraider. Posting blog keempat mencantumkan beberapa pendekatan untuk ini, memberikan contoh yang lebih rinci menggunakan pengemasan ulang aplikasi dan Debugger Studio Android. Sekali lagi, penyerang dapat menulis kode yang setara di Shipraider untuk terus menggunakan API Shipfast.
Posting blog keempat, memperkenalkan ukuran keamanan akhir dalam seri. Pengesahan aplikasi seluler adalah konsep keamanan API yang diimplementasikan di Affov. Singkatnya, Affov memeriksa seluruh aplikasi dan lingkungan di mana ia berjalan sebelum memungkinkan akses ke API - aplikasi adalah kuncinya . Ini memberi Anda tingkat kepercayaan yang tinggi bahwa akses API Anda dikunci untuk contoh-contoh yang sah dari aplikasi Anda. Pendekatan ini dijelaskan secara lebih rinci di halaman Ikhtisar Produk kami dan di Buku Putih Terkait.
Integrasi Affov sesederhana mungkin untuk pengembang aplikasi seluler. Tambahkan SDK Afforov ke build Anda, semoga menggunakan salah satu contoh [QuickStart Integration]] (https://approov.io/docs/latest/approov-integration-examples/mobile-app/) untuk mempercepat proses dan kemudian hubungi SDK untuk mendapatkan Permintaan API untuk memasukkan API. Anda dapat melihat ini di aplikasi Shipfast di ShipfastApp.KT, cari jalur yang didahului oleh // *** UNCOMMENT THE CODE BELOW FOR APPROOV *** .
Integrasi server API juga sederhana: Gunakan salah satu dari banyak pustaka JWT untuk memverifikasi token Affov sebelum menanggapi permintaan API. API Shipfast menggunakan paket Node Express-JWT untuk memverifikasi token Acquak dengan panggilan balik checkApproovToken .
Dokumen penggunaan lanjutan menjelaskan langkah -langkah build dan penyebaran untuk masing -masing komponen yang membentuk layanan Shipfast dan Shipraider. Untuk mengikuti seri blog, biasanya cukup untuk menggunakan layanan dan aplikasi yang digunakan dan dikelola oleh tim Affov, dalam hal ini Anda tidak perlu mengikuti dokumen itu. Namun, Anda akan membutuhkannya jika Anda mencoba tantangan pentesting opsional, yang dijelaskan pada akhir posting blog terakhir.
Seri blog, secara keseluruhan, menunjukkan peningkatan bertahap dalam keamanan API dengan memastikan bahwa permintaan hanya berasal dari sumber yang sah. Blog dan kode dalam repositori ini digunakan untuk menunjukkan cara dengan mudah menghindari beberapa mekanisme perlindungan yang biasa digunakan dalam pengembangan API. Ini memuncak dalam integrasi Affov yang memberikan tingkat kepercayaan tertinggi dalam permintaan terverifikasi yang diterima oleh API Shipfast. Jika Anda ingin menjelajahi solusi APROVOV secara lebih mendalam maka mengapa tidak mencoba salah satu dari tautan berikut sebagai titik lompat: