Poder de um processo raiz para inspecionar a memória

Poder de um processo raiz para inspecionar a memória

Eu sei que em uma máquina Linux, se um processo for capaz de obter privilégios de root, ele poderá acessar partes do sistema de arquivos às quais normalmente não teria acesso.

Quero perguntar se um processo Linux com root pode inspecionar a memória de qualquer outro processo em um sistema. Portanto, se eu tiver um processo que contém um segredo em seu heap ou pilha, um processo com acesso root poderá acessá-lo e, em caso afirmativo, como o fará?

(Quem responder também pode considerar um processo shell enraizado; só estou preocupado com um processo com acesso root)

Responder1

sim, você pode, por exemplo, veja esta resposta https://stackoverflow.com/questions/12977179/reading-living-process-memory-without-interrupting-it

ou brincar com /dev/<pid>/memou /dev/kmemgostar disso

por exemplo, com este código,raizo usuário pode ler a memória de qualquer processo no 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()

Veja também o uso de ptracee gdb, ferramentas projetadas para fazer isso em tempo real.

lendo a memória do shell bash

root lendo a memória do shell bash

Responder2

Sim.

Os recursos raiz foram divididos. Agora, um processo pode ter um subconjunto deles (incluindo o root sem nenhum).

Ao olhar parapágina de manual de recursos, podemos ver o que o root pode (normalmente) fazer.

Eu incluo umalgunsaqui:

   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.

Dos mostrados aqui, CAP_SYS_MODULEpoderiam ser usados ​​para carregar um módulo do kernel que pudesse fazer isso; CAP_SYS_RAWIOpoderia ser usado para abrir /dev/mem; Existem outras maneiras com outros recursos, incluindo ptrace.

informação relacionada