이미 서버가 해킹당한 경우, 로그 분석을 통해 언제, 어디서, 어떻게 침입했는지 역추적할 수 있습니다. 이 과정을 로그 포렌식(Log Forensics)이라고 하며, 재발 방지와 피해 범위 파악에 필수적입니다.
로그가 조작되거나 삭제될 수 있으므로 즉시 백업:
``bash sudo tar -czf logs-backup-$(date +%Y%m%d-%H%M%S).tar.gz /var/log/nginx /var/log/apache2 /var/log/auth.log `
`bash ps aux > processes.txt netstat -tulpn > network.txt crontab -l > crontab.txt find /var/www -type f -mtime -7 > recent_files.txt `
해킹 발견 계기가 보통 웹셸(webshell)이나 악성 파일 발견입니다.
`bash stat /var/www/html/suspicious.php `
출력:
` Modify: 2024-10-10 14:23:15 Access: 2024-10-10 14:23:20 Change: 2024-10-10 14:23:15 `
Modify 시각 = 2024-10-10 14:23:15 → 이 시간 전후 로그 집중 분석
`bash awk '/10\/Oct\/2024:14:[01234]/' /var/log/nginx/access.log > attack_window.log `
14시 00분~40분대 로그만 추출
POST 요청 + 200 응답 + 큰 바이트:
`bash grep 'POST' attack_window.log | grep ' 200 ' | awk '$10 > 1000' `
의심 로그:
` 192.0.2.100 - - [10/Oct/2024:14:22:58 +0000] "POST /upload.php HTTP/1.1" 200 482 "-" "Mozilla/5.0" `
`bash grep '192.0.2.100' /var/log/nginx/access.log > attacker_activity.log `
시간순 정렬:
`bash sort -k4 attacker_activity.log `
전형적인 공격 시나리오:
` 14:20:12 GET /admin/upload.php (파일 업로드 기능 탐색) 14:21:45 POST /admin/upload.php (취약점 테스트) 14:22:58 POST /admin/upload.php (웹셸 업로드 성공) 14:23:15 GET /uploads/shell.php (웹셸 실행 확인) 14:24:00 POST /uploads/shell.php (명령 실행) `
웹셸을 통한 명령 실행:
`bash grep 'shell.php' /var/log/nginx/access.log `
` 192.0.2.100 - - [10/Oct/2024:14:24:00 +0000] "POST /uploads/shell.php HTTP/1.1" 200 1842 192.0.2.100 - - [10/Oct/2024:14:25:30 +0000] "POST /uploads/shell.php HTTP/1.1" 200 2341 `
POST 요청 → 명령 실행 중
웹셸 실행 후 SSH 접속 시도:
`bash grep '192.0.2.100' /var/log/auth.log `
` Oct 10 14:30:00 server sshd[12345]: Failed password for root from 192.0.2.100 port 54321 ssh2 Oct 10 14:32:15 server sshd[12346]: Accepted password for www-data from 192.0.2.100 port 54322 ssh2 `
www-data 계정으로 SSH 로그인 성공 → 권한 상승 시도 가능
`bash find /var/www -type f -printf '%T@ %Tc %p\n' | sort -n | tail -50 `
최근 수정된 파일 50개 시간순 정렬:
` 1728567795 Wed Oct 10 14:23:15 2024 /var/www/html/uploads/shell.php 1728567800 Wed Oct 10 14:23:20 2024 /var/www/html/.htaccess `
`bash grep -r "eval(" /var/www/html/ grep -r "base64_decode" /var/www/html/ grep -r "system(" /var/www/html/ | grep -v "vendor" grep -r "exec(" /var/www/html/ | grep -v "node_modules" `
PHP 웹셸 시그니처:
`php `
`bash awk '$10 > 10000000 {print $1, $7, $10}' /var/log/nginx/access.log `
10MB 이상 응답 찾기
`bash grep -E "(\.sql|database|backup)" /var/log/nginx/access.log `
`bash whois 192.0.2.100 `
`bash awk '{print $1}' /var/log/nginx/access.log | grep '^192\.0\.2\.' | sort -u ``
로그 포렌식은 악성 파일 발견 시각부터 역추적하여 최초 침입 지점을 찾는 과정입니다. POST 요청, 파일 업로드, 웹셸 실행, SSH 접속 시도 순서로 흔적을 따라가면 공격자의 전체 경로를 복원할 수 있습니다.