18 juin 2008

Des RFC sous la main

C'est lors d'une discussion avec Kbok qu'est apparue l'envie de disposer des RFC comme on dispose des pages de man. Voici donc un petit script shell pour faire le boulot:


#!/bin/bash

# (C) 2008, Arnaud Bellec [arnaud.bellec at gmail dot com]
# (C) 2008, Henri Doreau [henri.doreau at gmail dot com]
# (FUCK) 2008, le mec qui bloque wget sur son site

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

DIRNAME=_rfc

# Storage
if [ ! -d $DIRNAME ]
then
mkdir $DIRNAME
fi

# We look for an existent file, else we'll download and process it
if [ -z $1 ]
then
echo "No argument supplied!"
echo "Usage : $0 [number of requested RFC]"
else
file="rfc"`echo $1`".txt"
if [ -f $DIRNAME/$file ]
then
over $DIRNAME/$file
else
wget -U "tralala" -q http://www.faqs.org/ftp/rfc/rfc$1.txt -O $DIRNAME/$file
sed '1,32d' -i $DIRNAME/$file
sed -e 's/<[^>]*>//g; /</N;' -i $DIRNAME/$file
fi
fi


Bon alors effectivement la license prend autant de place que le script mais l'idée est là! Il manque une commande sed (ou autre) pour la conversion des caractères spéciaux du HTML.
L'utilisation est trivial, vous pouvez rendre le script executable:

chmod u+x rfc.sh

et créer l'alias suivant dans votre .bashrc:

alias "rfc"="~/rf.sh"

Vous n'avez ensuite qu'à le lancer :

rfc 1035

et il se comporte à peu près comme le man!
En espérant qu'il vous serve!!

A part ça la première version beta de mon Rarping est sortie aujourd'hui. N'hésitez pas à y jeter un oeil et me renvoyer vos commentaires, idées, patches etc...

4 juin 2008

Passage de malwares aux domaines de confiance [Google CSRF issue]

