Unhide : découverte des processus et ports cachés
Unhide est un outil simple de détection de process et de ports cachés qui n’apparaîtraient pas avec les outils classiques. Il a le bon goût d’être Open Source et disponible également pour les plateformes sous Windows.
Commençons dans un premier temps par rapatrier et détarer l’archive de l’outil. La dernière version en date à l’heure de la manip est estampillée du 13 Janvier 2011.
L’installation est très simple, mais rompt complètement avec la routine des ./configure; make && make install à laquel on est habitué.
Ici, il s’agit simplement de compiler le code c qui va bien afin d’utiliser les outils. Encore une fois, le README.txt est à disposition et nous donne les bonnes inforamtions.
$ wget http://downloads.sourceforge.net/project/unhide/unhide-20110113.tgz $ tar xzvf unhide-20110113.tgz $ cd unhide-20110113 $ gcc --static unhide.c -o unhide $ gcc --static unhide-tcp.c -o unhide-tcp $ gcc -Wall -O2 --static -pthread unhide-linux26.c -o unhide-linux26
On se retrouve directement les exécutables sous la main. Ils sont 3 : unhide, unhide-linux26 et unhide-tcp.
Commençons par unhide tout court. Cet outil est destiné à démasquer les processus cachés.
Un premier run nous renvoie les options à fournir pour que cela fonctionne :
# unhide Unhide 20110113 http://www.unhide-forensics.info usage: unhide proc | sys
Très succint, n’est-ce pas ? Clair aussi : proc pour lister les processus cachés en utilisant la comparaison entre ps et /proc, et sys pour comparer ps avec les informations issues des appels système.
# unhide proc Unhide 20110113 http://www.unhide-forensics.info [*]Searching for Hidden processes through /proc scanning Found HIDDEN PID: 762 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 763 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 764 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 1749 Command: auditd Found HIDDEN PID: 3199 Command: dsmcad Found HIDDEN PID: 3200 Command: dsmcad [...]
Voyons ce que ça donne pour sys. Personnellement, j’ai complète correspondance pour sys et pour proc.
# unhide sys Unhide 20110113 http://www.unhide-forensics.info [*]Searching for Hidden processes through getpriority() scanning Found HIDDEN PID: 762 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 763 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 764 Command: /usr/sbin/console-kit-daemon [...] [*]Searching for Hidden processes through getpgid() scanning Found HIDDEN PID: 762 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 763 Command: /usr/sbin/console-kit-daemon Found HIDDEN PID: 764 Command: /usr/sbin/console-kit-daemon [...]
Pour les modes plus intensifs, il faut utiliser unhide-linux26 avec l’option adéquate. La liste des modes et des options est tout de suite plus conséquente comme on peut le voir.
# unhide-linux26 Unhide 20110113 http://www.unhide-forensics.info Usage: unhide-linux26 [options] test_list Option : -V Show version and exit -v verbose -h display this help -m more checks (available only with procfs command) -r use alternate sysinfo test in meta-test -f log result into unhide.log file Test_list : Test_list is one or more of the following Standard tests : brute proc procall procfs quick reverse sys Elementary tests : checkbrute checkchdir checkgetaffinity checkgetparam checkgetpgid checkgetprio checkRRgetinterval checkgetsched checkgetsid checkkill checknoprocps checkopendir checkproc checkquick checkreaddir checkreverse checksysinfo checksysinfo2
Par exemple, avec l’option brute :
# unhide-linux26 brute Unhide 20110113 http://www.unhide-forensics.info [*]Starting scanning using brute force against PIDS with fork() [*]Starting scanning using brute force against PIDS with pthread functions Found HIDDEN PID: 21443 " ... maybe a transitory process"
Autre exemple avec reverse :
# unhide-linux26 reverse Unhide 20110113 http://www.unhide-forensics.info [*]Searching for Fake processes by verifying that all threads seen by ps are also seen by others
Un bon compromis est de tourner unhide proc et si problème ou résultats étranges, lancer sa version approfondie agrémentée de la liste de tests qui va bien :
# unhide-linux26 procall checkbrute checkchdir checkgetaffinity checkgetparam checkgetpgid checkgetprio checkRRgetinterval checkgetsched checkgetsid checkkill checknoprocps checkopendir checkproc checkquick checkreaddir checkreverse checksysinfo checksysinfo2 Unhide 20110113 http://www.unhide-forensics.info [*]Searching for Hidden processes through /proc stat scanning [*]Searching for Hidden processes through /proc chdir scanning [*]Searching for Hidden processes through /proc opendir scanning [*]Searching for Hidden thread through /proc/pid/task readdir scanning [*]Searching for Hidden processes through getpriority() scanning [*]Searching for Hidden processes through getpgid() scanning [*]Searching for Hidden processes through getsid() scanning [*]Searching for Hidden processes through sched_getaffinity() scanning [*]Searching for Hidden processes through sched_getparam() scanning [*]Searching for Hidden processes through sched_getscheduler() scanning [*]Searching for Hidden processes through sched_rr_get_interval() scanning [*]Searching for Hidden processes through kill(..,0) scanning [*]Searching for Hidden processes through comparison of results of system calls [*]Starting scanning using brute force against PIDS with fork() Found HIDDEN PID: 28354 " ... maybe a transitory process" Found HIDDEN PID: 28604 " ... maybe a transitory process" Found HIDDEN PID: 28610 " ... maybe a transitory process" [*]Starting scanning using brute force against PIDS with pthread functions Found HIDDEN PID: 24819 " ... maybe a transitory process" [*]Searching for Fake processes by verifying that all threads seen by ps are also seen by others [*]Searching for Hidden processes through comparison of results of system calls, proc, dir and ps [*]Searching for Hidden processes through sysinfo() scanning [*]Searching for Hidden processes through sysinfo() scanning
L’outil unhide-tcp, quant à lui, s’attache plus à découvrir quels sont les ports TCP et UDP qui auraient été « oubliés » par netstat.
# unhide-tcp Starting TCP checking Starting UDP checking
Dans le cas où vous avez un peu quelques ports qui sont ouverts mais cachés à netstat, vous aurez quelque chose du genre :
Bien entendu, si vous tournez en user simple, tous les ports seront listés vu que netstat ne vous permet pas de tout voir :)
Starting TCP checking Found Hidden port that not appears in netstat: 1021 Found Hidden port that not appears in netstat: 1022 Starting UDP checking Found Hidden port that not appears in netstat: 1021 Found Hidden port that not appears in netstat: 1022
Au final, unhide est un set complet qui trouve facilement une place dans les outils. Bien pour les paranoïaques mais également pour ceux qui veulent vérifier ce qu’il en est exactement. A conjuguer avec temps, outils complémentaires, skills et à volonté !