अपडेट पर वापस जाएँ
New releaseSep 12, 2026

kasld v0.4.0

KASLD एक स्थानीय प्रक्रिया से Linux kernel के virtual और physical memory layout को derandomize करता है, जो भी उसका vantage — privilege, configuration, और confinement — अनुमति देता है, उसका उपयोग करके।

साझा करें

KASLD logo generated with Copilot (cropped)

Build Status CodeQL Platform: Linux Architectures C99 Release License: MIT

KASLD एक स्थानीय प्रक्रिया से Linux kernel के virtual और physical memory layout — मुख्य रूप से kernel text base — को पुनः प्राप्त करता है। यह क्या पुनः प्राप्त कर सकता है, यह उस प्रक्रिया के vantage का फलन है: उसके privileges और capabilities, सिस्टम का configuration, और कोई भी container confinement। जहाँ कोई leak या side channel अनुमति देता है, वहाँ यह base को सीधे पुनः प्राप्त कर लेता है, और अन्यथा इसे उन placements के सबसे छोटे समूह तक सीमित कर देता है जिनका उपलब्ध साक्ष्य समर्थन करता है।

inference engine दर्जनों स्वतंत्र तकनीकों के साक्ष्य को architecture के ज्ञात invariants के साथ संयोजित करता है, और kernel के placement को एक residual window तक सीमित कर देता है — जिसे शेष बचे slots की संख्या (वे placements जो KASLR चुन सकता था) और उनके द्वारा दर्शाए गए entropy के bits के रूप में रिपोर्ट किया जाता है: इस vantage से KASLR जिस सुरक्षा को बनाए रखता है उस पर एक upper bound, न कि इस बात की गारंटी कि base attacker की पहुँच से बाहर है (देखें docs/limitations.md)।

एक hardened target पर पूर्ण recovery अक्सर असंभव होती है — ऐसा target जहाँ कोई सीधा kernel-text leak शेष नहीं बचता और उसके architecture और CPU द्वारा उजागर किए गए side channels बंद कर दिए जाते हैं — लेकिन constraint set शायद ही कभी खाली होता है। KASLR रहित architectures पर, engine bootloader द्वारा चुने गए load address का पता लगाता है।

समर्थित:

  • x86 (i386+, amd64)
  • ARM (armv6, armv7, armv8, aarch64)
  • MIPS (mipsbe, mipsel, mips64, mips64el)
  • PowerPC (ppc, ppcle, ppc64, ppc64le)
  • RISC-V (riscv32, riscv64)
  • LoongArch (loongarch64)
  • s390

त्वरित शुरुआत

sudo apt install libc-dev make gcc binutils git
git clone https://github.com/bcoles/kasld
cd kasld
make
./build/<arch>/kasld

build/<arch>/ निर्देशिका self-contained है और इसे किसी target system पर deploy किया जा सकता है:

build/<arch>/
  kasld              <- run this
  components/        <- leak components

एक hardened configuration (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 या उससे अधिक, kernel.unprivileged_bpf_disabled=1, और %pK pointer hashing) filesystem-oracle पथ को संकीर्ण कर देती है, लेकिन यह vantage का केवल एक अक्ष है: side-channel, weak-entropy, और capability-granted तकनीकें इन sysctls से स्वतंत्र हैं। परीक्षण के लिए, extra/weaken-kernel-hardening स्क्रिप्ट इन सेटिंग्स को अस्थायी रूप से शिथिल कर सकती है (root आवश्यक)।

उदाहरण आउटपुट

डिफ़ॉल्ट text mode एक answer-first overview प्रिंट करता है:

KASLD 0.4.2-dev  --  Kernel Address Space Layout Derandomization
Target: x86_64 / 7.0.0

