
Préface
Il était une fois au début des années 2000, beaucoup étaient amusés par le fait qu'ils `` scannaient '' régulièrement les réseaux de leur fournisseur, et parfois des cibles encore plus éloignées, afin de détecter les machines et ressources Windows sur celles-ci (SMB), disponibles en lecture (écriture). Le processus de recherche était primitif: une plage d'adresses IP ou un masque de réseau ont été définis, et grâce à divers outils - LANguard Network Scanner, xIntruder et similaires - les adresses ont été analysées et les serveurs ont été localisés. Souvent, les machines détectées se sont avérées disponibles pour la lecture, moins souvent pour l'écriture, diverses ressources réseau (disques, imprimantes, répertoires). Grâce à une session anonyme, via IPC $ et l'utilisateur «Guest», il était possible de transférer des ressources sur la machine, parfois il y avait des membres des «Administrateurs» sans mot de passe, et parfois, après un effet plus «actif» sur les machines détectées, il était possible de trouver des serveurs exécutant Windows NT 4.0 ou Windows 2000 Server. Si la chance a daigné trouver des machines avec Windows 98 alors répandu, alors cela est devenu plus facile - à cette époque, le système d'exploitation spécifié contenait de nombreuses vulnérabilités différentes, y compris la mise en œuvre de l'utilisation de SMB, la bruteforce pour l'accès à la ressource a été effectuée en quelques minutes, même sur une ligne commutée connexions. Pour ceux qui veulent plonger dans les temps anciens, il est écrit en détail sur «l'accès» à Windows 9x - Hacking Exposed: Network Security Secrets & Solutions. Chapitre 4: Piratage de Windows 95/98 et moi . Mais le reste de l'article n'est pas là-dessus.
Je n'aurais jamais pensé qu'en 2019, un tel "divertissement" est possible. La similitude réside dans la facilité de trouver les ressources disponibles des autres pour tous les curieux. De plus, nous ne nous concentrerons pas sur une tendance populaire au cours des 2 dernières années - la recherche de bases de données MongoDB ou Elasticsearch ouvertes à l'accès - mais sur un service légèrement plus terre-à-terre.
En outre, je propose de ne pas évaluer l'ensemble de la procédure, leur norme éthique, je note que ce message n'est pas un appel à des actions qui peuvent être attribuées à certains articles du Code pénal de la Fédération de Russie ou à des normes similaires des lois d'autres États.
Système de fichiers réseau (NFS)
Network File System (NFS) - un protocole d'accès réseau aux systèmes de fichiers, vous permet de connecter (monter) des systèmes de fichiers distants via un réseau, offre aux utilisateurs un accès aux fichiers, vous permet de travailler avec ces fichiers de la même manière qu'avec les fichiers locaux.
Bien entendu, la plupart des NAS (NAS) disponibles sur le marché prennent en charge NFS et permettent d'accéder aux ressources locales ainsi qu'à tout serveur doté d'un système d'exploitation sur lequel il est possible de déployer le service NFS.
Les paramètres d'accès aux ressources du serveur depuis n'importe quel système d'exploitation Ubuntu et l'adresse IP 192.168.1.1 sont contenus dans le fichier / etc / exports et sont des entrées du formulaire:
- / data / place1 192.168.1.0/255.255.255.0(rw,no_subtree_check,nohide,async) 192.168.101.0/255.255.255.0(rw,no_subtree_check,nohide,async)
- data / place2 192.168.1.0/255.255.255.0(rw,no_subtree_check,nohide,async) 192.168.101.0/255.255.255.0(rw,no_subtree_check,nohide,async)
Dans ce cas, l'accès NFS au serveur et à ses ressources / données / place1 est possible pour les clients avec des adresses IP des réseaux 192.168.1.0/255.255.255.0, 192.168.101.0/255.255.255.0.
Montez la ressource distante dans un répertoire local, par exemple, / home / user / example, si le client est sur un sous-réseau autorisé et que le client pour NFS est installé, c'est possible via la commande (Ubuntu):
mount -t nfs 192.168.1.1:/data/place1 /home/user/example
Si au lieu des adresses IP * ou (tout le monde) est indiqué, alors souvent, n'importe quel client peut monter une ressource distante dans son système.
L'utilisateur (par exemple, sous Ubuntu) a juste besoin de taper dans le terminal: showmount -e ip-target et obtenir des informations sur les ressources disponibles sur le serveur (liste d'exportation du serveur).
Par exemple:
showmount -e 81.24..
Export list for 81.24..:
/home/admin 192.168.52.1/24
Ainsi, le scénario suivant est formé: pour détecter les serveurs exécutant NFS, déterminer les ressources disponibles sur les serveurs, consolider le résultat dans un formulaire de sortie unique, puis procéder selon la situation.
Ce qui peut être sur les ressources - évidemment, n'importe quoi:
- les fichiers personnels des utilisateurs d'Internet, par exemple, dans le cas d'appareils NAS "ouverts";
- répertoires contenant des fichiers d'entreprises entières, des bases de données, des archives de bases de données;
- souvent des répertoires avec des adresses / home / * (parfois avec des clés en .ssh et en écriture);
- répertoires contenant des fichiers de systèmes de vidéosurveillance;
- autre ...
Obtenir des adresses IP
En ce qui concerne la découverte de serveurs avec NFS sur Internet mondial, il y a 2 façons: indépendamment, en utilisant divers outils, et des résultats d'analyse, des bases de données et des services tiers prêts à l'emploi. En fait, tout se résume à obtenir une liste d'adresses IP. Dans le réseau local, je pense que l'option est évidente - agir de manière indépendante.
Les ports TCP ouverts 111, 2049 peuvent servir de preuve du fonctionnement du service NFS.
Pour obtenir indépendamment une liste d'adresses IP de serveur, il suffit d'analyser la plage d'adresses ou le sous-réseau entier pour la présence des ports ouverts indiqués. N'importe quel outil convient à cela: nmap, masscan, etc.
Par exemple, avec la commande masscan -p111,2049 200.26.1XX.0/24 —rate=10000
réseau 200.26.1XX.0 / 24 sera analysé pendant plusieurs secondes pour les ports ouverts 111, 2049:
Scanning 256 hosts [2 ports/host]
Discovered open port 2049/tcp on 200.26.1XX.28
Discovered open port 111/tcp on 200.26.1XX.15
Discovered open port 111/tcp on 200.26.1XX.20
Discovered open port 111/tcp on 200.26.1XX.28
En plus de chacune des adresses IP détectées, il est possible d'appliquer la commande:
showmount --no-headers -e 200.26.1XX.28
Résultat:
/usr/common *
De toute évidence, il est possible de scanner vous-même des millions d'adresses IP de l'espace Internet, mais ce n'est pas le moyen le plus rapide, puis le merveilleux service Shodan peut être la solution à la sous-tâche, il y en a bien sûr d'autres, mais celui-ci avec une syntaxe et une API très pratiques. Plonger dans la description des capacités du service n'est pas le but de l'article. En bref - le service permet une recherche avancée des appareils connectés à Internet. Les critères de recherche peuvent être des identifiants de réseau et d'autres métadonnées: numéros de série de certificats et similaires. Shodan possède de nombreuses fonctionnalités pour la recherche ciblée, mais je n'ai pas trouvé de recherche distincte sur NFS, car, par exemple, il existe un critère de produit avec un nom de produit: mongodb, élastique ou apache. Par conséquent, via Web NFS, il est possible de rechercher les requêtes suivantes: nfs, tcp 2049, tcp 111, Portmap: 2049 et ainsi de suite, comme vous le souhaitez.

