Semua artikel
// Artikel

Review Android Network Security Configuration

Dipublikasikan 7 Juli 2026

Android Network Security Configuration adalah kebijakan XML yang digunakan network stack Android yang didukung bila manifest aplikasi merujuknya melalui android:networkSecurityConfig. Konfigurasi ini dapat menetapkan perilaku cleartext, trust anchor, aturan per domain, certificate pinning, dan trust anchor khusus debug. Ini tidak memperbaiki TrustManager kustom, perilaku WebView di luar cakupan, atau otorisasi sisi server. Validasi harus dilakukan pada APK rilis terpasang karena manifest merging dan pemilihan resource dapat berbeda dari review source.

Mulai catatan dengan package name, version code, digest signing, flavor, min dan target SDK, API level perangkat, hostname uji, penguji, serta tanggal. Ekstrak manifest dan XML efektif dari APK atau output app bundle. Inventaris seluruh HTTP client, SDK pihak ketiga, WebView, dan native library karena cakupan kebijakan dapat berbeda menurut implementasi.

Tutup secara default, buka secara sempit

Baseline rilis dapat menolak cleartext dan memakai trust anchor sistem. Konfigurasi khusus domain hanya boleh menyatakan host pengecualian. Contoh ringkas ini tidak memberi pengecualian HTTP umum:

<network-security-config>
  <base-config cleartextTrafficPermitted="false">
    <trust-anchors>
      <certificates src="system" />
    </trust-anchors>
  </base-config>
  <domain-config>
    <domain includeSubdomains="true">api.example.test</domain>
  </domain-config>
</network-security-config>

Penguji harus mencoba http:// untuk tiap hostname dalam ruang lingkup dan membuktikan koneksi gagal pada rilis. usesCleartextTraffic juga relevan, tetapi perilaku efektif bergantung pada versi Android, target SDK, client stack, dan Network Security Configuration. Atribut source saja bukan bukti lengkap.

Trust anchor perlu diuji eksplisit. Set <certificates src="system" /> memakai CA sistem platform. Penambahan src="user" mengubah apakah sertifikat yang dipasang pengguna dipercaya untuk koneksi yang tercakup. Jangan menambahkannya hanya agar proxy test mudah. Bila CA private enterprise diperlukan, batasi pada domain persis, dokumentasikan pemilik dan expiry, uji hostname serta validasi chain, lalu hapus saat tidak diperlukan. Penerimaan adalah perilaku koneksi yang teramati pada build rilis, bukan tampilan XML.

Pisahkan kepercayaan debug

<debug-overrides> mengizinkan trust anchor tambahan hanya ketika android:debuggable bernilai true. Fitur ini membantu intersepsi lokal tanpa membawa trust pengujian ke produksi. Contoh:

<network-security-config>
  <base-config cleartextTrafficPermitted="false" />
  <debug-overrides>
    <trust-anchors>
      <certificates src="user" />
    </trust-anchors>
  </debug-overrides>
</network-security-config>

Periksa manifest APK debug dan rilis. Pada rilis, coba koneksi melalui proxy dengan test CA yang dipasang pengguna; hasil yang diharapkan mengikuti kebijakan trust rilis yang disetujui, tetapi debug override tidak boleh efektif karena resource debug ikut ter-merge. Simpan fingerprint sertifikat proxy, setup perangkat, hostname request, serta hasil. Gagal mengintersep bukan bukti validasi aman tanpa menguji chain kedaluwarsa, host salah, dan CA tak tepercaya bila diizinkan.

Pinning adalah komitmen ketersediaan

pin-set dapat membatasi domain ke public-key pin yang terdaftar dan mendukung expiration. Sertakan minimal satu backup pin untuk rotasi key yang direncanakan, lindungi source dan proses rilis pin, lalu lakukan latihan rotasi sebelum deploy. Nilai berikut hanya placeholder:

<domain-config>
  <domain>api.example.test</domain>
  <pin-set expiration="2027-01-01">
    <pin digest="SHA-256">PRIMARY_BASE64_PIN</pin>
    <pin digest="SHA-256">BACKUP_BASE64_PIN</pin>
  </pin-set>
</domain-config>

