Autorisation locale sans mot de passe dans Ubuntu

image

Aujourd'hui, nous allons parler de la façon dont nous avons trouvé une autorisation locale sans mot de passe dans Ubuntu, qui, semble-t-il, ne sera jamais fermée. Comment tout s'est passé, lisez sous la coupe.

Une belle soirée d'été, l'auteur de l'article a fermé le capot d'un ordinateur portable fonctionnel d'Ubuntu 16.04 Desktop à Unity et est rentré chez lui. La soirée était si belle que j'ai décidé de prendre quelques jours de congé, j'ai envoyé un SMS à mon patron et il m'a laissé partir.

Il s'est avéré que tous mes collègues n'ont pas passé la même merveilleuse soirée. L'ordinateur portable de C4n est tombé en panne, alors il m'a demandé de lui prêter le mien, mais avec son disque dur. Bien sûr, j'ai permis.

Avec cela, notre enquête fascinante a commencé.

Qu'est-il arrivé?


Le lendemain matin, c4n a démonté mon ordinateur portable et y a inséré mon disque dur. Il a ouvert le couvercle et a vu, au lieu de commencer à charger son système d'exploitation, la fenêtre de connexion sur mon système. Il était cliquable et c4n a commencé à saisir des mots de passe aléatoires, mais en vain. Frustré, il a appuyé sur le bouton d'alimentation, puis un miracle s'est produit.

Au lieu de redémarrer l'ordinateur, je me suis connecté avec succès à mon système et les derniers programmes et documents que j'ai ouverts ont également été affichés. Il est à noter que les documents n'étaient pas simplement montrés, ils travaillaient pour eux-mêmes! Vous pouvez faire défiler les documents et parcourir les onglets du navigateur. c4n m'a immédiatement pris une capture d'écran.

image
En fait, la capture d'écran était différente. Lorsque je quitte le travail, je ne laisse pas KeePass ouvert et le site Web de l'entreprise.

Face à une autorisation locale sans mot de passe!

Quand je suis sorti de vacances, je me suis demandé quelle était la faute de ce phénomène, s'il se reproduisait toujours et s'il se reproduisait toujours de la même façon, s'il était reproduit sur tous les systèmes.

Raisons


Il s'est avéré que la faute de ce phénomène était que lorsque le couvercle a été fermé, mon ordinateur portable n'est pas passé en veille prolongée, mais s'est mis en veille (c'est-à-dire qu'il a laissé la RAM sous tension), et après avoir ouvert le couvercle, le système d'exploitation chargé et les derniers fichiers sont restés dans la RAM, avec avec qui j'ai travaillé. Le système d'exploitation ne sait pas que le disque dur a été retiré de l'ordinateur et continue de fonctionner jusqu'à ce que vous ayez besoin d'accéder au disque dur.

Pourquoi il est possible de passer une autorisation reste un mystère pour nous. Nous péchons sur le travail des modules PAM (Pluggable Authentication Modules), qui, très probablement, ne sont pas en RAM, et Ubuntu 16.04 traite incorrectement leur absence, mais nous avons alors réalisé que le problème était autre chose.

Est-il toujours reproduit et toujours le même?


Nos expériences ont commencé avec Ubuntu 16.04. Les actions étaient les suivantes:

  1. Nous envoyons l'ordinateur en mode veille.
  2. Nous sortons le disque dur.
  3. Nous sortons l'ordinateur du mode veille.

De plus, comme il s'est avéré, il peut y avoir plusieurs options pour le comportement du système:

  1. L'ordinateur affiche la fenêtre de connexion, entrez un mot de passe aléatoire => nous voyons des fenêtres utilisateur devant le bordereau (toutes les fenêtres fonctionnent).
  2. L'ordinateur affiche la fenêtre de connexion, entrez un mot de passe aléatoire => le système dit que le mot de passe est incorrect => appuyez une fois sur le bouton d'alimentation => nous voyons les fenêtres utilisateur avant le glissement (toutes les fenêtres fonctionnent).
  3. L'ordinateur affiche un écran noir (le curseur le survole), appuyez sur des touches aléatoires et Entrée => nous voyons des fenêtres utilisateur devant le bordereau (toutes les fenêtres fonctionnent).
  4. L'ordinateur affiche un écran noir (le curseur le survole), appuyez sur des touches aléatoires et Entrée => rien ne se passe => appuyez une fois sur le bouton d'alimentation => nous voyons les fenêtres utilisateur avant le glissement (toutes les fenêtres fonctionnent).

Très probablement, les éléments 3-4 sont similaires aux éléments 1-2, juste pour une raison quelconque, le graphique ne dessine pas de fenêtre de connexion.

L'expérience a été effectuée plusieurs fois, et toutes les fois où il était possible d'accéder aux fenêtres de l'utilisateur, c'est-à-dire la reproductibilité est de 100%. C'est très cool pour un bug aussi étrange. Certes, il convient de noter que seules les fenêtres actives sont disponibles, nous n'avons pas pu passer aux fenêtres réduites. De plus, certaines fenêtres ont disparu après un certain temps, et parfois l'effet de journalisation a été observé, mais l'une des quatre méthodes d'entrée a permis de revenir.

PoC


Nous avons tourné une courte vidéo qui montre l'ensemble du processus d'attaque.


