Je me demandais simplement comment je pouvais construire un réseau privé où il est physiquement impossible d'accéder de l'extérieur, mais j'ai toujours la possibilité de publier des données sur un serveur distant. À titre d'exemple: disons que j'ai un réseau d'appareils qui contrôle une sorte d'infrastructure critique et je ne veux pas que quiconque puisse y accéder, sauf pour les personnes sur place. Cependant, je continuerais à lier pour envoyer des informations de diagnostic sans délai notable à un serveur distant accessible depuis Internet.
Hypothèses concernant l'attaquant:
Nous ne pouvons donc pas simplement mettre un serveur qui agit comme un pare-feu entre le réseau public et le réseau privé, car chaque logiciel a des failles et l'attaquant aurait accès au réseau privé dès que le pare-feu a été cassé (sauf si nous avions un pare-feu où les règles sont intégrées dans le matériel ou pour toute autre raison impossible à modifier sans accès physique. Existe-t-il de tels périphériques?)
Ce qui pourrait résoudre le problème, c'est un appareil qui ne permet physiquement qu'une communication unidirectionnelle (dans notre cas, du réseau privé au réseau public). Je ne sais pas s'il existe de tels appareils, mais j'ai eu quelques idées:
Avant de continuer à me ridiculiser parce que j'ai raté la solution évidente, j'aimerais entendre vos commentaires à ce sujet :)
Vous pouvez utiliser un port série. Par défaut, il y a deux lignes de données, une pour chaque direction, plus un fil de terre (ce qui n'est pas pertinent ici). En déconnectant la ligne appropriée, vous pouvez empêcher la communication dans une certaine direction.
C'est vraiment facile à utiliser, au niveau très basique, je pense que vous pouvez exécuter quelque chose comme echo hello >> /dev/ttyS0
et recevez-le avec cat /dev/ttyS0
de l'autre côté. Il n'y a pas de pile réseau compliquée à contourner (ce qui empêcherait les communications unidirectionnelles car cela traiterait le manque de réponse comme une perte de paquets) et la plupart des langues ont des bibliothèques faciles à utiliser pour parler sur les ports série.
Voici un exemple dans Python sur la façon d'envoyer du JSON en série:
import serial, json
s = serial.Serial('/dev/ttyUSB0')
data = json.dumps({"status": "OK", "uptime": 60}).encode("utf-8") # make UTF-8 encoded JSON
s.write(data + "\n") # send the JSON over serial with a newline at the end
J'aime combien mes performances de recherche augmentent dès que j'ai fini de poster ma question; D
Wikipédia à la rescousse:
Et il y a en fait des entreprises qui vendent des liaisons réseau fibre optique piratées . Ils ont dû développer leurs propres protocoles réseau, même si je n'ai pas pu trouver de spécifications sur ceux-ci jusqu'à présent ...
Ethernet 100 Mbits commun peut être facilement rendu physiquement unidirectionnel en coupant quelques fils. Les protocoles réseau standard nécessitent des communications bidirectionnelles, et assurer la livraison est impossible dans un réseau unidirectionnel (puisque l'expéditeur ne peut obtenir aucune confirmation si un message a été reçu ou perdu), mais vous pouvez certainement écrire vous-même une petite pile réseau personnalisée - une application d'un côté, envoyer les données (en dupliquant éventuellement chaque message et en incluant des sommes de contrôle qui permettent la récupération des erreurs) sous forme de trames Ethernet brutes; et une application de l'autre côté qui assemble un flux de données à partir d'eux. Il existe des bibliothèques de niveau relativement élevé pour travailler avec de telles données, par ex. http://www.secdev.org/projects/scapy/ .
Ce n'est pas quelque chose qui fonctionnera hors de la boîte, mais pas aussi dur, qui pourrait être dans les limites d'un projet de devoirs d'université.
Quelques idées:
https://electricimp.com/aboutus/faq/
Il semble utiliser une petite diode opto pour communiquer.
https://github.com/borismus/sonicnet.js
Apparemment, le chromecast Google utilise une partie de cela. Cela pourrait donc être une pile de codes fructueuse à parcourir. Bien que ce ne soit pas pour les applications de sécurité, mais peut être pertinent.
https://play.google.com/store/apps/details?id=com.yamaha.Android.infosoundbrowser&hl=en
Bien sûr, finalement, tout dépendra de la bande passante dont vous avez besoin?
Tout protocole nécessitant une livraison garantie nécessite une communication bidirectionnelle .
Un canal de communication unidirectionnel doit:
Une mise en œuvre simple de la livraison unidirectionnelle peut être effectuée avec la prise audio 3,5 mm. À l'aide d'un modulateur logiciel, vous convertissez les données d'octets en un fichier son et jouez le son sur un port de sortie audio. Vous connecteriez ce port de sortie audio à l'aide d'une prise audio TRS mâle à mâle à l'entrée audio d'un autre ordinateur. Sur l'autre machine, vous utilisez un démodulateur logiciel pour interpréter le son en données d'octets. À ce stade, vous disposez d'un modem logiciel de base .
Si vous n'avez pas besoin d'une livraison fiable, cela suffit.
Si vous souhaitez une livraison fiable, vous devrez ajouter un chemin de retour pour transmettre les accusés de réception (ACK) dans une simple pile de type TCP. L'expéditeur doit envoyer le paquet de données, puis attendre un ACK avant d'envoyer le prochain paquet de données.Si aucun ACK de ce type n'est reçu après une durée prédéterminée, l'expéditeur doit renvoyer les données. Le chemin de retour peut être un simple bip sur une autre ligne audio.
Si vous n'avez pas besoin d'un débit élevé, cela suffit.
Si vous souhaitez un débit élevé, vous devrez ajouter une fenêtre de transmission. À ce stade, vous voudrez probablement envisager de modifier une implémentation logicielle d'une pile TCP.
Si votre réseau de développement (ou de production) est vraiment limité, alors une option est d'avoir un PC sacrificiel sur Internet qui peut être utilisé pour communiquer avec votre service d'hébergement.
Vous pouvez utiliser sneakernet pour déplacer des fichiers qui doivent être téléchargés, puis SSH dans votre hôte à l'aide de FileZilla ou équivalent.
Le PC sacrificiel doit être imagé avant la connexion à Internet (en utilisant Macrium ou Acronis ou équivalent) afin que vous puissiez toujours le restaurer dans un état connu et bon.
Il y a des histoires d'ordinateurs qui sont sondés et/ou piratés quelques minutes après avoir été connectés à Internet, donc un bon routeur NAT pour cela vous donnera au moins une étape de protection. Assurez-vous de désactiver uPnP, bien sûr.
Si vous êtes vraiment paranoïaque, vous pouvez restaurer la bonne image connue de ce PC à chaque fois que vous y déplacez des fichiers. Certains logiciels malveillants peuvent revenir à l'intérieur via une mémoire USB, et si ce PC est compromis, vous pouvez infecter le réseau déconnecté.
Une maxime est que les arbres les plus hauts sont coupés en premier pour leur bois. Donc, si vous êtes une cible de grande valeur avec un attaquant sophistiqué, vous pouvez être pwned.
Tout cela étant dit, le courrier électronique à l'extérieur est probablement votre plus grande exposition, car vos PC invitent littéralement ce contenu à l'intérieur. Il est toujours unidirectionnel dans le sens où vos ordinateurs établissent le contact avec le serveur de messagerie. Il peut donc empêcher les vers de pénétrer mais pas lancer des attaques de phishing.
- EDIT: @Gilsham suggère d'utiliser un LiveCD pour effectuer les transferts. C'est une bonne idée.
Lorsque j'utilisais Kali Sana (basé sur Debian), il permettait un LiveCD en mode "persistant", vous pouvez donc l'utiliser pour stocker le fichier sur le CD puis le démarrer sur le PC sacrificiel, faire le téléchargement, puis détruire le CD.
Si vous n'utilisez pas le mode persistant, utilisez n'importe quel LiveCD (lecture seule), puis montez le ou les fichiers sur un autre CD-ROM.
Ce serait vraiment unidirectionnel.
Voici quelques implémentations logicielles spécifiques de diodes de données/réseaux unidirectionnels, via l'affichage/la réception de flux de code QR: