Articles Taggés ‘Sécurité’

Automatiser la récupération et la compilation du kernel et de son patch GrSec

31 octobre 2009

Plop à tous…

Petit truc de geek … un script pour automatiser la récupération du dernier kernel stable depuis le site kernel.org puis le dernier patch grsecurity à appliquer sur le kernel en question (qui sort généralement un jour après la release du kernel).
Sur ubuntu, il faut tout d’abord installer le paquet kernel-package :

sudo apt-get install kernel-package

Puis récupérer le script suivant (nommé chez moi recupKernel.pl dans la commande qui suivra) :

  1. #!/usr/bin/perl
  2. require HTTP::Request;
  3. use LWP::UserAgent;
  4.  
  5. my $kernelUrl = recupKernel();
  6. my $kernelVersion = recupKernelVersion($kernelUrl);
  7. my $grsecUrl = recupGrSec($kernelVersion);
  8. my $grsecName = recupGrSecName($grsecUrl);
  9. if($kernelUrl && $grsecUrl)
  10. {
  11.  print "Url du dernier kernel stable : $kernelUrl\n";
  12.  print "Version du kernel : $kernelVersion\n";
  13.  print "Url du dernier patch GrSec stable : $grsecUrl\n";
  14.  print "Nom du Patch : $grsecName\n";
  15.  print "Recuperation du kernel : \n";
  16.  my $rK = `wget $kernelUrl`;
  17.  
  18.  print "Recuperation du patch : \n";
  19.  my $rG = `wget $grsecUrl`;
  20.  print "Extraction des données et compilation\n";
  21.  my $dT = `tar -xjf *.tar.bz2 && patch -p0 > $grsecName`;
  22. }
  23.  
  24. sub recupKernel
  25. {
  26.  my $req = HTTP::Request->new(GET => "http://kernel.org/");
  27.  my $ua = LWP::UserAgent->new;
  28.  $ua->agent("Firefox/4.0");
  29.  my $res = $ua->request($req);
  30.  if ($res->is_success) {
  31.   my $text = $res->content;
  32.   my $recherche = '<table id="brbtable([\n\t\r\W\w]*?)</table>';
  33.   $text =~ m/($recherche)/gm;
  34.   return recupHrefUrl($2);
  35.  }
  36.  return '';
  37. }
  38. sub recupHrefUrl
  39. {
  40.  my $ret=$_[0];
  41.  my $recherche = 'href="([^"]*)';
  42.  $ret =~ m/($recherche)/gm;
  43.  return $2;
  44. }
  45.  
  46. sub recupKernelVersion
  47. {
  48.  my $ret=$_[0];
  49.  my $recherche = 'linux-([0-9]+.[0-9]+.[0-9]+.[0-9]+)';
  50.  $ret =~ m/($recherche)/gm;
  51.  return $2;
  52. }
  53.  
  54. sub recupGrSecName
  55. {
  56.  my $ret=$_[0];
  57.  my $recherche = '/(grsecurity.*.patch)';
  58.  $ret =~ m/($recherche)/gm;
  59.  return $2;
  60. }
  61.  
  62. sub recupGrSec
  63. {
  64.  my $kernelV = $_[0];
  65.  my $req = HTTP::Request->new(GET => "http://www.grsecurity.net/test.php");
  66.  my $ua = LWP::UserAgent->new;
  67.  $ua->agent("Firefox/4.0");
  68.  my $res = $ua->request($req);
  69.  if ($res->is_success) {
  70.   my $text = $res->content;
  71.   my $recherche = "href=\"(test/grsecurity-[.0-9]+-$kernelV-[0-9]+.patch)\"";
  72.   $text =~ m/($recherche)/gm;
  73.   return "http://www.grsecurity.net/$2";
  74.  }
  75.  return '';
  76. }

Il suffit ensuite d’executer la commande suivante :

  1. perl recupKernel.pl && cd linux-* && make menuconfig && make-kpkg clean && make-kpkg –initrd –append-to-version "LoupZeur-grsec" kernel_image

Ce qui générera un fichier .deb qu’il faudra installer par un bon vieux dpkg -i.

PS: Lors de l’execution de la commande make menuconfig, une fenetre « bleu » apparaitra, il faudra selectionner la menu « security », puis grsecurity et choisir le niveau de sécurité « HIGH ».

