Hacking processus
have fun (16/10/2K)
"Pas tout mais beaucoup"
cinac






Rappelons brievement que le hacking c'est l'intrusion dans un système ou dans un groupe de systèmes (réseaux). Cette intrusion ne pourra se faire qu'avec une bonne connaissance de ces systèmes quelle que soit leur particularité. Venons en maintenant directement à ce qui nous interresse: Le processus de hack, autrement dit l'enchainement des actions amenant à l'obtention des privilèges administrateur sur un système.

  _______________
_/  1ere partie  \_________________________________________

Les intrusions de hackers sur des systèmes sont dues à plusieurs causes. Je vais en distinguer deux majeures.
- Les bugs
- L'administration

* Un bug sur un système, dans un programme ou dans un protocole n'est pas qu'une couille dans celui ci mais represente l'ensemble des choses que l'on ne veut pas qui se passe quand on définit ce système, ce programme ou ce protocole. Si le programme plante alors qu'il ne devrait pas, c'est un bug (généralement, on laisse l'EDF de côté), mais si un utilisateur peut faire quelque chose qu'il ne devrait pas pouvoir faire, c'est également un bug. Un bug crée une situation imprévue et dans certains cas il peut remettre en cause l'intégrité du systeme. Ce bug devient alors une faille. Ces failles peuvent découler d'erreurs de programmations, de négligences de la part des programmeurs, d'idée du secret absolue, de problèmes de compatibilité...

* L'administration et le paramètrage jouent aussi beaucoup car même si un outil a été très bien fait (pas de failles), il ne servira bien le système que si son utilisateur sait l'utiliser et connait ses possibilités. Ses possibilités et les possibilités des hackers. Les problèmes de paramètrage decoulent de plusieurs possibilités. Le manque de volonté d'une entreprise ou d'un administrateur de s'interresser à la sécurité, la trop grande confiance en l'inviolabilité de son système (souvent relegué par la presse et les constructeurs), le manque de temps ou de moyens financiers des entreprises ou encore la mauvaise formation à la sécurité des administrateurs.

Tout systeme cherchant à communiquer se sert de portes qui doivent etre ouvertes sur le systeme lui même et sur celui avec lequel il cherche à établir un contact. Ces portes sont appelées des ports. Ici les ports dont nous parlons n'ont rien a voir avec les ports s& eacute;rie et parallèles mais avec des ports de communications virtuels accessibles par modem ou carte ethernet. Ces ports sont au nombre de 65535 (16 bits).

Ils sont généralement ouverts en arriere plan ce qui fait que nous n'avons pas vraiment à nous en occuper et pourtant ces ports ne sont pas ouverts par le systeme d'exploitation mais par des programmes lancés par celui ci, on les appelle "démons". Ces démons ne se contente pas d'ouvrir un port mais de gérer les connections sur celui ou ceux ci et d'apporter un service. Par exemple, le démon ftpd est le programme qui permet d'ouvrir le port n°21 mais de gérer le transfert de fichiers entre le serveur ou il est lancé et tout systeme s'y connectant.

Les failles interressant les hackers se trouvent en premier lieu sur ces démons mais pas seulement. En effet une ancienne faille sur des démons smtpd (envoi de courrier) était de pouvoir envoyer une requete a ce démon qui lui ordonnait de nous envoyer par mail (car telle etait sa fonction) le fichier contenant les mots de passe. Nous n'aurions pas du pouvoir le faire mais une faille l'a permis. Un tel démon ne peut agir contre son gré que dans une certaine mesure. Il ne peut pas par exemple nous permettre d'envoyer des choses sur le serveur comme pourrait le faire un démon ftpd si une telle existait dessus. Rassurez vous on en découvre regulierement dessus. Prenons maintenant le cas d'un démon httpd (web). Le seul interet d'un hacker dans ce cas n'est pas juste le démon mais aussi les différents programmes qui peuvent l'utiliser. Dans le cas d'un site web comme yahoo où les visiteurs peuvent envoyer des requetes plus complexe que d'aller sur telle ou telle page comme par exemple rechercher tel ou tel site qui parle de hacking, il existe des "robots" qui se chargent de faire ce travail. Ces robots peuvent se presenter de plusieurs manieres, comme des cgi ou des applets java ou encore de l'asp. Ces robots travaillent grace a des ordres qu'on leur donne et comme tous les programmes, des bugs peuvent exister et de ceux ci peuvent découler des failles. Un exemple parmi d'autres, le script cgi phf permettait à une epoque de pouvoir lire tout fichier sur le systeme sur lequel il tournait.

Selon les démons et les services qu'ils offrent, les sécurité les protégeant sont diverses. Un démon httpd ne permettra que d'acceder à certaines pages, un démon ftpd acceptera de transferer certains fichiers grace à un login et un mot de passe mais pas certains autres, d'autres démons commes les rsh n'acceptent de donner de shell qu'à des ordinateurs ayant une certaine IP. En fonction de ces particularités, des techniques d'attaque se sont développées pour exploiter leurs points faibles. Comme le brute force pour forcer les protections par mot de passe en essayant tous les mots de passe (technique de bourrin), le spoofing et le tcp hijacking pour usurper l'identité de quelqu'un et ainsi passer les protections basées sur l'IP...

Bien sûr pour savoir par ou et comment rentrer dans un systeme il faut connaitre les démons et en general les programmes qui tournent sur celui-ci ainsi que toutes les infos succeptibles de vous aider comme le nom des différents utilisateurs, le nombre de systèmes sur le réseaux, les systemes d'exploitation utilisés... C'est la qu'intervient la collecte d'informations. Différentes techniques interviennent alors comme le portscanning pour trouver quels démons tournent sur le systeme ou encore le social engieneering (exploitation de la crédulité des utilisateurs) ou l'utilisation de certains services (que les bons administrateurs ferment) tournant sur le systeme comme systat (port n°11) qui permet de savoir quels processus tournent ou encore finger (port n°79) qui donne le nom des utilisateurs du systeme ainsi que leur shell ou le netstat (n°15) qui permet de voir les connexions en cours... Plus on a d'infos mieux c'est car même si un seul des ordinateurs du réseau vous interresse, il est souvent plus simple d'attaquer d'abord un des ordinateurs de moindre importance du réseau qui est moins securisé et ensuite de la s'attaquer à l'ordinateur convoité car il aura de moins bonne protection contre un ordinateur de son réseau que contre un ordinateur inconnu. On pourra en effet utiliser un sniffer pour voir les mots de passe et les infos passant en clair sur le réseau ou avoir la possibilité de faire des DoS (déconnecter) sur des serveurs internes plus facilement et ensuite pouvoir prendre leur identité (spoof R, tcp hijack, spoof ID dns...). Tout est plus facile une fois à l'interieur du réseau local. En local les attaques en brute force sont cette fois ci nettement plus concevables car la rapidité est beaucoup plus grande sur un intranet 10 ou 100 base T que sur internet avec un 56K ou même avec une T1. Mais cette technique est toujours aussi bourrine je vous rassure ;)

