대상 OS: Rocky Linux 9

침해사고에서 공격자가 제일 먼저 하는 일은 ‘한 번 들어온 걸 오래 유지’하는 것입니다.
일회성 쉘을 얻어도, 다음 접속을 위해 크론을 심거나 systemd 유닛을 만들거나 SSH 키를 박아두죠.
이런 지속성(persistence)은 대개 “설정 파일이 바뀌는 순간” 흔적을 남깁니다.
문제는 그 흔적이 너무 평범해서, 평소 로그만으로는 지나치기 쉽다는 점입니다.

Rocky Linux 9에서는 auditd(리눅스 감사 프레임워크)로 “지속성에 자주 쓰이는 경로”를 감시하고, 변경 이벤트를 증거로 남길 수 있습니다.
이 글은 cron/systemd/authorized_keys를 중심으로 auditd 규칙을 구성하고, 실제 조사에 쓰는 검색 쿼리와 오탐(정상 변경) 줄이는 방법까지 정리합니다.

---

0) 이 글에서 감시할 ‘지속성 포인트’

1) 크론: /etc/crontab, /etc/cron.d/, /var/spool/cron/

2) systemd: /etc/systemd/system/, /usr/lib/systemd/system/

3) SSH 키: ~/.ssh/authorized_keys, /root/.ssh/authorized_keys

4) sudo/권한: /etc/sudoers, /etc/sudoers.d/

모든 걸 다 감시하면 노이즈가 폭발합니다. “침해 시 자주 쓰이고, 운영 변경 빈도가 상대적으로 낮은 경로”부터 시작하는 게 포인트입니다.

---

1) auditd 설치 및 상태 확인

1) 패키지 설치

sudo dnf -y install audit audit-libs

2) 서비스 활성화

sudo systemctl enable --now auditd
sudo systemctl status auditd --no-pager

3) audit가 커널에서 활성화됐는지 확인

sudo auditctl -s

---

2) 기본 로그 경로와 도구 확인

1) 감사 로그 파일 위치 확인

sudo ls -la /var/log/audit
sudo tail -n 30 /var/log/audit/audit.log

2) 자주 쓰는 조회 도구 확인

command -v ausearch
command -v aureport

---

3) 규칙 설계 원칙(오탐 줄이기 핵심)

1) “쓰기(write) + 속성 변경(attribute change)” 중심으로 감시

2) 규칙마다 고유 키(key)를 달아 조회를 쉽게 만들기

3) 패키지 업데이트가 자주 바꾸는 경로(/usr/lib/systemd/system)는 처음엔 제외하거나 별도 키로 분리

4) 너무 광범위한 디렉터리는 단계적으로 확장

audit 규칙은 보통 `/etc/audit/rules.d/*.rules`에 파일로 넣고, `augenrules --load`로 반영합니다.

---

4) 크론 지속성 감시 규칙

크론은 공격자가 가장 좋아하는 지속성 수단 중 하나입니다.

1) 규칙 파일 생성

sudo tee /etc/audit/rules.d/50-persistence-cron.rules >/dev/null