PS2: Il faut aussi bien entendu selectionner ou deselectionner tout les modules inutiles (genre usb, support agp et … ).

P’tite News …

16 septembre 2008

Bijour à tous …

Quelques petites infos …

Côté sécurité informatique … z’avez sûrement entendu parler de Wapiti, une alpha a été release il y a peu (la 1.1.7), avec l’ajout de nouvelle règle pour contourner les scripts de détection de XSS/SQL Injection …

Je manquais d’idée pour coder mon toolz (cf. 2g’s web vulnerability scanner), me voilà reparti, d’ici là, je commiterai des fix pour windows (jusque là c’était inutilisable …), certaines idée semble plutôt sympa, et se retrouveront sûrement dans mon logiciel ^^, c’est beau l’open-source!! (cela dit, je suis très loin de ce superbe outil ;-) ).

Maltego2.10 est sortie depuis un bail déjà mais bon …pour ce qui savent pas trop à quoi sert ce logiciel :

C’est pour faire comme les RG … ça permet de récupérer et de mettre en forme des ensembles d’information sur des données sur le net (genre lié des adresses mail à des noms, des noms de domaines, des ip’s, …). Ce qui peut être utile pour du social engineering voir que sur internet personne n’est inconnu ^^ … c’est zarb … je trouve pas ma grand-mère avec ce toolz ;-) .

Google chrome sort le dev-channel … pour avoir les dernières up avant tous le monde ;) … pourquoi les autres blogs n’en parlent pas ??? Je suis « has been » ou « on the edge » là?? A quand le paquet .deb pour Ubuntu? ^^

Du côté personnel, j’arrête php-engineering (fin du domaine pour le 31 octobre), j’ai déjà déréférencer le site, histoire que le parking qui le remplace ne rapporte rien ^^ (avoué qu’il n’y avait plus grand chose à déréférencer!!).

Niveau boulot, je suis depuis 1 semaines déjà, développeur chez advisa en alternance avec ma licence CDED (quoi tous le monde s’en fout ??). Juste un truc pour les DUT/BTS info qui veulent faire une licence pro … la CDED saymal … que de la gestion de projet … très peu de dev et de sys :-s.

Sinon, par rapport à mon boulot, ma mission est … si je l’accepte bien sûr de dev un outil d’envoi de spam de newsletters en liaison avec le CMS de la boite ou à partir d’une liste de mails, avec la possibilité de dev la chose en plusieurs partie (CLI, interface web et …) selon plusieurs orientation possible (choix de la structure de la bdd et de la forme de la chose)… et bien sûr la possibilité de récupérer les stats (lecture du mail, clics sur les liens, …) et plein d’autre réjouissance en cours de route. Malheureusement le tout en PHP … pas un misérable bout de C++/QT :’-(

Juste une question … pourquoi moi???^^ Je déteste les mails et encore plus les newsletters …

Paranoïa sur le net …^^

25 août 2008

Bijour à tous …

En ces temps tumultueux sur internet, et suite notamment à cette article, me voici dans ma période « faire joujou avec l’anonymat et le chiffrage ».

Bon question anonymat je suis cuit (suffit de taper mon pseudo sur google et …), mais bon je peux rattraper le coup avec le chiffrage de mes données sensibles!!

Donc voilà quelque astuces pour épargner vos informations persos (mdp, …) des flics véreux, des FAI ou des personnes mal intentionnées.

Pour l’anonymat et la sécurité des données sur le net :

  • Courriels :
    • Connexion aux webmails/serveurs de mails en cryptées :
      • Soit par le protocole https pour les webmails
      • Option https de Gmail

      • Soit par les protocoles imaps / pop3s
    • Envoyer les messages et les pièces jointe chiffrées (quand ce sont des informations qui en valent la peine bien sûr ^^) :
      • Utiliser les clés de chiffrages GPG quand l’interlocuteur en a une.
      • Utilisation de l'extension FireGpg pour chiffrer et signer un message sur gmail

      • Utiliser des cryptages symétrique sinon (AES, RSA, …) en gardant à l’esprit que ça se casse facilement.
  • Messagerie instantanée :
    • Utilisation de chiffrage lors des authentifications (cf. option Amsn pour MSN)
    • Chiffrer les messages avec l’interlocuteur si le protocole le permet (cf. XMPP)
  • Navigation Web :
    • Préférer les systèmes d’authentification cryptés lors de l’utilisation d’identifiant/mdp (car ceux-ci devront être enregistré par le FAI si la loi cité dans le lien passe, … donc si c’est crypté ils ne peuvent rien en faire).
    • Utiliser des proxies (Tor ;) ) situé dans d’autre pays (et de préférences crypté) lorsque vous navigué sur des pages à contenu … litigieux?? (warez, … ^^ mais qui donc oserais??)
    • Sinon, prendre un login et un mot de passe bidon pour tous les autre sites