Ceci s'appelle le hack par palier et peut même s'oppérer à l'interieur d'une même système. On s'infiltre en temps que simple user car la faille utilisée ne nous donnait pas le root puis ensuite il faut trouver une autre faille (mais c'est alors nettement plus facile et l'on considere que le plus dur est passé) qui elle nous donnera la root ou du moins le shell d'un utilisateur ayant encore plus de droits... Sur la plupart des systèmes *NIX actuels on ne peut pas se connecter en remote directement avec le compte root mais juste avec un compte utilisateur et ensuite faire un "su root".

Une attaque bien utile (d'ailleurs une des plus utilisées) que j'aborde à la fin de cette premiere partie volontairement car elle est un peu en contradiction avec ce que j'ai dit sur les failles courant sur les démons qui une fois exploitées ne pouvaient utiliser que les services que proposaient ces démons initialement (ex: envois de mail pour smtpd...). Cette technique, appelée buffer overflow permet, grace à un segment executable de la stack, au hacker d'executer sur l'ordinateur un code hexadecimal en assembleur qu'il aura crée. Bien sur un buffer overflow ne peut etre cree et exploité sur un programme que si le ou les concepteurs de ce programme n'ont pas eu connaissance de cette technique ou encore s'ils n'ont pas eu le temps ou la volonté de securiser leur programme contre ce type ou tout type d'attaque ou que sais je encore...

  _______________
_/  2eme partie  \_________________________________________

Toutes les techniques vues précédement sont pour la plupart reservées au remote que ce soit dans ou hors du reseau local qu'il y ait ou non un reseau local d'ailleurs ;) exception faite pour le buffer overflow qui reste un bon moyen de devenir root en local (la je ne parle plus de reseau).

Dans le cas de systeme d'exploitation n'ayant pas de systeme de droit pour les utilisateurs comme le dos ou Win9X vous etes au bout de la course, le systeme est hacké. Mais si le serveur a un systeme de droits (la plupart des serveurs) vous devrez essayer de passer root (ou admin) si ce n'est pas déjà le cas.

Si votre serveur est sous NT il faudra en premier lieu chercher a recuperer les bases SAM et ensuite les decrypter et s'il est sous *NIX il faudra en obtenir le fichier /etc/passwd accessible par tous les utilisateurs quels que soient leurs droits. Bien entendu la plupart des serveurs ont des passwords shadows mais ce serait bête de ne pas essayer, il en reste encore et puis ca vous donnera toujours des noms d'user et s'ils ont acces à un shell, leur home...

