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

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

선행 학습

1. 들어가며

journalctl은 systemd 저널을 조회하는 도구입니다. 단순 조회를 넘어, 시간·서비스·우선순위·부팅 단위로 로그를 정밀하게 잘라 보는 능력이 보안 분석의 속도를 좌우합니다. 이번 편은 실무 필터링 기법에 집중합니다.

2. 핵심 개념

핵심 필터 옵션:

옵션용도
-u <unit>특정 서비스만
-p <level>우선순위(err/warning 등)
--since/--until시간 범위
-b특정 부팅
-g <pattern>패턴 검색(grep)
-o verbose/json상세/기계판독 출력

이들을 조합하면 '어제 오후 ssh 서비스의 경고 이상'처럼 정밀 조회가 됩니다.

전체 저널 (수만 줄)
     │ -u ssh          (서비스 필터)
     │ --since today   (시간 필터)
     │ -p warning      (우선순위 필터)
     ▼
관련 이벤트 (수십 줄)  ← 분석 가능한 크기로 축소

3. 동작 원리

저널은 각 로그에 구조화된 필드(_SYSTEMD_UNIT, PRIORITY, _PID, _UID 등)를 붙여 저장합니다. journalctl의 필터는 이 필드를 조건으로 거릅니다. 텍스트 grep과 달리 필드 기반이라 정확하고 빠릅니다.

보안 분석 워크플로: 넓게 시작해 좁혀 갑니다. '전체 → 서비스 → 시간 → 우선순위 → 패턴' 순으로 필터를 누적해 수만 줄을 분석 가능한 수십 줄로 줄입니다. -o json은 SIEM 연동·자동 분석에 유용합니다.

4. 명령어 실습

# ssh 서비스의 오늘 경고 이상
sudo journalctl -u ssh -p warning --since today

# 이번 부팅의 커널 메시지 중 특정 패턴
sudo journalctl -b -k -g 'error|fail'

# 특정 시간 범위 + 기계판독
sudo journalctl --since '2026-09-25 14:00' --until '2026-09-25 15:00' -o json | head

# 저널 무결성/저장 상태
sudo journalctl --verify; journalctl --disk-usage

5. 실행 결과

실습 컨테이너에서 journalctl 조회 형식입니다. (실제 캡처 — 환경 특성상 일부는 형식 예시)

$ sudo journalctl --disk-usage
Archived and active journals take up ... in the file system.

$ sudo journalctl -u ssh --since today | tail -3
Sep 25 14:03:11 host sshd[2140]: Accepted password for alice from 192.168.10.5 ...

-u ssh로 SSH 이벤트만 추려 보면 인증 흐름(12편)을 빠르게 확인할 수 있습니다. --verify로 저널 무결성을 확인하면 로그 조작 여부의 단서를 얻습니다.

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

  • 정상: 저널이 연속적이고 무결성 검증 통과.
  • 위험/침해 징후:
    • --verify 실패(저널 손상/조작 가능성)
    • 특정 시간대 로그 공백
    • 저널이 비영속(/run만, 재부팅 시 소실) 설정

저널은 기본이 휘발성(volatile)일 수 있습니다. 영속 저장(/var/log/journal)과 원격 전송을 병행해야 재부팅·삭제에도 증거가 남습니다(43편의 auditd 보존과 함께).

7. 탐지 방법

  • 시간 필터로 사건 구간 집중 분석
  • --verify로 저널 무결성 확인
  • 로그 공백 구간 탐지
  • -o json으로 자동 분석·SIEM 연동

8. SOC 관점 — SIEM · Wazuh · IOC

journalctl은 초동 분석의 기본 도구지만, 로컬 조회는 조작에 취약하므로 SOC는 저널을 SIEM으로 전송해 중앙에서 분석합니다. -o json 출력은 Filebeat/Fluentd 등으로 ELK/Wazuh에 태워 파싱·상관분석합니다. 시간 필터링 능력은 침해 타임라인(46편) 구성의 기본기입니다.

9. 실습 체크리스트

[ ] -u/-p/--since 조합 필터링 연습
[ ] -g로 패턴 검색
[ ] --verify로 무결성 확인
[ ] 저널 영속/원격 전송 설정 확인

10. 핵심 정리

  • journalctl은 필드 기반 필터로 정확·빠르게 로그를 좁힌다.
  • '서비스→시간→우선순위→패턴' 순으로 필터를 누적한다.
  • --verify로 저널 무결성(조작 여부)을 점검한다.
  • 저널은 휘발성일 수 있어 영속·원격 저장이 필요하다.
  • -o json으로 SIEM 연동·자동 분석을 한다.

11. 다음 편

다음 편에서는 43. auditd와 Linux 감사 를 다룹니다. syscall 단위로 '누가 무엇을 했는가'를 기록하는 auditd를 정면으로 다룹니다.


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

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

0개의 댓글