시스템 보안 · 취약점 › C. Linux 정보 노출 및 수집 · 1/50편 (전체 101/450)
학습 단계: 시스템·OS 정보 수집
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
B영역이 "어떻게 들어왔나(인증)"였다면, C영역은 "들어와서 무엇을 살펴보는가(정찰)" 입니다. 공격자는 로그인 직후 "여기가 어떤 시스템인가"를 파악하려 OS·커널·호스트 정보를 수집합니다. 이 글들은 명령어 사용법이 아니라, 그 수집 행위가 남기는 흔적을 탐지하는 데 초점을 둡니다.
로그인(B영역)
↓
시스템 정보 수집 ← C영역 (정찰, reconnaissance)
↓
권한 변경·지속성·확산 (D~I영역)
정찰의 특징
- 여러 정보를 "짧은 시간에 연속으로" 조회
- 결과를 보기만 하고 변경은 적음(읽기 위주)
- 정상 관리와 명령은 같지만 맥락(시점·빈도·주체)이 다름
핵심 난제: 정찰에 쓰는 명령(uname, cat /etc/os-release 등)은 관리자도 매일 쓰는 정상 명령입니다. 그래서 C영역은 "명령 자체"가 아니라 "연속성·시점·주체" 로 정상과 정찰을 구분합니다.
| 수집 대상 | 대표 조회 방법 | 흔적이 남는 곳 |
|---|---|---|
| OS 배포판 | /etc/os-release, /etc/*-release 읽기 | auditd 파일 접근, shell history |
| 커널 | uname -a, /proc/version | execve, 파일 접근 |
| 호스트 | hostname, /etc/hostname | execve, 파일 접근 |
| 전반 | 여러 조회의 연속 | 세션 단위 명령 흐름 |
정찰 탐지의 전제: execve 감사(명령 실행)와 파일 접근 감사(민감 파일 읽기), 그리고 세션(ses) 단위 묶기(B영역 038편)가 필요합니다.
# 정찰 탐지를 위한 기반 감사 규칙 (실습 예시 — /etc/audit/rules.d/50-recon.rules)
# 시스템 식별 파일 읽기 감시
-w /etc/os-release -p r -k recon_sysinfo
-w /etc/hostname -p r -k recon_sysinfo
-w /proc/version -p r -k recon_sysinfo
# 정찰에 자주 쓰는 명령 실행 감시 (execve, 사람 세션 한정)
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/uname -F auid>=1000 -F auid!=unset -k recon_cmd
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/hostnamectl -F auid>=1000 -F auid!=unset -k recon_cmd
# 적용 후 한 세션의 정찰성 조회 흐름 확인 (분석 방법)
sudo ausearch -k recon_sysinfo,recon_cmd -i --start recent | grep -E 'type=SYSCALL' | tail
-p r(읽기 감시)는 이벤트가 많이 발생할 수 있어, 운영에서는 사람 세션(auid) 과 빈도 조건으로 좁힙니다(146·147편).
$ sudo ausearch -k recon_sysinfo,recon_cmd -i --start today | grep SYSCALL | tail -3
type=SYSCALL ... auid=admin1 ses=8 comm="uname" exe="/usr/bin/uname" key="recon_cmd"
관리자가 업무 중 단발성으로 uname을 한 번 실행하는 정도는 정상입니다. 정찰과의 차이는 "여러 종류를 짧은 시간에 연속" 하는지입니다.
$ sudo ausearch -k recon_sysinfo,recon_cmd -i --start recent | grep -E 'comm=' | tail
02:11:40 auid=devops ses=12 comm="uname" (커널)
02:11:42 auid=devops ses=12 comm="cat" name="/etc/os-release" (OS)
02:11:45 auid=devops ses=12 comm="hostnamectl" (호스트)
02:11:48 auid=devops ses=12 comm="cat" name="/etc/hostname"
정찰은 세션 단위로 묶어야 흐름이 보입니다(가상의 예시 로그).
type=EXECVE msg=audit(...): argc=2 a0="uname" a1="-a"
type=SYSCALL ... auid=devops uid=devops ses=12 comm="uname" key="recon_cmd"
type=PATH ... name="/etc/os-release" nametype=NORMAL
type=SYSCALL ... auid=devops ses=12 comm="cat" key="recon_sysinfo"
| 필드 | 분석 포인트 |
|---|---|
ses=12 | 같은 세션으로 조회를 묶는 기준 |
auid=devops | 실제 행위자(B영역 탈취 계정) |
comm/name | 무엇을 조회했나 |
| 시간 간격 | 수 초 간격 연속 = 자동화·스크립트 가능성 |
shell history(~/.bash_history)도 보조 자료지만 조작·비활성화될 수 있어, auditd를 1차 근거로 삼습니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_c,recon,">
<!-- 한 세션에서 정찰성 조회가 짧은 시간에 반복 -->
<rule id="102000" level="9" frequency="5" timeframe="60">
<if_group>audit</if_group>
<field name="audit.key">recon_sysinfo|recon_cmd</field>
<description>단시간 내 시스템 정보 수집 반복(정찰 의심)</description>
<mitre><id>T1082</id></mitre>
</rule>
</group>
C영역 Wazuh 커스텀 룰은 102000번대를 씁니다. T1082(System Information Discovery)에 매핑됩니다. 빈도·세션 묶음 조건은 wazuh-logtest로 검증 후 조정합니다.
| 구분 | 핵심 내용 |
|---|---|
| C영역 초점 | 명령 사용법이 아니라 정찰 흔적 탐지 |
| 정찰 특징 | 짧은 시간 연속 조회, 읽기 위주, 로그인 직후 |
| 구분 기준 | 명령이 아니라 연속성·시점·주체 |
| 기반 | execve·파일 접근 감사 + 세션(ses) 묶기 |
| 면접 포인트 | "정찰 명령은 정상 명령과 같다 — 맥락(연속·시점·주체)으로 구분" |
다음 편 102. Linux 정보 수집 — 커널 정보 확인 흔적 분석 에서는 가장 흔한 정찰 중 하나인 커널 정보 확인 흔적 분석을 다룹니다.
이전 편: 100. 계정 · 인증 보안 — 인증 이상 징후 종합 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점