375. 방어 회피·흔적 삭제 — LD_PRELOAD·syscall 후킹 은닉 탐지

changseop lee·7일 전

시스템 보안 · 취약점

목록 보기
375/450

시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 25/50편 (전체 375/450)
학습 단계: 보안 기능 무력화·은닉
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

커널 루트킷(H24)과 달리 사용자 영역 루트킷(userland rootkit)은 LD_PRELOAD·/etc/ld.so.preload로 공유 라이브러리 함수를 가로채 결과를 조작합니다. readdir·open 등 libc 함수를 후킹해 특정 파일·프로세스를 숨깁니다. 커널 모듈 없이 동작해 적재 흔적이 다릅니다.

사용자 영역 루트킷 은닉
 LD_PRELOAD=/tmp/evil.so <명령> (프로세스 단위)
 /etc/ld.so.preload에 악성 .so 등록 (전역·영구)
 후킹: readdir(파일 숨김)·open·access(접근 조작)
 특징: 커널 모듈 없이 libc 함수 가로채기

탐지: ld.so.preload 변경·비정상 LD_PRELOAD·정적 바이너리 교차

핵심은 /etc/ld.so.preload입니다. 이 파일에 악성 .so가 등록되면 모든 동적 링크 프로그램이 영향받습니다. 정적 컴파일 도구(busybox)로 교차하면 은닉이 드러납니다.

2. 왜 중요한가

  • 사용자 영역 루트킷은 커널 모듈 없이 libc 함수 가로채기로 파일·프로세스를 숨깁니다.
  • /etc/ld.so.preload 등록은 전역·영구적으로 모든 동적 프로그램에 적용됩니다.
  • 정적 바이너리(동적 링크 안 함)로 조회하면 후킹을 우회해 은닉이 드러납니다.

3. 핵심 명령어 / 설정

방식수단범위
프로세스 단위LD_PRELOAD=...단일 실행
전역·영구/etc/ld.so.preload전체
함수 후킹readdir·open파일 은닉
교차 탐지정적 바이너리우회 확인
정상디버깅 라이브러리정상

4. 실습 (실습 예시)

# 사용자 영역 루트킷 탐지 (분석 방법)
# ld.so.preload 존재·변경(핵심 신호)
ls -la /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload 2>/dev/null
sudo ausearch -k log_tamper,proc_exec -i --start recent 2>/dev/null | grep -E 'ld.so.preload|LD_PRELOAD' | tail
# 동적 vs 정적 도구 결과 교차(은닉 확인)
ls /tmp | wc -l; busybox ls /tmp 2>/dev/null | wc -l   # 불일치면 후킹 의심

5. 정상 상태

$ (ld.so.preload) 없음(정상 — 대부분 미사용)
$ (동적 vs 정적) 일치

/etc/ld.so.preload가 없거나 정상 라이브러리만 등록되고, 동적·정적 도구 결과가 일치하는 상태가 정상입니다.

6. 이상 상태

$ (ld.so.preload)
/etc/ld.so.preload: /tmp/.libhide.so (악성 .so 등록)
$ (동적 vs 정적)
ls /tmp → 8개 / busybox ls /tmp → 10개
→ 동적 ls가 2개 파일 숨김(readdir 후킹)
  • /etc/ld.so.preload에 악성 .so 등록 → 전역 사용자 영역 루트킷
  • 동적 ls(후킹됨)와 정적 busybox ls 결과 불일치 → 파일 은닉 확인
  • ld.so.preload 변조 + 도구 불일치 → 사용자 영역 루트킷 → 정탐

7. 로그 분석 (분석 방법)

사용자 영역 루트킷 분석입니다(가상의 예시).

[공격자] /tmp/.libhide.so (readdir 후킹 라이브러리)
   echo /tmp/.libhide.so > /etc/ld.so.preload (전역 등록)
   ↓ (후킹 효과)
동적 링크 프로그램(ls·ps)이 .libhide.so를 먼저 로드
   → readdir에서 악성 파일·프로세스 제거
      ↕ (교차 탐지)
[분석가]
 · /etc/ld.so.preload 내용 확인(비정상 .so)
 · busybox(정적) ls vs 동적 ls 불일치
   ↓
= preload 등록·도구 불일치로 은닉 발각 → 정탐
관찰해석
ld.so.preload전역 후킹 등록
동적 vs 정적은닉 확인
readdir 후킹파일 숨김

ld.so.preload 점검 + 정적 교차가 사용자 영역 루트킷 탐지의 핵심입니다.

8. SOC 관제 포인트

  • 사용자 영역 루트킷은 LD_PRELOAD·/etc/ld.so.preload로 libc 함수를 가로채 은닉합니다.
  • 커널 모듈 없이 동작하며, /etc/ld.so.preload 등록이 전역·영구 핵심 신호입니다.
  • 정적 바이너리(busybox)로 교차 조회하면 후킹을 우회해 은닉이 드러납니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_h,defense_evasion,">
  <rule id="107240" level="14">
    <if_sid>107000</if_sid>
    <field name="audit.file" type="pcre2">/etc/ld\.so\.preload</field>
    <description>ld.so.preload 변조(사용자 영역 루트킷 은닉)</description>
    <mitre><id>T1574.006</id><id>T1014</id></mitre>
  </rule>
</group>

/etc/ld.so.preload를 FIM 핵심 감시 대상에 포함합니다. 비정상 LD_PRELOAD 실행과 동적·정적 도구 교차 점검을 병행합니다.

10. 대응 방법

  1. 초기 확인 — /etc/ld.so.preload 존재·내용·변경과 비정상 LD_PRELOAD를 확인합니다.
  2. 범위 확인 — 동적·정적 도구(ls vs busybox ls) 결과 불일치를 확인합니다.
  3. 증거 확보 — preload 설정·악성 .so·불일치 결과를 보존합니다.
  4. 차단/조치 — 사용자 영역 루트킷 정탐이면 preload 제거·악성 .so 분석·은닉 자원 조사를 진행합니다.
  5. 재발 방지 — LD_PRELOAD·syscall 후킹 은닉 탐지를 운영합니다.

11. 핵심 정리

방식수단
프로세스 단위LD_PRELOAD=...
전역·영구/etc/ld.so.preload
함수 후킹readdir·open
교차 탐지정적 바이너리
면접 포인트"사용자 영역 루트킷은 ld.so.preload — 정적 바이너리 교차로 후킹 우회 탐지"

12. 다음 편 예고

다음 편 376. 방어 회피·흔적 삭제 — 프로세스·파일 은닉 탐지 에서는 프로세스·파일 은닉을 다루는 프로세스·파일 은닉 탐지를 다룹니다.


이전 편: 374. 방어 회피·흔적 삭제 — 커널 모듈·루트킷 기반 은닉 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글