Posts Tagged ‘mysql’

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.

Make ur home secure web server !

Vendredi, août 21st, 2009

Un ami veut se faire un petit serveur privé chez lui et je lui ai passé quelques astuces afin d’avoir le moins possible à payer en terme d’équipement ou même de consommation d’énergie. De plus quelques astuces en sécurité histoire d’avoir un serveur personnel pas très cher, mais robuste. Je me souviens d’ailleurs de mon premier serveur maison, il y a de ça quelques années j’en avais réalisé un dans une boite en carton d’écran LCD, ce qui au niveau chaleur n’était pas trop trop conseillé.

Bref, donc tout d’abord, quel matériel choisir ?

Là, question coût, nous n’allons pas acheter quelque chose de très puissant, car il sera principalement réalisé afin de permettre le téléchargement de fichiers (après vous voyez pour la légalité), la mise en place d’un serveur web voire mail si vous le souhaitez. Donc pour faire « bien » à pas cher, vous avez deux choix :

1. Le choix Système-D : Allez acheter sur un site ex : leboncoin.fr un netbook avec un écran cassé, on en trouve de très bons à pas cher 50 à 80 euros avec 1go de Ram, 900hz, entre 4 et 16go de disque dur etc. Ceci est bien car les personnes vendant ce matériel ne savent pas que ce qui compte dans une grande partie des cas, ce n’est pas l’écran, mais bien l’intérieur de la bête.

2. Le choix résonné : Si vous avez un peu d’argent devant vous (environ 200 euros) vous pouvez vous prendre un petit soekris histoire d’être sûr d’avoir du bon matos. Il n’est pas bruyant et consomme rien. Cependant ceux qui sont allergiques aux lignes de commande vont vivre quelques heures de configuration fastidieuses. Ce choix est résonné par rapport à la consommation d’énergie si votre bébé va tourner 7j/7.

Maintenant que vous avez le matériel, où l’installer ? Là vous avez plusieurs possibilités et tout dépend là aussi de la chaleur qu’il dégage. J’ai fait des tests dans plusieurs endroits aussi atypiques les uns que les autres et ce qui en ressort c’est qu’un petit serveur comme vous allez faire n’a pas besoin d’une chambre froide afin de fonctionner non-stop. Cependant, j’ai testé la méthode dans le frigo et cela s’avère un assez bonne alternative :) (si vous n’avez pas de légumes/fruits/etc dedans).

Et le web fut !

Pour ce qui est de la connectivité, oubliez le WIFI et préférez le filaire cela permettra d’avoir moins de problèmes de paramétrage au cas où le serveur redémarre ou si le wifi merdoy. Une chose est sûre, les câbles, malgré ce que l’on en dit, ont encore de beaux jours devant eux ! Le raccordement à la box fait, sécurisez cette dernière, mettez un mot de passe d’accès si cela n’est pas déjà fait. Activez l’IP forwarding vers l’adresse IP statique de votre serveur en question à partir de la console d’administration. Pourquoi mettre un mot de passe ? Tout simplement pour éviter les attaques CSRF, mais aussi (et surtout) éviter que l’on ait accès à son administration si votre serveur est éteint.

Ceci fait, tous les flux entrants par le(s) port(s) que vous avez désignés vont être aiguillés vers votre serveur (Cool, non ? Non ? Bon d’accord…) Maintenant vous n’avez plus qu’à installer votre petite solution LAMP sur votre serveur et les différents services que vous voulez. N’oubliez pas d’activer les virtual hosts sur Apache si vous avez fait pointer des noms de domaines sur votre BOX.

La sécurité avant tout !

Passons maintenant à la sécurité du serveur, car il faut bien le dire, un serveur non implanté dans une DMZ présente un vrai risque pour la sécurité du réseau et la confidentialité des informations transférées sur ce dernier. Donc il faut absolument le sécuriser de toutes parts. Tout d’abord, contre le fingerprinting actif et passif. Il faut pour cela changer le TTL de Linux pour faire croire aux différents scanners que c’est Windows qui est sur la machine (on on change le TTL de 64 en 128) (les scanners ne se basent pas que sur le ttl pour déduire les version des Os, mais c’est une méthode, et autant la brouiller), on change aussi les différents bandeaux des différentes applications telles que SSH, Apache et autres trucs comme cela. Moins l’attaquant en sait sur le système visé depuis l’extérieur mieux c’est pour vos fesses ! (d’ailleurs documentez-vous sur ce petit soft bien sympa : IP personnality, même s’il est pour les 2.4, la doc est assez sympa histoire de voir comment cela fonctionne…). Il y a aussi ce petit lien avec quelques logiciels du même type.

