UPD Chapter 17 Security Options, UPD PKGBUILD: installing unstripped VDSO
This commit is contained in:
@@ -775,3 +775,257 @@ Wenn diese Option aktiviert ist, werden nur CA-Schlüssel zum Maschinenschlüsse
|
||||
By default no restrictions are in place and all Machine Owner Keys (MOK) are added to the machine keyring.
|
||||
If enabled only CA keys are added to the machine keyring, all other MOK keys load into the platform keyring.}
|
||||
|
||||
\subsubsection{Enables integrity auditing support}
|
||||
CONFIG\_INTEGRITY\_AUDIT [=y] \textbf{[Y]}\\*
|
||||
Zusätzlich zum Aktivieren der Unterstützung für Integritätsprüfungen fügt diese Option einen Kernelparameter \texttt{integrity\_audit}
|
||||
hinzu, der den Grad der Integritätsprüfungsmeldungen steuert.\\*
|
||||
0 -- einfache Integritätsprüfungsmeldungen (Standard)\\*
|
||||
1 -- zusätzliche Integritätsprüfungsmeldungen\\\
|
||||
Zusätzliche Informationsmeldungen zur Integritätsprüfung können durch die Angabe von\\\texttt{integrity\_audit=1}
|
||||
in der Kernel-Befehlszeile aktiviert werden.
|
||||
\english{In addition to enabling integrity auditing support, this option adds a kernel parameter `integrity\_audit', which
|
||||
controls the level of integrity auditing messages.\\*
|
||||
0 -- basic integrity auditing messages (default)\\*
|
||||
1 -- additional integrity auditing messages\\
|
||||
Additional informational integrity auditing messages would be enabled by specifying `integrity\_audit=1' on the kernel command line.}
|
||||
|
||||
\subsubsection{Integrity Measurement Architecture(IMA)}
|
||||
CONFIG\_IMA [=n] \textbf{[N]}\\
|
||||
Die Laufzeit-Integritätsmessarchitektur (IMA) der Trusted Computing Group (TCG) verwaltet eine Liste von Hash-Werten ausführbarer
|
||||
Dateien und anderer sensibler Systemdateien, wenn diese gelesen oder ausgeführt werden.
|
||||
Wenn es einem Angreifer gelingt, den Inhalt einer wichtigen Systemdatei, die gemessen wird, zu ändern, können wir das feststellen.\\
|
||||
Wenn Ihr System mit einem TPM-Chip ausgestattet ist, verwaltet IMA auch einen aggregierten Integritätswert über diese Liste innerhalb
|
||||
der TPM-Hardware, so dass das TPM einem Dritten beweisen kann, ob kritische Systemdateien geändert wurden oder nicht.
|
||||
Lesen Sie \url{https://www.usenix.org/events/sec04/tech/sailer.html}, um mehr über IMA zu erfahren.\\
|
||||
Wenn Sie unsicher sind, sagen Sie N.
|
||||
\english{The Trusted Computing Group(TCG) runtime Integrity Measurement Architecture(IMA) maintains a list of hash values of executables
|
||||
and other sensitive system files, as they are read or executed.
|
||||
If an attacker manages to change the contents of an important system file being measured, we can tell.
|
||||
If your system has a TPM chip, then IMA also maintains an aggregate integrity value over this list inside the TPM hardware,
|
||||
so that the TPM can prove to a third party whether or not critical system files have been modified.
|
||||
Read \url{https://www.usenix.org/events/sec04/tech/sailer.html} to learn more about IMA.
|
||||
If unsure, say N.}
|
||||
|
||||
\subsubsection{EVM support}
|
||||
CONFIG\_EVM [=n] \textbf{[N]}\\
|
||||
EVM schützt die erweiterten Sicherheitsattribute einer Datei vor Integritätsangriffen.\\
|
||||
Wenn Sie unsicher sind, wie Sie diese Frage beantworten sollen, antworten Sie mit N.
|
||||
\english{EVM protects a file's security extended attributes against integrity attacks.\\
|
||||
If you are unsure how to answer this question, answer N.}
|
||||
|
||||
%17.26
|
||||
\subsection{First legacy `major LSM' to be initialized () \texorpdfstring{$\longrightarrow$}{->}}
|
||||
Diese Auswahl ist nur dazu da, CONFIG\_DEFAULT\_SECURITY in alten Kernelkonfigurationen in CONFIG\_LSM in neuen
|
||||
Kernelkonfigurationen zu konvertieren.
|
||||
Ändern Sie diese Auswahl nicht, es sei denn, Sie erstellen eine neue Kernelkonfiguration, denn diese Auswahl wird ignoriert,
|
||||
nachdem CONFIG\_LSM gesetzt wurde.\\
|
||||
Wählt das \texttt{major security module} aus, das zuerst initialisiert wird.
|
||||
Überschrieben durch CONFIG\_LSM, das nicht standardmäßig gesetzt ist.
|
||||
\english{This choice is there only for converting CONFIG\_DEFAULT\_SECURITY in old kernel configs to CONFIG\_LSM in new kernel configs.
|
||||
Don't change this choice unless you are creating a fresh kernel config, for this choice will be ignored after CONFIG\_LSM has been set.\\
|
||||
Selects the legacy ``major security module'' that will be initialized first.
|
||||
Overridden by non-default CONFIG\_LSM.}
|
||||
|
||||
\subsubsection{SELinux}
|
||||
CONFIG\_DEFAULT\_SECURITY\_SELINUX [=n] \textbf{[N]}\\
|
||||
Für diese Option ist keine Hilfe verfügbar.
|
||||
\english{There is no help available for this option.}
|
||||
|
||||
\subsubsection{Simplified Mandatory Access Control}
|
||||
CONFIG\_DEFAULT\_SECURITY\_SMACK [=n] \textbf{[N]}\\
|
||||
Für diese Option ist keine Hilfe verfügbar.
|
||||
\english{There is no help available for this option.}
|
||||
|
||||
\subsubsection{TOMOYO}
|
||||
CONFIG\_DEFAULT\_SECURITY\_TOMOYO [=n] \textbf{[N]}\\
|
||||
Für diese Option ist keine Hilfe verfügbar.
|
||||
\english{There is no help available for this option.}
|
||||
|
||||
\subsubsection{AppArmor}
|
||||
CONFIG\_DEFAULT\_SECURITY\_APPARMOR [=n] \textbf{[N]}\\
|
||||
Für diese Option ist keine Hilfe verfügbar.
|
||||
\english{There is no help available for this option.}
|
||||
|
||||
|
||||
\subsubsection{Unix Discretionary Access Controls}
|
||||
CONFIG\_DEFAULT\_SECURITY\_DAC [=y] \textbf{[Y]}\\
|
||||
Für diese Option ist keine Hilfe verfügbar.
|
||||
\english{There is no help available for this option.}
|
||||
|
||||
\subsection{Ordered list of enabled LSMs}
|
||||
CONFIG\_LSM [=landlock,lockdown,yama,integrity,bpf] \textbf{[landlock,lockdown,yama,integrity,bpf]}\\
|
||||
Eine durch Kommata getrennte Liste von LSMs in der Reihenfolge der Initialisierung.
|
||||
Alle LSMs, die in dieser Liste fehlen, mit Ausnahme derjenigen mit der Reihenfolge LSM\_ORDER\_FIRST und LSM\_ORDER\_LAST,
|
||||
die immer aktiviert werden, wenn sie in der Kernelkonfiguration ausgewählt sind, werden ignoriert.
|
||||
Dies kann beim Booten mit dem Parameter \texttt{lsm=} kontrolliert werden.\\
|
||||
Wenn Sie unsicher sind, belassen Sie dies als Voreinstellung.
|
||||
\english{A comma-separated list of LSMs, in initialization order.
|
||||
Any LSMs left off this list, except for those with order LSM\_ORDER\_FIRST and LSM\_ORDER\_LAST, which are always enabled
|
||||
if selected in the kernel configuration, will be ignored.
|
||||
This can be controlled at boot with the ``lsm='' parameter.\\
|
||||
If unsure, leave this as the default.}
|
||||
|
||||
%17.28
|
||||
\subsection{Kernel hardening options \texorpdfstring{$\longrightarrow$}{->}}
|
||||
|
||||
\subsubsection{Memory initialization \texorpdfstring{$\longrightarrow$}{->}}
|
||||
|
||||
\paragraph{Initialize kernel stack variables at function entry () \texorpdfstring{$\longrightarrow$}{->}}\mbox{}\\
|
||||
Diese Option ermöglicht die Initialisierung von Stack-Variablen zum Zeitpunkt des Funktionseintritts.
|
||||
Dies hat die Möglichkeit, die größte Abdeckung zu haben (da alle Funktionen ihre Variablen initialisieren lassen können),
|
||||
aber die Leistungsauswirkungen hängen von der Komplexität der Funktionsaufrufe eines bestimmten Workloads ab.\\
|
||||
Damit wird der Abdeckungsgrad über Klassen von potenziell nicht initialisierten Variablen ausgewählt.
|
||||
Die ausgewählte Klasse von Variablen wird vor der Verwendung in einer Funktion initialisiert.
|
||||
\english{This option enables initialization of stack variables at function entry time.
|
||||
This has the possibility to have the greatest coverage (since all functions can have their variables initialized),
|
||||
but the performance impact depends on the function calling complexity of a given workload's syscalls.\\
|
||||
This chooses the level of coverage over classes of potentially uninitialized variables.
|
||||
The selected class of variable will be initialized before use in a function.}
|
||||
|
||||
\subparagraph{no automatic stack variable initialization (weakest)}\mbox{}\\
|
||||
CONFIG\_INIT\_STACK\_NONE [=n] \textbf{[N]}\\
|
||||
Deaktivieren der automatischen Initialisierung von Stack-Variablen.
|
||||
Dies macht den Kernel anfällig für die Standardklassen der Ausnutzung nicht initialisierter Stack-Variablen
|
||||
und der Preisgabe von Informationen.
|
||||
\english{Disable automatic stack variable initialization.
|
||||
This leaves the kernel vulnerable to the standard classes of uninitialized stack variable exploits and information exposures.}
|
||||
|
||||
\subparagraph{pattern-init everything (strongest)}\mbox{}\\
|
||||
CONFIG\_INIT\_STACK\_ALL\_PATTERN [=n] \textbf{[N]}\\
|
||||
Initialisiert alles auf dem Stack (einschließlich Padding) mit einem bestimmten Debug-Wert.
|
||||
Auf diese Weise sollen alle Klassen von nicht initialisierten Stack-Variablen ausgenutzt und Informationen preisgegeben werden,
|
||||
selbst Variablen, vor denen gewarnt wurde, weil sie nicht initialisiert wurden.
|
||||
Es ist bekannt, dass die Initialisierung von Mustern viele bestehende Fehler im Zusammenhang mit nicht initialisierten Locals provoziert,
|
||||
z.\,B. wenn Zeiger Nicht-NULL-Werte erhalten, Puffergrößen und Indizes sehr groß sind.
|
||||
Das Muster ist situationsabhängig; Clang auf 64-Bit verwendet \texttt{0xAA}-Wiederholungen für alle Typen und Padding außer float und double,
|
||||
die \texttt{0xFF}-Wiederholungen (-NaN) verwenden.
|
||||
Clang auf 32-Bit verwendet \text{0xFF}-Wiederholungen für alle Typen und Auffüllungen.
|
||||
\english{Initializes everything on the stack (including padding) with a specific debug value.
|
||||
This is intended to eliminate all classes of uninitialized stack variable exploits and information exposures,
|
||||
even variables that were warned about having been left uninitialized.\\
|
||||
Pattern initialization is known to provoke many existing bugs related to uninitialized locals, e.g. pointers receive non-NULL values,
|
||||
buffer sizes and indices are very big.
|
||||
The pattern is situation-specific; Clang on 64-bit uses 0xAA repeating for all types and padding except float and double which use 0xFF
|
||||
repeating (-NaN).
|
||||
Clang on 32-bit uses 0xFF repeating for all types and padding.}
|
||||
|
||||
\subparagraph{zero-init everything (strongest and safest)}\mbox{}\\
|
||||
CONFIG\_INIT\_STACK\_ALL\_ZERO [=y] \textbf{[Y]}\\
|
||||
Initialisiert alles auf dem Stack (einschließlich Padding) mit einem Nullwert.
|
||||
Damit sollen alle Arten von Exploits für nicht initialisierte Stack-Variablen und die Preisgabe von Informationen verhindert werden,
|
||||
selbst bei Variablen, vor denen gewarnt wurde, dass sie nicht initialisiert wurden.
|
||||
Die Nullinitialisierung bietet sichere Standardwerte für Strings (sofort NUL-terminiert), Zeiger (NULL), Indizes (Index 0)
|
||||
und Größen (0 Länge) und ist daher als Sicherheitsmaßnahme für die Produktion besser geeignet als die Musterinitialisierung (pattern init).
|
||||
\english{Initializes everything on the stack (including padding) with a zero value.
|
||||
This is intended to eliminate all classes of uninitialized stack variable exploits and information exposures,
|
||||
even variables that were warned about having been left uninitialized.\\
|
||||
Zero initialization provides safe defaults for strings (immediately NUL-terminated), pointers (NULL), indices (index 0),
|
||||
and sizes (0 length), so it is therefore more suitable as a production security mitigation than pattern initialization.}
|
||||
|
||||
\paragraph{Enable heap memory zeroing on allocation by default}\mbox{}\\
|
||||
CONFIG\_INIT\_ON\_ALLOC\_DEFAULT\_ON [=y] \textbf{[Y]}\\
|
||||
Dies hat den Effekt, dass \texttt{init\_on\_alloc=1} auf der Kernel-Kommandozeile gesetzt wird.
|
||||
Dies kann mit \texttt{init\_on\_alloc=0} deaktiviert werden.
|
||||
Wenn \texttt{init\_on\_alloc} aktiviert ist, wird der gesamte Speicher des Page Allocators und des Slab Allocators bei
|
||||
der Allokation auf Null gesetzt, wodurch viele Arten von \glqq uninitialisiertem Heap-Speicher\grqq{} vermieden werden,
|
||||
insbesondere die Gefährdung des Heap-Inhalts.
|
||||
Die Auswirkungen auf die Leistung variieren je nach Arbeitslast, aber in den meisten Fällen sind \qty{<1}{\percent} Auswirkungen zu verzeichnen.
|
||||
Bei einigen synthetischen Workloads wurden sogar bis zu \qty{7}{\percent} gemessen.
|
||||
\english{This has the effect of setting ``init\_on\_alloc=1'' on the kernel command line.\\
|
||||
This can be disabled with ``init\_on\_alloc=0''.
|
||||
When ``init\_on\_alloc'' is enabled, all page allocator and slab allocator memory will be zeroed when allocated, eliminating
|
||||
many kinds of ``uninitialized heap memory'' flaws, especially heap content exposures.
|
||||
The performance impact varies by workload, but most cases see $<1\%$ impact.
|
||||
Some synthetic workloads have measured as high as $7\%$.}
|
||||
|
||||
\paragraph{Enable heap memory zeroing on free by default}\mbox{}\\
|
||||
CONFIG\_INIT\_ON\_FREE\_DEFAULT\_ON [=y] \textbf{[Y]}\\
|
||||
Dies hat den Effekt, dass \texttt{init\_on\_free=1} auf der Kernel-Kommandozeile gesetzt wird.\\
|
||||
Dies kann mit \texttt{init\_on\_free=0} deaktiviert werden.
|
||||
Ähnlich wie bei \texttt{init\_on\_alloc} wird bei der Aktivierung von \texttt{init\_on\_free} der gesamte Speicher des Page Allocators
|
||||
und des Slab Allocators beim Freigeben auf Null gesetzt, wodurch viele Arten von \glqq uninitialisiertem Heap-Speicher\grqq{} vermieden werden,
|
||||
insbesondere die Aufdeckung von Heap-Inhalten.
|
||||
Der Hauptunterschied zu \texttt{init\_on\_free} besteht darin, dass die Lebensdauer der Daten im Speicher verkürzt wird,
|
||||
da alles, was freigegeben wird, sofort gelöscht wird, so dass Live-Forensik oder Cold-Boot-Speicherangriffe nicht in der Lage sind,
|
||||
freigegebene Speicherinhalte wiederherzustellen.
|
||||
Die Auswirkung auf die Leistung variiert je nach Arbeitslast, ist aber teurer als \texttt{init\_on\_alloc} aufgrund
|
||||
der negativen Cache-Effekte beim Berühren von \glqq kalten\grqq{} Speicherbereichen.
|
||||
In den meisten Fällen sind die Auswirkungen \qtyrange{3}{5}{\percent}.
|
||||
Bei einigen synthetischen Workloads wurden bis zu \qty{8}{\percent} gemessen.
|
||||
\english{This has the effect of setting ``init\_on\_free=1'' on the kernel command line.
|
||||
This can be disabled with ``init\_on\_free=0''.
|
||||
Similar to ``init\_on\_alloc'', when ``init\_on\_free'' is enabled, all page allocator and slab allocator memory will be zeroed
|
||||
when freed, eliminating many kinds of ``uninitialized heap memory'' flaws, especially heap content exposures.
|
||||
The primary difference with ``init\_on\_free'' is that data lifetime in memory is reduced, as anything freed is wiped immediately,
|
||||
making live forensics or cold boot memory attacks unable to recover freed memory contents.
|
||||
The performance impact varies by workload, but is more expensive than ``init\_on\_alloc'' due to the negative cache effects of
|
||||
touching ``cold'' memory areas. Most cases see 3-5\% impact.
|
||||
Some synthetic workloads have measured as high as 8\%.}
|
||||
|
||||
|
||||
\paragraph{Enable register zeroing on function exit}\mbox{}\\
|
||||
CONFIG\_ZERO\_CALL\_USED\_REGS [=n] \textbf{[N]}\\
|
||||
Am Ende von Funktionen sollten alle vom Aufrufer verwendeten Registerinhalte immer auf Null gesetzt werden.
|
||||
Dies trägt dazu bei, dass temporäre Werte nicht über die Funktionsgrenze hinaus durchsickern.
|
||||
Dies bedeutet, dass Registerinhalte weniger wahrscheinlich für Seitenkanäle und Informationsoffenlegung zur Verfügung stehen.
|
||||
Außerdem wird dadurch die Anzahl der nützlichen ROP-Gadgets im resultierenden Kernel-Image um etwa \qty{20}{\percent}
|
||||
reduziert (und die vom Compiler erzeugten \texttt{write-what-where}-Gadgets werden entfernt).
|
||||
Dies hat bei den meisten Workloads einen Leistungseinfluss von weniger als \qty{1}{\%}.
|
||||
Das Wachstum der Abbildgröße hängt von der Architektur ab und sollte auf seine Eignung geprüft werden.
|
||||
Zum Beispiel wächst x86\_64 um weniger als \qty{1}{\%}, und arm64 wächst um etwa \qty{5}{\%}.
|
||||
\english{At the end of functions, always zero any caller-used register contents.
|
||||
This helps ensure that temporary values are not leaked beyond the function boundary.
|
||||
This means that register contents are less likely to be available for side channels and information exposures.
|
||||
Additionally, this helps reduce the number of useful ROP gadgets by about 20\% (and removes compiler
|
||||
generated ``write-what-where'' gadgets) in the resulting kernel image.
|
||||
This has a less than 1\% performance impact on most workloads.
|
||||
Image size growth depends on architecture, and should be evaluated for suitability.
|
||||
For example, x86\_64 grows by less than 1\%, and arm64 grows by about 5\%.}
|
||||
|
||||
|
||||
\subsubsection{Hardening of kernel data structures \texorpdfstring{$\longrightarrow$}{->}}
|
||||
|
||||
\paragraph{Check integrity of linked list manipulation}\mbox{}\\
|
||||
CONFIG\_LIST\_HARDENED [=y] \textbf{[Y]}\\
|
||||
Minimale Integritätsprüfung in den Routinen zur Manipulation von verknüpften Listen, um Speicherbeschädigungen abzufangen,
|
||||
bei denen nicht garantiert ist, dass sie zu einem sofortigen Zugriffsfehler führen.\\
|
||||
Wenn Sie unsicher sind, sagen Sie N.
|
||||
\english{Minimal integrity checking in the linked-list manipulation routines to catch memory corruptions that are not
|
||||
guaranteed to result in an immediate access fault.\\
|
||||
If unsure, say N.}
|
||||
|
||||
\paragraph{Trigger a BUG when data corruption is detected}\mbox{}\\
|
||||
CONFIG\_BUG\_ON\_DATA\_CORRUPTION [=n] \textbf{[N]}\\
|
||||
Wählen Sie diese Option, wenn der Kernel einen BUG auslösen soll, wenn er bei der Überprüfung der Gültigkeit von
|
||||
Kernel-Speicherstrukturen auf beschädigte Daten stößt.\\
|
||||
Wenn Sie unsicher sind, wählen Sie N.
|
||||
\english{Select this option if the kernel should BUG when it encounters data corruption in kernel memory structures
|
||||
when they get checked for validity.\\
|
||||
If unsure, say N.}
|
||||
|
||||
\subsubsection{Randomize layout of sensitive kernel structures \texorpdfstring{$\longrightarrow$}{->}}
|
||||
Wenn Sie dies aktivieren, werden die Layouts von Strukturen, die ausschließlich Funktionszeiger sind
|
||||
(und nicht manuell mit \_\_no\_randomize\_layout annotiert wurden), oder Strukturen, die explizit mit \_\_randomize\_layout markiert
|
||||
wurden, zur Kompilierungszeit randomisiert.
|
||||
Dies kann eine zusätzliche Schwachstelle für Exploits darstellen, die auf diese Strukturtypen abzielen.\\
|
||||
Die Aktivierung dieser Funktion führt zu einigen Leistungseinbußen, erhöht die Speichernutzung geringfügig und verhindert die
|
||||
Verwendung von forensischen Tools wie Volatility gegen das System (es sei denn, der Kernel-Quellbaum wird nach der Kernel-Installation
|
||||
nicht bereinigt).\\
|
||||
Der für die Kompilierung verwendete Seed befindet sich in scripts/basic/randomize.seed.
|
||||
Er verbleibt nach einem \texttt{make clean}, damit externe Module mit dem vorhandenen Seed kompiliert werden können und wird durch
|
||||
ein \texttt{make mrproper} oder \texttt{make distclean} entfernt.
|
||||
Diese Datei sollte nicht veröffentlicht werden, da sonst das Strukturlayout ermittelt werden kann.
|
||||
\english{If you enable this, the layouts of structures that are entirely function pointers (and have not been manually annotated with
|
||||
\_\_no\_randomize\_layout), or structures that have been explicitly marked with \_\_randomize\_layout, will be randomized at compile-time.
|
||||
This can introduce the requirement of an additional information exposure vulnerability for exploits targeting these structure types.\\
|
||||
Enabling this feature will introduce some performance impact, slightly increase memory usage, and prevent the use of forensic tools
|
||||
like Volatility against the system (unless the kernel source tree isn't cleaned after kernel installation).\\
|
||||
The seed used for compilation is in scripts/basic/randomize.seed.
|
||||
It remains after a ``make clean'' to allow for external modules to be compiled with the existing seed and will be removed by a
|
||||
``make mrproper'' or ``make distclean''.
|
||||
This file should not be made public, or the structure layout can be determined.}
|
||||
|
||||
\paragraph{Disable structure layout randomization}\mbox{}\\
|
||||
CONFIG\_RANDSTRUCT\_NONE [=y] \textbf{[Y]}\\
|
||||
Normaler Aufbau: keine Randomisierung des Strukturlayouts.
|
||||
\english{Build normally: no structure layout randomization.}
|
||||
|
||||
Reference in New Issue
Block a user