Comment utiliser l’API Shodan avec du Python pour automatiser les recherches des périphériques vulnérables

Home

J’ai parlé un peu de l’engin de recherche des hackers, Shodan, dans un de mes articles précédent: Hacker à l’aide de Metasploit et le module Shodan.

Shodan communément appelé « le moteur de recherche pour les appareils connectés à internet (IOT – Internet Of Things). » Avec autant d’appareils connectés à l’internet, affichant différents niveaux de sécurité, les capacités spéciales de ce moteur de recherche peut fournir une liste des appareils vulnérables et par le fait même pouvant être attaqués. Dans ce tutoriel, nous allons utiliser Python pour créer des scripts simples pour nous aider à trouver, à l’aide de Shodan, des adresses IP pouvant être vulnérables. N’importe quel appareil connecté à internet doit révéler certaines information sur lui-même. Cela peut être relativement limitée, un système bien configuré peut bloquer la plupart des requêtes indésirables. Sur certains appareils, on peut être capable de scanner des ports et révéler des choses telles que les services s’exécutant sur un serveur web ou le nom d’une webcam connectée à un réseau sans fil. Pour ceux connaissant la populaire série télévisée Mr. Robot mettant en vedette Christian Slater dans le rôle d’un hacker, il utilise le moteur de recherche Shodan dans le but de recueillir des informations sur son entreprise, Evil Corp.  Dans la première épisode de la saison 3 « eps3.0_power-veille-mode.h » , Il utilise l’engin de recherche Shodan pour effectué une recherche « Apache Tomcat ».  

 

 

  La recherche utilisée dans l’émission peut révéler de l’information essentiel à propos d’une cible potentielle.  En utilisant cette technique nous allons regarder a ce qui peut être trouvé en utilisant les fonctions de recherche de Shodan et comment il peut être utilisé pour exécuter un hack.

 

Étape 1 – Shodan

 

La première étape consiste à ce créer un compte sur le site de Shodan compte.shodan.io/s’inscrire.  Une fois enregistré vous devez entrer dans votre compte et gardez en note votre clé API de Shodan, que nous allons utiliser dans nos scripts un peu plus loin dans le tutoriel.  

 

Les Hacks de Monsieur Robot: Comment Utiliser le Shodan de l'API Python pour Automatiser les Analyses de la vulnérabilité des Appareils

Les Hacks de Monsieur Robot: Comment Utiliser le Shodan de l'API Python pour Automatiser les Analyses de la vulnérabilité des Appareils

 

 

 

 

L’avantage de créer un compte ne donne pas seulement accès à une clé API mais un certain nombre de filtres de recherche supplémentaires seront disponibles. Certains de ces filtres sont montrés dans la liste ci-dessous:

  • pays: filtre à un pays spécifique
  • ville: filtre à une ville en particulier
  • geo: filtrer par coordonnées
  • nom d’hôte: chercher un nom d’hôte correspondant
  • net: limite à un IP/préfixe
  • os: filtre basé sur le système d’exploitation
  • port: filtre basé sur les ports ouverts

Étape 2 – Installation de l’environnement Python

 

Pour être en mesure d’effectuer des requêtes en utilisant l’interface API de Shodan, nous devons avoir un environnement Python fonctionnel ainsi que le module python de Shodan installé.  Dans les exemples utilisé dans ce tutoriel, python 2.7 est utilisé mais pyhton 3 fonctionne également mais la syntaxe de certain script doit être modifiée.  Dans Kali Linux python 2.7 peut être installé comme suit.

 

sudo apt-get update && sudo apt-get install python2.7

Une fois Python 2.7 ou 3.0 installés, on peut maintenant installer le module python de Shodan.  Cette étape peut-être fait en utilisant pip ou bien easy install.  Pip peut aussi être installé en utilisant apt-get avec la commande suivante.

 

sudo apt-get install python-pip

 

Une fois que Pip est installé, on peut utiliser Pip pour installer le module Python de Shodan.

 