Ou installez le client Shodan (CLI), initialisez votre API KEY au service et appelez une recherche à partir de la ligne de commande, par exemple:
- recherche shodan --fields ip_str, port Portmap: 2049
- recherche shodan --fields ip_str, port --separator, nfs
Résultat:
139.196.154.23.111,
198.27.116.37.111,
95.211.192.96.111,
80.23.66.122.111,
210.116.82.97.111,
192.198.82.3.111,
165.227.67.242.111,
116.12.48.9.111,
85.34.250.102.111,
182.75.249.197.111,
192.151.212.175,111,
119.216.107.127.111,
217.59.68.2.111,
178.159.12.97.111,
...
Ainsi, comment obtenir les listes d'adresses IP des appareils avec un service NFS valide est compréhensible.
Il existe de nombreuses façons de résoudre ce problème en masse: écrire des scripts bash, organiser un pipeline délicat à partir d'une chaîne de commandes avec un appel à showmount, et d'autres options - qui aime quoi.
Dans mes recherches, j'ai résolu ce problème en Python, et de deux manières différentes. Le premier se connecte via ssh à votre serveur personnel sur Ubuntu avec un client NFS, puis invoque la commande showmount dessus avec le pool d'adresses IP souhaité. La deuxième solution est en Python pur.
Je suppose qu'une question peut se poser: pourquoi est-ce si difficile, pourquoi en Python?
Car, comme dans mon précédent article sur Habr, j'utiliserai l'outil Lampyre, sur lequel le 26 février ils ont publié une API qui vous permet d'écrire vos modules sur la plateforme en Python.
LampyreEn bref sur Lampyre - une plate-forme logicielle pour OSINT et l'analyse de données avec un client "épais" pour Windows, un analogue de l'outil bien connu et populaire dans le même but - Maltego. Comme à Maltego, Lampyre «out of the box» fournit un ensemble de demandes pour divers services. Les requêtes sont conceptuellement équivalentes aux transformations d'un produit mieux connu. S'il manque quelque chose, il est désormais possible d'écrire vos propres demandes. Les demandes fournies avec Lampyre sont exécutées sur l'infrastructure de la plate-forme, écrites indépendamment - sur la machine. Autrement dit, l'utilisateur doit avoir installé Python et toutes les bibliothèques nécessaires utilisées dans le code.
J'ai décidé de tester les capacités de l'API. Le point clé est que Lampyre a déjà plusieurs «demandes» à Shodan, d'autant plus que l'utilisateur n'a pas besoin d'avoir son API KEY du service. Ainsi, avec une seule demande, vous pouvez obtenir des listes d'adresses IP avec le service NFS déclenché, et avec la deuxième demande, le module que j'ai écrit vérifiera les ressources disponibles et visualisera le résultat avec les caractéristiques des ressources sur le même graphique.
Et ici la Corée
Lors de la recherche à partir de Shodan et du test du module, il est devenu intéressant de voir la situation avec la qualité et la quantité des résultats de numérisation par le service Shodan dans les pays asiatiques, comment les choses se passent avec des ressources précaires. Le choix s'est porté sur la République de Corée, je pense qu'il n'est pas nécessaire de dire que la Corée du Sud est un pays très avancé technologiquement, et j'ai suggéré que vous puissiez trouver quelque chose d'intéressant dans ses réseaux.
Recherche par Shodan, dans Requête: nfs , dans Pays: République de Corée code, kr

