소개
시스템 관리 및 사이버 보안 분야에서 로그 분석은 매우 중요한 기술입니다. 시스템 로그는 일상적인 작업부터 심각한 오류 및 잠재적인 보안 침해에 이르기까지 광범위한 이벤트를 기록합니다. 이러한 로그를 효과적으로 탐색하고 해석하는 능력은 시스템 상태 모니터링, 문제 해결 및 보안 사고 대응에 필수적입니다.
이 실습에서는 최신 Linux 시스템에서 journald 서비스의 로그를 쿼리하고 표시하는 표준 도구인 journalctl을 소개합니다. 모니터링 및 사고 대응의 기초를 형성하는 기본적인 로그 분석 작업을 수행하는 방법을 배우게 됩니다.
이 실습 전반에 걸쳐 다음을 수행합니다.
- 시스템 부팅 로그 검토
- 인증 실패와 같은 특정 이벤트를 찾기 위해 로그 필터링
- 의심스러운 이벤트 시뮬레이션 및 탐지
- 추가 분석을 위해 로그 내보내기
Journalctl 로 시스템 부팅 로그 검토
이 단계에서는 journalctl 명령을 사용하여 시스템 로그를 검토하는 방법을 배우고, 특히 최근 부팅 프로세스 중에 생성된 메시지에 초점을 맞춥니다. 이는 시작 문제 진단 시 일반적인 첫 번째 단계입니다.
journalctl 명령을 사용하면 systemd 저널의 내용을 쿼리할 수 있습니다. 인자 없이 실행하면 모든 로그가 표시되는데, 이는 너무 많을 수 있습니다.
출력을 더 관리하기 쉽게 만들기 위해 -b 또는 --boot 플래그를 사용하여 현재 부팅 세션의 로그만 볼 수 있습니다.
현재 부팅 로그를 보려면 터미널에서 다음 명령을 실행하십시오.
journalctl -b
부팅 프로세스의 가장 초기 메시지부터 시작하는 페이지 형식의 출력이 표시됩니다. 위쪽 및 아래쪽 화살표 키를 사용하여 탐색할 수 있습니다. 페이저를 종료하고 명령 프롬프트로 돌아가려면 q를 누르십시오.
-- Journal begins at Tue 2023-10-31 08:30:00 UTC, ends at Tue 2023-10-31 09:00:00 UTC. --
Oct 31 08:30:01 labex-vm kernel: Linux version 5.15.0-87-generic ...
Oct 31 08:30:01 labex-vm kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-87-generic ...
Oct 31 08:30:01 labex-vm kernel: KERNEL supported cpus:
Oct 31 08:30:01 labex-vm kernel: Intel GenuineIntel
Oct 31 08:30:01 labex-vm kernel: AMD AuthenticAMD
...
(END)
이 명령은 어떤 서비스가 성공적으로 시작되었는지 이해하고 시스템 시작 중에 발생한 오류를 식별하는 데 매우 유용합니다.
인증 실패 로그 필터링
이 단계에서는 저널을 필터링하여 특정 이벤트, 예를 들어 보안 모니터링에 중요한 실패한 인증 시도를 찾습니다. 공격자의 일반적인 대상은 SSH 서비스이므로 해당 로그를 모니터링하는 것이 우선순위가 높습니다.
journalctl과 함께 -u 플래그를 사용하여 특정 systemd 유닛별로 로그를 필터링할 수 있습니다. SSH 서비스의 경우, 유닛은 일반적으로 ssh.service(Ubuntu/Debian) 또는 sshd.service(Red Hat/CentOS)입니다.
SSH 데몬과 관련된 항목만 보려면 로그를 필터링해 보겠습니다. 시스템 로그를 보려면 sudo를 사용해야 할 수 있습니다.
sudo journalctl -u ssh
이 명령은 sshd 서비스에서 생성된 모든 로그 항목을 표시합니다. 잠재적인 보안 문제를 찾기 위해 이 출력을 grep 명령으로 파이프하여 "Failed"와 같은 키워드를 검색할 수 있습니다.
SSH 서비스에 대한 실패한 비밀번호 시도를 찾으려면 다음 명령을 실행하십시오.
sudo journalctl -u ssh | grep "Failed password"
최근 실패한 로그인 시도가 없었다면 이 명령은 출력을 생성하지 않을 수 있습니다. 이는 안전한 시스템에서는 정상입니다. 다음 단계에서는 이러한 이벤트를 직접 생성하여 로그에 어떻게 나타나는지 살펴보겠습니다.
의심스러운 이벤트 시뮬레이션 및 로그 분석
이제 의심스러운 이벤트를 시뮬레이션하고 로그 분석 기술을 사용하여 이를 탐지해 보겠습니다. 무차별 대입 공격의 일반적인 징후는 일련의 실패한 로그인 시도입니다. 존재하지 않는 사용자 이름으로 자체 머신 (localhost) 에 SSH 를 시도하여 이러한 시도 중 하나를 시뮬레이션해 보겠습니다.
터미널에서 다음 명령을 실행하십시오. 암호를 입력하라는 메시지가 표시됩니다. 실패할 것으로 예상되므로 아무거나 입력해도 됩니다.
ssh non_existent_user@localhost
시스템에서 연결을 거부할 것이며, 이는 예상된 결과입니다. 다음과 유사한 메시지가 표시됩니다.
non_existent_user@localhost's password:
Permission denied, please try again.
non_existent_user@localhost's password:
Permission denied (publickey,password).
이제 실패한 로그인 이벤트를 생성했으므로 이전 단계의 로그 분석 명령을 다시 실행하여 찾을 수 있는지 확인해 보겠습니다.
sudo journalctl -u ssh | grep "Failed password"
이번에는 명령이 방금 수행한 실패한 시도를 보여주는 출력을 생성해야 합니다.
Oct 31 09:15:12 labex-vm sshd[1234]: Failed password for invalid user non_existent_user from 127.0.0.1 port 48492 ssh2
이 간단한 연습은 사고 대응의 핵심 루프를 보여줍니다. 이벤트가 발생하고, 로그에 기록되며, 관리자 또는 자동화된 시스템이 로그를 분석하여 이를 탐지합니다.
중앙 집중식 분석 시뮬레이션을 위한 로그 내보내기
실제 시나리오에서는 장기 보관 및 상관 관계 분석을 위해 개별 머신에서 중앙 집중식 로깅 서버 (SIEM 등) 로 로그를 내보내는 경우가 많습니다. 이 단계에서는 최근 SSH 로그를 파일로 내보내 이 과정을 시뮬레이션해 보겠습니다.
journalctl은 다양한 형식으로 로그를 출력할 수 있습니다. json-pretty 형식은 사람이 읽기 쉽고 다른 도구에서 쉽게 파싱할 수 있으므로 특히 유용합니다.
지난 10 분간의 모든 SSH 로그를 현재 디렉토리 (~/project) 에 ssh_logs.json이라는 파일로 내보내겠습니다.
sudo journalctl -u ssh --since "10 minutes ago" -o json-pretty > ~/project/ssh_logs.json
이제 파일이 생성되었는지 확인합니다.
ls -l ~/project
파일 목록에서 ssh_logs.json을 볼 수 있습니다.
total 4
-rw-r--r-- 1 labex labex 1234 Oct 31 09:20 ssh_logs.json
마지막으로 내보낸 로그 파일의 내용을 확인해 보겠습니다.
cat ~/project/ssh_logs.json
출력은 구조화된 JSON 배열이며, 각 로그 항목은 객체입니다. 이 형식은 다른 분석 플랫폼으로의 수집에 이상적입니다.
[
{
"__CURSOR" : "s=...",
"__REALTIME_TIMESTAMP" : "...",
"__MONOTONIC_TIMESTAMP" : "...",
"_BOOT_ID" : "...",
"_TRANSPORT" : "syslog",
"PRIORITY" : "6",
"SYSLOG_FACILITY" : "4",
"SYSLOG_IDENTIFIER" : "sshd",
"MESSAGE" : "Failed password for invalid user non_existent_user from 127.0.0.1 port 48492 ssh2",
"_PID" : "1234",
...
}
]
중앙 집중식 분석을 위해 로그를 준비하는 과정을 성공적으로 시뮬레이션했습니다.
요약
이 실습에서는 최신 Linux 시스템에서 강력한 로그 분석 도구인 journalctl을 직접 사용해 보았습니다. 이러한 기술은 모든 시스템 관리자, DevOps 엔지니어 또는 보안 전문가에게 필수적입니다.
다음과 같은 방법을 배웠습니다.
- 시스템 및 부팅 로그를 검토하여 시작 문제를 진단합니다.
- 특정 서비스 및 메시지 내용으로 로그를 필터링하여 관련 이벤트를 찾습니다.
- 로그 항목에서 실패한 로그인과 같은 의심스러운 활동을 식별합니다.
- 중앙 집중식 저장 및 추가 분석을 위해 JSON 과 같은 구조화된 형식으로 로그를 내보냅니다.
이러한 기술을 숙달하면 시스템을 더 잘 모니터링하고, 문제를 더 효율적으로 해결하며, 보안 사고 대응의 첫 단계를 밟을 수 있습니다.