sudo pip install shodan

 

Si vous avez plusieurs versions de Python sur votre ordinateur, et potentiellement différentes version de Pip, il ce peut que vous soyez obligé de spécifier que vous voulez installer le module Python 2.7 en utilisant la commande suivante.

 

sudo pip2.7 install shodan

 

Si aucune de ces techniques fonctionnent, la librairie peut-être installé en exécutant la commande suivante.

 

easy_install shodan

 

Étape 3 – L’appel de l’interface API de Shodan à l’aide d’un script

 

Une fois que Python et la librairie de Shodan sont installés, on peut débuter par créer un script en Python.  Dans une console Linux, on peut créer un nouveau fichier et l’éditer en utilisant nano . Assurez-vous d’utiliser un autre nom que Shodan pour le nom de votre script pour minimiser les conflits.  à l’aide de la commande ici bas, nous allons créer un script nommé search.

 

nano search.py

 

La première chose à faire est d’ajouter une ligne à ce script qui va charger la librairie Shodan.  On peut utiliser la fonction import de Python pour effectuer ceci.

 

import shodan

 

Ensuite, nous pouvons définir notre clé API Shodan pour que le script puisse l’utiliser pour effectuer des requêtes API.  Ajoutez les lignes suivantes.

 

SHODAN_API_KEY = « Entrez votre clé API de Shodan ici » api = shodan.Shodan(SHODAN_API_KEY)

 

Remplacez « Entrez votre clé API de Shodan ici » avec votre clé API que vous trouverez dans votre compte sur le site Shodan.io, en gardant les guillemets aux extrémités.

 

 

Ensuite, nous pouvons essayer la commande try pour définir ce que le script devrait faire. Par la suite nous pouvons ajouter une commande qui utilise le api.search de Shodan pour obtenir un résultat de recherche.

 

try: results = api.search(‘apache’)

 

Dans cet exemple, la recherche est simple et j’utilise apache, toutefois la recherche peut être remplacé par n’importe quelle recherche désirée, incluant les recherches avec filtres expliqués plus haut dans cette article.   On peut retourner les résultats à l’écran à l’aide de la commande print comme démontré ici bas.

 

# Show the results print ‘Results found: %s’ % results[‘total’] for result in results[‘matches’]: print ‘IP: %s’ % result[‘ip_str’] print result[‘data’] print  » except shodan.APIError, e: print ‘Error: %s’ % e

 

Le script devrait être semblable au code affiché dans l’image ici bas.  Plus d’information sur le API Shodan et le code suivant peut être trouvé sur la page de documentation.

Le script peut maintenant être sauvé.  dans nano, on peut sauver le script avec Ctrl+O et quitter avec CTRL+X.  À l’intérieur du même répertoire il est possible de démarrer le script en utilisant la commande suivante.

 

python2 search.py

 

En exécutant le script, on devrait avoir comme résultat une liste d’adresse IP ainsi que certaine information associé à l’IP comme le status https, la location, et d’autres informations indexés par Shodan.

Cette information additionnelle pourrait être utilsée comme critère d’extra pour être utilisé par d’autres scripts ou des outils.  Pour notre exemple, il serait plus utile d’avoir seulement une liste d’adresse IP pour pouvoir automatiser une attaque. Pour que notre script nous donne comme résultat seulement une liste d’adresse IP, on doit seulement modifier le formatage de notre script en Python.  Premièrement nous enlevons le IP: de la ligne ici bas.

 

print ‘IP: %s’ % result’ip_str’

 

De façon à ce que ça ressemble à la ligne:

 

print ‘%s’ % result’ip_str’

 

On peut aussi enlever la ligne précèdant la dernière et les 2 lignes qui suivent.

 

print ‘Results found: %s’ % results’total’ print result’data’ print  »

 

Le script devrait être comme dans l’image suivante:

Quand nous exécutons ce script, il va maintenant seulement retourner une liste d’adresse IP sans l’information qui n’était pas nécessaire pour notre exemple.

 

