 Dans cet article je vais vous exposer quelques pratiques connues, d'autres moins connues qu'utilisent certains hackeurs (toute catégorie confondue, scripts kiddies compris) pour infiltrer de manière la plus discrète possible nos chers systèmes d'exploitation Windows. Je ne déballerai aucune faille pour accéder de manière frauduleuse à tel ordinateur, je ne vous présenterai que des techniques qui supposent un accès administrateur atteint par une quelconque technique d'escalade de droits. Ces techniques ne préjudicent aucunement la stabilité du système théoriquement. Bien entendu, tout ceci n'est qu'informel, je décline toute responsabilité si vous dégradez un quelconque système avec ces pratiques.
I Serv-U en guise de trojan
Il est bon à savoir que depuis nombre d'années, le serveur ftp Serv-U reste le plus fidèle allié du script kiddie. En effet, on ne compte plus les versions modifiées de cette fameuse application afin de leurrer les anti-virus. Ce dernier permet d'obtenir simplement un accès administrateur sur une machine. Le tout est de renommer judicieusement l'exécutif afin qu'il se noit de manière homogène parmi tous les processus déjà existants. Le grand classique est de le nommer svchost.exe, ou un autre processus essentiel au bon fonctionnement de Windows. La plupart du temps, on le retrouve dans le répertoire %systemroot%/system32. Une autre astuce peu connue est de rajouter à la fin de l'extension un caractère spécial tel ' ' ; cela semble un espace mais ça ne l'est pas. Un espace est automatiquement supprimé lorsqu'on l'intègre à la fin ou début d'un fichier. Bref, avec ce caractère spécial à la fin il est possible d'insérer un fichier svchost.exe à côté du vrai svchost.exe. Avouez que vous ne terminer pas souvent un processus nommé svchost.exe se trouvant dans system32 - dans le gestionnaire des tâches le caractère spécial ne se voit pas et cela n'empêche absolument pas le programme de fonctionner correctement. Un programme peut très bien se lancer avec une extension .dll par exemple. Le serveur ftp Serv-U se constitue habituellement d'un exécutif, d'un fichier de configuration, deux librairies DLL pour les connexions sécurisées en SSL, un fichier pour la clé publique, un autre pour la clé privée et un fichier qui se créer lors du lancement de l'application. Tous ses fichiers peuvent prendre des noms et des extensions aussi variés que l'imagination humaine le permet. Il n'est pas rare de trouver des fichiers de configuration en extension .exe notamment et dans un chemin différent de celui de l'exécutif. Pour brouiller encore plus les traces, les lignes de configuration peuvent très bien se noyer parmi un amas de ligne de commande ne voulant absolument rien dire. L'application détecte automatiquement les lignes la concernant. Autre problématique ; notre exécutif doit pouvoir se lancer automatiquement à chaque redémarrage de l'ordinateur hôte. Ainsi, il sera nécessaire de créer un service dédié à cette tâche. Dans la même optique, trouver un nom de service anodin semble idéal. Il n'est pas rare de trouver des noms tels "Windows Update" pour contrôler le lancement du serveur ftp. Un outil présent dans la plupart des systèmes Windows est très utile pour ce genre de chose, j'ai nommé SC.EXE. SC.EXE
Il s'agit d'un programme utilisable par l'invite de commande pour communiquer avec les controlleurs de services et les services installés. Il se trouve en général là : %windir%/system32/sc.exe. Vous trouverez en français un descriptif complet des fonctionnalités ici : http://technet.microsoft.com/fr-fr/library/sc. Usage : sc <serveur> [commande] [nom du service] <option1> <option2>... Voici une liste non-exhaustive des commandes disponibles :
query, queryex, start, pause, interrogate, continue, stop, config, description, failure, sidtype, qc, qdescription, qfailure, qsidtype, delete, create, control, sdshow, sdset, showsid, GetDisplayName, GetKeyName, EnumDepend... Comme vous pouvez le voir, cet outil propose de nombreuses options plus ou moins utiles à notre niveau. Celles qui vont nous intéresser particulièrement sont SC START, SC STOP, SC CONFIG, SC DESCRIPTION, SC FAILURE.
Tout d'abord pour créer le service, Serv-u bénéficie d'une commande dédiée : servu.exe /i. Cette dernière créé le service qui a été noté lors de la compilation de l'éxécutif. Une fois le service créé, on peut lancer le service via la commande NET START NomService ou SC START NomService (SC STOP NomService pour l'arrêter). Pour le cas où le nom du service ne plaît pas totalement, il y a possibilité de le modifier partiellement avec la commande : SC CONFIG NomService error= ignore DisplayName= "System Event TLS/SSL". Vous remarquerez l'option "error" qui évitera qu'un message s'affiche à l'écran si par malheur le service ne se lance pas correctement au démarrage de l'ordinateur. De plus, l'option CONFIG permet de définir un certain nombre de dépendance qui obligerait le service d'être démarré seulement après que tel service le soit également. L'idée là est que pour l'arrêt du service, tel service devra être éteint avant l'arrêt de notre service. Si le service dépendant est un service essentiel au bon fonctionnement de Windows, il n'est dans l'intérêt de personne d'arrêter le service sujet à dépendance. Voici une commande type pour ce genre d'option : SC CONFIG RPCSs depend= NomService. Une autre option intéressante est SC FAILURE. Cette dernière définit une action lors de l'arrêt inopiné du service. Par exemple SC FAILURE NomService actions= restart/500 reset= 10 fera en sorte que le service redémarre une demi seconde après la panne. L'option reset déclare la durée de la période en seconde pendant laquelle aucune panne ne se produit et après laquelle le compteur doit être remis à zéro. Les deux options ACTIONS et RESET doivent être utilisées en combinaison. Les services sont souvent accompagnés d'une description relatant l'utilité de ce dernier. SC DESCRIPTION permet de remplacer la description par défaut lorsqu'il y en a une. Par exemple : SC DESCRIPTION NomService "Notifies selected users and computers of administrative alerts..." Les commandes SC CREATE, SC DELETE, SC QUERY sont aussi bien utiles ; je ne développerai pas car c'est hors sujet. D'autres outils existent pour modifier des services. Certains méritent quelques petites lignes ; ils ne sont pas classés par ordre d'intérêt. XNET.EXE Cette outil a été développé par un ingénieur de Mircrosoft. Il permet tout un tas de choses également. XNET 1.07
Usage : XNET <Start | Stop | Restart | Pause | Continue | List | Install | Remove | Modify | Reboot | Shutdown | Help> Il permet également de contrôler un service à distance ou non. La commande la plus intéressante reste XNET MODIFY dans notre cas. Usage : XNET MODIFY [[\\Server\]NomService] [/u:User] [/p:Password] [/b:Binary] [/d:Dependencies] [/i:Interactive] [/l:LoadOrderGroup] [/n:DisplayName] [/s:StartType]
NomService - nom du service, optionnellement précédé du nom de la machine distante (ex : \\REMOTE\MSSQLServer). User - Compte utilisateur à assigner au service. Spécifier 'LocalSystem' pour assigner un compte système. Password - Mot de passe du service. Binary - Nom de l'exécutable. Dependencies - Dépendances du service. Interactive - Spécifier Yes ou No pour permettre au service d'intéragir avec le bureau. LoadOrderGroup - LoadOrderGroup du service. DisplayName - Nom à rallonge du service. StartType - Indique quand un service sera démarré. Les valeurs possibles sont 'auto' (se lance au démarrage de l'ordinateur), 'demand' (se lance à la demande) and 'disabled'. Pour l'exemple, on peut écrire ce genre de ligne : xnet Modify NomService /d: RPCSs /i: no /n:"System Event TLS/SSL" /s: auto. SM.EXE Cet outil est plus sommaire que les précédent mais reste pas moins utile. Service Manager - D.D.Fairhurst [Xan] - v0.1 Usage : Installer: sm.exe -i <exe_file> <service_name> <service_display_name> Effacer: sm.exe -r <service_name> Changer: sm.exe -c <service_name> <new_display_name> Info: sm.exe -n <service_name> Lister: sm.exe -l [match_text] Par exemple pour remplacer un nom de service à rallonge : SM -c NomService "Windows Updates". INSTSRV.EXE Voici un utilitaire qui permet encore d'installer ou effacer des services Windows. INSTSRV <service name> (<exe location> | REMOVE) [-a <Account Name>] [-p <Account Password>] Rien de transcendant mais il a le mérite d'exister. SETACL.EXE Ce programme permet de modifier les ACL de manière simple. Sans doute que l'on peut faire plus de choses avec l'outil fourni par Windows : CACLS.EXE mais je ne m'en suis pas intéressé pour ce qui nous intéresse là du moins. L'idée ici est d'attribuer ou de retirer des droits sur un exécutif ou service. SetACL.exe 0.904 by Helge Klein www.helge.mynetcologne.de/setacl
Usage: SetACL.exe <object name> <object type> <action> <trustee> <permissions> [/i:<inheritance>] [/p:<inh. from parent>] [/r:<recursion>] [/sid] [/silent] Une version 2.x est développé depuis sous licence GPL, supportant entre autres les architectures 64bits. L'outil a été totalement refait depuis la version 0.904. Vous pourrez en savoir plus sur la nouvelle version ici : http://setacl.sourceforge.net. SETACL NomService /service /set Administrators /read Cette dernière commande ne laisse le droit aux administrateurs qu'à la lecture. Il est donc retiré le droit de contrôle total sur le dit service. ATTRIB.EXE Outil natif de Windows permettant d'afficher ou de modifier des attributs de fichier. ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[lect:] [chemin] fichier] [/S [/D]]
+ Définit un attribut. - Efface un attribut. R Attribut de fichier en lecture seule. A Attribut de fichier archive. S Attribut de fichier système. H Attribut de fichier caché. [Lecteur:][Chemin][NomFichier] Spécifie le ou les fichiers que ATTRIB doit traiter. /S Traite les fichiers dans le dossier courant et dans tous les sous-dossiers. /D Traite aussi les dossiers. Il s'agit de modifier les attributs de fichiers sensibles afin qu'ils ne soient visibles de l'utilisateur lambda, simple garde fou en somme. exemple : attrib +s +h +r %systemroot%\system32\truc.exe. TOUCH.EXE Cet outil, aussi anodin qu'il puisse paraître est fort utile même s'il ne permet 'que' la modification des dates de création/modification/accès des fichiers ciblés. Utile car beaucoup de personnes suspectant une activité non légitime sur leur ordinateur trient les fichiers selon les dates afin de repérer rapidement les programmes indélicats. À nouveau, cet outil sert également de simple garde fou. Usage: touch.exe [OPTION]... FILE...
-a change only the access time -c do not create any files -d, --date=STRING parse STRING and use it instead of current time -f (ignored) -m change only the modification time -r, --reference=FILE use this file's times instead of current time -t STAMP use MMDDhhmm[[CC]YY][.ss] instead of current time --time=WORD access -a, atime -a, mtime -m, modify -m, use -a Exemple : touch -d 04/05/2006 truc.exe. NETSH.EXE Quand je vous disais que je ne classais pas les outils par ordre d'importance. Ici nous avons un utilitaire de Windows très puissant, je ne développerait pas car de nombreuses notices circulent via internet expliquant de long en large les différentes possibilités. Il touche un peu à tout ce qui a trait avec les configurations réseaux.Vous trouverez notammentsur ce site beaucoup d'informations : http://technet.microsoft.com/fr-fr/library/netsh. Dans l'immédiat, je vous montre juste comment intéragir sur le firewall de Windows via cette utilitaire. Utilisation : netsh [-a Fichier alias] [-c Contexte] [-r Machine distante] [Commande | -f Fichier Script] et plus précisément : netsh firewall /? add - Ajoute la configuration du pare-feu. delete - Supprime la configuration du pare-feu. dump - Affiche un script de configuration. help - Affiche une liste de commandes. reset - Active la configuration par défaut du pare-feu set - Définit la configuration du pare-feu. show - Affiche la configuration du pare-feu. netsh firewall add /? add allowedprogram - Ajoute la configuration des programmes autorisés par le pare-feu. add portopening - Ajoute la configuration de port du pare-feu. Comme un exemple vaut mieux que de belles paroles : Netsh firewall add allowedprogram program="c:\windows\system32\truc.exe " name="NomService" mode= ENABLE Netsh firewall add portopening protocol = ALL port = 54321 name = NetBios mode = ENABLE II Pour aller plus loin, voici quelques outils utiles
WINFW.EXE Dans la même lignée que 'netsh firewall', cet outil permet de modifier les paramètres du firewall de Windows. WinFW v0.1, (C)
Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
--------------------------------- winfw.exe [conf | icmp | port | app | srv | show | export] [options]
conf firewall configuration. icmp icmp settings. port open ports. app authorized applications. srv configured services. show show active settings. export exports current config. INX.EXE De nouveau un utilitaire dédié à traficoter des services (...entre autres petites choses intéressantes). Inx 0.3 by hal For 2k/XP/2003
Usage : Inx -pshdunmwi -[lkdamf] [] [] -p : Processus Listing -k [PID 1]...[PID n]: Kill Processus -s : Service Listing -d [NAME_SERVICE] : Start a Service -df [NAME_SERVICE] : Force Start a Service | Can cause damage on this computer -a [NAME_SERVICE] : Stop a Service -af [NAME_SERVICE] : Force Stop a Service | Can cause damage on this computer -k [NAME_SERVICE] : Kill a Service -m [NAME_SERVICE] [TYPE]: Modify a Start Type of Service 0 -> BOOT_START 1 -> SYSTEM_START 2 -> AUTO_START 3 -> DEMAND_START 4 -> DISABLED -d : Drive Listing -u : Users and Groups Listing -n : Network Adaptater Listing -m : Share Listing on Local Computer -i : Netstat tcp/upd Listing -w : System Information Listing -b : Shutdown the Computer -b [TYPE] : Type of Shutdown 0 -> SHUTDOWN 1 -> REBOOT PV.EXE Voici là un petit programme en ligne de commande pour changer jouant sur les process des fichiers. pv displays information about the running processes. pv v 3.11.1.1, Copyright (c) Igor Nys, 2000-2005.
Usage: pv -[<MODE>] -[<OPTIONS>] <ARGUMENTS>...-[<OPTIONS>]
Modes: -s --summary show usage for the specified MODULE -h,-? --help display this help information
Actions: -k --kill kill process -a --activate brings process main window in the foreground -c --close close (send WM_CLOSE) to the PROCESS -p[nihr] --priority set priority to "Normal", "Idle", "High", "Real Time" [ba] "Below Normal" and "Above Normal" only on W2K or higher
Output Options: -e, --extend show additional information if available -l, --long show command line (can also be a filter) -q, --quiet supress headers and produce a tab-separated list -b --bare show process ID only ()
Input Options: -f, --force never prompt -i, --id use process ID instead of the PROCESS name
Filters: -l[mask] --long include processes with command line matching mask -w[mask] --window show processes with visible windows matching mask, -e includes in search also invisible windows -u[mask] --usage show processes using modules that matches mask -t[root] --tree display process tree starting starting from the root
Extra Information Options: -g --getenv get startup environment for the PROCESS -m --module show modules used by specified PROCESS
Execution Options: -d[time] --delay delay time in milliseconds before executing command -r[err] --repeat repeat command in a cycle, while (%ERRORLEVEL% > err) -n --number %ERRORLEVEL% = negated number of matched processes -x[a] --exit wait for the process completion (exit) 'a' flag waits for all processes, -d sets time-out -@[file_name] read arguments from specified file or from standard input after processing the command line
Arguments can contain '*' and '?' wildcards.
Use return code (%ERRORLEVEL%) in batch files: 0 - process found (negated number of processes if -n is specified) 1 - empty result set, 2 - programm error
Exemples : pv truc.exe récupère l'ID du processus pour truc.exe. pv -e récupère une liste détaillée des processus actifs. pv -k sleep* termine tous les processus commencant par "sleep". pv -m -e explorer.exe récupère des informations détaillées sur les modules de l'explorateur. pv -u oleaut*.dll liste tous les processus utilisant telle dll. pv -ph w*.exe définit une priorité haute pour les processus ciblés. pv -r0 -d2000 calc.exe "2>nul" vérifie toutes les 2 secondes si calc.exe est lancé. HKIT.EXE Cet utilitaire est une petite mine d'or à lui seul. Voyez par vous même les possibilités : HaX0R'Z KiT -- v1.05 -- (x) 2003 -- right toolz fo tha right job ;)
syntaxe :
process manager: /process /list -- show process list /tree -- show process tree /mod [pid|name] -- list modules /adjpriv pid|name [...] -- try to enable all privileges /kill pid|name [...] -- terminate process /sfpdisable -- disable SFP (2K/XP,takes effect immediately) /sfpenable -- enable SFP (if disabled) /patch pid|name hexoffs hexbyte(s) -- patch process (often with CC) /dump pid|name dumpfile -- save process' memory contents /physmem dumpfile -- save physical memory contents
service manager: /service /list [\\machine] [service] [/all] /info [\\machine] [service] [/all] /create [\\machine] service ServiceExePath [/auto|/demand] /createkd [\\machine] service DriverExePath [/auto|/demand] /delete [\\machine] service /start [\\machine] service /stop [\\machine] service /pause [\\machine] service /continue [\\machine] service /boottype [\\machine] service /auto|demand|boot|system|disabled
packet-related: /crcpkt inpacketfile [outpacketfile] -- recalc packet crc (IP/ICMP/UDP/TCP) /spoofer packetfile [ntimes|0=infinite] [dst_ip] /sniffer outfile|basepath|NULL [option(s)] /input=<infile> specify input file (do not sniff) /insnort infile is in SNORT format (scan broken files) /int=<ip> specify interface IP to sniff on /1 merge output packets to single file /r reconstruct TCP sessions (sucks) /s strip TCP/IP headers /rt,/wt read/write timestamp (8 bytes) /rl,/wl read/write packet len (4 bytes) /tcp|udp|icmp+|- include/exclude tcp/udp/icmp packets /ip+|-<ip_mask> include/exclude ip 4ex: /ip+195.*.*.* /ip=<ip>,alias define IP name /v dump packet headers to console (line per packet) /http dump http requests/answers /dns dump dns requests/answers /opt dump current options at startup /q quiet /log=logfile set log file /f flush data to disk immediately NOTE:opt.priority: (1)curdir\hkit.cfg OR (2)path\argv[0].cfg,(3)cmdline NOTE:some options are incompatible with each other ;-)
pinger: /scanner/flooder/spoofer: (based on raw-sockets) /ping [option(s)] <pktdst_ip|hostname> -t Ping the specified host until stopped. -n count Number of echo requests to send. -l size Send buffer size. -d "data" specify payload data -x file take payload data from file -type N specify icmp type/code (default=8/0=icmp echo req) -code N --//-- -f Set Don't Fragment flag in packet. -i TTL Time To Live. -v TOS Type Of Service. * -j host-list Loose source route along host-list. * -k host-list Strict source route along host-list. -w timeout Timeout in milliseconds to wait for each reply. -pktsrc addr specify packet source IP (spoof) -intsrc addr specify source interface IP -intdst addr specify destination interface IP -nw dont wait for reply (flood) -scan scanner. '-n count' specifies address count -fastscan parallel scanner
registry: /reg [option(s)] keyword(s) /dumpall -- dump all registry data. keywords are ignored /findascii -- find in ascii format only /findunicode -- find in unicode format only /finddup- -- dont search in the HKLM and HKCU /key- -- do not search keywords in key names /value- -- do not search keywords in value names /data- -- do not search keywords in data /c -- case sensitive (default is insensitive) /all -- all keywords must match (default is at least one) /outfile=fname -- specify output file. default is 'hkit.reg' /outascii -- output format is ascii (REGEDIT4) [default] /outunicode -- output format is unicode (REGEDIT5) /showerrors -- show errors returned by reg api functions /text- -- disable dump of ascii text for hex data /fillout -- fill output data: strings with X'es, other with 0's
disassembler: /trojanizer: /revert infile [outfile] [--option[-] [...]] --dump-msg dump debug messages --dump-log dump debug log --dump-disasm dump disassembly --dump-try dump internal code analysis results --try-dref try to determine subroutines --try-relref search for relative references --failbadop fail when bad opcode found --codefirst assume code in 1st section only --stdsect standard section names only --imagebase:xxxxxxxx change imagebase --mode=<nop|hooy> insert NOP between instructions (default) --mode=virus:filename insert code snippet into file (specify bin file) --virus-va:xxxxxxxx specify VA for code insertion
binary-->ascii conversion: /bin2src </bin|/asm|/cpp|/pas> infile [outfile] [@lbl] [/S=id /E=id] [/q] /bin2bat infile [outfile [targetfile]] -- infile can be of any size
fake exec: /fakeexec source destination source: real.exe || "ping www.microsoft.com -t" || <real_pid> destination: faked.exe || <faked_pid>
api <--> crc: /crc /dll2crc dll /dll2api dll api_mask /api2crc api /crc2api dll crc:hex
other: /showpass -- show cached password (NT/2K only) /md5 -- [phrase|binary_filename [...]] /http <target_ip> <target_port> <connect t.o.> <recv t.o.> request_file /iislog -- clean IIS logs (no need to stop server) /savehkcu hkcu.reg -- save HKEY_CURRENT_USER into specified binary file /error N:dec [...] -- [WSA]GetLastError --> description /nterror N:hex [...] -- ntstatus --> description /telnetd ip port -- listen on ip:port (ip can be 0) Malheureusement (ou heureusement) cet outil est détecté par tous les anti-virus d'aujourd'hui (comme le suivant). YO.EXE
Utilitaire pour le moins intéressant conçu par un codeur renommé. +---------------------------+ | HackingTools by ScriptGod | +---------------------------+ | [17.11.04] | +---------------------------+ [+] USER MODE rootkit defender starting... [-] reloading code data... [-] reloading IAT... usage: yo.exe [command] <parameter1> <parameter2> ... commands: sysinfo - shows system informations cadmin - create an admin user plist - shows running processes pkill - kills a process pmod - lists the loaded modules of a process pexec - executes a command line pexecp - executes a command line (setable parent by process id) pexecp2 - executes a command line (setable parent by process name) injmod - loads a dll into a process (by process id) injmod2 - loads a dll into a process (by process name) freemod - frees a dll in a process sysmod - list the loaded system kernel modules freesmod - frees a loaded system kernel module hclose - closes a handle in a process infect - modifies an exe file to load a specified dll file on start slist - shows services sstart - starts a service sstop - stops a service sdelete - removes a service sstrcfg - sets a service startup config sdspcfg - sets a service display name sdesccfg - sets a service description lads - lists the alternate data streams of files in a directory dir - lists a directory content mkdir - creates a directory rmdir - removes a directory tag - "tags" a directory copy - copies a file into another (also ntfs streams) copydriv - same as copy but in ring0/driver filetime - sets a file creation and last write time specdacl - forbids access to a filder except of one user (e.g. system) eregval - enumerates values of a registry key dregval - deletes a registry value dregkey - deletes a registry key autorun - adds a registry autorun evtlog - clears the system event log (NOT logfiles!) shutdown - shutdowns windows fservu - finds the serv-u process ports - shows LISTENING ports wfp - terminates the Windows File Protection worker thread wfp2 - disables the Windows File Protection of the system directory wfpboot - disables the Windows File Protection boot scan pwdcache - displays the cached passwords in winlogon (Win2k) pwdump - displays the user password hashes of the SAM database secdump - displays the lsa secrets download - downloads a file from an url cfg - change hackingtools config dummyp - runs a dummy process and loads a dll pmem - searches value(s) in virtual memory of a process email - send a email with or without an attachment scrcap - captures the screens ownz - shows a penetrating screen for some time rdaemon - register an daemon service cdaemon - change a daemon config file (don't use with other services) _sdaemon - <daemon service routine - don't use> Cet article est un échantillon d'activités possibles dont certains pirates usent et abusent pour contrôler des ordinateurs stratégiques. Je ne fais pas mention de rootkit, ce sera peut-être le sujet d'un prochain article. Une dernière remarque, ces techniques ne s'utilisent pas seulement pour leurrer les administrateurs des systèmes mais je dirais surtout pour éviter à d'autres pirates de casser tout le'travail' effectué. En effet, le manque de respect total du 'travail' d'autrui est omniprésent parmi ces personnes là...
|