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

Dark Moon : un système Unix portable sous Windows dédié au Pentest

Dark Moon est un sous-système embarqué, émulant des fonctionnalités POSIX grâce à Cygwin.

Ce dernier possède la particularité d’avoir été encapsulé en un unique fichier exécutable sur la plateforme Desktop Bridge de Microsoft.

2 commentaires Donner une note à l´article (5)

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Description du projet

Dark Moon est un projet Open Source sous licence GPLv2 développé depuis 2013 par Mehdi Boutayeb Ferkatou.

Dark Moon est un sous-système embarqué, émulant des fonctionnalités POSIX grâce à Cygwin.

Ce dernier possède la particularité d’avoir été encapsulé en un unique fichier exécutable sur la plateforme Desktop Bridge de Microsoft.

Le sous-système de Dark Moon est facile à installer. Vous n’avez rien à configurer au préalable, comme c’est le cas avec les sous-systèmes Linux disponibles sur le magasin Microsoft. Cela renforce le côté intuitif de ce logiciel capable de tenir en un unique fichier exécutable ayant pour rôle de déployer les fichiers sources dans un répertoire et de les lancer lors des appels.

Le protocole SSH est inclus ainsi que OpenSSL pour le chiffrement grâce à des algorithmes de chiffrement.

Dark Moon possède une riche bibliothèque de fonctionnalités Linux.

Dark Moon est également utilisé dans le domaine de la sécurité pour effectuer des attaques sur un réseau informatique depuis le noyau portable en exécutant des scripts et des programmes.

Ce logiciel est aussi utilisé pour déployer de petits serveurs portables légers peu gourmands, et donc plus réactifs (Intel Atom, Celeron, Pentium).

Ceci est un atout appréciable si vous souhaitez utiliser une machine de test sur des PC peu performants pour monter une infrastructure Linux flexible, et qui n’a pas vocation à être utilisée dans la durée en local, permettant de communiquer sous Windows avec du POSIX Linux.

Dark Moon se présente en deux versions : STABLE et CURRENT. CURRENT est recommandée pour les développeurs ou utilisateurs ayant de bonnes connaissances techniques. Dans le cas contraire, il est recommandé d'utiliser la version STABLE.

Dans le domaine de la sécurité informatique au sein de l'univers Linux, Dark Moon propose une vaste palette d'outils essentiels. Parmi eux, on retrouve des éléments tels que le scanner de vulnérabilité, la boîte à outils dédiée à la sécurité réseau, la boîte à outils spécifique au cadre de sécurité, les outils de criminalistique numérique, des scanners de sécurité pour la surveillance réseau, tels que nmap, tcpdump, sqlmap... En outre, Dark Moon intègre également une boîte à outils OSINT, des outils de cartographie et d'analyse Web, ainsi que des outils destinés à la gestion des vulnérabilités de mots de passe.

L'outil a été développé par Mehdi BOUTAYEB et maintenu par la société ASC depuis 2021.

2. Dark Moon et la plateforme UWP de Microsoft

Il est en théorie impossible de porter un noyau Linux sur le Microsoft Store si ce dernier n’exploite pas WSL de Microsoft

Le problème est que le noyau est trop complexe pour UWP et utilise beaucoup d'API de bas niveau qui ne peuvent tout simplement pas être portées, sinon la construction Build de l’APPX échoue.

Dark Moon a pu être encapsulé dans une APPX, car il a été cloisonné dans un fichier exécutable contenant des ressources interprétables par UWP.

D’autant que les ressources sont consultables par tous dans le disque C:/ et exploitables et modifiables contrairement à WSL.

3. Quelle est la différence entre Dark Moon et le sous-système Windows pour Linux (WSL 2) ?

Le sous-système Microsoft est un noyau Linux intégré à Windows, mais WSL nécessite une virtualisation de très bas niveau avec un hyperviseur de type 1 pour fonctionner.

