J'ai récemment répondu en détail à la question : Comment configurer le proxy HTTPS du Wi-Fi, et non HTTP, via le shell adb ? Nous sommes tous d'accord pour dire qu'il s'agit là d'une bonne occasion de clarifier certaines confusions que beaucoup d'entre nous (y compris moi) ont sur le fonctionnement des procurations.
VOTRE APPLICATION GÉNÈRE-T-ELLE UN TRAFIC HTTP ?
Proxy signifie généralement http
proxy, mais le trafic généré par chaque application n'est pas toujours http
- un protocole de couche 7 dans Modèle OSI . Les clients de messagerie, par exemple, utilisent IMAP
/ POP3
/ SMTP
(L6/7) qui ne fonctionneront pas avec les protocoles http GET
au lieu de demander http CONNECT
Proxies. Ces derniers ne peuvent que transmettre TCP
le trafic, pour UDP
au moins SOCKS5
Il faut une procuration qui fonctionne à L5. Les DNS et la plupart des jeux et des applications VoIP génèrent du trafic UDP, ils ne fonctionneront donc pas avec http
proxies du tout. ping
par exemple, utilise ICMP
(au niveau L3) qui ne peut pas être encapsulé dans TCP ou UDP. Il ne fonctionnera donc pas non plus avec SOCKS et nécessite un VPN.
Voir plus de détails dans Pourquoi le proxy défini sur Android ne fonctionne pas lorsqu'il est utilisé comme hotspot ?
LE PROXY HTTP FONCTIONNE-T-IL AVEC TOUTES LES APPLICATIONS ?
Le proxy n'est pas censé être défini à l'échelle du système. En d'autres termes, vous ne pouvez pas forcer toutes les applications à utiliser le même proxy que celui que vous avez configuré dans les paramètres. Au lieu de cela, les applications sont censées rendre les messages proxys plus efficaces. http
s'ils le souhaitent. Les systèmes d'exploitation fournissent des bibliothèques tenant compte du proxy (pour http
) dans le cadre des SDK, de sorte que les développeurs n'ont pas à s'occuper séparément des questions liées au proxy. Les applications Android de ce type respectent les paramètres de proxy définis au niveau du système (mais peuvent toujours revenir au mode sans proxy si celui-ci échoue pour une raison quelconque).
D'autres systèmes d'exploitation utilisent également des approches similaires pour fournir des paramètres de proxy à l'échelle du système par le biais d'un menu de paramètres de l'interface graphique ou en utilisant des variables d'environnement sur l'interface CLI. Les navigateurs et d'autres applications comme les clients de messagerie ont généralement leurs propres paramètres pour définir le proxy. Cependant, si l'application ou le programme ne tient pas compte du proxy, il n'honorera aucun des paramètres du proxy. C'est pourquoi, lors de la configuration du proxy Wi-Fi, un avertissement est émis :
"Le proxy HTTP est utilisé par le navigateur mais peut ne pas être utilisé par les autres applications."
Il en va de même pour le proxy défini par le fichier PAC ou dans les APN (données mobiles) ou le proxy global (destiné aux appareils gérés).
Pour en venir à vos questions...
En utilisant le navigateur sur mon appareil Android, je peux voir les requêtes enregistrées dans Fiddler.
...
Cependant, lorsque j'utilise certaines applications, je constate qu'aucune demande n'est enregistrée.
El guide Le lien dans la question suggère de configurer les paramètres WiFi d'Android pour utiliser un proxy. Comme expliqué ci-dessus, le navigateur serait sensible au proxy, mais pas "certaines applications".
Je veux pouvoir analyser les requêtes envoyées entre une application sur mon téléphone qui contrôle un thermostat sans fil connecté à mon réseau local par WiFi.
- Assurez-vous que votre application concernée génère
http
trafic à capturer lors du reniflage sur le proxy. Sinon, utilisez quelque chose de plus bas niveau - par exemple un proxy SOCKS ou un VPN - pour les autres protocoles.
- Assurez-vous que l'application respecte les normes d'Android paramètres globaux du proxy lors de la réalisation
http
connexions. En cas de https
l'application devrait utiliser CONNECT
à la place de la méthode GET
.
-
Si l'application n'est pas compatible avec le proxy, vous devez imposer l'utilisation du proxy sur le téléphone et (en cas d'utilisation de la fonction https
) faire une interception SSL/TLS forcée / transparente sur le proxy.
Mise en œuvre du proxy est possible par différentes méthodes, par exemple par en utilisant le tunnel SOCKS et/ou en redirigeant le trafic vers un serveur proxy à l'aide d'une approche de couche 2/3 comme le VPN ( tun2socks
/ tun2http
) ou iptables
( DNAT
). Les modules Xposed comme Inspeckage peut également appliquer un proxy par application en se connectant à des API.
Une autre approche consiste à utiliser un hôte local (de préférence un PC Linux) comme passerelle par défaut et à y configurer un proxy pour intercepter le trafic provenant de n'importe quel hôte du réseau local. De cette façon, aucune configuration de proxy n'est nécessaire sur le téléphone. Il est également possible de configurer un outil d'analyse de paquets comme Wireshark à la place du proxy sur le réseau local pour intercepter le trafic.
VOTRE APPLICATION UTILISE-T-ELLE LE PROTOCOLE HTTP SÉCURISÉ (HTTPS) ?
- Si le but du proxy est le DPI, la journalisation, l'analyse antivirus, le blocage, le filtrage ou l'adaptation du contenu, vous devez faire du SSL bumping /. MITM sur le serveur proxy.
- MITM nécessite l'ajout de la racine du proxy. Certificat SSL au magasin de certificats de l'appareil (ou l'application devrait être capable d'ignorer les erreurs de certificats invalides). Mais depuis Android 7, AC ajoutées par les utilisateurs (comme suggéré dans le guide en lien) sont plus de confiance pour établir des connexions sécurisées. Vous devez donc ajouter le certificat racine à l'adresse suivante
/system/etc/security/cacerts
(nécessite un téléphone rooté). "Mais les développeurs d'applications peuvent choisir de laisser leurs applications fonctionner avec des certificats CA ajoutés manuellement." ( 1 )
- Si l'application utilise son propre magasin de certificats de confiance au lieu de celui fourni par le système d'exploitation, vous devez ajouter l'autorité de certification racine du proxy à la liste des autorités de certification gérées par l'application (si cela est possible).
- Si l'application utilise Épinglage SSL (comme le Twitter ), il ne fera confiance à aucune autorité intermédiaire, sauf à son autorité de certification racine auto-signée. Vous pouvez essayer de désactiver l'épinglage SSL en prenant le contrôle des API associées. Module Xposed SSLUnpinning peut désactiver l'épinglage SSL pour JSSE, OkHttp et Apache
http
les bibliothèques des clients. Mais si l'application utilise d'autres bibliothèques/API, vous n'avez pas de chance.
0 votes
Bonjour et bienvenue sur Android.SE ! Il semble que la configuration pour rendre l'appareil Android utiliser Fiddler échoué. N'est-ce pas ?
0 votes
@0xC0000022L - pas tout à fait, car certains types de trafic ont été capturés et d'autres non. Ma question est la suivante : pourquoi ?
0 votes
@Karl alors vous besoin de pour qualifier votre déclaration Dans mon cas, l'application que j'utilise est capable de récupérer des informations sur le réseau sans problème, mais je ne peux pas voir les requêtes effectuées dans Fiddler. Parce que le réseau est un sur-ensemble de HTTP et que ce dernier est typiquement le seul type de trafic auquel Fiddler s'intéresse en raison de la manière dont il est configuré.