Camouflage via le répertoire courant (.) et parent (..)

25
Feb
2013
  • Google Plus
  • LinkedIn
  • Viadeo
Posted by: Yann C.  /   Category: Network and system administration / Invisibility & camouflage / OS / Windows   /   No Comments

Introduction

Pour faire suite au premier article sur Les dossiers spéciaux et le stockage de fichiers invisibles du dossier Trick Or T(h)reat ? L’invisibilité et le camouflage sous Windows, ce nouvel article détaille une structure arborescente de dossier sous Windows assez atypique. Celle-ci permet :

  • De camoufler des fichiers/processus dans un répertoire difficile d’accès
  • L’accès au répertoire est grandement restreint via l’explorer.exe et même via la console
  • Les processus exécutés dans cette arborescence disposent d’un chemin d’accès obfusqué, les rendant difficile à supprimer.

La technique est nouvelle et proviens d’un article de PaulDotCom par Mark Baggett.

L’idée est d’exploiter des répertoires créés et nommés de manière similaire au répertoire courant, noté “.” et répertoire parent, noté “..”. De tels répertoires permettent le stockage de données (fichier/exécutable), ainsi que leur exécution. Toutefois, l’interpréteur de commande ou même l’explorateur graphique auront de grandes difficultés à y accéder.

Création de l’arborescence

Création d’une arborescence à base de répertoire “. ” et “.. ” sous C:\test\ :

[bash]<br />
c:\>md test</p>
<p>c:\>cd test</p>
<p>c:\test>md ". \.. \"</p>
<p>c:\test>dir<br />
Le volume dans le lecteur C s’appelle OS<br />
Le numéro de série du volume est CE03-DF19</p>
<p>Répertoire de c:\test</p>
<p>25/02/2013 15:00 <REP> .<br />
25/02/2013 15:00 <REP> ..<br />
25/02/2013 15:00 <REP> .<br />
0 fichier(s) 0 octets<br />
3 Rép(s) 34 137 341 952 octets libres<br />
[/bash]

Le répertoire C:\test\ contient donc un répertoire “. ” (avec un espace à la suite du point) qui lui même contient un répertoire “.. ” (avec un espace à la suite des deux points). Au niveau de l’affichage du contenu du répertoire C:\test\, on note le répertoire courant “.”, le répertoire parent “..” et notre répertoire “. ” qui vient d’être créé.

Accès aux répertoires de nom “. “

Pour déplacer son prompt en ligne de commande dans le répertoire “C:\test\. “, les syntaxes suivantes sembleraient légitimes.

  • Essai 1 [infructueux] – Interprété comme un déplacement dans le répertoire courant :

[bash]c:\test>cd .<br />
c:\test>echo %cd%<br />
c:\test[/bash]

  • Essai 2 [infructueux] – Utilisation du nom complet du répertoire entre double-quotes, déplacement dans le répertoire courant :

[bash]<br />
c:\test>cd ". "<br />
c:\test>echo %cd%<br />
c:\test<br />
[/bash]

  • Essai 3 [infructueux] – Forcer l’interprétation en tant que répertoire, déplacement dans le répertoire courant :

[bash]<br />
c:\test>cd ". \"<br />
c:\test>echo %cd%<br />
c:\test<br />
[/bash]

  • Essai 4 [fonctionnel] – Accès au premier sous-répertoire de “. ” :

[bash]<br />
c:\test>cd ". \.. \"<br />
c:\test\. >echo %cd%<br />
c:\test\.<br />
c:\test\. >dir<br />
Le volume dans le lecteur C s’appelle OS<br />
Le numéro de série du volume est CE03-DF19</p>
<p>Répertoire de c:\test\.</p>
<p>25/02/2013 15:00 <REP> .<br />
25/02/2013 15:00 <REP> ..<br />
25/02/2013 15:14 <REP> ..<br />
0 fichier(s) 0 octets<br />
3 Rép(s) 34 136 424 448 octets libres<br />
[/bash]

La syntaxe du changement de répertoire indique la volonté d’accéder au répertoire “. \.. “, pourtant il en résulte un accès à “. ” uniquement. Le nom du répertoire “.. ” est interprété par l’invité de commande et non pas comme un véritable nom de dossier.

Accès aux répertoires de nom “.. “

Placer son prompt dans un répertoire nommé “.. ” ne semble pas être faisable. Il est possible de lister le contenu d’un tel répertoire, mais pas d’y accéder directement. Comme vu dans le dernier essai fructueux ci-dessus, l’accès à “. \.. ” renvoi vers “. ” et non pas “. \.. ” bien que demandé. Pour tenter d’accéder à “. \.. “, on peut tester via un nouveau sous-sous-répertoire :

  • Essai 5 [infructueux] – Tentative d’accès à “. \.. ” à partir d’un sous-sous-répertoire :

