Ich möchte die Liste der Dateien erhalten, die während des Linux-Startvorgangs verwendet werden. Wir entwickeln das geschützte Unternehmenssystem basierend auf RHEL 6.4. Die Integrität der angegebenen Dateien wird von einer speziellen Hardware überprüft.
Die Frage ist also, wie man die Liste dieser Dateien erhält (mit aufgelösten Abhängigkeiten, die von verschiedenen Bootdiensten und Dämonen stammen).
Antworten:
Richten Sie das Überwachungssubsystem für die Aufzeichnung von Anrufen ein
open
.Führen Sie dies über initramfs aus, damit die Regel beim Starten des Hauptsystems (
/sbin/init
auf dem realen Root-Dateisystem) vorhanden ist.Beachten Sie, dass das, was Sie vorschlagen, bei einem typischen Setup keine echte Sicherheit bringt. Jeder, der diese Dateien durch andere Versionen ersetzen kann, hat Root-Zugriff und kann auch falsche Daten an das Protokollierungssystem weiterleiten.
Wenn das Startmedium extern geschützt ist, sodass root es nicht ändern kann (z. B. weil es schreibgeschützt ist oder ausschließlich von einem sicheren Bootloader gesteuert wird) und wenn das Laden von Kernelmodulen blockiert ist, kann das Messen der Dateien zuverlässig sein, wenn es richtig durchgeführt wird . Wenn Sie die Maßnahmen jedoch nur mit Referenzwerten vergleichen, ist dies schwieriger und weniger effektiv als die Verwendung eines integritätsgeschützten Root-Dateisystems (dh in der Praxis bei dmcrypt mit Trusted Grub für den Bootloader).
quelle
openat
undexecve
auch (zumindest). Nun hängt es auch , was gemeint ist , verwendet und Datei , wie es sein kann , dass Sie auch angemeldet seincreat
,truncate
,access
,stat
,mkdir
,connect
.../usr/share/initramfs-tools
(der Pfad kann bei RH unterschiedlich sein), dann die initramfs neu erstellen (bei Debian ist esupdate-initramfs
) und neu starten.Ein guter Ausgangspunkt wäre ,
/etc/rci.d
woi
eine Zahl darstellt , die Runlevel Sie booten in. Wenn Ihr Server beispielsweise kopflos ist,i
ist dies normalerweise 3. Wenn Sie unter sehen,/etc/rc3.d
werden die Dienste gestartet, die beim Starten von Runlevel 3 gestartet werden.quelle
upstart
basierte Init-Systeme auch das/etc/rci.d
Verzeichnisschema?Stellen Sie sicher, dass
atime
für Ihre Root- und Boot-Dateisysteme in Ihrem Kernel aktiviert ist (oder dass diesnoatime
nicht festgelegt ist). Nach dem Booten können Siestat
die Zugriffszeit für jede Datei überprüfen und feststellen, auf welche während des Bootens zugegriffen wurde.quelle
Dank der RHEL-Unterstützung wurde die klare Lösung gefunden. Es basiert auf der Verwendung des Systemtap-Kernelmoduls. Zitiert von hier , um Link Rot zu vermeiden. Und nochmals vielen Dank für all Ihre Ratschläge :)
Ich konnte mir nicht einmal vorstellen, dass systemtap noch vor dem Init-Skript starten und den Bootvorgang verfolgen kann. Ich schätze den Red Hat Support und persönlich Pushpendra Chavan sehr für die Hilfe bei diesem perfekten Tool (leider weiß ich nicht, zu welchen Entwicklern diese Methode gehört - sonst würde ich sie überhaupt gutschreiben).
Wir müssen also zwei einfache Skripte erstellen:
bootinit.sh
::und
bootprobe2.1.stp
in eingebetteter Systemtap-Skriptsprache geschrieben:Um die Liste der Dateien zu erhalten, auf die während des Startvorgangs im Systemtap-Protokollformat zugegriffen wird, sollten Sie Folgendes implementieren:
Herunterladen und Installieren der RICHTIG genannten Versionen
systemtap
undkernel debuginfo
Pakete (ich habe gegeben worden auf diesen Link , aber Sie würden besser nutzen diese , wenn Sie auf CentOS sind);Erstellen
/tmp/stap
und/tmp/stap/data
Platziere
bootprobe2.1.stp
undbootinit.sh
in/root
und mache sie ausführbar: chmod + x / root / boot *Bearbeiten
bootinit.sh
und ändern Sie 'exec / sbin / init 3' in 'exec / sbin / init 5', wenn 5 Ihr Standard-Runlevel ist.Erstellen Sie das .ko-Modul aus bootprobe2.stp
Starten Sie neu.
Halten Sie an
grub
(drücken Sie Esc oder Shift) und drücken Sie 'a' auf dem Standardkernel. Geben Sie am Ende der Kernelzeile Folgendes ein und drücken Sie die Eingabetaste:Der normale Startvorgang wird fortgesetzt. Kopieren Sie nach dem Anmelden
kill
denstapio
Vorgangbootprobe2.log
aus demtmpfs
/tmp/stap/data
Verzeichnis und heben Sie die Bereitstellung auf.Überprüfen Sie nun die Datei
/tmp/stap/bootprobe2.log
auf die Liste aller Dateien, die beim Booten gelesen werden.quelle