Sollte der Speicherschutz nicht den Zugriff auf den physischen Arbeitsspeicher für alle Prozesse außer dem, der diesem Bereich des Arbeitsspeichers zugewiesen wurde, stoppen? Oder überschreibt sudo diesen Schutz?
Matthew Lock
Antworten:
32
Es bietet Zugriff auf den physischen Speicher des Systems.
Die mem(4)Manpage erklärt mehr darüber, was /dev/memist.
Ja - es könnte alle möglichen Probleme verursachen. Ein Neustart sollte Abhilfe schaffen, aber schlimme Dinge können sehr leicht passieren. Achtung! :-)
Ich würde vorschlagen, die Mem-Manpage zu überprüfen. Lumpen ist richtig. "mem ist eine Gerätezeichendatei, die ein Abbild des Hauptspeichers des Computers ist. Sie kann zum Beispiel verwendet werden, um das System zu untersuchen (und sogar zu patchen). Byte-Adressen in mem werden als physikalische Speicheradressen interpretiert." Und ... "Die Datei kmem ist mit mem identisch, außer dass auf den virtuellen Kernel-Speicher und nicht auf den physischen Speicher zugegriffen wird."
Mr. Shickadance
@ Andrew Flanagan: Ihr Link zeigt jetzt, wie man mit dem Befehl time eine Stoppuhr einrichten kann.
Aiyion.Prime
1
@ Aiyion.Prime. Danke - wies auf eine archive.org-Version.
Andrew Flanagan
19
/ dev / mem bietet Zugriff auf den physischen Speicher des Systems , nicht auf den virtuellen Speicher. Auf den virtuellen Adressraum des Kernels kann mit / dev / kmem zugegriffen werden.
Es wird hauptsächlich verwendet, um auf E / A-Speicheradressen zuzugreifen, die sich auf Peripheriegeräte wie Videoadapter beziehen.
sudo cat /dev/urandom > /dev/memIch werde nichts tun, da sudo das Privileg von cat, aber nicht von redirect erhöhen wird. Sie können entweder sudo suin der Root-Shell arbeiten oder verwenden sudo dd if=/dev/urandom of=/dev/mem
/dev/memErmöglicht den Zugriff auf den physischen Speicher, dh den gesamten RAM im System. Dies bedeutet jedoch nicht, dass Sie vollständigen Lese- / Schreibzugriff auf den RAM erhalten (siehe CONFIG_STRICT_DEVMEM-Option in diesem Dokument). Beachten Sie auch, dass in einigen Regionen des physischen Speichers andere Geräte wie Grafikkartenspeicher usw. zugeordnet sind.
Blind zu schreiben führt zu /dev/memeinem ungewissen Verhalten. Hier ist ein YouTube-Video, das dasselbe tut.
MAP_SHARED bewirkt, dass Schreibvorgänge sofort in den physischen Speicher verschoben werden, was das Beobachten erleichtert und für Hardware-Registerschreibvorgänge sinnvoller ist.
CONFIG_STRICT_DEVMEM und nopat
Um /dev/memregulären RAM auf Kernel v4.9 anzeigen und ändern zu können, müssen Sie Folgendes ausführen:
deaktivieren CONFIG_STRICT_DEVMEM(standardmäßig unter Ubuntu 17.04 eingestellt)
Übergeben Sie die nopatKernel-Befehlszeilenoption für x86
/ dev / mem bot traditionell Zugriff auf den gesamten physischen Adressraum. Das schließt RAM ein, aber es schließt auch alle speicherabgebildeten IO-Geräte ein.
Viele moderne Kernel werden mit "CONFIG_STRICT_DEVMEM" konfiguriert, wodurch / dev / mem nur auf speicherabgebildete E / A-Geräte beschränkt wird.
Zufälliges Schreiben von Müll ist eine schlechte Idee, aber es ist schwer vorherzusagen, was genau passieren wird. Hardware reagiert möglicherweise auf unvorhersehbare Weise auf zufälligen Müll. Beschädigte Kernel-Speicherstrukturen können zu unvorhersehbarem Kernel-Verhalten führen. Bestenfalls würde ich einen Systemabsturz erwarten, im schlimmsten Fall kommen Datenverfälschungen oder gar Hardware-Bricking nicht in Frage.
PS: Beachten Sie, dass Ihr Befehl, wenn er als normaler Benutzer ausgeführt wird, nichts tun sollte, da das sudo nur den cat-Befehl und nicht die Umleitung aufhebt.
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM
Antworten:
Es bietet Zugriff auf den physischen Speicher des Systems.
Die
mem(4)
Manpage erklärt mehr darüber, was/dev/mem
ist.Ja - es könnte alle möglichen Probleme verursachen. Ein Neustart sollte Abhilfe schaffen, aber schlimme Dinge können sehr leicht passieren. Achtung! :-)
quelle
/ dev / mem bietet Zugriff auf den physischen Speicher des Systems , nicht auf den virtuellen Speicher. Auf den virtuellen Adressraum des Kernels kann mit / dev / kmem zugegriffen werden.
Es wird hauptsächlich verwendet, um auf E / A-Speicheradressen zuzugreifen, die sich auf Peripheriegeräte wie Videoadapter beziehen.
quelle
sudo cat /dev/urandom > /dev/mem
Ich werde nichts tun, da sudo das Privileg von cat, aber nicht von redirect erhöhen wird. Sie können entwedersudo su
in der Root-Shell arbeiten oder verwendensudo dd if=/dev/urandom of=/dev/mem
/dev/mem
Ermöglicht den Zugriff auf den physischen Speicher, dh den gesamten RAM im System. Dies bedeutet jedoch nicht, dass Sie vollständigen Lese- / Schreibzugriff auf den RAM erhalten (siehe CONFIG_STRICT_DEVMEM-Option in diesem Dokument). Beachten Sie auch, dass in einigen Regionen des physischen Speichers andere Geräte wie Grafikkartenspeicher usw. zugeordnet sind.Blind zu schreiben führt zu
/dev/mem
einem ungewissen Verhalten. Hier ist ein YouTube-Video, das dasselbe tut.quelle
Probieren Sie es aus mit
busybox devmem
busybox devmem
ist ein winziges CLI-Dienstprogramm, das mmaps/dev/mem
.Du kannst es in Ubuntu bekommen mit:
sudo apt-get install busybox
Verwendung: 4 Bytes von der physikalischen Adresse lesen
0x12345678
:Schreiben Sie
0x9abcdef0
an diese Adresse:Quelle: https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85
MAP_SHARED
Beim Mapping
/dev/mem
möchten Sie wahrscheinlich Folgendes verwenden:MAP_SHARED
bewirkt, dass Schreibvorgänge sofort in den physischen Speicher verschoben werden, was das Beobachten erleichtert und für Hardware-Registerschreibvorgänge sinnvoller ist.CONFIG_STRICT_DEVMEM
undnopat
Um
/dev/mem
regulären RAM auf Kernel v4.9 anzeigen und ändern zu können, müssen Sie Folgendes ausführen:CONFIG_STRICT_DEVMEM
(standardmäßig unter Ubuntu 17.04 eingestellt)nopat
Kernel-Befehlszeilenoption für x86IO-Ports funktionieren auch ohne diese.
Siehe auch: https://stackoverflow.com/questions/39134990/mmap-of-dev-mem-fails-with-invalid-argument-for-virt-to-phys-address-but-addre/45127582#45127582
Cache leeren
Wenn Sie versuchen, anstelle eines Registers in den RAM zu schreiben, wird der Speicher möglicherweise von der CPU zwischengespeichert: https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region -of-address-space-in-linux und ich sehe keine sehr tragbare / einfache Möglichkeit, es zu leeren oder die Region als nicht zwischenspeicherbar zu markieren:
/dev/mem
Kann also möglicherweise nicht zuverlässig verwendet werden, um Speicherpuffer an Geräte zu übergeben?Dies kann in QEMU leider nicht beobachtet werden, da QEMU keine Caches simuliert.
Wie man es ausprobiert
Nun zum spaßigen Teil. Hier sind einige coole Setups:
volatile
Variable in einem Userland-Prozess zuweisen/proc/<pid>/maps
+/proc/<pid>/pagemap
devmem2
und beobachten, wie der Userland-Prozess reagiert:kmalloc
virt_to_phys
und geben Sie sie an das Userland zurückdevmem2
devmem2
, um in das Register zu schreibenprintf
wird als Antwort aus dem virtuellen Gerät ausgegebenquelle
/ dev / mem bot traditionell Zugriff auf den gesamten physischen Adressraum. Das schließt RAM ein, aber es schließt auch alle speicherabgebildeten IO-Geräte ein.
Viele moderne Kernel werden mit "CONFIG_STRICT_DEVMEM" konfiguriert, wodurch / dev / mem nur auf speicherabgebildete E / A-Geräte beschränkt wird.
Zufälliges Schreiben von Müll ist eine schlechte Idee, aber es ist schwer vorherzusagen, was genau passieren wird. Hardware reagiert möglicherweise auf unvorhersehbare Weise auf zufälligen Müll. Beschädigte Kernel-Speicherstrukturen können zu unvorhersehbarem Kernel-Verhalten führen. Bestenfalls würde ich einen Systemabsturz erwarten, im schlimmsten Fall kommen Datenverfälschungen oder gar Hardware-Bricking nicht in Frage.
PS: Beachten Sie, dass Ihr Befehl, wenn er als normaler Benutzer ausgeführt wird, nichts tun sollte, da das sudo nur den cat-Befehl und nicht die Umleitung aufhebt.
quelle