Category Archives: Security

Tips and studies on security tools and concept.
Astuces et analyse sur les outils de sécurité et les concepts associés

Propagation de virus au travers de Wifi (anticipation)

Le fait de voir toutes ses AP visibles depuis mon réseau Wifi me font imaginer une nouvelle façon de propager un virus … un système nouveau efficasse et totalement automatique … Bien sure c’est totalement imaginaire, mais peut etre l’avenir ?
Voici quelques idées un peu en vrac…
Les virus que je trouve les plus impressionnant et interressant (disons intellectuellement parlant uniquement) sont ceux qui sont capable de s’auto-répliquer sans action de la part de l’utilisateur : ils sont emis par des machines infectées qui vous attaquent presque au hazard quand vous vous connectez sur Internet par exemple, s’installent puis se répliquent …

Le voie de contamination par l’Internet est connue, est en partie protégée par les systèmes de NAT et firewall intégrées aux routeurs.
Il existe maintenant une nouvelle voie de propagation : nos point d’accès Wifi. En effet, un virus, une fois installé sur une machine pourrait etre capable de scanner l’entourage wifi de votre réseau puis de mettre en oeuvre les technique d’attaque connue pour pénétrer ces réseaux voisins. Il pourra ensuite s’y dubliquer et les copies attaqueront les reseaux voisins… et ainsi de suite.

Avec le maillage Wifi actuel fournit par nos provider hexagonaux, la propagation de la contamination, en ville pourrait etre rapide et très large.

Les applications sont très larges et depassent d’usage classique d’un virus en permettant aussi la creation d’un reseau urbain logique multi-point de sortie / anonymisation …

Tout celà est totalement imaginaire, à ne surtout pas mettre en oeuvre bien sure, mais je trouve l’idée assez interressante.

Pour exister il faut au moins :

  • Une faille exploitable permettant l’auto-réplication des virus
  • Une methode d’attaque Wifi simple et rapide pour le Wep (on l’a) et le WPA
  • Une compatibilité de cette attaque avec le matériel wifi répendu et fonctionnant sous Windows

Avantages :

  • la diffusion du virus est quasiement impossible à tracer
  • La diffusion du virus passera par la voie des airs grace aux machines mobiles, elle penetre de fait une bonne parties de protections de réseaux classique
  • Elle peut s’en prendre à des appareils mobiles pourquoi pas (téléphones, PDA)

Applications :

  • Espionnage et surveillance
  • Constitution d’un reseau anonyme et utilisable de n’importe où en milieu urbain
  • Constitution d’un reseau à très fort maillage et donc très resistant
  • Classique groupe de robots d’attaque…
Posted in Security | Leave a comment

Cryptage WEP – Comment fonctionne-t-il ?

Quelques lignes pour décrire le fonctionnement d’un cryptage de type wep …
Le WEP (Wired Equivalent Privacy (lol)) repose sur un cryptage simple de type XOR (ou exclusif) entre la chaîne initiale et une clef de même longueur. La dite clef est obtenue par un algorithme RC4 initialisé à partir d’une clef partagée et un IV (Initialization Vector) aléatoire ou tout au moins dynamique.

Le cryptage se fait de la façons suivante :
– L’emetteur choisit un IV de 24 bits qu’il concatène à la clef partagée. De cette façon nous obtenons 2^24 clefs différentes à partir d’une clef partagée statique, elle même de 104 bits (pour un total de 128 bits).
– Le RC4 est initialisé avec cette clef : le but du RC4 est de remplir un tableau de 256 octets avec cette clef, puis de piocher dans ce tableau des valeurs tout en les modifiant au fur et à mesure. Cette methode permet à partir d’un clef d’obtenir une suite unique et pseudo aléatoire de valeurs à sa sortie.
– La sortie du RC4 est ensuite utilisée pour crypter la chaîne à envoyer. Le RC4 genère un flow de bits (ou octets) infini, il est donc tout à fait adapté au cryptage de données de longueur variable comme des trames réseaux.
– La trame est émise vers le destinataire en incluant l’IV de sorte que le destinaitre soit capable de recréer la même suite RC4 pour décrypter le message.
– Le recepteur est donc à même de générer une clef de (dé)cryptage identique à l’emeteur, issue de RC4, il ne lui reste plus qu’à appliquer la même fonction que pour le cryptage puisque (N XOR K) XOR K = N avec N le message initial.