[bash]<br />
c:\test>md ". \.. \test2"<br />
c:\test>cd ". \.. \test2"<br />
c:\test\. \.. \test2>echo %cd%<br />
c:\test\. \.. \test2<br />
c:\test\. \.. \test2>cd ..<br />
c:\test>echo %cd%<br />
c:\test<br />
[/bash]

Dans cet exemple il est possible de placer son prompt dans un sous-répertoire avec un nom lambda derrière une arborescence de “. ” et “.. “. Toutefois, en tentant de remonter d’un répertoire, un retour à la racine est effectué.

Le répertoire “.. ” semble définitivement inaccessible.

Liste de sous-répertoires “. ” et “.. “

Un “dir /s” suffit pour lister l’ensemble des données de ces répertoires magiques :

[bash]<br />
c:\test>cd ". \.. \"<br />
c:\test\. >dir /S<br />
Le volume dans le lecteur C s’appelle OS<br />
Le numéro de série du volume est CE03-DF19</p>
<p>Répertoire de c:\test\.</p>
<p>25/02/2013 15:00 <REP> .<br />
25/02/2013 15:00 <REP> ..<br />
25/02/2013 15:26 <REP> ..<br />
0 fichier(s) 0 octets</p>
<p>Répertoire de c:\test\. \..</p>
<p>25/02/2013 15:26 <REP> .<br />
25/02/2013 15:26 <REP> ..<br />
25/02/2013 15:23 <REP> test2<br />
0 fichier(s) 0 octets</p>
<p>Répertoire de c:\test\. \.. \test2</p>
<p>25/02/2013 15:23 <REP> .<br />
25/02/2013 15:23 <REP> ..<br />
0 fichier(s) 0 octets</p>
<p>Total des fichiers listés :<br />
0 fichier(s) 0 octets<br />
8 Rép(s) 34 104 004 608 octets libres<br />
[/bash]

Stockage protégé de fichier et exécution

Au travers de ce répertoire “.. ” difficile d’accès, il est possible de stocker des fichiers et d’exécuter ceux-ci.

[bash]<br />
c:\test>copy nc.exe ". \.. \nc.exe"<br />
1 fichier(s) copié(s).<br />
[/bash]

Pour l’exécution, la création d’un lien symbolique permet aisément d’accéder à l’exécutable camouflé :

[bash]<br />
c:\test>mklink nc.exe c:\test\". \.. \nc.exe"<br />
Lien symbolique créé pour nc.exe <<===>> c:\test\. \.. \nc.exe</p>
<p>c:\test>dir<br />
Le volume dans le lecteur C s’appelle OS<br />
Le numéro de série du volume est CE03-DF19</p>
<p>Répertoire de c:\test</p>
<p>25/02/2013 15:51 <REP> .<br />
25/02/2013 15:51 <REP> ..<br />
25/02/2013 15:00 <REP> .<br />
25/02/2013 15:51 <SYMLINK> nc.exe [c:\test\. \.. \nc.exe]<br />
1 fichier(s) 0 octets<br />
3 Rép(s) 34 105 311 232 octets libres</p>
<p>c:\test>nc.exe<br />
Cmd line:<br />
[/bash]

Processus camouflé de wmic

Une fois un exécutable de placé dans le répertoire spécial “.. ” et lancé via un lien symbolique à partir d’un autre répertoire, le chemin d’accès de l’exécutable et lié à son instance en tant que processus s’avère camouflé (via l’utilitaire wmic en ligne de commande) :

[bash]<br />
c:\test>wmic process where name="nc.exe" list full</p>
<p>CommandLine=nc.exe<br />
CSName=X<br />
Description=nc.exe<br />
ExecutablePath=c:\test\nc.exe<br />
ExecutionState=<br />
Handle=5336<br />
HandleCount=83<br />
InstallDate=<br />
KernelModeTime=468003<br />
MaximumWorkingSetSize=1380<br />
MinimumWorkingSetSize=200<br />
Name=putty.exe<br />
OSName=Microsoft Windows 7 Professionnel |C:\Windows|\Device\Harddisk1\Partition3<br />
OtherOperationCount=380<br />
OtherTransferCount=11312<br />
PageFaults=2172<br />
PageFileUsage=2336<br />
ParentProcessId=8648<br />
PeakPageFileUsage=2336<br />
PeakVirtualSize=95428608<br />
PeakWorkingSetSize=8472<br />
Priority=8<br />
PrivatePageCount=2392064<br />
ProcessId=5336<br />
QuotaNonPagedPoolUsage=11<br />
QuotaPagedPoolUsage=174<br />
QuotaPeakNonPagedPoolUsage=11<br />
QuotaPeakPagedPoolUsage=176<br />
ReadOperationCount=15<br />
ReadTransferCount=284<br />
SessionId=1<br />
Status=<br />
TerminationDate=<br />
ThreadCount=1<br />
UserModeTime=0<br />
VirtualSize=95424512<br />
WindowsVersion=6.1.7601<br />
WorkingSetSize=8675328<br />
WriteOperationCount=0<br />
WriteTransferCount=0<br />
[/bash]

