SecureM

Aller au contenu | Aller au menu | Aller à la recherche

Tester votre connectivité à Internet depuis un réseau derrière un pare-feu

Voici un petit outil qu'un ami m'a fait découvrir récemment : http://portquiz.net/, qui vous permet de savoir si vous pouvez ou non contacter tel ou tel port (d'un serveur quelconque) depuis votre terminal, lorsque vous vous trouvez derrière un réseau filtré, c'est-à-dire qu'un pare-feu (le plus souvent) bloque certaines connexions.

Dans mon cas, je suis branché sur le réseau de mon école, et mes connexions HTTP(S) doivent passer par un proxy (à authentification en plus, autant dire que rares sont les applications qui suivent, hors de KDE). Mais au-delà des connexions web, il est évident qu'un bon nombre de ports sont filtrés : des usuels Bittorrent et SMTP, à IRC, mais aussi... pratiquement tout le reste ! J'avais longtemps espéré découvrir un jour ce genre d'outil (à défaut de faire un scan de ports sur mon propre serveur pour détecter ceux qui arrivaient effectivement sur ledit serveur), et PortQuiz permet de le faire rapidement, voici un aperçu du filtrage opéré par l'école :

Tout d'abord, depuis mon ordinateur personnel, filtré au possible : seuls les ports TCP 20,21,22,110,119,143,993,995,6667,11371 sont accessibles, soit 10 parmi 65635!
(le port 25 est en réalité redirigé vers le serveur SMTP de l'école)

mickael@Suixo:~> nmap portquiz.net -Pn -p1-65535 -sV

Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-04 00:54 CEST
Nmap scan report for portquiz.net (178.33.250.62)
Host is up (0.0082s latency).
rDNS record for 178.33.250.62: electron.positon.org
Not shown: 65524 filtered ports
PORT      STATE SERVICE VERSION
20/tcp    open  http    Apache httpd
21/tcp    open  ftp     ProFTPD 1.3.4a
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4 (protocol 2.0)
25/tcp    open  smtp    Postfix smtpd
110/tcp   open  http    Apache httpd
119/tcp   open  http    Apache httpd
143/tcp   open  http    Apache httpd
993/tcp   open  http    Apache httpd
995/tcp   open  http    Apache httpd
6667/tcp  open  http    Apache httpd
11371/tcp open  http    Apache httpd
Service Info: Host:  eleves.enpc.fr; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel


Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 161.22 seconds

Depuis mon serveur privé, les choses sont bien différentes : seuls 225 ports sont inaccessibles !

...
Discovered open port 53677/tcp on 178.33.250.62
Discovered open port 44148/tcp on 178.33.250.62
Completed Connect Scan at 01:04, 24.77s elapsed (65535 total ports)
Initiating Service scan at 01:04
Scanning 65526 services on portquiz.net (178.33.250.62)
...
Nmap scan report for portquiz.net (178.33.250.62)
Host is up (0.0026s latency).
rDNS record for 178.33.250.62: electron.positon.org
Not shown: 225 filtered ports
PORT      STATE SERVICE
...

Cool, non ?

Il est à noter que c'est le serveur HTTP qui répond sur tous les ports, sauf le 22 (SSH) et le 25 (Postfix, pour recevoir les courriels du domaine), en TCP uniquement (pas d'UDP), et que le serveur ne supporte pas l'IPv6 (donc IPv4 seulement).

Je me suis mis à Twitter

J'imagine qu'à cause de la faible activité de ce site, peu de visiteurs arrivent jusqu'ici, mais ça ne m'a pas empêché de me mettre à Twitter (il y a maintenant un flux à droite avec mes derniers tweets), et de le dire ici, voici mon pseudo : @msuixo !
Je parle de sécurité, de technologies, et d'un peu tout ce que je trouve intéressant :)

Je me mets au NFC

En ce moment, j'ai envie d'essayer de nouvelles choses geek, et depuis que j'ai acheté une tablette compatible NFC, j'ai bien envie de voir ce qu'on peut en faire.

Le NFC ?

