Divertissement - L'énigme du service

ѠOOT

Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

Lecteurs égarés, il est encore temps de rebrousser chemin. Aujourd'hui, je m'en vais vous compter l'effroyable histoire d'un homme envoyé sur les lieux d'un incident informatique. Retrouvé quelques heures plus tard, partiellement desséché le regard hagard fixant l'écran de veille de Microsoft Windows. La victime expliqua avoir utilisé toute son énergie a tenter, en vain, de terrasser un service récalcitrant. D'accord, ce récit est un chouïa exagéré mais sans originalité comment aurais-je pu vous préparer à ce qui va suivre ? ✌

En Administrateur, il utilise la commande netstat pour afficher les connexions actives.
L'option -b permet normalement d'afficher les programmes impliqués aux connexions.

netstat -ba
Connexions actives
Proto Adresse locale Adresse distante Etat
...
TCP Bestla:doom 0.0.0.0:0 LISTENING 2600
[odin.exe]
...


Un programme "odin.exe" ( identifiant de processus 2600 ) a ouvert et placé le port 666/TCP ( alias doom ) en écoute sur la machine compromise nommée Bestla. D'après la liste des processus, l'identifiant ( PID ) correspond à un service. Pour consulter les "Services" en affichage graphique: Menu "Démarrer" → "Paramètres" → "Panneau de configuration" → "Outils d'administrations" → "Services" ou pour les connaisseurs, menu "Démarrer" → "Exécuter" puis saisir "services.msc"

Petite parenthèse, techniquement vous venez sans le savoir d'enficher le composant logiciel "Services" à la MMC. L'extension .msc correspond aux documents de la console commune Microsoft. Il est à noter que ces fichiers contiennent une structure XML, avis aux curieux... fin de parenthèse.

J'ai recréé une situation similaire afin que vous puissiez comprendre le problème.

Image

Les propriétés ne peuvent s'afficher, le nom du service reste inconnu.

L'intervenant pas trop étonné utilise PsService de la suite PsTools.

psservice security

Le listing des services s'interrompt avec un message d'erreur.

Error opening EVIL for security query on \\Bestla
Accès refusé.


Le service se nomme donc EVIL, il va tenter de l'interroger.

sc queryex EVIL
[SC] EnumQueryServicesStatus:OpenService FAILED 5: Accès refusé.


Pris d'un doute, il vérifie avec whoami qu'il est bien Administrateur et c'est le cas.

sc qc EVIL
sc stop EVIL
sc delete EVIL
sc sdshow EVIL

Rien... que des FAILED 5: Accès refusé.

A ce moment précis, son manque d'expérience fait qu'il commence à être déboussolé, il est incapable de stop ou d'éliminer ce service, il redémarre à chaque fois. Là, il commence à marmonner des WTF... alors avez-vous une idée sur la question ?

Je vous laisse méditer et j'éditerai ce sujet très prochainement.
Dernière modification par ѠOOT le 14 sept. 2014 19:54, modifié 1 fois.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

Bonjour,
face à ça, peut être que j'ouvrirais une invite de commande en tant que system plutôt qu'admin ?
(EDIT: en demandant au planif de taches de lancer une tache cmd ?)
Dernière modification par lab34 le 15 sept. 2014 11:41, modifié 1 fois.
ѠOOT

Re: Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

Excellente initiative. Il effectue son élévation de privilèges en SYSTEM puis à l'aide de son interpréteur de commandes, il exécute "services.msc" et obtient malheureusement la même erreur. De même, les commandes sc & psservice retournent également un : FAILED 5: Accès refusé.

Image

Une idée ?
Dernière modification par ѠOOT le 15 sept. 2014 14:16, modifié 2 fois.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

grrrr...

Je chercherais dans la liste des utilisateurs si par hasard un autre administrateur local n'aurait pas été créé...
utilisateur sous lequel s'exécuterait le service par exemple...
Et si oui je supprime ce user et je reboot...

D'ailleurs, l'odin.exe, on ne peut pas le supprimer, le renommer ? il appartient à qui ce salopiot ?
Si on a un accès physique à la machine, je reboot en mode sans echec, je supprime l'odin.exe.
ѠOOT

Re: Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