WSL n’est pas Open Source, c’est une technologie propriétaire qui ne fonctionne qu’à partir de Windows 10.

La différence avec Dark Moon est que le logiciel est un portage de programmes Linux sur Windows. Les outils de développement intégrés à Dark Moon vous construiront un exécutable Windows, tandis que WSL vous construira un exécutable Linux.

Il se peut que l'exécutable Linux résultant ne s'exécute pas correctement sur WSL.

En outre, contrairement au WSL, vous pouvez exécuter un .exe et accéder à tous les fichiers du noyau, ce qui n’est pas encore possible avec WSL/Bash en raison de la sécurité de Windows 10. La dernière différence est que Dark Moon est un noyau « portable », vous pouvez le transporter dans n'importe quel dossier ou périphérique.

4. Quelle est la différence entre la version de Dark Moon disponible sur Github et le Microsoft Store ?

Dark Moon UWP (Microsoft Store) ne nécessite aucune intervention humaine pour l'installation et tout est automatisé, à partir du moment où l'utilisateur clique sur « Télécharger » jusqu'au lancement de XFCE. Avec la version Microsoft Store, l’utilisateur exécutera une version approuvée par Microsoft pour Windows 10. L'application s'installera sur un dossier prédéfini %systemdrive%/Darkmoon.

Avec la version Win32, l'utilisateur peut modifier le programme d'installation pour le placer dans le répertoire de son choix.

5. Les versions

Il existe deux versions de ce logiciel :

  • une version de la console fonctionnant directement à partir de cmd.exe :

    Cette version de Dark Moon étant nomade (portable), vous pouvez déplacer le répertoire du logiciel n’importe où, y compris sur un lecteur USB ou un disque dur portable. Par exemple, vous pouvez envisager d'installer et d'exécuter un serveur SSH sur votre clef USB à partir de Dark Moon ;

  • une version intégrant un environnement graphique XFCE 4.

5-A. Pourquoi utiliser Dark Moon Cybersecurity ?

Dark Moon Cybersecurity présente une solution pratique pour les professionnels de la cybersécurité et de l'Ethical hacking.

En effet, Dark Moon se distingue par son environnement de développement et son émulateur UNIX portable, qui offre une flexibilité d'utilisation sur n'importe quel système Windows, même à partir d'une simple clef USB.

L'une des principales raisons d'utiliser Dark Moon réside dans sa capacité à fonctionner dans des environnements restreints tout en minimisant l'utilisation des ressources mémoire et CPU.

En utilisant un émulateur avec Cygwin.dll, Dark Moon optimise l'efficacité des ressources sans recourir à la virtualisation, ce qui le rend particulièrement adapté aux professionnels de la cybersécurité travaillant dans des conditions spécifiques sous Windows, sans nécessiter d'UAC (User Account Control).

Un autre avantage de Dark Moon est son aptitude à émuler des serveurs et à exécuter des scripts sur plusieurs instances Unix simultanément, facilitant ainsi les opérations de scripting dans des langages tels que Python, Bash, Perl ou Ruby. Par exemple, il est possible d'exécuter un ensemble d'outils de test de pénétration en parallèle, notamment pour des tests de sécurité web, grâce à des scripts Python sur Dark Moon.

Dans cet exemple de script Python, on exécute une pile d’outils de pentest en asynchrone à des fins de pentest web sur Dark Moon :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
import asyncio
import subprocess
import aiofiles
from fpdf import FPDF

