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
DeadDialect — Una ISA RISC-V unica per sessione — ogni avvio parla un dialetto diverso. I vecchi binari diventano invalidi. Il malware non può persistere. | Kitploit
Strumenti/GitHubGitHub/engrbilal992/deaddialect
Strumenti DifensiviSicurezza Sistemi EmbeddedExploitReverse EngineeringAnalisi MalwareCrittografiaPenetration TestingSicurezza HardwareAnalisi di BinariRed Teaming
GitHubengrbilal992/deaddialect

DeadDialect

624 mesi faNon ancora revisionato

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 →

Una ISA RISC-V unica per sessione — ogni avvio parla un dialetto diverso. I vecchi binari diventano invalidi. Il malware non può persistere.

Vedi Repository
Condividi

DeadDialect

Ogni avvio parla una lingua diversa. Il binario di ieri è il codice morto di oggi.

Un sistema di rimappatura dell'ISA RISC-V unico per sessione. Ogni volta che il sistema si avvia, genera una permutazione crittografica fresca del set di istruzioni. I binari compilati per una sessione vengono crittograficamente rifiutati nella successiva. Il malware che sopravvive a un riavvio non può essere eseguito: parla un dialetto morto.


L'idea

Le ISA standard sono contratti fissi. Ogni programma, ogni libreria, ogni pezzo di malware concorda su cosa significhi 0x13, cosa faccia la syscall 64, quale registro sia lo stack pointer. DeadDialect rompe quel contratto a ogni sessione.

root@kitploit:~
Boot A:  addi = 0x13,  write = syscall 64,   t0 = x5
Boot B:  addi = 0x33,  write = syscall 178,  t0 = x19
Boot C:  addi = 0x67,  write = syscall 291,  t0 = x23

Un binario compilato per Boot A è privo di senso su Boot B. O esegue le istruzioni sbagliate, o chiama le funzioni del kernel sbagliate, o fallisce il controllo dell'impronta crittografica — a seconda di quale si verifichi per prima.


Architettura

root@kitploit:~
Seed di sessione a 256 bit  (os.urandom)
         │
         ├─── permutazione opcode   →  /etc/isa/map              12!  ≈ 2²⁹
         ├─── permutazione registri →  /etc/isa/register_keyring 21!  ≈ 2⁶⁵
         └─── permutazione syscall  →  /etc/isa/syscall_keyring  436! ≈ 2³⁰⁰⁰⁺
                                                                 ─────────────
                                               Entropia combinata: 2³⁰⁹⁴⁺

Tre strati indipendenti. Un attaccante che ne rompe uno deve comunque affrontare gli altri due.

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                     Binario (.text)                           │
│        riscritto in fase di compilazione da isa_integrate.py  │
│        NOP di impronta incorporati in .text+0                 │
└─────────────────────────┬────────────────────────────────────┘
                          │
                          ▼
┌──────────────────────────────────────────────────────────────┐
│                  QEMU 8.2.0 patchato                          │
│                                                              │
│  translate.c  ←  register_mapping.h                         │
│  ├── verifica impronta SHA-256 a 24 bit                      │
│  │   mancata corrispondenza → SIGILL prima della prima       │
│  │   istruzione                                               │
│  └── rimappa 21 registri mescolabili                         │
│                                                              │
│  syscall.c    ←  syscall_mapping.h                          │
│  └── traduce il numero syscall permutato → standard         │
│                                                              │
│  [Fase 1/2]  ←  isa_mapping.h                               │
│  └── rimappa 12 opcode primari                               │
└──────────────────────────┬───────────────────────────────────┘
                           │
                           ▼
              Alpine Linux RISC-V (si avvia normalmente)
              Il SO non è a conoscenza della rimappatura

Protocollo di impronta

Ogni binario compilato porta un'impronta crittografica a 24 bit incorporata come due NOP innocui addi x0,x0,N all'inizio di .text. Questi sono veri NOP RISC-V — scrivono sul registro zero e non hanno alcun effetto architetturale — ma codificano la prova di sessione.

root@kitploit:~
QEMU vede i NOP di impronta + keyring corrispondente  →  ESEGUITO
QEMU vede i NOP di impronta + keyring errato          →  SIGILL
QEMU non vede impronta + keyring attivo                →  SIGILL  ← binario standard bloccato
QEMU vede i NOP di impronta + keyring vuoto            →  SIGILL  ← binario rimappato bloccato

L'impronta è derivata da SHA-256(seed). Nessuna collisione trovata nei primi 100.000 seed testati.


Struttura del repository

root@kitploit:~
DeadDialect/
├── opcode-remapping/       Fase 1 — mescolamento di 12 opcode
├── trigger-remapping/      Fase 2 — trigger live, nessun riavvio necessario
│   └── alpine/             Demo su Alpine Linux
├── syscall-remapping/      Fase 3 M1 — mescolamento di 436 syscall
├── register-remapping/     Fase 3 M2 — mescolamento di 21 registri + impronta
└── integration/            Fase 3 M3 — tutti gli strati simultaneamente
    ├── isa_integrate.py    riscrittore unificato
    ├── register_mapping.h
    ├── syscall_mapping.h
    ├── isa_remap_ldso.h    patch per musl ld.so (binari dinamici)
    ├── trigger/
    │   └── trigger_demo.sh un trigger ruota entrambi gli strati atomicamente
    ├── alpine/
    │   ├── boot_alpine.sh  avvia Alpine sotto QEMU patchato
    │   ├── alpine_demo.sh  demo ISA completa all'interno di Alpine
    │   ├── full_alpine_test.sh
    │   └── setup_alpine.sh configurazione iniziale della macchina
    ├── build.sh            scarica e applica patch a QEMU 8.2.0
    ├── demo.sh
    └── audit.sh            51/51 verifiche

