Welcome to Coding : Sécurité Programmation Réseaux

Search   in  

 Create an Account Home | Submit News Your Account Content | Topics | Top 10  


Accueil
· Home
· Listing des Articles
· Top 10
· Repository des Exploits

Les sujets / parties
· C / C ++
· Visual Basic
· Asm
· Reseaux
· Java
· Securite
· Divers

Utile
· Listing des Articles

· Telecharger
· Le Forum
· Liens
· Proposer un article

Top20 des Downloads
· 1: Etude des reseaux generalites et protocoles
· 2: Cheval de troie en VB avec sources
· 3: Netcat 1.1
· 4: Keylogger
· 5: Etudes des reseaux hauts debits architectures et protocoles
· 6: Ecoute de port
· 7: Etude du Smart Spoofing
· 8: Win Packet Capture Utils
· 9: Tutorial on Traffic Interception on Switched Lan using ARP spoofing
· 10: Cours de C

User Info
Welcome, Anonymous
Nickname
Password
(Register)
Membership:
Latest: trapcodien
New Today: 1
New Yesterday: 0
Overall: 2207

People Online:
Visitors: 42
Members: 1
Total: 43

Online Now:
01: trapcodien

  
Les rootkits noyaux
Posted on Sunday, January 16 @ 23:47:01 CET
Topic: Linux
Linux

	Cet article se focalise sur les rootkits noyaux et comment ils seront
influencés pas les backdoors dite "normales" dans le futur. Les rootkits
noyaux sont présents depuis quelques temps, et ils le seront encore dans le
futur, ainsi quelques idées et perspectives vaudront le coup.