Voila comment celà se passe, comment celà est-il attaqué alors ?
– Tout d’abord, avec une seule clef partagée, il y a 16M de clefs générées, ce qui signifie que la véritable clef de cryptage issue du RC4 change régulièrement, pour ainsi dire à chaque trame ce qui complique la donne.
– Pour attaquer ce type de cryptage, il faut donc tout d’abord s’attaquer à la véritable clef de crytage issue de RC4 et l’identifier ; en identifier un maximum. Pour se faire il est nécessaire de connaitre des données claires et cryptées, récupérer la clef est alors simple, il suffit d’appliquer : (N XOR K) XOR N = K. Cette opération est possible sur certaines trames récurentes dont l’entete est connue des ARP par exemple, ce qui permet de connaitre les premiers octets de la suite.
– Une fois que l’on a collecté de multiples entêtes de clefs issues de RC4 avec leur partie IV associée, il reste à trouver quelles sont les clefs sources ayant le plus probablement conduit à cette génération et ainsi déterminer la clef partagée initiale.
– Cette approche est statistique puisque plusieurs clefs peuvent conduire au même début de suite issu de RC4 (et nous ne connaissons que le début !) Ainsi nous ne pouvons calculer que des suppositions sur le contenu initial du tableau RC4 et eliminer des solutions impossibles.
– De fait pour optimiser la recherche, il est nécessaire, soit d’avoir un maximum de trames et d’IV (de 500.000 à 3 M en général), soit d’avoir des suites plus longues issues du RC4.

Posted in Security | Leave a comment

Comment fonctionne WEP ?

C’est à grand renfort d’articles sur tout la toile qu’un nouveau POC (Proof Of Concept) vient annoncer que WEP est mort ! rien de bien nouveau en soit puisqu’on l’avait dejà tué depuis des années, mais cette fois la méthode est plus rapide, plus automatique et sans doute bientot à la portée de tous, ou presque.

Est-ce alarmant ? en soit, utiliser Wep est alarmant depuis bien longtemps, donc un peu plus un peu moins ? et si vous dormez sur vos deux oreiles malgré cela et bien continuez ! il n’y a pas de raisons ; le tout c’est d’en être concient, non ?

Qu’est ce que cette nouvelle methode de Bitau, Handley et Joshlack ? Elle repose en fait sur l’utilisation d’un utilitaire existant dans le protocole 802.11 (Wifi) : la fragmentation de trame ou plutot la défragmentation par l’AP. Le rôle de l’AP dans un réseau avec architecture est de recevoir les trames de tout le monde puis de les réémettre : ainsi si tout le monde capte l’AP, tout le monde peut communiquer, y compris si deux postes sont trop distants pour se joindre directement … L’AP etant un périphérique intelligent, lorsqu’il recoit des fragments de trames, il commence par les réunir en trame plus grosses avant de les réémettre. Alors comment cela nous aide-t-il a craquer une clef Wifi, c’est assez simple :
Avec le cryptage WEP, qui n’est autre qu’un simple XOR, il suffit de connaitre une chaine et son equivalent crypté pour connaitre la clef de cryptage, donc puisque nous captons des données cryptées, il nous faut connaitre leur equivalent non crypté pour connaitre la clef associée. Les protocoles de couches basse nous aident en celà : certaines trames LLC/SNAC, ARP ont des parties qui sont constantes et celles-ci sont identifiables par des tailles caractéristiques. En captant ces trames, nous avons des données cryptées et connaissons leur équivalent non crypté. Ainsi il est possible d’obtenir facilement quelques octets de la clef de cryptage (qui n’est cependant pas directment la clef partagée que l’utilisateur configure).
Cette étape accomplie, la nouvelle solution par fragmentation entre en jeu : les morceaux de clef que nous avons sont trop petits, la fragementation va nous permettre de les multiplier : il suffit de renvoyer plusieurs fois la trame reçue en l’indiquant fragmentée : connaissons la cryptée et son équivalent décryptée. L’AP va recevoir ces fragments, les décrypter et les assembler dans une nouvelle trame qu’il va crypter puis, enfin, réémettre cettre trame sur le réseau. Cette trame nous allons pouvoir l’écouter, nous connaissons sa version non cryptée puisqu’il s’agit de la concaténation du message precédent avec lui-même et l’AP vient de nous fournir sa version cryptée. Nous sommes donc à même, comme à l’étape 1 de connaitre la clef associée, mais cette fois nous n’avons plus 8 octets mais n*8 octets (avec n le nombre de framents).

