Il y a quelques jours, j’ai eu la bonne surprise de voir ma demande a la beta de Let’s Encrypt être acceptée. A moi l’argent, la gloire et la crypto !

letsencrypt
Pour rappel, letsencrypt est une autorité de certification (CA) qui ne demande aucune validation humaine de leur part. Pas d’envoie de papiers d’identité ou autre preuves. Pour prouver que vous etes bien possesseur du domaine, il suffit que, lors de la génération du certificat, vous placiez un fichier json accessible a une url « mondomaine.com/.well-known/… ».

La procédure de génération est donnée (et risque d’évoluer d’ici la fin de la beta) mais en résumé:

Make sure your web server displays the following content at                                                                                           
http://mart-e.be/.well-known/acme-challenge/abcdef... before continuing:

{"header": ...}

Content-Type header MUST be set to application/jose+json.

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
echo -n '{"header": ...}' > .well-known/acme-challenge/abcdef...
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map = {'': 'application/jose+json'}; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue

Super, seulement wordpress ne me laisse pas créer des dossiers arbitraires dans mon dossier contenant le code (et c’est une bonne nouvelle en soit). Pour résoudre cela, un petit bricolage nginx s’imposait.

HTTPS sur un blog, c'est comme un éléphant-mitrailleuse. Ça ne sert pas a grand chose mais c'est cool!

HTTPS sur un blog, c’est comme un éléphant-mitrailleuse. Ça ne sert pas a grand chose mais c’est cool!


Dans la config nginx du blog, ajoutez un bloc location:

Mise à jour: Michel propose une solution plus simple sans s’ennuyer avec un serveur local en python!

server {
       listen 80;
       server_name mart-e.be;
       location ~ /.well-known {
            proxy_pass  http://127.0.0.1:7890;
       }
       
       # reste de la config pour wordpress
}

Où 7890 est un numero de port totalement arbitraire.
Ensuite, suivant +/- les conseils du wizard de letsencrypt

$ mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
$ cd /tmp/letsencrypt/public_html
$ echo -n '{"header":...}  > .well-known/acme-challenge/abcdef...
$ python -c "import BaseHTTPServer, SimpleHTTPServer; SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map = {'': 'application/jose+json'}; s = BaseHTTPServer.HTTPServer(('', 7890), SimpleHTTPServer.SimpleHTTPRequestHandler); s.serve_forever()"

Notez que j’ai changé le numéro de port de 80 a 7890 dans les paramètres de HTTPServer.

On relance NGINX (nginx -s reload), continue l’exécution du wizard (press ENTER) et victoire !

Press ENTER to continue

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/mart-e.be/fullchain.pem. Your cert will
   expire on 2016-01-26. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.

Vous pouvez tuer la commande python une fois validé et retirer la config nginx (ou commentez, le certificat beta ne vaut que 90 jours).

En bonus, la config nginx qui va bien:

ssl_certificate /etc/letsencrypt/live/mart-e.be/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mart-e.be/privkey.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;

Avec le fichier dhparams.pem servant à la génération d’une clef diffie-helman, via la commande openssl dhparam -out dhparam.pem 2048

Mozilla a un super générateur de config. J’ai prit la config moderne, désolé utilisateurs de vieux soft, je décroche ainsi un beau A sur le CryptCheck un peu nazi de Aeris !

CrptCheck

Vous pouvez maintenant accéder a mart-e.be en https !

Retour sur CryptoStorm

12 septembre 2015

Il y a quelques mois, je parlais de mon achat d’un accès VPN en Bitcoin. J’avais choisi d’acheter un accès chez Cryptostorm, me laissant tenter par ses prix attractifs (+/- 4$/mois) et la bande d’hacktivistes derrière les commandes. Faisons le point sur le service (en commençant par ce qui fâche).

sur-ecoute

Chef, il écoute une musique de nyancat depuis 4h, c’est suspect non ?

Qualité

