Möglichkeit eines Root-Prozesses, den Speicher zu überprüfen

Möglichkeit eines Root-Prozesses, den Speicher zu überprüfen

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>/memoder /dev/kmemso

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 ptraceund gdb, Tools, die dafür entwickelt wurden, dies in Echtzeit zu tun.

Lesen des Bash-Shell-Speichers

Root liest Bash-Shell-Speicher

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_MODULEkönnte eines zum Laden eines Kernelmoduls verwendet werden, das dies könnte; CAP_SYS_RAWIOkönnte zum Öffnen verwendet werden /dev/mem; Es gibt weitere Möglichkeiten mit anderen Fähigkeiten, einschließlich ptrace.

verwandte Informationen