En continuant ainsi il est possible d’obtenir une clef de cryptage valide suffisemment grande pour crypter n’importe quel paquet. Nous allons donc pouvoir emettre sur le réseau n’importe quel paquet, sans connaitre la clef partagée initiale mais simplement la suite issue du RC4. Cette facultée va nous permettre de générer du traffic valide vers le réseau et ainsi collecter un maximum de trames pour, par la suite, lancer une attaque sur ces informations et en déduire la clef partagée (type aircrack).
Cette methode, présentée ainsi est donc une solution plus rapide et encore imparable pour générer du traffic : le principe de defragmentation est à la base du protocole, il est difficile de le bloquer alors que bloquer les réémissions forcée d’une methode aireplay est assez courant. Par ailleurs, il permet de connaitre bcp plus de données de chaque chaînes cryptées (contrairement aux ARP habituels) et ainsi d’etre plus efficasse avec moins de trames.
Cette mehode reste totalement interdite à l’utilisation hors de son propre réseau privé puisqu’elle demande l’emission de données vers le réseau distant, ce qui implique une intrusion dans le dit système, Acte répréhensible par la lois.

Les auteurs de cette methode, proposent une autre alternative à la simple collecte d’informations en vue de connaitre la clef partagée ; en effet, ils proposent d’utiliser cette methode, associée à d’autres pour forcer l’AP à router des paquets cryptés vers l’Internet : dans ce cas, le paquet emis en direction de l’Internet est décrypté par l’AP avant d’etre envoyé sur la ligne (logique on sort du WLAN). Le site distant est alors un site amis du pirate qui va ainsi recevoir les données décryptées issues du réseau WLAN dit “sécurisé” … pas mal ! Le principe en est assez simple, il s’agit de créer une entête IP a destination du serveur sur l’Internet, de l’indiquer fragmenter et de réémettre un paquet crypté que l’on souhaite faire décrypter en l’indiquant comme étant la suite du précédent. L’AP va alors decrypter les deux, concaténer le paquet “secret” à notre entete IP, constater qu’il s’agit d’une trame pour l’extérieur et la router décryptée. Reste que ce type d’attaque est plus facile à tracer qu’un wardriving sauvage, rendu rapide par la methode.

Quid de l’implémentation ? Les auteurs proposent quelques sources de leur POC, la mise en oeuvre demande un contrôle au niveau le plus bas des cartes Wifi, pour, entre autre, gérer les flags permettant la fragmentation au niveau logiciel. Ces possibilités ne sont pas offertes sure toutes les puces ou demandent des workaround un peu touchy .. bref, pour l’instant 2 chips sont supportés dont le PRISM2. Il y a de fortes chances pour que d’autres arrivent.
Point vraiment interressant, ce qu’ils ont mis en oeuvre est totalement automatisé, contrairement à ce qui existe sur aircrack. Les outils aircrack ne peuvent pas etre mis entre toutes les mains, elle doivent toujours être averties : ligne de commandes, options compliquées… Une solution entierement automatisée pourrait etendre la chose aux pirate boutoneux du dimanche …
Il n’en reste pas moins que ca ne marche et ne marchera sans doute jamais que sous Linux et autre BSD ;o)

Posted in Networks, Security, Technologies | Leave a comment

Portes dérobées dans les BIOS

Les fabriquants de bios prévoient souvent des portes dérobées pour accéder aux bios alors que ceux-ci sont protégés par des mots de passe … bien utile pour s’eviter un démontage suivi de son clear CMOS …
En voici une liste :

Backdoor Passwords

Many BIOS manufacturers have provided backdoor passwords that can be used to access the BIOS setup in the event you have lost your password. These passwords are case sensitive, so you may wish to try a variety of combinations.

WARNING: Some BIOS configurations will lock you out of the system completely if you type in an incorrect password more than 3 times. Read your manufacturers documentation for the BIOS setting before you begin typing in passwords.