Je n’ai pas de point de repères avec d’autres VPN me permettant de dire si certains problèmes sont liés à ma machine ou à leur services. La plupart du temps, je ressens assez peu de différence de débits. Ne faisant pas confiance aux SpeedTests biaisés (priorisés par les opérateurs), un téléchargement BitTorrent d’une iso Ubuntu se fait en un temps similaire voir meilleur (passé de 10 à 9min pour une iso de 1,15GB, le VPN compresse les données après tout). Après, dans ma campagne Belge, on n’a pas vraiment la fibre optique…

Je dis « la plupart du temps » car cela m’arrive de remarquer des différences par moments. Étonnamment, cela dépens des sites. Des sites comme Facebook (avides en connexions multiples ?) deviennent inutilisables tandis que des sites plus « statiques » comme Reddit fonctionnent parfaitement (pas une grande perte donc). Changer de nœuds aide en cas de problème.

Avertissement: il n’est pas impossible que cette partie soit due à une mauvaise config/manipulation de ma part! Un aspect plus gênant est par contre la disponibilité des serveurs. Certains vont aléatoirement me refuser une connexion en fonction de l’humeur (pas souvent je vous rassure). Parfois, ils vont me demander un mot de passe (alors qu’il est facultatif sur CryptoStorm, seul le hash du token comme login est utile). J’ai particulièrement le cas sur Android où c’est cryptofree qui me donne encore les meilleurs résultats. La solution simple est d’avoir 2, 3 nœuds de sortie configurés et d’essayer un autre si le premier ne fonctionne pas.

Communication

Gros problème aussi de l’équipe de CrytoStorm, difficile de les avoir si on a besoin d’aide ou pose une question. Soyons clair, je n’ai jamais eu de réponse à mes emails au support ou envoies BitMessage (mise à jour 13/09: ai finalement reçu une réponse BitMessage aujourd’hui !). La communauté est active sur le forum mais c’est encore Twitter qui a été le moyen le plus efficace de communiquer avec eux. Mon impression est qu’ils sont occupés sur d’autres projets (voir plus bas) et ne répondent plus trop aux emails (normal, c’est pas drôle).

personnes-a-l'interieur-canalisation

Internet ce n’est qu’une question de tuyaux

Pour éviter les soucis de communication, je conseillerais (en tout cas, je tenterai pour mon prochain achat) de passer par un revendeur externe de tokens tel que vpnDark.net ou mirciado.com (il en existe d’autres) pour limiter les contacts avec eux (et en bonus, cela augmente également votre anonymat) mais ce n’est pas quelque chose que j’ai testé personnellement.

Sécurité

La raison pour laquelle je prend un VPN est principalement pour une meilleure sécurité de mon surf (MITM, DNS menteurs,…) et de ma vie privée (Snowden quand tu nous tiens). De ce coté, je ne peux que conseiller CryptoStorm. Encore une fois, je n’ai pas beaucoup de points de comparaison mais ils se détachent sur plusieurs points.

Leur système de token de connexion est par exemple bien pensé. Pour éviter de lier un accès à un achat (qui dit transaction monétaire, dit très souvent coordonnées bancaire, même en Bitcoin), on achète un token. L’authentification OpenVPN se fait avec le hash SHA512 de ce token (insérer ici des explications sur de la crypto que je ne comprend pas). Ainsi, Cryptostorm ne peut plus lier un achat avec un token (en tout cas si a été fait via un revendeur externe). Ils promettent supprimer l’historique de la transaction après confirmation mais c’est se baser sur leur bonne foie. Quand les VPN classiques vous disent « on ne garde pas de logs, faites nous confiance », CryptoStrom met en place des procédures pour ne connaitre que le moins d’information possible.

vitre-pare-balle

Faire confiance en la bonne foie d’un revendeur VPN

Concernant la sécurité du surf, ils font pas mal de recherche pour par exemple intégrer leur propre résolution DNS (qui résout nativement les .onion !), désactiver IPv6 (qui n’est pas supporté) via leur widget, s’intéresser au problème des certificats SSL et autres. Ils vont donc plus loin qu’un simple transit de donnée pour viser une meilleur sécurité de leurs utilisateurs.

Projets

