Archive for the ‘Sécurité des systèmes d'information’ Category

Nouveau billet, si ce n’est pas malheureux ! =)

Mercredi, mars 3rd, 2010

Non, ce n’est pas que j’avais oublié mon blog, loin de là : ce manque de billets pour une petite période venait de mon DUT, où l’on clôturait notre 3e semestre et commencions le 4e… les deux semestres les plus « violents » de la formation SRC Bordeaux. Bref, je suis bel et bien là, avec pas mal de choses à raconter et à poster.

Premièrement, j’ai un stage ! Il se fera à CEIS sur Paris pendant six mois de mi-avril à fin septembre. En gros, je suis très content d’avoir ce stage, car les missions correspondent à ce que je cherchais dans le domaine de la sécurité des systèmes d’information. Je veux remercier Nicolas Caproni (@cyber_risks) pour m’avoir éclairé sur cette offre – il sera d’ailleurs responsable de moi pendant ce stage où je ne doute pas d’apprendre un paquet de choses tout au long de ce dernier.

De plus, je voulais remercier ceux qui m’ont fait part d’offres de stages même si je les ai toutes déclinées – certaines sont arrivées récemment – car j’avais déjà mon stage à CEIS. Cependant, je vous en suis reconnaissant, cela fait toujours du bien de voir que des personnes s’intéressent à ce que l’on fait. Merci merci merci ! Il ne me manque plus qu’à enlever cette recherche de stage de mon site (grand moment d’émotion en perspective :)

En second point, je suis encore sur cet article (sorte de bilan) lié à un audit sauvage (je sais, c’est mal) que j’ai fait sur des portails web de médias français. Pourquoi ? Eh bien car je dois contacter les administrateurs, webmasters, DSI etc. pour boucher les failles qui sont bien nombreuses (et pour certaines très grosses). Cependant, ne vous attendez pas à un scoop avec les noms des médias, par respect pour leur travail, je ne divulguerait aucun nom, seule la méthodologie sera présentée. Toujours est-il qu’ils sont nombreux, et la plupart d’envergure nationale si ce n’est internationale pour certains.

