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
smolvm — Portatile, leggera, macchina virtuale autonoma. | Kitploit
Strumenti/GitHubGitHub/smol-machines/smolvm
Sicurezza dell'Infrastruttura CloudSicurezza dei ContenitoriVirtualizzazione per la SicurezzaDevSecOpsSicurezza Hardware
GitHubsmol-machines/smolvm

smolvm

Portatile, leggera, macchina virtuale autonoma.

Vedi Repository
4.4k207122h 42m 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 →
Sito web
Condividi

smol machines

Discord Release License

smolvm

Distribuisci ed esegui software con isolamento per impostazione predefinita.

Questo è uno strumento CLI che ti consente di:

  1. Gestire ed eseguire macchine virtuali Linux personalizzate in locale con: avvio a freddo in meno di un secondo, multipiattaforma (macOS, Linux, Windows), utilizzo elastico della memoria.
  2. Impacchettare una macchina virtuale con stato in un singolo file (.smolmachine) per reidratarla su qualsiasi piattaforma supportata.

Installazione

root@kitploit:~
# installa (macOS + Linux)
curl -sSL https://smolmachines.com/install.sh | bash

# per agenti di codifica — installa + scopri tutti i comandi
curl -sSL https://smolmachines.com/install.sh | bash && smolvm --help
Scarica lo strumento

Oppure scarica da GitHub Releases e posizionalo in ~/.local/share/.

Windows: scarica la release windows-x86_64 (include krun.dll + libkrunfw.dll), decomprimila ed esegui smolvm.exe. Richiede la funzionalità Windows Hypervisor Platform (WHP) abilitata.

Avvio Rapido

root@kitploit:~
# esegui un comando in una VM effimera (pulita dopo l'uscita)
smolvm machine run --net --image alpine -- sh -c "echo 'Hello world from a microVM' && uname -a"

# shell interattiva
smolvm machine run --net -it --image alpine -- /bin/sh
# dentro la VM: apk add sl && sl && exit

Smolfile

Uno Smolfile dichiara una macchina in TOML — l'equivalente di un Dockerfile o di un file cloud-init, ma per un'intera VM: immagine, risorse, policy di rete, mount, porte e comandi di configurazione in un unico file versionato.

root@kitploit:~
image = "python:3.12-alpine"
net = true
cpus = 4
memory = 4096

ports = ["8000:8000", "5173-5180:5173-5180"]
volumes = ["./src:/app"]
init = ["pip install -r /app/requirements.txt"]

[network]
allow_hosts = ["api.stripe.com", "pypi.org"]

[auth]
ssh_agent = true
root@kitploit:~
smolvm machine create --name myvm -s Smolfile   # oppure --smolfile <PATH>
smolvm machine start --name myvm

I mapping delle porte accettano una singola porta ("8080"), un mapping esplicito ("8080:80") o intervalli uno-a-uno di uguale lunghezza ("5173-5180:5173-5180"). Una macchina può pubblicare al massimo 64 mapping concreti.

Le chiavi sconosciute vengono rifiutate anziché ignorate, quindi un errore di battitura fallisce al momento della creazione invece di non fare nulla silenziosamente.

Chiavi comuni: image, cpus, memory, net, ports, volumes, env, init, workdir, gpu, cuda, docker_socket, storage, overlay e le tabelle [network], [dev], [auth], [health], [restart], [service].

Cattura una macchina in un'immagine riutilizzabile

Non hai bisogno di un Dockerfile per mantenere un ambiente. Configura una macchina come preferisci — manualmente o da uno Smolfile — poi impacchetta la macchina arrestata in un artefatto .smolmachine e pubblicalo su qualsiasi registry OCI:

root@kitploit:~
smolvm machine shell --name myvm          # installa e configura in modo interattivo
smolvm machine stop  --name myvm
smolvm pack create --from-vm myvm -o myvm
smolvm pack push --file myvm.smolmachine ghcr.io/you/myvm:v1

Chiunque può quindi scaricarlo e avviare esattamente la stessa macchina:

