426. 지속성·재침투 — udev 규칙 지속성 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
426/450

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

선행 학습

1. 개념

udev는 장치가 연결·변경될 때 규칙을 평가하고 RUN+=에 적힌 명령을 root로 실행합니다(T1546.017). 부팅 중에도 수많은 장치 이벤트가 발생하므로, 규칙 하나로 부팅 시마다 명령을 실행할 수 있습니다.

udev 지속성 구조
 /etc/udev/rules.d/75-net-tune.rules
   ACTION=="add", SUBSYSTEM=="net", RUN+="/usr/lib/.x/agent"
   ↓
 부팅 시 네트워크 장치 add 이벤트 → root로 agent 실행
 특징
  · 실행 프로세스의 부모가 systemd-udevd
  · RUN은 짧게 실행되어야 해서 at·systemd-run으로 분리하기도 함

핵심: 잘 안 보는 rules.d — 부모가 systemd-udevd인 비정상 실행을 본다

udev 규칙은 cron·systemd 점검에서 빠지기 쉬운 이벤트 트리거형 지속성입니다. I05편 분류표의 "이벤트 시" 칸에 해당합니다.

2. 왜 중요한가

  • 대부분의 지속성 점검 체크리스트에 udev가 빠져 있습니다.
  • root 권한으로 실행되며 부팅마다 반복됩니다.
  • 장치 이벤트(USB 연결 등)를 트리거로 쓰면 실행 시점을 예측하기 어렵습니다.

3. 핵심 명령어 / 설정

확인명령포인트
규칙 파일ls -la /etc/udev/rules.d/신규·미소유
RUN 지시어grep -rn 'RUN+=' /etc/udev/rules.d/실행 대상
소유rpm -qf /etc/udev/rules.d/<file>패키지 여부
실행 흔적ps -eo pid,ppid,cmd + 부모=systemd-udevd자식 프로세스

4. 실습 (실습 예시)

# udev 규칙 지속성 점검 (분석 방법)
ls -la --time-style=full-iso /etc/udev/rules.d/ /run/udev/rules.d/ 2>/dev/null
sudo grep -rnE 'RUN\+?=|PROGRAM=' /etc/udev/rules.d/ 2>/dev/null
for f in /etc/udev/rules.d/*; do rpm -qf "$f" >/dev/null 2>&1 || dpkg -S "$f" >/dev/null 2>&1 || echo "미소유: $f"; done
# systemd-udevd가 실행한 비표준 경로 프로세스(auditd execve 기준)
sudo ausearch -k exec_persist -i 2>/dev/null | grep -B2 'comm=systemd-udevd' | grep -E 'exe=' | sort -u | head

5. 정상 상태

/etc/udev/rules.d/70-persistent-ipoib.rules (rdma-core 소유)
RUN+= 지시어: 없음

rules.d 파일이 패키지 소유이거나 승인된 장치 설정이고, RUN 지시어가 없거나 패키지 바이너리만 가리키는 상태가 정상입니다.

6. 이상 상태

미소유: /etc/udev/rules.d/75-net-tune.rules (03:03 생성)
ACTION=="add", SUBSYSTEM=="net", RUN+="/usr/lib/.x/agent"
execve: ppid=systemd-udevd exe=/usr/lib/.x/agent
  • 미소유 규칙 + 숨김 경로 실행 → udev 지속성
  • net add 이벤트 트리거 → 부팅마다 root 실행
  • systemd-udevd 자식으로 비표준 바이너리 실행 → 실제 동작 확인

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

udev 지속성 분석 흐름입니다(가상의 예시).

[규칙 변경] /etc/udev/rules.d 감시
   ↓
[내용] ACTION·SUBSYSTEM(트리거) · RUN(실행 대상)
   ↓
[실행 흔적] 부모 systemd-udevd의 비정상 execve
   ↓
[연계] 실행 대상이 만드는 네트워크 연결·추가 지속성
필드의미
ACTION트리거 이벤트
SUBSYSTEM장치 유형
RUN+=실행 명령(root)

udev 규칙만 지우고 재부팅하지 않으면 이미 실행된 프로세스는 남아 있으므로, 프로세스 종료와 바이너리 격리를 함께 수행합니다.

8. SOC 관제 포인트

  • udev rules.d를 지속성 감시 경로에 추가합니다.
  • 부모가 systemd-udevd인 비표준 경로 실행을 계보 룰로 탐지합니다.
  • 지속성 점검 체크리스트에 udev를 명시합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108250" level="12">
    <if_sid>108000</if_sid>
    <field name="audit.key">persist_boot</field>
    <field name="audit.file.name" type="pcre2">^/(etc|run|usr/lib|lib)/udev/rules\.d/.*\.rules$</field>
    <description>udev 규칙 파일 생성·수정(이벤트 트리거 지속성 의심)</description>
    <mitre><id>T1546.017</id></mitre>
  </rule>
</group>

udev 규칙 디렉터리를 부팅 지속성 키로 감시합니다. 실제 실행은 execve 감사에서 부모 프로세스(systemd-udevd)를 조건으로 하는 별도 룰로 보완합니다.

10. 대응 방법

  1. 초기 확인 — 추가된 규칙의 트리거와 RUN 대상을 확인합니다.
  2. 범위 확인 — 실행 대상 프로세스의 동작과 다른 지속성 연결을 확인합니다.
  3. 증거 확보 — 규칙 파일·실행 파일·execve 기록을 보존합니다.
  4. 차단/조치 — 규칙을 제거하고 udevadm control --reload 후 프로세스·바이너리를 격리합니다.
  5. 재발 방지 — udev를 점검·감시 표준 항목에 넣습니다.

11. 핵심 정리

항목확인
위치/etc/udev/rules.d
실행RUN+= (root)
흔적부모 systemd-udevd
복구규칙 제거 + reload
면접 포인트"장치 이벤트가 트리거 — 체크리스트에서 빠지기 쉬운 udev RUN+="

12. 다음 편 예고

다음 편 427. 지속성·재침투 — ld.so.preload·동적 라이브러리 지속성 탐지 에서는 /etc/ld.so.preload와 라이브러리 경로 변조로 모든 프로세스에 악성 라이브러리를 주입하는 지속성을 탐지하는 방법을 다룹니다.


이전 편: 425. 지속성·재침투 — 셸 초기화 파일 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글