Pour la sécurité des données de votre PC :

  • Cryptage des données :
    • Partition entière ou répertoire :
    • Chiffrage de quelque données perso via GnuPG
  • Suppression des données :
    • Préférer des commandes de destruction et non l’utilisation de la corbeille ou du rm :
      shred -n 35 -z -u nomDuFichier

      Pour les fichiers qui en valent la peine ^^, genre les films qui ont été gravé ;) , et bien sûr éviter d’utiliser des partitions journalisées pour ce genres de données.

  • Accès physique à l’ordinateur : (ça peut arriver ^^)
    • Mettre un mot de passe au lancement du BIOS.
    • Mettre un mot de passe au lancement du GRUB. (bof bof)
    • Utiliser un bon mot de passe pour le lancement des sessions (avec un système de cryptages des partitions qui décrypte les partitions qu’a partir du moment où l’on est loggué, ça peut être super efficace).

Bon … faudrait pas que ce soit au point de vous dégouter de l’informatique ^^. Mais envisager de changer certaine de ces habitudes quant à l’utilisation des logins/mdp et du chiffrages de certain de ses courriels pour être assez utiles pour l’avenir …

Voilà, le chiffrage c’est bien sûr comme les préservatifs … c’est pas sûr à 100%, mais avec c’est mieux :p, et ont à tendance à ce prendre pour un agent secret lorsqu’on reçoit un message crypté^^

Php: éviter les injections tout en préservant l’intégrité des données

16 août 2008

Re bijour ^^

Encore une astuce à haute valeur philosophique …

Rapide rappel :

Pour éviter les SQL injections … la plupart du temps on fait appel à des addslashes, mysql_real_escape et … qui peuvent s’avérer dangeureuse suivant qu’on utilise du PHP5 ou PHP4 (et encore … la plupart du temps, il faut regarder les sous-sous version), alors il faut faire des fonctions qui teste tout et n’importe quoi … mais on est jamais sûr que sur tel ou tel serveur le script est sécurisé …

Alors voici une rapide astuce qui permet d’assurer la sécurité et l’intégrité des données (qui peut fonctionner tant que l’on ne fait pas d’insertion ^^).

Utiliser du md5!!! ou un autre type de chiffrage via crypt, … qui vous permettront de préserver l’intégrité des données transportées tout en ne portant pas préjudice au serveur SQL.

Exemple lors du login d’une personne, la requête associée pourrait être :

mysql_query(« select * from utilisateurs where login=’ ».mysql_real_escape($_POST['login']). »‘; »);

donc si un jour on transfert ce code sur un serveur ayant php 4.2 … le script ne marche plus ^^ (d’accord … qui irait passer de php5 à php 4.2 -> c’est pour l’exemple).

Par contre avec ce code :

mysql_query(« select * from utilisateurs where MD5(login)=’ ».md5($_POST['login']). »‘; »);

aucun problème … ^^ et vous êtes sûr que si ça renvoie une ligne ça soit la bonne ;) .

Bon comme dit dans l’introduction, il faut quand même insérer des données (et ouai ça arrive parfois :p), et là … ça ne marcherait plus trop à part si vous êtes billingue français/md5.