Le résultat ne tarde pas à venir (dans l'image ci-dessous, seulement une partie du schéma général).

Liste d'hôtes:
- psi.kaist.ac.kr
- hulk.kaist.ac.kr
- messi.kaist.ac.kr
- marvel.kaist.ac.kr
- kaist.ac.kr
- ai1.kaist.ac.kr
- jarvis3.kaist.ac.kr
- baraddur.kaist.ac.kr
- rho.kaist.ac.kr
- jarvis.kaist.ac.kr
Tous, comme on peut le voir sur le graphique et dans les noms, sont répertoriés comme AS1781 - Korea Advanced Institute of Science and Technology

Korea Advanced Technology Institute - la principale université universitaire et de recherche de Corée du Sud située à Daejeon, est sur la deuxième ligne du classement national en Corée du Sud. L'université est systématiquement incluse dans 5% des meilleurs établissements d'enseignement en Corée du Sud.
Nous utilisons les adresses IP spécifiées comme arguments d'entrée dans le module écrit «Explore: NFS (SSH)» et par conséquent:

J'ai rapidement élaboré un tel schéma pour afficher les résultats d'un tableau dans un graphique (sur les schémas et les principes de construction de graphiques plus loin dans l'article).

Le résultat de la combinaison avec un schéma Shodan

Lors de l'analyse des sommets et des relations du graphique, il devient évident à quelles adresses la ressource / home est disponible, accessible à tous (*).
Pour une meilleure perception visuelle, modifiez les propriétés des objets graphiques et d'autres paramètres du diagramme:

Bien sûr, j'ai monté à tour de rôle une partie des ressources sur l'un de mes serveurs et j'ai commencé à étudier. Il s'est avéré presque le même partout - répertoires d'utilisateurs: asm, hoo, hyshin, jay, jiwon, jkhee110, jokangjin, kmh603, ksm782, lee, linus, lost + found, marvel_guest, pie, qwe, scloud, seokmin, sgim, thrlek, yoosj, ysha, zinnia7.
Presque tous les répertoires contenant des fichiers ont été lus et écrits. Certains utilisateurs de .ssh disposaient de fichiers authorized_keys avec un accès en écriture à ceux-ci.
J'ai généré ma clé, l'ai copiée sur les clés autorisées de l'un des utilisateurs et je me suis connecté au serveur via ssh sur le port 2222, j'ai reçu le numéro de port des données de Shodan.
Utilisateurs, paramètres réseau:

Hôtes sur le réseau:

Le fichier / etc / exports et les lecteurs:

Fichier / etc / fstab et OS:

Je crois qu'il s'agit d'un réseau d'un département pour les étudiants diplômés ou les étudiants, et ils effectuent une sorte de calculs sur les serveurs, car il existe de nombreuses sources Python différentes, quelque chose en rapport avec le GPU et la distribution Anaconda, etc. Je n'ai pas tout étudié et j'ai commencé à penser quoi faire avec tout cela, bien sûr, je pouvais "marcher" pour la plupart des nœuds (peut-être que je pourrais penser à quelque chose de plus exotique) , mais cela ne m'a pas beaucoup intéressé. Et j'ai pensé ce qui suit: puisque l'institut est scientifique et avancé, il devrait y avoir des domaines de la sécurité de l'information. En effet, même un laboratoire entier: Software Security Lab et son chef, Sang Kil Cha
J'ai décidé de lui écrire une lettre, et ils disent donc que permettre à tout le monde de connecter des ressources NFS avec des autorisations de lecture et d'écriture à Internet est très dangereux, apparemment, vous devez réparer quelque chose, joindre des captures d'écran et envoyer.
Lettre 1Cher Sang Kil Cha,
Je vous écris, car sur le site kaist.ac.kr, vous êtes considéré comme le principal laboratoire SoftSec de KAIST, et je crois que la question suivante vous préoccupe.
Lors de nos recherches dans le domaine de la sécurité informationnelle, involontairement et par hasard les serveurs suivants ont été détectés:
143.248.247.131 - psi.kaist.ac.kr
143.248.247.4 - jarvis3.kaist.ac.kr
143.248.247.169
143.248.247.223
143.248.247.235
143.248.247.251 - marvel.kaist.ac.kr
143.248.247.239 - jarvis.kaist.ac.kr
143.248.247.194 - hulk.kaist.ac.kr
143.248.2.23
Tous ces serveurs ont le service NFS (Network File System) opérationnel.
Le niveau de sécurité d'accès à ces serveurs est incroyablement bas.
Les répertoires personnels de ces serveurs avec tout leur contenu sont accessibles à toute personne utilisant Internet.
Par exemple, les paramètres nfs - / etc / exports 143.248.247.251 -> / home ou pour 143.248.247.239
showmount -e 143.248.247.239
Exporter la liste pour 143.248.247.239:
/ données
/ home / appl
Les répertoires utilisateur de la plupart des serveurs sont accessibles en lecture et en écriture, y compris leurs sous-répertoires, qui contiennent des clés d'accès ssh publiques et privées.
L'édition de fichiers permet d'ajouter de nouvelles clés d'accès et d'accéder à distance ssh aux serveurs, puis - à certains sous-réseaux KAIST internes.
Uniquement pour tester un tel accès peu profond a été obtenu, aucune modification n'a été apportée, aucune donnée n'a été éditée, copiée ou supprimée, aucun dommage n'a été causé à l'infrastructure.
Veuillez consulter les fichiers joints pour une sorte de reconnaissance et de preuve.
Je n'ai aucune exigence ni réclamation, mais je recommande d'améliorer considérablement le niveau de sécurité de votre réseau.
Bientôt, ils m'ont répondu, traduction gratuite: merci, nous transmettrons à tout le monde.
Réponse 1Merci de m'avoir prévenu! Je transmettrai cet e-mail à un responsable du réseau et de la sécurité. Meilleur, Sang Kil
Avant de publier cet article, j'ai décidé de vérifier, voir ce qui a changé:

En effet, l'accès aux ressources n'était autorisé qu'à partir des machines du réseau interne, mais qu'en est-il du serveur 143.248.247.251. Selon les entrées du tableau, les ressources hôte dans les paramètres NFS restent *. J'ai esquissé une autre version du «mappage» du tableau dans un graphique:

Quels sont les changements dans le «mappage»: les objets NFS «collent maintenant» avec 2 attributs identiques - IP et chemin NFS. L'objet Status est créé uniquement lorsque l'attribut value, qui contient le contenu de la colonne d'enregistrement brut, contient la valeur " * "
Et le graphique sur le tableau apparaît sous une nouvelle forme:

Maintenant, en passant, l'adressage du réseau interne est devenu clairement visible, et sur le serveur 143.248.247.251, il est également possible de modifier le contenu des répertoires utilisateur, des fichiers; en principe, les possibilités sont restées les mêmes qu'auparavant.
Et j'écris donc une deuxième lettre à M. Sang Kil Cha, avec un premier contenu similaire, notant que certains des événements seront présentés dans un article sur la populaire ressource habr.com:
Lettre 2Cher Sang Kil Cha, bonne journée à toi.
J'ai décidé de vérifier si quelque chose avait changé après mon e-mail et en effet, les paramètres d'accès ont été modifiés. Mais apparemment, les ingénieurs en sécurité ont omis l'adresse IP 143.248.247.251 et ses paramètres sont restés les mêmes. Veuillez également sécuriser cette adresse IP afin qu'aucun étranger ne puisse y accéder.
J'écris un article sur le sujet de la sécurité de l'information et je le publierai sur https://habr.com . Il s'agit d'un site Web très populaire en Russie. L'article comprendra quelques passages sur la question de la faible qualité des paramètres d'accès NFS avec quelques exemples de cas avec vos serveurs. Je vous enverrai le lien vers mon article lorsqu'il sera publié.
Comment utiliser l'API Lampyre et écrire votre module
Le module devra accepter une liste d'adresses IP ou une liste de sous-réseaux sous la forme 192.168.0 / 24 en entrée - à ce stade, il sera nécessaire de valider les données d'entrée sur l'implication des chaînes dans les adresses IP indépendamment dans le code, dans le cas d'un sous-réseau - convertir en liste IP.
L'étape suivante, via la bibliothèque Python paramiko , sera accessible au serveur ssh personnel et séquentielle (il y a une tentative d'asynchronie dans le code concept du module) la commande est appelée:
timeout {timeouts} showmount --no-headers -e {ip}
La sortie du résultat sera analysée via le code Python dans la structure de sortie, table: une liste de dictionnaires en Python.
Clés dans le dictionnaire:
- current_day - date de demande de l'utilisateur
- host_query - IP pour laquelle les informations sont reçues
- shared_path - ressource NFS
- status_ip - informations sur l'accès à la ressource, si les adresses IP sont répertoriées via ",", la chaîne du dictionnaire est dupliquée dans la liste.
En outre, selon le concept du concept, une tentative primitive est effectuée pour analyser la valeur de la clé status_ip dans le sujet: adresse IP, enregistrement d'hôte, les valeurs "*" ou "tout le monde"
Selon la documentation de l' API et les explications du support Lampyre.io - chaque module doit renvoyer des données à la table, une ou plusieurs, mais la table doit être décrite comme faisant partie de l'API (en-têtes de tâche, en-tête de table). En fait, c'est le résultat principal du module.
Ainsi, le résultat final, en tenant compte des clés du dictionnaire, sera un tableau:
class NFSHeader(metaclass=Header): display_name = 'Search data from NFS services' current_day = Field('Date', ValueType.Datetime) host_query = Field('Search ip', ValueType.String) shared_path = Field('NFS path', ValueType.String) ip = Field('ip address', ValueType.String) network = Field('network address', ValueType.String) host = Field('host', ValueType.String) status = Field('raw record', ValueType.String)
Les valeurs (légèrement modifiées) de l'analyse du résultat de la commande showmount sur le serveur seront écrites dans la table. Les noms des champs de la classe parlent d'eux-mêmes; dans la colonne d'enregistrement brut, les informations sur l'accès à la ressource seront stockées. Dans un sens, cette analyse des données sur les ressources NFS peut également être considérée comme un OSINT, les informations sur un accès possible à partir de diverses adresses IP donnent une idée des propriétaires de la ressource ou de l'adressage au sein du réseau de ressources. Par exemple, l'adresse IP du serveur avec NFS est située en Ukraine et l'adresse IP autorisée pour l'accès est en Allemagne:

Et si vous développez l'étude de cet exemple, il y a immédiatement confirmation de la connexion des serveurs non seulement via NFS, mais également via un certificat aux adresses: 77.120.103.9, 138.201.202.135 et le domaine * .aniart.com.ua:

Comment transférer des données vers un module et écrire dans une table:
Créez votre propre classe SearchDataNFS à partir de la classe Task:
class SearchDataNFS(Task)
Dans la méthode get_id
, get_id
retournons un UUID aléatoire unique:
def get_id(self): return 'bf51fd57-3fec-4416-9d07-905935a484b4'
Dans la méthode get_display_name
spécifiez comment la tâche sera appelée, et dans la méthode get_description
, selon le nom, la description de la tâche:
def get_display_name(self): return 'Explore: NFS(SSH)' def get_description(self): return 'Explore NFS resourses'
Dans la méthode get_headers
spécifiez les tables que nous utiliserons:
def get_headers(self): return NFSHeader
La méthode get_enter_params déterminera l'apparence de la fenêtre d'entrée. D'après le code, il est évident qu'une liste de chaînes est fournie à l'entrée, qui sera ensuite convertie en adresses IP indépendamment:
def get_enter_params(self): ep_coll = EnterParamCollection() ep_coll.add_enter_param('ips', 'IP', ValueType.String, is_array=True, value_sources=[Attributes.System.IPAddress], description='IPs, networks') return ep_coll
Dans la méthode d' exécution , l'exécution de la tâche principale a lieu:
ips = [] for input_ip in set(map(lambda z: z.strip(), enter_params.ips)): ips.extend(reparse_ip_hosts(input_ip))
Les paramètres d'entrée sont accessibles via enter_params.ips. Dans la méthode reparse_ip_hosts
, une validation auto-implémentée des chaînes en adresses IP se produit.
targets = ((ip, port) for ip in ips for port in ports) lines = thread_async_nfs_one_client(targets) info = reparse_result_rows(lines) fields_table = NFSHeader.get_fields() for data_id in info: tmp = NFSHeader.create_empty() for field in fields_table: if field in data_id: tmp[fields_table[field]] = data_id[field] result_writer.write_line(tmp, header_class=NFSHeader)
La fonction thread_async_nfs_one_client
connecte au serveur avec ssh (l'adresse IP, le nom d'utilisateur et le mot de passe sont définis par le code dur) et showmount est exécuté, comme indiqué précédemment, le résultat est analysé, puis il est à nouveau modifié dans la fonction reparse_result_rows
. Il est important de noter que info est une liste composée de dictionnaires, dans chaque dictionnaire les clés sont nommées en tant que champs de la classe NFSHeader. Autrement dit, le dictionnaire ressemble à ceci:
{ 'current_day': datetime.datetime(2019, 3, 6, 16, 48, 17), 'host_query': '192.168.1.1', 'shared_path': '/volume1/workspace', 'ip': '192.168.10.10', 'network': '', 'host': '', 'status': '192.168.10.10' }
Il est important d'observer les types de données dans le dictionnaire, ils doivent être les mêmes que dans la description du tableau.
Plus loin dans la boucle, l'itération à travers les éléments de la liste et leur écriture via la méthode API ( result_writer.write_line ) dans une table NFSHeader spécifique se produit.
Pour une description plus détaillée, vous devriez lire la documentation.
Fondamentalement, le module est prêt à être ajouté à Lampyre.
Utiliser votre module à Lampyre
Étant donné que ssh est utilisé et l'exécution de la commande showmount, vous devez bien sûr avoir accès à votre serveur via ssh. Pour mes tests, ce rôle a été joué par la machine virtuelle dans Virtualbox avec Ubuntu et le client NFS installé dessus.
Pour travailler avec des modules natifs sur la machine d'un utilisateur, Python 3.6 est requis, le chemin d'accès à l'interpréteur doit être dans les variables système ou le chemin d'accès doit être spécifié dans le Lampyre\config\appSettings.config
. Par défaut, la clé pythonPath est mise en commentaire dans les paramètres.
Le chargement d'un module dans Lampyre s'effectue selon les étapes suivantes:
- Dans la fenêtre Scripts, chargez le fichier Lampyre \ user_tasks \ ontology.py (fourni avec l'application)
- Dans la même fenêtre, chargez votre module, dans ce cas nfs_via_ssh.py. En cas de problème, le bouton Détails devrait vous aider
- Après le chargement, dans la fenêtre Liste des demandes de l'onglet Tâches , la section Tâches locales apparaîtra (dans le code du module vous pouvez l'appeler différemment), elle a le nom Explorer: NFS (SSH) :

Fenêtre Liste des demandes mise à jour:

- Les adresses IP des serveurs avec NFS, comme je l'ai dit plus tôt, sont mieux obtenues en exécutant d'abord une requête de recherche Shodan avec les paramètres Query: tcp 2049 (vous pouvez simplement spécifier nfs ). Le paramètre Page ou plage , défini par défaut sur 1, signifie que 1 page de réponses du service Shodan sera retournée, sur une page il y a généralement 100 résultats (lignes).
Le résultat de l'exécution de Shodan:

- Copiez les adresses IP du tableau ou du diagramme dans le presse-papiers et collez-les dans la fenêtre du module IP Explore: NFS (SSH). Exécutez et attendez le résultat:

Bien sûr, vous devez prendre en compte la bande passante de vos propres serveurs et des serveurs étrangers, ainsi que le délai d'expiration, qui sont définis de manière rigide dans le code du module.
Le résultat est obtenu sous la forme d'un tableau, mais vous pouvez continuer et combiner le résultat du tableau avec le graphique des résultats de l'exécution de la recherche Shodan. Ce sera quelque peu difficile à percevoir au début.
Visualisation du tableau avec le résultat
Commençons. Il y a une table avec un ensemble de colonnes avec des valeurs de l'exécution du module utilisateur. Mais si vous faites attention au bouton Schéma de la fenêtre Demandes - il est inactif. Parce que le mappage de la table sur le graphique n'est pas défini et doit être défini.
Schéma 1 (pas le meilleur)
Avec le tableau ouvert, à partir du résultat du module, dans le coin inférieur droit se trouve un élément d'interface «Ajouter un modèle de création», en cliquant sur lequel la fenêtre «Modèle de création» apparaît. En cela, vous pouvez spécifier le mappage des lignes de tableau aux objets graphiques, je ne décrirai pas le processus en détail dans l'article, le lien sur le canal de la plate-forme sur Youtube montre comment le faire, dans l'article je me limiterai aux images de ce qui devrait arriver:

Modèle de graphique:

Il est important de noter que les objets IP, Domain sont en Lampyre, et j'ai créé des objets NFS et Network. , «» . , , — «» — , — - , . , NFS – 2 , NFS path Status, — NFS path. — . «» — Schema .
:

:

«» — i2 (IBM i2 Analyst's Notebook) :

«» , : IP- IP- , , NFS , IP. ( ).
2

. — , IP- :

, , (csv) . , «» . «» , .
Shodan NFS Shodan search, add to active tab — :

:

Lampyre , ssh.
— , NFS .