# Fonction asynchrone pour exécuter un outil avec des options données
async def run_tool(tool, options):
    try:
        # Créer un processus pour exécuter l'outil avec les options spécifiées
        process = await asyncio.create_subprocess_exec(
            tool, *options,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        # Attendre la fin de l'exécution du processus et récupérer la sortie standard et d'erreur
        stdout, stderr = await process.communicate()
        return stdout.decode(), stderr.decode()
    except Exception as e:
        return str(e), ''

# Fonction principale asynchrone
async def main():
    # Liste des outils et de leurs options respectives
    tools = [
        ("apktool", [""]),
        ("skipfish", ["-o", "skipfish_report"]),
        ("dirsearch", ["-u", "http://example.com", "-e", "php,html"]),
        ("dirbuster", ["-u", "http://example.com", "-r", "common.txt"]),
        ("sublist3r", ["-d", "example.com"]),
        ("tekdefense-automater", ["-h", "example.com"]),
        ("theharvester", ["-d", "example.com", "-b", "google"]),
        ("wpscan", ["--url", "http://example.com", "--enumerate", "u"]),
    ]

    # Créer une liste de tâches asynchrones pour exécuter chaque outil
    tasks = [run_tool(tool, options) for tool, options in tools]
    # Exécuter les tâches asynchrones et récupérer les résultats
    results = await asyncio.gather(*tasks)

    # Générer le rapport PDF
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("Arial", size=12)

    # Ajouter les résultats de chaque outil au rapport PDF
    for tool, (stdout, stderr) in zip(tools, results):
        pdf.cell(0, 10, f"=== {tool[0]} ===", ln=True)
        pdf.multi_cell(0, 10, f"Options: {' '.join(tool[1])}", ln=True)
        pdf.multi_cell(0, 10, f"STDOUT:\n{stdout}", ln=True)
        pdf.multi_cell(0, 10, f"STDERR:\n{stderr}", ln=True)
        pdf.ln()

    # Sauvegarder le rapport PDF
    pdf.output("pentest_report.pdf")

# Point d'entrée du script
if __name__ == "__main__":
    asyncio.run(main())

6. Installer le projet

Étape 1

Après l’installation, cette fenêtre de terminal s’ouvre :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  .. Version 1.0.4...............By Mehdi Boutayeb - ASC   .
  *              __...__                           o
             .--'    __.=-.
      |    ./     .-'       *             o
     -O-   /      /              _          _
      |   /   '''/   |        __| |__ _ _ _| |__
         |     (@)  -O-      / _` / _` | '_| / /
        |        \   |       \__,_\__,_|_| |_\_\
        |         \           _ __  ___  ___ _ _
        |       ___\         | '  \/ _ \/ _ \ ' \
  *     |  .   /  `          |_|_|_\___/\___/_||_|
         \  `~~\ *
          \     \                Dark Moon GNU     |
          `\    `-.__            Version 1.0.4    -O-
     *       `--._    `--=.                        |
                  `---~~`                *
                          *                         *

.. DARK MOON for Microsoft Windows(c). GNU licensed       ..
.. COMP:  Win32  CLI:  Bash  LIC  GPLv2  For:  WinNT .......
...........................................................

[1].Start an XFCE session
[2].Start terminal
[3].Enable Security auditing toolkit
[4].Exit DarkMoon

Pour exécuter l’extraction et installer tous les outils pentest, tapez "3"

Étape 2

Lorsque vous sélectionnez l’option n°3, un message de prévention s’ouvre, pour continuer l’extraction des outils pentest, tapez "Y" :

 
Sélectionnez
1.
2.
Many pentest tools can generate security alerts since they can be used as hacking tools.
When installing Pentest tools, Windows Defender may trigger alerts. We recommend to disable it, However, this will not affect the installation. Continue installation ? (Y/N):

7. Liste des commandes Unix

Voici la liste des commandes disponibles sur le terminal :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Voi job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
 bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
 compgen [-abcdefgjksuv] [-o option] [>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ... | pid >  test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
 false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [-n] [id ...]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }

8. Ajouter des programmes

Vous pouvez ajouter d'autres programmes avec les outils suivants :

  • git ;
  • wget ;
  • setup-x86_64 (les paquets disponibles sur les sites miroir de cygwin sont entièrement compatibles avec Dark Moon, car ils sont émulés par cygwin.dll).

9. Mode de lancement du logiciel

Il existe deux versions de ce logiciel :

  • une version en console ;
  • une version en interface graphique avec XFCE.

Pour exécuter la console Windows depuis Dark Moon, tapez « cmd » :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
      .. Version 1.0.4...............By Mehdi Boutayeb - ASC   .
      *              __...__                           o
                 .--'    __.=-.
          |    ./     .-'       *             o
         -O-   /      /              _          _
          |   /   '''/   |        __| |__ _ _ _| |__
             |     (@)  -O-      / _` / _` | '_| / /
            |        \   |       \__,_\__,_|_| |_\_\
            |         \           _ __  ___  ___ _ _
            |       ___\         | '  \/ _ \/ _ \ ' \
      *     |  .   /  `          |_|_|_\___/\___/_||_|
             \  `~~\ *
              \     \                Dark Moon GNU     |
              `\    `-.__            Version 1.0.4    -O-
         *       `--._    `--=.                        |
                      `---~~`                *
                              *                         *
    
    .. DARK MOON for Microsoft Windows(c). GNU licensed       ..
    .. COMP:  Win32  CLI:  Bash  LIC  GPLv2  For:  WinNT .......
    ...........................................................
    
    [1].Start an XFCE session
    [2].Start terminal
    [3].Enable Security auditing toolkit
    [4].Exit DarkMoon
2

Admin@DESKTOP-70FKMR6 ~
$ cmd
Microsoft Windows [version 10.0.17134.885]
(c) 2018 Microsoft Corporation. Tous droits réservés.

C:\Darkmoon\home\Admin>

Pour exécuter PowerShell, tapez « Powershell » :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
      .. Version 1.0.4...............By Mehdi Boutayeb - ASC   .
      *              __...__                           o
                 .--'    __.=-.
          |    ./     .-'       *             o
         -O-   /      /              _          _
          |   /   '''/   |        __| |__ _ _ _| |__
             |     (@)  -O-      / _` / _` | '_| / /
            |        \   |       \__,_\__,_|_| |_\_\
            |         \           _ __  ___  ___ _ _
            |       ___\         | '  \/ _ \/ _ \ ' \
      *     |  .   /  `          |_|_|_\___/\___/_||_|
             \  `~~\ *
              \     \                Dark Moon GNU     |
              `\    `-.__            Version 1.0.4    -O-
         *       `--._    `--=.                        |
                      `---~~`                *
                              *                         *
    
    .. DARK MOON for Microsoft Windows(c). GNU licensed       ..
    .. COMP:  Win32  CLI:  Bash  LIC  GPLv2  For:  WinNT .......
    ...........................................................
    
    [1].Start an XFCE session
    [2].Start terminal
    [3].Enable Security auditing toolkit
    [4].Exit DarkMoon
2

Admin@DESKTOP-70FKMR6 ~
$ powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. Tous droits réservés.

PS C:\Darkmoon\home\Admin>

10. Dark Moon en ligne de commande Windows

Lancer Bash et XFCE à partir de cmd et powershell :

  • Pour démarrer XFCE, tapez dans la console :

     
    Sélectionnez
    1.
    2.
    cd% systemdrive% / Darkmoon
    start_xfce
    
  • Et pour démarrer une session Bash, tapez ceci :

     
    Sélectionnez
    1.
    2.
    cd% systemdrive% / Darkmoon
    start_bash
    
  • Vous pouvez également choisir de lancer le menu en tapant ceci sur la console (comme vu dans la partie 10Mode de lancement du logiciel) :
 
Sélectionnez
1.
2.
cd% systemdrive% / Darkmoon
Darkmoon

11. apt-cyg

Installez et lancez apt-cyg :

Téléchargez apt-cyg avec la commande wget :

 
Sélectionnez
1.
$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg

Vous obtiendrez ceci :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--2019-07-26 20: 19: 24-- https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
 Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 151.101.120.133
 Connexion à raw.githubusercontent.com (raw.githubusercontent.com) | 151.101.120.133 |: 443… connecté.
 requête HTTP transmise, en attente de la réponse… 200 OK
 Taille: 13765 (13K) [text / plain]
 Sauvegarde en : «apt-cyg.1»

 apt-cyg.1 100% [======================================== =======>] 13,44K --.- KB / s ds 0,03s

 2019-07-26 20:19:25 (396 KB / s) - «apt-cyg.1» sauvegardé [13765/13765]

Après avoir téléchargé apt-cyg, vous devrez faire un CHMOD de façon à donner les droits d’exécution :

 
Sélectionnez
1.
chmod + x apt-cyg

Et finalement, vous devrez faire un mv (pour déplacer le fichier) :

 
Sélectionnez
1.
mv apt-cyg /usr/local/bin

Voici tous les arguments de commande pour apt-cyg :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
$ apt-cyg
 PRÉNOM
   apt-cyg - utilitaire de gestion de paquets

 SYNOPSIS
   apt-cyg [opération] [options] [cibles]

 LA DESCRIPTION
   apt-cyg est un utilitaire de gestion de paquets qui suit les paquets installés sur
   Système Cygwin.  Invoquer apt-cyg implique de spécifier une opération avec
   options potentielles et cibles sur lesquelles opérer.  Une cible est généralement un paquet
   nom, nom de fichier, URL ou chaîne de recherche.  Les cibles peuvent être fournies en tant que commande
   arguments de ligne.

 Opérations
   installer
     Installer les packages.

   retirer
     Supprimez le (s) paquet (s) du système.

   mettre à jour
     Téléchargez une nouvelle copie de la liste de paquets principaux (setup.ini) à partir du
     serveur défini dans setup.rc.

   télécharger
     Récupérez les packages du serveur, mais n’installez / mettez à niveau rien.

   spectacle
     Affiche des informations sur les paquets donnés.

   dépend
     Produire un arbre de dépendance pour un package.

   dépendants
     Produire une arborescence de packages qui dépendent du package nommé.

   liste
     Recherchez dans chaque package installé localement les noms correspondants à regexp.  Sinon
     Les noms de paquets sont fournis dans la ligne de commande, tous les paquets installés
     être interrogé.

   tout lister
     Ceci recherchera chaque paquet dans la liste des paquets maîtres (setup.ini)
     noms qui correspondent à regexp.

   Catégorie
     Afficher tous les packages membres d'une catégorie nommée.

   listfiles
     Répertorie tous les fichiers appartenant à un paquet donné.  Plusieurs packages peuvent être spécifiés
     sur la ligne de commande.

   chercher
     Recherchez les packages téléchargés qui possèdent le (s) fichier (s) spécifié (s).  Le chemin peut
     être relatif ou absolu, et un ou plusieurs fichiers peuvent être spécifiés.

   fouiller
     Effectuez une recherche sur cygwin.com pour récupérer les informations sur les fichiers relatifs aux packages.  Le fourni
     la cible est considérée comme un nom de fichier et searchall retournera le
     paquet (s) contenant ce fichier.

   miroir
     Placez le miroir.  une URL complète vers un emplacement où se trouvent la base de données, les packages et
     les signatures pour ce référentiel peuvent être trouvés.  Si aucune URL n'est fournie, affichez
     miroir de courant.

   cache
     Définissez le répertoire de cache du paquet.  Si un fichier est introuvable dans le répertoire cache,
     il sera téléchargé.  Les formulaires Unix et Windows sont acceptés, ainsi que
     chemins absolus ou réguliers.  Si aucun répertoire n’est fourni, affiche le répertoire en cours.
     cache.

 OPTIONS
   --nodeps
     Spécifiez cette option pour ignorer toutes les vérifications de dépendance.

   --version
     Afficher la version et quitter.

12. Captures d'écran

Image non disponible

Image non disponible

Image non disponible

Image non disponible

Image non disponible

Image non disponible

Image non disponible

13. Licence

Code publié sous licence GNU

Une partie de l’article est tirée de la documentation anglophone de Dark Moon.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+