Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DeadDialect — Уникальная для каждого сеанса ISA RISC-V — каждая загрузка говорит на другом диалекте. Старые бинарники становятся недействительными. Вредоносное ПО не может сохраняться. | Kitploit
Инструменты/GitHubGitHub/engrbilal992/deaddialect
Оборонительные ИнструментыБезопасность встроенных системЭксплуатацияОбратная инженерияАнализ вредоносных программКриптографияТестирование на ПроникновениеАппаратная БезопасностьАнализ Бинарных ФайловRed Teaming
GitHubengrbilal992/deaddialect
64 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

DeadDialect

Уникальная для каждого сеанса ISA RISC-V — каждая загрузка говорит на другом диалекте. Старые бинарники становятся недействительными. Вредоносное ПО не может сохраняться.

Репозиторий

DeadDialect

Каждая загрузка говорит на своем языке. Вчерашний бинарный код — это сегодняшний мертвый код.

Система уникального для сеанса переназначения набора команд RISC-V. Каждый раз при загрузке системы генерируется новая криптографическая перестановка набора инструкций. Бинарные файлы, скомпилированные для одного сеанса, криптографически отвергаются в следующем. Вредоносное ПО, пережившее перезагрузку, не может выполниться — оно говорит на мертвом диалекте.


Идея

Стандартные ISA — это фиксированные контракты. Каждая программа, каждая библиотека, каждая вредоносная программа согласны с тем, что означает 0x13, что делает системный вызов 64, какой регистр является указателем стека. DeadDialect разрывает этот контракт в каждом сеансе.

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

Бинарный файл, скомпилированный для Boot A, — бессмыслица на Boot B. Он либо выполняет неверные инструкции, вызывает неверные функции ядра, либо не проходит проверку криптографического отпечатка — срабатывает то, что произойдет раньше.


Архитектура

root@kitploit:~
256-bit session seed  (os.urandom)
         │
         ├─── opcode permutation   →  /etc/isa/map              12!  ≈ 2²⁹
         ├─── register permutation →  /etc/isa/register_keyring 21!  ≈ 2⁶⁵
         └─── syscall permutation  →  /etc/isa/syscall_keyring  436! ≈ 2³⁰⁰⁰⁺
                                                                 ─────────────
                                               Combined entropy: 2³⁰⁹⁴⁺

Три независимых слоя. Атакующий, взломавший один, все еще сталкивается с двумя другими.

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                     Binary (.text)                           │
│        rewritten at compile time by isa_integrate.py         │
│        fingerprint NOPs embedded at .text+0                  │
└─────────────────────────┬────────────────────────────────────┘
                          │
                          ▼
┌──────────────────────────────────────────────────────────────┐
│                  Patched QEMU 8.2.0                          │
│                                                              │
│  translate.c  ←  register_mapping.h                         │
│  ├── verify 24-bit SHA-256 fingerprint                       │
│  │   mismatch → SIGILL before first instruction              │
│  └── remap 21 shuffleable registers                         │
│                                                              │
│  syscall.c    ←  syscall_mapping.h                          │
│  └── translate permuted syscall number → standard           │
│                                                              │
│  [Phase 1/2]  ←  isa_mapping.h                              │
│  └── remap 12 primary opcodes                               │
└──────────────────────────┬───────────────────────────────────┘
                           │
                           ▼
              Alpine Linux RISC-V (boots normally)
              OS is unaware of the remapping

Протокол отпечатков

Каждый скомпилированный бинарный файл несет 24-битный криптографический отпечаток, встроенный в виде двух безвредных NOP addi x0,x0,N в начале .text. Это настоящие RISC-V NOP — они пишут в нулевой регистр и не оказывают архитектурного эффекта — но они кодируют доказательство сеанса.

root@kitploit:~
QEMU sees fingerprint NOPs + matching keyring  →  RUN
QEMU sees fingerprint NOPs + wrong keyring     →  SIGILL
QEMU sees no fingerprint  + active keyring     →  SIGILL  ← standard binary blocked
QEMU sees fingerprint NOPs + empty keyring     →  SIGILL  ← remapped binary blocked

Отпечаток получен из SHA-256(seed). Коллизий не обнаружено среди первых 100 000 проверенных seed.


Структура репозитория

root@kitploit:~
DeadDialect/
├── opcode-remapping/       Phase 1 — 12 opcode shuffle
├── trigger-remapping/      Phase 2 — live trigger, no reboot needed
│   └── alpine/             Alpine Linux demo
├── syscall-remapping/      Phase 3 M1 — 436 syscall shuffle
├── register-remapping/     Phase 3 M2 — 21 register shuffle + fingerprint
└── integration/            Phase 3 M3 — all layers simultaneously
    ├── isa_integrate.py    unified rewriter
    ├── register_mapping.h
    ├── syscall_mapping.h
    ├── isa_remap_ldso.h    musl ld.so patch (dynamic binaries)
    ├── trigger/
    │   └── trigger_demo.sh one trigger rotates both layers atomically
    ├── alpine/
    │   ├── boot_alpine.sh  boot Alpine under patched QEMU
    │   ├── alpine_demo.sh  full ISA demo inside Alpine
    │   ├── full_alpine_test.sh
    │   └── setup_alpine.sh fresh machine setup
    ├── build.sh            downloads + patches QEMU 8.2.0
    ├── demo.sh
    └── audit.sh            51/51 checks