Bien moins violent que ce qui se déroule en ce moment (attaques de browsers via flash, via des iframes insérées malicieusement dans des sites web de confiance (ou pas) via des injections SQL via... ha non c'est tout!), je viens juste de remarquer comment un attaquant pourrait faire s'executer du javascript sur un domaine de confiance tels que ceux des gros portails (Google, yahoo etc...)

Ces sites proposent des moteurs de traduction de pages, lesquels laissent les contenus actifs s'executer. Ce qui est normal, si on ne leur demande pas l'inverse, option non trouvée (disponible?) néanmoins.
Là ou le bât blesse, c'est qu'une fois la page traduite, elle peut être appelée en GET banalement.

-"Huh? il y a un problème à ça?"
Parfaitement, car la sombre url pirate

www.evil_russian_warez.hk

devient la douce et belle

http://translate.google.com/translate?u=http%3A%2F%2Fwww.evil_russian_warez.hk&hl=en&ie=UTF8&sl=en&tl=fr

et quiconque ne prête pas attention à la fin de l'url, risque de cliquer sur le lien en confiance.

-"Ba ouais mais on voit encore l'url pirate pas loin!!"
Aucun souci l'ami! il suffit alors de la faire précéder d'une série d'espaces, qui seront convertis en '+' dans l'URL finale, comme ceci :

http://translate.google.com/translate?u=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++http%3A%2F%2Fwww.evil_russian_warez.hk&hl=en&ie=UTF8&sl=en&tl=fr

C'est effectivement plus discret. Mais maintenant que nous sommes lancés...
Sur la page de traduction de Google, supprimons le "http://" lisible dans le champ d'url de la page à traduire et tentons d'encoder le reste de l'url en hexa:

%77%77%77%2E%65%76%69%6C%5F%72%75%73%73%69%61%6E%5F%77%61%72%65%7A%2E%68%6B

l'url de la page à traduire est la suivante :

http://translate.google.com/translate?u=%2577%2577%2577%252E%2565%2576%2569%256C%255F%2572%2575%2573%2573%2569%2561%256E%255F%2577%2561%2572%2565%257A%252E%2568%256B&hl=en&ie=UTF8&sl=en&tl=fr


Magie du web: ça fonctionne, Google tente bien de joindre le serveur spécifié! Bien évidemment, nous sommes ici dans du fishing pour cliqueurs névrosés et stupides, néanmoins, nous avons obfusqué simplement une url pirate et utilisons un domaine de confiance!!
Cet outil, comme de nombreuses CSRF, peut servir à de stupides tentatives de fishing, mais aussi à des attaques plus évoluées sur requêtes non désirées.

27 mai 2008

Ghost vuln... bhooooooooooo!!

(Pour toute réclamation concernant la précision du titre de l'article voire avec mes avocats)
Petit post au milieu d'une periode d'examens divers gourmande en temps! Petit panorama de ce qui attira mes yeux récemment.

Premierement (vous allez voire d'où me vient le titre incompréhensible de l'article :) ) la publication sur securityFocus d'un advisory sur une vulnerabilité du noyau linux. Le petit détail troublant c'est que personne ne semble savoir à quoi réfère cet advisory! La faille n'est pas classée, ils manquent d'informations, aucun exploit aperçu dans la nature... Bref, la faille fantôme! Sans doute un effet de l'accroissement brutal des responsible disclosures qui consistent à ne révéler une faille au grand public qu'après que les developpeurs l'aient patché.

Deuxièmement, un DoS via la fonction sleep de PHP qui l'eu cru? Vous en rêviez, Bugtrack vous l'offre! A voir ici et la aussi : http://www.milw0rm.com/exploits/5679 Le principe est simple, le temps d'execution de sleep() n'est pas comptabilisé dans la limite de temps d'execution des scripts PHP imposée courament par les serveurs web. L'exploit sature la memoire pour provoquer le DoS annoncé. Rien d'énorme cependant, l'attribution même du statut de "vulnérabilité" à cette annonce est d'ailleur contestée sur Bugtraq.

Enfin, la création il y a quelques temps de l'OCERT (Open Source Computer Emergency Response Team), un groupe d'experts en securité, assisté de la communauté, créé afin d'apporter un petit peu de réactivité à la securité des projets open source. Prometteur, annoncé à grands coups de buzz, à suivre...


Pendant ce temps là, Adrian Pastor continue de pentester son téléphone:

http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub

http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-2
http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-3
http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-4
http://www.gnucitizen.org/blog/bt-home-flub-pwnin-the-bt-home-hub-5
http://www.gnucitizen.org/blog/default-key-algorithm-in-thomson-and-bt-home-hub-routers
http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub
http://www.gnucitizen.org/blog/dumping-the-admin-password-of-the-bt-home-hub-pt-2

De l'acharnement? où ça?
;)

11 mai 2008

exploration réseau : Goolge rules again!

