Question:
Pourquoi la défense d'obscurcissement du système d'exploitation contre "C'est un système Unix!" pas largement mis en œuvre?
Indigenuity
2019-12-17 05:42:46 UTC
view on stackexchange narkive permalink

La scène Jurassic Park mentionnée dans le titre est tristement célèbre pour son ridicule pour ceux qui maîtrisent la technologie. Mais cela illustre également ce qui me semble être une faille flagrante dans la sécurité Web, en particulier les appareils IoT - dès que les attaquants découvrent qu'un serveur, une caméra ou un moniteur pour bébé exécute Linux, ils en savent instantanément sur son fonctionnement. Ils savent que les commandes comme sudo sont de grandes cibles juteuses et ils savent que l'accès au shell apportera avec lui des tas d'outils utiles comme ls et cat .

Alors pourquoi l'obfuscation du système d'exploitation n'est-elle pas plus une chose? Je ne parle pas simplement de cacher la version dans les en-têtes Web. Semblable à la minification ou à l'obfuscation JavaScript, je parle de changer les noms des binaires et des chemins de fichiers dans le système d'exploitation lui-même. Des classes entières d'attaques ne seraient-elles pas pratiquement inutiles si le système d'exploitation avait des commandes ha7TrUO et RRI6e29 au lieu de sudo et ls ? Imaginez un pirate informatique qui obtient en quelque sorte un accès root à distance - que vont-ils même faire s'ils ne connaissent aucune commande?

La mise en œuvre serait assez facile pour les compilateurs. Prenons le cas le plus simple de «renommer cette fonction et tous les appels à celle-ci». Vous pourriez donner à un compilateur de système d'exploitation et à un compilateur d'application les mêmes noms aléatoires et ils pourraient se parler. Mais même si l'application a une sécurité médiocre et est vulnérable à l'injection de bash, de telles attaques seraient infructueuses.

De toute évidence, cette technique ne peut pas être utilisée dans tous les scénarios. En mettant de côté des scénarios tels que des serveurs gérés par des administrateurs système humains, il me semble que tout appareil ou serveur géré par l'automatisation est un candidat de choix pour cette défense.

