
KASLD एक स्थानीय प्रक्रिया से Linux kernel के virtual और physical memory layout को derandomize करता है, जो भी उसका vantage — privilege, configuration, और confinement — अनुमति देता है, उसका उपयोग करके।
KASLD एक स्थानीय प्रक्रिया से Linux कर्नेल के वर्चुअल और फ़िज़िकल मेमोरी लेआउट को पुनर्प्राप्त करता है — मुख्य रूप से कर्नेल टेक्स्ट बेस को — प्रक्रिया के vantage जितना अनुमति देता है उतना उपयोग करते हुए: उसके विशेषाधिकार और क्षमताएँ, सिस्टम का कॉन्फ़िगरेशन, और कोई भी कंटेनर क़ैद। यह कर्नेल टेक्स्ट बेस को सीधे पुनर्प्राप्त करता है जहाँ कोई leak या side channel अनुमति देता है, और अन्यथा इसे उपलब्ध साक्ष्य द्वारा समर्थित प्लेसमेंट के सबसे छोटे सेट तक सीमित करता है। अनुमान इंजन दर्जनों स्वतंत्र तकनीकों के साक्ष्य को आर्किटेक्चर के ज्ञात invariants के साथ जोड़ता है, कर्नेल के प्लेसमेंट को एक residual विंडो तक सीमित करता है — जिसे शेष स्लॉट गणना और एन्ट्रॉपी बिट्स के रूप में रिपोर्ट किया जाता है: इस vantage से KASLR जिस सुरक्षा को बनाए रखता है उस पर एक ऊपरी सीमा, न कि इस बात की गारंटी कि बेस हमलावर की पहुँच से बाहर है (देखें docs/limitations.md)। पूरी तरह से पैच किए गए आधुनिक कर्नेल पर — जहाँ x86-64 side channels कम किए गए हैं और कोई सीधा kernel-text leak जीवित नहीं रहता — पूर्ण पुनर्प्राप्ति अक्सर असंभव होती है, लेकिन constraint सेट शायद ही कभी खाली होता है। KASLR रहित आर्किटेक्चर पर, इंजन bootloader द्वारा चुने गए लोड एड्रेस का पता लगाता है।
समर्थित:
sudo apt install libc-dev make gcc binutils git
git clone https://github.com/bcoles/kasld
cd kasld
make
./build/<arch>/kasld
build/<arch>/ निर्देशिका स्व-निहित है और इसे लक्ष्य सिस्टम पर तैनात किया जा सकता है:
build/<arch>/
kasld <- इसे चलाएँ
components/ <- leak components
एक कठोर कॉन्फ़िगरेशन (kernel.dmesg_restrict=1, kernel.kptr_restrict=1,
kernel.perf_event_paranoid=2 या उच्चतर, kernel.unprivileged_bpf_disabled=1)
filesystem-oracle पथ को संकीर्ण करता है, लेकिन यह vantage का केवल एक अक्ष है:
side-channel, weak-entropy, और capability-granted तकनीकें इन sysctls से स्वतंत्र हैं। परीक्षण के लिए,
extra/weaken-kernel-hardening स्क्रिप्ट इन सेटिंग्स को अस्थायी रूप से
शिथिल कर सकती है (root आवश्यक)।
डिफ़ॉल्ट टेक्स्ट मोड एक answer-first अवलोकन प्रिंट करता है:
KASLD 0.3.1-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 505 2 MiB
Virtual Image Base likely 0xffffffff93400000 slide +0x12400000 1 of 483 2 MiB
Physical Image Base guaranteed 0x1000000 - 0x3d400000 474 of 8185 2 MiB
Physical Image Base likely 0x1000000 - 0x3c29d000 474 of 474 2 MiB
Direct Map Base guaranteed 0xffff800000000000 - 0xffffa4aa80000000 37547 1 GiB
Vmalloc Base guaranteed 0xffff898000000000 - 0xffffd6d580000000 79191 of 79191 1 GiB
Vmemmap Base guaranteed 0xffffa98040000000 - 0xfffffd0000000000 85504 1 GiB
Module Region Base guaranteed 0xffffffffa0000000 - 0xffffffffff000000 389121 4 KiB
Module Region Base likely 0xffffffffc0000000 - 0xffffffffc0400000 1025 of 389121 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]
-v पूर्ण verbose रीडआउट जोड़ता है (banner, system-config ब्लॉक, प्रति-घटक लॉग, KASLR विश्लेषण,
memory-layout मैप)। -j मशीन-पठनीय JSON उत्सर्जित करता है — पूर्ण संरचित दृश्य, जिसमें हमेशा
प्रति-घटक रिकॉर्ड और hardening मूल्यांकन शामिल होते हैं। -1 एकल shell-pipeable पंक्ति उत्सर्जित करता
है। -m issue trackers के लिए प्रारूपित करता है। -H text/markdown रिपोर्ट में hardening मूल्यांकन
जोड़ता है।
पूर्ण CLI, आउटपुट-मोड विवरण, explain मोड, और hardening मूल्यांकन के लिए docs/usage.md देखें।
KASLD जो पुनर्प्राप्त कर सकता है वह चल रही प्रक्रिया के vantage पर निर्भर करता है — एकल विशेषाधिकार स्तर नहीं, बल्कि तीन स्वतंत्र चीज़ों का संयोजन:
adm जैसे समूह में सदस्यता
(जो /var/log/ के अंतर्गत कर्नेल लॉग प्रदान करती है), एक अतिरिक्त क्षमता रखने वाला कंटेनर कार्य,
या root। ये एकल सीढ़ी नहीं बनाते, क्योंकि filesystem अनुमतियाँ प्रत्येक स्रोत को स्वतंत्र रूप से
नियंत्रित करती हैं: CAP_SYS_RAWIO प्रदान किए गए कंटेनर को उस जाँच के लिए init-namespace root
माना जाता है और वह /proc/kcore पढ़ सकता है — एक leak जिस तक साधारण उपयोगकर्ता नहीं पहुँच सकता —
जबकि वितरणों में इस बात पर मतभेद है कि /boot/System.map जैसी फ़ाइल सर्वथा पठनीय है या नहीं।kptr_restrict, dmesg_restrict, perf_event_paranoid, unprivileged
BPF, kernel lockdown। कॉन्फ़िगरेशन विशेषाधिकार से स्वतंत्र है: root kptr_restrict=2 के अंतर्गत
/proc/kallsyms नहीं पढ़ सकता, जबकि एक शिथिल sysctl या unprivileged BPF एक साधारण उपयोगकर्ता को
वह leak दे सकता है जिसे एक कठोर सिस्टम अस्वीकार कर देगा।/proc oracles को छिपाता है या syscalls को
अवरुद्ध करता है, जिससे किसी भी विशेषाधिकार स्तर का अवलोकन संकीर्ण हो जाता है।तीनों अक्ष प्रत्येक leak स्रोत को स्वतंत्र रूप से नियंत्रित करते हैं — इसलिए अधिक विशेषाधिकार कम का superset नहीं है: कॉन्फ़िगरेशन root को एक स्रोत से वंचित कर सकता है, और side channels sysctls को पूरी तरह से बायपास करते हैं। docs/usage.md में एक leak-source-by-gate मैट्रिक्स है जो दिखाता है कि प्रत्येक स्रोत को कौन सा अक्ष नियंत्रित करता है।
KASLD डिफ़ॉल्ट रूप से कम विशेषाधिकार मानता है और vantage जो भी प्रदान करता है उसका अवसरवादी ढंग से
उपयोग करता है। रिपोर्ट की गई guaranteed विंडो कभी विशेषाधिकार पर निर्भर नहीं करती: उन्नत पहुँच या
कमज़ोर कॉन्फ़िगरेशन जो प्रयास किया जाता है उसे चौड़ा कर सकता है, कभी भी उस sound लेआउट को नहीं जिसे
साक्ष्य सिद्ध करता है। verbose (-v), JSON (-j), और Markdown (-m) आउटपुट पता लगाए गए vantage को
रिपोर्ट करते हैं — कंटेनर, क़ैद, पठनीय oracles, और वर्तमान क्षमताओं से पहुँच योग्य capability-gated
leaks।
KASLD में नए हैं? क्रम में पढ़ें: docs/kaslr.md (KASLR क्या है और यह क्या randomize करता है) → docs/architecture.md → A leak from end to end (KASLD एक leak को उत्तर में कैसे बदलता है) → docs/limitations.md (एक परिणाम क्या सिद्ध करता है और क्या नहीं) → CONTRIBUTING.md (एक leak component या inference rule जोड़ें)। नीचे दी गई तालिका विषय के अनुसार दस्तावेज़ों को अनुक्रमित करती है।
_GNU_SOURCE मैक्रो का समर्थन करने वाला कंपाइलर आवश्यक है क्योंकि गैर-पोर्टेबल कोड
(MAP_ANONYMOUS, getline(), popen(), …) का उपयोग किया जाता है।
make # build kasld + components
make run # build and run
make test # build and run unit tests
make cross # cross-compile for all supported architectures
make install # install to /usr/local (PREFIX=/usr/local)
make installcheck # smoke-test the installed bin/kasld + libexec/kasld/
make uninstall # remove installed files
make clean # remove build directory
make print-deps # list build dependencies (libs + per-component flags)
make help # show all targets and options
make print-deps आवश्यक toolchain, दो वैकल्पिक लाइब्रेरी (pthread, zlib) उनके वर्तमान कंपाइलर
के लिए auto-detection परिणाम के साथ, और प्रति-घटक compile/link flag अपवादों की रिपोर्ट करता है —
Makefile के probe तर्क को पढ़े बिना एक वितरण पैकेज की control फ़ाइल भरने के लिए पर्याप्त।
make installcheck स्थापित bin/kasld चलाता है और पुष्टि करता है कि यह FHS ../libexec/kasld पथ के
माध्यम से अपने components खोजता है — split-install लेआउट के लिए एक post-install smoke test, जो
make install के समान PREFIX/DESTDIR का उपयोग करता है (इसलिए यह पैकेज CI में DESTDIR staging
root के विरुद्ध भी काम करता है)।
make install kasld और ksymoff के लिए man1 मैनुअल पेज भी <prefix>/share/man/man1/ में
स्थापित करता है, ताकि स्थापना के बाद man kasld और man ksymoff काम करें।
KASLD को उपयुक्त कंपाइलर (CC) निर्दिष्ट करके make से cross-compile किया जा सकता है।
cross-compiling करते समय static linking स्वचालित रूप से लागू होती है:
make CC=aarch64-linux-musl-gcc
सभी समर्थित cross-compilation लक्ष्य बनाएँ (toolchains PATH में होने चाहिए):
make cross
KASLD MIT लाइसेंस प्राप्त है (देखें LICENSE)। कुछ leak components तृतीय-पक्ष proof-of-concept कोड को अनुकूलित करते हैं या किसी ऐसी तकनीक को लागू करते हैं जिसे पहले अन्य लोगों ने प्रकाशित किया था; ऐसी प्रत्येक फ़ाइल अपने हेडर में अपने मूल लेखक और स्रोत का श्रेय देती है, और THIRD-PARTY-NOTICES.md प्रत्येक को उसके लाइसेंस या पुन:उपयोग के आधार (upstream लाइसेंस, लेखक की अनुमति, या यहाँ पुनः कार्यान्वित technique/reproducer सामग्री) के साथ सूचीबद्ध करता है।
KASLD MIT लाइसेंस प्राप्त है — उपयोग के लिए श्रेय आवश्यक नहीं है, लेकिन जहाँ भी इसे शोध, tooling, exploits, या लेखन में संदर्भित किया जाता है वहाँ एक उद्धरण या लिंक की सराहना की जाती है:
KASLD: Kernel Address Space Layout Derandomization, Brendan Coles, https://github.com/bcoles/kasld
BibTeX:
@software{kasld,
title = {KASLD: Kernel Address Space Layout Derandomization},
author = {Coles, Brendan},
url = {https://github.com/bcoles/kasld},
version = {0.3.0},
year = {2026}
}
GitHub CITATION.cff से एक "Cite this repository" बटन भी दिखाता है। master से
किसी अप्रकाशित build के लिए, विशिष्ट commit और एक्सेस की गई तिथि का उद्धरण दें — उदा.
bcoles/kasld@<commit> (accessed YYYY-MM-DD) — क्योंकि -dev संस्करण स्ट्रिंग्स किसी एकल commit के
लिए अद्वितीय नहीं होतीं।
| विषय | दस्तावेज़ |
|---|
| KASLR प्राइमर | docs/kaslr.md — प्रति-arch KASLR इतिहास, डिफ़ॉल्ट टेक्स्ट बेस, vmsplit, FG-KASLR |
| उपयोग और CLI | docs/usage.md — CLI, आउटपुट मोड, explain मोड, hardening मूल्यांकन |
| परिणामों की व्याख्या | docs/limitations.md — एक नकारात्मक या आंशिक परिणाम का क्या अर्थ है: sound-but-not-complete, और क्यों एक विफलता सुरक्षा गारंटी नहीं है |
| बायपास तकनीकें | docs/bypass-techniques.md — filesystem leaks, side-channels, syscall / ioctl leaks, weak entropy, patched CVEs, arbitrary read |
| शोषण | docs/exploitation.md — एक exploit में KASLR-defeat कहाँ फिट होता है, control-flow बनाम data-only, pwntools टेम्पलेट, ksymoff |
| Footprint और पहचान | docs/footprint.md — एक निगरानी वाले होस्ट पर एक रन कैसा दिखता है: इसे पहचानने के लिए व्यवहारिक हस्ताक्षर, और ऑपरेटर की OPSEC लागत; डिज़ाइन से ही शोरगुल |
| उपयोगिताएँ | extra/README.md — extra/ सहायक स्क्रिप्ट्स (capture/replay, soundness validation, posture-diff, ksymoff) और वे कैसे संयोजित होती हैं |
| आर्किटेक्चर और आंतरिक | docs/architecture.md — अनुमान इंजन, data-flow seams, tagged-line प्रोटोकॉल, cross-region derivation |
| योगदान | CONTRIBUTING.md — एक component या rule लिखना, emitter API, exit codes, metadata |
| परीक्षण और CI | docs/testing.md — host tests, replay fixtures, qemu-user के अंतर्गत cross-arch, coverage |
| पुनरुत्पादनशीलता | docs/reproducibility.md — स्वतंत्र सत्यापन: स्थानीय कर्नेल पर, आर्किटेक्चरों में लाइव, या कैप्चर किए गए corpus पर |