IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[services/communication avec les services] demande d'éclaircissement


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut [services/communication avec les services] demande d'éclaircissement
    Bonjour à tous,
    Dans le cadre scolaire, je dois effetuer une analyse de malware. Dans mon cas, c'est un exe qui crée un .sys et l'installe en tant que service windows "machin". L'exe représente l'interface avec le service.

    Un moment donné dans l'exe décompilé j'ai le code suivant
    Le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mov     [esp+0AB8h+var_AA0], 0
    mov     [esp+0AB8h+var_AA4], 0
    mov     [esp+0AB8h+var_AA8], 3
    mov     [esp+0AB8h+var_AAC], 0
    mov     [esp+0AB8h+var_AB0], 0
    mov     [esp+0AB8h+var_AB4], 0C0000000h
    lea     eax, [ebp+var_248]                   ; offset d'une chaine "\\.\Global\machin"
     mov     [esp+0AB8h+var_AB8], eax
    call    CreateFileA
    Selon la doc j'ai (source:http://msdn2.microsoft.com/en-us/lib...a363858.aspx):
    HANDLE WINAPI CreateFile(
    __in LPCTSTR lpFileName,
    __in DWORD dwDesiredAccess,
    __in DWORD dwShareMode,
    __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    __in DWORD dwCreationDisposition,
    __in DWORD dwFlagsAndAttributes,
    __in_opt HANDLE hTemplateFile
    );
    Si j'ai bien compris, la fonction ouvre le volume physique GLOBAL et la partoche "machin" non? Mais si oui, pourquoi avoir un argument ShareMode à 0 alors que la doc précise:
    When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.
    (à moins que ça soit la valeur définie, j'ia pas pu vérifier).

    Par la suite, la communication s'effectue via la fonction DeviceIoControl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BOOL WINAPI DeviceIoControl(
      __in         HANDLE hDevice // = 050(window) selon ollydbg, le handle obtenu par la fonction createfile ci-dessus
      __in         DWORD dwIoControlCode // un code à envoyer, ici 0x0022FFE0
      __in_opt     LPVOID lpInBuffer // le parametre d'entrée
      __in         DWORD nInBufferSize,
      __out_opt    LPVOID lpOutBuffer,
      __in         DWORD nOutBufferSize,
      __out_opt    LPDWORD lpBytesReturned,
      __inout_opt  LPOVERLAPPED lpOverlapped,
    );
    D'après ce que j'ai lu, l'interface communique comem ça avec le service. Mais ça reste encore un peu flou je ne vois pas comment ça fonctionne, et comment mon service peut récupérer ce code et le parametres qui lui sont passés?
    En decompilant le .sys et en regardant les primitives utilisées, j'ai un et des déclarations de chaines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unicode 0, <\Device\machin>,0
    unicode 0, <\DosDevices\machin>,0
    qui semblerait être spécifique à un driver.

    Donc au final, comment ça fonctionne?
    Pourquoi la fonction createfile demande un handle sur \\.\GLOBAL\machin?
    Qu'est ce que le volume GLOBAL? Est-ce qu'il a été créé et géré par le service installé (donc driver) ou Windows le gère à la base?
    Comment repérer la partie dans le driver qui se charge de récupérer les infos transmises par l'exe?

    Beaucop (trop) de questions, mais j'espère que vous pourrez m'éclairer un peu dessus.
    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Visiblement, ceci n'est pas un service ordinaire: C'est un service Driver.
    Le service crée donc un Device (ou un tube nommé, en fait je ne sais pas trop) et DeviceIoControl() permet de passer des instructions d'un programme user-mode à un driver kernel-mode...

    Un service normal ne fait pas ça. Il expose généralement un simple tube nommé, un socket, ou un composant COM...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    ok
    Déjà merci pour l'info du tube je ne savais pas comment le communication exe>service se faisait. Il va donc falloir que je recherche maintenant à quel endroit du driver se fait la lecture dans tube:
    j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     call    ds:ZwQueryInformationFile
    call    ds:ZwQueryInformationProcess
    call    ds:ZwReadFile
    j'ai pris ces primitives parce qu'elles leur nom pourrait avoir qqc à voir avec une lecture dans un tube.

    Pour l'info sur le driver, je l'ai déjà supposé comme je l'ai dis plus haut.
    Après, d'après ce que j'avais pu lire sur les services. Au niveau createFile, un nom de cette forme était utilisé
    \\.\{ID de service}
    et non pas avec un nom. De plus le \\.\GLOBAL\machin me parait bizarre.

    En plus le .sys desassemblé est vraiment pas très lisible, c'est assez destabilisant pour une 1ere approche :p

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Global est un préfixe pour les ressources nommées.
    Ça indique "pour toute la machine" à l'opposé de "pour la session courante".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    Ok ça m'avance un peu déjà, j'aurrai pas a chercher ça
    merci

  6. #6
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Est-ce que tu as pu choisir l'échantillons à analysé?
    Si c'est le cas, je te conseille -vivement- d'en prendre un autre ^^ (MP si besoins)
    Si c'est un échantillon fourni, alors tu -devrais- avoir dans tes cours des notions assez avancé d'OS, car ton malware utilise la technologie rootkit kernel land.

    Pour que le ring 3 (executable) puisse communiquer avec le ring 0 (driver), il faut que le 1er crée un handle de fichier sur le second.
    Cela est possible SSI le driver à enregistré un périphérique nomé.
    Une fois que le driver c'est associé à un périphérique (virtuel ou non), le programme ring 3 "gère" le driver comme un fichier (il l'ouvre, il écris dedans, il le ferme).
    Cette méthode est fort représentative du concept UNIX "Tout est fichier".
    Pour comprendre plus en détails la comunication, tu dois te renseigner sur les IOCTL, les IRP et éventuellement sur les liens symboliques.

    Si tu as des questions, n'hésite pas j'avoue que j'ai du mal à faire un texte précis car j'aimerai savoir s'il s'agit d'un rk de production ou bien d'un fichier prévu pour étude.

    PS: en total HS, je peux savoir dans quel école tu es, ça m'interresse beaucoup ^^
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    salut, merci pour toues ces réponses.
    Le rt étudié est agony. Les sources sont dispo sur le net mais le sujet à la base est de faire du reverse pur sur un binaire, donc je joue le jeu

    je suis tombé sur un tuto squi à l'air assez sympa (http://3psilon.info/Conception-d-un-driver-NT.html) , je lirai ça pour bien comprendre les bases.

    En fait il faudrait que j'arrive à trouver plus ou moins le "point d'entrée" du driver, cad le moment à partir duquel il récupere les info envoyées via deviceIOControl. J'imagine plus ça comme un trigger/callback/ou je ne sais quoi comme terme qui appelle une fonction une fois les infos reçus. En mattant la doc sur les différntes primitives utilisées dans le .sys, il semblerait que IoCreateDevice soit une fonction assez importante.

    je vais plancher un peu dessus

  8. #8
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Agony étant un rk éducatif, je suppose que c'est un binaire fourni.

    Avant même d'envisager de disasm ton driver, je pense qu'il est necessaire de te renseigner sur ses differents points:
    • Le chargement du rootkit (via SCM)
    • La communication avec le driver (handle de fichier / lien symbolique /IOCTL / IRP)
    • Le principe des hook (ce qu'est un hook, hook en kernel mode de la table SSDT principalement, mais il y en à d'autre).
    Tu trouvera de l'aide principalement dans Windows Driver Kit de la MSDN.
    Si tu installes le DDK de microsoft, une documentation très bien faite te sera proposée.


    PS: Tu ne m'a pas répondu, quel est ton école? (j'aimerai bien me former à l'analyse de malware dans une école mais j'ai du mal à trouver une option correpondant à ses critères).

    Si tu as des question, n'hésite pas.
    Amicalement, sloshy
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par sloshy Voir le message
    Bonjour,
    Agony étant un rk éducatif, je suppose que c'est un binaire fourni.
    Je comprend pas très bien le sens de ta phrase. Tout ce que je peux dire c'est que on ma file le .exe et "allez amusez vous". C'est juste en analysant la ressource (qui se trouve etre un PE à cause du MZ caractéristique) que j'ai découvert à plusieurs reprises le mot agony et quand allant voir sur google on trouve facilement des infos dessus. Mais on joue le jeu et on cherche à savoir comment il marche de nous même, snas matter quelconque description ou source dispo.
    Citation Envoyé par sloshy Voir le message
    Avant même d'envisager de disasm ton driver, je pense qu'il est necessaire de te renseigner sur ses differents points:
    • Le chargement du rootkit (via SCM)
    • La communication avec le driver (handle de fichier / lien symbolique /IOCTL / IRP)
    • Le principe des hook (ce qu'est un hook, hook en kernel mode de la table SSDT principalement, mais il y en à d'autre).
    Tu trouvera de l'aide principalement dans Windows Driver Kit de la MSDN.
    J'ai déjà effectué un reverse complet de l'exe (interface) qui communique avec le driver, notamment la creation/installation/mise en route du service via le SCM, l'ouverture d'un handle vers le driver et l'ecriture du code via DeviceIoControl. Je suis en trian de lire comment fonctionne la reception et le traitement des codes au niveau du driver. Après, en fonction des instructions reçues, des hooks sont créés mais ça sera pour la prochaine étape. Je préfère faire du pas à pas plutot que d'assimiler plein de notions que je ne maitriserais pas par la suite.
    Citation Envoyé par sloshy Voir le message
    Si tu installes le DDK de microsoft, une documentation très bien faite te sera proposée.
    Je pensais que cette version était payante, j'ai mal du lire.

    Cette partie est hors sujet mais en réponse a sloshy
    Citation Envoyé par sloshy Voir le message
    PS: Tu ne m'a pas répondu, quel est ton école? (j'aimerai bien me former à l'analyse de malware dans une école mais j'ai du mal à trouver une option correpondant à ses critères).

    Si tu as des question, n'hésite pas.
    Amicalement, sloshy
    je suis en M2 pro sécurité de l'information/cryptographie/internet à Limoges. L'étude se fait sur un projet personnel par binome. On a choisi notre sujet et un ancien de la promo nous a donné ce rootkit. Mais la quasi totalité de ce que j'ai appris s'est faite en dehors des cours (simple curiosité qui s'est avéré être un debut de "passion" ^^). Je ne suis pas sûr qu'il y ait un cursus spécialement dédié à ce genre de chose. J'ai beau être dans une filièere spécialisée sécu (systemes/réseaux/crypto) et j'ai pas vraiment l'impression d'avoir appris bcp de chose par les enseignants (à par les intervenants extérieurs comme fred reynal qui nous apprennent pas mal de choses). Mieux vaut t'orienter vers un cursus spé sécu systeme uniquement, mais je ne suis pas sur que ça existe (la fac reste encore à mon gout trop généraliste), mais bon, faut bien apprendre des choses et être polyvalent (quite a avoir par la suite une formation) plutot que d'être bloqué toute sa vie dans une spé qui par la suite ne te plaira peut etre plus. Après t'as les stages et les projets pour te focaliser sur un sujet qui te tiens plus particulierement à coeur
    Après, on peut toujours en reparler pr MP je susi dispo pour répondre aux questions.

  10. #10
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Merci de tes réponses, évolue à ton aise et repasse quand tu le souhaites si tu as des questions !
    Je pense que le sujet peut être mis en resolu
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    résolu je pense pas encore, j'aurrai surement d'autres questions :p

    edit: en fait si, le reste dépassera un peu le sujet du topic :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2015, 19h18
  2. [Service] Soucis avec les Timers -- temporisateurs
    Par lordhurukan dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/01/2008, 16h46
  3. Communication Service / Interface avec les messages Windows
    Par wstboss71 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 03/09/2007, 00h45
  4. Problèmes avec les Services Intenet windows(IIS)
    Par mikawell3000 dans le forum C#
    Réponses: 1
    Dernier message: 26/07/2007, 11h55
  5. Problèmes avec les services NT/Windows 2000
    Par newfsch dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 02/03/2006, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo