서버가 해킹을 당했거나 의심스러운 상황이 발생했을 때, 로그 파일은 가장 중요한 단서가 됩니다. 이 글에서는 주요 로그 파일의 위치와 분석 방법을 알아봅니다.

주요 로그 파일 위치

로그 파일 내용
/var/log/auth.log SSH 로그인, sudo 사용 내역
/var/log/syslog 시스템 전반 메시지
/var/log/kern.log 커널 메시지
/var/log/nginx/access.log Nginx 접속 로그
/var/log/nginx/error.log Nginx 에러 로그
/var/log/mysql/error.log MySQL 에러
/var/log/fail2ban.log fail2ban 차단 기록

SSH 침입 시도 분석

# 로그인 실패 IP 상위 20개
grep "Failed password" /var/log/auth.log | \
  awk '{print $(NF-3)}' | \
  sort | uniq -c | sort -rn | head -20

# 특정 날짜 로그인 실패
grep "Failed password" /var/log/auth.log | \
  grep "Jan 15" | wc -l

# 성공한 SSH 로그인 확인
grep "Accepted" /var/log/auth.log | \
  awk '{print $1, $2, $3, $9, $11}'

# 비정상적인 시간대 로그인 확인 (야간)
grep "Accepted" /var/log/auth.log | \
  awk '$3 ~ /^(00|01|02|03|04|05):/'

sudo 사용 내역 확인

# 모든 sudo 명령 확인
grep "sudo" /var/log/auth.log | grep "COMMAND"

# root로 su 전환 시도
grep "su\[" /var/log/auth.log

웹서버 로그에서 공격 패턴 탐지

# SQL 인젝션 시도 탐지
grep -E "(union|select|insert|drop|update|delete|exec|script)" \
  /var/log/nginx/access.log -i | grep "200\|301\|302"

# 웹쉘 접근 시도
grep -E "\.(php|asp|aspx|jsp)\?" /var/log/nginx/access.log | \
  grep -E "(cmd=|exec=|shell=|passthru)"

# 404 에러 폭증 (디렉토리 스캔 의심)
awk '$9==404{print $1}' /var/log/nginx/access.log | \
  sort | uniq -c | sort -rn | head -20

# 특정 IP의 모든 접근
grep "1.2.3.4" /var/log/nginx/access.log

# 대용량 응답 (데이터 유출 의심)
awk '$10 > 1000000 {print}' /var/log/nginx/access.log

시스템 변조 흔적 확인

# 최근 24시간 내 수정된 실행 파일
find /usr /bin /sbin -newer /var/log/dpkg.log -type f 2>/dev/null

# SUID 파일 목록 (공격자가 추가했을 수 있음)
find / -perm -4000 -type f 2>/dev/null | sort

# 숨겨진 디렉토리 확인
find / -name ".*" -type d 2>/dev/null | grep -v "^/proc\|^/sys"

# 크론 작업 전체 확인 (백도어 심는 데 자주 사용)
for user in $(cut -f1 -d: /etc/passwd); do
  crontab -u $user -l 2>/dev/null | grep -v "^#"
done
cat /etc/cron* /etc/at* 2>/dev/null

네트워크 연결 이상 확인

# 알 수 없는 외부 연결 확인
ss -tnp | grep ESTABLISHED

# 백도어 포트 확인 (알 수 없는 LISTEN 포트)
ss -tlnp

# DNS 쿼리 로그 (dnsmasq 사용 시)
tail -100 /var/log/dnsmasq.log

로그 보존 정책

로그는 공격자가 삭제하는 경우가 많습니다. 중요 로그를 외부 서버로 실시간 전송하는 것을 권장합니다:

# rsyslog으로 원격 로그 서버 전송
echo "*.* @로그서버IP:514" >> /etc/rsyslog.conf
sudo systemctl restart rsyslog

정기적인 로그 검토는 침해사고를 조기에 발견하는 가장 효과적인 방법입니다.