Conférence BLACK HAT USA. Comment un pirate hollywoodien utilise des caméras de surveillance. Partie 1

Je suis Greg Heffner, et ceci est une conversation sur la façon dont un pirate hollywoodien utilise des caméras de surveillance. Certains d'entre vous savent peut-être que lorsque mon travail sur ce sujet a été publié pour la première fois, un article est apparu sur le portail Internet de Reuters.



Pour moi, en tant que conférencier, c'était vraiment génial. Mais le problème était que l'article a décidé de souligner que je travaillais pour une institution spécifique avec un nom à trois lettres, sur laquelle il y avait très peu de notes dans la presse récemment. Et ils sont allés si loin qu'ils ont prétendu que j'avais présenté à BlackHat mon travail fait pour cette agence de trois lettres. Cette publication a donné lieu à des appels téléphoniques très intéressants de mon ancien employeur.

Heureusement, nous avons des gens qui répondent à mes appels, donc en gros ils leur ont crié dessus, pas à moi, mais j'ai quand même dû rassurer les gens et, finalement, j'ai réussi à convaincre l'ancien employeur que parfois les gens sur Internet aussi ont tort.

Par conséquent, pour être extrêmement clair, je vais expliquer que le discours d'aujourd'hui ne porte pas sur un travail que j'ai jamais fait pour d'anciens employeurs, mais sur ce que je fais pour mon employeur actuel. Je travaille en tant qu'analyseur de vulnérabilités à plein temps pour Tactical Network Solutions, j'enseigne également des cours sur les opérations sur les appareils intégrés et je m'efforce parfois de pirater des appareils sans fil.

Aujourd'hui, je vais parler de la sécurité des caméras de surveillance, ou plutôt de l'absence de cette sécurité. Au début du passé, en 2011, j'ai commencé à étudier la question de la sécurité du firmware des caméras connectées au réseau de surveillance, et j'ai découvert beaucoup de choses intéressantes.

Je mettrai de côté la menace «zéro jour», j'en parlerai quand j'y arriverai, je vais d'abord vous montrer comment, à la manière d'un véritable hacker hollywoodien, je peux tirer parti des vulnérabilités que j'ai découvertes.

Donc, quand j'ai commencé à étudier les caméras de surveillance, et je dois dire que j'ai étudié beaucoup d'appareils intégrés, mais pas de caméras, j'ai voulu commencer par quelque chose de simple, qui me garantirait sûrement une victoire. J'ai choisi D-Link car ils ne déçoivent jamais.



J'ai opté pour la DCS-7410, au prix d'environ 900 $, c'est l'une des caméras de surveillance D-Link extérieures les plus chères fonctionnant en mode jour et nuit. Comme les autres caméras, dont nous parlerons aujourd'hui, elle possède une interface administrative et prend en charge l'accès au flux vidéo via Internet à un serveur Web, et est également alimentée via un réseau (PoE). Cela en fait une cible très attrayante pour un attaquant.

Plus précisément, cette caméra utilise Lighttpd II, un serveur Web open source qui n'est pas souvent utilisé avec des appareils intégrés. Les développeurs ont créé une configuration saine et des règles restreignant l'accès à ce qui peut être atteint via le serveur Web.

Sur la diapositive suivante, vous voyez que si vous voulez obtenir quelque chose dans le répertoire administratif cgi / admin, vous devez avoir des droits d'administrateur. Si vous voulez obtenir quelque chose dans le répertoire vidéo, vous pouvez être n'importe quel utilisateur, mais vous devez être autorisé. Ils ont des entrées et des règles de connexion pour chaque répertoire individuel de l'interface Web, à l'exception du répertoire cgi-bin.





La plupart des scripts cgi de la caméra se trouvent dans le répertoire protégé cgi. Un répertoire cgi-bin non sécurisé contient un seul fichier, rtpd.cgi, qui est un script shell bash utilisé pour démarrer et arrêter le protocole de transport de caméra RTP en temps réel.



Cependant, le script rtpd.cgi a un sérieux défaut. Il analyse les paramètres de la requête en remplaçant toutes les esperluettes et dans la chaîne $ QUERY_STRING par des espaces, puis obtient le résultat à l'aide de la fonction eval:



Donc, si vous voulez simplement arrêter la caméra, envoyez simplement une demande: rtpd.cgi? Action = stop. Lorsqu'elle est utilisée comme prévu, la requête HTTP suivante changera le nom? Action, dont la valeur sera définie sur la position "start":