Il est assez difficile de comprendre l’organisation de CS mais visiblement eux aussi. Ils (mais qui est « ils » dans le fond ?) encouragent le staff à travailler sur ce qui leur tient à cœur et ils ne se gênent pas.

Ils ont par exemple monté un miroir du dump des données de Hacking Team (hacking.technology) ou un proxy de KickAssTorrent leur permettant de troller des compagnies d’ayant droits.
Ils offrent également CryptoFree, un accès gratuit à CryptoStorm avec une bande passante limitée, bon à prendre pour ceux au budget limité (détails).
Leur compte GitHub est également remplit de code, configuration et publication de recherches en sécurité (analyse de malwares ou clients VPN propriétaires foireux).

Last but not least, ils viennent de publier sur CryptoHaven (un de leur blog) un article expliquant travailler sur un concept de multi-hop VPN (pour diminuer l’efficacité du monitoring d’un serveur individuel). Un peu de détails sur GitHub, pas encore très clair mais affaire à suivre.

mule dans une boite

CS mettant au point son dernier projet de… probablement quelque chose de bien

Il faut aimer fouiller un peu sur leur forum (déjà rien que pour trouver les fichiers openvpn, je conseille la config « smoothed ») et trouver les annonces aux milieux des memes sur Twitter. Autant c’est très bien de voir que le site bouge, autant cela donne un aspect brouillon dans lequel il n’est pas facile de se repérer. Mais ils en sont conscient apparemment, donc bon.

Conclusion

Est-ce que c’est un VPN que je conseillerais ? Tout dépend un peu de ce que vous cherchez. Si le manque de communication ou d’uptime vous dérange, je vous conseillerais de passer, il existe probablement beaucoup d’autres VPN plus sérieux (dans l’approche commerciale). Si justement le manque de sérieux, ce petit coté anarchique vous attire, foncez.

Personnellement j’ai une impression de gens inversement compétents techniquement qu’ils ne le sont commercialement (et ils sont d’accord). Le manque d’organisation m’énervait mais une fois qu’on se fait à l’idée qu’on devra se débrouiller sans réponse au mail, on s’amuse à suivre leurs discussions décalées sur Twitter. Et de mon point de vue de petit geek, ça me permet de leur faire bien plus confiance qu’à un revendeur impersonnel (en gardant bien en tête qu’on n’est jamais certain). Je vais donc rester chez eux. Si vous avez des Bitcoins (ou un compte Paypal) qui trainent dans un coin, allez-y !

En ses temps de mesures sécuritaires, j’ai voulu également augmenter ma propre protection. Comme tout le monde j’ai des choses à cacher et l’utilisation d’un VPN chiffré devient une nécessité. Pour corser l’expérience, j’ai voulu payer en Bitcoin. Je précise que je n’ai jamais acheté ni l’un ni l’autre. Ce n’était pas de tout repos.

William Clinton and President Boris Nikolayevich Yeltsin

– J’arrive pas, dis le toi!
– Nous ne procédons pas à d’écoutes massives de la population et respectons votre vie p…

1. trouver un provider VPN
3 jours à parcourir les comparateurs foireux ou juste demander (plus efficace). Je choisi finalement cryptostorm. Une société tenu des hacktivistes basés en Islande, un peu bordélique (il faut aimer fouiller les forums), pas trop cher (3-4$/mois), utilisant token anonymes assez original (en gros on achète des tokens à eux ou revendeurs indépendant, pas besoin de compte) et possibilité de payer en Bitcoin, Doguecoin & co.

Je parlerai probablement de Cryptostorm après quelques semaines/mois de tests mais j’avoue être assez fan jusqu’à présent.

2. trouver un revendeur Bitcoin
2 jours de comparateurs. J’avais tenté une fois bitstamp avant d’avoir ma transaction refusée par ma banque. Cette fois, j’ai essayé avec Kraken, pas trop de frais, clean, sécurisé (2 factors, ils envoient des emails signés avec GPG…. refusés par enigmail).

