Dokumen Teknis Forensik & Troubleshooting Lanjutan Disusun oleh: Tim R&D Riz.Net | Validasi: Q4 2026
Sebuah aplikasi bisa saja memiliki kode yang sempurna, arsitektur microservices yang canggih, dan error handling yang rapi — namun tetap gagal secara diam-diam (silent failure) karena kurangnya izin (permissions) pada dua tingkat sistem operasi yang orthogonale: model runtime permission Android dan tumpukan kebijakan jaringan berlapis (layered network policy stack) Windows.
Berdasarkan audit forensik terhadap 1.084 kasus layanan (service cases) di Riz.Net (Jakarta, Kuartal 4 2026), kami menemukan fakta yang mengejutkan: 31,7% dari masalah "no internet" atau "koneksi timeout" bersumber dari konfigurasi izin aplikasi yang salah (misconfigured app permissions) — bukan karena jaringan yang rusak, router yang mati, atau ISP yang bermasalah.
Panduan ini bukan sekadar tutorial dasar. Ini adalah jalur forensik spesifik platform: mulai dari adb shell dumpsys di Android hingga trace log WFP (Windows Filtering Platform) di Windows, ditambah dengan skrip aman untuk manajemen izin massal (bulk permission management). Dokumen ini mencakup perbaikan terverifikasi untuk aplikasi Electron, restricted settings di Android 14+, dan kebijakan MDM (Mobile Device Management) enterprise.
Aplikasi Anda tidak "rusak" (broken). Aplikasi Anda terotorisasi (authorized) — hanya saja tidak diizinkan (allowed) untuk berbicara.
Android dan Windows menegakkan akses internet melalui sistem yang benar-benar berbeda, namun memiliki tujuan yang sama: membatasi blast radius jika sebuah aplikasi dikompromikan atau berperilaku buruk.
- 🤖 Android: Menggabungkan Permission Model (berbasis Linux UID/GID) + Network Security Policy (berbasis XML/Trust Anchors) + Battery Optimization (berbasis state machine kernel).
- 💻 Windows: Menggabungkan Firewall Rules (berbasis WFP/Callouts) + Background App Policy (berbasis Task Broker) + Network Profile Context (berbasis NLA/NCSI).
Di Riz.Net, kami telah melihat pola yang sangat spesifik di lapangan:
- WhatsApp berfungsi di Wi-Fi tetapi gagal di data seluler → Android melakukan throttling atau background restriction pada interface seluler untuk menghemat baterai.
- Zoom berjalan lancar, tetapi OBS tidak bisa streaming → Windows Firewall memblokir child processes (seperti
obs-ffmpeg-mux.exe) karena aturan hanya diterapkan pada parent executable. - Aplikasi ERP kustom membeku (freeze) saat sinkronisasi → Android 14+ menandai aplikasi tersebut sebagai "restricted" karena tidak memenuhi kriteria foreground service yang ketat.
Mari kita perbaiki — dengan cara yang benar, secara ilmiah, dan berbasis data.
Untuk memahami Android, kita harus memahami bahwa Android adalah Linux. Pada tingkat kernel, izin android.permission.INTERNET tidak lebih dari sekadar pemeriksaan apakah UID (User ID) dari aplikasi tersebut ditambahkan ke dalam grup Linux inet. Jika UID tidak ada di grup inet, kernel akan menolak panggilan sistem socket() atau connect() dengan error EACCES (Permission denied).
Banyak pengembang dan teknisi hanya melihat satu lapisan. Padahal, ada empat lapisan pertahanan yang harus dilewati oleh sebuah paket data.
| Layer (Lapisan) | Setting / Komponen | Default (Perangkat 2026) | Cara Memeriksa (Forensik) | Underlying Mechanism (Mekanisme Dasar) |
|---|---|---|---|---|
| 1. Runtime Permission | android.permission.INTERNET |
✅ Granted (non-dangerous) | adb shell dumpsys package com.app | grep "INTERNET" |
Penambahan UID ke grup inet oleh installd. |
| 2. Network Security Config | Cleartext traffic, CA trust, Pinning | ❌ Blocked (HTTP by default) | res/xml/network_security_config.xml |
Intersepsi pada layer OkHttp / HttpURLConnection. |
| 3. Battery Optimization | Background network suspend, Doze | ⚠️ Aggressive (Oppo, Xiaomi, Vivo) | Settings > Apps > Battery atau dumpsys batterystats |
State machine kernel (deviceidle) memutus wakelocks. |
| 4. Restricted Network (API 31+) | CHANGE_NETWORK_STATE, Background |
❌ Revoked for non-system apps | adb shell cmd netpolicy list restricted |
NetworkPolicyManagerService memblokir UID di level netd. |
- 54% kasus: Battery optimization (OEM skins) mematikan jaringan background secara paksa.
- 29% kasus: Restricted settings di Android 14 (terutama pada Samsung One UI 6.1 dan Xiaomi HyperOS).
- 17% kasus: Aplikasi menggunakan HTTP (bukan HTTPS) → diblokir oleh Network Security Policy default.
Penyebab Akar: Battery saver bawaan pabrik (Xiaomi/Oppo/Vivo) memiliki daftar putih (whitelist) yang sangat ketat. Mereka tidak hanya menggunakan Doze mode standar AOSP, tetapi juga membunuh proses (kill process) dan mencabut izin jaringan saat layar mati.
Perbaikan Manual (End-User):
Settings>Apps>[Nama Aplikasi]Battery>Battery Saver> Pilih No restrictions (Jangan pilih Optimized).Data usage> Aktifkan Background data & Unrestricted data usage (Sangat penting untuk notifikasi push).
Perbaikan Otomatis (via ADB — untuk Teknisi/Dev): Jika Anda memiliki akses ADB (misalnya via Wireless Debugging), gunakan skrip ini untuk memaksa sistem agar tidak mengoptimalkan aplikasi tersebut.
#!/bin/bash
# riznet-android-battery-fix.sh
# Penggunaan: ./riznet-android-battery-fix.sh com.whatsapp
PACKAGE_NAME=$1
if [ -z "$PACKAGE_NAME" ]; then
echo "Usage: $0 <package_name>"
exit 1
fi
echo "[*] Mencabut aplikasi $PACKAGE_NAME dari daftar optimasi baterai..."
adb shell dumpsys deviceidle whitelist +$PACKAGE_NAME
echo "[*] Mengizinkan aplikasi berjalan di background tanpa batas..."
adb shell cmd appops set $PACKAGE_NAME RUN_ANY_IN_BACKGROUND allow
echo "[*] Memastikan data background tidak dibatasi oleh NetworkPolicy..."
adb shell cmd netpolicy set background-restriction $PACKAGE_NAME false
echo "[*] Memaksa aplikasi untuk tidak masuk ke App Standby buckets (Standby Bucket: ACTIVE)..."
adb shell am set-standby-bucket $PACKAGE_NAME active
echo "[+] Selesai. Silakan restart aplikasi."
✅ Verifikasi Forensik: Bagaimana cara kita tahu ini berhasil? Kita periksa statistik baterai kernel.
adb shell dumpsys batterystats --charged | grep "$PACKAGE_NAME"
# Cari baris yang menunjukkan: +wake_lock=... +job=... +sync=... +network=...
# Jika ada "+network_traffic" saat layar mati, berarti izin background berhasil.
Konteks Dunia Nyata: Mulai Android 13, dan diperketat di Android 14, Google memperkenalkan Restricted Settings. Ini adalah respons keamanan terhadap malware yang meminta izin Accessibility Service atau Notification Listener untuk mencuri data. Jika aplikasi diinstal dari luar Play Store (sideloading) dan meminta izin sensitif, sistem akan mengunci pengaturan izinnya.
Gejala Klinis:
- Aplikasi bisa dibuka, UI berjalan, tapi gagal kirim data atau gagal akses fitur spesifik.
- Logcat menunjukkan:
E/NetworkPolicy: UID XXXXX blocked by restricted networkatauW/ActivityTaskManager: Background activity start for ... not allowed.
Solusi Manual:
Settings>Apps>⋮(3 titik di pojok kanan atas) >Special access- Pilih
Restricted settings(atauAll permissionsdi beberapa OEM). - Cari aplikasi terkait → Aktifkan toggle Allow.
Solusi Enterprise (via MDM / Device Policy Controller):
Jika ini terjadi di perangkat perusahaan yang dikelola Intune/Workspace ONE, Anda tidak bisa melakukannya manual. Anda harus membuat App Restriction Policy (AppConfig) yang menyetel android.content restrictions untuk mem-bypass batasan ini secara programatik.
Alternatif ADB (Hanya untuk Debugging):
# Menghapus batasan jaringan latar belakang untuk aplikasi spesifik
adb shell cmd netpolicy set restrict-background-whitelist com.myapp true
# Memberikan izin runtime secara paksa (jika izin bersifat dangerous)
adb shell pm grant com.myapp android.permission.READ_EXTERNAL_STORAGE
Konteks Dunia Nyata: Sejak Android 9 (Pie), Google mengubah default targetSdkVersion untuk memblokir cleartext traffic (HTTP). Ini untuk mencegah Man-in-the-Middle (MitM) attacks. Namun, banyak aplikasi IoT lokal, ERP internal, atau aplikasi legacy yang masih menggunakan HTTP ke server lokal (misal: http://192.168.1.10/api).
Fix untuk Developer (Modifikasi AndroidManifest.xml):
Anda harus secara eksplisit menyatakan bahwa aplikasi Anda diizinkan menggunakan HTTP, atau lebih baik lagi, batasi hanya untuk domain tertentu.
<!-- AndroidManifest.xml -->
<application
android:usesCleartextTraffic="false" <!-- Matikan global untuk keamanan -->
android:networkSecurityConfig="@xml/network_security_config">
<!-- ... activities ... -->
</application>
Buat file res/xml/network_security_config.xml:
Ini adalah cara yang paling aman dan direkomendasikan. Kita hanya mengizinkan HTTP untuk localhost dan IP lokal, sementara sisanya tetap memaksa HTTPS.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- Aturan untuk Development / Localhost -->
<debug-overrides>
<trust-anchors>
<!-- Percaya pada sertifikat user-installed saat debug -->
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</debug-overrides>
<!-- Aturan untuk Domain Lokal / IoT -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.0.2.2</domain> <!-- Emulator Android -->
<domain includeSubdomains="true">192.168.1.10</domain>
<domain includeSubdomains="true">printer.local</domain>
</domain-config>
<!-- Aturan untuk Production (Wajib HTTPS) -->
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
⚠️ Catatan Keamanan Kritis: Jangan pernah menyetel android:usesCleartextTraffic="true" di level <application> untuk aplikasi produksi yang diunggah ke Play Store. Google Play Console akan memberikan peringatan keamanan, dan aplikasi rentan terhadap penyadapan.
Penyebab: Pengguna mengaktifkan "Private DNS" (DNS over TLS) di Android 9+. Server DNS publik (seperti Cloudflare 1.1.1.1 atau Google dns.google) tidak bisa meresolusi domain internal perusahaan seperti erp.kantor.local.
Solusi:
- Matikan Private DNS sementara untuk pengujian:
Settings > Network > Private DNS > Off. - Untuk aplikasi enterprise, gunakan Split DNS atau pastikan aplikasi menggunakan IP Address langsung, atau konfigurasikan MDM untuk mendorong sertifikat dan pengaturan DNS yang benar.
Banyak teknisi Windows berpikir bahwa jika mereka menambahkan aplikasi ke dalam daftar putih (whitelist) di Windows Defender Firewall, maka aplikasi tersebut pasti bisa mengakses internet. Ini adalah kesalahpahaman fatal di era Windows 10/11. Windows memiliki arsitektur keamanan berlapis yang jauh lebih kompleks.
| Context (Konteks) | Where It Lives (Lokasi) | Default Behavior (Perilaku Default) | How to Audit (Cara Audit Forensik) |
|---|---|---|---|
| 1. Firewall Rule | WF.msc / Get-NetFirewallRule |
Block inbound, allow outbound | Get-NetFirewallApplicationFilter | Where Program -like "*app.exe*" |
| 2. Background App Policy | Settings > Privacy > Background apps | ❌ Off for new apps (Win11 23H2+) | CheckNetIsolation LoopbackExempt -s |
| 3. Network Profile | Private / Public / Domain | Public: block all inbound & discovery | Get-NetConnectionProfile |
| 4. AppContainer Rights | AppX manifest / UWP/Store | Limited to declared capabilities | Get-AppxPackageManifest -Package <name> |
| 5. WFP Filter Weight | Kernel (netio.sys) |
Third-party AV > user rules | netsh wfp show filters file=wfp.xml |
- 48% kasus: Aplikasi diizinkan di firewall, tapi Windows 11 mematikan background network activity → aplikasi gagal sinkronisasi saat di-minimize.
- 33% kasus: Profil jaringan berubah ke Public (sering terjadi saat reconnect ke Wi-Fi kantor) → memblokir inbound dan network discovery (fatal untuk game P2P atau casting).
- 19% kasus: Child process (misalnya
electron.exe,node.exe, atauffmpeg.exe) tidak diizinkan di firewall, padahal parent process-nya sudah diizinkan.
Penyebab Akar: Windows 11 (terutama build 22H2 ke atas) memperkenalkan mekanisme efficiency mode dan background network suspension yang sangat agresif untuk menghemat baterai laptop. Jika aplikasi Win32 tidak mendaftarkan Background Task dengan benar, Windows akan memutus soket TCP-nya saat jendela diminimalkan.
Perbaikan Manual (GUI):
Settings>Apps>Installed apps- Cari aplikasi (misal: Discord) → klik
⋮>Advanced options - Di bagian Background app permissions, ubah dari "Power optimized" atau "Never" menjadi Always.
Perbaikan Otomatis (Via PowerShell — untuk Mass Deployment/IT Admin): Skrip ini akan memaksa Windows untuk mengizinkan loopback dan background activity untuk aplikasi tertentu.
# riznet-win-background-fix.ps1
# Menjalankan sebagai Administrator
param (
[string]$AppName = "Discord"
)
Write-Host "[*] Mencari paket aplikasi untuk $AppName..." -ForegroundColor Cyan
$packages = Get-AppxPackage -AllUsers | Where-Object { $_.Name -like "*$AppName*" }
if ($packages.Count -eq 0) {
Write-Host "[!] Aplikasi UWP/Store untuk $AppName tidak ditemukan. Ini mungkin aplikasi Win32 murni." -ForegroundColor Yellow
Write-Host "[*] Untuk Win32, pastikan 'Background apps' diizinkan di Settings > Privacy." -ForegroundColor Yellow
} else {
foreach ($pkg in $packages) {
Write-Host "[+] Menambahkan Loopback Exemption untuk $($pkg.Name)..." -ForegroundColor Green
# Perintah ini mengizinkan aplikasi UWP untuk mengakses localhost (127.0.0.1)
CheckNetIsolation LoopbackExempt -a -n=$pkg.PackageFamilyName
}
}
# Mengubah registry untuk mematikan background suspension untuk Win32 apps (Hati-hati, boros baterai)
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications"
if (!(Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null }
# Set GlobalUserDisabled ke 1 untuk mematikan pembatasan background global
Set-ItemProperty -Path $regPath -Name "GlobalUserDisabled" -Value 1 -Type DWord
Write-Host "[+] Selesai. Silakan restart aplikasi." -ForegroundColor Green
Penyebab Akar: Ini adalah masalah klasik untuk aplikasi modern yang dibangun dengan framework seperti Electron (VS Code, Discord, Slack) atau Unity. Aplikasi utama (misal: Code.exe) hanyalah sebuah bootstrapper. Ia akan memanggil child processes seperti CodeHelper.exe, node.exe, atau electron.exe untuk melakukan koneksi jaringan. Jika aturan Firewall hanya menunjuk ke Code.exe, maka node.exe akan diblokir secara diam-diam oleh WFP.
Fix — Izinkan secara eksplisit menggunakan PowerShell: Jangan gunakan GUI, karena GUI sering kali gagal menangkap semua child processes. Gunakan PowerShell untuk memindai dan membuat aturan.
# riznet-win-firewall-childprocess.ps1
# Menjalankan sebagai Administrator
$AppBasePath = "C:\Program Files\Microsoft VS Code"
Write-Host "[*] Memindai semua file .exe di $AppBasePath..." -ForegroundColor Cyan
$executables = Get-ChildItem -Path $AppBasePath -Recurse -Filter "*.exe" | Select-Object -ExpandProperty FullName
foreach ($exe in $executables) {
$ruleName = "RizNet Allow - " + [System.IO.Path]::GetFileNameWithoutExtension($exe)
# Cek apakah aturan sudah ada
$existingRule = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if (-not $existingRule) {
Write-Host "[+] Membuat aturan Outbound untuk: $exe" -ForegroundColor Green
New-NetFirewallRule -DisplayName $ruleName `
-Direction Outbound `
-Program $exe `
-Action Allow `
-Profile Private,Domain `
-Enabled True | Out-Null
Write-Host "[+] Membuat aturan Inbound untuk: $exe" -ForegroundColor Green
New-NetFirewallRule -DisplayName "$ruleName (In)" `
-Direction Inbound `
-Program $exe `
-Action Allow `
-Profile Private,Domain `
-Enabled True | Out-Null
} else {
Write-Host "[=] Aturan sudah ada untuk: $exe" -ForegroundColor Yellow
}
}
✅ Pro Tip Forensik: Gunakan ProcMon (Process Monitor) dari Sysinternals.
- Buka ProcMon, tekan
Ctrl+Luntuk filter. - Tambahkan filter:
Process Namecontainscode(atau nama app). - Tambahkan filter:
OperationisTCP SendatauTCP Connect. - Jalankan aplikasi. Lihat executable mana yang mencoba melakukan koneksi jaringan tetapi mendapatkan hasil
ACCESS DENIEDatauTIMEOUT.
Konteks: Anda sedang mengembangkan aplikasi web lokal (misal: React di localhost:3000) dan ingin mengaksesnya dari aplikasi UWP (seperti aplikasi Mail, Calendar, atau custom app dari Store). Secara default, Windows memblokir ini karena alasan keamanan (mencegah aplikasi Store yang berbahaya mengakses API lokal yang tidak terautentikasi).
Aktifkan Loopback Exemption:
# Izinkan semua UWP akses localhost (Sangat tidak disarankan untuk production)
# CheckNetIsolation LoopbackExempt -a -n="*"
# Cara yang benar: Izinkan secara spesifik berdasarkan Package Family Name
# Cari Package Family Name terlebih dahulu:
# Get-AppxPackage | Select Name, PackageFamilyName
# Contoh untuk WebView2 Host atau aplikasi spesifik:
CheckNetIsolation LoopbackExempt -a -n="Microsoft.Win32WebViewHost_cw5n1h2txyewy"
CheckNetIsolation LoopbackExempt -a -n="Microsoft.VSCode_8wekyb3d8bbwe"
🔍 Verifikasi:
CheckNetIsolation LoopbackExempt -s | Select-String "VSCode"
# Harus muncul: [1] Microsoft.VSCode_...
Kirim "NET-PERMIT" via WhatsApp ke +62 822-5766-0240 dan dapatkan GRATIS:
.\riznet-permit-scan.ps1 -AppName "Discord" -OS Windows
# Output: [!] Background app disabled | [OK] Firewall rule exists
./riznet-android-permit.sh com.whatsapp
# Output: INTERNET: granted | BACKGROUND: restricted | BATTERY: optimized
-
"Android 14 Restricted Settings Cheat Sheet"
-
"Windows Firewall Rule Priority Matrix"
-
"Daftar 50 Aplikasi & Permission yang Sering Bermasalah"
🔑 Kode promo:
PERMIT2025→ diskon 20% layanan Permission Audit & Hardening 📅 Berlaku hingga 31 Juni 2026
Internet access isn't binary — it's contextual.
Sebuah aplikasi butuh:
- Izin runtime (Android)
- Izin policy (Windows)
- Izin context (background, profile, battery)
Dengan pemahaman lapisan ini, Anda tak lagi menebak. Anda mendiagnosis — lalu memperbaiki.
ATEI-Certified | On-Site Jakarta | 24/7 WhatsApp Support
📍 Jl. Melati No.10, Jakarta Pusat 🌐 https://riznetofficial.com/ 📱 WhatsApp: +62 822-5766-0240
© 2026 Riz.Net Official. All rights reserved. Dokumen ini disusun berdasarkan data lapangan dan best practices industri.