Récemment, j’ai mis à jour quelques scripts sur Security Bugs Hunter au programme, des vulnérabilités que j’avais trouvées fin 2009, d’autres datant d’hier sur un simple « calendrier » dont Smashing Magazine faisait la PUB hier sur Twitter (beau #FAIL à la vue nombre de followers liés à ce compte). J’en ai encore beaucoup dans ma hotte, cependant, je ne possède pas tellement le temps de faire le tour complet de certains scripts donc je préfère attendre avant de les publier.

Pour finir, je suis en train de bosser sur la certification CISSP non pas pour la passer – si je me souviens bien, il faut avoir un minimum de cinq années d’expérience pro. en SSI et pas mal d’argent pour un indépendant – mais seulement pour apprendre de nouvelles choses dans la domaine de la sécurité. Je lis en ce moment CISSP All in one Exam guide qui possède tout le contenu lié à cette certification avec comme dans chaque livre de geek qui se respecte quelques petites blagues dans certains coins. Reste que ce petit monde de la sécurité évolue si vite que certaines notes sont déjà dépassées… mais bon, l’extrême majorité de la méthodologie, des descriptions et des sujets traités sont bons à prendre (et très bien traités !). Bref, un bouquin à avoir chez soi qui sera très bien entre Security Power Tools et Network securty hacks. L’édition poche n’existe pas, malheureusement.

Promis, je publie l’article dans quelques jours.

Micro blog : felixaime.tumblr.com

Mercredi, janvier 20th, 2010

En attendant un prochain article qui risque d’arriver bientôt sur un retour d’expérience d’audit « sauvage » qui se conclue actuellement par une intense phase de mailling, je tenais à vous présenter mon micro blog se situant à l’adresse : felixaime.tumblr.com.

Ce dernier me sert afin de relayer des articles, papiers, images, citations que je trouve intéressants dans le domaine de la Sécurité des Systèmes d’Information. J’essaye d’y publier quelques liens par jour suivant le temps que j’ai. De plus, il y figurera certaines anecdotes que je rencontre de temps à autres… Cette image par exemple

Un sploit en remote pour MySQL 5 ?!

Vendredi, janvier 8th, 2010

logomysqlLe 4 janvier surgissait sur l’internet une vidéo montrant un exploit tournant avec le framework CANVAS d’Immunity permettant l’ouverture d’un shell en remote sur MySQL 5.x selon la description de l’exploit montrée pendant cette vidéo.

Outre le fait que ce dernier est un 0day, cet exploit risque de faire très mal tant pour l’image de la firme MySQL que pour les millions de serveurs faisant tourner ce service ouvertement sur l’internet sans aucune protection particulière dans les restrictions d’accès ou le cloisonnement du processus.

Bref, qu’en est-il vraiment ? A mon avis, je pense de plus en plus à une vraie vidéo, mais je doute de plus en plus d’un vrai exploit. Quelques les éléments ci-dessous me sifflent dans l’oreille :

- Le site internet est très -trop – basique, le blog aussi pour tout vous avouer. Cependant, un whois sur ce dernier montre que le nom de domaine n’est pas récent comme on pourrait le penser. Mais un internet archive ne trouve rien.

- La société qui possède 5000 résultats de recherches sur Google prétend sur le forum d’Immunity vendre un de ses packs d’exploits 250$, cela fait très – trop – peu pour des possibles 0 Days, surtout de cette envergue. Elle a semble-il découverte la vulnérabilité en Aout, pourquoi pendant tout ce temps, elle n’a (semble-t-il – là encore) prévenu MySQL de cette brèche ?

- Nous connaissions déjà certaines possibilités de mise en place de portes dérobées sur des serveurs MySQL telles que le tool Raptor qui permettait d’ouvrir un shell sur un MySQL disposé sur Windows – ou par l’intermédiaire d’SQL injections sur un serveur web, encore fallait-il que le serveur MySQL tourne sur ce précédent serveur et que les droits UNIX soient bafoués pour que cela marche. Cependant, avec cette vidéo, on peut penser que l’exploit ne requiert pas d’authentification sur le serveur visé ou même un support/module de MySQL installé. D’ailleurs, j’aime le « Note – the exploit has been edited to be less verbose. » #WTF.

- Vous avez entendu parler un week of data base bugs prochainement ? Perso NaN. Dans les commentaires du blog ils prétendent démontrer la vulnérabilité durant cette semaine… j’aimerai bien savoir si quelqu’un à des infos, bizarrement, Google n’en a pas non plus. Normal, ce sont « eux » qui « les » organisent (sachant qu’il y a qu’un russe dernière cette société)…

Bref, je reste très septique sur cette vulnérabilité et je pense que – si elle existe – elle n’est pas effective sur une installation par défaut de MySQL. Entre 0 et 10 sur le point de la crédibilité, je mettrai 3, pas plus. Cependant, si elle existe bien et qu’elle est possible sur une installation par défaut – il y en a qui voient la vierge partout depuis que des vulnz en remote ont été découvertes sur OBSD ; il faudra faire quelques mises à jour ou appliquer quelques sécurités supplémentaires telles que :

- La définition des droits d’accès à MySQL afin que seuls certains hosts puissent s’y connecter (ce qui d’ailleurs devrait être toujours fait). Non seulement au point de vue de l’authentification de certains l’ensemble des utilisateurs dans la configuration des users de MySQL que de l’accès au serveur devant être régit par un FW.

- Chrooter de processus afin qu’une possible ouverture de shell ne puisse pas aboutir à de plus amples dégâts tels que de rooting de la Box ou la découverte de la topologie du réseau (de la DMZ) distant(e).

- Et enfin, le changement du port par défaut de MySQL (3306) afin d’éviter les bots et diverses attaques automatisées sur des comptes si ce serveur est accessible à partir de l’Internet. Cependant, cette protection ne sert à rien si le pirate a déjà sous son emprise le client se connectant sur le serveur. #FAIL

Bref, l’attente est la conclusion de cet article. Dans quelques jours nous serons fixés sur cette affaire même si à mon avis, nous aurons déjà oublié cet épisode dont la véritable finalité était de vendre quelques packs d’exploits exploitant des vulnérabilités se revendiquant critiques alors qu’il n’en est rien.

NB : Après la re-visualisation de la vidéo, je me suis aperçu d’un « req #1, req #2″ pendant l’exécution de l’exploit. Cela laisserait donc suggérer qu’il faut être authentifié auprès du serveur MySQL afin d’ouvrir un shell sur la BOX.

NetworkMiner, un (très bon) outil d’analyse de flux réseau.

Samedi, janvier 2nd, 2010

C’est après avoir effectué le dernier Network Forensics Puzzle Contest (qui d’ailleurs possède un niveau très bas pour ce contest « Ann’s AppleTV »), que j’ai parcouru le site internet afin de voir les différents tools inventés par les challengers dans le but de parser les échantillons de données réseau pcap afin de répondre aux questions des challenges.

Et un binaire a attiré mon attention du fait de sa finition et des possibilités offertes par ce dernier dans l’analyse de flux réseaux qu’ils soient sauvegardés en pcap ou en live. Bref, son nom, NetworkMiner est un NFAT (Network Forensic Analysis Tool – à force d’avoir des acronymes partout, on en perd vite la signification) disponible depuis bien longtemps, mais pas très connu (m’enfin, je ne le connaissais pas faisant toujours l’analyse de paquets à l’aide de Wireshark).

Il permet de faire plusieurs choses intéressantes et d’accélérer ainsi le travail lorsqu’il faut se parser un flux réseau de milliers de paquets. Entre autre il permet d’avoir une vue globale des différentes stations (avec un embryon d’OS fingerprinting), équipements réseaux pro-actifs et serveurs externes sollicités durant la session de capture. De plus, il permet la récupération de fichiers transitant sur le réseau, d’images, de mots de passes, de query DNS etc.

Bref, il peut venir en compléments d’utilitaires incontournables comme Wireshark dans l’analyse de flux. De plus, ce dernier trouve tout son intérêt lorsqu’on sait qu’Meterpreter permet depuis quelques mois de récupérer facilement des flux réseaux à distance lors de pentests, sans parler de l’incontournable TCPdump, toujours utile lorsqu’on a un shell sur une box distante.

Seul problème pour les linuxiens, ce tool est disponible que sur Windows. Après, tout le monde possède un petit virtual box ayant Windows dessus. Un seul lien pour l’essayer et surtout l’adopter : NetworkMiner.

Passive & Active fingerprinting : Méthodes, limites et défenses

Jeudi, décembre 10th, 2009

Fingerprinting

La prise d’empreinte d’un hôte ou réseau distant est une certaine science en attaque des systèmes d’information. Le but avoué est simplement de connaitre, dans le cadre d’un hôte, son système d’exploitation ou la présence de certains équipements réseau entre l’attaquant et la cible (reverse-proxy, load-balancers, firewalls, routeurs etc.) pouvant certaines fois aboutir à un cartographie très relative du réseau visé.

Obfusquer un système d’exploitation ou même le nombre d’hôtes/sous réseaux derrière un routeur ou tout autre périphérique réseau actif est une des principales mesures à réaliser face à un possible attaquant déterminé. Comme le dit souvent l’oncle Sun Tzu, il faut avant tout aveugler l’ennemi. Un ennemi aveuglé aura du mal à avancer et son attaque sera beaucoup plus longue.

De plus, le fait d’obfusquer un système montre bien que l’administrateur n’est pas né de la dernière pluie et qu’il possède des connaissances en sécurité informatique (wahou). En outre, dans le cadre de serveurs accessibles depuis le net, cette sécurisation évitera de se faire ficher par le nouveau né SHODAN qui se base sur les bandeaux des services du type SSH, Apache, IIS, Nginx ou toute autre application un peu trop bavarde.[1]

Il existe deux types de prise d’empreinte à distance, une active et une passive. (Et une autre un peu #WTF mais pas#NSFW pour certaines attaques)

La prise d’empreinte active, la plus connue, interagit directement avec le système distant. Nous pouvons citer comme logiciels Nmap ou Xprobe permettant ainsi, – suite à l’envoi de certains paquets forgés – déterminer grâce aux réponses faites par l’host, le système d’exploitation. Ce type de scanners, bien que répandus sont souvent utilisés dans leurs fonctions standard et les fonctions avancées sont souvent oubliées pour un Scan « basique ». De plus, ces dernières permettent de reconnaitre un OS de façon plus ou moins fiable suivant le type d’équipements réseaux/sécurités ou même les spécificités du scanner…

En ce qui concerne les services tournant sur les hôtes, la technique la plus triviale consiste en la récupération de bandeaux émis par ces derniers afin de déterminer de façon plus ou moins fiable la version des services et des fois, les modules ajoutés pouvant êtres faillibles. Cette technique, bien que sa mise en œuvre soit plus que facile, peut être facilement bloquée en quelques modifications sur les fichiers de configuration de ces services.

Pour ce qui est de la reconnaissance de load-balancers, il existe un petit tool sympa se basant sur la couche application (HTTP) du modèle OSI. Ainsi, Halberd compare les entêtes HTTP reçues telles que l’heure des serveurs, l’ordre des entêtes ou même le fameux header « X-Forwarded-For » (le tout par hash notamment) afin de déterminer la possible présence de plusieurs serveurs derrière un load-balancer. Pour résumé, cette méthode est simple mais surtout très astucieuse.

Enfin, nous n’allions pas parler de fringerprinting actif distant sans parler de WAF, aujourd’hui thème à la mode, les Firewalls pour Applications Web sont disposés tels des reverse-proxy. Ces derniers, permettent principalement de contrer les attaques par Injections (JS, LDAP, SQL etc.) mais possèdent bien des spécificités permettant de les fingerprinter. Aujourd’hui, un tool sort du lot pour cela, Wafwoof permettant de fringerprinté plus de 20 WAF différents parmi le plus connu dans l’OpenSource Mod_Security d’Apache. (Qui d’ailleurs avait une petite technique d’évasion sur les SQL injections il y a quelques jours… ;)

La prise d’empreinte passive quant à elle s’inscrit lorsqu’on n’a pas un « accès direct » (pour faire simple) vers l’hôte (réseau NATé, firewallé, load-balancé, IDSé etc.). Elle peut se faire par différents moyens. Cependant, les plus connus restent la prise d’empreinte de la pile TCP/IP, les TTL des paquets reçus (façon vague de déterminer l’OS – sert pour architecture interne d’un réseau NATé – mais tout de même performante lorsqu’on a pas de tools[2]). D’autres logiciels beaucoup plus fiables mais plus complexes se basent sur l’entête TCP/IP des systèmes d’exploitation grâce à (liste non exhaustive) : la taille de la fenêtre, TTL, les flags ou même les options contenues dans l’entête (avec p0f notamment <3. Il faut pour cela que l’hôte distant se connecte à un serveur dont l’attaquant possède les droits dessus (compromis ou pas, au bon vouloir de l’attaquant) ou qu’il sniffe la connexion entre deux systèmes (donc doit être déjà présent sur un réseau).

Nous pouvons aussi réaliser le fingerprinting passif grâce aux numéros de séquence (pseudo aléatoires) contenus dans les entêtes des paquets TCP-IP. Du fait de leur randomisation non parfaite, chaque système possède sa propre « empreinte ISN » pouvant être comparable dans le temps avec d’autres empreintes ISN. Ce type de fingerprinting est très bien documenté par son créateur sur ce site internet [3]). Cette technique possède cependant des limites. Ainsi il faut un grand nombre de paquets échangés afin de posséder une bonne empreinte permettant de déterminer quel est le système distant. En outre les systèmes actuels s’orientent vers une randomisation plus fiable. Cependant, sa mise en place peut être utilisée pour déterminer le nombre de serveurs derrière un load-balancer (avec ISNprober notamment). – Ci dessous, un fingerprinting des ISN générées par Windows XP (voir [3]) :

Fingerprinting

Un « troisième type », encore plus « rock’n’rool » et beaucoup moins « matheu » peut permettre la prise d’empreinte d’un système utilisé en regardant simplement les META-DONNES des fichiers déposés sur des serveurs web ou envoyés directement par l’entité par le biais de simples emails. Ainsi, certaines applications trop bruyantes laissent des infos pouvant permettre à un attaquant de déterminer le système cible (grâce à des full path, les applications etc. contenus dans les fichiers) et les versions (les paths users diffèrent par exemple d’un WinXP à un Vista) des programmes spécialisés permettent de récupérer ses informations juteuses telles que Metagoofil (par le biais de Google) ou des fois un bon éditeur full-text fera l’affaire. Certaines informations dépassent totalement le cadre du simple fingerprinting système mais sont croustillantes à souhait (noms d’utilisateurs, paths, applications utilisées avec leur version etc.).

Cependant, pour cette dernière, il faut absolument que le fichier ai été modifié ou créé sur le poste (ou le domaine si utilisateurs) que l’attaquant veut « visiter ». Donc en d’autres termes, c’est bien pour se renseigner sur des hôtes de (sous)-réseaux d’entreprises et les logiciels employés (quoi ? le service de com’ utilise semble-t-il une version vulnérable d’OpenOffice ?), cependant, dans le cadre d’un bastion, cela ne servira totalement à rien… après tout, c’est logique. (Note : Regarder les META des communiqués de presse et etc. sur les sites institutionnels des entreprises ;)

Peut-on se protéger contre le fingerprinting ?

Comme toujours, la sécurité d’un bastion ou d’une station en particulier est beaucoup plus facile à mettre en œuvre que la sécurité d’un système d’information composée de plusieurs hôtes, réseaux, sous-réseaux, serveurs etc… Je vais vous présenter quelques pistes pour sécuriser ce petit monde, cependant, il vous faudra poursuivre par vous-même la sécurisation de vos équipements, car comme dirait papy geek « Read that fu*king manual ».

Protection des services

Ainsi, pour bien protéger les services, il faut faire taire ses applications, la plupart des services http, ftp, ssh ou autres possèdent leurs propres directives à changer dans les fichiers de configuration des services afin de réduire le bruit émi et la possibilité de reconnaissance de services à distance. On essayera de réduire un max les infos, essayant de ne plus rien divulger.

Cependant, certains services laissent encore le nom du service tout en rendant invisible sa version (c’est le cas d’Apache par exemple ou il faut aller voir dans le apache2.conf et mettre ServerTokens sur Prod – et ne pas oublier par la même occasion ServerSignature sur off ;). En ce qui concerne IIS (éh oui…) il faut simplement valeur de registre DisableServerHeader à cette adresse HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters et hop, plus de signature. Et pour finir, autant faire ça pour Nginx où la manœuvre est un peu plus complexe. Pour cela, DIY dans le code source en éditant les constantes de version dans les fichiers src/core/nginx.h & src/http/modules/perl/nginx.pm et enfin, en re-compilant le tout. Dans le cas d’autres services c’est à peu prêt les mêmes méthodes, pour savoir comment faire, il vous suffit de faire un simple « [nom du service] disable server signature » ou même « [nom du service] disable welcome message » dans google pour avoir des réponses à vos questions :)

En ce qui concerne la protection de WAF, à ce que j’ai pu lire sur ce site, que nous pouvons facilement protéger mod_security en customisant les réponses du firewall suite à certaines requêtes ou en changeant simplement la signature du serveur apache (dans les headers HTTP) en utilisant l’option SecServerSignature dans la configuration de mod_security (contenue dans apache2.conf) (voir ici). Je n’ai jamais utilisé d’autres WAF donc l’aide sera limitée à cela.

Protection des bastions & hôtes

En ce qui concerne les scans liés au SI (hosts, bastions, firewalls, passerelles etc.) beaucoup de logiciels ont étés développés il y a quelques années afin de limiter les tentatives de fingerprinting de stations comme IPpersonnality ou Fingerprint Fucker patchant le kernel afin de modifier la pile TCP/IP des systèmes Linux pour se faire passer pour d’autres systèmes ou périphériques réseaux. Aujourd’hui est développé IPMorph permettant là aussi d’obfusquer le système d’exploitation réel et de le faire passer pour un autre (plus que prometteur car permettant de tromper des logiciels de fingerprinting actifs et passifs tels que Nmap, p0f, Xprobe2, ou même SinFP). Vous trouverez une bonne documentation technique sur le site du SSTIC’09 ICI. Je ne l’ai pas encore utilisé/testé mais j’ai vraiment hâte à la suite de cette lecture :)

