Journal kernel internal call hijacking

Posté par  .
Étiquettes : aucune
0
29
juil.
2004
Cher journal:
Je programme actuellement un module kernel qui devrai permettre de pouvoir établir un certain nombres de statistiques sur l'utilisation du clavier ( nombre de touches enfoncés, statistiques sur les heures etc .... MAIS pas un keylogger, hein... ).
Après avoir étudier les différentes possibilité, j'en suis venue a la conclusion qu'il fallait hijacker la fonction getkeycode qui est un appel interne: j'ai donc utilisé un technique similaire à http://www.u-e-b-i.com/silvio/kernel-hijack.txt(...) ( doc ancienne...) mais je n'arrive pas faire fonctionner mon code ( http://fv.kh3.org/kklog.c(...) ).
Je sais que cette technique est réputé dangereuse et que nombre de développeurs kernel estiment qu'il y a toujours un autre moyen mais est ce que qqun a deja implémenter l'hijacking d'appel interne avec un kernel 2.6 ?


PS: ( le kernel utilisé est un 2.6.7 sans patch ou LSM)
  • # try a shot to www.kernsh.org

    Posté par  . Évalué à 1.

    Tu pourras peut être y trouver quelque chose de bien :)

    Caeies,

    (Indice : il faut patienter encore un peu pour voir la nouvelle mouture, si j'en crois certaines indiscretions)
    • [^] # Re: try a shot to www.kernsh.org

      Posté par  . Évalué à 1.

      hum seul souci effectivement c'est le 2.6, ça va être plus compliquer.

      Mea culpa (ou alors il faudra attendre un peu plus longtemps.)

      Caeies
  • # Quelque piste....

    Posté par  . Évalué à 2.

    Je suis pas un pro de ce que tu veux faire mais
    qu'est ce que tu entend par ca marche pas ?
    tu crash tout ?
    ton code d'interception n'est pas appellé ?

    deux petite chose sans rapport peut etre
    --printk("Key pressed (kkmod)\n")
    il m'as toujours semble qu'il fallait indiquer un niveau d'alerte
    a printk
    printk("<1>Key pressed (kkmod)\n")
    par exemple.

    --*(long *)&gkk_code[1] = (long)mygetkeycode;
    dans ton contexte tu mets un long destiné a un jmp assembleur dans un tableau de char. C'est possible qu'ici tu ait un pb d'alignement memoire dans le rangement de tes variables, tu devrais jeter un coup d'oeil dans l'assembleur pour voir si c'est compiler exactement comme tu veux qu'il soit dans le resultat final.

    Voila, fin de mes 2 question de candide
    • [^] # Re: Quelque piste....

      Posté par  . Évalué à 1.

      Mon code compile (avec http://fv.kh3.org/kklog.c(...)) mais la fonction de remplacement n'est pas appelée.
      Ce qui est étrange c'est que je n'ai aucun plantage et que le prink de la fonction _memcpy affiche bien l'addresse trouvé dans le System.map qui vas bien.
      • [^] # Re: Quelque piste....

        Posté par  . Évalué à 3.

        ca demande donc du debuggage la.

        1) mets ton printk dans les sources du kernel pour verifier que getkeycode est bien utilisee de temps en temps dans le kernel

        2)pour info chez moi j'ai
        grep -i getkeycode /boot/System.map
        getkeycode
        pckbd_getkeycode
        si tu as un truc similaire as tu essaye de surcharge ton pckbd_getkeycode ?
        d'apres le nom je dirais bien
        PC no comment
        KBD keyboard
        _getkeycode
        soit une fonction directement liée a mon clavier en l'occurence

        3)fais un printk du tableau gkk_code dans l'initmodule pour voir si le codage asm est correct.
        apres le
        *(long *)&gkk_code[1] = (long)mygetkeycode;
  • # ...

    Posté par  . Évalué à 2.

    pour le clavier c'est pas trop dur de compter le nombre de touches pressés : y a cas compter le nombres d'interuptions dans /proc/interupt

    Sinon faut regarder comment d'autres modules hijack le kernel 2.6(je crois que le module poubelle pour linux y arrive)...
    • [^] # Re: ...

      Posté par  . Évalué à 1.

      Je n'ai pas trouver d'exemple de ce type dans les sources du kernel et je ne pensse pas qu'il y en ai car a peut pres tout le monde est contre cette technique.
      • [^] # Re: ...

        Posté par  (site web personnel) . Évalué à 1.

        Salut,

        Tu ne peux pas tout simplement (concernant les frappes de touches au clavier) regarder quelle fonction est enregistrer dans l'idt et aller à cette fonction, ajouter ta fonction de statistique où il faut et le tour est joué.

        Bon un conseil: cherches : "lidt" ;()

        -- Christophe
  • # ca marche!

    Posté par  . Évalué à 1.

    Pour information , j'ai reussi a fair fonctioner le module en "hijackant" la fonction kbd_keycode.
    Tout ce passe comme il faut le chargement du module et son déchargement ne posent pas de probleme en particulier.
    La technique présenté sur http://www.u-e-b-i.com/silvio/kernel-hijack.txt(...) appliqué sur un kernel 2.0 dans la doc fonctione sur le kernel 2.6.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.