Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/ricccrd/dd
Sécurité des ConteneursAnalyse Dynamique (Sandboxing)Rétro-ingénierieVirtualisation de SécuritéDevSecOpsAnalyse de Binaires
GitHubricccrd/dd

dd

Noyau Linux en espace utilisateur basé sur JIT qui exécute les conteneurs nativement sur macOS Apple Silicon sans VM. Remplacement de l'API Docker Engine intégré avec isolation des conteneurs, images overlay et publication de ports.

Voir le dépôt
2585il y a 16 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

dd

dd

Exécutez des conteneurs Linux sur macOS — sans machine virtuelle.

Download Platform License Website


Qu'est-ce que dd ?

dd exécute des conteneurs Linux nativement sur macOS Apple Silicon sans machine virtuelle. Il n'y a pas de noyau Linux ni d'hyperviseur en dessous : un JIT traduit le code du conteneur et prend en charge ses appels système Linux dans l'espace utilisateur (filiation gVisor / PRoot). Le JIT est le noyau Linux de l'invité — les espaces de noms, cgroups, couches d'images overlay et le réseau sont maintenus comme un état dans l'espace utilisateur. Il parle l'API Docker Engine, donc le client docker ordinaire le pilote.

Le calcul du conteneur s'exécute comme des instructions natives Apple Silicon ; seuls ses appels système sont interprétés. Pas de VM à démarrer, pas de démon dans une VM, pas de coût de virtualisation.

Site web & docs : https://ricccrd.github.io/dd/

root@kitploit:~
make jit                                          # build.rs compile et signe les JIT
DD_IMAGES=/path/to/images cargo run -p dd-daemon  # démarre le démon
export DOCKER_HOST=unix://$PWD/dd.sock
docker run -p 8080:80 -m 256m alpine sh -c 'echo hi from $(hostname)'

Fonctionnalités

  • Aucune machine virtuelle. Pas d'hyperviseur, pas de noyau Linux, pas de VM à garder en mémoire. Les instructions de l'invité s'exécutent nativement sur arm64 ; seule la limite des appels système est interceptée et traitée dans l'espace utilisateur.
  • Docker en remplacement direct. dd implémente l'API Docker Engine. Pointez DOCKER_HOST vers son socket et vos commandes docker run / ps / images / build existantes fonctionnent sans modification.
  • Le JIT est le noyau. Les espaces de noms, cgroups, couches d'images overlay et le réseau sont un état ordinaire dans l'espace utilisateur — un noyau en espace utilisateur dans la filiation gVisor / PRoot, sans aucun coût de VM.
  • Trois environnements d'exécution invités, un seul moteur. Images arm64 Linux natives ; images x86-64 Linux via un JIT (jit86) qui décode le x86, synthétise ses flags et abaisse SSE/x87 sur NEON (les binaires glibc fonctionnent) ; et invités macOS arm64 (ddcli mac) — aucune VM dans aucun d'eux.
  • Isolation réelle de conteneur. Couches d'images overlay (copy-up / .wh. whiteout, getdents fusionné), un VFS de type jail de chemins sans TOCTOU, espaces de noms PID / UTS / USER, un netns loopback privé avec publication de ports -p, et limites de mémoire + pids via cgroups (OOM à la limite).
  • Application de bureau, sans root. Une application GTK4 native (dd-app) ainsi qu'un CLI dd installent un démon en arrière-plan par utilisateur et un — tout sous , jamais .

Pourquoi un JIT, pas une VM ?

Toute autre façon d'exécuter des conteneurs Linux sur un Mac — Docker Desktop, Colima, Rancher, OrbStack — démarre une VM Linux sous un hyperviseur et exécute le démon à l'intérieur. Cette VM est un impôt que vous payez toute la journée. dd la supprime : un conteneur est un simple processus macOS dont les appels système sont traités par un noyau Linux dans l'espace utilisateur.