Avvio rapido

Requisiti: Ubuntu 22.04, clang, lld, python3, wget, ninja-build, libglib2.0-dev, libpixman-1-dev, libslirp-dev

root@kitploit:~
git clone https://github.com/engrbilal992/DeadDialect.git
cd DeadDialect/integration

# Compila QEMU 8.2.0 patchato (~10 min al primo avvio)
bash build.sh

# Demo di sicurezza
bash demo.sh

# Un trigger ruota entrambi gli strati simultaneamente
bash trigger/trigger_demo.sh

# Avvia Alpine Linux sotto QEMU patchato
cd alpine
bash setup_alpine.sh   # solo la prima volta — scarica kernel + rootfs
bash boot_alpine.sh    # si avvia al prompt ~ # in circa 30 secondi

# Demo ISA Alpine
bash alpine_demo.sh
bash full_alpine_test.sh

Risultati demo

Prova di sicurezza a 6 scenari

root@kitploit:~
T1: Binario standard,   keyring vuoti     →  eseguito   ✓
T2: Binario integrato, keyring corretti   →  eseguito   ✓
T3: Binario standard,   keyring attivi     →  SIGILL     ✗
T4: Binario integrato, keyring vuoti       →  SIGILL     ✗
T5: Binario con seed errato               →  SIGILL     ✗
T6: Binario con seed corretto             →  eseguito   ✓

Demo del trigger

root@kitploit:~
Sessione A  binario eseguito                   SUCCESSO ✓
Sessione A  malware eseguito                   ESGUITO (previsto — stessa sessione)
           ── trigger scattato ──
Sessione B  vecchio binario                    BLOCCATO ✓
Sessione B  malware                            BLOCCATO ✓
Sessione B  nuovo binario compilato per B       SUCCESSO ✓

Test di stress

root@kitploit:~
100.000 seed — zero collisioni
Seed 999999999                →  BLOCCATO in sessione diversa ✓
Seed 2²⁵⁶-1 (massimo 256 bit) →  BLOCCATO in sessione diversa ✓
Keyring corrotto a metà esecuzione →  BLOCCATO su keyring corrotto ✓

Risultati audit

TraguardoVerificheStato
Rimappatura trigger37/37✓
Rimappatura syscall40/40✓
Rimappatura registri43/43✓
Integrazione51/51✓

Proprietà di sicurezza

Cosa blocca

  • Persistenza del malware — qualsiasi binario di una sessione precedente è morto al prossimo avvio
  • Exploit precompilati — shellcode per un'ISA fissa fallisce immediatamente
  • Attacchi di replay — i binari di una sessione non possono essere eseguiti in un'altra
  • Esecuzione su QEMU standard — i binari rimappati richiedono l'esecutore patchato

Perché l'entropia è importante

root@kitploit:~
Indovinare la permutazione dei registri:  1 su 21!  ≈ 1 su 51 quintilioni
Indovinare la permutazione delle syscall: 1 su 436! ≈ 1 su 10^(1000+)
Indovinare entrambe simultaneamente:  attacco non praticabile

Ambito del POC

  • Richiede -march=rv64g (istruzioni compresse RVC non ancora gestite)
  • Solo binari statici per programmi di test (supporto dinamico tramite isa_remap_ldso.h)
  • Attacchi completati all'interno di una singola sessione non sono affrontati

Come funziona ogni strato

Registri (register_mapping.h)

Mescolati 21 dei 32 registri RISC-V. I registri ABI sono congelati. L'hook di QEMU usa la tabella OPCODE_FIELDS — solo i campi effettivi dei registri vengono rimappati, gli immediati non vengono mai toccati (correzione di Curtis).

CongelatiMescolabili
x0 x1 x2 x10-x17x3-x9, x18-x31 (21 registri)

Syscall (syscall_mapping.h)

436 syscall RISC-V Linux permutate. Una riga in do_syscall(). Ricarica mtime — il keyring si aggiorna senza riavviare QEMU.

Opcode (isa_mapping.h)

12 opcode primari mescolati. Hook di decodifica in translate.c ripristina l'opcode standard prima del decodificatore.

ld.so (isa_remap_ldso.h)

Patch per linker dinamico musl — rimappa il .text di ogni ELF caricato al momento del caricamento. Non può essere aggirato tramite LD_PRELOAD. Richiede la ricostruzione di musl su Alpine.


Direzioni future

  • Supporto ARM (stesso concetto, diverso contratto ISA fisso)
  • Rimappatura del .text del kernel pre-avvio
  • Implementazione hardware su FPGA
  • Pubblicazione su Hacker News / rivista accademica

Autori e collaboratori

Curtis Cole

Muhammad Bilal

"Sapevo che la mia idea fosse reale, ma sono abbastanza sicuro che tutti pensassero che fossi pazzo." — Curtis Cole

Scarica lo strumento