Pour Near Field Communication, le NFC est le remplaçant du RFID (le passe Navigo des parisiens va d'ailleurs basculer du RFID au NFC), et est de plus en plus intégré aux téléphones mobiles (Nexus par exemple, mais pas l'iPhone). Google a notamment développé un système de paiement sans contact qu'il a proposé en solution de remplacement aux cartes bancaires à piste magnétique (ce qui n'était pas très sécurisé) aux USA - bien que ce ne soit encore qu'un projet pilote.

Si la communication se fait bien sans contact, il faut néanmoins pour la plupart des puces NFC (du moins celles dont je vais parler : téléphones et "tags") placer les deux objets à moins de 10cm de distance, ce qui est considéré comme protection contre le vol de données (qu'est-ce qui empêcherait un pirate d'approcher un terminal de paiement modifié de votre poche dans laquelle se trouve votre smartphone / CB sans contact pour la débiter automatiquement ?).

Dans les faits, il est possible d'échanger de petites quantités d'information avec des "tags" NFC, de petites pastilles (semblables à certains antivols qui font bipper les portiques de sécurité), ou bien de plus grosses quantités entre deux lecteurs NFC (typiquement, deux téléphones). Je ne vais pas rentrer dans les détails techniques et me concentrer plutôt sur les usages, qui pour l'instant permettent un certain nombre d'actions :

  • déclencher une action prédéfinie lors du passage du smartphone devant un tag
  • échanger des données entre deux appareils (fichiers, etc.), en couplage avec du Bluetooth (NFC pour la mise en communication, et Bluetooth pour le transfert, celui-ci pouvant atteindre 3Mo/s si ma mémoire est bonne alors que le NFC est beaucoup plus limité, qq centaines de Ko/s)
  • transférer votre carte de visite numérique à un interlocuteur, à condition que tout le monde ai installé l'application (ce qui n'est pas gagné d'avance)
  • beaucoup d'autres applications qui restent encore à trouver et à développer
  • payer votre parcmètre à San Francisco
  • ouvrir votre voiture BMW
  • remplacer votre carte d'embarquement (projets pilote pour certaines compagnies aériennes)

Relier le passage devant un tag à une action prédéfinie

C'est cette action qui me semble une des plus intéressante, et puis elle est un peu générique puisqu'elle regroupe en réalité la quasi-totalité des applications.

