로그 분석 실습 :: auth.log부터 상관 분석
1. auth.log로 로그인 시도 분석
auth.log: 리눅스 시스템에서 로그인, sudo 사용, SSH 접속 시도 같은 인증 관련 이벤트가 전부 기록되는 로그 파일로 공격자가 시스템에 침투를 시도할 때 가장 먼저 흔적이 남는 곳 중 하나
로그인 실패 기록 확인
sudo cat /var/log/auth.log | grep “Failed password”

결과: 실패한 로그인 시도가 있으면 시간, 사용자명, 시도한 IP가 한 줄씩 출력
(정상적인 상황이면 결과가 아예 없거나 몇 건 안 됨)
IP별 실패 횟수 집계
sudo grep “Failed password” /var/log/auth.log | awk ‘{print $11}’ | sort | uniq -c | sort -n

>> grep으로 실패 로그만 걸러냄
awk ’{print $11}’으로 로그 한 줄에서 11번째 필드(IP 주소가 있는 위치)만 뽑아 sort로 정렬해서 같은 IP끼리 모으고 uniq -c로 각 IP가 몇 번 나왔는지 개수를 셈
sort -nr로 숫자가 큰 순서대로 다시 정렬
2. 웹서버 로그에서 SQLi 시도 흔적 찾기
access.log: 웹서버(Apache, Nginx)에 들어온 모든 요청이 기록되는 로그
누가, 언제, 어떤 URL로, 어떤 방식으로 접속했는지 파악 가능
가장 많이 접속한 IP 상위 10개 확인
sudo awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

access.log는 각 줄 맨 앞에 접속한 IP가 기록되는 형식이라 $1(첫 번째 필드)만 뽑으면 됨
3. 로그 시간대별 패턴 분석
시간대별 요청 수 집계
sudo awk '{print $4}' /var/log/apache2/access.log | cut -d: -f2 | sort | uniq -c

>> access.log의 네 번째 필드에는 [02/Aug/2026:03:15:22 형태로 시간 정보가 들어있음
cut -d: -f2로 콜론(:) 기준으로 나눠서 두 번째 조각, 즉 시(hour) 부분만 추출
이후 정렬하고 개수를 세면 시간대별 분포가 나옴
4. journalctl로 시스템 이벤트 타임라인 재구성
journalctl: systemd 기반 리눅스에서 시스템 전체의 로그(부팅, 서비스 실행, 커널 메시지 등)를 통합해서 관리하는 도구로 개별 로그 파일(auth.log 등)과 달리, 시스템 전반의 이벤트를 시간순으로 한 번에 파악 가능
최근 로그 확인
sudo journalctl –since "1 hour ago"
서비스별 필터링
sudo journalctl -u ssh

결과: SSH 서비스와 관련된 로그만 걸러져서 나옴.
특정 시간 범위 지정 조회
sudo journalctl –since "2026-08-01 09:00:00" –until "2026-08-01 10:00:00"

5. 로그 상관 분석
필요성: 지금까지는 auth.log와 access.log를 각각 따로 봤는데, 실제 공격자는 여러 방식을 동시에 시도하는 경우가 있음
두 로그에 공통으로 등장하는 IP가 있다면 같은 공격자가 로그인도 시도하고 SQLi도 시도했다는 증거가 될 수 있음
실패한 로그인 IP 목록 뽑기
sudo grep “Failed password” /var/log/auth.log | awk ‘{print $11}’ | sort -u > 실패_IP목록.txt
스캔 시도한 IP 목록 뽑기
sudo grep -iE "union|select|--" /var/log/apache2/access.log | awk '{print $1}' | sort -u > 스캔_IP목록.txt
* -u 옵션: 중복 제거

두 목록에 겹치는 IP 확인
comm -12 실패_IP목록.txt 스캔_IP목록.txt

>> 해당 서버에는 실패한 경우가 없어 출력결과가 나오지 않음
** comm: 정렬된 두 파일을 비교해서 세 개의 컬럼(파일1에만 있는 것 / 파일2에만 있는 것 / 둘 다 있는 것)으로 나눠 보여주는 도구
-1과 -2 옵션으로 각각 첫 번째, 두 번째 컬럼을 숨길 수 있음. -12는 둘 다 숨기고 세 번째 컬럼(공통된 것)만 남기는 것
6. 로그 무결성 확인
필요성: 공격자가 침투 흔적을 지우기 위해 가장 먼저 하는 일 중 하나가 로그 조작이나 삭제이기 때문에 로그 자체가 신뢰할 수 있는 상태인지 확인하는 절차
현재 로그 파일 해시값 저장
sudo md5sum /var/log/auth.log > auth_log_hash.txt
cat auth_log_hash.txt

>> 현재 시점의 로그 파일 MD5 해시값 저장 및 출력
이후 재확인
sudo md5sum /var/log/auth.log

결과: 처음 저장했던 해시값과 비교
같으면: 로그 파일이 그 사이 변경되지 않았다는 뜻
다르면: 로그 내용이 수정됐다는 신호 (조작 가능성)