Быстрый старт

Требования: 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

# Build patched QEMU 8.2.0 (~10 min first run)
bash build.sh

# Security demo
bash demo.sh

# One trigger rotates both layers simultaneously
bash trigger/trigger_demo.sh

# Boot Alpine Linux under patched QEMU
cd alpine
bash setup_alpine.sh   # first time only — downloads kernel + rootfs
bash boot_alpine.sh    # boots to ~ # prompt in ~30 seconds

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

Результаты демонстрации

Доказательство безопасности в 6 сценариях

root@kitploit:~
T1: Standard binary,   empty keyrings    →  runs   ✓
T2: Integrated binary, correct keyrings  →  runs   ✓
T3: Standard binary,   active keyrings   →  SIGILL ✗
T4: Integrated binary, empty keyrings    →  SIGILL ✗
T5: Wrong-seed binary                    →  SIGILL ✗
T6: Correct seed binary                  →  runs   ✓

Демонстрация триггера

root@kitploit:~
Session A  binary runs                        SUCCESS ✓
Session A  malware runs                       EXECUTED (expected — same session)
           ── trigger fires ──
Session B  old binary                         BLOCKED ✓
Session B  malware                            BLOCKED ✓
Session B  new binary compiled for B          SUCCESS ✓

Стресс-тесты

root@kitploit:~
100,000 seeds — zero collisions
Seed 999999999                →  BLOCKED under different session ✓
Seed 2²⁵⁶-1 (max 256-bit)    →  BLOCKED under different session ✓
Keyring corrupted mid-run     →  BLOCKED on corrupted keyring   ✓

Результаты аудита

Milestone

Свойства безопасности

Что останавливает

  • Постоянство вредоносного ПО — любой бинарный файл из предыдущего сеанса мертв при следующей загрузке
  • Предварительно скомпилированные эксплоиты — shellcode для фиксированной ISA немедленно терпит неудачу
  • Атаки повторного воспроизведения — бинарные файлы из одного сеанса не могут выполняться в другом
  • Стандартное выполнение QEMU — переназначенные бинарные файлы требуют патченного исполнителя

Почему энтропия важна

root@kitploit:~
Guessing register permutation:  1 in 21!  ≈ 1 in 51 quintillion
Guessing syscall permutation:   1 in 436! ≈ 1 in 10^(1000+)
Guessing both simultaneously:   not a viable attack

Область POC

  • Требуется -march=rv64g (сжатые инструкции RVC пока не поддерживаются)
  • Только статические бинарные файлы для тестовых программ (динамическая поддержка через isa_remap_ldso.h)
  • Атаки, завершающиеся в течение одного сеанса, не рассматриваются

Как работает каждый слой

Регистры (register_mapping.h)

Перемешиваются 21 из 32 регистров RISC-V. Регистры ABI заморожены. Хук QEMU использует таблицу OPCODE_FIELDS — переназначаются только фактические поля регистров, непосредственные значения никогда не затрагиваются (исправление Кертиса).

ЗамороженныеПеремешиваемые
x0 x1 x2 x10-x17x3-x9, x18-x31 (21 рег.)

Системные вызовы (syscall_mapping.h)

Переставлены 436 системных вызовов Linux RISC-V. Одна строка в do_syscall(). mtime-reload — обновление keyring без перезапуска QEMU.

Коды операций (isa_mapping.h)

Перемешаны 12 первичных кодов операций. Хук декодирования в translate.c восстанавливает стандартный код операции перед декодером.

ld.so (isa_remap_ldso.h)

Патч динамического компоновщика musl — переназначает .text каждого загруженного ELF во время загрузки. Его нельзя обойти через LD_PRELOAD. Требуется пересборка musl для Alpine.


Будущие направления

  • Поддержка ARM (та же концепция, другой фиксированный контракт ISA)
  • Переназначение .text ядра до загрузки
  • Аппаратная реализация на ПЛИС
  • Публикация на Hacker News / в академическом издании

Авторы и соавторы

Кертис Коул

Мухаммад Билал

«Я знал, что моя идея реальна, но уверен, что все просто считали меня сумасшедшим». — Кертис Коул

Скачать инструмент
Checks
Status
Trigger remapping37/37✓
Syscall remapping40/40✓
Register remapping43/43✓
Integration51/51✓