
एक सत्र-अद्वितीय RISC-V ISA — हर बूट एक अलग बोली बोलता है। पुरानी बाइनरी अमान्य हो जाती हैं। मैलवेयर स्थायी नहीं रह सकता।
प्रत्येक बूट एक अलग भाषा बोलता है। कल का बाइनरी आज का मृत कोड है।
एक सत्र-अनूठा RISC-V ISA पुनर्मैपिंग सिस्टम। हर बार जब सिस्टम बूट होता है, यह निर्देश सेट का एक नया क्रिप्टोग्राफिक क्रमपरिवर्तन उत्पन्न करता है। एक सत्र के लिए संकलित बाइनरी अगले सत्र में क्रिप्टोग्राफिक रूप से अस्वीकृत हो जाते हैं। रिबूट से बचने वाला मैलवेयर निष्पादित नहीं हो सकता — यह एक मृत बोली बोलता है।
मानक ISA निश्चित अनुबंध होते हैं। हर प्रोग्राम, हर लाइब्रेरी, मैलवेयर का हर टुकड़ा इस बात पर सहमत होता है कि 0x13 का अर्थ क्या है, सिस्कॉल 64 क्या करता है, स्टैक पॉइंटर कौन सा रजिस्टर है। DeadDialect हर सत्र में उस अनुबंध को तोड़ता है।
बूट A: addi = 0x13, write = syscall 64, t0 = x5
बूट B: addi = 0x33, write = syscall 178, t0 = x19
बूट C: addi = 0x67, write = syscall 291, t0 = x23
बूट A के लिए संकलित बाइनरी बूट B पर बकवास है। यह या तो गलत निर्देश निष्पादित करता है, गलत कर्नेल फ़ंक्शन कॉल करता है, या क्रिप्टोग्राफिक फ़िंगरप्रिंट जांच में विफल रहता है — जो भी पहले हो।
256-बिट सत्र बीज (os.urandom)
│
├─── ऑपकोड क्रमपरिवर्तन → /etc/isa/map 12! ≈ 2²⁹
├─── रजिस्टर क्रमपरिवर्तन → /etc/isa/register_keyring 21! ≈ 2⁶⁵
└─── सिस्कॉल क्रमपरिवर्तन → /etc/isa/syscall_keyring 436! ≈ 2³⁰⁰⁰⁺
─────────────
संयुक्त एंट्रॉपी: 2³⁰⁹⁴⁺
तीन स्वतंत्र परतें। एक हमलावर जो एक को तोड़ता है, वह अभी भी अन्य दो का सामना करता है।
┌──────────────────────────────────────────────────────────────┐
│ बाइनरी (.text) │
│ संकलन समय पर isa_integrate.py द्वारा पुनर्लिखित │
│ .text+0 पर एम्बेडेड फ़िंगरप्रिंट NOP │
└─────────────────────────┬────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ पैच किया हुआ QEMU 8.2.0 │
│ │
│ translate.c ← register_mapping.h │
│ ├── 24-बिट SHA-256 फ़िंगरप्रिंट सत्यापित करें │
│ │ बेमेल → पहले निर्देश से पहले SIGILL │
│ └── 21 पुनर्व्यवस्थित करने योग्य रजिस्टरों को पुनः मैप करें │
│ │
│ syscall.c ← syscall_mapping.h │
│ └── व्युत्पन्न सिस्कॉल नंबर को मानक में अनुवाद करें │
│ │
│ [Phase 1/2] ← isa_mapping.h │
│ └── 12 प्राथमिक ऑपकोडों को पुनः मैप करें │
└──────────────────────────┬───────────────────────────────────┘
│
▼
Alpine Linux RISC-V (सामान्य रूप से बूट होता है)
OS पुनर्मैपिंग से अनजान है
हर संकलित बाइनरी .text की शुरुआत में दो हानिरहित addi x0,x0,N NOP के रूप में एम्बेडेड 24-बिट क्रिप्टोग्राफिक फ़िंगरप्रिंट रखता है। ये वास्तविक RISC-V NOP हैं — वे शून्य रजिस्टर में लिखते हैं और उनका कोई आर्किटेक्चरल प्रभाव नहीं है — लेकिन वे सत्र प्रमाण एन्कोड करते हैं।
QEMU फ़िंगरप्रिंट NOP + मैचिंग कीरिंग देखता है → RUN
QEMU फ़िंगरप्रिंट NOP + गलत कीरिंग देखता है → SIGILL
QEMU कोई फ़िंगरप्रिंट नहीं + सक्रिय कीरिंग देखता है → SIGILL ← मानक बाइनरी अवरुद्ध
QEMU फ़िंगरप्रिंट NOP + खाली कीरिंग देखता है → SIGILL ← पुनर्मैप किया गया बाइनरी अवरुद्ध
फ़िंगरप्रिंट SHA-256(बीज) से प्राप्त होता है। परीक्षण किए गए पहले 100,000 बीजों में कोई टकराव नहीं पाया गया।
DeadDialect/
├── opcode-remapping/ चरण 1 — 12 ऑपकोड फेरबदल
├── trigger-remapping/ चरण 2 — लाइव ट्रिगर, रिबूट की आवश्यकता नहीं
│ └── alpine/ Alpine Linux डेमो
├── syscall-remapping/ चरण 3 M1 — 436 syscall फेरबदल
├── register-remapping/ चरण 3 M2 — 21 रजिस्टर फेरबदल + फ़िंगरप्रिंट
└── integration/ चरण 3 M3 — सभी परतें एक साथ
├── isa_integrate.py एकीकृत रीराइटर
├── register_mapping.h
├── syscall_mapping.h
├── isa_remap_ldso.h musl ld.so पैच (डायनामिक बाइनरी)
├── trigger/
│ └── trigger_demo.sh एक ट्रिगर दोनों परतों को परमाणु रूप से घुमाता है
├── alpine/
│ ├── boot_alpine.sh पैच किए गए QEMU के तहत Alpine बूट करें
│ ├── alpine_demo.sh Alpine के अंदर पूर्ण ISA डेमो
│ ├── full_alpine_test.sh
│ └── setup_alpine.sh नई मशीन सेटअप
├── build.sh QEMU 8.2.0 डाउनलोड + पैच करता है
├── demo.sh
└── audit.sh 51/51 जांचें
आवश्यकताएँ: Ubuntu 22.04, clang, lld, python3, wget, ninja-build, libglib2.0-dev, libpixman-1-dev, libslirp-dev
git clone https://github.com/engrbilal992/DeadDialect.git
cd DeadDialect/integration
# पैच किया हुआ QEMU 8.2.0 बनाएं (~10 मिनट पहला रन)
bash build.sh
# सुरक्षा डेमो
bash demo.sh
# एक ट्रिगर दोनों परतों को एक साथ घुमाता है
bash trigger/trigger_demo.sh
# पैच किए गए QEMU के तहत Alpine Linux बूट करें
cd alpine
bash setup_alpine.sh # केवल पहली बार — कर्नेल + rootfs डाउनलोड करता है
bash boot_alpine.sh # ~30 सेकंड में ~ # प्रॉम्प्ट पर बूट होता है
# Alpine ISA डेमो
bash alpine_demo.sh
bash full_alpine_test.sh
T1: मानक बाइनरी, खाली keyrings → चलता है ✓
T2: एकीकृत बाइनरी, सही keyrings → चलता है ✓
T3: मानक बाइनरी, सक्रिय keyrings → SIGILL ✗
T4: एकीकृत बाइनरी, खाली keyrings → SIGILL ✗
T5: गलत-बीज बाइनरी → SIGILL ✗
T6: सही बीज बाइनरी → चलता है ✓
सत्र A बाइनरी चलता है SUCCESS ✓
सत्र A मैलवेयर चलता है EXECUTED (अपेक्षित — एक ही सत्र)
── ट्रिगर चालू होता है ──
सत्र B पुराना बाइनरी BLOCKED ✓
सत्र B मैलवेयर BLOCKED ✓
सत्र B B के लिए संकलित नया बाइनरी SUCCESS ✓
100,000 बीज — शून्य टकराव
बीज 999999999 → भिन्न सत्र के तहत BLOCKED ✓
बीज 2²⁵⁶-1 (अधिकतम 256-बिट) → भिन्न सत्र के तहत BLOCKED ✓
मिड-रन में कीरिंग दूषित → दूषित कीरिंग पर BLOCKED ✓
| माइलस्टोन |
|---|
रजिस्टर क्रमपरिवर्तन का अनुमान लगाना: 1 in 21! ≈ 1 in 51 क्विंटिलियन
सिस्कॉल क्रमपरिवर्तन का अनुमान लगाना: 1 in 436! ≈ 1 in 10^(1000+)
दोनों का एक साथ अनुमान लगाना: कोई व्यवहार्य हमला नहीं
-march=rv64g आवश्यक (RVC संपीड़ित निर्देश अभी तक संभाले नहीं गए)isa_remap_ldso.h के माध्यम से)register_mapping.h)32 RISC-V रजिस्टरों में से 21 फेरबदल किए गए। ABI रजिस्टर जमे हुए। QEMU हुक OPCODE_FIELDS तालिका का उपयोग करता है — केवल वास्तविक रजिस्टर फ़ील्ड पुनर्मैप किए जाते हैं, इमिडिएट कभी स्पर्श नहीं किए जाते (Curtis का फिक्स)।
| जमे हुए | फेरबदल करने योग्य |
|---|---|
| x0 x1 x2 x10-x17 | x3-x9, x18-x31 (21 रजिस्टर) |
syscall_mapping.h)436 लिनक्स RISC-V syscalls क्रमबद्ध। do_syscall() में एक पंक्ति। mtime-रीलोड — QEMU पुनरारंभ के बिना कीरिंग अपडेट।
isa_mapping.h)12 प्राथमिक ऑपकोड फेरबदल किए गए। translate.c में डिकोड हुक डिकोडर से पहले मानक ऑपकोड को पुनर्स्थापित करता है।
isa_remap_ldso.h)musl डायनामिक लिंकर पैच — लोड समय पर हर लोड किए गए ELF के .text को पुनर्मैप करता है। LD_PRELOAD के माध्यम से बायपास नहीं किया जा सकता। Alpine musl पुनर्निर्माण की आवश्यकता है।
.text पुनर्मैपिंग प्री-बूटCurtis Cole
Muhammad Bilal
"मुझे पता था कि मेरा विचार वास्तविक था, लेकिन मुझे पूरा यकीन है कि सभी ने सोचा कि मैं पागल हूँ।" — Curtis Cole
| जांचें |
|---|
| स्थिति |
|---|
| ट्रिगर पुनर्मैपिंग | 37/37 | ✓ |
| सिस्कॉल पुनर्मैपिंग | 40/40 | ✓ |
| रजिस्टर पुनर्मैपिंग | 43/43 | ✓ |
| एकीकरण | 51/51 | ✓ |