Web-addict

Créer un bot-spam ou un virus en C, partie I : un peu de théorie.

10 Comments 12 mai 2010

Créer un bot-spam ou un virus en C, partie I : un peu de théorie.

Ce premier billet sur la création d’un robot spam en C va poser les bases de ce que j’appelle « les connaissances réseaux fondamentales » qui sont PASSIONNANTES si vous êtes un peu axé geek et web.

Vous comprendrez comment fonctionne la majorité des robots (qu’ils soient gentils ou méchants), vous comprendrez aussi comment se déploient les virus sur vos ordinateurs.
Nous parlerons aussi du principe de Firewalls (Pares-feu) que beaucoup installent et utilisent sans en comprendre réellement l’intérêt.

« Depuis le temps qu’on te parle de HTTP, il serait temps de comprendre enfin de quoi il s’agit ! »

On entend constamment parler de HTTP, de FTP, d’IRC etc. sans forcément comprendre de quoi il s’agit vraiment, techniquement parlant. La notion de protocole est une notion clef dans le domaine de la programmation réseau, qu’il faut absolument avoir en main. Quelques explications et un schéma devrait faire l’affaire !

Un protocole, c’est un ensemble de règles et de contraintes à respecter pour permettre à deux choses de communiquer entre elles. Souvent, les deux choses sont un client et un serveur.

Cas concret : vous êtes le client quand vous utilisez Firefox pour accéder à une page web. Firefox discute avec le serveur web que vous sollicitez (par exemple celui de Mangetamain.fr quand vous venez ici) pour lui demander poliment l’accès aux pages qu’il hébèrge.

Si Firefox communiquait comme ça avec le serveur web, ça ne collerait pas entre eux. Du coup, Firefox s’applique à utiliser un langage bien précis, qui respecte les règles fixés par le protocole HTTP.

Vous venez de comprendre la notion de protocole ! <:o)
Un protocole permet à l’application client (navigateur web, client FTP…) de communiquer en bonne et due forme avec l’application serveur. (serveur web, serveur FTP….)

