리눅스 시스템 보안 감사 시 /proc 가상 파일시스템에서 실행 중인 커널의 데이터 구조와 프로세스의 상태, 권한 설정, 네임스페이스 격리 현황 및 런타임 커널 파라미터를 실시간으로 수집하고 점검합니다.
/proc 파일시스템의 정체: 커널과 프로세스를 들여다보는 창
Linux /proc는 실행 중인 시스템 내부 데이터 구조에 대한 인터페이스를 제공하는 가상(의사) 파일시스템입니다. 물리적인 디스크 공간을 차지하는 일반 파일시스템과 달리, 커널 내부의 데이터를 파일 형태로 노출해 사용자가 시스템 및 프로세스 정보를 쉽게 확인할 수 있게 합니다.
실제로 시스템 관리자들이 흔히 사용하는 ps와 같은 표준 도구 역시 /proc 파일시스템에서 프로세스 정보를 가져와 화면에 출력합니다. 대부분의 파일은 읽기 전용(Read-only)으로 제공되지만, 일부 파일은 쓰기가 가능하여 런타임 중에 커널 변수를 변경하는 용도로 활용됩니다.
/proc/pid 주요 파일 점검을 통한 프로세스 분석
보안 감사자는 각 프로세스의 PID(Process ID)로 명명된 /proc/[pid] 디렉터리에서 해당 프로세스의 상세 상태를 분석합니다. 다음과 같은 경로의 파일들은 프로세스 식별 및 이상 행위 탐지에 핵심적인 정보를 담고 있습니다.
- cmdline 및 status: 프로세스의 실행 명령행 인수와 상태 정보를 확인합니다.
- exe 및 fd: 실행 파일의 심볼릭 링크와 프로세스가 열고 있는 파일 디스크립터(File Descriptor) 목록으로 비정상적인 파일 접근을 감시합니다.
- maps, mem, environ: 프로세스의 메모리 맵, 메모리 내용, 환경 변수 등을 확인할 수 있습니다.
{“table”: “프로세스 정보 수집을 위한 /proc/pid 주요 경로”}
| 점검 경로 | 제공 정보 및 보안 감사 목적 | 특이사항 |
|---|---|---|
| /proc/[pid]/cmdline | 프로세스 실행 인자 확인 및 악성 파라미터 분석 | hidepid=1 설정 시 타 사용자 접근 제한 |
| /proc/[pid]/status | 프로세스 상태 및 권한 정보 점검 | hidepid=1 설정 시 타 사용자 접근 제한 |
| /proc/[pid]/exe | 실제 실행 파일 경로 확인 (심볼릭 링크) | CAP_SYS_PTRACE 권한 필요 |
| /proc/[pid]/fd/* | 열려 있는 파일 및 소켓 리스트 분석 | CAP_SYS_PTRACE 권한 필요 |
| /proc/[pid]/maps | 메모리 맵 및 라이브러리 로드 현황 분석 | CAP_SYS_PTRACE 또는 CAP_PERFMON 필요 |
hidepid 마운트 옵션을 이용한 정보 노출 통제
/proc 내의 PID 디렉터리는 기본적으로 모든 사용자에게 열려 있어, 공격자가 실행 중인 프로세스의 정보를 수집하는 경로로 악용될 수 있습니다. 이를 방지하기 위해 Linux 3.3부터 hidepid 마운트 옵션을 지원합니다.
- hidepid=0: 기본 설정값으로, 모든 사용자가 모든
/proc/[pid]디렉터리에 접근할 수 있습니다. - hidepid=1: 자신의 프로세스가 아닌 경우
/proc/[pid]내부의 파일(cmdline, status 등)에 접근할 수 없습니다. - hidepid=2: 자신의 프로세스가 아닌 경우
/proc/[pid]디렉터리 자체가 보이지 않습니다. 공격자는 프로세스의 존재나 UID, GID를 파악하기 어려워지고, 그만큼 정보 수집 단계의 공격이 효과적으로 차단됩니다.
Linux Capability 모델 기반의 권한 감사
리눅스 커널 2.2 버전부터는 기존의 root 특권을 capability라는 개별 단위로 분리하여 관리하기 시작했습니다. 덕분에 특정 작업에 필요한 최소 권한만 부여하는 세밀한 제어가 가능해졌으며, 각 capability의 특성은 스레드 단위(per-thread)입니다.
특히 /proc 파일시스템 기반 보안 감사에서 주목할 권한은 CAP_SYS_PTRACE입니다. 이 권한이 부여된 프로세스는 다른 프로세스의 /proc/[pid]/maps, /proc/[pid]/mem, exe 심볼릭 링크 및 fd/* 등의 민감한 정보를 열람할 수 있습니다. 적절한 권한 제어가 이루어지지 않은 프로세스가 CAP_SYS_PTRACE나 CAP_PERFMON 권한을 보유하고 있는지 점검하는 것이 중요합니다.
Namespace 격리 현황 및 User Namespace 점검
컨테이너 가상화의 핵심인 네임스페이스(Namespace) 역시 /proc에서 감사할 수 있습니다. 각 프로세스의 /proc/[pid]/ns/ 하위 디렉터리에는 해당 프로세스가 속한 네임스페이스들의 심볼릭 링크가 존재합니다. 두 프로세스의 링크 device ID와 inode 번호가 동일하면 같은 네임스페이스에 속한 것으로 판단합니다.
분석 가능한 주요 네임스페이스 핸들은 다음과 같습니다.
- Network Namespace:
/proc/[pid]/ns/net경로로 식별하며, Linux 3.0부터 지원됩니다. - Mount Namespace:
/proc/[pid]/ns/mnt경로를 통해 식별하며, Linux 3.8부터 지원됩니다. - User Namespace: Linux 3.8부터는 특권(capability) 없이도 User Namespace를 생성할 수 있게 되었습니다.
감사 관점에서 User Namespace의 무특권 생성 허용은 CAP_SYS_ADMIN 요구 사항의 예외 항목이라, 네임스페이스 생성 권한 통제 시 핵심적인 예외 사항으로 다뤄집니다. Linux 4.9부터는 /proc/sys/user/max_user_namespaces 등의 파일로 사용자별 네임스페이스 생성 수량 제한을 확인하고 조정합니다.
/proc/sys/kernel 및 sysctl 기반 커널 설정 감사
/proc/sys/kernel/ 경로의 파일들은 커널 운영을 조정하고 모니터링하는 sysctl 인터페이스 역할을 수행합니다. 관리자는 이 경로의 설정으로 커널 파라미터를 실시간으로 변경하거나 현재 설정값을 점검해 시스템의 보안 강화 수준을 평가합니다.
보안 담당자는 /proc/sys 하위의 설정값들이 보안 가이드라인에 따라 적절히 구성되어 있는지 주기적으로 감사하고, 특히 쓰기 권한이 허용된 일부 파일들이 임의의 변경에 노출되지 않았는지 확인합니다.