Возможность корневого процесса проверять память

Возможность корневого процесса проверять память

Я знаю, что на машине Linux, если процесс может получить привилегии root, он может получить доступ к частям файловой системы, к которым он обычно не имеет доступа.

Я хочу спросить, может ли процесс Linux с правами root проверять память любого другого процесса в системе? Так что если у меня есть процесс, который содержит секрет в своей куче или стеке, сможет ли процесс с правами root получить к нему доступ, и если да, то как он это сделает?

(Тот, кто ответит, может также рассмотреть процесс оболочки с правами root; меня просто беспокоит процесс с правами root)

решение1

да, можно, для примера смотрите этот ответ https://stackoverflow.com/questions/12977179/чтение-проживающего-процесса-памяти-без-прерывания-его

или играть с этим /dev/<pid>/memили /dev/kmemнравится это

например с этим кодом,кореньпользователь может читать память любого процесса на хосте.

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

См. также использование ptraceи gdb, инструментов, которые предназначены для выполнения этой задачи в режиме реального времени.

чтение памяти оболочки bash

root, читающий память оболочки bash

решение2

Да.

Возможности root были разделены. Теперь процесс может иметь подмножество из них (включая root, не имеющий ни одного).

Глядя настраница руководства по возможностям, мы можем увидеть, что root может (обычно) делать.

Я включаюнемногоздесь:

   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.

Из показанных здесь CAP_SYS_MODULEможно использовать для загрузки модуля ядра, который может это сделать; CAP_SYS_RAWIOможно использовать для открытия /dev/mem; Существуют и другие способы с другими возможностями, включая ptrace.

Связанный контент