Au niveau de la domotique, par exemple, on pourrait imaginer, comme le laisse entendre cet article sur touteladomotique.com, un large éventail de possibilités :

  • déclencher l'alarme / la vidéosurveillance lorsqu'on quitte son domicile
  • couper/réactiver le son/le réseau/le réveil de son téléphone lorsqu'on va se coucher/qu'on se lève
  • envoyer un texto/basculer en mode navigation GPS lorsque le téléphone est placé sur un dock dans la voiture
  • basculer le téléphone en mode réunion à l'entrée d'une salle de réunion
  • communiquer automatiquement les identifiants Wifi aux invités (qui doivent disposer de la bonne application)
  • faire pointer les employés lorsqu'ils arrivent / repartent du bureau
  • déclencher un chrono lorsque vous lancez une lessive / mettez des spaghettis à cuire (pour vous prévenir quand c'est prêt)

Toutes ces actions nécessitent de "badger", c'est-à-dire de placer son téléphone/appareil compatible devant un tag judicieusement positionné : à côté de la porte d'entrée pour l'activation de l'alarme, juste derrière le dock voiture pour le mode navigation, à l'entrée d'une salle de réunion pour l'activation/désactivation du mode réunion, sur la table de nuit... Un autre usage qui me revient d'un vieil article sur le lapin Nabaztag est par exemple de permettre à des parents de recevoir un texto lorsque leur enfant rentre de l'école et dépose son trousseau de clés contenant entre autres un tag NFC devant un lecteur.

On a donc une grande (totale) liberté lorsqu'il s'agit de placer les tags, d'imaginer les applications ou d'automatiser certaines taches. Il est également possible d'intervertir tag / lecteur, ou bien de faire utiliser le même tag par plusieurs personnes (salle de réunion).

Sachant que la technologie NFC est en plein envol, je pense qu'il y a beaucoup de choses qui pourront être imaginées pour améliorer la vie de tout le monde ou au moins réaliser des idées originales !

Et moi ?

En tant que narcissique et égocentrique invétéré, il faut bien que je vous avoue que j'ai acheté une dizaine de tags NFC sur Amazon, surtout qu'ils ne coûtent pas grand chose (7€ pour 10 tags environ). J'essaierai de poster un autre article dès que j'aurai eu le temps d'essayer !

Pour vous faire une idée, je vous invite à chercher sur votre moteur de recherche favori, le web regorge d'articles sur les meilleures applications mobiles pour NFC (ou ), ou ce qu'on peut en faire !

Une carte mondiale des attaques DDoS en temps réel

Il y a déjà quelques mois de ça, j'ai découvert un joli petit site, mais j'avais oublié de vous en parler.

Qui n'a pas envie de voir une carte en temps réel des attaques informatiques dans le monde ? "Ah tiens, la Chine attaque la Colombie", ou "Mais pourquoi diable la Russie a-t-elle attaqué le Vietnam ?". Pas moi ! À vrai, dire ce n'est pas exactement ça, mais c'est tout aussi intéressant.

Une carte en temps réel des attaques DDoS

Cette carte regroupe les flux réseau de données brutes détectés comme attaque DDoS par le "Arbor Networks ATLAS® global threat intelligence system" qui regroupe plus de 270 FAI qui ont choisi de partager leurs statistiques réseau (traffic et attaques). C'est animé et assez joli à regarder, d'autant plus qu'on peut choisir de voyager dans le temps depuis l'ouverture du site.

Accéder à la Digital Attack Map.

Il y a néanmoins plusieurs remarques à formuler :

  • il ne s'agit ici que d'attaques DDoS
  • la carte n'est pas du tout complète puisqu'elle ne concerne que les FAI qui ont choisi de participer, ce qui exclut des pays comme la Corée du Nord par exemple
  • ce n'est évidemment pas parce qu'une attaque part d'un pays que c'est le gouvernement ou même un habitant du pays qui a choisi de lancer l'attaque : il peut s'agir de botnets ou d'attaques par réflexion...

On peut néanmoins retrouver l'attaque historique contre Spamhaus de l'été dernier (début Août, on le voit très clairement sur l'historique des attaques en bas), et voir que l'attaque était bien de plus de 300Gbps en direction des États-Unis !

Les attaques DDoS

Mais c'est quoi déjà une attaque DDoS ?

DDoS signifie Distributed Denial of Service, soit déni de service distribué - ce qui ne vous avance pas forcément. Pour faire simple, provoquer un déni de service c'est faire en sorte que le serveur "tombe" en le bombardant de paquets / requêtes, etc. Il n'est alors plus capable de répondre normalement, voir de répondre tout court en général (on dit que le serveur est "down"). Il existe une très grande variété d'attaques par déni de service (en jouant sur le volume de données, sur la fragmentation des paquets, en saturant le nombre de connexions maximum autorisées...) et on voit depuis quelques années apparaître des attaques dites par "réflexion" visant à utiliser un tiers non sécurisé (un serveur DNS ou NTP ouvert, le plus souvent) comme amplificateur : en envoyant une petite requête au tiers (en spoofant l'adresse de la victime le plus souvent), celui-ci va envoyer (répondre) une grosse requête au serveur en question, ce qui va contribuer à moindres frais à faire tomber la cible.

Et comment qu'on se protège ?

C'est une toute autre histoire, je ne suis pas du tout calé en la matière mais il me semble que des projets comme fail2ban (bloquer l'adresse IP des ordinateurs qui envoient de gros volumes de données sans raison) ou bien le service de CloudFlare (qui absorbent les attaques par une répartition sur de nombreux noeuds dans un cloud) peuvent permettre d'éliminer certains risques.

Mesurer la bande passante entre deux ordinateurs sous Linux

En ce moment, je mets en place un serveur ownCloud sur un réseau interne (peu-être que je ferai un billet là-dessus si j'ai le temps d'ailleurs), et je ne me souvenais plus comment mesurer le débit maximal entre deux ordinateurs (en l'occurence, mon ordi et le serveur). Maintenant que j'ai remis la main sur la commande, je poste ici un petit aide-mémoire pour pouvoir le retrouver plus rapidement, et peut-être que ça pourra vous aider ! :)