root@kitploit:~
smolvm pack pull ghcr.io/you/myvm:v1

Smolfile funzionanti: python · node · docker-in-vm · local-llm · headless-browser · doom

Usalo Per

Sandbox per codice non fidato — esegui programmi non fidati in una VM isolata a livello hardware. Il filesystem host, la rete e le credenziali sono separati da un confine ipervisore.

root@kitploit:~
# la rete è disattivata per impostazione predefinita — il codice non fidato non può comunicare con l'esterno
smolvm machine run --image alpine -- nslookup example.com
# fallisce — nessun accesso di rete

# blocca l'egresso — consenti solo host specifici
smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -q -O /dev/null https://registry.npmjs.org
# funziona — host consentito

smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -q -O /dev/null https://google.com
# fallisce — non nella lista consentita

Impacchetta in eseguibili portabili — trasforma qualsiasi carico di lavoro in un binario autonomo. Tutte le dipendenze sono pre-incluse — nessun passaggio di installazione, nessun download a runtime, avvio in <200ms.

root@kitploit:~
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version
# Python 3.12.x — isolato, nessun pyenv/venv/conda necessario

Usa immagini container locali — per CI, host air-gapped e iterazione rapida. Passa a --image un archivio docker save / podman save, convoglialo su stdin, o puntalo a una directory rootfs non compressa. Il lavoro sulle immagini è delegato ai tuoi strumenti container; smolvm avvia semplicemente il risultato.

root@kitploit:~
# compila localmente, esegui nella VM senza push/pull
docker build -t myapp .
docker save myapp | smolvm machine run --image - -- ./app

# da un file di archivio (si avvia senza rete)
smolvm machine run --image ./myapp.tar -- ./app

# da una directory rootfs già decompressa
smolvm machine run --image ./rootfs/ -- ./app

Macchine persistenti per lo sviluppo — crea, arresta, avvia. I pacchetti installati sopravvivono ai riavvii.

root@kitploit:~
smolvm machine create --net --name myvm
smolvm machine start --name myvm
smolvm machine exec --name myvm -- apk add sl
smolvm machine exec --name myvm -it -- /bin/sh
# dentro: sl, ls, uname -a — digita 'exit' per uscire
smolvm machine stop --name myvm

Usa git e SSH senza copiare chiavi private nell'ospite. Inoltra l'SSH agent del tuo host nella VM. L'ospite può chiedere all'agent di firmare con qualsiasi chiave inoltrata mentre il socket è disponibile, quindi inoltra solo a carichi di lavoro di cui ti fidi. Richiede un SSH agent in esecuzione sul tuo host (ssh-add -l per verificare).

root@kitploit:~
smolvm machine run --ssh-agent --net --image alpine -- sh -c "apk add -q openssh-client && ssh-add -l"
# elenca le tue chiavi host; il materiale della chiave privata rimane nell'agent host

smolvm machine exec --name myvm -- git clone [email protected]:org/private-repo.git

Dichiara ambienti in un file — vedi Smolfile sopra per la configurazione riproducibile della macchina, e per catturare una macchina configurata in un'immagine .smolmachine riutilizzabile senza scrivere un Dockerfile.

Come Funziona

Ogni carico di lavoro viene eseguito in una VM virtualizzata a livello hardware con il proprio kernel ospite su Hypervisor.framework (macOS), KVM (Linux) o Windows Hypervisor Platform (Windows). libkrun è il VMM e libkrunfw fornisce il kernel ospite. Impacchettalo in un .smolmachine e funziona ovunque l'architettura host corrisponda, con zero dipendenze.

Le immagini usano il formato OCI — lo stesso standard aperto usato da Docker. Qualsiasi immagine su Docker Hub, ghcr.io o altri registry OCI può essere scaricata e avviata come microVM. Nessun daemon Docker richiesto.

Predefiniti: 4 vCPU, 8 GiB di RAM. La memoria è elastica tramite virtio balloon — l'host impegna solo ciò che l'ospite usa effettivamente e recupera automaticamente il resto. I thread vCPU dormono nell'ipervisore quando inattivi, quindi il sovra-provisioning ha un costo quasi nullo. Sostituisci con --cpus e --mem.