En traînant sur le site de "Johnny I hack stuff" (http://johnny.ihackstuff.com), monsieur Google hacking, je suis tombé sur un script perl de découverte réseau vraiment original! Ecrit par "Jimmy Neutron", il permet d'effectuer une découverte réseau active à l'aide de Google et du protocole DNS.
Ce script prend en argument deux mots clefs et un nom de domaine. Les deux mots clefs sont soumis à Google, qui va renvoyer d'autres mots proches.
Pour ceux qui ne connaissent pas Google sets : il s'agit d'un programme qui pour une suite de mots renvoie des mots proches (ainsi, avec en entrée Volta et Galilée, on obtient la liste suivante :

Predicted Items
galileo
volta
newton
torricelli
fermi
fulton
marconi
spallanzani
rubbia

Ensuite, des requêtes DNS sont effectuées sur les noms d'hôtes construits à partir des résultats de Google et du nom de domaine.

Une carte du réseau peut alors être établie en fonction de l'aboutissement ou non des requêtes DNS.
Le concept, s'il est simple, est également très ingénieux!
Le script est disponible ici : http://johnny.ihackstuff.com/downloads/task,doc_download/gid,26

Vous trouverez d'autres outils dans la section download du site, dont une version windows du programme décrit ici.

3 mai 2008

Coder un sniffer sous Linux

Cela faisait un moment que je voulais me coder un petit sniffer basique sous Gnu/Linux. C'est chose faite avec le petit code suivant.
Il reconnaît pour l'instant les trames TCP, UDP et ARP mais est simple à faire évoluer.
Le principe est simple, on ouvre une raw socket (SOCK_RAW) puis on la passe en mode promiscuous ("accepter toutes les données qui passent par l'interface réseau choisie"). Ensuite, plus qu'à lire paquet par paquet, puis parser les headers pour déterminer le protocole auquel nous avons à faire.

Voici le code. (Fichier .c)

/**
* @File sniffer.c
* @brief sniff network traffic
*
* @author Hth http://hatch-the-hitch.blogspot.com
* @date samedi 3 mai 2008, 00:31:21 (UTC+0200)
*
* version : <0.1 alpha
*
* gcc -o sniff sniffer.c -pedantic
*
*/

/* std */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/* usual networking */
#include <sys/socket.h>
#include <sys/types.h>
/* low level networking */
#include <sys/ioctl.h>
#include <net/if.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
/* headers paquets */
#include <netinet/in.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <linux/tcp.h>



typedef struct {
char * ifaceName;
int sock;
unsigned long max_recv;
struct sockaddr_ll device;
} param_t;


/* --- PROTOTYPES --- */
char argumentManagement ( int argc, char **argv, param_t * parameters );
void initParams ( param_t * parameters );
char checkParams ( param_t * parameters );
void usage ( void );
char initSniff ( param_t * parameters );
void loop ( param_t * parameters );
int getPacketType ( unsigned char * packet );
void printOutTCP ( unsigned char * packet );
void printOutUDP ( unsigned char * packet );
/* ------------------ */


int main ( int argc, char **argv )
{
param_t parameters;

/* Parse and check command line */
if (argumentManagement(argc, argv, &parameters) < 0)
{
usage();
exit(EXIT_FAILURE);
}
else
{
/* Prepare system for sniffing */
if ( initSniff(&parameters) < 0 )
{
fprintf(stderr, "Can't prepare to sniff!\n");
exit(EXIT_FAILURE);
}
else
{
/* Sniffing loop : May never end */
loop(&parameters);
}
}

return 0;
}


char argumentManagement ( int argc, char **argv, param_t * parameters )
{
int opt;

while ( (opt = getopt(argc, argv, "hc:")) != -1 )
{
switch(opt)
{
/* exit after a specified number of packets received */
case 'c' : parameters->max_recv = atol(optarg);
break;

case 'h' :
case '?' :
default : return -1;
}
}
/* Non option arguments */
/* IFace name */
if (argv[optind] == NULL)
return -2;
else
parameters->ifaceName = argv[optind];

/* Checkif required parameters have been given etc... */
return checkParams(parameters);
}


void initParams ( param_t * parameters )
{
parameters->ifaceName = NULL;
parameters->sock = -1;
parameters->max_recv = 0;
memset(&parameters->device, 0x00, sizeof(struct sockaddr_ll));
}


char checkParams ( param_t * parameters )
{
/* Check if required arguments have been specified */
if ( (parameters->ifaceName == NULL) )
{
fprintf(stderr, "No interface selected!\n");
return -1;
}
else
return 0;
}


void usage ( void )
{
fprintf(stderr, "Usage : ./sniff [options] [interface]\n");
fprintf(stderr, "options\n");
fprintf(stderr, "\t-c [count]\t: stop after [count] packets received\n");
fprintf(stderr, "\t[interface]\t: network iface from which to sniff (required!)\n");
}


char initSniff ( param_t * parameters )
{
struct ifreq ifr;

/* Open raw socket, exit on failure */
parameters->sock = openRawSock();
/* Folowing instructions set selected iface into promisc mode */
strncpy(ifr.ifr_name, parameters->ifaceName, IFNAMSIZ-1);

if ( ioctl(parameters->sock, SIOCGIFFLAGS, &ifr) < 0 )
{
close(parameters->sock);
perror("Flags");
return -1;
}
ifr.ifr_flags |= IFF_PROMISC;

if ( ioctl(parameters->sock, SIOCSIFFLAGS, &ifr) < 0 )
{
perror("Can't turn into promiscuous mode");
close(parameters->sock);
return -2;
}
/* --- -- --- */
return 0;

}


void loop ( param_t * parameters )
{
unsigned long nb_recv;
unsigned char packet[4096];

/* This loop will never end if no max_recv specified */
for (nb_recv=1; ((nb_recv <= parameters->max_recv) || !(parameters->max_recv)); nb_recv++)
{
/* recv a packet */
read(parameters->sock, (char *)&packet, 4096);

fprintf(stdout, "\n--] Packet #%lu\n", nb_recv);
/* Add protocols and parsing functions here */
switch(getPacketType(packet))
{
case IPPROTO_TCP : printOutTCP(packet);
break;

case IPPROTO_UDP : printOutUDP(packet);
break;

case ETH_P_ARP : fprintf(stdout, "ARP request\n");
break;

default : fprintf(stdout, "Unrecognized packet\n");
break;
}
}

close(parameters->sock);
}


int getPacketType ( unsigned char * packet )
{
/* Read type of packet from ethernet header */
struct ethhdr * eth;

eth = (struct ethhdr *)packet;

/* If protocol is IP : we select between TCP and UDP */
if ( ntohs(eth->h_proto) == ETH_P_IP )
return getIPproto(packet);
else
return ntohs(eth->h_proto);
}


int getIPproto ( char * packet )
{
/* Look into IP header to know if this is UDP or TCP */
struct iphdr * ip=(struct iphdr *)(packet + sizeof(struct ethhdr));

return (ip->protocol);
}


/* This function prints out informations from a TCP packet */
void printOutTCP ( unsigned char * packet )
{
unsigned char *src, *dst;
struct iphdr * ip;
struct tcphdr * tcp;

/* put a pointer on IP header */
ip = (struct iphdr *)(packet + sizeof(struct ethhdr));
/* the same way for TCP */
tcp = (struct tcphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr));

/* Used to print out IP addresses */
src = (unsigned char *)&(ip->saddr);
dst = (unsigned char *)&(ip->daddr);
/* --- */
fprintf(stdout, "TCP frame\n");
fprintf(stdout, "From\t: %u.%u.%u.%u (port : %u)\n", src[0], src[1], src[2], src[3], ntohs(tcp->source));
fprintf(stdout, "To\t: %u.%u.%u.%u (port : %u)\n", dst[0], dst[1], dst[2], dst[3], ntohs(tcp->dest));
fprintf(stdout, "TTL\t: %d\n", ip->ttl);
fprintf(stdout, "Flags\t: SYN=%d | ACK=%d | RST=%d | URG=%d | FIN=%d\n",tcp->syn, tcp->ack, tcp->rst, tcp->urg, tcp->fin);
}


/* This function prints out informations from a UDP packet */
void printOutUDP ( unsigned char * packet )
{
unsigned char *src, *dst;
struct iphdr * ip;
struct udphdr * udp;

/* put a pointer on IP header */
ip = (struct iphdr *)(packet + sizeof(struct ethhdr));
/* the same way for UDP */
udp = (struct udphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct iphdr));

/* Used to print out IP addresses */
src = (unsigned char *)&(ip->saddr);
dst = (unsigned char *)&(ip->daddr);
/* --- */
fprintf(stdout, "UDP frame\n");
fprintf(stdout, "From\t: %u.%u.%u.%u (port : %u)\n", src[0], src[1], src[2], src[3], ntohs(udp->source));
fprintf(stdout, "To\t: %u.%u.%u.%u (port : %u)\n", dst[0], dst[1], dst[2], dst[3], ntohs(udp->dest));
fprintf(stdout, "TTL\t: %d\n", ip->ttl);
}