3. acheter des bitcoin
4 jours pour se rendre compte qu’on ne peut pas faire de virement, donner son nom et date de naissance pour passer en tier 2 (level up!), se rendre compte qu’on ne peut toujours pas déposer d’euro, donner son adresse pour passer en tier 3, faire un virement SEPA (50€ min), attendre qu’il soit réceptionné, se prendre déjà pour un tradeur, lire des articles de trading, abandonner l’idée, acheter quelques bitcoin à 213€/BTC sans savoir si c’est un bon prix.

femme assemblant un ordinateur

1975, un des premiers prototypes d’Asic Miner

4. réceptionner les bitcoins
2 jours à chercher un client bitcoin, pleurer en comprenant qu’il me faut 33GB d’espace disque pour stocker la blockchain, se faire conseiller sur twitter d’utiliser Multibit, découvrir vanitygen, perdre une journée pour avoir une adresse toujours aussi immémorable mais commençant par « 1marte », stresser comme un fou de perdre sa tune, se rendre compte qu’en fait c’est rapide et facile.

5. acheter l’accès VPN
2 jours à payer sur bitpay, se dire que mettre mon adresse email perso n’est pas la chose la plus intelligente, attendre, vérifier toutes les 5 minutes sa boite mail, aller consulter les logs de son serveur mail, se dire qu’on a probablement foiré un truc, installer Bitmessage pour contacter le support de cryptostorm, ne pas recevoir de réponse, se dire qu’en fin de compte Twitter c’est aussi un bon moyen de communication, recevoir une réponse d’excuse comme quoi ils étaient occupé à gérer SauronsEye (un méga-malware bien flippant), recevoir un token de 3 mois au lieu de 2 pour s’excuser, les pardonner.

6. se connecter au VPN
5 minutes à choper un fichier de config au choix (il y a une dizaine de points de sortie), utiliser le sha512 du token comme nom d’utilisateur sur OpenVPN (en ligne de commande, le client de NetworkManager me donne plus de fil à retordre), aller sur IPleak pour voir que je ne laisse rien filtrer, se rendre compte que je peux maintenant résoudre les URLs .i2p et .bit avec leurs DNS, retourner voir des gifs sur reddit.

Police dog

On the internet, nobody knows you are a dog…

Que retenir de tout ça ? Que cela m’a prit un temps assez délirant, principalement passé à faire des recherches (et heureusement, ça ira plus vite la prochaine fois). Il existe des tonnes d’alternatives pour chaque point (et je n’ai surement pas choisi les meilleures ou les plus faciles). C’est une très bonne chose d’avoir le choix mais ça noie le néophyte, il faut sacrément être motivé pour se protéger aujourd’hui.

Je précise aussi que si j’ai fais cela pour des raisons de sécurité, je suis bien conscient de pas être anonyme, on peut probablement me retracer à mes bitcoin ou achat du VPN, ce n’était pas le but (mais ça serait un beau challenge pour une prochaine fois).

On en reparle dans quelques semaines pour faire le point sur Cryptostorm.

Ce n’est pas neuf, les membres de la presse traditionnelle et celle sur internet ne sont pas spécialement les meilleurs amis du monde. Les premiers accusant les deuxième d’amateurisme (comme le dit theoatmeal, zero crédibilité), les deuxièmes accusant les premiers de n’y rien comprendre à ce qui touche à Internet. Et c’est pas les exemples qui manquent des deux cotés pour {con,in}firmer. Étant donné que je suis plutôt dans la deuxième catégorie (en voyant large, j’admets) à mes heures perdues, faisons un peu d’actualité en crachant sur la première catégorie.

Vous avez sans doute entendu parler de la fuite de données de la SNCB le week-end passé. En résumé, SNCB-Europe a laissé trainer un fichier texte de 1,4 million de lignes contenant des informations personnelles (nom, adresse, email, téléphone,…) de clients de celle-ci. Il s’agissait donc d’un fichier texte qu’on accédait depuis une URL trouvée via une recherche Google, une grosse bourde (ça sent le licenciement de stagiaire tout ça). Un utilisateur s’en rendant compte publie l’info sur le forum ADSL-BC le samedi 22 à 12h. Un bon résumé de l’affaire avec une opinion que je partage peut être trouvé ici : Post-mortem: La SNCB met en ligne les coordonnées de 1.400.000 clients.