internet.png

L'outil s'appelle iperf et s'installe très facilement avec votre gestionnaire de paquets favori. Il fonctionne en serveur-client, où on peut tester la connexion entre plusieurs clients et un serveur central (qui va donc ouvrir le 5001 et attendre des connexions).

Côté serveur :

# iperf
Usage: iperf [-s|-c host] [options]
Try `iperf --help' for more information.
# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Puis côté client, en renseignant l'adresse IP du serveur :

$ iperf -c 172.24.0.23
------------------------------------------------------------
Client connecting to 172.24.0.23, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 172.24.146.252 port 35383 connected with 172.24.0.23 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.5 Mbits/sec

Au bout de 10 secondes, le résultat apparaît : 95 Mbits/sec, soit 11.9Mo/s environ (puisqu'un Mégaoctet c'est 8 Mégabits). La même chose apparaît également côté serveur.

Il est possible de régler plus finement le test, notamment en modifiant la durée avec le paramètre -t, ou avec -P pour modifier le nombre de clients à exécuter parallèlement (normalement vous devriez pouvoir vérifier que la somme des débits se conserve quel que soit le nombre de clients)

$ iperf -c 172.24.0.23 -P 4
------------------------------------------------------------
Client connecting to 172.24.0.23, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  6] local 172.24.146.252 port 35798 connected with 172.24.0.23 port 5001
[  3] local 172.24.146.252 port 35795 connected with 172.24.0.23 port 5001
[  4] local 172.24.146.252 port 35796 connected with 172.24.0.23 port 5001
[  5] local 172.24.146.252 port 35797 connected with 172.24.0.23 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  28.2 MBytes  23.7 Mbits/sec
[  5]  0.0-10.0 sec  28.2 MBytes  23.6 Mbits/sec
[  6]  0.0-10.1 sec  29.4 MBytes  24.5 Mbits/sec
[  4]  0.0-10.1 sec  28.6 MBytes  23.8 Mbits/sec
[SUM]  0.0-10.1 sec   114 MBytes  95.3 Mbits/sec

On retrouve bien un résultat similaire ici.

À noter qu'il existe d'autres méthodes qui ne nécessitent pas d'installer iperf mais qui sont moins efficaces (copie en SSH - ce qui bouffe du CPU pour chiffrer la connexion / en FTP mais il faut un serveur FTP).

Ouverture de la section outils : générateur de hashs MD5

Un calculateur de hash MD5

Je vais bientôt intervenir dans une conférence de "sensibilisation pratique à la sécurité informatique" (entendre démonstrations dont plusieurs en direct), et pour la partie "Choisir un bon mot de passe" j'ai décidé de demander au public (au moment de l'invitation et peut-être aussi le jour même) de générer l'empreinte MD5 d'un mot de passe qu'ils jugent à peu près bon et d'un autre qu'ils jugent mauvais : comme peu d'entre eux seront en mesure de générer le hash directement, j'ai mis à leur disposition http://outils.securem.eu/hash-md5.php qui, comme de nombreux autres outils sur le web, permet de calculer le MD5 d'une chaîne de caractères.

Et comme j'aime partager mon travail, je le poste ici aussi : n'hésitez pas à vous en servir si vous en avez l'utilité !

Pour information, sous Linux, la commande suivante permet de l'obtenir rapidement :

echo -n "test" | md5sum

Pourquoi MD5 ?

MD5 est troué, c'est bien connu (enfin j'espère), et il est possible de réaliser des collisions complètes pour un hash donné (à défaut de déterminer le message original). Il n'est d'ailleurs quasiment plus utilisé pour stocker des mots de passe chiffrés, et se cantonne à être une somme de contrôle lors du téléchargement de fichiers (permet juste de détecter si le téléchargement s'est bien déroulé - mais pas si le fichier est bien conforme à l'original puisqu'un pirate peut avoir remplacé le fichier par un autre, de même hash en provoquant une collision). Et pourquoi ? Pour sa vitesse !

MD5 est en effet très rapide à s'exécuter, ce qui est un avantage pour la vérification des fichiers à la volée, mais un inconvénient car il est aussi plus rapide de bruteforcer le hash obtenu ! D'où mon choix, vous l'aurez compris, puisque je compte bien essayer de casser un maximum de hashs d'ici la conférence.

Sauvegarder une partition (chiffrée notamment) sous la forme d'une image ISO

Il s'agit d'une petite astuce qui permet de gagner du temps, et que je mets ici pour mémoire surtout, lorsque vous voulez sauvegarder une partition d'un disque dur, ou d'une clé USB (mais qui à part moi partitionne ses clés USB ?), sous Linux :

Je ne vais pas vous faire un topo sur le "pourquoi sauvegarder", surtout que je n'ai jamais connu de crash disque, d'incendie ou quoi que ce soit, mais dans mon cas il s'agit d'une partition critique (chiffrée - pourquoi faire les choses simplement ?) qui contient pas mal de données importantes à mes yeux.

Sauvegarde de la partition

Parce que je suis plutôt un adepte du KISS (Keep It Simple), je préfère utiliser l'utilitaire dd, qui copie simplement la liste des octets d'un point à un autre. Attention pour ceux qui ne s'en sont jamais servi, ça peut faire de gros dégâts si on se plante (ie. écrire au mauvais endroit sur votre disque et écraser votre système).

La commande de base est donc :

dd if=/dev/sdc3 of=Sauvegarde.iso bs=4096

La première partie (if=) permet d'indiquer à partir d'où on va prendre les données (la partition à sauvegarder) et la seconde (of=) où on va écrire.

Mais puisque dd effectue une copie bit à bit de la partition, on aura un fichier de sauvegarde qui prendra autant de Gigaoctets que la partition de départ, même si elle ne contient qu'un fichier texte de 10 Ko : on peut alors vouloir compresser la sauvegarde avec gzip.

On utilisera donc la commande suivante :

dd if=/dev/sdc3 bs=4096 | gzip -v6 | dd of=Sauvegarde.gz bs=4096

L'image à enregistrer passe donc par gzip qui ressortira une version de taille réduite de la partition. L'argument -v indique d'être verbeux et -6 correspond au ratio qualité de la compression / temps passé à (dé)compresser (de 1 à 9).

Il est à noter qu'on peut faire exactement la même chose avec un disque complet (ou une clé USB complète), ce qui prendra alors en compte la table des partitions par exemple.

Restauration de l'image

Pour restaurer (ou écrire) une image sur la partition (ou le disque) préalablement sauvegardé :

zcat   /chemin/vers/la/sauvegarde.gz   |   dd   of=/dev/sda3

Tout reviendra donc exactement comme avant (y compris le MBR pour un disque complet).

Monter l'image ISO

Pour mémoire, on peut parcourir l'image ISO créée en la montant sur un dossier avec la commande :

mkdir /mnt/ISOsauvegarde
mount -o loop /chemin/vers/la/sauvegarde.iso /mnt/ISOsauvegarde

Conclusion et performances

Pour ma part, la compression de la partition de 15Go chiffrée a mis 1h30 pour la lecture depuis la clé USB, et 1h30 pour l'écriture de l'image (eh oui, compresser l'image à la volée fait perdre un peu de temps - après j'ai des vieux débits aussi il faut bien l'avouer), mais l'image ISO a été compressée de presque 30% et pèse maintenant (seulement) 10Go.

On peut également imaginer automatiser le processus : sauvegarde de la partition chiffrée (ou sauvegarde puis chiffrement d'une partition) puis synchronisation dans le Cloud, ou sur un disque dur externe (du coup, il y a moins d'intérêt à chiffrer l'archive)... À vous de voir suivant vos besoins, en sachant qu'en général ces techniques sont bien moins efficaces que des sauvegardes incrémentales (qui n'enregistrent de les modifications apportées depuis la dernière sauvegarde : économie en temps et en place), et qu'il existe un grand nombre d'utilitaires de sauvegarde qui vous simplifient grandement la vie !

J'espère que cet article vous aura un peu servi, n'hésitez pas à remonter tout problème ou remarque !

Les Failles XSS

Peut-être avez-vous déjà entendu parler de ces failles, peut-être pas.
Description d'une faille qui peut causer pas mal de soucis...

Cet article a été légèrement modifié depuis sa publication initiale en 2008.

Lire la suite...