Outre les comptes légitimes, aucun compte additionnel.
Il est lancé en tant que service en AUTORITE NT\SYSTEM.
En cours d'exécution, impossible à supprimer / renommer.
Idem en mode sans échec, la situation reste identique.

Le but reste de comprendre pourquoi et comment arrêter ce service.
La clé qui mène à une réponse est présente dès le premier message.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

Peut être chercher odin.exe ou evil dans la registry...

Si on les trouve, par exemple dans hklm\system\currentcontrolset\services ou bien dans bien dans un ...\windows\currentversion\run, on supprime la clé et on reboot.

Et si ça se trouve, le service.msc dont il est question dans la parenthèse technique pour les curieux, il a été bricolé pour afficher un service qui n'existe pas ? juste pour envoyer sur une fausse piste ? Parce que le titre de la fenêtre "Liste des services sur machine compromise" me parait étrange...

Et si c'est pas ça, comme après je n'ai plus d'idée, j'envoie odin.exe dans virustotal et si j'ai le nom du virus je poste un appel à l'aide sur malekal.com :-)
lab34

Re: Divertissement - L'énigme du service

par lab34 »

Allez, je suis sûr que c'est ça, le services.msc a été remplacé :-)

Ou bien, l'association entre le type msc et la microsoft management console a été changé pour lancer une mmc customisée.

Et dans la registry il y a un faux service décrit, histoire de tromper les outils sc et psservice

Et souvent, quand windows n'arrive pas à a faire un truc il affiche erreur 5.

J'ai bon hein ? j'ai bon ?
ѠOOT

Re: Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

Aucune extension n'a été modifiée, il n'y a pas de faux service et le fichier "services.msc" n'a pas été altéré. J'ai sélectionné cette histoire vraie car bien qu'elle soit au demeurant profondément ennuyeuse, elle reste pour le moins particulièrement riche d'enseignements. Pour égayer le sujet, quand j'ai recréé la situation similaire à celle observée pour écrire ce divertissement, je me suis dit que l'ajout d'un intitulé farfelu détournerai surement votre attention (bingo). Votre dernière phrase est la plus proche de la problématique : "Quand windows n'arrive pas à faire un truc, il affiche erreur 5." Il y a de l'idée.... Bon courage à tous.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

:dead:
ѠOOT

Re: Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

En décortiquant le message d'erreur obtenu, je formule l'indice suivant.

[SC] EnumQueryServicesStatus:OpenService FAILED 5: Accès refusé.

SC_HANDLE WINAPI OpenService(
_In_ SC_HANDLE hSCManager,
_In_ LPCTSTR lpServiceName,
_In_ DWORD dwDesiredAccess
);


dwDesiredAccess [in]

The access to the service. For a list of access rights, see
Service Security and Access Rights.
Before granting the requested access, the system checks the access token of the calling process against the discretionary access-control list of the security descriptor associated with the service object.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

Before granting the requested access, the system checks the access token of the calling process against the discretionary access-control list of the security descriptor associated with the service object.
->
donc le méchant a modifié les droits de la clé de registre hklm\system\currentcontrolset\services\evil
en retirant les droits aux admins et system

Mais je me demande si le service démarrerait...

OU:
le méchant a mis des caractères spéciaux dans la valeur chaine "display_name" de la clé de registre hklm\system\currentcontrolset\services\evil afin de faire planter les fonctions, plantage qui renverraient un code 5 alors que ce n'est pas vraiment la raison...

On peut imaginer que le display_name "the matrix has you" contient des caractères pas catholiques non affichables...

En plus, le display_name est un REG_SZ. Je n'arrive pas à trouver un truc clair mais il me semble que le REG_SZ peut être plus grand que le LPCTSTR lpServiceName qui doit être limité à 256 char. Je me demande ce qui se passe si on met un display_name de plus de 256 chars...

Bon c'est un peu confus ce que je dits, mais je n'ai plus les idées très claires :-)

EDIT: non l'histoire du display_name trop long c'est une ânerie, le lpServiceName est le nom réel du service...
ѠOOT

Re: Divertissement - L'énigme du service

par ѠOOT »

Bonjour,