Le but est de devenir root mais toujours dans cette quete le key loger est un moyen efficace mais ne vaudra jamais un buffer overflow sur un prog suid. Dites vous que les programmes set-uid le sont parce qu'ils ont besoin de l'ê ;tre par exemple parce qu'ils font des actions sur le systeme comme des gestions de peripheriques. Par exemple un traceroute sera toujours suid car il utilise les raw sockets et d'ailleurs le traceroute sur les SuSE 6.0 à 7.0 est buffer overflowable.

Les failles permettant les buffer overflow sur des programmes tournant en local sont beaucoup plus frequentes que les programmes accessibles en remote, (comme les démons) de par le fait qu'il se doivent d'être plus sécurisés car potentiellement accessibles par tout le monde. C'est entre autre pour cette raison que devenir root sur un systeme ou l'on a deja un shell n'est plus vraiment qu'une formalité (si c un vrai shell et pas un secure shell et pas dans un chroot).

  _______________
_/  3eme partie  \__ _______________________________________

Une fois root ce n'est plus vraiment du hacking vu que tout vous est maintenant possible. Vous pouvez backdoorer, rootkiter, detruire le serveur ou lancer des attaques vers d'autres serveurs, vous en servir en gros comme d'une wingate, proxy ou un bounce ou encore comme base de lancement d'un worm. Ou juste changer la page de garde du serveur web (s'il y en a un) ou encore mettre un message a l'admin "r3Wt me CoCo". En gros vous pouvez faire ce que vous voulez, c'est vous le root. En esperant que vous ne fassiez pas trop de saloperies...

  _______________
_/  4eme partie  \_________________________________________

Maintenant que nous avons vu comment se deroulaient les actions, revenons br ievement sur les techniques cités ci avant. Je ne les détaillerai pas, vous trouverez beaucoup d'articles sur le sujet partout sur le net. Je vais juste rappeler leur fonction, et ce qui les fait fonctionner.

* cgi/asp:
robots gérant des requetes des utilisateurs sur un serveur http et généralement programmé en perl. Au cours de leur histoire ces programmes se sont rendus tristement célèbre pour leurs incroyables failles et les manières très simples de les exploiter. Et même si chacun peut faire ses propres cgi et donc apprendre à les securiser de nouvelles failles sont découvertes tout le temps comme le poison null bit qui fait des ravages en ce moment. La plupart des techniques de hacking visant les cgi ont pour but de renvoyer les fichiers de mots de passe. Il ne reste plus alors qu'à se brute focer ça avec John the ripper et les passwords apparaîtront en clair. Les asp sont l'équivalent windows des cgi, les mêmes genres de failles sont recensés bien entendu.

* brute force:
Action de répétition de la même ou des mêmes actions et ceci a une fréquence très élevée et durant un grand laps de temps de manière a tester tous les états ou toutes les combinaisons possibles.

* spoofing:
Technique visant a faire croire à un systeme que l'on a une IP qui n'est pas les notre et ceci sans changer d'IP. Il existe 4 types majeurs de spoofing...
 -udp:
   construction d'un paquet udp avec une fausse adresse source et envoi de celui ci
 -icmp:
   construction d'un paquet icmp avec une fausse adresse source et envoi de celui ci
 -tcp:
   construction d'un paquet tcp (syn) avec une fausse adresse source, envoi de celui ci, prédiction du numéro de sequence du paquet renvoyé (syn-ack) vers l'adresse que le hacker avait mise dans le paquet forgé par le serveur car cette ip n'etant pas la sienne, il n'a aucune chance de recevoir un jour ce paquet. Puis renvoi d'un dernier paquet (ack) avec le numero de séquence que le serveur attend (calculé entre autre avec le num de seq prédit).
 -ID dns:
   construction d'un paquet tcp ayant le header d'une reponse a une requete dns qu'un systeme a emis vers un serveur dns dont on voudra prendre l'identité, grace à ce spoofing. Ceci permettant de faire croire a un systeme qu'il est connecté a un serveur alors qu'il est connecté à un autre.

* tcp hijacking:
Technique d'usurpation de connection en cours à son profit basée sur l'envoi d'un paquet avec le numéro de sequence attendu à un serveur avant le paquet envoyé au serveur par le systeme de qui l'on veut usurper l'identité n'arrive. Ceci provoque une desynchronisation qui va déconnecter un systeme et faire croire a l'autre que l'on est le serveur qui vient de déconnecter. Cette technique peut être apparentée à du spoofing vu les nombreuses ressemblances entre les deux techniques.

* portscanning:
Action réaliser par un programme appelé portscanner qui consiste a tester tous les ports d'une machine pour voir s'ils sont ouverts, fermés, protégés...

* social engieneering:
Technique abusant de la crédulité et/ou de la confiance des gens permettant d'obtenir des infos et/ou des actions de leur part.

* sniffer:
Programme plaçant une carte rés eau en promiscous mode. Mode permettant au hacker de recevoir (et donc ensuite de pouvoir les analyser) tous les paquets sur le passant par le réseau où est connectée la carte réseau y compris ceux ne vous étant pas destinés.

* DoS:
technique permettant de deconnecter d'un réseau un systeme ou même de le rebooter ou de la faire planter. Tout bug ou faille permettant de faire une des actions suivante creera une nouvelle possibilité de DoS. Les manieres d'en faire sont donc innombrables.

* buffer overflow:
technique permettant au hacker d'exécuter un code écrit en asm et converti en hexadecimal dans la stack grace a un depassement de tampon opéré volontairement sur une variable. Le ou les processus crées par ce code optiennent l'uid du programme contenant la variable et peuvent donc faire sur le système tout ce qu'un utilisateur ayant un shell avec le même uid pourrait faire. Le but étant bien entendu au final de faire un buffer overflow sur un programme ayant l'uid root.

* backdoor:
programme ou parametrage du systeme permettant au hacker de rentrer plus facilement sur le systeme une fois qu'il y est déjà entré une fois. Le coupable revient toujours sur les lieux de son crime ;)

* rootkit:
programme transformant des programmes d'un systeme de maniere à ce que ceux-ci ne devoilent pas l'existence d'une backdoor sur le systeme. Un ls rootkit& eacute; ne fera par exemple pas apparaitre le programme backdoor_code alors qu'il est bien la. Un ps rootkité ne montrera pas l'ensemble des processus et pourra donc cacher des processus lancés par le hacker et nocif à l'intégrité du systeme.

  ______________
_/  Conclusion  \_________________________________________

Les étapes du processus de pénétration d'un systeme restent grosso modo toujours les mêmes avec bien entendu les exceptions habituelles dues à l'opportunisme, à la decouverte de backdoors trouvés par d'autre ou les tests de faille sur les scans a grande echelle. Les actions que vous entreprendrez pour pénétrer un systeme ne seront jamais les mêmes car une fois une étape pass ée il n'y a pas d'interet de la repasser avec une autre technique (ou alors ne serait ce que pour s'entrainer). De plus les techniques et les façons de les employer sont tellement diverses qui y ait peu de chance que vous hackiez deux serveurs de la même manière (toujours en enlevant les scans de vulnerabilités identiques à grande échelle).

