Un diable pour vous, ou un audit avec piratage

Comme toujours, sans nom, et puisque je suis en outre associé à une signature de non-divulgation, elle a également un historique légèrement modifié (et en omettant certains détails pour la publication dont je n'ai pas reçu l'autorisation).
Ce qui suit est la vraie histoire d'un employé pénétrant un ordinateur ... eh bien, disons une banque privée. Les événements dont parle votre humble serviteur ont eu lieu dans un pays européen il n'y a pas si longtemps, avant le DSGVO (RGPD, RGPD) mais en train de le devenir, en prévision de ce qu'on appelle.


En fait, tout a commencé par un audit de sécurité - ..., une interview, en regardant sous la loupe de tout et de tout, en recherchant et en résolvant les failles et les goulots d'étranglement potentiels à traverser (à la fois là et à partir de là), ..., et en fait le débriefing. Au cours de laquelle le client a finalement reçu une conclusion décevante pour lui - "C grade with a stretch".


Oublions les mots que les agents de sécurité informatique rougissaient sous leurs yeux, mais le message lyrique général est que je jette des accusations infondées, et ils ont tout verrouillé, et la clé CSO est dans ma poche sous mon cœur.


Tente d'expliquer que le système de sécurité est construit autour d'un pare-feu + proxy + webwasher comme un filtre de contenu et un antivirus, sans IDS hybride très mal configuré (HIDS + APIDS), pots de miel, etc. etc., d'une part, par définition, n'est pas sûr, d'autre part, pour ainsi dire, j'ai déjà montré plusieurs endroits où il n'est au moins pas comme il faut. Les tentatives de retour à un dialogue constructif (en fait de retour à l'analyse) ont été brisées contre un mur de ressentiment de trois étages construit par l'ensemble du département.


Limitant la réunion et libérant les employés, CSO, ainsi que deux patrons importants, ont néanmoins essayé de découvrir honnêtement de moi où le chien a fouillé et compris comment vivre plus loin en fait et ce qui, à mon humble avis, doit être fait exactement.


Parce que Un aperçu de la compréhension n'a pas été observé à l'avenir non plus, avec enthousiasme j'ai rencontré une proposition à montrer dans la pratique. Après avoir expliqué que cela ne fonctionnerait pas en ce moment, régler les formalités (signer quelques papiers de plus, etc.), j'ai obtenu le feu vert.


Je n'aime pas vraiment le fait que je travaille «à l'aveugle» (c'est une corvée, longue et coûteuse, et le pentesting est une question de chance) et veuillez fournir des informations supplémentaires (par exemple, certaines données personnelles d'employés individuels, tels que les développeurs et le personnel de sécurité). ), Je n'ai pas non plus rencontré de contre-entente.


Êtes-vous un hacker ou non?! (En fait, non, je suis développeur, sinon c'est plus un hobby).


Je ne m'attarderai pas sur une discussion plus approfondie pendant longtemps - comme toujours, j'ai convaincu le facteur de l'argent et du temps (c'est-à-dire en fait le même argent).