Modello di Sicurezza

smolvm rafforza il confine ospite/host dando a ogni carico di lavoro una VM e un kernel ospite separati. Non è, di per sé, un piano di controllo multi-utente indurito:

  • I processi CLI smolvm e VMM vengono eseguiti con i permessi dell'utente host che li invoca. Quel account utente, il sistema operativo host, il backend ipervisore, libkrun e smolvm fanno parte della base di calcolo fidata.
  • Le directory host passate con --volume sono intenzionalmente esposte all'ospite con l'accesso richiesto. Non montare segreti o percorsi sensibili in un carico di lavoro non fidato.
  • --ssh-agent non copia il materiale della chiave privata nell'ospite, ma concede all'ospite l'accesso al socket dell'agent inoltrato e quindi la capacità di richiedere firme mentre la VM è in esecuzione.
  • La rete è disabilitata per impostazione predefinita. Abilitare --net, l'inoltro delle porte o i servizi host espande la superficie raggiungibile del carico di lavoro.
  • Nell'uso locale autonomo, lo stato e gli endpoint di controllo di smolvm sono limitati all'ambiente dell'utente che li invoca. Per co-tenant locali ostili, aggiungi separazione degli account a livello host e confinamento del sistema operativo attorno al processo VMM. Questa sezione non descrive il piano di controllo cloud separato di smolmachines né le sue garanzie di isolamento dei tenant.
  • Gli archivi di release pubblicano checksum SHA-256 e il programma di installazione rifiuta una mancata corrispondenza quando il file checksum è disponibile. Le release non sono attualmente firmate né accompagnate da attestazioni di provenienza, e il programma di installazione consente l'installazione quando il file checksum non può essere scaricato.

Tratta root nell'ospite come non fidato. Il confine VM limita il suo accesso diretto all'host, mentre ogni capacità inoltrata esplicitamente, inclusi mount, accesso di rete, porte e accesso SSH agent, diventa parte dell'autorità del carico di lavoro.

Confronto

smolvmContainersColimaQEMUFirecrackerKata
Confine del carico di lavoroVM + kernel ospiteNamespace + kernel condivisoNamespace dentro VM condivisaVM + kernel ospiteVM + kernel ospiteVM per container
Tempo di avvio<200ms~100ms~secondi~15-30s<125ms~500ms
ArchitetturaLibreria (libkrun)DaemonDaemon (in VM)ProcessoProcessoStack runtime
VM per carico di lavoroSìNoNo (condivisa)SìSìSì
macOS nativoSìTramite VM DockerSì (krunkit)SìNoNo
SDK incorporabileSìNoNoNoNoNo
Artefatti portabili.smolmachineImmagini (richiedono daemon)NoNoNoNo

Supporto Piattaforme

HostOspiteRequisiti
macOS Apple SiliconLinux arm64macOS 11+
macOS IntelLinux x86_64macOS 11+ (non testato)
Linux x86_64Linux x86_64KVM (/dev/kvm)
Linux aarch64Linux aarch64KVM (/dev/kvm)
Windows x86_64Linux x86_64Windows Hypervisor Platform (WHP) abilitato

