1 votes

Comment corriger l'erreur "Socket creation in UltraProbe...Permission denied" en utilisant nmap ?

J'ai une version pré-compilée de nmap binaire pour Android qui fonctionnait correctement et sans erreur dans LineageOS 14.1. Le téléphone est un One Plus One.

Depuis la mise à jour vers Lineage 15.1 (Android 8), l'erreur spécifique que je reçois est la suivante :

Socket creation in UltraProbe* sendConnectScanProbe(UltraScanInfo, HostScanStats, u16, u8, u8): Permission denied (13).

C'est alors que nmap est exécuté en tant qu'utilisateur standard, comme Root le téléphone ne répond plus et se plante immédiatement. J'ai lu quelque part sur SO que quelqu'un qui essayait également d'ouvrir un socket rencontrait également un problème de permission, mais qu'il a réussi à le contourner en ajoutant l'utilisateur dans ces groupes : aid_bt , aid_bt_net , aid_inet , aid_net_raw , aid_admin

Il semble que cette version de LineageOS n'a pas non plus groupadd o usermod donc cette solution ne m'aide pas.

Y a-t-il eu des changements entre les deux versions de Lineage qui pourraient causer ce problème ?
Et comment puis-je faire nmap travailler à nouveau ?

2voto

Irfan Latif Points 16863

Y a-t-il eu des changements entre les deux versions de Lineage qui pourraient causer ce problème ?

Je n'ai pas d'expérience avec nmap et ne peut pas être sûr de la raison pour laquelle cela a fonctionné avec Android N, mais Android a toujours été restrictif en ce qui concerne l'accès aux prises. J'ai été confronté aux mêmes problèmes au moins à partir de Marshmallow. ping est l'exemple le plus courant.

Il semble que cette version de LineageOS n'a pas non plus   groupadd  ou  usermod

Android utilisateurs y permisos est très différente de celle de Linux. Bionic libc ne prend pas en charge de nombreux sycalls fournis par la norme glibc notamment en ce qui concerne NSS . De même, les fichiers associés /etc/passwd , /etc/group , /etc/shadow et d'autres n'existent pas sur Android comme ils existent sur Linux. Donc, les utilitaires standards de Linux groupadd y useradd etc. ne peuvent pas être utilisés sur Android à moins que la source ne soit modifiée et que l'environnement ne soit modifié en conséquence.

Comment puis-je faire fonctionner nmap à nouveau ?

Si vous voulez utiliser un program compilé pour Linux standard qui a besoin de capacités CAP_NET_BIND_SERVICE , CAP_NET_ADMIN , CAP_NET_RAW etc., le programme doit être exécuté par un utilisateur qui est membre des groupes Android aid_inet , aid_admin y aid_net_raw . Même si le root L'utilisateur a apparemment CAP_NET_* capacités, socket syscall échoue s'il n'est pas ajouté explicitement à ces groupes. La plupart du temps, seul aid_inet suffit.

Par exemple, voyons les capacités de wpa_supplicant (processus responsable de l'établissement des connexions wi-fi) sur Android :

~$ su -c "getpcaps $(pidof wpa_supplicant)"
Capabilities for `21224': = cap_net_admin,cap_net_raw+ep

Donc, nmap ne fonctionnera pas si elle n'est pas exécutée avec les capacités requises. Une capacité est un sous-ensemble de permissions Root.

Les applications terminales sont généralement déjà membres de aid_net groupe ( android.permission.INTERNET ). Toutefois, si ce n'est pas le cas ou si vous souhaitez créer un utilisateur de type Linux sur Android, poursuivez.

Ajouter un utilisateur LINUX sur Android

NOTE : L'appareil doit être enraciné.

Sous Linux, capacités sont assignés à un utilisateur (un utilisateur est un identifiant de processus en fait, généralement un shell) par un mécanisme de connexion, PAM les modules étant les plus courants. Mais il n'y a pas de connexion utilisateur sur Android, donc nous devons reproduire cela d'une manière ou d'une autre. Créons un utilisateur Linux, disons "irfan" sur Android.

Le mieux est d'utiliser l'UID de l'application du terminal attribué au moment de l'installation de l'application ou vous pouvez utiliser n'importe quel UID inutilisé comme 6000.

Modifiez ou créez les fichiers comme ci-dessous :

# /etc/passwd
irfan:x:10129:10129::/sdcard:/system/bin/sh
root:x:0:0::/data/local/tmp:/system/bin/sh

# /etc/group
aid_inet:x:3003:irfan,root

Pour se connecter en tant qu'utilisateur "irfan" avec aid_inet comme groupe secondaire, utilisez un Conscience de Linux busybox su binary qui concerne /etc/passwd y /etc/group :

~$ id
uid=10129(u0_a129) gid=10129(u0_a129) groups=10129(u0_a129),9997(everybody)

~$ su -c 'busybox su - irfan'

~$ busybox id
uid=10129(irfan) gid=10129(irfan) groups=10129(irfan),3003(aid_inet)

Veuillez noter l'utilisation de su deux fois. D'abord su est celui que vous obtenez lorsque vous Root votre appareil. C'est parce que su doit être exécuté avec CAP_SETUID capacité. Mais les applications Android normales fonctionnent sans aucune capacité :

~$ capsh --print | grep Bounding
Bounding set =

Le premier su nous accorde cette capacité (et toutes les autres capacités) et évite de devoir setuid sur busybox su binaire.

De la même manière, vous pouvez vous ajouter à autant de groupes que vous le souhaitez, everybody , sdcard_rw et ainsi de suite.

SOURCE :

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X