C'est-à-dire en conséquence, nous avons une sorte de connaissance sur la structure de défense de l'entreprise (obtenue à la suite d'un audit préliminaire), ainsi qu'un nom complet et une courte biographie de 4 administrateurs et 3 développeurs.


Pourquoi les administrateurs et les développeurs sont-ils en fait, après tout, vous pourriez demander aux "filles comptables", leur envoyer une sorte de chat avec un animal beaucoup moins sécurisé (ou lancer quelque chose comme ça dans le domaine de l'ingénierie sociale) . Mais ...
Cependant, beaucoup d'entreprises, en règle générale, n'aiment pas vraiment quand elles commencent à en parler lors de la présentation du PoC , c'est-à-dire Un «système de piratage» basé sur des intrigues du domaine de l'ingénierie sociale n'est au moins pas bien accueilli, quelle que soit la brièveté avec laquelle il a été construit.


Pour en revenir aux technophiles, ils ne sont tout d'abord pas moins «sociaux» (ce qui ne signifie pas du tout qu'ils lanceront une sorte de «chat», mais le fait lui-même est important), et deuxièmement, ils ont généralement un ordinateur plus «développé fonctionnellement» ( que vous ne rencontrerez pas). Et ce qui est plus intéressant, en plus, ils ont souvent une sorte de «privilège», contrairement à la même fille comptable, c'est-à-dire, ils peuvent être moins violés en termes de sécurité et de restrictions du système (telles que les politiques et la coopération - il est nécessaire, par exemple, de faire fonctionner un exe-shnik nouvellement compilé) et / ou ils peuvent grimper à travers un «mur» construit par des agents de sécurité (par exemple, en forçant un tunnel via un proxy), etc. etc.


Encore une fois, parcourir la protection, en utilisant le programmeur ou l'administrateur en même temps, sonne complètement différent de, par exemple, «forcer» le cheval de Troie comptable à s'exécuter.


C'est-à-dire réception initiale, tâches exprimées - allons-y ...


La première étape consiste à collecter des informations sur les «clients» - qui, quoi, où, quand.


Je ne serai pas très distrait ici, l'article ne traite pas entièrement de ça, donc je vais juste dire - je me suis installé sur un gars plutôt social, avec Facebook et co, y compris sa propre chaîne youtube (YouTube, Vasya!), Plusieurs projets open source (à la fois dans le groupe et et propre) et juste une activité de contribution géante (demande, mais il travaille généralement à la place principale) .


Découvrir hoo-hoo aujourd'hui n'est généralement pas un problème du tout (quelque part j'ai utilisé mon vrai nom dans un endroit avec un surnom, quelque part j'ai obtenu une adresse IP proxy de la société et l'image a été formée), mais personne ne le cache vraiment.


J'ai été obligé de ralentir, y compris mon flair naturel le fait que dans l'une des communautés notre héros était engagé dans un support plus ou moins actif dans le chat, et en utilisant le client IRC, qui dans les informations utilisateur fournies en plus de l'IP, d'où les jambes grandissent, le nom et la version de lui-même aimaient, eh bien, c'était célèbre bugs / trous et par défaut, il a été enveloppé par des plugins combien en vain.


Eh bien, comme d'habitude, un soir, la maison s'est endormie, une lie dans la boite, la nôtre perd à nouveau :) dans ce chat, j'ai trouvé un surnom familier en tant qu'utilisateur actif avec une connexion de plus de 12 heures (à en juger par le journal avec les déconnexions / reconnexions intermédiaires, car un proxy d'entreprise est une telle chose, mais plus d'une demi-journée depuis la première connexion), à partir de l'adresse IP dont j'ai besoin c'est-à-dire avec un login du formulaire max.mustermann@proxyext.our-company.example.com .


Autrement dit, soit notre client a un jour - 24 heures, ou plus probablement (parce que 2 heures se sont écoulées depuis son dernier message), il n'a tout simplement pas éteint l'ordinateur de travail et a laissé le client IRC actif.


Ou peut-être qu'il a mis l'ordinateur en veille, mais (encore une fois, l'erreur de sécurité ou les administrateurs), il se produit que ce dernier se réveille, par exemple, pour mettre à jour les mises à jour pour Windows (et après une pause de 4 heures pour redémarrer) ou simplement attraper stupidement un signal de réveil sur réseau local. .


Quoi qu'il en soit, j'ai eu un peu de temps pour tapoter l'ordinateur, ou plutôt le client IRC de notre «victime».


Ne pas trouver un seul trou connu dans cette version spécifique (accessoirement pertinente à ce moment-là) du client IRC, armé d'un ida, ollydbg, etc. et en jetant un coup d'œil à la source (horreur tranquille, Vasya!), il a commencé à rechercher une sorte de vulnérabilité qui lui permettrait au moins d'exécuter quelque chose là-bas, dans le but de contrôler au moins à distance le client IRC (et nous nous souvenons des plugins).


Et il a été retrouvé, même relativement rapidement!


L'interception du contrôle a permis l'appel sprintf non sécurisé vers le tampon à partir de la pile avec %s intérieur de l'entrée étrangère mal filtrée (en conjonction avec l'injection de codage), ce qui permet d'écrire «le chargeur de code d'exploitation» sur la pile au bon endroit (grâce aux développeurs du client pour le code, Microsoft pour la pile des basses terres et la chance).


Bien que le tourment devait encore - parce que nous avons DEP, vous ne pouvez pas exécuter directement à partir de la pile, vous devez écrire une copie du "code de programme" sur la pile pour exécution, trouver l'appel memcpy avec ret à la fin pour copier au bon endroit (réécrire la classe la moins utilisée), rediriger la sortie de plusieurs procédures vers le bon endroit, écraser plusieurs valeurs VTABLE afin de générer un événement en appelant la prochaine méthode virtuelle qui provoque du code python comme plug-in (et changez ce code python en votre propre, comme un chargeur de messages cassés, afin de déjà assembler un ready-made ployt-toolkit).


Oh oui, vous deviez toujours créer un plugin (merci encore aux développeurs du client pour ces fonctionnalités généreuses), en tant que proxy, changer les messages à la volée (ajouter un wrapper pour lancer une injection, rompre l'encodage pour cela, tout en insérant des substituts incomplets au bon endroit, et t etc.), encoder le chargeur initial du message d'injection, etc.
De plus, j'ai dû créer un petit script python en tant que nouveau plugin client pour le système cible en tant qu'émulateur de console (recevoir mes messages dans son stdin et envoyer stdout + stderr dans un message privé à mon surnom).


Après avoir rassemblé tout cela sur son genou, il a lancé ce client IRC afin de se juger en tant que victime, c'est-à-dire voyez comment ce sera dans sa forme complète et finie.


Et en envoyant via mon plug-in d'une autre session de la deuxième version lancée de l'application, plusieurs messages-injections privés, j'ai été ravi de voir le message d'accueil Python habituel >>> (que j'ai collé dans l'émulateur, par souci de clarté - le python).


Satisfait en tant qu'éléphant (notant que l'application attaquée n'est pas tombée), il a vu ce qui se passait dans sa fenêtre de sortie de message - elle était pleine de divers caractères non-ascii, dont le plus notable était avec le numéro de série 90h (ce qui n'est au moins pas comme il faut, ça vous donne même une tentative de piratage), je pensais que je devais refaire le bootloader pour masquer les messages suivants (du coup ça marche toujours et ça se remarque).


Il a examiné le code, et là, ils attendaient la ligne NTS à la sortie, il a décidé de ne pas déranger beaucoup et de réécrire bêtement le premier octet du message après le chargement de zéro (avec l'espoir que le message sera affiché à l'écran un peu plus tard).


Répéter tout le processus et attendre le >>> souhaité regarda à nouveau une autre fenêtre et découvrit qu'il n'y avait rien de superflu dans le chat (Je suis toujours un génie) , a décidé de poursuivre le test.
Le message from glob import glob as ls; ls('*') from glob import glob as ls; ls('*') et j'ai vu avec joie la réponse comme une liste de dossiers et de fichiers contenus dans le dossier de l'application.


Certes, j'ai vu le même message dans la fenêtre du client attaquant que celui envoyé à mon surnom. J'ai également dû mettre 0 octet (NTS) au début de la ligne après l'avoir envoyé.


Ayant ainsi terminé la phase préparatoire, il a noté que notre ami expérimental était toujours en train de discuter (sans messages, Vasya!), Il avait déjà préparé un exploit pour notre candidat.


Allons-y ...


Les messages d'injection étaient partis ... Et après quelques longues secondes (apparemment le disque dormait ou le proxy était stupide) j'ai de nouveau vu l'invitation >>> .
Alors que je sautillais dans la pièce, je ne le dirai toujours pas (ce spectacle n'est pas pour les faibles de cœur, car à la suite d'un processus incontrôlé de manifestation de joie, j'ai quand même poussé mes petits pieds sur une jambe de chaise).


Grimaçant de douleur et pensant immédiatement, «et si quelque chose n'est pas visible dans sa fenêtre de recul, j'ai soudainement foiré quelque part et l'application se bloque en conséquence», se souvient d'un possible redémarrage forcé après la mise à jour (si soudain l'ordinateur s'est réveillé de cela et a déjà roulé la mise à jour), dans une sueur froide (en regardant l'auriculaire gonflé et en enlevant les mains tremblantes) j'ai accéléré.


La première étape consiste à vérifier au cas où nous serions là.


 >>> import os; os.environ['userdomain'] 

et la réponse est:


 'OUR-COMPANY' >>> 

Eh bien, tout, les mains sont déliées ... Allons-y.


Après avoir vérifié avec un petit script que logonui est verrouillé, après m'être un peu calmé, j'ai décidé de voir ce qui est disponible sur l'ordinateur en général:


 >>> from glob import glob as ls; ls(r'C:\Program Files\*') 

et dans la réponse, ne croyant pas à sa chance, parmi beaucoup de choses intéressantes, j'ai vu ce qui suit:


 [...,'C:\\Program Files\\TeamViewer',...] >>> 

C'est-à-dire il n'est pas nécessaire de faire des gestes supplémentaires - vous n'avez pas besoin de télécharger quoi que ce soit, de compiler et de rechercher un dossier où vous pouvez tout écrire sans enfreindre les règles.


Et puis en attendant a volé:


 >>> import subprocess; subprocess.call([r'C:\Program Files\TeamViewer\TeamViewer.exe']) 

Eh bien, après la réponse de retour:


 0 >>> 

Après avoir attendu un moment pour que TeamViewer passe par le proxy et que le serveur lui ait donné un ID (avec mot de passe), j'ai exécuté un script là-bas, recherchant la fenêtre TeamViewer, en prenant une capture d'écran et en me la renvoyant sous la forme d'une ligne base64, dans laquelle, en la développant à nouveau bitmap, j'ai été heureux de trouver à la fois l'ID et le mot de passe pour la connexion.


...


Le lendemain matin, j'ai été appelé par un OSC surpris, qui a d'abord reçu une lettre de moi (mais pour une raison quelconque, venait du compte Exchange interne de son employé), puis un appel effrayé du même employé avec les mots «Chef, nous l'avons perdu - ils nous ont cassés», qui a trouvé une fenêtre ouverte le matin Mot avec un gros texte à l'intérieur "Deux pour votre sécurité. Vous avez été piraté!", Date, signature.


Après cela, la communication avec les agents de sécurité était déjà plus fructueuse, sans éclaboussures de salive, sans déchirer les chemises et sans hurler. Enseigné par une expérience amère ( par exemple, comme décrit dans cet article ), j'ai essayé autant que possible de reporter le cambriolage lui-même plus tard (parce qu'au début, je voulais recevoir un mandat pour un nouveau «concept de sécurité»), mais après beaucoup de persuasion, des indices de coopération à long terme, etc. n., ainsi que les promesses de leur part de "ne pas toucher" l'employé en cause (collègue après tout), ils ont dû énoncer presque tous les points principaux.


J'ai ensuite reçu complètement la prime négociée pour le piratage (ainsi que le coût de l'audit préliminaire), mais ensuite le bureau s'est comporté ... disons, pas tout à fait sportif. Pour poursuivre le concert, ils ont embauché un cabinet d'audit bien connu et bien connu, qui a essentiellement refusé de travailler avec externe en mon nom.


Eh bien, comme on dit en Allemagne, "Man sieht sich immer zweimal im Leben", ce qui signifie "Soyez sûr de vous revoir".

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


All Articles