Kernel Rootkit Experiences --Traduit par dicagem[degenere-science] --stealth --[ Contenu 1 - Introduction 2 - Sick of it all? 3 - Let it log 4 - Let it rock 5 - Thinking about linking 6 - as in 2.6 7 - Last words & References --[ 1 - Introduction Cet article se focalise sur les rootkits noyaux et comment ils seront influencés pas les backdoors dite "normales" dans le futur. Les rootkits noyaux sont présents depuis quelques temps, et ils le seront encore dans le futur, ainsi quelques idées et perspectives vaudront le coup. Avant de lire cet article, vous devriez lire les articles sur les hooks netfilter et le relink de lkm. L'implémentation de la backdoor dont je parle et certains bouts de code se baseront dessus. Ne prenez pas trop cet article au sérieux, si on lit entre les lignes, on se rend compte que ce n'est pas un tutorial de piratage. Je dis juste que j'ai de l'expérience en tant "qu'auteur d'adore" ces dernières années. Cela sera destiné aux admins vexés dans les conférences, questions idiotes lors de discours, mails d'appel à l'aide, messages du genre "adore sucks" sur IRC, remerciements de sites en .edu etc. Les rootkits, et les rootkits noyaux en particulier, sont disponibles depuis quelques années maintenant, et quelques recherches ont été effectués la dessus. Beaucoup de chialeurs et encore plus de baratineurs se font publier de temps à autre, mais ils sont peu intéressants et je vous comprenderais si vous ne lisez pas plus d'articles à propos des rootkits. Cependant, de nouveaux obstacles sont apparus et les auteurs de rootkit doivent s'y interesser. Cela inclut de manière non exhaustive -nouvelles versions de noyaux et extensions propri‚taires -absence de symboles importants (… savoir sys_call_table) -logging avancé et mécanismes d'audits -durcissement du noyau, OS sécurisé etc -détection d'intrusion/détection de comportement anormal -outils avancés de "forensic" et méthodes d'analyse Pendant que je m'occupe de certains de ces points dans adore-ng,par exemple comme éviter l'utilisation de sys_call_table[] par la redirection du la couche VFS, quelques points sont encore des sujets de recherche. Les rootkits incluent habituellement des log-cleaners pour les fichiers [u,w]tmp, mais cela coince avec la règle du "moindre privilège" du pirate, qui se transforme en "moindre upload vers le système". Donc, un point est d'essayer d'éviter tout log, au niveau de la backdoor (niveau LKM dans notre cas) pour avoir le minimum de binaires sur le système cible. Les choses sur les systèmes "surs" devront être expliquées dans un article à part, et je sais déja quel partie du kernel je vais regarder chez spender. --[ 3 Let it log Durant un discours à propos de rootkits dans une certaine université par une société d'analyse, j'ai eu quelques idées sympatiques qui pourraient améliorer l'invisibilité. Aujourd'hui, les mecs maitrisants ne patch probablement plus de binaire de sshd, mais placent des systèmes d'authentification à certains endroits (oui, des mécanismes d'authentification distribués peuvent être mauvais pour les analyseurs). Donc, un intrus qui va utiliser des outils standards (il peut aussi installer ultérieurement des librairies et paquetages si ceux-la manquent; sais-tu lequel des 3 admins a installé le paquetage openssh sur le pc-5073 ?) le rootkit LKM a d'une façon ou d'une autre à s'assurer que les logs de sshd partent vers /dev/null. On peut le faire comme ça : static int ssh(void *vp) { char *a[] = {"/usr/bin/perl", "-e", "$ENV{PATH}='/usr/bin:/bin:/sbin:/usr/sbin';" "open(STDIN,'/dev/null');" "open(STDERR,'>/dev/null');" "exec('sshd -e -d -p 2222');", NULL}; task_lock(current); REMOVE_LINKS(current); list_del(¤t->thread_group); evil_sshd_pid = current->pid; task_unlock(current); exec_usermodehelper(*a, a, NULL); return 0; } Cela ressemble … ce qui pourrait s'appeler un kernel_thread() par un hook netfilter, hein ? "-e" fait logger sshd vers stderr qui est /dev/null dans notre cas. Excellent. "-d" est un argument sympa qui empèche sshd de fork et donc il n'y pas pas de ports ouverts qui pourraient être détectés après le login de l'intrus. REMOVE_LINK() permet au process d'etre invisible face à ps et ses amis. Utiliser perl est n‚cessaire pour ouvrir stdin etc car exec_usermodehelper() va fermer tous les fichiers avant de lancer sshd qui fait faire confondre … sshd stderr avec la socket quand il est lancé avec -e. Le log de utmp/wtmp/lastlog peut être empèché grâce à: // parent must be evil sshd (since child which becomes the shell // logs the stuff) if (current->p_opptr && current->p_opptr->pid == evil_sshd_pid && evil_sshd_pid != 0) { for (i = 0; var_filenames[i]; ++i) { if (var_files[i] && f->f_dentry->d_inode->i_ino == var_files[i]->f_dentry->d_inode->i_ino) { task_unlock(current); *off += blen; return blen; } } } Cela fait comme si le logu‚ est sshd et qu'il essayait d'écrire dans des entrées dans [u,w]tmp dans les fichiers appropriés. Bien sur nous devons rediriger la fonction write() dans la couche VFS et vérifier les numéros inode pour filtrer les bonnes écritures. En effet, nous devons vérifier le superblock aussi, mais sshd ne vas pas écrire des fichiers avec le même inode sur un disque différent je pense. Certains modules pam ouvrent une session quand quelqu'un se logge, donc un pam_unix2: session started for user root pourrait apparaitre dans le log même avec le sshd modifié avec la redirection de log. Ainsi, le problème du log pourrait être résolu dans les futurs backdoors/rootkits sans mettre la pagaille dans les binaires du système. --[ 4 Let it rock Celui-ci a besoin d'un argument pour faire démarrer le sshd modifié, donc nmap ne montre pas de ports ouverts. Bien sur. L'article sur netfilter montre comment on peut construire ses propres hooks icmp pour cela. Je ne vais pas décrire cela ici, l'article le fait mieux que je ne le pourrais. Juste un point important: d'après mon expérience, vous ne pouvez pas d‚marrer un programme dans le hook directement. Le noyau va crasher, probablement parce que le hook a, d'une manière ou d'une autre, interfèré avec une routine de service interrompu. Pour venir à bout de ce problème, nous fixons un flag pour que le sshd d‚marre: if (hit && (hit-1) % HIT_FREQ == 0) { write_lock(&ssh_lock); start_ssh = 1; write_unlock(&ssh_lock); return NF_DROP; } et puisque nous interférons avec la couche VFS dans tous les cas, nous redirigeons aussi l'appel d' open() (du FS particulier que /etc contient) donc le prochain processus qui ouvre un fichier sur le même FS qui démarre le sshd modifié. Cela pourrait être un "ls" du root, ou que nous déclenchons par nous-mêmes, via le vrai sshd qui tourne: root@linux:root# telnet 127.0.0.1 22 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. SSH-2.0-OpenSSH_3.5p1 SSH-2.0-OpenSSH_3.5p1 --[ 5 Thinking about linking Voila un article sur le LKM infection, merci de le lire, il vaut le coup d'y passer le temps. Pourtant, on ne doit pas trop bidouiller avec avec le format ELF, un simple mmap() avec une substitution du init_module() et du cleanup_module() suffira. Un tel programme devrait faire partie d'un rootkit, car les rootkits doivent être facile à utiliser, donc ils peuvent être facilement installés par des admins qui installent des honeypots: root@linux:zero# ./configure Starting configuration ... generating secret pattern ... x37x8ex37x5f checking 4 SMP ... NO checking 4 MODVERSIONS ...NO Votre commande ping secrète : ping -s 32 -p 378e375f IP root@linux:zero# make cc -c -I/usr/src/linux/include -DSECRET_PATTERN="x37x8ex37x5f" -O2 -Wall zero.c cc -c -I/usr/src/linux/include -DSECRET_PATTERN="x37x8ex37x5f" -O2 -Wall -DSTANDALONE zero.c -o zero-alone.o cc -c -I/usr/src/linux/include -DSECRET_PATTERN="x37x8ex37x5f" -O2 -Wall cleaner.c root@linux:zero# ./setup Les LKM suivants sont disponibles : af_packet ppp_async ppp_generic slhc iptable_filter ip_tables ipv6 st sr_mod sg mousedev joydev evdev input uhci usbcore raw1394 ieee1394 8139too mii scsi cd cdrom parport_pc ppa Chose one: sg Choice was >>>sg--[ 6 as in 2.6 Au moment de l'écriture de l'article, le noyau Linux 2.6 était encore en phase de tests, et sera bientôt disponible en version stable. Donc, il est probablement temps de regarder les nouveaux bugs. Au [4], vous trouverez une version d'adore-ng qui marche déja avec le 2.6. En plus des quelques nouveaux headers dont le rootkit aura besoin, les signatures de quelques fonctions vont être modifiées. Une chose pas inhabituelle. Pas trop difficile. En particulier la fonction init et cleanup doit être annoncée au lanceur de LKM d'une façon différente: #ifdef LINUX26 static int __init adore_init() #else int init_module() #endif et static void __exit adore_cleanup() #else int cleanup_module() #endif ... #ifdef LINUX26 module_init(adore_init); module_exit(adore_cleanup); #endif Pas de grosses différences. Adore-ng utilise déja la nouvelle technique VFS pour cacher les fichiers et les processus, donc nous n'avons pas à nous occuper de la couche sys_call_table. La partie qui prend la plus de temps pour portel adore sur le noyau 2.6 est de trouver comment les LKM sont batis. Cela ne suffit plus de les "cc" comme un simple ficher objet. On doit les relier avec d'autres fichiers objets compilés avec un fichier C contenant certaines informations et attributs comme MODULE_INFO(vermagic, VERMAGIC_STRING); par exemple. Je ne sais pas pourquoi ils dépendent de cela. Et c'est tout pour le 2.6 ! Pas magique du tout, excepté quelques hooks introduits dans le noyau qui mériteraient un coup d'oeil. --[ 7 Last words & references Le rootkit zero ne cache pas de fichiers, et il cache uniquement le processus sshd modifi‚ en l'enlevant de la liste des taches. Ce n'est pas judicieux de stopper le système depuis un processus ou son fils. J'ai testé zero sur un système SMP mais il a gelé. Peu importe que cela vienne de mon code ou de l'option -f de insmod que j'ai du utiliser à cause d'une différence de version. Si quelqu'un peut me donner (légalement bien sur !) accès à une box SMP, contactez la team de phrack ou moi même. Zero est expériemental, donc merci de ne pas me dire que vous ne l'aimez pas car il manque une interface graphique ou autre chose. Quelques liens: [1] Infecting Loadable Kernel Modules (in this release) [2] Hacking da Linux Kernel Network Stack (in this release) [3] http://stealth.7350.org/empty/zero.tgz (soon appears at http://stealth.7350.org/rootkits) [4] http://stealth.7350.org/rootkits/adore-ng-0.24.tgz |=[ EOF ]=---------------------------------------------------------------=|

 
Liens connexes
· Plus à propos de Linux
· Nouvelles transmises par Romain_Le_Guen


L'article le plus lu à propos de Linux:
Tutoriel Partage de Fichier avec Samba sous debian / mandrake


Article Rating
Average Score: 0
Votes: 0

Please take a second and vote for this article:

Excellent
Very Good
Good
Regular
Bad


Options

 Format imprimable Format imprimable


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Page Generation: 0.54 Seconds