Cette liste est beaucoup plus utile pour automatiser des attaques contre cette liste mais nous devons avoir une façon efficace de la sauver.  La meilleure façon est d’envoyer le résultat de la commande dans un fichier texte.  Quand on exécute le script on doit ajouter l’opérant suivant >> suivi du nom du fichier texte dans lequel les données seront envoyées. J’ai décidé de nommer le nom du fichier texte apacheIP.txt car les adresses IP proviennent de serveur apache.

 

python2 search.py >> apacheIP.txt

 

Maintenant nous possédons un fichier texte contenant une liste d’adresse IP qui peut être utilisé pour évaluer différentes attaques en fonction des termes de recherche que nous avons utilisés pour identifier des types particuliers de systèmes vulnérables (pour notre example: apache)

 

Étape 4 – Automatisation de tâches

 

Pour un example d’utilitaire utilisé en ligne de commande qui peut utiliser un IP comme argument et en restant légal, je vais utiliser la commande Ping.  En utilisant un outil/commande qui essai d’attaquer ou exploiter activement un périphérique serait illégal.   soyez certain d’utiliser seulement les outils que vous avez le droit d’utiliser sur une cible.  tout d’abord nous allons créer un script en utilisant nano de la même manière que nous l’avons fait précédemment.

 

nano ping.sh

 

On peut débuter notre script and tappant les symboles #! et la déclaration du shell.  Ceci nous indique que c’est un script shell qui sera exécuté par le shell bash.

 

#!/bin/bash

 

Ensuite, on peut ajouter une déclaration qui nous permet de faire quelque chose avec chaque ligne de notre fichier contenant la liste d’IP.

 

cat apacheIP.txt | while read line do ping -c 1 $line done

 

Le script devrait ressembler à l’image ci dessous.  Seulement remplacer le fichier texte log.txt par le nom de votre fichier texte, pour notre example, apacheIP.txt. L’argument -c et le chiffre 1 signifie que la commande ping vais envoyer seulement une requête de ping et passer à la prochaine adresse IP.

On peut maintenant sauver notre script avec Ctrl+O et quitter avec Ctrl+X.  Pour être en mesure d’exécuter notre script nous devons le rendre exécutable par notre système d’exploitation en modifiant les privilèges avec la commande chmod. (Utilisez sudo si vous n’êtes pas root)

 

chmod +x ping.sh

 

Maintenant, nous pouvons exécuter notre script dans un terminal.

 

./ping.sh

 

Le script passera chaque IP dans notre liste et vais envoyer un ping à chaque adresse.

 

 

Étape 5 – Différentes attaques

 

Avec un peu d’imagination les scripts peuvent être modifiés pour ex/cuter des attaques plus menaçantes.  Comme par exemple dans notre script ping.sh, la variable $line dans cette commande, représente chaque ligne de la liste d’adresse IP de notre fichier apacheIP.txt.

 

ping $line

 

On peut remplacer la commande ping avec n’importe quel autre commande qui peut inclure une adresse IP comme argument.  Par exemple, on pourrait utiliser la commande nmap pour effectuer un scan des ports sur les IP cibles en utilisant la commande ici bas.  En utilisant l’argument -sS il y aura un scan des services en plus des ports.

 

nmap -sS $line

 

Ce type de « scanning » et d’attaque de plusieurs cibles est une méthode très efficace pour découvrir des systèmes vulnérables sans avoir à prendre du temps pour trouver un système et l’attaquer manuellement. À l’aide de la commande nmap -sS qui affiche les services en plus des ports, on peut utiliser Metasploit et un site comme la base de donné des vulnérabilitées de Rapid 7 pour trouver des vulnérabilités, qui pourrait être utilisé par la suite pour exploiter la cible.  Je vais vous démontrer comment exploiter une faille de sécurité sur un serveur Linux dans mon prochain article.  Comment exploiter une faille de sécurité à l’aide de Metasploit.

tnt@tntsecurite.ca  

 

Home  


Commentaires fermés.