Mon dernier conseil concernera votre sureté. En effet beaucoup tombent au cours de leur enseignement (je parle des deux ou trois première années et je le précise car le hacking est un enseignement perpétuel) car ils pensent ne pas intéresser qui que ce soit, ou parce qu'ils ne se doutent pas des delais très longs de la police (ou des autres service: SETFI...) à amasser des preuves et pensent que s'ils ne sont pas embetés dans la semaine qui suit, le délit est passé inaperçu .. C'est bien entendu faux. Aussi important que le processus de pénétration, le processus de sauvegarde de sa personne doit toujours être présent dans vos esprits et appliqué à chaque tentative (ca ne réussit pas toujours) d'infiltration.

Pour se sauvegarder il y a deux phases essentielles:
- camoufler ses traces avant (ip & num de téléphone essentiellement)
- effacer ses traces après (actions réalisés, login et/ou méthode utilisée, ip...)

Pour l'avant, l'utilisation de methodes de phreak est recomandée (pabx, beige boxing...) ainsi que le passage par des anonymisers tels que des wingates, des proxy, des boxs précédemment hackés...

Pour l'apres, l'effaçage total des traces sur le systeme. Ce n'est pas toujours possible pour diverses raison telles que le fait que n'ayons pas reussi à passer root ou parce que les logs sont ecrits en temps réel sur imprimante ou sur K7 (ou pire sur CD non reinscriptible) ou parce que vous ne connaissez pas tous les logiciels qui tournent sur le systeme ou toutes les machines qui sont sur le réseau et susceptibles de vous espionner (sniffer, anti sniffer, loguer externe...). La première étape est pour toutes ces raisons la plus importante, car une fois qu'une action est faite, si elle est mal faite, elle peut causer votre perte. Le mythe du hacker engagé par la boite qu'il a attaquée c'est beau d'y croire mais cela reste dans la plupart des cas une utopie, la France n'ayant pas vraiment une politique de securisation de ses données pour les petites et moyennes entreprises (et même des fois pour les très grandes).
 

En gros sauve ton cul pour pas qu'on vienne te le botter. Sur ces belles paroles, enjoy :)
 
 

Coding Is Not A Crime