423. 지속성·재침투 — systemd drop-in·generator 악용 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
423/450

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

선행 학습

1. 개념

새 유닛을 만들면 눈에 띄기 때문에, 공격자는 이미 있는 정상 서비스에 설정을 덧붙이는 방법을 씁니다. drop-in(<unit>.d/override.conf)으로 ExecStartPre를 추가하면 sshd가 시작될 때마다 악성 명령이 함께 실행됩니다.

은밀한 systemd 지속성
 ① drop-in
   /etc/systemd/system/sshd.service.d/override.conf
   [Service]
   ExecStartPre=/bin/sh -c '/usr/lib/.x/agent &'
 ② generator
   /etc/systemd/system-generators/x  ← 부팅 시 유닛을 동적으로 생성
 ③ 환경 주입
   Environment=LD_PRELOAD=/usr/lib/.x/lib.so

핵심: 서비스 이름은 정상 — "systemctl cat"의 drop-in 부분을 본다

systemctl cat은 원본 유닛 아래에 drop-in 내용을 함께 보여 주므로, 원본 외에 추가된 블록이 있는지 확인하는 것이 핵심입니다.

2. 왜 중요한가

  • enabled 유닛 목록에는 변화가 없어 기준선 목록 비교로 보이지 않습니다.
  • 신뢰받는 서비스(sshd·cron)와 함께 실행되어 프로세스 계보가 정상처럼 보입니다.
  • generator는 부팅 초기에 실행되어 감시 도구보다 먼저 동작할 수 있습니다.

3. 핵심 명령어 / 설정

확인명령포인트
drop-in 목록systemd-delta --type=extended,overridden확장·재정의
유닛 전체systemctl cat sshd추가 블록
drop-in 파일find /etc/systemd /run/systemd -name '*.conf' -path '*.d/*'신규 파일
generatorls /etc/systemd/system-generators /usr/local/lib/systemd/system-generators미소유 파일

4. 실습 (실습 예시)

# drop-in·generator 점검 (분석 방법)
systemd-delta --type=extended,overridden --no-pager
sudo grep -rnE 'ExecStart(Pre|Post)?=|Environment=.*LD_' /etc/systemd/system/*.d/ 2>/dev/null
ls -la /etc/systemd/system-generators /usr/local/lib/systemd/system-generators 2>/dev/null
# 결과를 기준선과 비교
systemd-delta --no-pager | sort > /tmp/delta_now; diff /root/baseline/systemd_delta.txt /tmp/delta_now

5. 정상 상태

[EXTENDED]   /usr/lib/systemd/system/httpd.service → /etc/systemd/system/httpd.service.d/limits.conf
             (LimitNOFILE=65535, 티켓 CHG-0712)

drop-in이 리소스 제한·환경 설정처럼 승인된 운영 목적이고 실행 명령을 추가하지 않는 상태가 정상입니다.

6. 이상 상태

[EXTENDED]   sshd.service → /etc/systemd/system/sshd.service.d/override.conf (신규)
ExecStartPre=/bin/sh -c '/usr/lib/.x/agent &'
/etc/systemd/system-generators/x (패키지 미소유)
  • sshd에 ExecStartPre 추가 → sshd 재시작마다 악성 프로세스 기동
  • 백그라운드 실행(&)으로 서비스 시작을 방해하지 않음 → 은밀
  • 미소유 generator → 부팅 시 동적 유닛 생성

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

drop-in·generator 분석 흐름입니다(가상의 예시).

[delta 비교] systemd-delta 기준선 diff
   ↓
[내용] drop-in의 ExecStart*/Environment 추가 여부
   ↓
[계보] 대상 서비스(sshd)의 자식으로 실행된 비정상 프로세스
   ↓
[generator] 미소유 파일 → 생성되는 유닛(/run/systemd/generator*)
지시어위험
ExecStartPre/Post추가 명령 실행
Environment=LD_PRELOAD라이브러리 주입
generator부팅 초기 실행

generator가 만든 유닛은 /run/systemd/generator* 아래 휘발성 경로에 생기므로 재부팅 후 다시 만들어집니다. 원본인 generator 파일을 찾아야 근절됩니다.

8. SOC 관제 포인트

  • systemd-delta 출력을 기준선으로 관리합니다.
  • drop-in 중 실행 지시어를 포함한 것은 높은 우선순위로 검토합니다.
  • 정상 서비스의 자식 프로세스 중 비표준 경로 실행을 함께 탐지합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108220" level="13">
    <if_sid>108000</if_sid>
    <field name="audit.key">persist_svc</field>
    <field name="audit.file.name" type="pcre2">\.service\.d/.*\.conf$|system-generators/</field>
    <description>systemd drop-in·generator 생성·수정(기존 서비스 하이재킹 지속성 의심)</description>
    <mitre><id>T1543.002</id></mitre>
  </rule>
</group>

drop-in 디렉터리와 generator 경로를 감시합니다. 정상 운영에서도 drop-in은 생길 수 있으므로 Alert 이후 내용에 실행 지시어가 있는지 확인하는 절차를 함께 둡니다.

10. 대응 방법

  1. 초기 확인 — 추가된 drop-in·generator와 실행 명령을 확인합니다.
  2. 범위 확인 — 대상 서비스의 자식 프로세스와 실행 파일을 확인합니다.
  3. 증거 확보 — drop-in·generator 파일과 systemd-delta 출력을 보존합니다.
  4. 차단/조치 — 파일을 제거하고 systemctl daemon-reload 후 서비스를 재시작합니다.
  5. 재발 방지 — systemd-delta 기준선 비교를 정기 점검에 넣습니다.

11. 핵심 정리

기법탐지
drop-insystemd-delta·systemctl cat
ExecStartPre실행 지시어 검토
generator미소유 파일
복구제거 + daemon-reload
면접 포인트"새 유닛 대신 정상 서비스에 덧붙인다 — systemd-delta로 추가 블록을 본다"

12. 다음 편 예고

다음 편 424. 지속성·재침투 — rc.local·init 스크립트 부팅 지속성 탐지 에서는 rc.local·init.d·rc?.d 같은 전통적 부팅 스크립트에 숨긴 지속성을 호환 서비스(rc-local.service) 동작과 함께 탐지하는 방법을 다룹니다.


이전 편: 422. 지속성·재침투 — systemd timer 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글