Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
kali-vm — Script di build per immagini VM Kali Linux | Kitploit
Strumenti/GitLabGitLab/kalilinux/build-scripts/kali-vm
Scripting e AutomazioneVirtualizzazione per la SicurezzaPenetration Testing
GitLabkalilinux/build-scripts/kali-vm

kali-vm

Script di build per immagini VM Kali Linux

Vedi Repository
9314941 mese faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Generatore di immagini VM Kali

Questo è lo script di build per creare le immagini di macchina virtuale (VM) Kali Linux.

Attualmente sono possibili due metodi di build:

  • build.sh - build direttamente dalla tua macchina
  • build-in-container.sh - build dall'interno di un container (Docker o Podman)

In entrambi i casi, la build avviene effettivamente all'interno di una macchina virtuale creata al volo dallo strumento di build debos. Debos usa fakemachine internamente, che a sua volta si basa su QEMU/KVM.

Prerequisiti

Assicurati che il repository git sia clonato localmente:

root@kitploit:~
$ sudo apt install -y git
$ git clone https://gitlab.com/kalilinux/build-scripts/kali-vm.git
$ cd kali-vm/

Configurazione dell'utente

A causa dei requisiti di QEMU/KVM, devi far parte del gruppo kvm. Puoi verificarlo eseguendo:

root@kitploit:~
Scarica lo strumento
$ # Not apart of the group $ grep kvm /etc/group kvm:x:104: $ $ # In the group $ grep kvm /etc/group kvm:x:104:kali

Se il tuo nome utente non compare nella riga restituita, significa che non sei nel gruppo e devi aggiungerti al gruppo kvm:

root@kitploit:~
$ sudo adduser $USER kvm

Quindi effettua il logout e il login affinché la modifica abbia effetto.

Build dall'host

Se esegui la build direttamente dalla tua macchina, usando build.sh, dovrai installare debos:

root@kitploit:~
$ sudo apt install -y 7zip debos dosfstools qemu-utils zerofree

Quindi usa lo script build.sh per generare un'immagine VM direttamente sulla tua macchina.

Build dall'interno di un container

Se preferisci eseguire la build dall'interno di un container, dovrai installare e configurare docker o podman sulla tua macchina. Quindi usa lo script build-in-container.sh per generare un'immagine.

build-in-container.sh è semplicemente un wrapper sopra build.sh. Rileva quale motore container conforme a OCI usare, si occupa di creare la container image se mancante e infine avvia il container per eseguire la build dall'interno.

docker richiede che l'utente venga aggiunto al gruppo Docker, come sopra con KVM, oppure l'uso dell'account root (ad es. $ sudo ./build-in-container.sh). podman è stato testato sia in modalità rootful (ad es. $ sudo ./build-in-container.sh) che rootless (ad es. $ ./build-in-container.sh).

Generazione di un'immagine

Usa build.sh o build-in-container.sh, a tua scelta. Da questo punto useremo build.sh per brevità.

Esempi

Il miglior punto di partenza, come sempre, è il messaggio di utilizzo:

root@kitploit:~
$ ./build.sh -h
Usage: build.sh <options> [-- <debos options>]

Build a Kali Linux VM image

Build options:
  -a ARCH     Build an image for this architecture, default: amd64
              Supported values: amd64
  -b BRANCH   Kali branch used to build the image, default: kali-rolling
              Supported values: kali-dev kali-last-snapshot kali-rolling
  -f FORMAT   Format to export the image to, default depends on the VARIANT
              Supported values: hyperv ova ovf qemu raw vagrant virtualbox vmware
  -k          Keep raw disk image and other intermediary build artifacts
  -m MIRROR   Mirror used to build the image, default: http://http.kali.org/kali
  -r ROOTFS   rootfs to use to build the image, default: none
  -s SIZE     Size of the disk image in GB, default: 86
  -v VARIANT  Variant of image to build (see below for details), default: generic
              Supported values: generic hyperv qemu rootfs virtualbox vmware
  -x VERSION  What to name the image release as, default: rolling
  -z          Zip images and metadata files after the build