Je suppose que la ou les questions doivent être un peu plus concret:

  1. L'obscurcissement du système d'exploitation tel que décrit est-il largement utilisé et je ne l'ai tout simplement pas rencontré?
  2. S'il n'est pas largement utilisé, quels sont les obstacles pratiques ou techniques à l'utilisation?
Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (https://chat.stackexchange.com/rooms/102384/discussion-on-question-by-indigenuity-why-is-this-defense-against-its-a-unix-s).
On pourrait concevoir un environnement de construction qui renomme tout ce symbole automatiquement et aléatoirement chaque construction.Tant que vous avez la source pour tout, ce serait nouveau, mais pas de niveau de recherche difficile.Et si vous le faisiez une fois, vous l'auriez pour toujours.Le débogage serait difficile.Mais d'une certaine manière, j'aime l'idée.Ce serait une pensée similaire à https://en.wikipedia.org/wiki/Address_space_layout_randomization mais au moment de la compilation au lieu de l'exécution et beaucoup plus ambitieux.Plus j'y pense, plus je respecte l'idée.Cela augmenterait la sécurité des périphériques embarqués.(Pas de solution miracle.)
Quatorze réponses:
Mike Ounsworth
2019-12-17 09:50:05 UTC
view on stackexchange narkive permalink

Avant de déchirer votre idée, laissez-moi vous dire que c'est une idée vraiment intéressante et que c'était super amusant d'y réfléchir.

Merci de continuer à penser à l'extérieur la boîte et posez des questions intéressantes!

D'accord, allons-y!


Prenons du recul et demandons pourquoi babyphone fonctionne sous Linux en premier lieu? Et s'il n'y avait pas de système d'exploitation et que l'application était écrite en code de microcontrôleur nu (pensez au code Arduino)? Alors il n'y aurait pas de sudo ou ls ou même de shell pour l'attaquant à utiliser, non?

Je ne suis pas un expert ici, mais Je pense que nous, en tant qu'industrie, avons tourné vers l'installation de Linux sur quelque chose d'assez grand pour l'exécuter en grande partie pour la commodité des développeurs:

  1. Réduction du temps de développement: lors de la construction de votre WiFi et Bluetooth-capable Whizpopper auto-patching de synchronisation cloud administré par le Web avec les applications Android et iOS associées, Linux est livré avec toutes les bibliothèques, utilitaires et pilotes dont vous avez besoin pour le faire.
  2. Augmentation de la testabilité: si l'appareil exécute bash ou busybox avec un port SSH, il est alors très facile de se connecter et de déterminer ce qui n'a pas fonctionné pendant la phase de test de votre produit.

Pour que votre idée d'obscurcissement fonctionne, vous doivent masquer non seulement les noms des utilitaires de ligne de commande tels que sudo et ls , mais aussi chaque API du noyau Linux pour empêcher l'attaquant de tomber dans leur propre binaire compilé qui ca lls le noyau directement. Jetons donc un autre regard sur votre idée:

La mise en œuvre serait assez facile pour les compilateurs. Prenons le cas le plus simple de «renommer cette fonction et tous les appels à celle-ci». Vous pourriez donner à un compilateur OS et à un compilateur d'application les mêmes noms aléatoires et ils pourraient se parler.

Vous devrez faire cette compilation aléatoire vous-même; sinon quelqu'un pourrait rechercher les mappages sur google.

Donc, vous devrez construire le noyau à partir des sources avec votre "compilateur obscurcissant" afin que vous seul connaissiez les mappages des API du noyau obscurcies. (vous avez déjà construit le noyau Linux à partir des sources? C'est certainement plus une corvée que docker pull alpine , qui est la direction dans laquelle la culture de développement semble aller) .

Mais un système d'exploitation est bien plus que le noyau. Vous voulez des pilotes pour la puce wifi Broadcom BCM2837 fournie sur ce mini-pc? Vous devrez construire ce pilote sur votre noyau ofbuscated avec votre compilateur, si Broadcom vous donnera même le code source. Ensuite, vous devrez créer l'ensemble des piles de logiciels GNU wifi et réseau. De combien d'autres choses aurez-vous besoin pour trouver la source et ajouter votre pipeline de construction avant d'avoir un système d'exploitation fonctionnel?

Oh, et si les dépôts en amont de l'une de ces choses émettent un correctif, vous êtes maintenant responsable de le reconstruire (en supposant que vous ayez enregistré les fichiers de mappage d'obscurcissement du compilateur qui correspondent à votre binaire du noyau ) et le pousser sur vos appareils parce que - de par leur conception - vos appareils ne peuvent pas utiliser les fichiers binaires de correctifs produits par le fournisseur.

Oh, et pour déjouer les pirates, il n'y en aura pas de ce "Voici les fichiers binaires pour Whizpopper 1.4.7" , oh non, vous aurez besoin de construire une version obscurcie de tout ce qui est du noyau jusqu'à par appareil vous expédiez.


Donc à vos questions:

  1. L'obscurcissement du système d'exploitation tel que décrit est-il largement utilisé et je ne l'ai tout simplement pas rencontré?
  2. Si ce n'est pas largement utilisé, quels sont les obstacles pratiques ou techniques à l'utilisation?

Je pense que la réponse est que ce que vous décrivez va à peu près complètement but d'utiliser des composants logiciels préexistants si vous avez besoin de trouver et de construire littéralement tout de la source. Il pourrait en fait être moins difficile d'abandonner complètement le système d'exploitation, de faire comme si c'était 1960 et d'écrire votre application directement dans le microcode du processeur.

J'aime la sécurité plus que la plupart des développeurs, mais j'aime f * that .

Vous auriez également besoin de reconstruire chaque outil, package et script qui utilise ces commandes et outils afin qu'il fasse l'appel «obscurci».C'est * beaucoup * de travail.
Jours de compilation sur Core i7?CLFS compile beaucoup plus rapidement que cela: plusieurs heures au maximum.Encore plus rapide si vous n'avez besoin que du noyau + busybox + plusieurs_small_utilities.Ce qui prendra vraiment du temps, c'est de faire cette fastidieuse fonction de renommage et de remappage des numéros d'appel système, en essayant de ne rien casser.Et pourquoi est-ce une corvée de construire Linux le noyau à partir des sources?Essayez-vous d'éviter ses `Makefile`s?
@Ruslan lol, j'aurais dû savoir que j'entrerais dans ce débat.Je dirai simplement qu'étant donné le rythme et le style de la culture de développement d'aujourd'hui, l'effort de mettre en place un pipeline de build Linux personnalisé >> saisir COTS CentOS et `yum install nodejs`.
Excellente réponse, merci pour votre temps à répondre!Je ne suis pas entièrement convaincu que le temps de développement devrait être sacrifié pour permettre une étape de compilation spéciale pendant une «version».Cela mis à part, votre point sur les pilotes de périphériques, je pense, est un obstacle assez important.Je doute que cela puisse être surmonté sans des modifications importantes du système d'exploitation.Bien que maintenant je me demande de laisser l'espace du noyau seul et de faire un obscurcissement de l'espace utilisateur ...
@Indigenuity, concernant le simple fait de masquer l'espace utilisateur: il existe des moyens beaucoup plus efficaces de sécuriser l'électronique grand public, comme la définition d'un mot de passe administrateur aléatoire par appareil et le respect des meilleures pratiques bien établies.De plus, si un fabricant ne prend pas la peine d'utiliser autre chose que "admin123", il n'est pas non plus intéressé à masquer les commandes.
Il fut un temps où les babyphones étaient des appareils purement analogiques, sans code ni ordinateur du tout ...
@MikeOunsworth,, la plupart des personnes développant l'IoT construisent tout ce qui se passe sur l'appareil, y compris le noyau et le chargeur de démarrage et souvent aussi la chaîne d'outils de compilation croisée.C'est ce que font les outils de développement embarqués.Yocto commence avec juste le compilateur hôte C et Python, Ptxdist obtient généralement le compilateur croisé pré-construit.Les cartes ARM nécessitent une configuration spécifique à la carte car elles n'ont pas de BIOS standard, donc certaines étapes spécifiques sont nécessaires, et pour la plupart des cartes, vous n'obtenez tout simplement pas de binaires pré-construits.Il y a donc une chaîne d'outils à modifier si quelqu'un le souhaite.Le vrai problème serait de le déboguer.
Même si les appels système / IOCTL du système d'exploitation étaient masqués, des binaires connus pourraient être utilisés pour deviner le modèle d'obfuscation.Si je voyais un binaire qui invoquait syscall 7551 et qui était ensuite imprimé en utilisant une chaîne de format qui ressemblait à la sortie de `stat`, je pourrais raisonnablement deviner que c'était le binaire` stat` et le numéro d'appel système de `fstat` ou d'amis était7551.
D'après mon expérience avec Gentoo, vous pourriez probablement compiler une pile Whizpopper complète en quatre heures environ, moins si vous utilisez des packages légers tels que uclibc, busybox et lighttpd plutôt que glibc, la pile GNU et apache.
«Il serait peut-être moins difficile de se débarrasser complètement du système d'exploitation, de faire comme si c'était 1960 et d'écrire votre application directement dans le microcode du processeur.»- Eh bien, les gens ont réfléchi à cela et ont publié des frameworks comme [includeos] (https://www.includeos.org/) (aucune affiliation) qui vous permettent essentiellement de le faire (la cible prévue semble être des VM ou des conteneurs similairessur les serveurs, dépouillés de tout sauf des nécessités pour faire le travail).Je ne suis pas sûr cependant de la faisabilité de distribuer ces systèmes minimaux à l'utilisateur final ...
@hoffmale Le terme de recherche pour de tels systèmes que je connais est "unikernel";essentiellement un (ensemble de) bibliothèques statiques à compiler qui fournit toutes les fonctionnalités du système d'exploitation souhaitées par la ou les applications utilisées.
Pardonnez-moi, mais cela fonctionnera-t-il même si nous supposons "l'obfuscation idéale" (c'est-à-dire que tout a été recompilé)?Les hackers sont des personnes et ils pourront faire correspondre les appels et éventuellement reconstruire le mappage, au moins partiellement.Vous voyez que cette chose appelle cette chose?Connectons ces points.Et encore et encore.J'ai moi-même un graphique!À quoi cela ressemble-t-il?Comparons avec un graphique d'appels lisibles au système d'exploitation / scripts. Oh, maintenant je comprends, `RRI6e29` est en fait` ls`!(enfin, peut-être pas aussi brutal mais vous voyez l'idée)
Je ne suis pas d'accord avec votre déclaration selon laquelle Linux est principalement utilisé pour la commodité des développeurs.L'écriture d'un système d'exploitation à partir de zéro pour votre caméra connectée à Internet nécessiterait la mise en œuvre de nombreux outils et bibliothèques de support.N'importe quelle couche est difficile à implémenter et il est probable que votre système développé à domicile présente des tonnes de vulnérabilités, car vous n'êtes pas un expert de toutes ces couches.Prendre un Linux léger et ajouter la prise en charge de votre pilote d'appareil photo personnalisé ainsi qu'une couche pour une configuration Web pratique est plus sûr.(et encore beaucoup d'entreprises ne parviennent pas à faire la configuration de manière sûre!)
"vous regardez des heures et des heures (éventuellement des jours?) de temps de compilation ici même sur un i7" Je pense que threadripper est maintenant la référence pour la compilation de projets (en particulier ceux qui peuvent être fortement parallélisés).cc @Ruslan
+1 pour encourager à continuer à penser différemment
En particulier si vous utilisiez Linux, vous devrez publier tout votre code source ou le rendre disponible sur demande: `La« Source correspondante »pour un travail sous forme de code objet signifie tout le code source nécessaire pour générer, installerun travail exécutable) exécutez le code objet et modifiez le travail, y compris des scripts pour contrôler ces activités. `Ce qui, je pense, inclurait vos mappages ...
@MikeOunsworth J'ai une question, pourquoi ne pas avoir un mot de passe avant tous les appels `(comme sudo)`.La configuration du système vous demande si vous voulez que les appels soient protégés par mot de passe et quel serait ce mot de passe.Cela évite de changer le temps de développement et la testabilité.Naturellement, je ne dis pas que nous le développons, je vous demande simplement si vous pensez que cela pourrait être faisable.
@Nightwolf C'est en fait un pas en arrière par rapport à `sudo`.Avant `sudo`, si vous vouliez exécuter des commandes root, vous deviez connaître le mot de passe root de la machine et les exécuter en utilisant` su`.`sudo` permet aux utilisateurs d'exécuter des commandes root (ou, en théorie, d'exécuter des commandes comme n'importe quel autre utilisateur, sa configuration est extrêmement puissante et flexible) en tapant _leur propre_ mot de passe, car il s'avère avoir un seul mot de passe central qui donne accès à rootpouvoirs et est connu de tous ceux qui ont besoin d'exécuter des commandes privilégiées est terrible pour la sécurité.
@FeRD `C'est en fait un pas en arrière par rapport à sudo`.Vous supposez que le mot de passe supprime toute autre sécurité.Non, ce que je veux dire, c'est toute la sécurité existante en plus avec l'obfuscation sous la forme d'un mot de passe.Sinon, vous pouvez appeler cela un sel au lieu d'un mot de passe.
On pourrait concevoir un environnement de construction qui renomme tout ce symbole automatiquement et aléatoirement chaque construction.Tant que vous avez la source pour tout, ce serait nouveau, mais pas de niveau de recherche difficile.Et si vous le faisiez une fois, vous l'auriez pour toujours.Le débogage serait difficile.Mais d'une certaine manière, j'aime l'idée.Ce serait une pensée similaire à https://en.wikipedia.org/wiki/Address_space_layout_randomization mais au moment de la compilation au lieu de l'exécution et beaucoup plus ambitieux.Plus j'y pense, plus je respecte l'idée.Cela augmenterait la sécurité des périphériques embarqués.(Pas de solution miracle.)
CBHacking
2019-12-17 17:18:28 UTC
view on stackexchange narkive permalink

La réponse de Mike dit essentiellement tout ce que j'ai à offrir sur les raisons pour lesquelles c'est une mauvaise idée du point de vue du développement (et, comme le dit le commentaire de Ghedipunk, une fonction de sécurité inutilisable n'offre aucune sécurité). Au lieu de cela, je vais expliquer pourquoi du point de vue de la sécurité , vous ne feriez jamais cela.

La réponse est en fait étonnamment simple: c'est une perte de temps, et il existe des options strictement meilleures. Chaque stupide doodad IoT (rappelez-vous, le "s" dans "IoT" signifie Secure) qui ne prend pas la peine de mettre en œuvre de telles fonctionnalités ne serait certainement pas adapté à une approche comme vous le suggérez.

  1. Toute l'idée ne fonctionnera pas pour restreindre les appels système. Un attaquant peut simplement définir quelques registres et invoquer un opcode et un boom, ils sont dans le noyau exécutant l'appel système de leur choix; qui se soucie de son nom symbolique? Bien sûr, vous pouvez falsifier la table syscall pour compliquer cela (si cela ne vous dérange pas de devoir tout recompiler et de faire du débogage de votre noyau personnalisé une forme d'enfer absolu) mais c'est comme obscurcir le système d'exploitation utilisé; pourquoi s'embêter quand il y a si peu de candidats, de toute façon? Même si l'attaquant ne souhaite pas procéder à l'ingénierie inverse du code existant sur le système, le forçage brutal devrait être possible à moins que l'espace de recherche des index d'appels utilisables ne soit plus large que ce que j'ai jamais vu sur un système embarqué.
  2. Pourquoi masquer les noms de commandes alors que vous pouvez simplement les rendre totalement inaccessibles? Un chroot ne fonctionnera pas pour les interfaces intégrées du shell si vous exécutez un shell , mais cela fonctionne bien pour tout le reste et vraiment, pourquoi votre single personnalisé -pour l'application-dans-une-boîte exécuter un shell? Je veux dire, les unités de développement en auraient un installé, à des fins de test, et peut-être que cela ne sera pas supprimé dans votre image de vente au détail parce que vous êtes paresseux ou pensez que vous en aurez à nouveau besoin. Mais un attaquant ne pourrait pas l'exécuter à partir du contexte dans lequel son application s'exécute. Un simple chroot (ou un bac à sable / une prison / un conteneur plus compliqué) peut rendre le programme incapable d'exécuter - ou même d'accéder - à des fichiers autres que ceux requis pour son travail.
  3. Pourquoi obscurcir les API du noyau lorsque vous pouvez simplement en supprimer l'accès? Il existe un certain nombre de systèmes de sandboxing qui peuvent restreindre ce que peut faire un processus (ou ses descendants ... s'il est même autorisé à en créer). Voir https://stackoverflow.com/questions/2146059/limiting-syscall-access-for-a-linux-application
De plus, une approche de sécurité largement testée, comme le chroot sur une distribution Linux ou OpenBSD populaire, est susceptible d'être plus robuste dans la nature qu'une approche entièrement nouvelle, intentionnellement difficile à tester.Fermeture des ports inutiles:; également bien.
+1 pour "rappelez-vous, le" s "dans" IoT "signifie Secure" X ^ D
Si vous contrôlez la distribution, vous pouvez brouiller l'ordre des appels système du noyau.Vous venez de reconstruire la glibc en conséquence et ainsi de suite.
En ce qui concerne le problème 1, le système d'exploitation PlayStation 4 l'a fait.Il est basé sur FreeBSD et les numéros syscall eux-mêmes sont randomisés.Bien sûr, il n'était pas difficile pour un hacker de découvrir quels numéros d'appels système faisaient référence à quels appels système, car chaque appel système a un comportement plus ou moins unique lorsqu'il est donné divers arguments: https://cturt.github.io/ps4.html
Phil Frost
2019-12-18 00:43:31 UTC
view on stackexchange narkive permalink

Si votre objectif est de priver un attaquant de ls et cat , il existe une alternative encore meilleure à l'obfuscation: n'installez simplement pas ces utilitaires.

Bien que je ne dise pas qu'il s'agit d'une approche largement implémentée, c'est au moins une implémentation. Par exemple, considérez distroless, une collection d'images de docker ne contenant pratiquement rien. Certains d'entre eux (comme celui pour go) n'ont littéralement rien en eux. Une attaque sur un système fonctionnant dans un tel conteneur ne peut pas obtenir l'accès au shell car il n'y a pas de shell à exécuter.

Le seul moyen alors d'obtenir un accès au shell en attaquant une application dans un tel conteneur est puis pour contourner le runtime du conteneur, qui est conçu pour empêcher précisément cela.

Alors que j'ai donné un exemple d'image docker, le même concept peut être appliqué aux systèmes d'exploitation en général. Par exemple, ls et cat font partie du paquet coreutils dans Debian. Vous pouvez exécuter apt-get remove coreutils et être sûr qu'un attaquant ne pourra pas utiliser ls ou cat dans le cadre d'une attaque. Bien sûr, cela signifie que vous ne pouvez pas les utiliser non plus, et il y a probablement beaucoup d'autres choses qui dépendent de coreutils qui devront également être supprimées, mais pour un périphérique intégré ou un serveur qui ne fait que une chose qui peut être OK.

Le principe général est de réduire la "surface d'attaque": plus une cible a de "trucs", plus il est facile de faire des compromis. Il peut s'agir de ports réseau ouverts, de lignes de code ou de binaires installés. Si l’objectif est d’améliorer la sécurité, supprimer toutes les "choses" inutiles est un bon début.

On peut dire que si j'avais une installation avec ls, cat, docker et pas grand chose d'autre, la première chose que je voudrais supprimer pour améliorer la sécurité serait docker.La plupart des choses saines de l'IoT utilisent les ls busybox, s'ils l'ont installé, ce qui est * le même binaire * pour chaque outil.
Merci de m'avoir présenté _distroless_, concept intéressant!
Bonne chance pour diagnostiquer les problèmes lorsque des scripts aléatoires se cassent parce qu'ils ne trouvent pas `cat` ...
@FedericoPoloni: `set -euxo pipefail` et` shellcheck` sont un bon début ... et tbh, la plupart des félins de script Unix sont candidats pour ce prix notoire.
Il y a des années, Bruce Schneier a donné une conférence lors d'une conférence technique dans laquelle il expliquait que les systèmes que son entreprise installait sur les réseaux de leurs clients exécutaient un noyau Linux dépouillé sans `bash` ou de nombreux autres outils qui pourraient être utilisés par un attaquant.Il a donné l'analogie de quelqu'un laissant une boîte à outils sous l'extérieur de la fenêtre de sa chambre, ce qui serait pratique pour un cambrioleur.La règle de base est que si vous n'en avez pas besoin, vous ne l'installez pas, réduisant ainsi le contenu de cette boîte à outils.
Il y a environ 15 ans, j'ai travaillé sur l'interface avec des équipements tiers.Une partie de leur système était un «vrai» système embarqué, une partie était une boîte Windows qui parlait à l'autre système d'un côté et (essentiellement) des appels API distants pour mon système de l'autre côté.Une fois, ils ont eu besoin d'aide pour déboguer en fonction du système de test qu'ils ont envoyé à mon bureau.M'avait branché le système Windows et vérifié des choses pour eux - ** et il y avait tout, des jeux et tout **.Il y avait une protection physique (boîte verrouillée) mais si elle n'était pas vraiment verrouillée, cela aurait été une faille de sécurité majeure.
Tom
2019-12-18 13:06:37 UTC
view on stackexchange narkive permalink

Parce que l'obscurcissement n'est pas une sécurité et parce que l'obscurcissement du système d'exploitation est fondamentalement absurde.

Il n'y a que tellement de systèmes d'exploitation courants et tant de façons de faire des suppositions éclairées. Si vous détectez que j'exécute IIS ou MSSQL Server, vous avez une idée du système d'exploitation qui s'exécute en dessous.

Même si j'arrive d'une manière ou d'une autre à exécuter une pile qui ne vous dit rien sur mon système d'exploitation sous-jacent, et masquer également tous les autres indices (la prise d'empreintes digitales est une chose), je n'ai toujours pas gagné grand-chose.

Sur le plan de la sécurité, vous savez que je suis sous Linux, ou même que j'utilise Debian 8, ne vous donne pas beaucoup de travail ni de quoi m'inquiéter. Si je suis correctement endurci et patché, vous pouvez savoir ce que vous voulez. Si je suis à un niveau de correctif qui s'est appliqué au musée du logiciel hier, votre suite d'attaques me brisera tout simplement en les essayant toutes, et obscurcir mon système d'exploitation ne vous obligera qu'à essayer encore quelques exploits inutiles. Lors d'une attaque automatisée, cela vous ralentira pendant quelques secondes.

L'obscurcissement ne fonctionne pas. Les gens peuvent vous scanner, vous empreintes digitales ou simplement lancer toute leur bibliothèque d'exploits pour voir ce qui fonctionne.

Si vous perdez du temps sur ce que vous auriez pu consacrer à un durcissement réel, vous nuisez en fait votre sécurité .

Travaux de durcissement corrects. J'ai dit plus haut que "vous pourriez savoir ce que vous voulez" . J'ai publié mon adresse IP et mon mot de passe root lors de conférences sur la sécurité où j'ai prononcé un discours. SSH avec connexion root à distance et un tas de services activés. Machine SELinux sérieusement durcie. Personne n'a jamais réussi à interrompre mon discours, bien qu'une personne ait réussi à déposer un fichier texte dans le répertoire racine alors que ma politique n'était pas encore parfaite.


Addendum: Votre point de départ était un film. L'obscurcissement est un excellent appareil de cinéma car une révélation comme celle-ci indique aux téléspectateurs que le héros (ou le méchant) a trouvé une information et progresse ainsi. C'est l'équivalent informatique de savoir où se trouve le coffre-fort, même si vous avez toujours besoin du code. Peu importe si c'est factuellement correct, s'il transmet le message émotionnel approprié au public.

Vous utilisez ... Linux avec Wine?Quoi qu'il en soit, le système JP n'était pas * intentionnellement * obscurci;il n'y avait aucune raison que ce soit le cas, pas plus que votre système d'exploitation de bureau n'est intentionnellement obscurci.La sécurité dans JP reposerait sur l'authentification (et la sécurité * physique *), tout comme sur les systèmes de bureau modernes.
Petit problème: SQL Server 2019 fonctionne en fait sur Linux (ainsi que sur Powershell et ASP.NET).Je ne connais personne qui fasse ça ... mais c'est possible.
Roman Odaisky
2019-12-17 21:29:09 UTC
view on stackexchange narkive permalink

Pour un exemple extrêmement répandu, Intel Management Engine, qui a son propre système d'exploitation, fait quelque chose comme ça, là où il existe un mécanisme de mise à jour du micrologiciel, mais le micrologiciel doit être dans un format très spécifique dont les détails sont confidentiels. Il semble impliquer un codage Huffman avec des paramètres inconnus. De même que votre proposition (qui est fondamentalement un cryptage symétrique du micrologiciel), ME nécessite des modifications spécifiques au moment de la préparation du micrologiciel et présente un écart correspondant par rapport aux mécanismes standard au moment de l'exécution.

Hmm.Je pensais que le micrologiciel Intel devait être signé par le code Intel CA.Ont-ils besoin de plus de protection en plus de cela?Quelle est la menace que cette obfuscation empêche?
L'obfuscation tente d'empêcher l'ingénierie inverse, de sorte que les attaquants ne peuvent pas trouver encore plus de problèmes de sécurité dans leur implémentation.
Ou il n’est pas impossible qu’Intel eux-mêmes fassent quelque chose de louche qu’ils aimeraient cacher.
Il convient de noter que de nombreuses [vulnérabilités de sécurité] (https://en.wikipedia.org/wiki/Intel_Management_Engine#Security_vulnerabilities) existaient et existent très probablement encore dans le ME.Et l'obscurcissement complet rend également plus difficile pour les chercheurs en sécurité de l'analyser.
Intel ME est une blague malsaine
@johndoe Je suppose que vous n'avez jamais entendu parler du plus récent "Innovation Engine" d'Intel.: P
user1169420
2019-12-19 03:28:08 UTC
view on stackexchange narkive permalink

Ce que vous décrivez s'appelle «La sécurité par l'obscurité» et est un antipattern de sécurité largement connu. Cela signifie que ce n'est pas une idée nouvelle, mais plutôt une vieille et mauvaise idée, dans laquelle les personnes non initiées à la philosophie de la sécurité doivent être éduquées pour ne pas tomber.

Imaginez que vous conceviez une maison sécurisée, et pensait que l'obscurité était une stratégie prometteuse. Toutes les maisons sont construites hors des couloirs et des pièces, des portes avec des poignées de porte, des interrupteurs d'éclairage, etc. Comme ils sont communément connus, vous pourriez penser que ce n'est pas sûr car un intrus pourrait facilement naviguer dans la maison par ces éléments de construction communément connus. Vous pourriez essayer de repenser les principes de construction à partir de zéro, remplacer les boutons de porte par des cubes rubiks, faire des plafonds à mi-hauteur pour confondre l'intrus, etc. à voir avec cela, et pire que tout, c'est pour rien parce que tout intrus, une fois à l'intérieur, peut regarder autour de lui avec ses yeux et utiliser son cerveau pour le comprendre. Les hackers sont des passionnés de puzzle dans l'âme.

La solution pour sécuriser votre maison n'est pas d'avoir une construction non standard, c'est d'avoir de meilleures serrures, des fenêtres sécurisées, un système de sécurité approprié, etc. Je veux cacher votre or dans un passage secret, car finalement Abbot et Costello vont s'appuyer sur ce chandelier et l'ouvrir accidentellement. Mettez votre or dans un coffre-fort avec une bonne combinaison secrète et une alarme anti-sabotage. L'équivalent informatique est d'avoir un accès restreint par authentification par cryptographie à clé publique, des rôles d'accès utilisateur limités, des systèmes de surveillance, une réduction de la surface exposée, une atténuation des vecteurs de menace d'entrée, etc.

Les efforts pour rendre un système informatique plus obscur ne font que rendre votre système est plus éloigné du support, plus difficile à obtenir des correctifs de sécurité , plus difficile à utiliser de manière sécurisée .

Modifier: Parfois, une certaine sécurité par l'obscurité est acceptable, lorsqu'elle est utilisée en plus de la sécurité réelle. Un exemple courant est l'exécution de SSH sur un port élevé comme 30000 quelque chose. SSH est crypté, et l'accès est derrière une authentification par identifiant, c'est votre vraie sécurité. Mais l'avoir sur un port haut le rend simplement moins visible pour commencer si quelqu'un effectue des analyses rapides. Tout ce qui est plus compliqué que cela, comme essayer de masquer votre système d'exploitation, en ferait simplement un cauchemar opérationnel, ce qui rendrait les mesures de sécurité réelles (comme être à jour sur les correctifs) plus difficiles.

"une certaine sécurité par l'obscurité est acceptable": votre exemple d'utilisation d'un port autre que celui par défaut n'est pas * security *, c'est * commodité *: dans ce cas, "je ne veux pas que mes journaux ssh soient pleins de tentatives infructueuses."Aucune incidence sur la sécurité du tout.
Vous avez raison.Mauvaise formulation de ma part.
Pour plus d'informations sur la sécurité par l'obscurité, consultez [La sécurité par l'obscurité n'est-elle pas toute?] (/ A / 44096/129883) et [Le rôle valide de l'obscurité] (/ a / 2431/129883).Les commentaires sont perspicaces sur ce deuxième lien.En ce qui concerne la modification des ports par défaut, il y a quelques mises en garde, comme indiqué dans [Dois-je changer le port SSH par défaut sur les serveurs Linux?] (/ A / 32311/129883).Encore une fois, des éléments utiles dans les commentaires.
@Piskvor L'utilisation d'un port autre que celui par défaut contribue à la sécurité en empêchant les riff-raff occasionnels.Mon père m'a appris quand j'étais très jeune: les écluses doivent empêcher la personne moyenne d'entrer, pas le criminel endurci.Il va crocheter votre serrure.cassez-le, brisez la fenêtre et entrez de cette façon.Cela étant dit, plutôt que de changer le port SSH sur un serveur, ne leur acheminez tout simplement pas les connexions SSH via votre pare-feu (sauf pour un serveur SFTP conçu pour être connecté à Internet).Faites en sorte que les administrateurs légitimes utilisent votre VPN pour obtenir un accès à distance.
** Ne mettez pas SSH sur un port haut. ** Vous pouvez le mettre sur un port autre que celui par défaut, bien sûr, mais le mettre sur un port haut permet à un processus local non root de planter le serveur SSH et de s'y lierhaut port à sa place.Un port bas est important pour les serveurs car il nécessite root (enfin, certaines capacités qui viennent avec root) pour se lier.
@MontyHarder C'est exactement ce que j'ai écrit: moins de spam dans le journal des échecs de connexion.Sécurisé contre ma petite sœur essayant de root: toor?Et il y avait beaucoup de joie.(Yaay.)
F. Hauri
2019-12-18 16:54:45 UTC
view on stackexchange narkive permalink

Pensez à l'utilisabilité

  • Essayez d'expliquer à votre nouvel administrateur système qu'il doit appuyer sur ha7TrUO au lieu de sudo , RRI6e29 au lieu de ls et ainsi de suite ... Oui, il y a une liste de traductions que vous avez juste à apprendre!
  • naviguer sur le réseau local ne doit pas non plus être possible: vous devez maintenir une liste papier afin de garder une vue d'ensemble !?

  • Si vous renommez toutes les commandes critiques, vous devrez conduire ceci pour faire la mise à niveau du système!

  • Et comme Nick2253 commenter, si vous essayez de créer un système intégré, puis faites une obscurcissement avant de publier le produit final, vous devrez tester le produit final.

    • Vous devez créer un script fait maison pour tout lier pour obfuscation.
    • Si quelque chose ne va pas, le débogage deviendra délicat.
    • Vous devez créer des scripts de désobfuscation faits maison , afin de pouvoir faire certains débogage.
    • Retour personnalisé (avec log fi les) devront être désobfusqués aussi .

    Ce faisant, vous ajouterez une couche de travail important avec de nouveaux bogues potentiels.

    Pour très peu d’améliorations de la sécurité, voir plus loin

L’obscurité pourrait vous nuire.

Pensez niveau inférieur

  • Même si vous essayez de renommer des fichiers, de fonctionner au niveau de l'application et du système d'exploitation, tout cela utilisera des bibliothèques standard qui seront appelées directement si l'attaquant envoyer des fichiers exécutables binaires. Vous pourriez même envisager de masquer toutes les bibliothèques standard! (Y compris le système de fichiers, les protocoles réseau ...)

  • Pendant que vous utilisez un noyau non modifié, ils utiliseront des variables et des espaces de noms standard . Il va donc falloir créer une version obscurcie du noyau ...

... Puis tout lier ensemble!

Eh bien, même lorsque tout est obscurci, l'application devra gérer Internet. L'obscurcissement n'empêchera pas les bugs conceptuels à ce sujet!

Obscurité Si ce n'est pas à tous les niveaux, n'améliorera pas la sécurité.

L'obscurité totale n'est pas vraiment possible, en raison de la nécessité d'utiliser protocoles standards afin de pouvoir gérer Internet.

Pensez à license

Si vous prévoyez de distribuer GNU / Linux, vous devez partager le code source comme décrit dans GNU GENERAL PUBLIC LICENSE GPLv3 et / ou GNU LESSER GENERAL PUBLIC LICENSE LGPLv3 (selon l'application et librairies utilisées). Cela impliquera la publication de la méthode d'obscurcissement avec chaque produit distribué .

Répondre strictement à vos deux questions:

Je suis un expert, mais avec un tout petit foyer. Travaillant sur de nombreuses infrastructures de petites entreprises différentes, j'ai fait des choix il y a quelques années. L'évolution et l'histoire semblent confirmer mes choix, mais ce n'est que mon point de vue personnel.

L'obscurcissement du système d'exploitation tel que décrit est-il largement utilisé et je ne l'ai tout simplement pas rencontré?

Donc, je ne sais vraiment pas dans quelle proportion l’obscurcissement est largement utilisé, mais je n’utilise pas la sécurité par l’obscurité et déconseillé.

S'il n'est pas largement utilisé, quels sont les obstacles pratiques ou techniques à l'utilisation?

Pas de barrières! C'est juste contre-productif. Le coût du temps devient rapidement gigantesque et l’amélioration de la sécurité est un leurre.

Bien sûr, certaines choses minimes sont à faire:

  • Ne commencez pas ssh serveur s'il n'est pas nécessaire
  • N'installez pas sudo , utilisez les permissions , les groupes et la structure cohérente corrects.
  • Gardez votre infrastructure globale à jour !!!

Petit échantillon quand la lumière vient sur l'obscurité

  • Sécurisation ssh : bidirectionnelle.

    • Déplacez le port ssh de 22 à 34567

      • léger et rapide, mais

      si un attaquant les trouvait, il pourrait engager une force brute fluide contre ce port pendant longtemps jusqu'à ce que l'utilisateur final les découvre.

    • installer un pare-feu

      • Plus solide, nécessite plus de connaissances, mais.

      Plus sécurisé tout en étant à jour.

Cela ne répond pas vraiment à la question d'@OP's.Ils ont spécifiquement mis de côté les systèmes maintenus par des humains, de sorte que les arguments d'utilisabilité ne s'appliquent pas vraiment.
Même le système intégré pourrait être maintenu, édité et mis à niveau.
Bien sûr.Et je suppose, sur la base de la question d'OP, que ces systèmes gérés manuellement seraient exclus.En particulier, OP fait appel à des systèmes «gérés par automatisation» pour ce type d'obfuscation.Évidemment, les gens sont impliqués dans toute la gestion des systèmes à un certain niveau, mais j'ai compris que cela signifiait des systèmes qui sont directement gérés par l'automatisation;ou, en d'autres termes, où les outils d'automatisation évitent la gestion au point où l'obscurcissement au niveau du système d'exploitation ne serait pas pertinent.
@Nick2253 J'ai ajouté un peu plus de mon point de vue.
Matthew
2019-12-18 23:57:23 UTC
view on stackexchange narkive permalink

Des classes entières d'attaques ne seraient-elles pas pratiquement inutiles si le système d'exploitation avait des commandes ha7TrUO et RRI6e29 au lieu de sudo et ls? Imaginez un pirate informatique qui obtient en quelque sorte un accès root à distance - que vont-ils même faire s’ils ne connaissent aucune commande?

Une meilleure alternative serait simplement de ne pas installer ces commandes dans la première place. Je ne pense pas que vous ayez besoin d'un shell pour exécuter un noyau Linux, bien que cela implique que votre processus de démarrage soit autre chose que sysV-init ou systemd.

Comme d'autres ont noté, cependant, qu'il s'agissait d'un compromis entre la sécurité et la facilité de développement. Malheureusement, de nombreux fabricants de périphériques se soucient beaucoup plus de ce dernier que du premier.

La mise en œuvre serait assez facile pour les compilateurs. Prenons le cas le plus simple de «renommer cette fonction et tous les appels à celle-ci». Vous pourriez donner à un compilateur OS et à un compilateur d'application les mêmes noms aléatoires et ils pourraient se parler. Mais même si l'application a une mauvaise sécurité et est vulnérable à l'injection bash, de telles attaques seraient infructueuses.

Je ne suis pas sûr que vous ayez besoin de l'aide du compilateur à tout. Je pense que vous pouvez principalement y parvenir en modifiant le linker ¹ pour appliquer une randomisation à tous les noms de symboles. Il suffit probablement d'appliquer une fonction de hachage avec un sel qui n'est connu que du fabricant. Je ne suis pas sûr que vous ayez même besoin de code source pour faire cela, c'est-à-dire que je pense que vous pourriez appliquer le découpage au code déjà compilé.

(¹ Je pense que c'est un peu Vous devrez peut-être modifier le code objet afin de remplacer les noms des symboles, mais cela ressemble plus au niveau assembleur, c'est-à-dire a) vous ne faites pas tout le dur bits de compilation C / C ++ / etc. code et b) vous n'avez pas besoin du code source C / C ++ / quel que soit le code source. OTOH Je ne suis pas sûr que vous puissiez faire ce genre de chose si le code de votre appareil est plutôt quelque chose comme Python.)

Il y a encore une possibilité de rétroconcevoir le processus, cependant, et en plus cela peut violer la GPL² (en particulier la GPLv3) à moins que vous ne donniez le sel, ce qui irait à l'encontre de l'objectif.

En fait , "à cause de la GPL" est probablement la principale raison pour laquelle vous ne voyez pas ceci; il serait difficile de l'implémenter d'une manière qui soit réellement utile en dehors de rendre chaque appareil différent . OTOH, cela signifierait au moins que les attaquants ne peuvent cibler que des appareils spécifiques plutôt que de pouvoir exploiter une vulnérabilité sur « tout appareil exécutant Linux xyz».

(² Par souci de simplicité, J'utiliserai simplement "GPL" partout, mais notez que cela s'applique généralement même pour les éléments sous L GPL.)

Cela dit, notez que la GPL ne vous oblige pas pour publier le sel parce que vous avez "modifié" les sources. Si la randomisation du nom du symbole se produit au moment de la compilation, vous n'avez pas modifié les sources. La raison pour laquelle vous auriez besoin de publier le sel est parce que la GPL exige que les utilisateurs puissent remplacer leurs propres versions d'une bibliothèque sous GPL, ce qu'ils ne peuvent pas faire à moins de connaître le sel. (Comme indiqué, vous pourrez peut-être vous en sortir avec la GPLv2, mais les effets techniques sont similaires à "exécuter uniquement des logiciels signés", pour laquelle la GPLv3 a été spécifiquement écrite.)


En fin de compte , il pourrait y avoir un avantage ici, mais vous n'allez pas rendre un système particulier sensiblement plus sûr (il est bien connu que la "sécurité par l'obscurité" n'est généralement pas une sécurité du tout). Ce que vous pouvez accomplir, c'est rendre plus difficile le ciblage de nombreux systèmes via un seul vecteur.

"Je pense que vous pourriez appliquer la mutilation au code déjà compilé."C'est une pensée très intéressante qui affecterait de nombreuses autres réponses données ici.Je ne suis pas familier avec l'idée de séparer les liens de la compilation, du moins pas en dehors des classes universitaires.
Archis Gore
2019-12-20 06:26:17 UTC
view on stackexchange narkive permalink

Divulgation équitable: je suis le directeur technique d'une entreprise qui construit exactement cela. Dé-biaisez pour cela tout ce que vous voulez.

Il est en effet possible de construire complètement un noyau système, des pilotes de périphériques, des packages, toute la pile par hôte, plusieurs fois par jour, et cela peut être assez efficace. C'est exactement ce que nous faisons et nous aidons nos clients à faire. Nous ne sommes pas les seuls - nous pouvons en déduire qu'au moins Google le fait également pour toutes ses machines (référence à venir.)

Maintenant, si vous aviez la possibilité de reconstruire par machine à partir de zéro, quoi y a-t-il des choses que vous pouvez changer?

Le projet d'autoprotection du noyau le permet déjà grâce à une réorganisation aléatoire des structures du noyau: https://lwn.net/Articles/722293/. Cet article souligne également le célèbre échange où Linus Torvalds l'appelle théâtre de la sécurité, mais l'auteur du projet (qui travaille chez Google) commente: "Eh bien, Facebook et Google ne publient pas leurs versions de noyau. :)"

Cela mène à la conclusion qu'au moins Google fait cela et le considère utile. Pouvons-nous faire PLUS de types de brouillage sur un ensemble fermé? Au niveau le plus fondamental, pourquoi un virus Windows ne s'exécute-t-il pas sur Linux ou un Mac? Parce que les formats sont différents. Tout est x86 en dessous, et pourtant ce n'est pas la même chose. Et si deux Linux étaient différents de la même manière? Windows vs Linux n'est pas "obscurcir" simplement parce que nous n'avons pas beaucoup de façons de rendre les Linux aussi différents que Windows l'est de Linux. Mais ce n'est pas impossible, et ce n'est même pas vraiment si difficile. Adoptez l'approche du KSPP et appliquez-la aux appels système, puis recompilez tout ce qui se trouve en haut contre ces appels système. Cela va être très difficile à casser - du moins pas de manière survolée.

Votre question portait sur le changement de nom des symboles (noms des exécutables, bibliothèques, etc.) Cela a deux aspects: (a) est c'est utile? (b) Cela peut-il être fait de manière fiable?

Nous cherchions un moyen de résoudre une fois pour toutes les injections de code PHP. Malgré ce que HackerNews voudrait vous faire croire, les injections de code PHP ne sont pas un problème résolu en dehors des forums de discussion sur Internet. Les développeurs, administrateurs et utilisateurs PHP de la vie réelle sont exposés à un nombre continu d'injections de code.

Nous avons donc essayé Polyscripting (Open Source sous licence MIT permissive): https: // github. com / polyverse / polyscripted-php

Nous partageons ceci publiquement pour solliciter des commentaires, et nous gérons deux sites Web, polyscripted.com et nonpolyscripted.com, qui font exactement ce que vous attendez en fonction de leurs noms. Nous avons également embauché des pentesters pour essayer de le casser.

Et je commence tout juste à expérimenter avec des exécutables, des bibliothèques partagées et le renommage de symboles exportés sur un ensemble fermé (dans un conteneur de docker, par exemple). Personnellement, je ne pense pas que cela ajoute autant de valeur, mais est-ce que cela en ajoutera un peu? Je le pense. C'est donc une question de coût. Si vous pouvez obtenir peu de valeur pour un coût encore plus petit, pourquoi ne pas le faire? C'est exactement pourquoi nous avons tous l'ASLR - ce n'est pas exactement la meilleure défense depuis le pain tranché, mais si vous avez déjà un code relocalisable et que vous allez le réorganiser de toute façon, pourquoi NE PAS le pousser à la limite et le randomiser?

En bref, l'approche que vous décrivez est tentée par de nombreuses personnes (y compris Google, Facebook, le noyau Linux, etc.), ainsi que par de nombreux universitaires dans le domaine de la défense de cible mobile et une poignée d'entreprises comme les nôtres qui essaient de le rendre trivialement consommable comme ASLR.

Cela serait amélioré s'il était édité pour ressembler moins à un communiqué de presse qu'à une réponse générique avec une inclinaison «nous avons de l'expérience».Pouvez-vous vous concentrer davantage sur le concept et moins sur votre entreprise?
yaroslaff
2019-12-24 17:30:53 UTC
view on stackexchange narkive permalink

Je dirais comment je vois cela du point de vue des hackers.

Certainement, si vous renommez tous les utilitaires - cela rendra les choses beaucoup plus difficiles et moins confortables pour moi, mais que pourrais-je faire?

  1. Si j'avais déjà accès au shell sur le système, je téléchargerais simplement busybox (tous les utilitaires de base dans un binaire) ou l'ensemble complet de binaires dont j'ai besoin pour les opérations de base.

  2. Pour augmenter encore les privilèges, je devrai peut-être rechercher des binaires suid-root, et il n'y en a que quelques-uns (sudo, mount, etc.). Hacker ne peut pas télécharger de tels fichiers (sauf s'il est déjà root). Mon petit système Linux simple n'a que 24 binaires suid. Très facile d'essayer chacun d'eux manuellement.

Mais de toute façon, je suis d'accord, cela rendrait le piratage de cette boîte plus difficile. Il serait pénible d'utiliser (pirater) ce système, mais c'est possible. Et le hacker travaille sur le système pendant une heure, un jour ou un mois ... mais l'administrateur / utilisateur peut travailler sur le système pendant des années et ne peut pas se souvenir des noms ha7TrUO et RRI6e29. Peut-être que personne n'essaiera même de pirater le système, mais l'administrateur en souffrira tous les jours.

Mais ... si vous rendez la sécurité trop élevée mais inconfortable pour l'utilisateur / administrateur, vous réduisez souvent la sécurité en fait. Comme si vous appliquez des mots de passe complexes avec plus de 20 caractères - les mots de passe les plus probables seront écrits sur des post-it sur le moniteur. Si vous voulez rendre le système si obscurci, il sera très difficile de travailler dessus pour les bons utilisateurs. Et ils devront faire certaines choses pour rendre leur vie plus facile. Par exemple, ils peuvent télécharger leur binaire busybox. Temprorary. Et ils l'oublieront ou le laisseront là intentionnellement (car ils prévoient de l'utiliser un peu plus tard).

galaktycznyseba
2019-12-19 15:02:56 UTC
view on stackexchange narkive permalink

Cela arrive en fait, car les connexions ssh sont cryptées. Changer les noms de certains binaires de base n'accomplit rien de plus. Cela causerait également beaucoup de chaos: par exemple tous les scripts reposant sur ces utilitaires sont soit rendus inutilisables, soit vous aurez besoin d'une sorte de "deobfuscator" proxy, qui finirait sûrement par devenir un vecteur d'attaque. Cependant, j'ai vu certains serveurs dans la nature qui n'autorisent pas la connexion root, obligeant à utiliser sudo à la place. Les noms d'utilisateur des sudoers restent quelque peu secrets. Je ne sais pas à quel point il est sécurisé, mais je ne suis pas un expert.

Dusty
2019-12-20 20:12:36 UTC
view on stackexchange narkive permalink

Pourquoi toutes les portes n'ont-elles pas dix trous de serrure, dont un seul fonctionnait pour les clés ou les crochets de serrure? Réponse: la plupart du temps, la peine ne vaut pas les dix secondes supplémentaires du temps d'un voleur.

S'il y avait des millions de code source uniques créés isolément systèmes d'exploitation, l'obscurcissement peut être courant. En pratique cependant, nous avons à peu près quatre bases de code uniques en usage commun - toutes les informations de fuite sur elles-mêmes par synchronisation des événements, et pour plusieurs fonctions du système d'exploitation de bas niveau où les fabricants de puces donnent des séquences de bitcode machine prescrites pour activer ou accéder à certaines fonctionnalités du processeur, ils tous ont probablement de courtes séquences contenant exactement le même code.

Peter - Reinstate Monica
2019-12-18 22:42:25 UTC
view on stackexchange narkive permalink

Si vous obscurcissez GNU / Linux sur un appareil IoT distribué au public, vous serez obligé de publier votre code car il est sous GPL, ou de retirer l'appareil du marché.

Obfusquer les logiciels sous GPL - une stratégie dépendant du secret - n'est pas une idée viable.

Je ne sais pas pourquoi cela est déclassé; mais si les objections sont dans la veine des commentaires de Charles: Le simple fait de renommer les utilitaires de base ne fonctionnera pas (pour un démarrage simple, vous devrez éditer les scripts d'initialisation sous GPL). Je soupçonne fortement que vous devrez également recompiler de nombreux binaires qui interagissent avec d'autres binaires comme le pilote du compilateur gcc, ld.so, sh / bash etc. Tous les scripts shell et de nombreux fichiers de configuration doivent connaître les noms et les emplacements de binaires, ils doivent donc être modifiés.

Tout cela est sous GPL et vous serez obligé de publier les sources, les scripts et les fichiers de configuration modifiés, frustrant ainsi les efforts d'obfuscation. Si vous utilisez l'appareil uniquement en interne, il n'y a aucune obligation de publier les sources, mais en même temps, le cas de l'obscurcissement est beaucoup plus faible: vous vous frustrerez surtout vous-même.

Vous n'êtes certainement pas obligé de publier vos noms de fichiers - et je n'ai jamais vu personne prétendre que, par exemple, un auteur publiant «someprog.tar.gz.sig» (même s'il y a d'autres détenteurs de droits d'auteur) est tenu de publierleur clé de signature privée pour permettre aux autres de reproduire la signature.Une telle affirmation ferait rire hors de la salle d'audience.
... de plus, si vous corrigez quelque chose pour une utilisation * uniquement dans votre propre centre de données *, vous n'avez pas du tout besoin de publier ce correctif;c'est seulement la distribution qui déclenche les conditions de licence.
@CharlesDuffy Si vous changez le noyau Linux et les outils gnu source et les scripts shell sous GPL (ce qui doit être fait si je comprends bien l'OP), compilez-le et placez-le sur des périphériques embarqués que vous expédiez à vos clients, vousbesoin de publier votre code source qui révélera tous les appels système laborieusement obscurcis et les binaires gnu.Je n'ai pas parlé de la signature des clés, ni de l'OP, je pense.Vous n'êtes pas obligé de publier les noms de fichiers modifiés, c'est vrai;mais tout script ou programme * utilisant * qui a renommé un binaire ou un script doit être modifié et sa source publiée.
@CharlesDuffy Si un binaire ou un script est simplement renommé, le nouveau nom n'a probablement pas besoin d'être publié;mais tout * appelant * devra être modifié.Si le programme ou le script n'est jamais utilisé sur le périphérique intégré, c'est probablement une bonne idée de ne pas l'inclure dans l'image expédiée en premier lieu.
Sûr.«Expédier à vos clients» est une chose différente de «utiliser en interne».Quelque chose peut être largement implémenté même s'il n'est pas largement implémenté * et livré à des clients externes *.
@CharlesDuffy La question concerne spécifiquement les appareils IoT - "sécurité Web, [....] serveur ou caméra ou babyphone", impliquant la distribution.
Ouais - je vais vous donner une portée sur la caméra ou le babyphone, certainement.
a) vous n'avez pas besoin d'expédier la source jusqu'à ce qu'on vous le demande.b) même si vous l'avez expédié, pourquoi le destinataire devrait-il le donner à un pirate informatique?
@ThomasWeller (a) Le pirate le demande.(b) Vous le donnez au pirate parce qu'il l'a demandé.
Si ce n'est pas le cas, le client d'origine demande la source, vous pouvez informer le client que le système est déjà compromis.S'il n'était pas compromis, il n'aurait jamais eu la possibilité de lire la notice de copyright GPL et n'aurait donc jamais eu l'occasion de demander la source.
@ThomasWeller Il n'est pas rare que des tiers reçoivent des informations sur des violations présumées de la GPL et enquêtent.Je suppose qu'il est détectable qu'un Linux s'exécute sur un appareil sans le pirater.Il y a des attaques de canaux secondaires plus difficiles que cela.Mais mon argument était qu'un appareil très répandu exécutant un Linux non divulgué sera découvert et sera obligé de publier les sources ou de le retirer du marché.Obfusquer Gnu / Linux pour l'IoT n'est pas une idée viable.
Bien que ce soit une réponse légale, liée aux licences, et s'applique spécifiquement à Linux et à d'autres logiciels à gauche, Unix n'est pas Linux (généralement), et cette réponse ne s'applique pas aux systèmes d'exploitation en général, ce qui semble être le principall'essentiel de la question (bien qu'il nomme Unix spécifiquement comme exemple).Infosec et légalité ne sont pas la même chose.
@Ghedipunk L'OP a dit "dès que les attaquants découvrent qu'un serveur, une caméra ou un babyphone fonctionne ** linux ...". ** Je serais également étonné si vous pouviez masquer un système d'exploitation à source fermée car, comme je l'ai expliquéau moins besoin de patcher ld.so ou équivalent, et probablement une foule d'autres processus.
Ehhh, j'essaie juste de suggérer pourquoi vous avez obtenu 5 votes négatifs: vous abordez une question de sécurité du point de vue des licences.
@Ghedipunk Le PO n'a pas réfléchi à ce que leur idée implique.Ce n'est pas viable.Les problèmes juridiques sont une conséquence du fait qu'il faut bien plus que juste `mv / bin / nib && mv / nib / bash / nib / hsab` etc.
Je ne pense pas que la GPL soit un facteur dans tout cela.Et même si vous aviez besoin de publier le résultat, cela ne vaincrait pas la protection.Car qui, dans son esprit, coderait en dur les nouveaux noms de fichiers aléatoires?Vous créeriez une fonction de traduction, tout comme *** n'importe quel *** processus d'obfuscation.Vous n'avez pas à publier, sous GPL, le résultat, et même si vous l'avez fait, publiez-vous chaque résultat aléatoire individuel?Non, et même si vous le faisiez, un attaquant devrait trouver et trier la version avec laquelle il travaille.
user253751
2019-12-19 23:43:16 UTC
view on stackexchange narkive permalink

Les compilateurs (en fait, les éditeurs de liens) le font déjà. C'est l'une des principales raisons pour lesquelles l'ingénierie inverse est difficile.

Dans votre code source, vous pouvez avoir ces fonctions:

  void print_hello () {printf ("Bonjour! \ N ");} void print_hello_twice () {print_hello (); print_hello ();}  

Voici à quoi ils ressemblent après avoir été compilés dans un programme:

  0x400582 push rbp0x400583 mov rbp, rsp0x400586 mov edi, 0x4006340x40058b call 0x4004900x400590 nop0x400591 pop rbp0x400592 ret0x400593 push rbp0x400594 mov rbp, rsp0x400597 call 0x4005820x40059c call 0x4005820x4005a1 nop0x4005a2 pop rbp0x4005a3 push rbp0x400594 mov rbp, rsp0x400597 call 0x4005820x40059c call 0x4005820x4005a1 nop0x4005a2 pop rbp0x4005a3 push est maintenant appelé "print"  0x400582 ,  printf  s'appelle désormais  0x400490  et  print_hello_twice  s'appelle désormais  0x400593 . Tous les appels ont également reçu les mêmes noms aléatoires, de sorte que les fonctions peuvent s'appeler les unes les autres.  

Cependant, l'éditeur de liens ne peut le faire que dans un programme, car il lie un programme à la fois .

La compilation n'est pas une obfuscation: [Obfuscation and Decompilation] (https://jonskeet.uk/csharp/obfuscation.html), [Obfuscating C-based binaries to avoid decompilation] (https://stackoverflow.com/a/2273676/1765658).
@F.Hauri Il fait ce que le demandeur demande, n'est-ce pas?Mais, seulement dans les limites d'un seul programme.
Ce n'est * pas * ce que le PO demande.Votre réponse est que «cela est déjà fait», ce qui, si c'est vrai, rendrait la question sans objet.Le contexte est: "Je parle de changer les noms des binaires et des chemins de fichiers dans le système d'exploitation lui-même" et les commandes mentionnées dans l'article.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...