et pourquoi tu as besoin des adresses postales et numéro de téléphone pour envoyer des vœux ?

et pourquoi tu as besoin des adresses postales et numéro de téléphone pour envoyer des vœux ?

Comment les chaines de TV et journaux ont présentés cela ? Voici trois exemples de l’info traitée par 3 gros médias (RTL, RTBF et Le Soir) auquel sera remis la prestigieuse récompense du mart-e d’or™ du traitement journalistique de la cyber-actualité, évalué par un comité d’experts internationaux et indépendants. Ça vous donne envie de lire la suite avec un pitch comme ça !

RTL, toujours rapide a sauter sur le scandale a été la première à en parler le samedi 22 à 19h. On peut retrouver l’article et la vidéo sur la page suivante : Les données de milliers de clients de la SNCB dévoilées: « Une personne a usé d’un stratagème pour y parvenir ». Interview du porte parole de la SNCB, propos inquiétant, on sous-entend le piratage. Il y a des perles dans ce reportage comme « des dizaines, voir des centaines de milliers de données personnelles divulguées sur internet, impossible de connaitre un nombre exact » (c’est vrai que compter un nombre de ligne, ça demande des compétences en informatique vachement poussées, il y en avait 1 460 735). Ils n’ont sans doute fait que relayer l’info donnée par la SNCB, pourtant c’est bien un utilisateur du forum ASDL-BC qui les a informé. Ils ne pouvaient pas ne pas connaitre l’existence de ce forum, un autre avis aurait été intéressant à creuser. Ils concluent quand même leur article en parlant de la possibilité de porter plainte pour l’utilisateur lésé. Pour cela, je décrète à RTL une note de 2/5 et un mart-e de bronze.

pirates

Quelques vils pirates usant d’un stratagème pour attaquer les pauvres serveurs de SNCB-Europe

La RTBF attend le dimanche pour relater l’info lors du journal télévisé. Pas mal, on parle du forum, on explique que c’est une faille de sécurité, on donne le point de vue de la SNCB. Tout est bien jusqu’au moment où ils disent « Que compte faire la SNCB ? Elle n’a en tout cas pas encore porté plainte ». On sous-entend donc clairement que c’est la pauvre SNCB qui s’est faite pirater et a été lésée. On ne parle pas du citoyen qui pourrait être dédommagé ni du moyen d’en savoir plus. Peut mieux faire, 3/5 et un mart-e d’argent.

Last but not least, Le Soir a attendu lundi matin pour publier sur son site : La SNCB divulgue les coordonnées privées de ses clients sur internet. L’article est bref et ne rentre pas du tout dans la technique mais est complet, ils parlent du forum, du nombre exacte de personne, du communiqué de la SNCB, que le fichier aurait été disponible pendant plusieurs semaines (et non pas quelques heures), citent même de NURPA qui avait fait une très bonne analyse et disent de contacter la commission vie privée. Bon boulot les gars, vous décrochez un 4/5 (-1 pour la brièveté) et le tant convoité mart-e d’or !

C'est beau, vivement l'édition 2013 !

C’est beau, vivement l’édition 2013 !

Qu’est-ce qu’on peut tirer de ça ? Les plus rapides sont les plus mauvais. Cette source aussi peu crédible qu’est Internet contient parfois de l’information intéressante mais surtout un autre point de vue que celui du principal intéressé (ici la SNCB) qui n’est pas forcement neutre. Ami de la presse écrite et audiovisuelle, prenez exemple sur Le Soir. De mon coté, je milite pour une formation en informatique dans les écoles de journalisme et attend toujours une réponse de la commission vie privée concernant mes données.

Mise à jour: il est important de noter que les réactions mentionnées ici sont les premières faites. L’affaire a été ensuite reprise et en général les bévues reprochées sont corrigées. Exemple pour la RTBF.

Commentaires fermés sur Caméras IP, toi aussi D-Link

Intro

