427. 지속성·재침투 — ld.so.preload·동적 라이브러리 지속성 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
427/450

시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 27/50편 (전체 427/450)
학습 단계: 스케줄·서비스·부팅 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

/etc/ld.so.preload에 라이브러리 경로를 적으면 동적 링크되는 모든 프로그램이 실행될 때마다 그 라이브러리를 먼저 불러옵니다(T1574.006). 지속성과 은닉(파일·프로세스 숨기기)을 동시에 얻을 수 있는 강력한 기법입니다.

동적 링커 지속성
 /etc/ld.so.preload        → 모든 프로세스에 주입 (정상 시스템은 보통 없음)
 /etc/ld.so.conf.d/*.conf  → 라이브러리 검색 경로 추가 → 정상 라이브러리 이름 가로채기
 LD_PRELOAD (환경변수)     → 특정 서비스·셸에 주입 (I23·I25와 결합)
 효과: ls·ps·netstat 결과 조작 → 은닉형 루트킷(H영역 25편)

핵심: 주입된 시스템에서는 "그 시스템의 도구"를 믿을 수 없다

H영역 25편이 은닉 관점이었다면, 이번 편은 지속성 관점에서 preload가 언제·누구에 의해 만들어졌고 무엇을 다시 살리는지를 봅니다.

2. 왜 중요한가

  • 모든 프로세스 실행이 트리거가 되므로 가장 넓은 범위의 지속성입니다.
  • 은닉 기능이 결합되면 일반 점검 명령의 결과가 조작됩니다.
  • 정상 서버에는 ld.so.preload가 거의 없어 존재 자체가 강한 신호입니다.

3. 핵심 명령어 / 설정

확인명령포인트
preload 파일cat /etc/ld.so.preload존재 여부
검색 경로cat /etc/ld.so.conf.d/*비표준 경로
주입 확인grep -l <lib> /proc/*/maps로드된 프로세스
정적 도구busybox ls /etc조작 우회

4. 실습 (실습 예시)

# 동적 링커 지속성 점검 (분석 방법)
ls -l --time-style=full-iso /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload
cat /etc/ld.so.conf.d/*.conf 2>/dev/null | grep -vE '^(#|$)'
# 실제로 로드된 비표준 경로 라이브러리 (일부 프로세스 샘플)
sudo grep -hoE '/[^ ]+\.so[^ ]*' /proc/[0-9]*/maps 2>/dev/null | grep -vE '^/(usr/)?lib(64)?/' | sort | uniq -c | head
# 루트킷 영향 가능성: 정적 바이너리로 교차 확인
command -v busybox && busybox ls -la /etc/ld.so.preload

5. 정상 상태

ls: cannot access '/etc/ld.so.preload': No such file or directory
ld.so.conf.d: 패키지 기본 경로만
비표준 경로 라이브러리 로드: 없음

ld.so.preload가 없고, 라이브러리 검색 경로가 패키지 기본값이며, 비표준 경로 라이브러리를 로드한 프로세스가 없는 상태가 정상입니다.

6. 이상 상태

-rw-r--r--. 1 root root 27 2026-10-08 03:04 /etc/ld.so.preload
/usr/lib64/.libsys.so
maps: 412 /usr/lib64/.libsys.so  (412개 프로세스에 주입)
  • ld.so.preload 생성 + 숨김 라이브러리 → 전체 프로세스 주입 지속성
  • 수백 개 프로세스가 로드 → 시스템 전역 영향
  • 일반 ls 결과와 busybox 결과 불일치 시 은닉 기능 동작 → 루트킷급

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

동적 링커 지속성 분석 흐름입니다(가상의 예시).

[preload 생성 감지] auditd persist_preload · FIM
   ↓
[라이브러리 확인] 경로·해시·패키지 소유·문자열(후킹 함수명)
   ↓
[주입 범위] /proc/*/maps 로드 프로세스 수
   ↓
[신뢰성] 정적 도구·외부 매체·오프라인 분석으로 교차 검증
신호해석
preload 존재강한 이상
숨김 .so악성 라이브러리
도구 결과 불일치은닉 동작

라이브러리가 readdir·fopen 같은 함수를 가로채면 해당 서버 안의 점검 결과를 믿을 수 없으므로, 디스크 이미지를 떠서 다른 시스템에서 분석하는 것이 안전합니다.

8. SOC 관제 포인트

  • ld.so.preload 생성은 최고 수준의 Alert로 다룹니다.
  • ld.so.conf.d 변경과 ldconfig 실행을 함께 감시합니다.
  • 은닉 가능성이 있으면 호스트 내 도구 대신 중앙 로그·오프라인 분석으로 판단합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108260" level="15">
    <if_sid>108000</if_sid>
    <field name="audit.key">persist_preload</field>
    <field name="audit.file.name" type="pcre2">^/etc/ld\.so\.(preload|conf|conf\.d/.*)$</field>
    <description>동적 링커 preload·검색 경로 변경(라이브러리 주입 지속성 의심)</description>
    <mitre><id>T1574.006</id></mitre>
  </rule>
</group>

/etc/ld.so.preload는 존재하지 않는 경우가 대부분이므로 파일 생성 자체를 최고 레벨로 경보합니다. 파일이 아직 없더라도 -w /etc/ld.so.preload -p wa로 감시 규칙을 걸 수 있습니다.

10. 대응 방법

  1. 초기 확인 — preload·검색 경로 변경 내용과 라이브러리를 확인합니다.
  2. 범위 확인 — 주입된 프로세스 범위와 은닉 동작 여부를 확인합니다.
  3. 증거 확보 — 라이브러리 사본·해시·메모리 맵 정보를 보존하고 가능하면 디스크 이미지를 확보합니다.
  4. 차단/조치 — preload 줄과 라이브러리를 제거하고 영향 서비스를 재시작하며, 은닉이 확인되면 재설치를 검토합니다.
  5. 재발 방지 — ld.so 관련 파일을 최고 등급 감시 대상으로 유지합니다.

11. 핵심 정리

위치범위
ld.so.preload모든 프로세스
ld.so.conf.d라이브러리 가로채기
LD_PRELOAD특정 서비스·셸
주의호스트 도구 결과 불신
면접 포인트"preload 한 줄이면 모든 실행이 트리거 — 그 서버의 도구는 믿지 않는다"

12. 다음 편 예고

다음 편 428. 지속성·재침투 — 스케줄·서비스·부팅 지속성 종합 분석 에서는 I19~I27의 cron·at·systemd 서비스·timer·drop-in·rc.local·셸 초기화·udev·ld.so.preload 지속성을 트리거별 점검 체계로 종합합니다.


이전 편: 426. 지속성·재침투 — udev 규칙 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글