A propos de billinguisme français/md5, y’a un superbe logiciel qui permet de craquer du md5 de façon sympa et très rapide les md5 (md5brute : http://www.tuxemu.se.nu/)

Un projet de scanneur de vulnérabilités web open source

6 août 2008

Bonjour à tous …

Un petit article pour aujourd’hui : la présentation d’un de mes projets C++/QT4.

Pour le moment ça se nomme 2GWVS pour Grigis Gaetan’s Web Vulnerability Scanner (‘tain le nom ça déchire déjà!!), j’ai dit pour le moment parce que je sais pas trop quel nom donner au projet.

But du projet

Le but du projet est de créer un logiciel dans le genre d’Acunetix (pour ceux qui connaissent), qui liste l’ensemble des urls du site web, puis récupère les variables des urls et les changes pour permettre des tests, pour détecter d’eventuel vulnérabilité au SQL Injection, XSS, …

Simple exemple, imaginons l’url suivante : http://monsitepiratable/index.php?var1=id&var2=texte_lol

Le logiciel va découper les paramètres ce qui va donner var1=id et var2=texte_lol, ensuite le logiciel change le id ou le texte_lol par des codes qui pourrait mettre en valeur une vulnérabilité dans le genre injection SQL, XSS ou …

Fonctionnalités

Pour le moment le logiciel ne permet que :

  1. Le crawl complet d’un site avec la possibilité de choisir le type de crawl (par regExp ou xml pour les sites Xhtml).
  2. La possibilité d’utiliser un proxy pour le crawl (genre ratproxy) et un autre pour l’execution des « payloads » lors du scanne des vulnérabilité.
  3. La possibilité de changer son user-agent (hum hum utile?).
  4. La possibilité de charger un base de données de payloads (xd) système en cours de dév.
  5. La possibilité de scanner seulement un type de page (text/plain, text/html, …).
  6. La détection (foireuse) d’url rewriting qui peut gener les tests de vulnérabilité

Pour que le logiciel soit fonctionnel il faudrait :

  1. Revoir le système de gestion des urls crawlées (vive le franglais!), pour permettre d’executer les payloads.
  2. Imaginer un sytème d’éxecution de payloads
  3. (SECONDAIRE) revoir le code … car pour le moment, je code façon « kilométrique » … le code est crade.
  4. Améliorer l’interface, car pour le moment c’est très bof.
  5. Supporté les requetes de type POST.
  6. et plein d’autre chose.

Pourquoi un scanneur de vulnérabilités web open-source ?

Parce qu’il n’en existe pas réellement, la plupart son juste des logiciels qui regarde les numéros de version d’application genre phpbb et cherche dans leurs base de données si ce numéro de version est vulnérable, donc pour le petit webmaster qui crée sont site web, ce genre d’application est inutile.

D’autant plus que selon certaines études, 70% des sites web sur le net seraient vulnérable à diverses failles, le but de ce logiciel serait donc de permettre aux webmestres de vérifier la vulnérabilité de leurs site web au failles de type SQL Injection, XSS, failles php, … et ceci gratuitement ^^.

Location du projet

Donc voilà … si vous êtes intéressé le site du projet, le svn.

Bien entendu, si vous voulez participer, vous êtes le bienvenu.

Le petit screen pour la route ^^ :

Bloquer les visiteurs de votre site web utilisant tor

16 juillet 2008

Bonjour à tous …

Rapide astuce pour bloquer l’accès à votre site web depuis un réseaux Tor :

Il suffit de mettre le code suivant au début de vos page php (header ou autre).

A noter qu’il faudrait peut-être tester aussi les port 9001 (autre port de tor) et le port 8118 (le port de privoxy)

if(@fsockopen($_SERVER['REMOTE_ADDR'],"9050",$err1,$err2,0.5))
{
    die("Vous n'êtes pas autorisé à accéder à ce site web via le réseau Tor.");
}

Ce qui aura pour effet de bloquer l’accès au site en affichant le superbe message dans le die().

Mais pourquoi bloquer l’accès au visiteur utilisant le réseaux tor ? Tous simplement parce que des hackers s’éclatent à scanner des sites web (via acunetix ou autre) pour trouver des failles … en utilisant le réseau tor pour masquer leurs ip et ainsi agir en toute impunité.

Pour aller plus loin …

Si vous êtes futé … vous aurez remarqué qu’ici on test le port 9050 du client (le port de tor), l’on pourrait bien sùr créer un tableau pour bloquer l’accès au client ayant le port 8080 (proxy http) ouvert, ou bien d’autre ports réputés être le port d’un proxy ^^.

Détecter des failles dans vos sites web très facilement avec ratproxy

3 juillet 2008

Bonjour à tous …

Alors voila … je vais vous parler très rapidement de l’application ratproxy, qui est une application un peu différentes des scanners de sécurité du style acunetix, ou des proxy « facilitant les pentest » du genre (WebScarab, Paros, Burp ou ProxMon).

Celui-ci s’utilise comme un proxy (comme sont nom l’indique ;) ), et lorsque vous naviguez sur des sites, il regarde le contenu de la page web et imagine des failles possible, ce qui le rend très utile, car il ne regarde les failles que dans les pages que vous regardez, donc pas d’utilisation abusif de bande passante comme un scanner, des possibilités d’obtenir un rapide rapport de la session de surf (à générer depuis la console pour le moment), ce qui est très intéressant c’est qu’il analyse pas mal le javascript (XSS et …), possibilité de détecter des problèmes dans des applications Web2.0, du CSRF et autre …

