UPD vsyscall table

This commit is contained in:
2023-12-08 20:35:07 +01:00
parent c6030a2f18
commit 9abcb4e0ab
2 changed files with 86 additions and 48 deletions

View File

@@ -2137,69 +2137,107 @@ Laufe der Zeit verschwinden. Ändern Sie diese Option nicht, wenn Sie nicht wiss
\subsubsection{Build a relocatable kernel} \subsubsection{Build a relocatable kernel}
CONFIG\_RELOCATABLE [=y] \textbf{[Y]}\\ CONFIG\_RELOCATABLE [=y] \textbf{[Y]}\\
This builds a kernel image that retains relocation information so it can be loaded someplace besides the default 1~MB. Dadurch wird ein Kernel-Image erstellt, das die Informationen über den Standortwechsel beibehält, so dass es an
The relocations tend to make the kernel binary about 10~\% larger, but are discarded at runtime. einem anderen Ort als den standardmäßigen 1~MB geladen werden kann.
One use is for the kexec on panic case where the recovery kernel must live at a different physical address than the Die Verschiebungen machen das Kernel-Binary etwa 10~\% größer, werden aber zur Laufzeit verworfen.
primary kernel. Eine Anwendung ist der kexec on panic-Fall, bei dem der Wiederherstellungs-Kernel an einer anderen
Note: If CONFIG\_RELOCATABLE=y, then the kernel runs from the address it has been loaded at and the compile time physikalischen Adresse liegen muss als der primäre Kernel.
physical address (CONFIG\_PHYSICAL\_START) is used as the minimum location. Anmerkung: Wenn CONFIG\_RELOCATABLE=y ist, dann läuft der Kernel von der Adresse aus, an der er geladen wurde,
und von der zur Kompilierzeit physische Adresse (CONFIG\_PHYSICAL\_START) als Mindeststandort verwendet.
\paragraph{Randomize the address of the kernel image (KASLR)}$~$\\ \paragraph{Randomize the address of the kernel image (KASLR)}$~$\\
CONFIG\_RANDOMIZE\_BASE [=y] \textbf{[Y]}\\ CONFIG\_RANDOMIZE\_BASE [=y] \textbf{[Y]}\\
In support of Kernel Address Space Layout Randomization (KASLR), this randomizes the physical address at which the Zur Unterstützung der Kernel Address Space Layout Randomization (KASLR) werden
kernel image is decompressed and the virtual address where the kernel image is mapped, as a security feature that die physische Adresse, an der das Kernel-Image dekomprimiert wird, und
deters exploit attempts relying on knowledge of the location of kernel code internals. die virtuelle Adresse, auf die das Kernel-Image abgebildet wird,
On 64-bit, the kernel physical and virtual addresses are randomized separately. The physical address will be anywhere randomisiert. Dies ist ein Sicherheitsmerkmal, das Exploit-Versuche verhindert,
between 16~MB and the top of physical memory (up to 64~TB). The virtual address will be randomized from 16~MB up to die auf der Kenntnis des Speicherorts von Kernel-Code-Interna beruhen.
1~GB (9 bits of entropy). Note that this also reduces the memory space available to kernel modules from 1.5~GB to 1~GB. Bei 64-Bit werden die physische und die virtuelle Adresse des Kernels getrennt randomisiert.
On 32-bit, the kernel physical and virtual addresses are randomized together. They will be randomized from 16~MB up to Die physische Adresse liegt irgendwo zwischen 16~MB und dem Anfang des physischen Speichers
512~MB (8 bits of entropy).\\ (bis zu 64~TB). Die virtuelle Adresse wird von 16~MB bis zu 1~GB randomisiert
Entropy is generated using the RDRAND instruction if it is supported. If RDTSC is supported, its value is mixed into (9 Bits Entropie).
the entropy pool as well. If neither RDRAND nor RDTSC are supported, then entropy is read from the i8254 timer. The Beachten Sie, dass dadurch auch der für Kernel-Module verfügbare Speicherplatz
usable entropy is limited by the kernel being built using 2~GB addressing, and that PHYSICAL\_ALIGN must be at a von 1,5~GB auf 1~GB reduziert wird.
minimum of 2~MB. As a result, only 10 bits of entropy are theoretically possible, but the implementations are further Bei 32-Bit werden die physischen und virtuellen Adressen des Kernels zusammen
limited due to memory layouts.\\ randomisiert. Sie werden von 16~MB bis zu 512~MB randomisiert (8 Bits Entropie).\\
If unsure, say Y. Die Entropie wird mit dem RDRAND-Befehl erzeugt, sofern er unterstützt wird.
Wenn RDTSC unterstützt wird, wird sein Wert ebenfalls in den Entropie-Pool
gemischt. Wenn weder RDRAND noch RDTSC unterstützt werden, wird die Entropie aus
dem i8254-Zeitgeber gelesen. Die nutzbare Entropie ist dadurch begrenzt, dass der
Kernel mit 2~GB-Adressierung aufgebaut ist und dass PHYSICAL\_ALIGN mindestens
2~MB betragen muss.
Infolgedessen sind theoretisch nur 10 Bits Entropie möglich, aber die
Implementierungen sind aufgrund des Speicherlayouts noch weiter eingeschränkt.\\
Wenn Sie unsicher sind, sagen Sie Y.
\subsubsection{Alignment value to which kernel should be aligned} \subsubsection{Alignment value to which kernel should be aligned}
CONFIG\_PHYSICAL\_ALIGN [=0x200000] \textbf{[0x200000]}\\ CONFIG\_PHYSICAL\_ALIGN [=0x200000] \textbf{[0x200000]}\\
This value puts the alignment restrictions on physical address where kernel is loaded and run from. Kernel is compiled Dieser Wert legt die Ausrichtungsbeschränkungen für die physikalische Adresse fest, von der der Kernel geladen und
for an address which meets above alignment restriction.\\ ausgeführt wird. Der Kernel wird für eine Adresse kompiliert, die den obigen Ausrichtungsbeschränkungen entspricht.
If bootloader loads the kernel at a non-aligned address and CONFIG\_RELOCATABLE is set, kernel will move itself to Wenn der Bootloader den Kernel an einer nicht ausgerichteten Adresse lädt und CONFIG\_RELOCATABLE gesetzt ist,
nearest address aligned to above value and run from there. verschiebt sich der Kernel an die nächstgelegene Adresse, die auf den obigen Wert ausgerichtet ist, und wird von
If bootloader loads the kernel at a non-aligned address and CONFIG\_RELOCATABLE is not set, kernel will ignore the dort aus gestartet.
run time load address and decompress itself to the address it has been compiled for and run from there. The address Wenn der Bootloader den Kernel an einer nicht ausgerichteten Adresse lädt und CONFIG\_RELOCATABLE nicht gesetzt ist,
for which kernel is compiled already meets above alignment restrictions. Hence the end result is that kernel runs ignoriert der Kernel die Ladeadresse zur Laufzeit und dekomprimiert sich an die Adresse, für die er kompiliert wurde,
from a physical address meeting above alignment restrictions.\\ und läuft von dort aus. Die Adresse, für die der Kernel kompiliert wurde, erfüllt bereits die oben genannten
On 32-bit this value must be a multiple of 0x2000. On 64-bit this value must be a multiple of 0x200000.\\ Ausrichtungsbeschränkungen. Das Endergebnis ist also, dass der Kernel von einer physikalischen Adresse aus läuft,
Don't change this unless you know what you are doing. die die oben genannten Ausrichtungsbeschränkungen erfüllt.
Bei 32-Bit muss dieser Wert ein Vielfaches von 0x2000 sein. Bei 64-Bit muss dieser Wert ein Vielfaches von 0x200000 sein.\\
Ändern Sie dies nicht, wenn Sie nicht wissen, was Sie tun.
\subsubsection{Randomize the kernel memory sections} \subsubsection{Randomize the kernel memory sections}
CONFIG\_RANDOMIZE\_MEMORY [=y] \textbf{[Y]}\\ CONFIG\_RANDOMIZE\_MEMORY [=y] \textbf{[Y]}\\
Randomizes the base virtual address of kernel memory sections (physical memory mapping, vmalloc \& vmemmap). Randomisiert die virtuelle Basisadresse von Kernel-Speicherabschnitten (physische Speicherzuordnung, vmalloc \& vmemmap).
This security feature makes exploits relying on predictable memory locations less reliable. The order of Dieses Sicherheitsmerkmal macht Exploits, die sich auf vorhersehbare Speicherplätze verlassen, weniger zuverlässig. Die Reihenfolge der
allocations remains unchanged. Entropy is generated in the same way as RANDOMIZE\_BASE. Current implementation Zuweisungen bleibt unverändert. Entropie wird auf die gleiche Weise wie bei RANDOMIZE\_BASE erzeugt. Aktuelle Implementierung
in the optimal configuration have in average 30,000 different possible virtual addresses for each memory section.\\ in der optimalen Konfiguration haben im Durchschnitt 30.000 verschiedene mögliche virtuelle Adressen für jeden Speicherabschnitt.\\
If unsure, say Y. Wenn Sie unsicher sind, sagen Sie Y.
\subsubsection{Linear Address Masking support} \subsubsection{Linear Address Masking support}
CONFIG\_ADDRESS\_MASKING [=y] \textbf{[Y]}\\ CONFIG\_ADDRESS\_MASKING [=y] \textbf{[Y]}\\
Linear Address Masking (LAM) modifies the checking that is applied to 64-bit linear addresses, allowing software Linear Address Masking (LAM) ändert die Prüfung, die auf lineare 64-Bit-Adressen angewandt wird, und ermöglicht der Software
to use of the untranslated address bits for metadata.\\ die nicht übersetzten Adressbits für Metadaten zu verwenden.\\
The capability can be used for efficient address sanitizers (ASAN) implementation and for optimizations in JITs. Diese Fähigkeit kann für die effiziente Implementierung von Adress-Sanitizern (ASAN) und für Optimierungen in JITs genutzt werden.
\subsubsection{Disable the 32-bit vDSO (needed for glibc 2.3.3)} \subsubsection{Disable the 32-bit vDSO (needed for glibc 2.3.3)}
CONFIG\_COMPAT\_VDSO [=n] \textbf{[N]}\\ CONFIG\_COMPAT\_VDSO [=n] \textbf{[N]}\\
Certain buggy versions of glibc will crash if they are presented with a 32-bit vDSO that is not mapped at the Bestimmte fehlerhafte Versionen der glibc stürzen ab, wenn sie mit einem 32-Bit vDSO konfrontiert werden, das nicht auf die in
address indicated in its segment table.\\ der Segmenttabelle angegebene Adresse abgebildet ist.
The bug was introduced by f866314b89d56845f55e6f365e18b31ec978ec3a and fixed by Adresse zugeordnet ist, die in der Segmenttabelle angegeben ist.\\
3b3ddb4f7db98ec9e912ccdf54d35df4aa30e04a and 49ad572a70b8aeb91e57483a11dd1b77e31c4468. Der Fehler wurde eingeführt durch f866314b89d56845f55e6f365e18b31ec978ec3a und behoben durch\\
Glibc 2.3.3 is the only released version with the bug, but OpenSUSE 9 contains a buggy "glibc 2.3.2".\\ 3b3ddb4f7db98ec9e912ccdf54d35df4aa30e04a und 49ad572a70b8aeb91e57483a11dd1b77e31c4468.\\
The symptom of the bug is that everything crashes on startup, saying: Glibc~2.3.3 ist die einzige veröffentlichte Version mit dem Fehler, aber OpenSUSE 9 enthält eine fehlerhafte
texttt{dl\_main: Assertion `(void \*) ph-$>$p\_vaddr == \_rtld\_local.\_dl\_sysinfo\_dso}\\ \glqq glibc 2.3.2\grqq{}.
Saying Y here changes the default value of the vdso32 boot option from 1 to 0, which turns off the Das Symptom des Fehlers ist, dass alles beim Start abstürzt und sagt:\\
32-bit vDSO entirely. This works around the glibc bug but hurts performance.\\ \texttt{dl\_main: Assertion \`~(void \*) ph-$>$p\_vaddr == \_rtld\_local.\_dl\_sysinfo\_dso}\\
If unsure, say N: if you are compiling your own kernel, you are unlikely to be using a buggy version of glibc. Wenn Sie hier Y sagen, wird der Standardwert der Bootoption vdso32 von 1 auf 0 geändert, wodurch die
32-Bit vDSO vollständig deaktiviert wird. Dies umgeht zwar den Glibc-Bug, beeinträchtigt aber die Leistung.\\
Wenn Sie unsicher sind, sagen Sie N: Wenn Sie Ihren eigenen Kernel kompilieren, ist es unwahrscheinlich,
dass Sie eine fehlerhafte Version der glibc verwenden.
\subsubsection{vsyscall table for legacy applications () \texorpdfstring{$\rightarrow$}{->}}
Legacy-Benutzercode, der nicht weiß, wie er den vDSO finden kann, erwartet, dass er drei Syscalls ausgeben kann,
indem er feste Adressen im Kernel-Bereich aufruft.
Da dieser Ort nicht mit ASLR randomisiert wird, kann er dazu verwendet werden, die Ausnutzung von Sicherheitslücken
zu unterstützen.
Diese Einstellung kann zur Boot-Zeit über den Kernel-Befehlszeilenparameter
\texttt{vsyscall=[emulate|xonly|none]} geändert werden.\\
Der Emulationsmodus ist veraltet und kann nur noch über die Kernel-Befehlszeile aktiviert werden.
Auf einem System mit ausreichend aktueller glibc (2.14 oder neuer) und ohne statische Binärdateien können Sie
\glqq None\grqq{} ohne Leistungseinbußen verwenden um die Sicherheit zu verbessern.\\
Wenn Sie unsicher sind, wählen Sie \glqq Nur Ausführung emulieren\glqq{}.
\paragraph{Emulate execution only}$~$\\
CONFIG\_LEGACY\_VSYSCALL\_XONLY [=n] \textbf{[N]}\\
Der Kernel fängt und emuliert Aufrufe in die feste vsyscall-Adresszuordnung und lässt keine Lesezugriffe zu.
Diese Konfiguration wird empfohlen, wenn der Userspace den Legacy-Vsyscall-Bereich verwenden könnte, aber keine
Unterstützung für die binäre Instrumentierung von Legacy-Code benötigt wird. Sie entschärft bestimmte Verwendungen
des vsyscall-Bereichs als Puffer zur Umgehung von ASLR.
\paragraph{None}$~$\\
CONFIG\_LEGACY\_VSYSCALL\_NONE [=n] \textbf{[N]}\\
Es wird überhaupt keine vsyscall-Zuordnung geben. Dies eliminiert jegliches Risiko einer ASLR-Umgehung aufgrund
der festen vsyscall-Adressen-Zuordnung. Versuche, die vsyscalls zu verwenden, werden an dmesg gemeldet, so dass
entweder alte oder bösartige Userspace-Programme identifiziert werden können.
\end{document} \end{document}