HSC
Cabinet de consultants en sécurité informatique depuis 1989 - Spécialisé sur Unix, Windows, TCP/IP et Internet
Mode texte : accès au contenu de la page
Hervé Schauer Consultants
Vous êtes ici : Accueil > Ressources > Brèves > Administration distante de systèmes Windows (Partie 2) - rpcclient
Accéder au : Site HSC des formations
Télécharger le catalogue des formations
Recherche :  
English version
   Services   
o Domaines de compétences
o Conseil & Expertise
o Prestations ISO 27001
o Audit & Évaluation
o Tests d'intrusion
o Tests de vulnérabilités (TSAR)
o Analyse Forensique
o Certification ARJEL
o Formations
o E-learning
   Conférences   
o Agenda
o Interventions passées
o Tutoriels
   Ressources   
o Index thématique
o Brèves
o Présentations
o Cours
o Articles
o Outils (téléchargement)
o Veille en vulnérabilité
   Société   
o Hervé Schauer
o Equipe
o Offres d'emploi
o Références
o Historique
o Partenariats
o Associations
   Presse et
 communication
 
 
o Newsletter HSC
o Bulletin juridique HSC
o Revue de presse
o Communiqués de presse
o Publications
   Contacts   
o Coordonnées
o Requêtes particulières
o Accès à nos locaux
o Hôtels proches de nos locaux
|>|Administration distante de systèmes Windows (Partie 2) - rpcclient  

par Jean-Baptiste Marchand (18/02/2002)



	Administration distante de systèmes Windows en ligne de commande
     Seconde partie : administration distante avec rpcclient (Samba TNG)

-=[ Introduction ]=------------------------------------------------------------

Après avoir abordé l'administration à distance de systèmes Windows avec ssh,
nous présentons l'outil rpcclient, du projet Samba TNG ([1]). Cet outil en
ligne de commande permet, depuis une machine Unix, de réaliser un certain nombre
de tâches d'administration sur un système Windows distant.