Donc voilà … pour les webmasters qui ne veulent pas perdre trop de bande passante dans des tests de sécurités : lien de downloads (version béta!) (sortie il y a 6 heures!! noté que php-engineering is on the edge!!).

Pour compiler le logiciel, un simple make dans le dossier de l’appli suffit.

Ensuite faite :

./ratproxy -w session.log -x -t -s -c -g

qui vous permettra de générer un fichier session.log qui loggera les xss (-x) transversal directory (-t) les requetes post (-s) les cookie (-c) et -g les CSRF

Puis configurer firefox pour utiliser le proxy localhost:8080, puis pour récupérer un rapport :

./ratproxy-report.sh session.log >report.html

et voilà … il vous faudra ensuite lire le fichier avec firefox ^^ et vous aurez accès à pas mal d’info sympa sur votre site web.

Pourquoi scanner votre site web?? Tous simplement parce que 70% des sites web possède des failles … mon stage au MIV l’aura prouvé ^^.

Allez bonne après-midi!!

Utilisation de socat avec Tor

27 juin 2008

Bonjour à tous …

Alors voilà, dans mes éternelles idées stupide, j’ai voulu rediriger des ports de mon ordi sur d’autres ordis via le réseaux tor

L’intérêt ?? L’anonymité bien sûr xD. (et d’autre chose bien plus suptile, mais bon :) ).

Imaginons (simple exemple (très inutile)), que l’on veuille ce connecter au superbe site php-engineering.info (donc au port 80), en passant par une addresse local, qui redirigera via le proxy tor au site du domaine php-engineering.info.

Les outils :

socat et tor (a installer si ça n’est pas déjà fait).

La commande de socat à exécuter :

socat TCP4-LISTEN:1337,fork SOCKS4A:localhost:www.php-engineering.info:80,socksport=9050

(avec tor sur le port 9050 bien sûr ^^).

Ensuite, prenez votre navigateur favoris et allez à l’adresse http://127.0.0.1:1337, et là comme par magie vous tombez sur le site de php-engineering.info. Oui mais la vous allez dire : qu’est-ce que tu nous sort là … on a des proxy qui nous permettent de faire ça … (via privoxy ou autres astuces).

Oui, mais là l’astuce c’est que l’on peut utiliser notre navigateur, mais aussi d’autre logiciel qui ne peuvent pas utiliser des proxies (qui a dit nmap??).

Donc voilà … vous voulez jouer à ETQW sur un serveur via un proxy tor … vous avez la solution ;) .

BT3 dans les bacs … les hackeurs vont se régaler

26 juin 2008

Rebijour à tous …

Autre grosse nouvelle du jour d’il y a quelque jour ;) .

La sortie de BackTrack 3 en version final disponible en LiveCD/USB ou image VmWare de la distribution basé sur SlackWare dédié au piratage pentest

Les matos/logiciels embarqués :

Kernel : 2.6.21.5 (support du Dual Core … ça va chauffer lors du cracking ;) )

L’ensemble des drivers nécessaire pour le Wifi (dont certain comme Atheros) (le piratage pentest des réseaux wifi oblige …).

Niveau hacking pentesting :

Les tools de « décryptage/brute force » dont la série de gestion des Rainbow Table (pour craquer des gros mot de passe « à la volée » ou presque 30 secondes pour un mdp Windows de 14 caractères ….).

A noter aussi l’ajout de spoonWep un outil qui crack les réseaux wep en moins de 5 minutes des clés de 10 caractères … on se sent nu là xD