Customization options:
  -D DESKTOP  Desktop environment installed in the image, default: xfce
              Supported values: e17 gnome i3 kde lxde mate xfce none
  -H HOSTNAME Set system host name, default: kali
  -K KEYBOARD Set keyboard layout, default: us
              Refer to the README.md for more details
  -L LOCALE   Set locale, default: en_US.UTF-8
  -P PACKAGES Install extra packages (comma/space separated list)
  -T TOOLSET  The selection of tools to include in the image, default: default
              Supported values: default everything headless large none
  -U USERPASS Username and password, separated by a colon, default: kali:kali
  -Z TIMEZONE Set timezone, default: America/New_York

The different variants of images are:
  generic     Image with all virtualization support pre-installed, default format: raw
  hyperv      Image pre-configured for Hyper-V "Enhanced Session Mode", default format: hyperv
  qemu        Image with QEMU and SPICE guest agents pre-installed, default format: qemu
  rootfs      Not an image, a root filesystem (no bootloader/kernel), packed in a .tar.gz
  virtualbox  Image with VirtualBox guest utilities pre-installed, default format: virtualbox
  vmware      Image with Open VM Tools pre-installed, default format: vmware

The different formats are:
  hyperv      VHDX disk image, powershell install scripts
  ova         streamOptimized VMDK disk image, OVF metadata file, packed in a OVA archive
  ovf         monolithicSparse VMDK disk image, OVF metadata file
  qemu        QCOW2 disk image, no metadata
  raw         sparse disk image, no metadata
  virtualbox  VDI disk image, .vbox metadata file
  vmware      2GbMaxExtentSparse VMDK disk image, VMX metadata file

Supported environment variables:
  http_proxy  HTTP proxy URL, refer to the README.md for more details

Most useful debos options:
  --artifactdir DIR   Set artifact directory, default: images
  --memory, -m  SIZE  Limit amount of memory to build VM in GB, default: 4G
  --scratchsize SIZE  Limit amount of HDD to build VM in GB, default: 45G
  --debug-shell       Get a shell on the VM
  --help, -h          See the complete list of options for debos

Refer to the README.md for examples

Le opzioni predefinite generano un'immagine Kali rolling, con desktop predefinito e toolset predefinito per architettura AMD64.

Questa è un'immagine disco raw, cioè un'immagine binaria semplice del disco (che può essere avviata con QEMU).

Esempio:

root@kitploit:~
$ ./build.sh

Per generare un'immagine Kali Linux personalizzata per VMware. Significa che include gli Open VM Tools preinstallati e che l'immagine prodotta è pronta per essere importata "così com'è" in VMware.

Inoltre, la genereremo dalla ultima versione stabile di Kali e useremo GNOME come ambiente desktop, invece del solito Xfce predefinito:

root@kitploit:~
./build.sh -v vmware -b kali-last-snapshot -D gnome

Per generare un'immagine Kali Linux progettata per VirtualBox. Include le utility guest di VirtualBox preinstallate e l'immagine può essere importata "così com'è" in VirtualBox.

Inoltre, vogliamo un disco virtuale da 150 GB e installeremo la selezione di strumenti "everything":

root@kitploit:~
./build.sh -v virtualbox -s 150 -S everything

Per generare un'immagine Kali leggera, senza ambiente desktop e senza toolset predefinito. Questa è un'immagine generica, include il supporto per la maggior parte dei motori VM disponibili. La esporteremo nel formato OVA, adatto sia a VMware che a VirtualBox.

Puoi installare pacchetti aggiuntivi con l'opzione -P. Puoi usare l'opzione più volte (ad es. -P pkg1 -P pkg2 ...), oppure fornire un valore separato da virgole/spazi (ad es. -P "pkg1,pkg2, pkg3 pkg4"), oppure un mix di entrambi. Installiamo anche il pacchetto metasploit-framework:

root@kitploit:~
./build.sh -v generic -f ova -D headless -P metasploit-framework

Quando si genera una serie di immagini, potrebbe essere più comodo (e più veloce) suddividere la build in due parti: prima si crea un rootfs, poi si generano le immagini riutilizzando questo rootfs come punto di partenza.

Nell'esempio seguente, abbiamo prima creato un rootfs kali-rolling e poi generato una serie di immagini Vagrant:

root@kitploit:~
./build.sh -b kali-rolling -v rootfs
./build.sh -r images/rootfs-rolling-amd64.tar.gz -f vagrant -v hyperv
./build.sh -r images/rootfs-rolling-amd64.tar.gz -f vagrant -v qemu
./build.sh -r images/rootfs-rolling-amd64.tar.gz -f vagrant -v virtualbox
./build.sh -r images/rootfs-rolling-amd64.tar.gz -f vagrant -v vmware

Per impostare keyboard settings, usa l'opzione -K. L'impostazione ha la forma <layouts>/<models>/<variants>/<options>. Ogni impostazione può essere omessa (in tal caso viene usato il valore predefinito) oppure può avere più valori separati da virgole. Nel caso più semplice, potresti voler cambiare solo la disposizione della tastiera, quindi imposteresti us per una disposizione US, de per una disposizione tedesca, e così via. Spiegazioni più lunghe ed esempi si trovano nella pagina di manuale keyboard(5). Per l'elenco dei valori supportati, puoi fare riferimento al file /usr/share/X11/xkb/rules/xorg.lst (fornito dal pacchetto xkb-data su Debian e sistemi simili). Questo file ha diverse sezioni (! layout, ! model, !variant e !option) che elencano i possibili valori per ciascuna impostazione. Puoi anche verificare cosa è configurato sul tuo sistema con cat /etc/default/keyboard. Esiste anche una scorciatoia -K same per replicare il sistema host (cioè ciò che è impostato nel file /etc/default/keyboard).

Per impostare locale, usa l'opzione -L. Scegli un valore nella prima colonna di /usr/share/i18n/SUPPORTED, oppure controlla cosa è configurato sul tuo sistema con grep -v ^# /etc/locale.gen, o semplicemente echo $LANG. Esiste anche una scorciatoia -L same per replicare il sistema host.

Per impostare timezone, usa l'opzione -Z. Guarda in /usr/share/zoneinfo e scegli una directory e una sottodirectory. In caso di dubbi, esegui tzselect per farti guidare, oppure osserva cosa è configurato sul tuo sistema con realpath /etc/localtime. Esiste anche una scorciatoia -Z same per replicare il sistema host.

Per impostare nome utente e password per l'utente non privilegiato, usa l'opzione -U. Il valore è una singola stringa e : viene usato per separare il nome utente dalla password.

Qui genereremo un'immagine Kali e la configureremo per imitare il sistema host: stessa locale, stesso fuso orario e stesso nome utente (con password password):

root@kitploit:~
./build.sh -K same -L same -Z same -U $USER:password

Varianti e formati

È possibile generare diverse varianti di immagine, a seconda del motore VM in cui vuoi eseguire l'immagine Kali. La VARIANT definisce principalmente quale pacchetto aggiuntivo viene installato nell'immagine per aggiungere il supporto a un particolare motore VM. Il FORMAT definisce invece il formato del disco virtuale e quali file di metadati aggiuntivi produrre.

Se non impostato, il formato (opzione -f) viene impostato automaticamente in base alla variante (opzione -v). Non tutte le combinazioni di variante e formato hanno senso, quindi la tabella seguente riassume le combinazioni più comuni.

