Contrairement à ce qu'on dit, créer des logiciels malveillants sous Linux est d'une simplicité enfantine. La sécurité d'un système ne repose pas sur le nombre de barrière qu'il peut vous placer mais sur la capacité des utilisateurs à avoir du recul sur leur machine.
Voici donc les cinq étapes pour créer un petit cheval de troie sur Linux. Rien d'exceptionnel, beaucoup d'autres l'ont fait avant moi, cet article est entièrement à but pédagogique.
1. Installation
C'est sans doute sur ce point que l'on pourrait imaginer les systèmes Linux plus fiables que les systèmes Windows : dans la plupart des cas les logiciels malveillant sous Linux sont installés par l'utilisateur, et non à son insu. Pas beaucoup de possibilités pour injecter dans des 0day présents sur des programmes Linux, ils sont rapidement patchés. Quoique.
Non, l'installation viendra certainement de l'utilisateur. On l'aidera un peu ceci dit. Le type d'installation déterminera le champ d'action et la capacité de dissimulation du trojan
. Même si on ne peut pas vraiment parler de rootkit pour un programme lancé en zone utilisateur, on peut faire un excellent cheval de troie ou un keylogger
sympa avec de simples privilèges utilisateur.
Que vous prêtiez votre session l'espace de dix minutes ou que vous cliquiez benoîtement sur un joli fichier-image-qui-en-est-pas-un, le résultat sera plus ou moins le même : le programme s'installera, première étape franchie.
Où il s'installera ? Ça dépend. S'il est root
, le programme prendra ses aises dans les coin reculés de /proc
ou /lib
, là où vous n'irez pas le chercher. S'il est utilisateur, il se chargera quelque part dans un .machinchose
, les fichiers cachés présents dans votre dossier utilisateur.
2. Démarrage
Avoir un fichier malveillant sur son ordinateur (à des fins purement scientifiques), ça arrive à tout le monde. Mais que celui-ci devienne létal en se lançant avec votre session, ça c'est une autre affaire. Comme sous Windows, il n'y a aucune difficulté à lancer un programme avec la session ou dans les services.
Pour les services, un petit patch dans /etc/rc.d/
ou /etc/rc.local
et vous êtes partis pour la rigolade.
Pour les programmes utilisateur, une petite retouche dans .xsessionrc
, le .login
, ou le fichier de démarrage de votre environnement (gnome, kde, etc) fera amplement l'affaire.
3. Dissimulation
Un trojan, si on le trouve c'est pas drôle, alors il faut le cacher un peu. Les fichiers cachés c'est bien pour un utilisateur lambda, mais pour un administrateur système il faudra trouver mieux. Quoique.
Les programmes qui se dissimulent le mieux sont des programmes qui se sont installés en root. Forcément, pour ce genre de programme, patcher le noyau pour se rendre invisible, modifier la commande "top" ou recompiler et installer ses propres paquets patchés est l'enfance de l'art, mais un programme utilisateur peut lui aussi installer sa petite mécanique secrète.
Par exemple, il peut modifier le PATH
de l'utilisateur pour remplacer les programmes systèmes par les siens (genre ps, top, ou les outils de diagnostique réseau), trafiquant alors les sorties des programmes légitimes pour se rendre invisible.
4. Collecte d'informations
Là on pourrait penser que le système le plus sécurisé du monde empêche les application illégitimes de collecter des informations. En fait non.
Si vous êtes root, vous avez de toute façon accès à toutes les entrées et sorties que vous voulez.
Si vous êtes un programme utilisateur, vous avez accès aux informations que l'utilisateur soumet, ce qui et déjà largement suffisant pour lui voler ses mots de passe. Outre aller farfouiller dans les .config
et les .mozilla,
le gentil programme peut aussi profiter du mécanisme vieillissant fourni par le serveur graphique X, et capturer n'importe quelle frappe de touche en silence (si, si...).
5. Communication avec l'extérieur
Créer un tunnel réseau sous Linux est enfantin en utilisant un langage de haut niveau comme Python. Pour les autres, quelques read
avec des socket
fera amplement l'affaire. Le point délicat ici est le chiffrement. C'est toujours délicat d'implémenter une couche SSL sur les programmes. Une alternative est l'alternance entre un masque jetable et un décalage de bits, chacun d'une taille suffisante pour tromper le newbie qui snifferait des trames réseau à la recherche de ce qui fuite.
Conclusion
La création de programmes malveillant sous GNU/Linux est accessible à un élève de seconde année de licence Informatique, c'est à dire pratiquement n'importe qui. N'oubliez pas que ce que vous pouvez faire sur votre ordinateur, n'importe quel programme qui s'exécute avec vos droits d’utilisateur peut lui aussi le faire (skype ?).