Concernant le réseau, un attaquant peut s’amuser aussi à déterminé l’architecture interne de ce dernier de façon très superficielle (os et équipements) à l’aide des TTL des paquets. Effectivement, certains équipements réseaux décrémentent les TTL lors du passage d’un paquet. Il est donc bon de rétablir à une valeur par défaut le champ TTL des paquets sortant du réseau. Pour cela, il existe des options pour IPtables.

Je ne sais pas si PF le fait (sale inculte – je connais que la limitation de TTL de PF), cependant, il est fort probable que comme IpTables nous pouvons le faire en cherchant un peu dans les mailinglists ou docs de PF. En ce qui concerne les autres Firewalls, à vous de voir, je ne pourrai pas trop vous aider. On peut également aller voir dans /proc/sys/net/ipv4/ip_default_ttl pour Linux et je ne sais plus quelle clé de registre pour Windows.

Ensuite, pour le reste, libre à vous pour ce qui est de la configuration des firewalls pour laisser passer certains paquets (ICMP etc.)  ou non dans vos DMZ, réseaux internes etc. Je ne vais pas rentrer dans ce débat troolesque à souhait aujourd’hui.

Conclusion

Le procédé fingerprinting système/réseau est une science où chaque système/réseau possède ses particularités. Aujourd’hui, les principales attaques possèdent des contre-mesures pouvant être mises en place plus ou moins facilement par rapport à l’architecture du SI associé.

Cependant, il faut trouver comme toujours le juste milieu entre la sécurité voulue, le coup de mise en place de cette dernière et l’importance des données contenues dans le systèmes pouvant être la cible d’une tentative d’attaque (qu’elle soit bien évidement interne à l’entité ou externe.).

[1] SHODAN : Le grand jeu aujourd’hui est de trouver des tips&tricks sur Shodan shells disants ouverts (root ou non), serveurs vulnérables ou déjà compromis etc.

[2] PING/TTL : Un simple tracereoute ou un ping et roule ma poule. (Dans le cadre d’un bastion avec les requêtes ICMP vers ce dernier non dropées par un éventuel firewall.)

[3] Strange Attractors and TCP/IP Sequence Number Analysis

[4] Voir les champs /Producer /Creator et /CreationDate afin d’être sur que le PDF publié est récent, cependant, certains sont encodés demandant l’ouverture par Adobe AR ou tout autre logiciel lisant les « entêtes » des PDF.