/* Open RAW socket, receive every packet that crosses our netdevice */
int openRawSock ( void )
{
int fd;

if ( (fd=socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL))) < 0 )
{
perror("Socket");
exit(EXIT_FAILURE);
}
else
return fd;
}


Voilà!! En espérant qu'il pourra servir à quelqu'un. Je vous laisse le soin de refaire l'indentation détruite par l'éditeur wysiwyg! :)
Il aurait été possible d'utiliser la libPCAP (Packet CAPture) pour coder quelque chose de bien plus puissant, elle sert aussi à accéder aux basses couches du réseau, pas très utile sous Gnu/Linux où cela se fait bien "à la main", mais indispensable sous Windows!!

2 mai 2008

Relations publiques négatives : Pwnez l'Humain!

"Black PR" (black public relations) ou "negative PR" (cette seconde expression est celle retenue pour les traductions françaises) consiste à s'attaquer à l'image d'une personne ou d'une société (normalement vos rivaux).
Science (art?) proche de l'espionnage industriel, les relations publiques négatives sont étroitement liées à la sécurité informatique du fait que la connaissance des petits secrets de la "cible" constitue la première étape du processus offensif.

A partir de là, tous les coups sont permis (en pratique hein!!) : campagne de diffamation, débauchage des employés, entrave à l'embauche, paralysie des systèmes d'information de la cible, vol d'informations sur les ordinateurs de la cible...