Joue-t-il sur tous les systèmes?


La condition du test était la présence de toutes les dernières mises à jour du système. Pourquoi avons-nous besoin d'un bug qui a longtemps été fermé?

Pour commencer, il a été décidé de vérifier si le bogue est reproduit sur des PC ordinaires (pas des ordinateurs portables) avec Ubuntu 16.04 avec Unity. Il y avait une théorie selon laquelle l'affichage de la fenêtre pouvait être en quelque sorte connecté à une carte vidéo. Par conséquent, la vérification a été effectuée à partir d'un PC avec des cartes graphiques intégrées et discrètes, dans tous les cas, le résultat était le même - il remplit parfaitement le bogue.

Ensuite, Ubuntu 16.04 avec GNOME. Et ici, nous avons été déçus: je n'ai pas résolu le bug. Parfois, en sortant d'un feuillet, le système a montré les dernières fenêtres pendant une demi-seconde (il est tout à fait possible de filmer une vidéo), les chercheurs l' ont signalé en 2011 , et il n'a pas été fermé jusqu'à présent.

De plus, nous avons pris Arch avec Wayland et Xorg - la déception, ne fonctionne pas. Debian 9 avec GNOME et encore déception. Il n'a pas non plus fonctionné sur le nouveau Ubuntu 18.04 - sans surprise, car à ce moment-là, nous avons déjà commencé à soupçonner que le problème était dans Unity. Par conséquent, nous avons décidé de prendre Ubuntu 14.04 pour les derniers tests, et de voir également ce qui se passe avec Ubuntu 18.04 si vous changez le gestionnaire de fenêtres de GNOME en Unity. Sur Ubuntu 14.04, tout fonctionnait bien (bien que les fenêtres aient une durée de vie beaucoup plus courte que le 16/04). Sur Ubuntu 18.04 avec Unity, après avoir quitté le bordereau, le système se bloque immédiatement et aucune autre expérience ne peut être effectuée.

Conclusion: nous avons décidé que les versions d'Ubuntu avec Unity installé nativement sont vulnérables, c'est-à-dire version

  • 10.10
  • 11.04
  • 11.10
  • 12.04
  • 12.10
  • 04/13
  • 13.10
  • 14.04 (testé par nos soins)
  • 14.10
  • 15/04
  • 15.10
  • 04.16 (testé par nos soins)
  • 16.10 (testé par nos soins)
  • 04.17 (testé par nos soins)

Liste assez impressionnante, non? Nous avons testé loin de tout. Si quelqu'un a la possibilité de vérifier d'autres versions que nous n'avons pas testées, nous l'ajouterons volontiers au message.

Pourquoi pensons-nous que c'est mauvais


La vulnérabilité ne permet qu'un accès local aux données, et pas à tout le monde, mais uniquement à celles qui sont ouvertes dans les applications et déployées. Cependant, cela est encore assez critique, car:

  1. Les données utilisées peuvent ne pas être enregistrées sur le disque (par exemple, un document modifiable).
  2. Les données peuvent se trouver dans un répertoire personnel chiffré (par exemple, un fichier avec des mots de passe).
  3. Les données peuvent être sur un lecteur flash crypté.
  4. Les données peuvent nécessiter une autorisation supplémentaire (comme dans notre PoC avec KeePass).

En plus de cela, dans Unity, n'importe qui peut envoyer un ordinateur à un bordereau, simplement depuis l'écran de connexion (sans autorisation). C'est-à-dire c'est une situation assez réelle qu'une personne verrouille l'écran et quitte pour le déjeuner, à ce moment, l'attaquant envoie l'ordinateur dans un bordereau, sort le disque dur et regarde ce que la personne a fait avant de partir pour le déjeuner. Après il reste à redémarrer l'ordinateur déjà avec le disque, et la personne ne devinera pas que ses données pourraient être compromises.

Les sceptiques diront qu'un résultat similaire peut être facilement obtenu en effectuant une attaque de démarrage à froid, et les résultats seront encore meilleurs, mais à quelle fréquence l'un de vous porte-t-il un thermos avec quelques litres d'azote liquide?

Nous avons décidé que le problème était critique et devait être écrit dans Ubuntu.

Comme nous écrivons dans Ubuntu


Pour obtenir un bug, nous avons dû nous inscrire sur launchpad.net , puis créer une description du bug et ajouter une vidéo depuis PoC. Nous avons obtenu 406 points de classement et un badge feu de joie (quoi que cela signifie). Ils ont commencé à attendre. Nous avons commencé le bogue le 2018-06-18.

Après une longue correspondance, le camarade Marc Deslauriers a terminé notre débat avec un message qui se résumait à: «Nous ne réglerons rien. C'est la même chose que d'avoir un accès physique. "

image

Les tentatives de convaincre ont échoué. Nous avons été envoyés à Total Ignorer pendant une semaine. Après quoi nous avons été autorisés à publier cette étude:

image

UPD: 9 juillet 2018, à 16 heures, nous avons décidé de rendre le bug public (merci amarao ). Dans la discussion sur le tableau de bord, le bogue a été confirmé pour Mate 18.04, et pas seulement pour Unity. La communauté insiste également sur le fait que le bogue existe et ne doit pas être ignoré.

Source: https://habr.com/ru/post/fr416425/


All Articles