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 :
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 :
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" :
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 :
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 » :
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 » :
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électionnez1.
2.cd
%
systemdrive%
/ Darkmoon start_xfce -
Et pour démarrer une session Bash, tapez ceci :
Sélectionnez1.
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) :
2.
cd%
systemdrive%
/ Darkmoon
Darkmoon
11. apt-cyg▲
Installez et lancez apt-cyg :
Téléchargez apt-cyg avec la commande wget :
$
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
Vous obtiendrez ceci :
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 :
chmod + x apt-cyg
Et finalement, vous devrez faire un mv (pour déplacer le fichier) :
mv apt-cyg /usr/local
/bin
Voici tous les arguments de commande pour apt-cyg :
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▲
13. Licence▲
Code publié sous licence GNU
Une partie de l’article est tirée de la documentation anglophone de Dark Moon.