Running 117 of 120 components (3 experimental skipped; use -x to enable)...
[####################] 100%  117/117  40.9s
1 component timed out after 30s and was killed (prefetch_directmap)

  Quantity             Certainty   Window                                   Candidates        Grain
  -------------------  ----------  ---------------------------------------  ----------------  -----
  Virtual Image Base   guaranteed  0xffffffff81000000 - 0xffffffffbd400000        483 of 512  2 MiB
  Virtual Image Base   likely      0xffffffff93400000 slide +0x12400000                    1  2 MiB
  Physical Image Base  guaranteed           0x1000000 -         0x3d400000               474  2 MiB
  Physical Image Base  likely               0x1000000 -         0x3c29d000               474  2 MiB
  Direct Map Base      guaranteed  0xffff800000000000 - 0xffffa4aa80000000            37,547  1 GiB
  Vmalloc Base         guaranteed  0xffff898000000000 - 0xffffd6d580000000  79,191 of 79,191  1 GiB
  Vmemmap Base         guaranteed  0xffffa98040000000 - 0xfffffd0000000000            85,504  1 GiB
  Module Region Base   guaranteed  0xffffffffa0000000 - 0xffffffffff000000           389,121  4 KiB
  Module Region Base   likely      0xffffffffc0000000 - 0xffffffffc0400000             1,025  4 KiB
  Paging Level         guaranteed  48                                                 1 of 2  -

  Note: physical and virtual text randomize independently

  Note: 1 sub-range excluded from the windows above; the counts
        already reflect them (-v lists the ranges).

Evidence  (1 finding, 2 components)
  Region             Position  Address             Sources
  -----------------  --------  ------------------  -------
  virt kernel image  base      0xffffffff93400000        2

[-v: detailed results, memory map, system info]  [-H: hardening assessment]

Certainty कॉलम एक ही quantity के बारे में दो भिन्न दावों को अलग करता है। एक guaranteed पंक्ति सिद्ध है: वास्तविक मान उस window के भीतर स्थित है। एक likely पंक्ति वह एकल सर्वोत्तम अनुमान है जिसका साक्ष्य समर्थन करता है — हमेशा guaranteed window का एक उपसमुच्चय, और यह गलत हो सकती है, क्योंकि यह soundness floor से नीचे के संकेतों जैसे timing side channels पर आधारित होती है। सीधे कार्रवाई योग्य परिणाम एक guaranteed पंक्ति है जो एक candidate तक संकीर्ण हो; एक likely मान पुष्टि करने योग्य एक सुराग है, भरोसा करने योग्य तथ्य नहीं।

-v पूर्ण verbose readout जोड़ता है (banner, system-config block, per-component logs, KASLR analysis, memory-layout maps)। -j machine-readable JSON उत्सर्जित करता है — पूर्ण structured view, जिसमें हमेशा per-component records और hardening assessment शामिल होते हैं। -1 एकल shell-pipeable पंक्ति उत्सर्जित करता है। -m issue trackers के लिए प्रारूपित करता है। -H text/markdown रिपोर्टों में hardening assessment जोड़ता है।

पूर्ण CLI, output-mode विवरण, explain mode, और hardening assessment के लिए docs/usage.md देखें।

Vantage

KASLD क्या पुनः प्राप्त कर सकता है यह चल रही प्रक्रिया के vantage पर निर्भर करता है — एकल privilege स्तर नहीं, बल्कि तीन स्वतंत्र चीज़ों का संयोजन:

  • Privileges, groups, और capabilities — एक unprivileged uid, किसी समूह जैसे adm में सदस्यता (जो /var/log/ के अंतर्गत kernel logs प्रदान करती है), एक container task जिसके पास अतिरिक्त capability हो, या root। ये एकल सीढ़ी नहीं बनाते, क्योंकि filesystem permissions प्रत्येक स्रोत को स्वतंत्र रूप से gate करती हैं: CAP_SYS_RAWIO प्रदान किया गया container उस जाँच के लिए init-namespace root होता है और /proc/kcore पढ़ सकता है — एक leak जिस तक साधारण उपयोगकर्ता नहीं पहुँच सकता — जबकि distributions इस बात पर भिन्न होते हैं कि कोई फ़ाइल जैसे /boot/System.map world-readable है या नहीं।
  • System configuration — kptr_restrict, dmesg_restrict, perf_event_paranoid, unprivileged BPF, kernel lockdown। Configuration privilege से स्वतंत्र है: root kptr_restrict=2 के अंतर्गत /proc/kallsyms नहीं पढ़ सकता, जबकि एक शिथिल sysctl या unprivileged BPF एक साधारण उपयोगकर्ता को वह leak दे सकता है जिसे एक hardened system अस्वीकार कर देगा।
  • Confinement — एक namespace या seccomp sandbox जो /proc oracles को छिपाता है या syscalls को अवरुद्ध करता है, जिससे किसी भी privilege स्तर का अवलोकन संकीर्ण हो जाता है।

श्रेणियाँ