Il ne faut pas chercher dans l'imaginaire mais dans les faits. Pas d'exploitation de faiblesse, DisplayName est un REG_SZ tout ce qu'il y a de plus normal, qui ne contient aucun caractères spéciaux. Si nous avions eu un cas de dépassement, les erreurs auraient différentes : un FAILED 122 de la part de SC et un message "Le délais a reçu des données incorrectes." de l'autre. C'est un juste constat, les Administrateurs, SYSTEM et autres... ne sont plus autorisés à manipuler et comme aucun compte / groupe n'a été modifié, il est clair que ces refus successifs sont liés à la présence de droits d'accès.

"Before granting the requested access, the system checks the access token of the calling process against the discretionary access-control list of the security descriptor associated with the service object."

Il est temps d'introduire de nouvelles notions et terminologies.

✰ Access Control List (ACL) : A list of security protections that applies to an object. (An object can be a file, process, event, or anything else having a security descriptor.) An Access Control Entry (ACE) is an entry in an ACL. There are two types of ACL : discretionary (1) & system (2).

(1) Discretionary Access Control List (DACL) : An ACL that is controlled by the owner of an object and that specifies the access particular users or groups can have to the object.

(2) System Access Control List (SACL) : An ACL that controls the generation of audit messages for attempts to access a securable object. The ability to get or set an object's SACL is controlled by a privilege typically held only by system administrators.

Et enfin...

Security Descriptor : A structure and associated data that contains the security information for a securable object. A security descriptor identifies the object's owner and primary group. It can also contain a DACL that controls access to the object & a SACL that controls the logging of attempts to access the object.

L'option sdshow de SC permet normalement d'afficher le descripteur de sécurité des services, or.. depuis Administrateur et SYSTEM, un message d'accès refusé est retourné pour le service EVIL. Enclenchez les méninges car l'explication à la grande question du pourquoi est clairement mentionnée entre ces lignes.
lab34

Re: Divertissement - L'énigme du service

par lab34 »

Bonjour,
bon, il n'y a que moi que ça intéresse ce jeux ?

OK, donc admin et system ne sont pas décrits comme ayant les droits de lecture dans le dacl du secure object "evil".

D'où ma réponse précedente:
lab34 a écrit :donc le méchant a modifié les droits de la clé de registre hklm\system\currentcontrolset\services\evil
en retirant les droits aux admins et system
en faisant clic droit autorisation sur la clé de registre, on doit voir qu'admin et system n'ont pas les droits de lecture dessus.

Soit c'est un autre utilisateur existant qui a les droits et lance le service, soit c'est le service qui enlève les droits juste après son démarrage.
chef

Re: Divertissement - L'énigme du service

par chef »

lab34 a écrit :Bonjour,
lab34 a écrit :donc le méchant a modifié les droits de la clé de registre hklm\system\currentcontrolset\services\evil
en retirant les droits aux admins et system
bonjour,
ben non puisse que :
DisplayName est un REG_SZ tout ce qu'il y a de plus normal, qui ne contient aucun caractères spéciaux. Si nous avions eu un cas de dépassement, les erreurs auraient différentes : un FAILED 122 de la part de SC et un message "Le délais a reçu des données incorrectes.
j'aurais essayer en mode sans échec, avec une restauration intérieur .
je dit sa , je dit rien lol!
sinon si je me fie a ce que tu as marqué :
"Before granting the requested access, the system checks the access token of the calling process against the discretionary access-control list of the security descriptor associated with the service object."
du coup l'idée serais d'utiliser Security Descriptor .
pour voir les utilisateurs ou groupes particuliers qui peuvent avoir accès à l'objet puis pour contrôler l'enregistrement des tentatives d'accès à l'objet. ?
Avatar de l’utilisateur
angelique
Messages : 32169
Inscription : 28 févr. 2008 13:58
Localisation : Breizhilienne

Re: Divertissement - L'énigme du service

par angelique »

Monter la ruche regedit HKEY_LOCAL_MACHINE\SYSTEM.... via un livecd PE et supprimer HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\service_a_la_con << supprimer.

Si ça marche ?? ça n'explique certes pas le pourquoi.
Avec Gnu_Linux t'as un Noyau ... avec Ѡindows t'as que les pépins
https://helicium.altervista.org/
Supprimer les "virus" gratuitement http://www.supprimer-trojan.com/
Un p'tit Don à Angélique PDT_018 Merci.
Image
  • Sujets similaires
    Réponses
    Vues
    Dernier message

Revenir à « Tech, Tips & Tricks »