SOCKKKKKKKET, SOCKET !!! (#donjondenaheulbeuk)

En vrai, Firefox et le serveur web ne se parlent pas comme dans une bande dessinée. Pour communiquer entre eux, ils utilisent un tuyau qu’on appelle un socket :

C’est le tuyau orange qu’on appelle un socket. C’est la route entre le client et le serveur. Sans socket, pas de communication possible !

Que va faire notre programme de spam-flood ?

Notre programme de spam va créer un socket entre votre ordinateur et le serveur qui héberge le formulaire à spammer. Ensuite, il enverra une requête HTTP au serveur. Cette requète permettra de remplir et de valider le formulaire autant de fois que l’on veut. (1000 fois, 2000 fois…. c’est le principe du spam!)

Le requête, à l’intérieur du socket, est écrite « en français » sur ce schéma. Il existe évidement une syntaxe bien particulière, propre au protocole HTTP, pour demander à un serveur de valider un formulaire. C’est une requête HTTP de type POST, nous verrons ça dans le prochain billet.

Comprendre la notion de « port » : primordial pour créer un virus et s’en protéger au mieux.

En fait, avant de créer un socket entre un client et un serveur, il faut être sûr que le serveur accepte de communiquer via ce socket avec des clients.

Quand un client « branche » le tuyau (le socket) sur le serveur, il ne le branche pas n’importe où sur ce serveur. Il le branche sur un port.

Si le client utilise le protocole FTP pour discuter avec un serveur FTP, alors il branchera son socket sur le port 21. C’est comme ça, c’est une convention. Si le client utilise le protocole HTTP pour discuter avec un serveur web, alors il branchera son socket sur le port 80.

Chaque serveur peut communiquer au maximum par l’intermédiaire de 65535 ports. Le schéma ci-dessus ne prend en compte que 3 de ces 65535 ports; ces 3 ports sont d’ailleurs bien connus:

  • Le port 80  permet généralement de communiquer par le protocole HTTP. (serveur web)
  • Le port 21  permet généralement de communiquer par le protocole FTP. (serveur FTP)
  • Le port 6667  permet généralement de communiquer par le protocole IRC. (serveur IRC)

Dans notre exemple, les port 80 et 21 sont ouverts : on peut donc configurer un serveur FTP et un serveur web sur notre serveur, la communication avec les clients sera possble.

Par contre le port 6667 étant fermé, il est impossible d’installer un serveur IRC sur notre serveur. Pourquoi ? Car lorsqu’un client essaiera de se connecter depuis son client IRC sur le port 6667 pour communiquer avec le serveur, il sera bloqué.

On en vient au virus. Un virus, ça fait quoi ?

Il existe au moins deux types de virus :

  • Le premier type : les virus barbares qui agissent directement sur votre système sans aucune intervention humaine. (ex : suppression de données etc.) Ces virus là ne nous intéresseront pas.
  • Le second type : les virus type trojan (chevaux de Troie) qui vivent grâce à leurs créateurs. Si personne n’est derrière le trojan pour en faire usage, ce virus est complètement inutile. Un trojan prend possession de votre ordinateur et exécute, derrière votre dos, des programmes malicieux. (Ex : un trojan utilise votre ordinateur pour spammer des sites, pour saturer des serveur, pour héberger du contenu pédopornographique etc.)

Lorsque le cheval de Troie est installé sur votre ordinateur, le hacker communique avec lui par l’intermediaire de sockets. En créant un socket entre son ordinateur et le votre, le hacker peut commander son trojan et recevoir des informations vous concernant (numéro de CB que vous tapez par exemple, etc.) ou lui donner des ordres (« Trojan, spam ce site ! »)

Si vous avez compris le schéma plus haut sur les ports, vous avez du saisir l’intérêt d’utiliser un pare-feu : en contrôlant l’accès aux ports de votre machine, vous contrôlez les flux d’entrée et de sortie et vous évitez ainsi le risque de cheval de Troie. Si le hacker ne peut pas créer de socket entre vous et lui parce que tous vos ports sont fermés, alors vous êtes sauvé(e) !

Pour savoir si des ports sont ouverts sur un ordi ou un serveur, il existe des snifer de ports : vous donnez une adresse IP au sniffer et il vous dit quels ports sont ouverts sur la connexion en question. Sniffez-vous si vous ne savez pas trop où vous en êtes ! Par défaut, il me semble que la majorité des box (livebox, freebox etc) bénéfice d’un pare-feu complètement clôt.

Si vous avez compris l’intégralité de cet article, vous avez déjà acquis une connaissance solide des conversations clients<->serveurs. Il ne vous reste plus qu’à apprendre à manipuler les sockets en C (ou en n’importe quel autre langage!) et vous voila devenu un vilain hacker (joke of course!!)

Si vous avez des questions, des suggestions ou toutes autres demandes : n’hésitez-pas ! Je serai ravi de recevoir, dans les commentaires, vos réactions « Ã  chaud » sur cet article.

Dans le prochain article, nous débuterons la programmation du bot-spam en C. Les mains dans le cambouis, c’est pour la prochaine fois ! Soyez prêt(e)s !

Si tu as encore faim, tu peux lire ça :

Et n'oublie pas de me retrouver sur Twitter, Facebook et dans tes RSS !

Vos commentaires

10 Commentaires

  1. Arnaud dit :

    Sympa, j’attend avec impatience la suite !

  2. Crunch dit :

    Vivement la partie deux ;)

  3. Vince dit :

    Merci pour ce nouvel article aussi passionnant que le précédent, quoique un peu court. Nous informer de manière aussi plaisante, c’est trojantil (c’est pourri, mais fallait que je la place).

  4. Stéphane dit :

    Merci beaucoup pour vos commentaires !

    @Vince : JOLI. :-D

  5. Stéphane dit :

    Ah, et si ce billet est court, c’est parce qu’il est très théorique et que je n’ai pas tellement envie de faire de longs billets théoriques. La pratique, c’est plus rigolo!

  6. Hydrog3n dit :

    Pas mal les images d’explication c’est très résumé au stricte minimum mais j’aime beaucoup mes mains sont déjà chauffé pour faire du codage :D
    Si non tu n’a pas trop expliqué le fonctionement de notre spammer ! A tu pensé a le faire pour le prochain article ?
    Merci encore :D

  7. Stéphane dit :

    Le principe du spammer est expliqué avec le dessin du bonhomme et de sa tronçonneuse ! Je n’en dis pas plus pour le moment, cet article était assez général et concernait simplement la base des connaissances à avoir avant de commencer le code.

    Le prochain article sera uniquement sur le botspam!

  8. Hydrog3n dit :

    Oky :D alors j’attend avec impatience :p

  9. Raphael dit :

    J’adore ce genre d’articles, ultra détaillés et qui rendent super simples des choses parfois super compliquées :)
    J’attends comme tous les autres avec impatience la 2eme partie!


Poster un commentaire

 

 

Suivre les commentaires de ce billet par mail. 

© 2010 MANGE TA MAIN !. Powered by Wordpress.