Les articles rédigés par des professionnels de black PR font froid dans le dos : chantage, manipulation, harcèlement, humiliations etc... Le seul lien avec le hacking est ici une ambiance digne d'un roman CyberPunk!
En fait ce n'est pas vrai, il y a par exemple le fait que de telles attaques obligent la partie offensive à détenir un contrôle total sur l'environnement cible, un peu comme les connaissances requises pour attaquer un soft/hôte/réseau.

Les analogies sont en réalité très nombreuses : Comparons une attaque black PR contre une entreprise et une attaque d'un réseau informatique.

Recon : Dans un cas comme dans l'autre, l'environnement doit être défini au mieux. Ici, on recherchera des personnalités/profils susceptible d'êtres utilisés pour récupérer des informations secrètes ou servir d'intermédiaire pour toucher un autre employé. Les "vulnérabilités" sont le besoin d'argent, la rancoeur/frustration, une trop haute estime de soi, le besoin insatiable de reconnaissance etc...

Exploit : La encore : aucune limite, tout dépend des objectifs fixés. Supposons qu'il ait été prévu que la campagne de discréditation de notre cible se fasse par la révélation au public de documents comptables, il nous faudra obtenir ces documents. Après avoir pris au piège certains employés minutieusement sélectionnés, ils seront amenés à dérober les documents.
Dans ce cas là comme dans d'autres, les rumeurs générées peuvent être diffusées par l'intermédiaire de journaux type "tabloids", ou sur le net.
Générez un buzz et le travail est fait!

Forensic : L'entreprise attaquée pourrait bien tenter de retrouver l'origine des rumeurs, néanmoins il est évident que tracer une rumeur sur le net demande vite plus d'efforts que la reconstruction d'une bonne image à grand renfort de publicité (et donc d'argent).

Protection
: Il existe des sociétés spécialisées dans la protection contre les attaques visant l'image. Ivana "Ink" Kalay, du site www.spinhunters.org en dirige une, basée en Angleterre. La encore le rapport avec la sécurité informatique est trivial : spinhunters est associé au GnuCitizen (on va encore dire que je ne parle que d'eux!)

Rapide présentation de ce qui se trame dans la cour des grands. Le scandale dans lequel fut impliqué Max Mosley constitue un exemple de ce à quoi peut ressembler une campagne de relations publiques négatives du point de vue extérieur.

23 avr. 2008

Quelques questions à Ronald van den Heetkamp (яoиald)

Ronald van den Heetkamp est l'auteur du "Hacker Webzine", ex-membre du GnuCitizen, auteur de nombreux projets. Ses recherches sont principalement axées sur les applications web et (surtout) la sécurité des navigateurs.
Ceci est la traduction de l'entretient que j'ai pu avoir avec lui. La version originale est disponible également (original english version)


--] Un langage de prédilection?

Je serais tenté de dire "n'importe lequel qui fasse le boulot", néanmoins j'aime vraiment PHP car il est construit sur le C, ou en réalité c'est même une version scriptable du C. cela me permet d'écrire rapidement des programmes qui font autant de choses que des codes en C. Je n'ai pas le temps de compiler des programmes. J'écris et je lance. C'est vraiment proche du C, c'est pour ça que je l'apprécie.
Javascript est également intéressant. En tant que langage précompilé, il est très rapide à l'exécution, et également très dur à apprendre. Si il y a un langage (de script) à la fois très compréhensible mais dont l'apprentissage des mécanismes internes et externes est complexe, c'est vraiment JavaScript. Ça peut paraitre bizarre pour beaucoup de gens, notamment ceux habitués au C, mais selon moi c'est vrai. Je pense que la plupart des gens peuvent comprendre le C bien plus vite que le ECMA script, et ses "dungeons and dragons".

--] Qu'est ce qui fait qu'un hacker est un hacker ?