-=[ RPC d'administration Microsoft ]=-------------------------------------------

La plupart des outils d'administration fournis sur les systèmes Windows peuvent
fonctionner indifféremment sur le système local ou sur un système distant. Par
exemple, l'éditeur de la base de registres permet de se connecter à un système
distant via la fonction 'Connect Network Registry'. De même, le gestionnaire de
services de Windows 2000 peut gérer les services d'un système distant.

Lorsqu'ils opérent sur des systèmes distants, les outils d'administration
utilisent les RPC d'administration Microsoft. Les RPC, en anglais Remote
Procedure Call, offrent un mécanisme permettant à un client d'invoquer à
distance des procédures, exécutées sur un serveur distant. Ce mécanisme a été le
premier standard permettant de réaliser des applications distribuées. 

Dans Windows, les RPC sont _notamment_ utilisés pour réaliser des fonctions
d'administration distante. Le mode de fonctionnement est le suivant :
 - le client se connecte au serveur et s'authentifie
 - le client demande l'exécution d'une procédure, en fournissant des paramètres
 - le serveur exécute la procédure, qui réalise une fonction d'administration
 - le client récupère le résultat de l'exécution de la procédure par le serveur

 -=[ Projet Samba ]=-

Le projet Samba ([2]) a débuté fin 1991 ([3]), avec pour but de mettre en oeuvre
sur les systèmes de la famille Unix les protocoles utilisés par les systèmes
Windows pour les fonctionnalités de partage de ressources et d'authentification
réseau.  Ces protocoles sont essentiellement NetBIOS et SMB (Server Message
Block). 

Le projet Samba a notamment travaillé à la mise en oeuvre du protocole SMB,
protocole utilisé pour le partage de ressources. Les développeurs Samba ont
étudié et mis en oeuvre ce protocole complexe, en aidant au passage Microsoft 
à corriger un nombre certain de bogues ou vulnérabilités. 

Pour émuler un contrôleur de domaines Windows sur un système Unix, Samba a dû
étudier le fonctionnement des mécanismes d'authentification distante des
utilisateurs. C'est dans ce cadre que le fonctionnement des RPC Microsoft a été
découvert.

La mise en oeuvre des RPC Microsoft dans Samba a débuté en Juillet 1997. Un
travail considérable d'ingénieurie à rebours a été entrepris pour découvrir
les procédures à distance les plus importantes, pour offrir un sous-ensemble
intéressant des fonctions d'administration existantes. Ce travail est largement
documenté dans un ouvrage, DCE/RPC over SMB - Samba amd Windows NT Domain
Internals, écrit par Luke Kenneth Casson Leighton, principal architecte de ce
travail colossal.

En Octobre 2000, un sous-projet de Samba, Samba TNG, s'est créé, ayant pour but
d'intégrer plus rapidement de nouvelles fonctionnalités, chose qui n'était plus
possible dans Samba. Samba TNG doit donc être vu comme la branche expérimentale
et, à ce titre, la plus avancée. 

Nous présentons la version Samba TNG de rpcclient puisqu'elle dispose de plus de
fonctionnalités que celle intégrée actuellement dans Samba.

 -=[ Fonctionnement ]=-

Techniquement, les RPC d'administration sont transportés dans le protocole SMB.
Les différentes fonctions d'administration sont accessibles via des fichiers
spéciaux appelés tubes nommés, regroupés dans un partage spécial appelé IPC$. 
Les fonctions d'administration offertes par les interfaces de programmation
standards de Windows réalisent en fait des opérations (ouverture, lecture,
écriture, fermeture) sur ces tubes nommés, en utilisant le protocole SMB. 

Un outil tel que pipelist ([4]) permet de lister tous les tubes nommés ouverts
sur une machine locale. 

Parmi les tubes nommés les plus communément utilisés en administration se
trouvent :

 \pipe\eventlog : gestion à distance des journaux
 \pipe\lsarpc : gestion à distance de la LSA
 \pipe\samr : gestion de la base SAM 
 \pipe\spoolss : gestion à distance des imprimantes partagées
 \pipe\srvsvc : gestion à distance du service serveur
 \pipe\svcctl : gestion à distance des services
 \pipe\winreg : accès à distance à la base de registres
 \pipe\wkssvc : gestion à distance du service workstation

Pour observer le fonctionnement des RPC d'administration sur le réseau,
l'analyseur réseau le plus adéquat est Ethereal ([5]), qui sait décoder ces
RPC d'une façon relativement complète. 


-=[ rpcclient ]=----------------------------------------------------------------

 -=[ rpcclient : généralités  ]=-

rpcclient est un outil en mode texte permettant de se connecter à un système
Windows distant et d'y effectuer des tâches d'administration.

Pour se connecter à un système distant, il est possible de :
 - désigner le système par son nom NetBIOS (sous la forme \machinename)
 - désigner le système par son adresse IP (option -S)

Si possible, il est préférable de se connecter à un système en donnant 
directement son adresse IP, ce qui évite de passer par une résolution de nom 
NetBIOS.

Un nom d'utilisateur et le mot de passe doivent être spécifiés pour se connecter
au système distant, avec l'option -U suivie de 'login' ou 'login%password'. Si
le mot de passe n'est pas spécifié, il sera demandé de façon interactive. 

Note : 
 - Il est possible de se connecter avec une session nulle, en passant la chaine '%' à l'option -U. 
 - Il est possible de spécifier le domaine avec l'option -W.

rpcclient propose deux modes de fonctionnement :

 - un mode interactif, avec une invite permettant de saisir des commandes et
   d'en voir les résultats. C'est le mode par défaut.
 - un mode non-interactif, utilisable avec l'option '-c', suivie d'une liste de
   commandes rpcclient séparées par le caractère ';'. Ces commandes seront
   exécutées et le résultat affiché sur la sortie standard.

Typiquement, une connexion au système d'adresse 192.70.106.143, sous l'identité
administrator ressemblera à :

jbm@garbarek ~> rpcclient -S 192.70.106.143 -U 'administrator'         
added interface ip=192.70.106.76 bcast=192.70.106.95 nmask=255.255.255.224
Enter Password:
Server: \\192.70.106.143:       User:   administrator   Domain:
Connection:     OK
[administrator@192.70.106.143]$

Le mot de passe est saisi de façon interactive et après authentification,
l'invite de rpcclient s'affiche.

 -=[ rpcclient : compatibilité avec Windows 2000 ]=-

A partir de Windows 2000, le protocole SMB peut être transporté directement dans
TCP/IP, supprimant ainsi la couche NetBIOS. Le port TCP utilisé dans ce cas est
le port 445. Lorsque SMB est encapsulé dans NetBIOS, c'est le port 139 qui est
utilisé.

rpcclient ne supporte actuellement que l'encapsulation de SMB dans NetBIOS. Il
est nécessaire d'activer NetBIOS pour que rpcclient fonctionne avec un système
Windows 2000 ou ultérieur.

De plus, rpcclient ne supporte pas le protocole d'authentification réseau
Kerberos, disponible à partir de Windows 2000. Seul le protocole NTLM, en
version 1 et 2, est supporté.


 -=[ rpcclient : commandes (mode interactif) ]=-

En mode interactif, la liste des commandes disponibles peut être obtenue avec la
commande 'help'. 

Pour obtenir de l'aide sur une commande 'cmd', il suffit de taper 'help cmd'.

De plus, si rpcclient est compilé avec GNU readline, la complétion dans les
commandes est disponible, avec la touche Tab (par défaut).

Dans les sections suivantes, nous énumérons les commandes rpcclient, regroupées
par type de fonctions d'administration. Ne sont présentés que la syntaxe des
commandes et pas les sorties, qui sont trop longues pour être reproduites ici.

 -=[ rpcclient : gestion des utilisateurs ]=-

enumusers : liste les utilisateurs

dispinfo : liste de façon détaillée les utilisateurs

createuser : ajoute un utilisateur
 [administrator@192.70.106.143]$ createuser
 createuser: <acct name> [-i] [-s] [-L] [-j domain_name] [-p password]  

deluser : supprime un utilisateur
 [administrator@192.70.106.143]$ deluser
 deluser <user name>

 -=[ rpcclient : gestion des groupes et des alias ]=-

 Manipulation des groupes :
  creategroup : crée un groupe
  enumgroups : liste les groupes
  delgroup : supprime un groupe
  addgroupmem : ajoute un membre à un groupe
  delgroupmem : supprime un membre d'un groupe

 Manipulation des alias :
  createalias : crée un alias
  enumaliases : liste les alias
  delalias : supprime un alias
  addaliasmem : ajoute un membre à un alias
  delaliasmem : supprime un membre d'un alias

 -=[ rpcclient : gestion de la SAM ]=-

Informations sur les comptes :
 samuser : liste les informations d'un utilisateur 
 samuserset : modifie les informations d'un utilisateur :
 samlookupnames : convertit un nom de compte en RID
 samlookuprids : convertit un RID en nom de compte

Informations sur les groupes :
 samgroup : liste les informations sur un groupe
 samgroupmem : liste les membres d'un groupe

Informations sur les alias :
 samalias : liste les informations sur un alias
 samaliasmem : liste les membres d'un alias

 -=[ rpcclient : gestion de la LSA ]=-

lsaenumsids : énumère les SID du système local

 -=[ rpcclient : gestion des domaines ]=-

enumdomains : enumère les domaines locaux
lookupdomain : récupère le SID d'un domaine local
dominfo : récupère les informations sur un domaine
domtrust : affiche les relations de confiance entre domaines

 -=[ rpcclient : gestion des services ]=- 

svcenum : liste les services installés 
 [administrator@192.70.106.143]$ svcenum

svcenum -s : affiche le statut actuel des services 
 [administrator@192.70.106.143]$ svcenum -s

svcenum -i : affiche la configuration des services 
 [administrator@192.70.106.143]$ svcenum -i

svcinfo : affiche la configuration d'un service donné
 [administrator@192.70.106.143]$ svcinfo service_name

svcstart : démarre un service, avec des arguments éventuels 
 [administrator@192.70.106.143]$ help svcstart
 help svcstart
 HELP svcstart:
        <service> [arg 0] [arg 1] ... Start Service 
 
svcstop : arrête un service 
 [administrator@192.70.106.143]$ svcstop service_name

 -=[ rpcclient : gestion des journaux ]=-

eventlog : par défaut, affiche le contenu du journal application. Peut également
afficher le contenu d'un autre journal, dont le nom est fourni en paramètre de 
la commande.

 -=[ rpcclient : accès à la base de registres ]=-

regcreatekey : crée une nouvelle clé
regcreateval : crée une nouvelle valeur
regdeletekey : supprime une clé
regdeleteval : supprime une valeur
regenum : enumère le contenu (sous-clés et valeurs) d'une clé
regquerykey : récupère le contenu de la valeur non-nommé d'une clé
regqueryval : récupère le contenu d'une valeur

La complétion fonctionne avec ces commandes, ce qui évite d'avoir à retenir les
chemins exacts dans la base de registres !

 -=[ rpcclient : manipulation des tâches programmés ]=-

at : ajoute une nouvelle tâche 
 [administrator@192.70.106.143]$ at 00:00:00 /every:day cleanup.vbs

at : liste les tâches 
 [administrator@192.70.106.143]$ at

at : supprime une tâche, à partir de son identifiant de tâche 
 [administrator@192.70.106.143]$ at del 1

 -=[ rpcclient : gestion du service serveur ]=-

Service serveur : 
 srvinfo : récupère des informations sur le service serveur 
 srvtransports : récupère la liste des transports sur lesquels le service 
  serveur écoute

Partages :
 srvshares : récupère la liste des partages
 srvshareinfo : récupère des informations sur un partage
 srvshareadd : ajoute un nouveau partage
 srvsharedel : supprime un partage

Utilisation du service serveur : 
 srvconnections : liste les connexions en cours 
 srvfiles : liste les fichiers en cours d'utilisation
 srvsessions : liste les sessions en cours

 -=[ rpcclient : gestion du service station de travail (workstation) ]=-

Service workstation : 
 wksinfo : récupère des informations sur le service workstation


 -=[ rpcclient : gestion des imprimantes ]=-

Plusieurs commandes permettent de gérer des imprimantes partagées en réseau. Les
commandes suivantes sont disponibles :
 spoolenum
 spoolenumdatas
 spoolenumprinterdriver
 spoolgetdata
 spoolgetprinter
 spoolgetprintverdriver
 spoolgetprinterdriverdir
 spooljobs
 spoolopen

 -=[ rpcclient : divers ]=-

time : affiche l'heure du système distant
shutdown : arrête le système distant
abortshutdown : annule l'arrêt du système distant


 -=[ rpcclient : conclusion ]=-

rpcclient permet de réaliser, depuis un système Unix, certaines tâches
d'administration à distance sur un système Windows. Cependant, toutes les
commandes ne fonctionnent pas toujours parfaitement : il faut garder à l'esprit
que rpcclient a exclusivement été écrit en décortiquant, à partir de traces
réseaux, le fonctionnement des RPC d'administration Microsoft, qui sont, encore
à ce jour, complètement non documentés. Il est donc très difficile, si ce n'est
impossible, de gérer tous les cas de figure de façon parfaite. 

D'un point de vue sécurité, il est important de bien comprendre que, derrière le
partage de ressources Windows (Port 139 dans Windows NT 4.0, Port 445 à partir de
Windows 2000), se cachent des tubes nommés qui permettent toutes sortes
d'actions à distance, comme nous l'avons vu avec rpcclient. Les services et
pilotes permettant ceci doivent donc être impérativement désactivés dans des
environnements ouverts, tels que des systèmes accessibles de l'Internet.

Si vous cherchez à faire de l'administration distante à partir d'un système
Windows, signalons l'excellente suite d'outils d'administration PsTools ([6]),
disponible sur le site Sysinternals ([7]), qui offre une dizaine d'outils très
utiles, permettant par exemple de lister la liste des processus ou de configurer
les services d'un système distant.


-=[ Références ]=--------------------------------------------------------------

[1] Samba TNG : (http://www.samba-tng.org/ )
[2] Samba : (http://www.samba.org/ )
[3] samba.history.txt : (http://www.rxn.com/services/faq/smb/samba.history.txt )
[4] pipelist : (http://www.sysinternals.com/ntw2k/info/tips.shtml )
[5] Ethereal : (http://www.ethereal.com/ )
[6] PsTools : (http://www.sysinternals.com/ntw2k/freeware/pstools.shtml )
[7] Sysinternals : (http://www.sysinternals.com/ )

--
Jean-Baptiste.Marchand@hsc.fr

$Id: remote_windows_rpcclient.tip,v 1.8 2002/03/05 10:43:44 marchand Exp $



Dernière modification le 12 novembre 2003 à 13:55:00 CET - webmaster@hsc.fr
Mentions légales - Informations sur ce serveur - © 1989-2013 Hervé Schauer Consultants