메모리를 검사하는 루트 프로세스의 강력한 기능

메모리를 검사하는 루트 프로세스의 강력한 기능

Linux 시스템에서 프로세스가 루트 권한을 얻을 수 있으면 일반적으로 액세스할 수 없는 파일 시스템의 일부에 액세스할 수 있다는 것을 알고 있습니다.

루팅된 Linux 프로세스가 시스템에 있는 다른 프로세스의 메모리를 검사할 수 있는지 묻고 싶습니다. 따라서 힙이나 스택에 비밀이 포함된 프로세스가 있는 경우 루팅된 프로세스가 해당 프로세스에 액세스할 수 있습니까? 그렇다면 어떻게 액세스할 수 있습니까?

(답변하는 사람은 루트 쉘 프로세스를 고려할 수도 있습니다. 루트 액세스 권한이 있는 프로세스만 걱정됩니다.)

답변1

예, 가능합니다. 예를 들어 이 답변을 참조하세요 https://stackoverflow.com/questions/12977179/reading-living-process-memory-without-interrupting-it

아니면 이렇게 놀 /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 쉘 메모리 읽기

루트 읽기 bash 쉘 메모리

답변2

예.

루트 기능이 분리되었습니다. 이제 프로세스는 하위 집합을 가질 수 있습니다(루트가 없는 경우 포함).

을 살펴보면기능 매뉴얼 페이지, 우리는 루트가 (일반적으로) 무엇을 할 수 있는지 볼 수 있습니다.

나는 다음을 포함한다약간의여기:

   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.

관련 정보