Le gain est structurel : le calcul de l'invité s'exécute en instructions natives Apple Silicon (aucune couche de virtualisation matérielle dans le chemin critique), et le célèbre goulot d'étranglement du partage de fichiers de Docker Desktop — le pont virtiofs/FUSE entre macOS et la VM — n'existe tout simplement pas, car le VFS de dd est le système de fichiers hôte derrière une jail de chemins.

Compromis honnête : un noyau dans l'espace utilisateur est seulement aussi complet que les appels système qu'il implémente, et aujourd'hui par défaut l'invité s'exécute dans un seul processus — rapide, et le bon choix pour du code auquel vous faites confiance (votre environnement de développement, CI, vos propres outils). Pour du code non fiable, il existe désormais une séparation sentinelle optionnelle (DDJIT_UNTRUSTED) : l'invité s'exécute dans un sandbox Seatbelt en mode refus-par-défaut ne détenant aucune autorisation hôte fs/réseau, tandis qu'un processus sentinelle de confiance possède les vraies ressources et sert les appels système via un anneau mémoire partagée — la forme gVisor. C'est encore tôt (les appels système fichier de base — read/write/open/close/lseek — sont transférés aujourd'hui ; sockets/exec/fork arrivent), donc pour du code totalement hostile, une VM expose toujours une surface plus restreinte.

Performance

Le même binaire Linux statique, exécuté de deux manières sur un Apple M5 Pro (macOS 26.3) : à l'intérieur de la VM Linux (comment les Docker basés sur VM exécutent les conteneurs) vs. via le JIT de dd sur l'hôte sans VM. Médiane de 7 (make bench). Un temps plus bas est meilleur ; « dd vs VM » > 1× signifie que dd est plus rapide. La voie dd paie même un petit coût de pont inter-processus que la vraie application ne paie pas — ce sont donc des chiffres conservateurs.

Conteneurs x86-64 — dd vs émulation VM (qemu-user ; exécuter x86 sur Apple Silicon signifie traduire de toute façon). Le JIT de dd bat qemu sur 9 des 10 charges de travail, de manière spectaculaire sur les calculs en virgule flottante :

Conteneurs aarch64 — dd vs une VM native (la VM exécute arm64 à pleine vitesse native — la barre la plus difficile) :

dd exécute le calcul arm64 à vitesse native — en tête sur le crible entier + mandelbrot, à parité sur SHA-256, matmul, memcpy, n-body et base64. Les écarts restants sont liés aux branchements indirects / appels système — qsort (~1.3×), text-scan (~1.35×) et SQLite (~1.5×) — réduits nettement par les dernières passes (§B-off + vol de x16/x17 a fait passer SQLite de ~1.9× à ~1.5×). Combler le reste (répartition VDBE) est la frontière active ; voir docs/design/arm-sqlite-parity.md. (Chaque charge de travail est dimensionnée pour s'exécuter ≥0.45s, donc le faible coût de pont par passage du banc d'essai est négligeable ici.)

Ce sont des micro-benchmarks de calcul — ils ne capturent même pas les gains structurels de dd (pas de VM à démarrer, pas de RAM résidente, I/O direct sur le système de fichiers hôte). Tous les chiffres mesurés, médiane de 7. Reproduction : make bench.

L'objectif est de battre la VM sur tous les benchmarks. dd gagne déjà sur chaque charge de travail x86-64 ci-dessus et égale ou bat arm64 natif ; là où il est encore en retard — SQLite arm64 lourd en appels système/allocation, et tirer plus du traducteur x86 — c'est exactement la frontière d'optimisation (l'optimiseur de traces de niveau 2 et le travail de performance jit86). La parité ou mieux partout est la barre.

Comment ça fonctionne

dd exécute un conteneur Linux en étant son noyau dans l'espace utilisateur. Un JIT traduit le code machine de l'invité et intercepte chaque instruction d'appel système ; le gestionnaire d'interception — service() dans dd-jit/src/runtime/os/linux/ — est l'ABI des appels système Linux, implémentée par rapport à l'hôte macOS.

  1. Charger l'ELF de l'invité (static-PIE, ou dynamique via son ld.so) et construire la pile initiale.
  2. Traduire & distribuer le PC de l'invité bloc par bloc ; le code de même ISA est surtout translittéré, le x86-64 est décodé et réémis sur arm64.
  3. Exécuter le bloc traduit comme du code hôte natif jusqu'à un terminateur (branchement / saut indirect / appel système).
  4. Servir l'appel système — chaque chemin passe par la jail VFS du conteneur ; les espaces de noms et cgroups ne sont que de l'état de processus.