Ces derniers temps, les caméras de surveillances IP n’ont pas bonne presse. On a d’abord eu en janvier Trendnet qui, possédant une faille de sécurité, laissait n’importe qui voir la vidéo. Il y a deux semaines, c’était les chipsets Hi35xx des caméras H.264 sur lesquels on découvrait une faille de sécurité majeure qui permettait de récupérer tous les mots de passes enregistrés (mails & co). Aujourd’hui parlons un peu de D-Link.

Dans le cadre de mon travail de fin d’études en informatique, j’ai étudié le cas d’une caméra D-Link, la DCS-2130, le genre de caméra bon marché que l’on peut utiliser pour surveiller sa maison pendant son absence ou s’assurer que bébé dort bien.

Si vous voyez ceci dans une vitrine d’un magasin, passez votre chemin…

Cette caméra utilisant des logiciels sous licence GPL, D-Link a été contraint de publier également le code source de son firmware sous GPL. Je vous avais déjà expliqué sur ce blog mes déboires pour le récupérer ; toujours est-il qu’il est disponible ici.

Lors de mon analyse, j’ai découvert plusieurs faiblesses en terme de sécurité. Je vais détailler les deux principales ici, l’analyse complète peut être lue au chapitre 6 de mon rapport[pdf, 2,2 MB, en].

Compte invité

Depuis l’interface d’administration de la caméra (accessible à l’adresse IP de la caméra), il est possible d’exporter la configuration de la caméra. Ce fichier contient en clair tous les paramètres et mots de passes enregistrés (très moyen, imaginez qu’il y aie une faille similaire à celle des caméras H.264…). C’est en consultant ce fichier que je me suis rendu compte de la présence d’un compte avec le login et mot de passe guest.

acounts0_name=admin
acounts0_passwd=mypass
acounts1_name=guest
acounts1_passwd=guest
acounts1_authority=2

Que permet le droit d’accès 2 ? De consulter le flux vidéo !
A la configuration de la caméra, lors du premier lancement (où l’on utilise un superbe utilitaire en ActiveX), il n’est jamais mentionné la présence de ce compte. On a même un faux sentiment de sécurité vu l’obligation de spécifier un mot de passe au compte administrateur. Or tous les possesseurs d’une DCS-2130 (et surement d’autres modèles, il faudrait tester) possède un tel compte.

Pire encore : il n’est apparemment pas possible de supprimer ce compte. L’interface d’administration possède un formulaire pour la suppression de comptes ; sauf en cas du compte invité. En effet, dans le code source, j’ai trouvé ce bout de code responsable de ce comportement dans la fonction uri_user_del :

#ifdef CONFIG_BRAND_DLINK
else if(i == 1){
DBG("You can not delete the guest accunt!n");
break;
}
#endif

On a donc un code (faute d’orthographe d’origine) qui interdit la suppression d’un compte caché permettant l’accès à la vidéo. Je crierais bien à la backdoor si c’était pas aussi gros.

Est-ce exploitable ? Oui ! Des centaines de caméras D-Link sont accessibles via une adresse IP publique. (lorsque son possesseur à configuré un port forwarding). On peut le découvrir facilement via un bête scan sur un range d’IP (avec un script comme celui-ci) ou en utilisant un outil très bien foutu, ShodanHQ, moteur de recherche de routeurs, serveurs et autres appareils tel que des caméras IP. Une simple recherche à DCS-2130 liste des adresses IP auquel il y a de grande chance d’avoir un compte guest disponible. Assez dérangeant.

Capture d'une caméra

Hmm voila qui est fâcheux…

Ne jetez pas encore votre caméra (quoique), il est heureusement possible de régler cela via une petite manipulation que j’ai découverte :

  1. Exportez la configuration de la caméra et ouvrez le fichier dans un éditeur de texte
  2. Cherchez la ligne contenant acounts1_name=guest (ligne 514 chez moi) et remplacez la par acounts1_name=.
  3. Faites la même chose à la ligne suivante (acounts1_passwd=).
  4. Sauvez le fichier et importez le sur l’interface d’administration

La nouvelle configuration de votre caméra ne possèdera donc plus de compte invité et sera (partiellement) à l’abri des yeux indiscrets.

