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

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

선행 학습

1. 들어가며

서비스는 '재부팅해도 다시 뜨는 프로세스'입니다. 그래서 공격자에게 서비스는 지속성의 이상적 수단입니다. 이번 편은 systemd 서비스의 구조와, 그것이 어떻게 보안 위험이 되는지 봅니다.

2. 핵심 개념

systemd 서비스의 핵심 요소:

  • Unit 파일(.service): 서비스 정의. /etc/systemd/system/, /lib(usr/lib)/systemd/system/, 그리고 사용자 단위 ~/.config/systemd/user/
  • ExecStart: 실행할 명령
  • User: 실행 계정(미지정 시 root)
  • WantedBy/enabled: 부팅 시 자동 시작 여부

보안 관점에서 위험한 조합은 'root 실행 + 낯선 ExecStart + enabled'입니다.

Unit 파일(.service)
   ├── ExecStart=  ← 무엇을 실행? (핵심)
   ├── User=       ← 어떤 권한? (미지정=root)
   └── WantedBy=   ← 부팅 자동시작?
        │ systemctl enable
        ▼
   재부팅해도 자동 실행 → 지속성

3. 동작 원리

systemd는 Unit 파일을 읽어 서비스를 관리합니다. enable하면 지정 target(예: multi-user)에 심볼릭 링크가 생겨 부팅 시 자동 시작됩니다. 공격자는 악성 Unit을 만들어 enable하면, 재부팅·프로세스 종료 후에도 자동으로 되살아나는 지속성을 얻습니다(30편).

사용자 단위 서비스(systemctl --user)나 drop-in 오버라이드(.d/*.conf)는 특히 눈에 덜 띄어, 점검 시 시스템 단위만 보면 놓칠 수 있습니다.

4. 명령어 실습

# enabled 서비스 목록
systemctl list-unit-files --type=service --state=enabled

# 특정 서비스의 실제 정의(ExecStart/User 확인)
systemctl cat <name>.service

# 사용자 단위 서비스(놓치기 쉬움)
systemctl --user list-unit-files --type=service 2>/dev/null

5. 실행 결과

일반 서버에서 서비스 정의 확인 형식입니다. (예시 출력 — systemd가 PID 1인 표준 서버 기준; 본 실습 컨테이너는 systemd가 PID 1이 아니어서 형식 예시)

$ systemctl cat sshd.service
# /lib/systemd/system/ssh.service
[Service]
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
...

정상 서비스는 ExecStart가 표준 바이너리를 가리킵니다. 여기에 /tmp/x나 bash -c 'curl ... | sh' 같은 ExecStart가 보이면 악성 서비스입니다(30편).

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

  • 정상: 표준 경로 ExecStart, 전용 서비스 계정, 문서화된 서비스.
  • 위험 징후:
    • ExecStart가 임시 디렉터리/원격 다운로드
    • User 미지정(root 실행)인 낯선 서비스
    • 최근 생성된 enabled 서비스
    • 사용자 단위/ drop-in에 숨은 정의

서비스 점검은 '실행 정의(ExecStart)'와 '자동시작(enabled)'을 함께 봐야 지속성을 잡습니다.

7. 탐지 방법

  • enabled 서비스 목록 기준선 비교
  • 각 서비스의 ExecStart/User 점검
  • Unit 파일 디렉터리 변경 감사(30편)

8. SOC 관점 — SIEM · Wazuh · IOC

악성 서비스는 MITRE T1543.002(Systemd Service) 지속성 기법입니다. Wazuh FIM으로 Unit 디렉터리를 감시하고, 신규/변경 Unit을 알람합니다. SIEM에서는 서비스 생성·enable 이벤트를 SSH 로그인·권한 상승과 상관분석해 '침입→지속성' 흐름을 탐지합니다.

9. 실습 체크리스트

[ ] enabled 서비스 목록 확보
[ ] 각 서비스 ExecStart/User 확인
[ ] 사용자 단위/drop-in 점검
[ ] Unit 디렉터리 변경 감사

10. 핵심 정리

  • 서비스는 재부팅해도 되살아나 지속성의 이상적 수단이다.
  • ExecStart·User·WantedBy가 서비스의 핵심 보안 요소다.
  • User 미지정 서비스는 root로 실행된다.
  • 사용자 단위·drop-in은 놓치기 쉬운 사각지대다.
  • 서비스 생성/enable은 지속성 탐지의 대상이다.

11. 다음 편

다음 편에서는 30. 악성 systemd 서비스 탐지 를 다룹니다. 실제 악성 systemd 서비스를 어떻게 식별하는지, Unit 파일 분석 관점에서 봅니다.


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

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

0개의 댓글