
kasld v0.4.0
KASLD एक स्थानीय प्रक्रिया से Linux kernel के virtual और physical memory layout को derandomize करता है, जो भी उसका vantage — privilege, configuration, और confinement — अनुमति देता है, उसका उपयोग करके।
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.mapworld-readable है या नहीं। - System configuration —
kptr_restrict,dmesg_restrict,perf_event_paranoid, unprivileged BPF, kernel lockdown। Configuration privilege से स्वतंत्र है: rootkptr_restrict=2के अंतर्गत/proc/kallsymsनहीं पढ़ सकता, जबकि एक शिथिल sysctl या unprivileged BPF एक साधारण उपयोगकर्ता को वह leak दे सकता है जिसे एक hardened system अस्वीकार कर देगा। - Confinement — एक namespace या seccomp sandbox जो
/procoracles को छिपाता है या syscalls को अवरुद्ध करता है, जिससे किसी भी privilege स्तर का अवलोकन संकीर्ण हो जाता है।