시스템 보안 · 취약점 › C. Linux 정보 노출 및 수집 · 9/50편 (전체 109/450)
학습 단계: 시스템·OS 정보 수집
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
환경변수는 의도치 않게 자격증명이 노출되는 대표 위치입니다. 애플리케이션이 DB 비밀번호·API 키·토큰을 환경변수로 받는 경우가 많아, 공격자는 이를 노립니다.
환경변수 조회
env / printenv → 현재 셸의 환경변수
/proc/[PID]/environ → 실행 중인 프로세스의 환경변수 (다른 사용자 프로세스는 권한 필요)
/proc/self/environ → 자기 프로세스
~/.bashrc, /etc/environment → 설정된 환경변수
위험: 웹/DB 프로세스의 environ에 DB_PASSWORD, API_KEY 등이 있으면
그 프로세스를 읽을 수 있는 권한으로 자격증명 탈취
linsec 32편이 "환경변수 기반 공격"이라면, 여기서는 환경변수를 조회·수집하는 정찰 행위를 탐지합니다.
/proc/[PID]/environ을 읽으려는 시도는 권한 상승·자격증명 탈취 정찰의 강한 신호입니다.| 조회 | 주는 정보 | 위험 |
|---|---|---|
env/printenv | 현재 셸 환경 | 셸에 비밀이 있으면 노출 |
/proc/[PID]/environ | 프로세스 환경 | 서비스 비밀 노출 |
/proc/self/environ | 자기 환경 | 낮음 |
/etc/environment | 시스템 전역 | 설정 노출 |
# environ 접근 감사 (실습 예시) — 다른 프로세스 environ 읽기 감시
-w /etc/environment -p r -k recon_env
-a always,exit -F arch=b64 -S openat -F dir=/proc -F auid>=1000 -F auid!=unset -k recon_environ
# 다른 사용자 프로세스의 environ 읽기 시도 탐색 (분석 방법)
sudo ausearch -k recon_environ -i --start recent | grep 'environ' | tail
# 서비스 프로세스 environ을 읽었는지
sudo ausearch --session 12 -i 2>/dev/null | grep -E 'environ|printenv|/etc/environment' | tail
/proc 전체 openat 감사는 이벤트가 많으므로, 운영에서는 environ 경로 패턴·사람 세션으로 좁히고 SIEM 필터로 정제합니다(147편).
$ sudo ausearch -k recon_env -i --start today | tail -1
(환경변수 조회 없음 또는 자기 셸 printenv 단발)
관리자가 자기 셸의 env를 확인하는 정도는 정상입니다. 위험한 것은 다른 프로세스의 environ 접근입니다.
02:12:40 auid=devops ses=12 comm="cat" name="/proc/1450/environ"
02:12:42 auid=devops ses=12 comm="cat" name="/proc/1188/environ"
environ 수집 흐름입니다(가상의 예시 로그).
type=PATH ... name="/proc/1450/environ" nametype=NORMAL
type=SYSCALL ... syscall=openat auid=devops ses=12 comm="cat" exe="/usr/bin/cat" key="recon_environ"
| 관찰 | 해석 |
|---|---|
| /proc/[PID]/environ | 특정 프로세스 환경 수집 |
| 대상 PID가 서비스 | DB·웹 자격증명 노림 |
| 자기 셸 아님 | 비정상 접근 |
| 성공 시 | E영역 중요정보 접근 위험 |
/proc/[PID]/environ 중 다른(특히 서비스) 프로세스 접근을 최우선 확인합니다.<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_c,recon,credential,">
<rule id="102080" level="11">
<if_group>audit</if_group>
<field name="audit.key">recon_environ</field>
<regex type="pcre2">/proc/[0-9]+/environ</regex>
<description>다른 프로세스 environ 조회(자격증명 수집 정찰)</description>
<mitre><id>T1552.007</id></mitre>
</rule>
</group>
T1552(Unsecured Credentials) 계열에 매핑됩니다. 자기 PID environ은 제외하도록 조건을 조정합니다.
| 조회 | 위험 |
|---|---|
| env/printenv(자기) | 낮음 |
| /proc/[PID]/environ(타인) | 서비스 자격증명 탈취 |
| /etc/environment | 전역 설정 노출 |
| 구분 | 자기 셸 확인(정상) vs 서비스 프로세스 environ 접근(정찰) |
| 면접 포인트 | "서비스 프로세스 environ 조회는 추가 인증 없는 자격증명 탈취 정찰" |
다음 편 110. Linux 정보 수집 — 시스템·OS 정보 수집 종합 분석 에서는 1단계를 마무리하는 시스템·OS 정보 수집 종합 분석을 다룹니다.
이전 편: 108. Linux 정보 수집 — 마운트 정보 조회 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점