varianteformatoformato discometadatipacchetto
genericrawraw (file sparso)nessuno
genericovastreamOptimized VMDKOVFOVA
genericovfmonolithicSparse VMDKOVF
qemuqemuQCOW2nessuno
virtualboxvirtualboxVDIVBOX
vmwarevmware2GbMaxExtentSparse VMDKVMX

Le immagini generic includono pacchetti di supporto alla virtualizzazione preinstallati per QEMU, VirtualBox e VMware, da qui il nome "generic". Le altre immagini, che hanno come target un motore VM specifico, includono solo il supporto per quel particolare motore di virtualizzazione.

Solo il formato ova definisce un contenitore: il risultato della build è un file .ova, che è semplicemente un archivio tar. Per gli altri formati, la build produce file separati. Possono essere raggruppati in un archivio 7z con l'opzione -z.

Esiste anche un tipo rootfs: non è un'immagine. È semplicemente un albero del filesystem root Kali Linux, senza kernel e bootloader, impacchettato in un archivio .tar.gz. Il caso d'uso principale è riutilizzarlo come input per generare un'immagine di un sistema operativo, e non è pensato per essere usato al di fuori del sistema di build.

Configurazione del proxy di cache

Quando si generano immagini di sistemi operativi, è utile avere un meccanismo di cache per evitare di scaricare tutti i pacchetti da Internet, ancora e ancora. A questo scopo, lo script di build tenta di rilevare i proxy di cache noti che potrebbero essere in esecuzione sull'host locale. Prima fa riferimento alla configurazione APT locale Acquire::http::Proxy. Se non è impostata, tenta quindi di rilevare apt-cacher-ng e squid-deb-proxy controllando se un servizio è in ascolto sulla loro porta predefinita. Questo meccanismo non funziona per approx (un noto proxy di cache APT), poiché viene avviato automaticamente on demand.

Per sovrascrivere questo rilevamento, puoi esportare tu stesso la variabile d'ambiente http_proxy. Tuttavia, ricorda che la build avviene all'interno di una macchina virtuale QEMU, quindi localhost nell'ambiente di build si riferisce alla VM, non all'host. Se vuoi raggiungere l'host dalla VM, probabilmente vorrai usare http://10.0.2.2.

Ad esempio, se vuoi usare un proxy in esecuzione sulla tua macchina sulla porta 9876, usa: export http_proxy=http://10.0.2.2:9876. Se vuoi assicurarti che non venga usato alcun proxy, usa: export http_proxy=.

Vedi anche https://github.com/go-debos/debos#environment-variables per maggiori dettagli.

In alternativa, puoi configurare un mirror locale.

Generare e riutilizzare un rootfs

È possibile suddividere la build in due passaggi. Puoi prima generare un rootfs con ./build.sh -v rootfs, e poi generare un'immagine basata su questo rootfs con ./build.sh -r ROOTFS_NAME.tar.gz. Ha senso, ad esempio, se prevedi di generare più tipi di immagine.

Risoluzione dei problemi della build

Memoria insufficiente

Quando l'area scratch si riempie (cioè il valore di --scratchsize è troppo basso), la build potrebbe fallire con questo tipo di messaggi di errore:

root@kitploit:~
[...]: failed to write (No space left on device)
[...]: Cannot write: No space left on device

Soluzione: aumenta il valore di --scratchsize. Puoi passare argomenti a debos dopo il carattere speciale --; quindi, se ti servono ad esempio 50G, puoi eseguire ./build.sh [...] -- --scratchsize=50G.

Ottenere una shell nella VM quando la build fallisce

Quando si esegue il debug di errori di build, è comodo essere portati in una shell all'interno della VM in cui avviene la build. Questo è possibile fornendo l'opzione --debug-shell a debos: ./build.sh [...] -- --debug-shell.

Risoluzione dei problemi in fase di esecuzione

ovf non compatibile con VMware ESXI

Questo è un problema noto; fai riferimento a https://gitlab.com/kalilinux/build-scripts/kali-vm/-/work_items/25#note_1301070132 per una soluzione alternativa.