$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?action=start 

Mais comme les données de $ query_string sont exécutées à l'aveugle par la méthode eval, un attaquant peut exécuter n'importe quelle commande simplement en la spécifiant dans le cadre des paramètres http GET:

 $ wget http://192.168.1.101/cgi-bin/rtpd.cgi?reboot 

Ainsi, le pirate pourra redémarrer la caméra. Il était en fait difficile pour moi de catégoriser cette vulnérabilité, car il ne s'agit même pas d'une injection de commandes, nous n'entrons rien, mais permettons simplement au programme d'être exécuté avec d'autres paramètres. J'ai appelé cette vulnérabilité «Ron Burgundy», car elle fera littéralement tout ce que vous entrez dans la chaîne de requête.



Un attaquant pourrait utiliser cette vulnérabilité pour obtenir un mot de passe d'administrateur de caméra normal auprès de NVRAM. La commande suivante est exécutée par le script de démarrage de la caméra après le redémarrage et envoie à votre navigateur une réponse de ce type:



Maintenant, vous avez non seulement un accès root, car après avoir reçu le mot de passe, vous devenez également administrateur, vous pouvez donc tout faire avec l'appareil photo et les vidéos.

Il s'avère que D-link, comme de nombreux fabricants, aime vraiment réutiliser le code en installant le même firmware, et c'est le cas dans beaucoup de leurs produits. Mais cela n'affecte pas seulement les produits D-link, car une pratique similaire est utilisée par Trendnet et certains autres fabricants "sans marque" de ces appareils. La réutilisation du code est désormais répandue, tant chez les fabricants d'une même marque qu'entre différentes marques. Cette vulnérabilité est contenue dans le micrologiciel de nombreux modèles de caméras qui sont indexés sur la ressource de collections de vulnérabilités informatiques Shodan Dork.



Cette vulnérabilité peut sembler familière à certaines personnes, et c'est probablement parce qu'après mon discours à ce sujet, Core Security a défini l'indice de vulnérabilité CVE-2013-1599 pour ces produits, indiquant qu'il n'est présent que dans les appareils D-link, sans mentionner aucun d'un autre fabricant utilisant le même firmware dans leurs appareils. Même si l'un des fabricants corrige cette erreur dans la nouvelle version du firmware, la plupart des appareils resteront vulnérables pendant encore 3 ans, car généralement personne ne met à jour le firmware à temps, et certains ne savent pas ce que c'est. Comme je l'ai dit, les produits D-link sont l'une des cibles d'attaque les plus abordables, alors regardons les caméras de fabricants plus réputés, tels que Cisco avec le modèle PVC 2300. Il s'agit d'une caméra IP de classe affaires de milieu de gamme d'une valeur de 500 $.



Il dispose actuellement d'un serveur Web et fournit une authentification Ă  l'aide d'un fichier de mots de passe au format HTTP.



La plupart des gens connaissent ce système - vous installez votre fichier de mot de passe HTTP, ou plus précisément, un lien vers un fichier de mot de passe centralisé dans n'importe quel répertoire que vous souhaitez protéger avec un mot de passe. Par conséquent, si vous regardez le micrologiciel, l'interface Web de chaque répertoire contenait un fichier de mot de passe .htpasswd, à l'exception d'un répertoire, oamp, situé dans / usr / local / www / oamp.



Au lieu d'un fichier de mot de passe, il contenait un tas de fichiers XML qui servaient de liens vers le fichier binaire oamp.cgi. Voyons ce que fait ce cgi. Il s'avère qu'il implémente une sorte de mini-API, qui est complètement distincte de tout ce qui s'exécute dans l'interface Web.



Il s'attend à ce que l'on vous demande certaines actions, notamment le téléchargement du fichier de configuration, la mise à jour du fichier de configuration, le téléchargement du fichier de mise à jour du micrologiciel, la mise à jour du micrologiciel, et bien plus encore. Les développeurs n'étaient pas si stupides, donc avant d'exécuter votre demande, oamp.cgi vérifie si vous avez le bon ID de session valide.



Si vous ne disposez pas d'un identifiant de session valide, la seule chose qu'il peut faire est d'entrer une connexion.