Le chemin indiqué pour l’exécutable est protégé via le lien symbolique :

[bash]ExecutablePath=c:\test\nc.exe[/bash]

Le lien symbolique peut donc être effacé en toute sécurité.

Le gestionnaire de tâches affiche cependant bien le bon chemin d’accès :

Gestionnaire de tâche avec chemin complet

Gestionnaire de tâche avec chemin complet

Accès réseau et partage de répertoires spéciaux “. ” et “.. “

De tels répertoires peuvent être créés via la syntaxe d’accès réseau de Windows (SMB-like). Toutefois, ils ne semblent pas être accessibles et ne peuvent être associés à un quelconque point de montage.

[bash]<br />
c:\test>md \\?\c:\test\". \.. \"<br />
c:\test>net share testx="c:\test\. \.. \" # ERROR<br />
c:\test>net use x: \\?\c:\test\". \.. \" # ERROR<br />
[/bash]

Idem via l’interface graphique de connexion à un lecteur réseau.

Accès aux répertoires “. ” et “.. ” via l’explorateur graphique

Tout comme pour l’interpréteur de commande, le répertoire “.. ” ne semble pas être accessible via l’explorer.exe.

Si l’on se dirige dans C:\test\ avec l’explorateur, on visualise bien le répertoire “. ” :

Répertoire ". " racine

Répertoire “. ” racine

A l’ouverture de celui-ci, un drôle de comportement survient puisque l’explorateur redirige vers le même répertoire, tout en modifiant la barre d’adresse :

Deuxième répertoire ". " racine

Deuxième répertoire “. ” racine

En ouvrant à nouveau ce second répertoire “. “, le répertoire “.. ” devient alors visible, mais s’avère inaccessible :

Répertoire ".. " inaccessible

Répertoire “.. ” inaccessible

En plus d’être inaccessible, celui-ci ne peut être supprimé via l’explorateur. Comme celui-ci est protégé contre la suppression, il en découle que toute l’arborescence est également protégée :

Protection à la suppression

Protection à la suppression

La méthode pour supprimer une telle arborescence consiste à passer par l’interpréteur de commande :

[bash]</p>
<p>c:\test>del ". \.. "\*<br />
c:\test\. \.. \*, êtes-vous sûr (O/N) ? O</p>
<p>c:\test>rmdir ". \.. \"</p>
<p>c:\test>rmdir ". \"</p>
<p>c:\test> # Ou un "rmdir /s"</p>
<p>[/bash]

Vidéo de démonstration

Au sein de son article sur PaulDotCom, Mark Baggett illustre cette technique au travers d’une vidéo/PoC de démonstration :

[youtube]https://www.youtube.com/watch?v=SKfhL2EWaio[/youtube]

Conclusion

Cette technique de camouflage de données au sein d’une structure de répertoire atypique permet à un assaillant d’accroître son emprise sur le système tout en restant le moins repérable possible. Couplée aux autres techniques déjà présentées, cette méthode qu’offre Windows nativement peut vite se retourner contre des administrateurs systèmes ; d’où cette sensibilisation.

Il convient que dans cet article, seule deux répertoires et sous-répertoires avec “. ” et “.. ” ont été créés. Toutefois ce procédé peut être répété sur une profondeur bien plus grande, toujours pour complexifier l’accès à des données/binaires à cacher.

Sources & ressources

  • Google Plus
  • LinkedIn
  • Viadeo
Author Avatar

About the Author : Yann C.

Consultant en sécurité informatique et s’exerçant dans ce domaine depuis le début des années 2000 en autodidacte par passion, plaisir et perspectives, il maintient le portail ASafety pour présenter des articles, des projets personnels, des recherches et développements, ainsi que des « advisory » de vulnérabilités décelées notamment au cours de pentest.