Limitazioni Note

  • La rete è opt-in (--net su machine create). Solo TCP/UDP, niente ICMP.
  • Mount di volumi: solo directory (niente file singoli). Il montaggio su /workspace (-v /host/dir:/workspace) ha priorità sul workspace predefinito del disco di storage — viene usata la tua directory host.
  • macOS: il binario deve essere firmato con entitlements Hypervisor.framework (com.apple.security.hypervisor). La release distribuita lo è; un binario ri-firmato o appena compilato lo perde silenziosamente e ogni avvio di VM fallisce con krun_start_enter returned: -22 (EINVAL). Ri-firmalo (ad-hoc va bene): codesign --force --sign - --entitlements hv.entitlements <smolvm-bin> dove hv.entitlements è un plist contenente <key>com.apple.security.hypervisor</key><true/>.
  • --ssh-agent richiede un SSH agent in esecuzione sull'host (SSH_AUTH_SOCK deve essere impostato).
  • L'accelerazione GPU richiede libkrun compilato con GPU=1 e virglrenderer + un driver Vulkan sull'host (vedi Accelerazione GPU sotto).
  • Windows: --net funziona come sulle altre piattaforme (virtio-net con inoltro porte in ingresso; TSI per VM solo in uscita), così come machine exec / sessioni interattive e machine stats. Non ancora disponibili su Windows: accelerazione GPU e machine fork / snapshot. Pack create richiede storage-template.ext4 / overlay-template.ext4 accanto a smolvm.exe (Windows non ha mkfs.ext4 host).

Accelerazione GPU

smolvm espone la GPU host agli ospiti tramite virtio-gpu / Venus (Vulkan-over-virtio). I carichi di lavoro ospite vedono un vero dispositivo Vulkan; su Linux + Intel questo viene renderizzato come:

root@kitploit:~
ANGLE (Intel, Vulkan 1.4 (Virtio-GPU Venus (Intel(R) UHD Graphics ...)), venus)

Requisiti host

macOS — virglrenderer e MoltenVK sono inclusi nella distribuzione smolvm. Nessuna installazione aggiuntiva necessaria.

Linux — virglrenderer e un driver Vulkan host devono essere installati dal gestore pacchetti di sistema:

DistroPacchetti
Alpineapk add virglrenderer mesa-vulkan-intel (o mesa-vulkan-ati per AMD)
Debian/Ubuntuapt install virglrenderer0 mesa-vulkan-drivers

virglrenderer dipende da libEGL e libdrm dello stack del driver GPU host — questi sono specifici dell'hardware e non possono essere inclusi. Qualsiasi host Linux con capacità GPU li avrà già installati tramite il suo driver GPU.

Utilizzo

root@kitploit:~
# CLI
smolvm machine run --gpu --image alpine -- vulkaninfo --summary

# Smolfile
# gpu = true
# gpu_vram = 2048   # MiB, predefinito 4096

Il loader Vulkan ospite deve essere puntato all'ICD virtio:

root@kitploit:~
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.x86_64.json

Esempio browser headless

Vedi examples/headless-browser/ per una configurazione Chromium funzionante che usa ANGLE + Venus per WebGL accelerato via hardware dentro una VM headless.

Remoting API CUDA

--gpu e --cuda forniscono interfacce diverse. --gpu espone Vulkan tramite virtio-gpu / Venus; non fornisce CUDA. --cuda abilita il remoting API CUDA: shim ospite senza driver inoltrano le chiamate CUDA su vsock a un processo host, che le esegue tramite il driver NVIDIA dell'host.

Il remoting CUDA richiede una GPU NVIDIA e un driver NVIDIA funzionante sull'host. Non è passthrough GPU: l'ospite non riceve né il dispositivo fisico né un driver NVIDIA.

Gli host Linux con fork intensivo dovrebbero usare un kernel contenente la correzione KVM a monte 916b7f4. I kernel interessati possono riportare intermittentemente ENOMEM al primo KVM_RUN anche con ampia memoria host; smolvm riduce l'esposizione e sostituisce un worker fallito, ma l'aggiornamento del kernel è la correzione definitiva.

Il confine VM isola comunque CPU, memoria e filesystem del carico di lavoro. L'accesso GPU è mediato da processi host e dalla GPU host condivisa, quindi l'isolamento GPU rimane a livello di processo piuttosto che un confine hardware o VM. Non trattare il remoting CUDA come un confine di isolamento GPU multi-tenant indurito.

Vedi Accesso GPU tramite remoting API: come una microVM senza driver esegue CUDA per il design, i compromessi e il confronto con il passthrough.

Sviluppo

Vedi docs/DEVELOPMENT.md.

Apache-2.0 · creato da @binsquare · twitter · github