अपडेट पर वापस जाएँ
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 कर्नेल के वर्चुअल और फ़िज़िकल मेमोरी लेआउट को पुनर्प्राप्त करता है — मुख्य रूप से कर्नेल टेक्स्ट बेस को — प्रक्रिया के vantage जितना अनुमति देता है उतना उपयोग करते हुए: उसके विशेषाधिकार और क्षमताएँ, सिस्टम का कॉन्फ़िगरेशन, और कोई भी कंटेनर क़ैद। यह कर्नेल टेक्स्ट बेस को सीधे पुनर्प्राप्त करता है जहाँ कोई leak या side channel अनुमति देता है, और अन्यथा इसे उपलब्ध साक्ष्य द्वारा समर्थित प्लेसमेंट के सबसे छोटे सेट तक सीमित करता है। अनुमान इंजन दर्जनों स्वतंत्र तकनीकों के साक्ष्य को आर्किटेक्चर के ज्ञात invariants के साथ जोड़ता है, कर्नेल के प्लेसमेंट को एक residual विंडो तक सीमित करता है — जिसे शेष स्लॉट गणना और एन्ट्रॉपी बिट्स के रूप में रिपोर्ट किया जाता है: इस vantage से KASLR जिस सुरक्षा को बनाए रखता है उस पर एक ऊपरी सीमा, न कि इस बात की गारंटी कि बेस हमलावर की पहुँच से बाहर है (देखें docs/limitations.md)। पूरी तरह से पैच किए गए आधुनिक कर्नेल पर — जहाँ x86-64 side channels कम किए गए हैं और कोई सीधा kernel-text leak जीवित नहीं रहता — पूर्ण पुनर्प्राप्ति अक्सर असंभव होती है, लेकिन constraint सेट शायद ही कभी खाली होता है। KASLR रहित आर्किटेक्चर पर, इंजन bootloader द्वारा चुने गए लोड एड्रेस का पता लगाता है।

समर्थित:

  • x86 (i386+, amd64)
  • ARM (armv6, armv7, armv8, aarch64)
  • MIPS (mipsbe, mipsel, 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>/ निर्देशिका स्व-निहित है और इसे लक्ष्य सिस्टम पर तैनात किया जा सकता है:

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 देखें।

Vantage

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

  • विशेषाधिकार, समूह, और क्षमताएँ — एक unprivileged uid, 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 दे सकता है जिसे एक कठोर सिस्टम अस्वीकार कर देगा।
  • क़ैद — एक namespace या seccomp sandbox जो /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 जोड़ें)। नीचे दी गई तालिका विषय के अनुसार दस्तावेज़ों को अनुक्रमित करती है।

विषयदस्तावेज़
KASLR प्राइमरdocs/kaslr.md — प्रति-arch KASLR इतिहास, डिफ़ॉल्ट टेक्स्ट बेस, vmsplit, FG-KASLR
उपयोग और CLIdocs/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.mdextra/ सहायक स्क्रिप्ट्स (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
परीक्षण और CIdocs/testing.md — host tests, replay fixtures, qemu-user के अंतर्गत cross-arch, coverage
पुनरुत्पादनशीलताdocs/reproducibility.md — स्वतंत्र सत्यापन: स्थानीय कर्नेल पर, आर्किटेक्चरों में लाइव, या कैप्चर किए गए corpus पर

निर्माण

_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 का उद्धरण

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 के लिए अद्वितीय नहीं होतीं।

श्रेणियाँ