Ich weiß, dass ein Prozess auf einer Linux-Maschine, wenn er Root-Rechte erhält, auf Teile des Dateisystems zugreifen kann, auf die er normalerweise keinen Zugriff hätte.
Ich möchte fragen, ob ein gerooteter Linux-Prozess den Speicher eines anderen Prozesses auf einem System überprüfen kann. Wenn ich also einen Prozess habe, der ein Geheimnis in seinem Heap oder Stack enthält, kann ein gerooteter Prozess darauf zugreifen und wenn ja, wie macht er das?
(Wer auch immer antwortet, kann auch einen gerooteten Shell-Prozess in Betracht ziehen; mir geht es nur um einen Prozess mit Root-Zugriff.)
Antwort1
ja, das können Sie. Beispiele finden Sie in dieser Antwort. https://stackoverflow.com/questions/12977179/reading-living-process-memory-without-interrupting-it
oder spiele mit /dev/<pid>/mem
oder /dev/kmem
so
zB mit diesem Code,WurzelDer Benutzer kann den Speicher jedes Prozesses auf dem Host lesen.
#! /usr/bin/env python
import re
import sys
print(sys.argv[1] + ".dump")
maps_file = open("/proc/"+ sys.argv[1] + "/maps", 'r')
mem_file = open("/proc/" + sys.argv[1] + "/mem", 'rb', 0)
output_file = open(sys.argv[1] + ".dump", 'wb')
for line in maps_file.readlines(): # for each mapped region
m = re.match(r'([0-9A-Fa-f]+)-([0-9A-Fa-f]+) ([-r])', line)
if m.group(3) == 'r': # if this is a readable region
start = int(m.group(1), 16)
end = int(m.group(2), 16)
mem_file.seek(start) # seek to region start
chunk = mem_file.read(end - start) # read region contents
output_file.write(chunk) # dump contents to standard output
maps_file.close()
mem_file.close()
output_file.close()
Siehe auch die Verwendung von ptrace
und gdb
, Tools, die dafür entwickelt wurden, dies in Echtzeit zu tun.
Antwort2
Ja.
Die Root-Fähigkeiten wurden aufgeteilt. Jetzt kann ein Prozess eine Teilmenge davon haben (auch Root kann keine haben).
Durch einen Blick auf dieManpage der Funktionenkönnen wir sehen, was root (normalerweise) tun kann.
Ich füge einwenigeHier:
CAP_DAC_OVERRIDE
Bypass file read, write, and execute permission checks. (DAC
is an abbreviation of "discretionary access control".)
CAP_KILL
Bypass permission checks for sending signals (see kill(2)).
This includes use of the ioctl(2) KDSIGACCEPT operation.
CAP_NET_BIND_SERVICE
Bind a socket to Internet domain privileged ports (port
numbers less than 1024).
CAP_SYS_MODULE
* Load and unload kernel modules (see init_module(2) and
delete_module(2));
* in kernels before 2.6.25: drop capabilities from the system-
wide capability bounding set.
CAP_SYS_TIME
Set system clock (settimeofday(2), stime(2), adjtimex(2)); set
real-time (hardware) clock.
CAP_SYS_RAWIO
* Perform I/O port operations (iopl(2) and ioperm(2));
* access /proc/kcore;
* employ the FIBMAP ioctl(2) operation;
* open devices for accessing x86 model-specific registers
(MSRs, see msr(4));
* update /proc/sys/vm/mmap_min_addr;
* create memory mappings at addresses below the value
specified by /proc/sys/vm/mmap_min_addr;
* map files in /proc/bus/pci;
* open /dev/mem and /dev/kmem;
* perform various SCSI device commands;
* perform certain operations on hpsa(4) and cciss(4) devices;
* perform a range of device-specific operations on other
devices.
Von den hier gezeigten CAP_SYS_MODULE
könnte eines zum Laden eines Kernelmoduls verwendet werden, das dies könnte; CAP_SYS_RAWIO
könnte zum Öffnen verwendet werden /dev/mem
; Es gibt weitere Möglichkeiten mit anderen Fähigkeiten, einschließlich ptrace
.