Poder de un proceso raíz para inspeccionar la memoria

Poder de un proceso raíz para inspeccionar la memoria

Sé que en una máquina Linux, si un proceso puede obtener privilegios de root, puede acceder a partes del sistema de archivos a las que normalmente no tendría acceso.

Quiero preguntar si un proceso de Linux rooteado puede inspeccionar la memoria de cualquier otro proceso en un sistema. Entonces, si tengo un proceso que contiene un secreto en su montón o pila, ¿un proceso rooteado podrá acceder a él y, en caso afirmativo, cómo lo hará?

(Quien responda también puede considerar un proceso de shell rooteado; solo me preocupa un proceso con acceso de root)

Respuesta1

Sí, puedes, para ver ejemplos, mira esta respuesta. https://stackoverflow.com/questions/12977179/reading-living-process-memory- without-interrupting-it

o jugar con /dev/<pid>/memo /dev/kmemcomo esto

por ejemplo, con este código,raízEl usuario puede leer la memoria de cualquier proceso en el host.

#! /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()

Vea también el uso de ptracey gdb, herramientas diseñadas para hacer esto en tiempo real.

leyendo la memoria del shell bash

memoria de shell bash de lectura raíz

Respuesta2

Sí.

Las capacidades raíz se han roto. Ahora un proceso puede tener un subconjunto de ellos (incluida la raíz que no tiene ninguno).

Al mirar elpágina man de capacidades, podemos ver lo que root puede hacer (normalmente).

incluyo unpocosaquí:

   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.

De los que se muestran aquí, CAP_SYS_MODULEpodrían usarse para cargar un módulo del kernel que pudiera hacerlo; CAP_SYS_RAWIOpodría usarse para abrir /dev/mem; Hay otras formas con otras capacidades, incluidas ptrace.

información relacionada