Award BIOS backdoor passwords:

ALFAROME	 	BIOSTAR	 	KDD	 	ZAAADA
ALLy	 	CONCAT	 	Lkwpeter	 	ZBAAACA
aLLy	 	CONDO	 	LKWPETER	 	ZJAAADC
aLLY	 	Condo	 	PINT	 	01322222
ALLY	 	d8on	 	pint	 	589589
aPAf	 	djonet	 	SER	 	589721
_award	 	HLT	 	SKY_FOX	 	595595
AWARD_SW	 	J64	 	SYXZ	 	598598
AWARD?SW	 	J256	 	syxz	 	 
AWARD SW	 	J262	 	shift + syxz	 	 
AWARD PW	 	j332	 	TTPTHA	 	 
AWKWARD	 	j322	 	 	 	 
awkward 	 	 	 	 	 	

AMI BIOS Backdoor Passwords:

AMI	 	BIOS	 	PASSWORD	 	HEWITT RAND
AMI?SW	 	AMI_SW	 	LKWPETER	 	CONDO

Phoenix BIOS Backdoor Passwords:

phoenix	 	PHOENIX	 	CMOS	 	BIOS

Misc. Common Passwords

ALFAROME	 	BIOSTAR	 	biostar	 	biosstar
CMOS	 	cmos	 	LKWPETER	 	lkwpeter
setup	 	SETUP	 	Syxz	 	Wodj

Other BIOS Passwords by Manufacturer
Manufacturer      	Password

VOBIS & IBM	merlin
Dell	        Dell
Biostar	        Biostar
Compaq	        Compaq
Enox	        xo11nE
Epox	        central
Freetech	Posterie
IWill	        iwill
Jetway	        spooml
Packard Bell	bell9
QDI	        QDI
Siemens	        SKY_FOX
TMC	        BIGO
Toshiba	        Toshiba

Toshiba BIOS

Most Toshiba laptops and some desktop systems will bypass the BIOS password if the left shift key is held down during boot

IBM Aptiva BIOS

Press both mouse buttons repeatedly during the boot
Posted in Security | Leave a comment

Appeler la messagerie d’un destinataire

Ce message n’a pas grand chose à faire là et c’est un peu un inclassable mais bon … Petite note pour rappel sur comment obtenir directement la messagerie d’un correspondant plutot que de faire sonner son GSM. Pour France télécom, il faut composer le 06 80 80 ab cd avec abcd tel que le numéro du destinataire est 06 ab cd ?? ??. Pour SFR, il faut appeler le 06 12 00 12 12
Ensuite, se laisser guider par le système vocal.

Posted in Security | Leave a comment

Patch du driver rt2570 pour permettre le changement d’adresse MAC

Note : depuis mon patch à été ajouté directement dans les drivers natif …

Le drivers rt2570, correspondant aux chip USB ralink souffre d’un petit bug, à moins qu’il ne s’agisse d’une fonctionnalité, je ne sais pas ! il n’est pas possible de changer leur adresse MAC.

Après analyse du problème, il s’avère que lorsque l’on remonte le driver par un ifconfig rausb0 up celui-ci effectue une réinitialisation complète du périphérique incluant donc le rechargement de l’adresse MAC d’origine et venant donc écraser celle configurée précédemment par le ifconfig rausb0 hw ether ….

La solution a ce problème est assez simple, lors de l’init que l’on trouve dans rtusb_main.c il suffit de tester si l’adresse MAC du net_dev vaut 00, auquel cas on charge celle de la carte (premier appel) sinon, on conserve la valeur du net_dev qui correspond à celle forcée.
Ce qui se traduit par :

Dans la fonction usb_rtusb_open, ligne 1231 environ
RTUSBCmd_kill =0;
CreateThreads(net_dev);
memcpy(pAdapter->net->dev_addr, pAdapter->CurrentAddress, pAdapter->net->addr_len);
// Clear Reset Flag before starting receiving/transmitting
RTMP_CLEAR_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS);

Va devenir:

RTUSBCmd_kill =0;
CreateThreads(net_dev);
// at every open handler, copy mac address.
// PATCH >>>>>>>>>>>>>>>>>>
if ( net_dev->dev_addr[0] == 0 && net_dev->dev_addr[1] == 0 && net_dev->dev_addr[2] == 0 &&
net_dev->dev_addr[3] == 0 && net_dev->dev_addr[4] == 0 && net_dev->dev_addr[5] == 0 ) {
// First time initialization
memcpy(pAdapter->net->dev_addr, pAdapter->CurrentAddress, pAdapter->net->addr_len);
} else {
// Next time “la vérité est ailleurs!”
memcpy(pAdapter->CurrentAddress, pAdapter->net->dev_addr, pAdapter->net->addr_len);
}
// <<<<<<<<<<<<<<<<< PATCH

// Clear Reset Flag before starting receiving/transmitting
RTMP_CLEAR_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS);

Après on recompile, et la solution a l’air de fonctionner …. ??? et bien en fait non elle ne fonctionne pas !! oups.. j’aurais dû un peu plus tester … j’avais un petit oubli … voila qui est corrigé ! merci à larbig d’avoir complété le boulo.
Il semble en effet que l’adresse MAC doit être la même entre le pAdapter et le net_dev sans quoi les trames ne sont pas emises dans l’air … ennuyeux. voici donc le patch complet et cette fois testé !! sisi !! Les modifications sont cette fois dans rtusb_init.c où il faut modifier la fonction NICReadEEPROMParameters de la façon suivante :

