Kategori OWASP: MASVS-PLATFORM: Interaksi Platform
Ringkasan
Banyak aplikasi seluler menggunakan API eksternal untuk menyediakan fitur. Biasanya, token atau kunci statis digunakan untuk mengautentikasi aplikasi yang terhubung ke layanan.
Namun, dalam konteks setelan client-server (atau aplikasi seluler dan API) – penggunaan kunci statis umumnya tidak dianggap sebagai metode autentikasi yang aman untuk mengakses data atau layanan sensitif. Tidak seperti infrastruktur internal, siapa pun dapat mengakses API eksternal dan menyalahgunakan layanan jika mereka memiliki akses ke kunci ini.
Misalnya, kunci statis dapat direkayasa balik dari aplikasi atau dicegat saat aplikasi seluler berkomunikasi dengan API eksternal. Kunci statis ini juga lebih cenderung di-hardcode dalam aplikasi.
Risiko terhadap data dan layanan API terjadi jika autentikasi dan kontrol akses yang cukup aman tidak digunakan.
Saat menggunakan kunci statis, API dapat dieksploitasi dengan memutar ulang permintaan atau membuat permintaan baru menggunakan kunci (yang dicegat atau direkayasa balik) tanpa batasan waktu.
Dampak
Jika developer membayar layanan AI atau ML API, penyerang akan relatif mudah mencuri kunci ini dan menimbulkan utang pada layanan mereka atau menggunakannya untuk membuat konten palsu.
Setiap data pengguna, file, atau PII yang disimpan di API akan tersedia secara bebas, sehingga menyebabkan kebocoran yang merugikan.
Penyerang juga dapat menggunakan akses ini untuk melakukan penipuan, mengalihkan layanan, dan, dalam kasus yang jarang terjadi, mendapatkan kontrol penuh atas server.
Mitigasi
Stateful API
Jika aplikasi menyediakan login pengguna atau memiliki kemampuan untuk melacak sesi pengguna, sebaiknya developer menggunakan layanan API seperti Google Cloud untuk integrasi stateful dengan aplikasi mereka.
Selain itu, gunakan autentikasi yang aman, validasi klien, dan kontrol sesi yang disediakan oleh layanan API, serta pertimbangkan untuk menggunakan token dinamis sebagai alternatif untuk kunci statis. Pastikan masa berlaku token berakhir dalam waktu yang cukup singkat (biasanya 1 jam).
Token dinamis kemudian harus digunakan untuk autentikasi guna memberikan akses ke API. Panduan ini menunjukkan cara mencapainya menggunakan OAuth 2.0. Selain panduan tersebut, OAuth 2.0 dapat diperkuat lebih lanjut untuk mengurangi kerentanan di aplikasi Android Anda dengan menerapkan fitur berikut.
Terapkan penanganan dan logging error yang tepat:
- Tangani error OAuth secara tuntas, terlihat, dan catat lognya untuk tujuan proses debug.
- Area permukaan serangan yang lebih kecil juga akan membantu Anda mengidentifikasi dan memecahkan masalah yang mungkin muncul.
- Pastikan setiap pesan yang dicatat atau ditampilkan kepada pengguna jelas, tetapi tidak berisi informasi yang berguna bagi penyerang.
Mengonfigurasi OAuth dengan aman di aplikasi:
- Kirim parameter
redirect_uri
ke endpoint otorisasi dan token. - Jika aplikasi Anda menggunakan OAuth dengan layanan pihak ketiga, konfigurasi Cross-Origin Resource Sharing (CORS) untuk membatasi akses ke resource aplikasi Anda.
- Tindakan ini akan membantu mencegah serangan pembuatan skrip lintas situs (XSS) yang tidak sah.
- Gunakan parameter status untuk mencegah serangan CSRF.
Gunakan library keamanan:
- Sebaiknya gunakan library keamanan seperti AppAuth untuk menyederhanakan penerapan alur OAuth yang aman.
- Library Android ini dapat membantu mengotomatiskan banyak praktik terbaik keamanan yang disebutkan sebelumnya.
Metode autentikasi lainnya, termasuk token ID Firebase dan Google, dijelaskan dalam dokumentasi OpenAPI.
API Stateless
Jika layanan API tidak menawarkan perlindungan yang direkomendasikan sebelumnya dan ada persyaratan untuk sesi tanpa status tanpa login pengguna, developer mungkin perlu menyediakan solusi middleware mereka sendiri.
Hal ini akan melibatkan permintaan 'proxy' antara aplikasi dan endpoint API. Salah satu metode untuk melakukannya adalah dengan menggunakan JSON Web Token (JWT) dan JSON Web Signature (JWS), atau menyediakan layanan yang diautentikasi sepenuhnya seperti yang direkomendasikan sebelumnya. Hal ini memberikan cara untuk menyimpan kunci statis yang rentan di sisi server, bukan di aplikasi (klien).
Ada masalah inheren dalam menyediakan solusi stateless end-to-end di aplikasi seluler. Beberapa tantangan paling penting adalah validasi klien (aplikasi) dan penyimpanan kunci pribadi atau rahasia secara aman di perangkat.
Play Integrity API memberikan validasi integritas aplikasi dan permintaan. Hal ini dapat mengurangi beberapa skenario penyalahgunaan akses ini. Untuk pengelolaan kunci, dalam banyak kasus, keystore adalah lokasi terbaik untuk penyimpanan kunci pribadi yang aman.
Beberapa aplikasi seluler menggunakan fase pendaftaran untuk memeriksa integritas aplikasi dan menyediakan kunci menggunakan pertukaran yang aman. Metode ini rumit dan berada di luar cakupan dokumen ini. Namun, layanan pengelolaan kunci cloud adalah salah satu solusi yang mungkin.