Ceci fait, il nous faut changer quelques configurations par défaut, tout d’abord, SSH. On enlève la possibilité de login en Root à distance sur le système, on change le port par défaut du service histoire de ne pas être attaqué par des Boots où des SK. Ensuite on va configurer un petit utilitaire afin de détecter la moindre tentative manquée de connexion à différents services, cet utilitaire est connu et bien sympa. Surtout si on le couple à un service d’envoi d’SMS pour avec un temps de réponse post-attaque rapide. Son nom : fail2ban. Et oui, on ne change pas une équipe qui gagne ! Bon pour la documentation direction ICI où tout y est très bien expliqué. Amusez-vous avec IP tables afin de dropper les paquets qui sont méchant, pour cela, il existe des tonnes de ressources sur Internet donc je vous fait confiance.

Vous pouvez aussi envisager une solution de port knocking afin de gérer les ports dynamiquement, cette solution permet beaucoup de choses, et surtout réduit considérablement les logs de tentatives d’attaques :)

Il faut aussi créer un utilisateur dans un espace confiné, afin d’emprisonner le pirate dès l’obtention d’un shell d’attaque sur un processus utilisé par cet utilisateur. La technique s’appelle le chroot et est difficile à mettre en place si on ne l’a pas fait trente six mille fois sur différents logiciels (moi aussi j’ai encore du mal à chrooter). Au programme, récupération des librairies utiles au logiciel, création de l’espace restreint dans un répertoire à la racine et emprisonnement des processus. Vous pouvez le faire, ou pas. Si vous ne voulez pas passer par cette tâche longue et fastidieuse, vous pouvez désactiver pour les utilisateurs autres que le root les programmes utiles au pirate en tant d’attaque tels que wget, gcc, python, cURL, vim, nano, pico etc. afin qu’il ait beaucoup de mal à devenir root sur votre machine (chmod 700). On peut aussi, afin qu’il ne s’amuse pas à essayer d’entrevoir la topologie de notre réseau chmoder les ifconfig, ping etc. Vous pouvez aussi vous amuser avec le petit tool de la NSA dénommé SElinux perrmettant de mettre des droits pour des processus à des fichiers pécis, et cela, un Linux standard ne le fait pas ! :D Cela devient très vite utile en cas d’attaque. Voir plus d’infos ici ou sur Google ;)

Enfin, pour la configuration du serveur (apache, php etc.) désactivez tout ce qui peut permettre l’identification là aussi des versions utilisés, donc direction tout d’abord httpd.conf et désactivez les signatures du serveur. Vérifiez que la valeur expose_php dans le php.ini est à off, si elle ne l’est pas, mettez-là ! En ce qui concerne aussi le php.ini, mettez le safe_mod sur on, les magic_quotes aussi, modifier l’open base dir et mettez allow_url_fopen sur Off. Désactivez de plus certaines fonctions qui sont pas très très sympa… Ne laissez jamais MySQL s’exécuter avec l’utilisateur root de ce dernier, créez des utilisateurs avec des droits restreint afin de ne pas aller vers la catastrophe. Par ailleurs, mettez en place un petit IDS codé en PHP sur votre site dynamique afin de voir s’il est la cible d’attaques… (voir PHPIDS, même si à ma grande surprise, il ne contre pas certaines attaques que mon IDS php à moi détecte… :D)

Et maintenant ?

Et bien, si vous avez tout fait et que vous arrivez encore à lire ces lignes, je dois dire bravo ! Il ne vous reste plus qu’à veiller sur les mises à jour de votre système, de créer un Cron qui exportera vos logs (mysql/apache/acces/ssh) toutes les semaines vers une adresse mail mise en place pour l’occasion afin d’entrevoir des tentatives d’attaque qui seraient passées entre les mailles du filet. On peut aussi s’amuser à envoyer des mails ou des SMS, mais ceci est une autre histoire. Veillez à faire un rkhunter avec Cron quelques fois afin de voir s’il n’y a pas de rootkits sur le système et… voilà !

Désolé si cet article manque de références ou n’est pas complet, j’ai écrit cela – un peu – à l’arrache aujourd’hui et je ne vais pas aller chercher des références si j’en n’ai pas pris pour le réaliser. La prochaine fois, j’essayerai de faire quelque chose de plus « pro ».