VOID    NICReadEEPROMParameters(
        IN      PRT2570ADAPTER  pAdapter)
{
        USHORT                  i;
        int                     value;
        UCHAR                   TmpPhy;
        EEPROM_TX_PWR_STRUC     Power;
        EEPROM_ANTENNA_STRUC    Antenna;//blue
//      EEPROM_VERSION_STRUC    Version;

        DBGPRINT(RT_DEBUG_TRACE,"--> NICReadEEPROMParameters ");

        //Read MAC address.
        RTUSBReadEEPROM(pAdapter, EEPROM_MAC_ADDRESS_BASE_OFFSET, pAdapter->PermanentAddress, ETH_LENGTH_OF_ADDRESS);
        DBGPRINT_RAW(RT_DEBUG_TRACE,"MAC address ReadEEPROM : ");
        for (i = 0; i < ETH_LENGTH_OF_ADDRESS; i++)
                DBGPRINT_RAW(RT_DEBUG_TRACE,"%02x ", pAdapter->PermanentAddress[i]);
        DBGPRINT_RAW(RT_DEBUG_TRACE," ");

        if (pAdapter->PortCfg.bLocalAdminMAC != TRUE)
        {
                pAdapter->CurrentAddress[0] = pAdapter->PermanentAddress[0];
                pAdapter->CurrentAddress[1] = pAdapter->PermanentAddress[1];
                pAdapter->CurrentAddress[2] = pAdapter->PermanentAddress[2];
                pAdapter->CurrentAddress[3] = pAdapter->PermanentAddress[3];
                pAdapter->CurrentAddress[4] = pAdapter->PermanentAddress[4];
                pAdapter->CurrentAddress[5] = pAdapter->PermanentAddress[5];
        }

devient

VOID    NICReadEEPROMParameters(
        IN      PRT2570ADAPTER  pAdapter, struct net_device *net_dev)
{
        USHORT                  i;
        int                     value;
        UCHAR                   TmpPhy;
        EEPROM_TX_PWR_STRUC     Power;
        EEPROM_ANTENNA_STRUC    Antenna;//blue
//      EEPROM_VERSION_STRUC    Version;

        DBGPRINT(RT_DEBUG_TRACE,"--> NICReadEEPROMParameters ");

        //Read MAC address.
        RTUSBReadEEPROM(pAdapter, EEPROM_MAC_ADDRESS_BASE_OFFSET, pAdapter->PermanentAddress, ETH_LENGTH_OF_ADDRESS);
        DBGPRINT_RAW(RT_DEBUG_TRACE,"MAC address ReadEEPROM :");
        for (i = 0; i < ETH_LENGTH_OF_ADDRESS; i++)
                DBGPRINT_RAW(RT_DEBUG_TRACE,"%02x ", pAdapter->PermanentAddress[i]);
        DBGPRINT_RAW(RT_DEBUG_TRACE,"");

        if (pAdapter->PortCfg.bLocalAdminMAC != TRUE)
        {

           if ( net_dev->dev_addr[0] == 0 && net_dev->dev_addr[1] == 0 && net_dev->dev_addr[2] == 0 &&
             net_dev->dev_addr[3] == 0 && net_dev->dev_addr[4] == 0 && net_dev->dev_addr[5] == 0    ) {
                // Startup time ... read the original MAC
                pAdapter->CurrentAddress[0] = pAdapter->PermanentAddress[0];
                pAdapter->CurrentAddress[1] = pAdapter->PermanentAddress[1];
                pAdapter->CurrentAddress[2] = pAdapter->PermanentAddress[2];
                pAdapter->CurrentAddress[3] = pAdapter->PermanentAddress[3];
                pAdapter->CurrentAddress[4] = pAdapter->PermanentAddress[4];
                pAdapter->CurrentAddress[5] = pAdapter->PermanentAddress[5];
           } else {
                // Next time, get the MAC from net_dev->dev_addr
                printk(KERN_INFO "net_dev supplies MAC, activating this one :%02x:%02x:%02x:%02x:%02x:%02x.",
                        net_dev->dev_addr[0], net_dev->dev_addr[1], net_dev->dev_addr[2],
                        net_dev->dev_addr[3], net_dev->dev_addr[4], net_dev->dev_addr[5]);
                memcpy(pAdapter->CurrentAddress, pAdapter->net->dev_addr, pAdapter->net->addr_len);
           }
        }

La mécanique est axactement la même que celle faite précédemment : lors du premier appel on fait comme si de rien n’etait et on recupère l’adresse en EEPROM, pour les appels suivant on choisit la MAC du net_dev à la place.
Pour que ca fonctionne il reste deux petites modifications, modifier le header de cette fonction : dans rt2570sw.h

VOID  NICReadEEPROMParameters(
      IN  PRT2570ADAPTER       pAdapter);

devient :

VOID  NICReadEEPROMParameters(
      IN  PRT2570ADAPTER       pAdapter, 
      struct net_device *net_dev);

enfin il reste l’appel de la fonction de lecture à modifier, dans rtusb_main.c:

   NICReadEEPROMParameters(pAdapter, net_dev);

Ca y est !!

Posted in Hardware, Security | Leave a comment

Création d’espace crypté sous Linux

Lorsque l’on souhaite crypter des données avec Linux, il est assez simple de créer une partition cryptée, celle-ci est montée au démarrage ou à la demande ; le disque seul, sans mot-de-passe, devient inutilisable.
Toutefois, cette solution ne permet pas bien, ni la sauvegarde des données cryptées, ni le déplacement physique de ces données, ni leur copie lors d’une réinstallation qui devient alors une étape critique.

La solution à ces problèmes est l’utilisation d’un fichier crypté plutot que d’une partition cryptée. Le fichier en question sera une parition logique cryptée ou cryptofile. La partition logique ainsi crée est en réalité un fichier qui pourra donc être manipulé comme tel.
La création passe par plusieurs étapes :

  • Créer une partition logique initialisée aléatoirement de sorte à faire du bruit.
    dd if=/dev/urandom of=systFile1 bs=1k count=300000
    Cette commande initialise un fichier systFile1 de 300000 blocs de 1ko. Le nombre et la taille des blocs est à votre discretion.
  • Il faut ensuite associer ce fichier à un périphérique loop qui va permettre, non seulement de considérer le fichier comme un périphérique et de le traiter, donc, comme une partition physique, mais aussi de gérer le cryptage / décryptage des informations.
    losetup -e twofish256 -T /dev/loop0 systFile1
    twofish256 est le cryptage retenu, l’option -T va demander 2 fois la saisie du mot de passe, /dev/loop0 correspond au périphérique loop, il est possible de choisir loop1, loop2… enfin on trouve le fichier précédemment créé.
  • Il reste à formater la partition :
    mkfs -t ext2 /dev/loop0
  • Enfin, la partition peut être montée comme n’importe quelle autre à l’aide de mount :
    mount -t ext2 /dev/loop0 mnt/

Cette solution fonctionne parfaitement, toutefois, en cas de saisie d’un mot de passe erroné, le système à tendence à bloquer n’arrivant pas à monter la partition. Des options permettent sans doute d’eviter cela… si vous le connaissez, donnez-les mois ;o).
Petite remarque enfin, n’oubliez pas de monter le module loop_fish2

Posted in Security, Systems | Leave a comment

Mots de passe, attaque brute force, sécurité

A la question votre mot de passe est-il sûr, la réponse est … vérifiez-donc !

Je me posais cette question depuis quelque temps ce qui est l’occasion de faire un petit article sur la chose. La recherche de mots de passe ne se déroule pas comme dans les films, en testant sur le site tous les mots de passe possible ; on ne trouve pas non plus les digit un à un ; effet cinématographique mais mathématiquement idiot …
La recherche de mots-de-passe est généralement possible à partir du moment où celui qui veut le cracker va le posséder. Pas évident me direz-vous mais combien t’entre nous utilisent le même password pour la maison, le travail, l’internet… autant d’opportunités pour un pirate éventuel de se le procurer. D’où la première règle : à son environnement son propre mot-de-passe ; ou en posséder plusieurs par classe de sécurité.

Bref obtenir des passwords n’est pas très compliqué, toutefois, ceux-ci sont cryptés selon des méthodes non réversibles, c’est à dire qu’il ne sera pas possible de décrypter le mot de passe lu. Par ailleurs, la version cryptée ne permet pas de présager du nombre de lettres ni du type de lettres. Le décryptage se fait donc par comparaison, il suffit donc d’essayer toutes les combinaisons possibles, de les crypter et de comparer le résultat obtenu avec celui recherché. Si les deux chaines cryptées sont identique le mot-de-passe courant sera le bon. Simple donc !

C’est là que les math entre en jeu. Combien de temps faut-il pour trouver la chaîne initiale ? Tout celà dépend du nombre de combinaisons possibles, lors d’une attaque brutale c’est le nombre de [caractères différents] à la puissance [nombre de caractères de la chaîne]. Le temps est donc fonction de la taille de la chaine et des caractères utilisés. Voici quelques exemples :

Sur un Athlon XP 2400@1.5GHz :
Chaine numérique pure :

  • 7 digits : 5 secondes
  • 8 digits : 1 minute

Chaine alphabétique en minuscules:

  • 6 digits : 6 secondes
  • 7 digits : 2 minutes
  • 8 digits : 14 minutes

Chaine alpha_num minuscules/majuscules:

  • 4 digits : 7 secondes
  • 5 digits : 8 minutes
  • 6 digits : 84 minutes

Chaine tous caractères:

  • 4 digits : 38 secondes
  • 5 digits : 1 heure
  • 6 digits : 100 heures

Suivant ses résultats, je tire deux conclusion, l’usage de chaines composée d’une maj, d’un symbol spécial suffit pour obliger l’usage d’une recherche tous caractères et c’est dans ce cas que les performances sont vraiment amoindries. Car la logique veut que l’attaquant essayes les combinaisons les plus simples en premier avant le mode tout caractère vu l’ecart significatif dans les temps de traitement.
La seconde conclusion concerne la taille, il est evident qu’une chaîne avec une longueur inférieur à 5 est une pure folie !

Suis-je alors sauvé si mon mot de passe fait plus de 8 digits ?
Et bien non, tout simplement car l’usage veut que l’on utilise des mots de passe simplement mémorisable, souvent nom, prenoms, date de naissance, nom commun… Cet usage est facilement compréhensible, la mémoire humaine ayant ses liminites. Les outils de recherche ont donc pris en compte cet aspect de la nature humaine et utilisent des dictionnaires. C’est une simple liste de mots communs qui servira de référence : plutot que de chercher parmi toutes les chaînes, cherchons parmi celles que notre mémoire nous conduira à favoriser. Le programme sera capable de composer des variantes classiques à partir de cette liste : ajout de majuscules, chiffres, caractères spéciaux. Alors, combien de temps faut-il pour trouver un mot de passe commun ?

Sur un Athlon XP 2400@1.5GHz, avec un dictionnaire de 237000 mots français et des règles de transformation standard, comptez moins de 5 minutes pour tester toutes les possibilités.

Et ce, bien sure, quelque soit la taille de la chaîne choisie. Cette méthode étant la plus efficasse, c’est la principale utilisée.

Donc, que va faire (logiquement) un pirate qui souhaitera connaitre votre mdp ?

  • 1. Lancer une attaque par dictionnaire
  • 2. Lancer une attaque par date (8 digits)
  • 3. Lancer une attaque alpha lower (7 digits)<.LI>
  • 4. Lancer une attaque alpha upper (7 digits).
  • 5. Lancer une attaque alpha (5 digits)

Un pirate qui ne vous en veut pas particulièrement à vous devrait grosso-modo s’en arrêter là car il trouvera sans doute 30 à 40% de mots de passe en suivant ces règles. Et ce dans un temps d’environ 10 minutes. Pour éviter ce genre d’attaque, les règles pour choisir un bon mot de passe sont donc les suivantes :

  • Utiliser au moins 1 digit + 1 symbol spécial + 1 majuscule.
  • Utliser une logueur d’au moins 8 caractères
  • Banir les mots usuels

Alors comment avec celà tourver un mot qui soit mémorisable facilement … Je vous propose une solution simple : utiliser la phonétique choisissons par exemple le prénom paulcomme base :

  • Ne pas le trouver dans le dico : pol
  • Augmenter la taille et complexifier : pPoOlL
  • Ajouter des carcatères spéciaux : [pPoOlL]

Voila 8 digit plutot simple à mémoriser surtout si le mot de base est familier. Pour augmenter la taille il suffit de choisir un mot plus long. Votre cerveau doit alors mémoriser la méthode et non le mot-de-passe en lui même.

Si maintenant vous devez vous protéger de quelqu’un qui cherche à vous ataquer personnellement, le choix du mot de passe est plus compliqué, mais basé sur le même principe, toutefois, il y a des règles supplémentaires à prendre en compte tout d’abord imaginez : le temps qu’il pourra y consacrer et ses ressources : s’il me faut 100h pour trouver un mot quelconque de 6 caractères, ce calcul peut etre très simplement distribué permettant de transfomer ces 100h en 100 fois 1 heure en utilisant 100 machines… Par rapport à celà, vous devez donc prévoir de modifier votre mot de passe au moins 1 fois dans ce temps de calcul qui dépend donc des ressources du pirate. Si vous ne le changez que tous les mois, il aura un mois pour calculer. A partir de là, 8 digits quelconque est à peine fiable ; 10 ou 12 semblent être une meilleure solution. Reprenons un exemple simple à mémoriser : vacances devient : [vVaAcCaAnNcCeEsS] avec 18 caractères ; plutot simple à retenir non ?!?

Face à celà, vous n’etes cependant pas à l’abrit, la dernière methode employable et l’analyse sociale : si vous utilisez la méthode ci-dessus, votre mot-de-passe ne vaudra rien : étant publié, il peut être employé comme motif dans une attaque par dictionnaire. Plus généralement, si vous passez ou avez reçu des consignes dans votre entreprise pour la création de mot-de-passe, il suffira au pirate de se renseigner sur ces consignes, les exemples donnés pour appuyer sa recherche. Bref, la methode de construction étant la clef, elle doit vous être propre. L’avantage ensuite et que vous pouvez changer le mot chaque mois sans changer la methode… par éxemple : janvier2006 devient *janvieR!2006, simple et correct ; adaptable chaque mois.

Les erreurs à ne pas commettre :

  • Les mots-de-passe aléatoires qui finissent sur un post-it sous le clavier
  • Le donner à qui que ce soit : la méthode (clef du mot-de-passe) devient publique
  • Ne pas diffuser un mot de passe critique sur un autre média que celui pour lequel il est prévu : ne pas utiliser le mdp du travail pour s’inscrire sur un site Internet : c’est rendre public le mot de passe ET la methode

Bref, il faut des methodes différentes selon les contextes. Ensuite, il existe des tas d’autre façon de générer/utiliser de très long mots de passe : biometrie ou classeur de mdp sur carte à puce …

Pour finir, vous pouvez tester vous même la fiabilité du mot-de-passe choisi avec des outils comme John-The-Ripper (JTR) avec ou sans KMD5, unhash … facilement téléchargeables sur internet, dictionnaires y compris.

Posted in Security | Leave a comment