Cela en soi est intéressant car ils ont implémenté une vérification d'authentification qui n'est utilisée nulle part ailleurs dans l'interface. J'ai commencé à comprendre comment ils contrôlent l'entrée, c'est-à-dire la connexion. Ils comptent sur votre nom d'utilisateur et votre mot de passe, et sans plus de surprises.





Et puis ils font deux appels à la fonction PRO_GetStr, et je n'ai aucune idée de ce qu'ils affectent. Mais je sais que le premier appel à cette fonction lui donne deux lignes - OAMP et le nom d'utilisateur L1_usr, et le deuxième appel - deux autres lignes, OAMP et le mot de passe L1_pwd.





Ensuite, la première valeur est renvoyée pour l'utilisateur L1 et comparée avec le nom d'utilisateur utilisateur, L1_usr spécifié lors de l'authentification, et la deuxième valeur de la chaîne est également renvoyée - mot de passe mot de passe, L1_usr, qui est comparée avec le mot de passe entré par l'utilisateur lors de la connexion.





Vraisemblablement, ce nom d'utilisateur et mot de passe L1, quelles que soient les valeurs qu'ils prennent, fournissent la connexion correcte pour cette interface OAMP. Le seul autre endroit que j'ai pu trouver dans le firmware, et qui est vraiment associé au nom d'utilisateur et au mot de passe de l'utilisateur, est dans le fichier de configuration.



Et ces valeurs sont codées en dur dans les périphériques qui utilisent le fichier de configuration de la section OAMP pendant le fonctionnement. Vous voyez que la valeur de connexion utilisateur L1 est définie dans la ligne L1_admin et la valeur du mot de passe utilisateur est dans la ligne L1_51.

Et c'est un vrai problème, car toute cette interface OAMP et ces comptes codés en dur sont complètement non documentés, donc personne ne sait qu'ils sont là, sauf pour les personnes qui ont pris la peine de regarder dans le firmware. Bien sûr, l'administrateur ne le fera jamais.

Mais même s'il l'a découvert, il n'a aucun moyen de modifier ces valeurs, car il n'y a pas d'interface administrateur dans cet appareil photo. Le problème avec les mots de passe secrets codés en dur est que, grâce à l'utilisation de portes dérobées, ils restent secrets pendant une courte période.

Ainsi, nous pouvons utiliser ces comptes de porte dérobée pour vous connecter et obtenir un ID de session. Maintenant que nous pouvons envoyer cet ID de session avec nos demandes, nous pouvons également invoquer toute autre action prise en charge par oamp.cgi, y compris le téléchargement du fichier de configuration des paramètres.





Le problème est que si vous essayez de le décrypter en utilisant Base64, cela ne fonctionne pas, vous obtenez juste un tas de déchets. C'est le cas lorsque Base64 n'est pas Base64.



La raison de cela devient évidente lorsque vous regardez le code final Base64 dans le fichier binaire du microprogramme PVC-2300 lui-même - la base de l'encodage est créée ici, mais il utilise une chaîne de clé Base64 non standard, qui a été découverte lors de l'analyse du chiffrement et du déchiffrement du code 64. Heureusement, avec En utilisant Python, il est très facile de changer une chaîne de clé dans un module Python Base64 en une chaîne de clé personnalisée, comme indiqué dans la diapositive.



Ainsi, avec quelques chaînes Python, nous pouvons facilement décrypter le fichier de configuration et le transformer en texte brut, ce qui nous donne des options de connexion sous la connexion de l'administrateur.



Après avoir pris le contrôle de la caméra, nous pouvons voir la salle des serveurs. Le problème est que la visualisation des salles de serveurs capture vraiment les 10 premières secondes, mais cela devient alors une tâche plutôt ennuyeuse.



Par conséquent, je suis revenu sur le code et j'ai commencé à étudier la possibilité de télécharger le firmware. C'est en fait très intéressant, car au lieu de télécharger le fichier du firmware sur l'appareil à partir du site officiel, vous pouvez spécifier votre propre URL, l'appareil ira à cette adresse et téléchargera ce qu'il considère comme un firmware.



La fonction system2 génère simplement une commande à partir de la chaîne de format et de l'url avant d'appeler la fonction système libc, ce qui permet à un attaquant d'entrer des commandes shell arbitraires via le paramètre url. La commande de l'attaquant sera exécutée avec des droits de superutilisateur, et puisque la vérification est effectuée par la valeur url, il est très facile de la contourner à l'aide de ce script:

 $ wget --header=”sessionID: 57592414” http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:6 5534/;reboot; 

