GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Vsyscalls unter Linux deaktivieren

Versuchen Sie es mit echo 0 > /proc/sys/kernel/vsyscall64

Wenn Sie versuchen, Gettimeofday-Aufrufe zu ptraceen und diese nicht angezeigt werden, welche Zeitquelle verwendet das System (pmtimer, acpi, tsc, hpet usw.). Ich frage mich, ob Sie mir einen Gefallen tun würden, indem Sie versuchen, Ihren Timer auf etwas Älteres wie pmtimer zu zwingen. Es ist möglich, dass eine der vielen zeitgeberspezifischen Optimierungen von gtod dazu führt, dass Ihre Ptrace-Aufrufe vermieden werden, selbst wenn vsyscall auf Null gesetzt ist.


Gibt es eine Möglichkeit, die Verwendung von vsyscalls/vDSO für einen einzelnen Prozess oder, falls dies nicht möglich ist, für das gesamte Betriebssystem zu deaktivieren?

Es stellt sich heraus, dass es IST eine Möglichkeit, die Verknüpfung von vDSO für einen einzelnen Prozess effektiv zu deaktivieren, ohne es systemweit mit ptrace zu deaktivieren !

Alles, was Sie tun müssen, ist, den verfolgten Prozess zu stoppen, bevor er von execve zurückkehrt und entfernen Sie die AT_SYSINFO_EHDR Eintrag aus dem Hilfsvektor (der direkt nach Umgebungsvariablen entlang des Speicherbereichs kommt, auf den in rsp verwiesen wird ). PTRACE_EVENT_EXEC ist ein guter Ort, um dies zu tun.

AT_SYSINFO_EHDR verwendet der Kernel, um dem Systemlinker mitzuteilen, wo vDSO im Adressraum des Prozesses abgebildet ist. Wenn dieser Eintrag nicht vorhanden ist, ld scheint sich so zu verhalten, als hätte das System kein vDSO zugeordnet.

Beachten Sie, dass dadurch das vDSO nicht irgendwie aus Ihrem Prozessspeicher entfernt wird, es wird lediglich ignoriert, wenn andere gemeinsam genutzte Bibliotheken verknüpft werden. Ein bösartiges Programm wird immer noch in der Lage sein, damit zu interagieren, wenn der Autor es wirklich wollte.

Ich weiß, diese Antwort kommt etwas spät, aber ich hoffe, diese Information wird einigen armen Seelen Kopfschmerzen ersparen


Für neuere Systeme echo 0 > /proc/sys/kernel/vsyscall64 könnte nicht funktionieren. In Ubuntu 16.04 kann vDSO systemweit deaktiviert werden, indem der Kernel-Parameter vdso=0 hinzugefügt wird in /etc/default/grub unter dem Parameter:GRUB_CMDLINE_LINUX_DEFAULT .

WICHTIG:Parameter GRUB_CMDLINE_LINUX_DEFAULT kann von anderen Konfigurationsdateien in /etc/default/grub.d/... überschrieben werden , also prüfen Sie genau, wann Sie Ihre benutzerdefinierte Konfiguration hinzufügen.


Linux
  1. So ändern Sie den Hostnamen unter Linux

  2. „shutdown“-Befehlsbeispiele in Linux

  3. resize2fs-Befehlsbeispiele in Linux

  4. Linux-Verfügbarkeitsverlauf

  5. Linux-Warteschlangensystem

Ist Linux ein Betriebssystem oder ein Kernel?

Sichern eines geerbten Linux-Systems

Die Einführung eines Linux-Systemadministrators in cgroups

Dokumentieren der Systemverfügbarkeit in Linux

Stacer Linux-Systemoptimierer und -überwachung

So listen Sie Dienste unter Linux auf