Pinning dapat menyebabkan outage ketika sertifikat atau key berubah tak terduga; expiry juga mengubah perilaku. Maka MASVS-NETWORK-2 harus dinilai terhadap model ancaman, kepemilikan operasional, dan kemampuan pulih, bukan dipakai sebagai XML dekoratif. Uji pin utama, backup pin, pin salah, kebijakan kedaluwarsa, dan rotasi pada client representatif. Jangan memasukkan nilai pin dari artikel ini ke aplikasi.

Penerimaan rilis dan bukti

PemeriksaanArtefak selesaiPemilikPenerimaan lulus
Keterhubungan manifestManifest rilis dan digest XML hasil ekstraksi.Pemilik buildRilis merujuk konfigurasi yang direview.
CleartextTranskrip uji HTTP untuk setiap hostname.Pemilik jaringanKoneksi HTTP yang tidak disetujui gagal.
Trust anchorMatriks uji CA sistem, pengguna, dan private.Pemilik AndroidHanya anchor yang disetujui dapat validasi.
Kebijakan debugPerbandingan APK debug/rilis serta hasil proxy.Pemilik rilisDebug override tidak efektif pada rilis.
PinningInventaris pin, latihan rotasi, kalender expiry.Pemilik layananPin wajib punya backup dan pemulihan diuji.
Cakupan runtimeInventaris client/SDK dan catatan cakupan.Pemilik engineeringClient di luar kebijakan diperbaiki atau dicatat sebagai pengecualian.

Status lulus hanya bila artefak dan penerimaan tersedia. Gagal mencakup cleartext diterima, user/debug CA dipercaya tanpa maksud, validasi hostname dapat dilewati, atau outage pin tidak direncanakan. Belum terverifikasi bukan lulus. Pengecualian memuat host dan build terdampak, alasan, risiko data, kontrol kompensasi, pemilik, persetujuan, tanggal berakhir, serta tanggal remediasi. Perbaiki dengan menghapus trust luas, memisahkan resource per varian, mempersempit domain, membetulkan kode client, atau merencanakan rotasi pin. Build ulang dan jalankan matriks sama sebelum penutupan.

OWASP MASVS dan dokumentasi Android adalah rujukan teknis, bukan sertifikasi. Pengujian aplikasi mobile dapat memvalidasi ruang lingkup rilis yang disepakati.

Verifikasi kebijakan release efektif

Ekstrak manifest serta resource konfigurasi dari release terpasang, lalu uji endpoint HTTPS disetujui dan endpoint cleartext sengaja dari build sama. Hasil HTTPS yang diharapkan berhasil dengan sertifikat tepercaya; hasil HTTP yang diharapkan gagal karena cleartext tidak diizinkan. Ulangi dengan CA yang dipasang pengguna hanya jika kebijakan uji mengizinkan, sertifikat kedaluwarsa, dan hostname mismatch. Catat kelas URL, API level perangkat, state jaringan, kelas error, digest build, pemilik, lulus/gagal, dan expiry pengecualian. Debug override pada artefak release adalah gagal, bukan kemudahan pengujian.

Uji transport dan penutupan

Periksa merged manifest release serta networkSecurityConfig efektif, lalu uji domain diizinkan dengan sertifikat tepercaya dan tidak tepercaya. Perintah adb shell dumpsys package com.example.shop membantu menyimpan konteks package terpasang; hasil diharapkan build release merujuk kebijakan dimaksud dan cleartext tidak tersedia kecuali scope development terdokumentasi. Gunakan request sintetis, bukan kredensial produksi.

Uji HTTP, hostname mismatch, sertifikat kedaluwarsa, CA dipasang pengguna, dan redirect ke host tidak terdaftar. Hasil diharapkan adalah penolakan koneksi atau error aplikasi terkendali sebelum data sensitif dikirim. Pinning perlu rotasi: pin lama tunggal dapat membuat pembaruan sertifikat menjadi outage. Kebijakan jaringan tidak mengganti pemeriksaan identitas server atau otorisasi.

Tutup dengan hash merged manifest, XML kebijakan, perangkat/API, host diuji, output penolakan, expiry pengecualian, dan pemilik release. Buka ulang saat domain, SDK networking, target SDK, CA, atau build variant berubah.

Sumber

Punya sistem yang perlu diuji?