Exemples

root@kitploit:~
# 1. Démarrer le démon, pointer docker vers lui
make jit
DD_IMAGES=/path/to/images cargo run -p dd-daemon
export DOCKER_HOST=unix://$PWD/dd.sock

# 2. C'est juste Docker
docker run -p 8080:80 -m 256m alpine sh -c 'echo hi from $(hostname)'
docker ps
docker images
docker run --rm -it ubuntu bash

# 3. Ou via l'application de bureau installée (par utilisateur, sans root)
dd install                                  # LaunchAgent + contexte docker
dd app                                       # ouvrir l'interface graphique
docker --context dd run alpine echo hi

Installation

dd cible macOS Apple Silicon (arm64, macOS 12+). Le JIT a besoin des outils en ligne de commande Xcode (clang + codesign).

Télécharger l'application (recommandé)

Prenez le dernier .dmg depuis la page des versions, ouvrez-le et glissez dd dans Applications. Ensuite, dans un terminal :

root@kitploit:~
dd install     # arborescence ~/.dd + LaunchAgent par utilisateur + `docker context create dd`
dd app         # ouvrir l'interface graphique
dd doctor      # vérifier socket / agent / contexte / quarantaine de l'application

Gatekeeper : le DMG n'est pas signé (ad-hoc). Au premier lancement, faites un clic droit sur l'application → Ouvrir, ou exécutez xattr -dr com.apple.quarantine /Applications/dd-app.app (dd doctor détecte ceci et affiche la correction).

Compiler à partir des sources

root@kitploit:~
xcode-select --install                       # clang + codesign
# installer Rust (stable) et Nix (pour le shell de développement GTK4)
git clone https://github.com/ricccrd/dd && cd dd
make app       # construire + assembler & signer ad-hoc target/dd-app.app
make dmg       # -> target/dist/dd-<ver>-<arch>.dmg
make install   # copier dans /Applications et exécuter `dd install`

make app/dmg exécutent le regroupement dans le shell de développement Nix (nix/flake.nix), qui fournit GTK4 + dylibbundler / create-dmg. Le bundle relocalise le graphe de dylibs GTK dans Contents/Frameworks, place les données d'exécution GTK, et signe ad-hoc de l'intérieur vers l'extérieur.

Espace de travail

Un espace de travail Cargo.

  • dd-jit/ — l'environnement d'exécution JIT (C, sous src/runtime/) plus ses liaisons Rust. build.rs compile et signe un binaire JIT par architecture invitée (aarch64, x86_64) ; src/lib.rs expose Guest + le contrat de lancement typé SpawnConfig. L'invité aarch64 est entièrement décomposé (moteur jit/ + personnalité os/linux/ + frontal frontend/aarch64/) ; l'invité x86-64 (jit86) partage la couche os/linux/.
  • dd-daemon/ — le démon de l'API Docker Engine. Détecte l'architecture invitée de chaque image à partir de son ELF, choisit le JIT correspondant et le lance via .

Le démon écoute sur ~/.dd/run/docker.sock ; l'interface graphique et docker --context dd l'utilisent. L'état persiste dans ~/.dd/state.json.

Tests

root@kitploit:~
make test                       # la matrice moteur × cas, rapport groupé
make test ENGINE=x86_64         # un moteur
make test FILTER=container      # un groupe / cas correspondant à un nom
cargo run -p dd-tests -- --list # lister les groupes + cas
make test-ci                    # le chemin cargo-test (CI)

Les cas sont déclarés dans dd-tests/src/cases/. Un cas est un programme invité + assertions ; les invités aarch64 sont compilés à la volée (gcc -static-pie) et comparés à un oracle natif, les invités x86-64 proviennent d'accessoires préconstruits. Chaque cas s'exécute sur chaque moteur pour lequel il a un invité.