Généralement une personne qui vit un peu en marge d'une société ou d'un groupe. Comme un "exclu", quelqu'un qui a abandonné le personnage ou le rôle qu'il joue, et part explorer l'inconnu. Une telle personne doit impérativement être obsessionnelle dans ce qu'il ou elle fait, car cela demande beaucoup d'effort et d'endurance. Je veux dire que tu dois avoir une raison de te questionner sans cesse, à propos de quelque chose.
Ce peut être une route longue et difficile avant de tirer satisfaction de tes découvertes. C'est à peu près tout je pense. L'étape suivante est la question du partage, c'est ce que je fais sur mon blog, c'est une sorte de journal de bord de mes aventures sur le grand océan, ni plus ni moins. Mais au final, on ne peut tout exprimer par écrit. Lire des blogs et assister à des conférences peuvent te donner des compétences, mais ne te rendront pas meilleur, à moins que tu n'essayes réellement de le devenir. Quelque part c'est un peu étrange car je domine mon jeu, je ne peux plus regarder quelque part pour apprendre de nouveaux trucs. La plupart des choses, je les connais déjà, du coup ça reviens à seulement agir, mais parfois tu découvres de nouvelles choses. C'est pas de la vantardise, pour moi c'est très difficile d'apprendre de nouvelles technique des autres désormais, car je les connais ou comprend parfaitement, bien que je n'en parle pas sur mon blog. Bien sûr il y en a qui font tilter mon imagination, mais elles sont rares.

--] Le truc le plus important cette année dans le domaine de l'info? une idée pour l'année prochaine?

Et bien, je pense que les mécanismes de requêtes non autorisées vont accaparer pas mal d'attention cette année, c'était déja le cas début 2008 avec les problèmes touchant les routeurs entre autre. Je pense que flash va rester un vecteur d'attaque. Je ne m'en inquiète plus trop, tout comme les failles de realplayer ou quicktime, depuis que j'en ai désactivé la plupart. C'est un domaine qui ne m'intéresse pas, mais il y a beaucoup de choses à découvrir au sein de ces services, c'est évident.
Oh et puis aussi des grosses attaques de botnets, je pense qu'il y vont en gagner des tonnes cette année!

--] Le principal espoir du moment pour la sécurité?

Il est temps de se débarrasser de tout ce qui porte atteinte à la sécurité. Internet n'a pas été conçu pour transporter de la vidéo ou interconnecter tous les réseaux automatiquement. HTTP est indépendant de tout état pour une bonne raison, et nous l'avons détruite. L'internet était destiné au partage d'information, pas à youtube. Finalement, les gens se lasseront, je pense que 4chan est un bon exemple. Le net va devenir un lieu de frustration, les gens l'abandonneront, et il sera de nouveau laissé entre les mains des geeks. Ça peut sembler une bien sombre image mais je ne pense vraiment pas que cela puisse continuer de la sorte. Tout peut être hacké, attaqué, lorsque tu le connecte au net. T'es plus en sécurité en ligne. Et peu importe ton comportement, il y a quelque part une attaque qui t'attend. A moins que l'on ne rende le net comme il était auparavant, sans états ni scripts.

--] Le pire cauchemar en ce moment pour la sécurité?

Je pense qu'on est en plein dedans, c'est un vrai cauchemar et personne n'a de solution pour que cela cesse!

--] Selon toi, comment vont évoluer les menaces (à court et long terme)

A moins que les internautes ne deviennent mieux éduqués et ne cliquent pas sur chaque popup ou lien quelconque, ça va rester comme c'est. La plupart des bots touchent les mêmes personnes qui cliquent sur des jolies poupées dansantes, et ça a moins de rapport avec les exploits actuels ou les stack overflows depuis qu'il devient de plus en plus difficile de les exploiter.

--] Des projets?

Ouais, je travaille sur un nouveau projet appelé "Teisatsu". Ça va devenir un projet sympa, c'est déjà un "webbased nmap scanner", et un outil de pénétration réseau complet, écrit exclusivement en PHP. Il a pas mal de possibilités, son propre client telnet, scanner de noms d'hôtes, Google spider et d'autre choses dans le même genre. J'ignore quand il sera prêt, sans doute le mois prochain.

--] Une citation préférée?

Il y en a beaucoup, de bien des auteurs, mais je voudrais donner une citation du Tao te Ching (écrit aux alentours de 600 - 500 av. JC). C'est une partie du verset 33, et ça résume tout ce qu'il y a à dire:

Verset 33

Connaitre les autres constitue l'intelligence;
Se connaitre soit même constitue la vraie sagesse.
Maitriser les autres constitue la force;
Se maitriser soit même constitue le vrai pouvoir.

Merci яoиald :)