Génération de payloads : metasploit mis à jour … qui a besoin de ça … on les code nous-même nos shellcode ^^.

Les outils de scan : a noté que SAINT offre une licence d’un an aux utilisateurs pour scanner des range d’ip … aller savoir pourquoi … (pas mal de pays se dote d’une cyber-army … alors autant balancé tous le monde dans la mélée xD).

Forensics tools : Niveau recherche et mise en relation d’information, l’auteur de maltego a fait une version très spéciale …

Pour télécharger bt3

Bon hack pentest ;)

Se protéger contre la failles CSRF

6 juin 2008

Bonjour,

Avec la technologie ajax, les failles CSRF commencent à fleurirent sur internet. Mais qu’est-ce que la faille CSRF ?

Un petit tour sur Wikipedia suffit, ça signifie : Cross-Site Request Forgeries, en fait, il s’agit d’une technique très simple de hacking, qui consiste à rediriger une personne (de préférence un administrateur), sur son site avec des requêtes (en GET ou en POST cf. Protocole HTTP) susceptible de porter atteinte au contenu du site web.

Exemple :

Soit le Pigeon P, administrateur d’un site web dans lequel l’url suivante : http://p-site/post.php?titre=titre&art=article permet l’ajout d’un article avec le titre et le contenu de l’article (exemple stupide).

Imaginons, que P fréquente souvent un forum F, et qu’un Hacker H le sache, il suffit à H de mettre le code suivant comme avatar : http://p-site/post.php?titre=Owned&art=hacked, générant donc sur le forum F, le code suivant : <img src= »http://p-site/post.php?titre=Owned&art=hacked » />, lorsque P regardera le post du hacker H, son navigateur cherchera l’image du lien, et executera l’ajout de l’article (si P était encore authentifié sur son site bien sûr …).

Vous aurez donc très vite compris l’interêt de ce déconnecter d’un site web, d’un forum ou d’un blog tous de suite après avoir effectué vos actions courante …

Bien entendu ce protéger de ce genre d’attaque peut être mieux que de ce déconnecter à chaque fois, d’autant plus que parfois, ça arrive, on oublie de ce déconnecter.

Une technique de protection pour une requête de type POST peut-être la suivante :

$url_de_votre_site= »http://www.php-engineering.info/ »;
  1. if($_SERVER['REQUEST_METHOD']=="POST" AND
  2. !preg_match("#^".$url_de_votre_site."#i",$_SERVER['HTTP_REFERER']))
  3. {
  4. echo "Tentative de CSRF sur un formulaire";
  5. exit;
  6. }
  7. ?&gt;

Une technique de protection pour une requête de type GET peut-être la suivante :

$url_de_votre_site= »http://www.php-engineering.info/ »;
  1.  
  2. //les fichiers auquels on ne peut accéder directement via un autre site
  3. $tab_fichier_interdit[]="edit.php";
  4. $tab_fichier_interdit[]="supprime.php";
  5.  
  6. if($_SERVER['REQUEST_METHOD']=="GET" AND
  7. !preg_match("#^".$url_de_votre_site."#i",$_SERVER['HTTP_REFERER']))
  8. {
  9. $f=substr($_SERVER['REQUEST_URI'],0,strrpos($_SERVER['REQUEST_URI'],"?"));
  10. //on enlève ce qui est après le ?
  11. $f=substr($f,strrpos($f,"/")+1,strlen($f));
  12. //on isole le nom du fichier
  13.  
  14. //et on regarde si c'est un fichier qui ne doit pas être accéder
  15. //directement depuis un autre site web
  16. if(in_array($f,$tab_fichier_interdit))
  17. {
  18. echo "Tentative de CSRF sur une url";
  19. exit;
  20. }
  21. }

Bon, bien sûr, il existe d’autre technique, comme mettre un captcha.

Mais pourquoi ai-je critiqué l’ajax ?

Tous simplement, parce que la plupart du temps les développeurs ajax, préfère utiliser du get que du post … aller savoir pourquoi (avec scriptaculous, que ce soit en GET ou en POST c’est presque la même chose).

A noter que par exemple gmail n’utilise que du get dans son système de mail … il paraitrait que des hackers se sont pas mal amusé avec, et qu’il existerait encore des failles … penser à vous déconnecter.