Statut

  • Invité : Linux aarch64 (décomposé, moteur de conteneur complet) + x86-64 (jit86, exécute glibc).
  • Hôte : macOS arm64 (Apple Silicon). Le JIT a besoin de clang + codesign (Xcode CLT).
  • Conteneurs : rootfs + couches d'images overlay (copy-up/whiteout), volumes bind, publication de ports (-p), netns loopback privé, limites cgroups mémoire+pids, espaces de noms UTS/PID/USER.
  • Feuille de route : téléchargement/dépaquetage de registre OCI, déduplication jit86 sur le moteur partagé, une pile réseau externe complète, et la séparation sentinelle pour les images non fiables. Voir docs/ pour les descriptions détaillées.

Auteur

Richard Hutta — [email protected]

Licence

MIT.

Télécharger l’outil
docker context
$HOME
sudo
dd — noyau en espace utilisateur (JIT)Basé sur VM (Docker Desktop / Colima / …)
Modèle sous-jacentUn JIT prend en charge les appels système Linux dans l'espace utilisateur (filiation gVisor)Un noyau Linux complet à l'intérieur d'une VM hyperviseur
RAM résidente au reposAucune — par conteneur, libérée à la sortieGigaoctets réservés pour la VM, toujours allumée
DémarrageCréation de processus — pas de VM à démarrerDémarrer une VM Linux + le démon dans la VM d'abord
Montage de volume / I/O fichierSystème de fichiers hôte direct via une jail de cheminsPont virtiofs/gRPC-FUSE à travers la frontière de la VM
Publication de portsDirectement sur les sockets de l'hôteVia la couche NAT/forwarding de la VM
Coût batterie / arrière-planRien qui tourne quand aucun conteneur n'est actifUne VM au ralenti qui vide la batterie
Empreinte à distribuer & corrigerPas de noyau Linux — rien à suivre pour les CVEDistribue, corrige et suit tout un noyau Linux
ObservabilitéUn processus macOS normal — samplez, déboguez, Activity MonitorUne VM opaque ; la charge de travail est invisible pour les outils de l'hôte
Charge de travailVM (qemu)dd (sans VM)dd vs VM
n-body flottant5.39s0.23s24× plus rapide
mandelbrot7.81s0.83s9.4× plus rapide
matmul8.21s1.37s6.0× plus rapide
SQLite (600k lignes)2.99s1.01s3.0× plus rapide
qsort3.91s1.68s2.3× plus rapide
memcpy2.40s1.10s2.2× plus rapide
text-scan (wc/grep)1.42s1.11s1.3× plus rapide
crible entier1.31s1.04s1.25× plus rapide
SHA-2562.72s2.44s1.1× plus rapide
base644.28s5.39s0.79× (1.26× plus lent)
Charge de travailVM (native)dd (sans VM)dd vs VM
crible entier0.75s0.48s1.58× plus rapide
mandelbrot0.79s0.77s1.03× plus rapide
matmul0.66s0.66s~parité
memcpy0.55s0.56s~parité
base640.68s0.68s~parité
n-body flottant0.17s0.17s~parité
SHA-2560.80s0.82s~parité
qsort0.83s1.10s1.33× plus lent
text-scan (wc/grep)0.51s0.68s1.35× plus lent
SQLite (600k lignes)0.36s0.62s1.71× plus lent
SpawnConfig
  • dd-tests/ — un banc d'essai déclaratif ; les cas s'exécutent sur chaque moteur avec un rapport groupé.
  • dd-client/ — un petit client typé de l'API Docker Engine via le socket Unix du démon (la source unique de vérité pour le format filaire, partagée par l'interface graphique et le CLI).
  • dd-gui/ (binaire dd-app) — une interface graphique GTK4. Construit uniquement sur macOS via le shell de développement Nix.
  • dd-cli/ (binaire dd) — la surface d'installation/contrôle, toute sans root.