시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 24/50편 (전체 274/450)
학습 단계: 지속성(persistence) 메커니즘
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
동적 링커는 프로그램 실행 시 공유 라이브러리를 로드합니다. 공격자는 LD_PRELOAD나 /etc/ld.so.preload로 악성 라이브러리를 먼저 로드시켜, 정상 함수를 가로채거나(후킹) 모든 프로세스에 코드를 주입합니다.
동적 라이브러리 지속성·후킹
/etc/ld.so.preload: 모든 프로세스에 라이브러리 강제 로드(전역)
LD_PRELOAD 환경변수: 특정 실행에 라이브러리 주입
함수 후킹: open/read 등을 가로채 은닉·자격증명 탈취
사용자 rootkit: 라이브러리 수준 프로세스·파일 은닉
위험: 전역 후킹 → 은닉·자격증명 탈취·모든 프로세스 영향
/etc/ld.so.preload는 모든 동적 링크 프로세스에 라이브러리를 강제 로드시켜, 가장 강력한 라이브러리 수준 지속성·rootkit이 됩니다.
| 메커니즘 | 범위 | 위험 |
|---|---|---|
/etc/ld.so.preload | 전역(모든 프로세스) | 매우 높음 |
| LD_PRELOAD 환경변수 | 특정 실행 | 높음 |
| 함수 후킹 | 은닉·탈취 | 매우 높음 |
| 비표준 .so 로드 | 라이브러리 주입 | 높음 |
| 정상 라이브러리 | 정상 | 정상 |
# LD_PRELOAD·라이브러리 지속성 탐지 (분석 방법)
# ld.so.preload 존재·내용(비어있어야 정상인 경우 많음)
cat /etc/ld.so.preload 2>/dev/null
sudo ausearch -k persist -i --start recent 2>/dev/null | grep 'ld.so.preload'
# 프로세스 환경변수의 LD_PRELOAD(비정상 주입)
for p in /proc/[0-9]*; do tr '\0' '\n' < $p/environ 2>/dev/null | grep -q '^LD_PRELOAD=' && echo "$p: $(grep -a LD_PRELOAD $p/environ)"; done 2>/dev/null | grep -vE '/usr/lib'
$ (ld.so.preload) (없음 또는 비어있음)
$ (LD_PRELOAD 환경변수) (없음 또는 정상 라이브러리)
/etc/ld.so.preload가 비어있거나 정상이고, 프로세스에 비정상 LD_PRELOAD 주입이 없는 상태가 정상입니다.
$ (ld.so.preload)
/tmp/.so
04:13 /etc/ld.so.preload 변경(watch)
$ (LD_PRELOAD 환경변수)
/proc/3400: LD_PRELOAD=/dev/shm/.hook.so
LD_PRELOAD 지속성·후킹 분석입니다(가상의 예시).
[전역 주입] /etc/ld.so.preload: /tmp/.so
↓
[로드] 모든 동적 링크 프로세스가 /tmp/.so 먼저 로드
↓
[후킹] open/readdir/read 가로채기
├ 파일·프로세스 은닉(ls·ps에서 숨김)
├ 자격증명 탈취(비밀번호 입력 가로채기)
└ 백도어 인증
= 전역 라이브러리 rootkit(가장 강력)
| 메커니즘 | 효과 |
|---|---|
| ld.so.preload | 전역 주입 |
| 함수 후킹 | 은닉·탈취 |
| readdir 후킹 | 파일 숨김 |
| 전역 영향 | 모든 프로세스 |
ld.so.preload 변경은 라이브러리 rootkit의 결정적 지표입니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,persistence,">
<rule id="105230" level="14">
<if_sid>105060</if_sid>
<field name="audit.file" type="pcre2">/etc/ld\.so\.preload|/etc/ld\.so\.conf</field>
<description>동적 링커 preload 변경(라이브러리 rootkit·전역 후킹)</description>
<mitre><id>T1574.006</id></mitre>
</rule>
</group>
/etc/ld.so.preload는 FIM 최우선 감시 대상입니다. 비정상 LD_PRELOAD 환경변수는 프로세스 점검으로 보완합니다.
| 메커니즘 | 범위 |
|---|---|
| /etc/ld.so.preload | 전역(모든 프로세스) |
| LD_PRELOAD 변수 | 특정 실행 |
| 함수 후킹 | 은닉·탈취 |
| 비표준 .so | 라이브러리 주입 |
| 면접 포인트 | "ld.so.preload는 전역 후킹 rootkit — 모든 프로세스에 주입, FIM 최우선 감시" |
다음 편 275. 프로세스·지속성 — SSH authorized_keys 지속성 탐지 에서는 SSH authorized_keys 지속성을 다루는 SSH authorized_keys 지속성 탐지를 다룹니다.
이전 편: 273. 프로세스·지속성 — init·rc 스크립트 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점