Fichier de log

Lors de l’analyse du firmware, j’ai découvert que Boa, serveur web minimaliste, hard-codais toutes les URI avec les droits d’accès et la fonction à exécuter dans un fichier request.c (le même fichier qui contenait la fonction de suppression de compte). Par exemple :

{"/ipcam/stream.cgi", uri_av_stream, AUTHORITY_VIEWER, URI_FLAG_VIRTUAL_PAGE, NULL},
{"/cgi-bin/loadconf.cgi", NULL, AUTHORITY_OPERATOR, 0, NULL},

A la première ligne, l’URI /ipcam/stream.cgi exécute la fonction uri_av_stream pour tous les utilisateurs ayant les droits AUTHORITY_VIEWER (comme le compte invité). A la deuxième, l’URI /cgi-bin/loadconf.cgi exécute directement le fichier binaire du même nom pour tous les utilisateurs avec les droits AUTHORITY_OPERATOR (comme le compte admin).

Maintenant, question subsidiaire : que se passe il lorsque qu’il existe un fichier, disons /cgi-bin/exportlog.cgi qui se trouve dans les fichiers sur le serveur mais pas dans la liste hard-codée avec les permissions ? N’importe qui peut l’exécuter, admin, invité ou même un simple visiteur. Comme son nom l’indique, ce fichier exporte le log de la caméra qui contient ce genre d’info :

2012-05-24 21:01:29 NETWORK LOST
2012-05-24 21:01:29 SD CARD SIZE 7620040 KB
2012-05-24 21:01:34 NETWORK RECONNECT
2012-05-24 21:03:15 admin LOGIN OK FROM 193.44.55.11
2012-05-25 15:40:38 IP CAMERA Received MOTION Trigger
2012-05-25 15:40:41 MOTION STOPPED

Il n’y a, heureusement, pas de mots de passe mais des informations potentiellement sensibles comme des logins, des adresses IP et surtout, des événements comme l’outil de détection de mouvements qui s’active.

Conclusion

Quelles sont les conséquences concrètement de ces deux failles ? Imaginons un voleur un peu geek voulant planifier son vol, s’il se rend compte qu’une caméra IP est accessible (soit depuis l’intérieur du réseau soit depuis une adresse IP publique), il pourra voir accès à beaucoup d’information qui lui faciliteront la tâche. Il pourrait connaître les heures de fréquentation des habitants, repérer les lieux et connaître les endroit à éviter. Un comble pour un outil supposé vous protéger.

Si l’on s’introduit sur le réseau wifi

Étant donné la nature du second problème, en l’attente d’une mise à jour (si elle vient), il n’est pas possible d’empêcher ce comportement sans corriger le code manuellement, compiler le firmware (marche à suivre ici) et charger votre build. C’est possible mais c’est à vos risques et périls, je n’ai personnellement pas tenté l’expérience. Cependant, voici un fichier request.c pour le serveur Boa qui, théoriquement, devrait régler à la fois le problème de la suppression du compté invité impossible (suppression du bout de code responsable) et rendre le fichier de log inaccessible pour les non-administrateurs (ajout d’une règle). Si D-Link, qui n’a toujours pas répondu à mon email du mois de juillet, voulait l’utiliser, c’est cadeau.

Si l’on connaît l’adresse IP publique du réseau

Dans cette étude, je n’ai regardé qu’a un seul modèle de caméra choisi arbitrairement. Aucune étude de sécurité n’avait été faite dessus auparavant (du moins que j’ai trouvé) et elle avait de bonne critique. Cela ne veut pas dire que toutes les caméras sont mauvaises ou que D-Link est un mauvais élève (on a vu des problèmes similaires chez d’autres marques). Je pense que cela représente bien le risque de confier des choses sensibles (des images de l’intérieur de sa maison) à des appareils sur lesquels on ne sait rien et qui n’ont pas été pensé dans une optique de sécurité. On peut espérer que la multiplication des problèmes découverts sur ce genre d’appareils va sensibiliser les constructeurs et possesseurs à faire plus attention à ces problèmes.

css.php