Après cela, l'ordinateur situé à cette URL redémarre et vous pouvez exécuter n'importe quelle commande de votre choix.



Cette vulnérabilité a été testée sur toutes les versions de micrologiciel de deux modèles de caméras de surveillance Cisco - PVC-2300 et WVC-2300, une caméra similaire avec deux antennes. Au moment d'écrire ces lignes, Shodan a montré plus de 500 caméras IP publiques et potentiellement vulnérables détenues par des hôtels, des salles de serveurs et des sociétés d'ingénierie développant des équipements pour la Station spatiale internationale.

Ainsi, D-link et Cisco ne protègent pas correctement les caméras de surveillance, même si vous savez que ces caméras ne sont pas leur produit principal. Par conséquent, regardons les marques qui se spécialisent spécifiquement dans la conception et la fabrication de caméras de surveillance. J'ai choisi IQ Invision, qui produit des caméras haute définition coûteuses, telles que l'IQ 832n, coûtant plus de 1000 $ chacune, ce qui n'est pas bon marché du tout.



La principale raison de mon intérêt est que ce sont les gars qui font installer les caméras dans le complexe commercial où je travaille, donc il y avait des raisons personnelles à cela. Alors, qu'obtenez-vous en utilisant une caméra de surveillance professionnelle pour mille dollars?
Par défaut, ces caméras fournissent une image vidéo non authentifiée, et aucune des études détaillées d'installation de caméras n'a pu modifier ce paramètre par défaut. Bien que l'interface d'administration soit protégée par mot de passe, l'interface utilisateur permet d'accéder à toutes les ressources de la caméra sans authentification, ce qui crée un large champ d'attaque.



Les paramètres d'authentification de l'administrateur peuvent être modifiés par l'administrateur, mais essayez de deviner combien d'administrateurs ont connecté leurs caméras à Internet sans modifier les paramètres par défaut - presque tout. Cependant, la plupart des administrateurs de notre complexe étaient assez intelligents pour modifier ces paramètres, j'ai donc commencé à regarder ce que je pouvais faire d'autre sans authentification. Il s'est avéré que je pouvais accéder librement à la page.



Il contient tout un tas de paramètres de l'appareil photo, tels que les paramètres de mise au point, qui ne sont pas aussi intéressants que les noms d'utilisateur et les mots de passe. Le code derrière cette page oidtable.cgi était plus intéressant. Si vous démontez ce binaire, vous pouvez voir que la page n'accepte qu'un seul paramètre, grep, qui est utilisé pour filtrer les résultats renvoyés à la page oidtable.cgi.



Après avoir vérifié que la valeur du paramètre fourni est inférieure à 32 caractères, oidtable.cgi place cette valeur sur la ligne de commande et la transmet à popen:





Ce que j'ai vu m'a fait dépeindre le «facepalm» et m'a incité à injecter quelques équipes.



Vous voyez qu'ici, tout comme dans le cas de D-Link, je peux exécuter la commande PS et récupérer la sortie sur mon navigateur. Ainsi, sans authentification, je peux facilement entrer des commandes shell arbitraires qui seront exécutées en tant que root. Les listes de processus montrent que Netcat est déjà installé sur ces caméras avec la possibilité de saisir des tirets dash-e, donc je suis sûr que la plupart des gens ici peuvent trouver des commandes plus intéressantes à exécuter que la liste de processus. Cependant, mon objectif principal était d'entrer dans le panneau d'administration, et j'ai compris comment le faire.

16:30 min

Conférence BLACK HAT USA. Comment un pirate hollywoodien utilise des caméras de surveillance. 2e partie


Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en le recommandant à vos amis, une réduction de 30% pour les utilisateurs Habr sur un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbps à partir de 20 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbit / s jusqu'en décembre gratuitement en payant pour une période de six mois, vous pouvez commander ici .

Dell R730xd 2 fois moins cher? Nous avons seulement 2 x Intel Dodeca-Core Xeon E5-2650v4 128 Go DDR4 6x480 Go SSD 1 Gbps 100 TV à partir de 249 $ aux Pays-Bas et aux États-Unis! Pour en savoir plus sur la création d'un bâtiment d'infrastructure. classe utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?

Source: https://habr.com/ru/post/fr427367/


All Articles