Mục đích Mục đích của bài thực hành 1.6 là giúp sinh viên nắm được công cụ và cách phân tích log hệ thống, bao gồm: Phân tích log sử dụng grep/gawk trong Linux Phân tích log sử dụng fin
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA AN TOÀN THÔNG TIN
BÁO CÁO BÀI THỰC HÀNH HỌC PHẦN: THỰC TẬP CƠ SỞ
MÃ HỌC PHẦN: INT13147
BÀI THỰC HÀNH 1.6 PHÂN TÍCH LOG HỆ THỐNG
Sinh viên thực hiện:
B22DCAT316 – Nguyễn Anh Vũ
Giảng viên hướng dẫn: PGS TS Hoàng Xuân Dậu
HỌC KỲ 2 NĂM HỌC 2024-2025
Trang 2MỤC LỤC
MỤC LỤC 2
DANH MỤC CÁC HÌNH VẼ 3
CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ BÀI THỰC HÀNH 4
1.1 Mục đích 4
1.2 Tìm hiểu lý thuyết 4
1.2.1 Lệnh grep 4
1.2.2 Lệnh gawk 5
1.2.3 Lệnh find 5
1.2.4 Tệp /var/log/secure 6
1.2.5 Tệp access_log 6
CHƯƠNG 2 NỘI DUNG THỰC HÀNH 8
2.1 Chuẩn bị môi trường 8
2.2 Các bước thực hiện 9
2.2.1 Phân tích logs bằng grep 9
2.2.2 Phân tích logs sử dụng gawk 12
2.2.3 Phân tích log sử dụng find trong Windows 15
TÀI LIỆU THAM KHẢO 17
Trang 3DANH MỤC CÁC HÌNH VẼ
Hình 1 – Topo mạng 8
Hình 2 – Kali Linux trong Internal Network 8
Hình 3 – Ubuntu trong Internal Network 9
Hình 4 – Windows Server trong External Network 9
Hình 5 – Kali Linux trong External Network 9
Hình 6 – Cài đặt dịch vụ Apache Server 10
Hình 7 - Quét cổng dịch vụ Apache Server sử dụng nmap trên máy Kali Linux 10
Hình 8 - Truy cập vào địa chỉ web Apache Server 11
Hình 9 - Sao chép website và tìm kiếm từ khóa 11
Hình 10 - Xem file access_log trên máy Ubuntu 12
Hình 11 - Lọc kết quả bằng grep trên file Apache log 12
Hình 12 – Cài đặt dịch vụ SSH và công cụ gawk trên Ubuntu 13
Hình 13 – Sử dụng SSH để kết nối từ máy Kali Attack đến máy Ubuntu Victim 13
Hình 14 – Tạo user mới và đổi mật khẩu 14
Hình 15 – Xem file log trên máy Ubuntu Victim 14
Hình 16 – Kiểm tra nhanh ai đã tạo tài khoản trên hệ thống 14
Hình 17 – Lệnh gawk để kiểm tra ai đã tạo tài khoản mới trên hệ thống 15
Hình 18 - Mở xHydra và cấu hình địa chỉ target, cổng và giao thức 15
Hình 19 - Cấu hình tài khoản và password list để tiến hành tấn công mật khẩu 16
Hình 20 – Lỗi … 16
Trang 4CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ BÀI THỰC HÀNH
1.1 Mục đích
Mục đích của bài thực hành 1.6 là giúp sinh viên nắm được công cụ và cách phân tích log hệ thống, bao gồm:
Phân tích log sử dụng grep/gawk trong Linux
Phân tích log sử dụng find trong Windows
Tìm hiểu về Windows Event Viewer và auditing
Phân tích event log trong Windows
1.2 Tìm hiểu lý thuyết
1.2.1 Lệnh grep
Lệnh grep (Global Regular Expression Print) là một công cụ mạnh mẽ trong Linux, được sử dụng để tìm kiếm một chuỗi hoặc mẫu (pattern) trong tệp hoặc đầu vào từ dòng lệnh Grep hỗ trợ tìm kiếm văn bản thuần túy cũng như biểu thức chính quy (regex), giúp người dùng lọc và trích xuất dữ liệu một cách hiệu quả
Grep ban đầu được tạo ra như một thử nghiệm Ken Thompson viết grep vào năm 1973 chỉ để hỗ trợ việc tìm kiếm mẫu văn bản trong chương trình ed (một trình soạn thảo văn bản cổ điển) Không ngờ, nó trở thành công cụ không thể thiếu trong Linux
Cú pháp cơ bản:
grep [TÙY CHỌN] "chuỗi_cần_tìm" tên_tệp
Ví dụ:
- Tìm kiếm chuỗi "error" trong tệp logfile.txt:
grep "error" logfile.txt
- Tìm kiếm từ "password" trong tệp config.txt, không phân biệt chữ hoa/thường:
grep -i "password" config.txt
- Tìm kiếm từ chính xác "error" trong tệp log.txt:
grep -w "error" log.txt
- Tìm kiếm chuỗi "failed" trong toàn bộ thư mục và thư mục con:
grep -r "failed" /var/log/
- Hiển thị 3 dòng trước và sau dòng chứa từ "critical":
grep -C 3 "critical" system.log
- Chỉ hiển thị tên tệp có chứa từ "success":
Trang 5grep -l "success" *.log
- Hiển thị kết quả tìm kiếm với phần khớp được tô màu:
grep color=auto "warning" log.txt
1.2.2 Lệnh gawk
Lệnh gawk (GNU Awk) là một công cụ xử lý văn bản mạnh mẽ trong Linux, giúp thao tác và trích xuất dữ liệu từ tệp văn bản theo từng dòng Nó đặc biệt hữu ích khi làm việc với dữ liệu có cấu trúc như tệp nhật ký (log files), CSV, TSV hoặc các tệp có định dạng cột Gawk (GNU Awk) không chỉ mạnh trong xử lý văn bản dạng cột mà còn có thể hoạt động như một ngôn ngữ lập trình thực sự Nó hỗ trợ biến, vòng lặp, điều kiện, và
cả mảng
Cú pháp cơ bản:
gawk 'mệnh_đề' tên_tệp
Ví dụ:
- In toàn bộ nội dung tệp data.txt:
gawk '{print}' data.txt
- In cột đầu tiên của tệp users.txt:
gawk '{print $1}' users.txt
- Tính tổng giá trị ở cột thứ hai trong tệp sales.txt:
gawk '{sum += $2} END {print sum}' sales.txt
- Lọc ra các dòng chứa từ "error" trong tệp log.txt:
gawk '/error/ {print}' log.txt
1.2.3 Lệnh find
Lệnh find trong Linux được sử dụng để tìm kiếm tệp và thư mục dựa trên nhiều tiêu chí như tên, kích thước, thời gian chỉnh sửa hoặc quyền truy cập Đây là một công cụ hữu ích khi quản lý hệ thống tệp lớn
Ngoài ra, lệnh find còn hỗ trợ nhiều chức năng mở rộng như tự động xóa tệp cũ, tìm tệp
bị lỗi quyền, hoặc dò tìm mã độc
Cú pháp cơ bản:
find đường_dẫn [tùy_chọn] [điều_kiện]
Ví dụ:
- Tìm tất cả các tệp txt trong thư mục /home/user:
find /home/user -name "*.txt"
Trang 6- Tìm các tệp lớn hơn 100MB trong thư mục /var/log:
find /var/log -size +100M
- Tìm các tệp được chỉnh sửa trong vòng 7 ngày qua:
find /home -mtime -7
- Tìm các tệp có quyền 777:
find /etc -perm 777
1.2.4 Tệp /var/log/secure
Tệp /var/log/secure trong Linux ghi lại các sự kiện liên quan đến bảo mật, như đăng nhập
SSH, xác thực người dùng, thay đổi quyền sudo
Các cú pháp thường gặp trong tệp /var/log/secure:
- Ghi nhận các lần đăng nhập SSH:
Feb 27 10:30:21 server sshd[1234]: Accepted password for user from 192.168.1.10 port
52230 ssh2
- Thử đăng nhập thất bại:
Feb 27 10:32:45 server sshd[2345]: Failed password for root from 192.168.1.20 port
42300 ssh2
- Người dùng sử dụng lệnh sudo:
Feb 27 11:00:12 server sudo: user : TTY=pts/1 ; PWD=/home/user ;
COMMAND=/usr/bin/apt update
Lọc thông tin quan trọng bằng grep:
- Xem tất cả các lần đăng nhập thành công:
grep "Accepted password" /var/log/secure
- Xem tất cả các lần đăng nhập thất bại:
grep "Failed password" /var/log/secure
- Xem các lệnh sudo đã chạy:
grep "sudo" /var/log/secure
1.2.5 Tệp access_log
Tệp access_log trong máy chủ web (như Apache hoặc Nginx) ghi lại toàn bộ yêu cầu
từ trình duyệt đến máy chủ, bao gồm địa chỉ IP, mã phản hồi HTTP, thời gian truy cập
và URL được yêu cầu Access Log không chỉ giúp quản trị viên theo dõi lưu lượng truy
Trang 7cập mà còn có thể được sử dụng để phân tích tấn công DDoS, kiểm tra bot và tối ưu hóa website
- Xem nội dung tệp access_log:
cat /var/log/apache2/access.log (trên Apache)
cat /var/log/nginx/access.log (trên Nginx)
Ví dụ:
- Xem 10 dòng cuối của access_log:
tail -n 10 /var/log/nginx/access.log
- Tìm tất cả các yêu cầu từ một địa chỉ IP cụ thể:
grep "192.168.1.1" /var/log/apache2/access.log
- Đếm số lượt truy cập vào một trang cụ thể:
grep "/index.html" /var/log/apache2/access.log | wc -l
- Lọc ra tất cả các truy cập có mã phản hồi HTTP 404:
grep " 404 " /var/log/nginx/access.log
Trang 8CHƯƠNG 2 NỘI DUNG THỰC HÀNH 2.1 Chuẩn bị môi trường
Hình 1 – Topo mạng
Hình 2 – Kali Linux trong Internal Network
Trang 9Hình 3 – Ubuntu trong Internal Network
Hình 4 – Windows Server trong External Network
Hình 5 – Kali Linux trong External Network
2.2 Các bước thực hiện
2.2.1 Phân tích logs bằng grep
Đầu tiên cài đặt Apache Server trên máy ảo Ubuntu
sudo apt install apache2 -y #Cài đặt
sudo systemctl start apache2 #Khởi động dịch vụ
sudo systemctl enable apache2 #Kích hoạt dịch vụ
sudo systemctl status apache2 #Kiểm tra trạng thái
Trang 10Hình 6 – Cài đặt dịch vụ Apache Server
Trên máy Kali Linux, Sử dụng nmap / zenmap để quét các cổng dịch vụ đang có trên máy Ubuntu
sudo nmap -sS -sV -T4 192.168.100.147
→ Kết quả cho thấy cổng 80/tcp đang được mở cho dịch vụ Apache httpd 2.4.41 (Ubuntu)
Hình 7 - Quét cổng dịch vụ Apache Server sử dụng nmap trên máy Kali Linux
Truy cập vào địa chỉ web của Apache Server đã được mở theo địa chỉ
http://192.168.100.147
Trang 11Hình 8 - Truy cập vào địa chỉ web Apache Server
Trên terminal tiến hành sao chép website và tìm kiếm từ khóa “test”
curl http://192.168.100.147 | grep test
Hình 9 - Sao chép website và tìm kiếm từ khóa
Trên máy Ubuntu, tiến hành xem log hệ thống tại thư mục chứa access_log
/var/log/apache2/access.log
cat /var/log/apache2/access.log
Trang 12Hình 10 - Xem file access_log trên máy Ubuntu
Dựa vào log hệ thống đã ghi lại các lần quét cổng hoặc kiểm tra bảo mật Cụ thể:
→ Các dòng có User-Agent "Mozilla/5.0 (compatible; Nmap Scripting Engine;
https://nmap.org/book/nse.html)" cho thấy có ai đó sử dụng Nmap để quét máy chủ
→ Truy cập từ trình duyệt và curl: Một số truy cập đến từ trình duyệt Firefox 115.0 trên Linux (X11) Có một truy vấn từ công cụ curl/8.0.0, có thể là từ script hoặc API
tự động
→ Địa chỉ IP đáng chú ý: 192.168.100.3 (Địa chỉ ip máy Kali Linux)
Sử dụng grep để lọc ra những thông tin
cat /var/log/apache2/access.log | grep Nmap
Hình 11 - Lọc kết quả bằng grep trên file Apache log
2.2.2 Phân tích logs sử dụng gawk
Trên máy Ubuntu Victim tiến hành cài đặt các dịch vụ:
sudo apt-get install openssh-server
sudo apt install gawk
Trang 13Hình 12 – Cài đặt dịch vụ SSH và công cụ gawk trên Ubuntu
Máy Ubuntu Victim có tên là nguyenanhvu316@ubuntu vậy thì user sẽ là
nguyenanhvu316, trên máy Kali Linux Attack tiến hành remote vào máy Linux
Internal Victim bằng lệnh ssh nguyenanhvu316@192.168.100.147
Hình 13 – Sử dụng SSH để kết nối từ máy Kali Attack đến máy Ubuntu Victim
Trang 14Hình 14 – Tạo user mới và đổi mật khẩu
Trên máy Ubuntu Victim, di chuyển đến thư mục /var/log và tiến hành xem file log bằng lệnh
journalctl -t sshd
Hình 15 – Xem file log trên máy Ubuntu Victim
Trên máy Kali Attack, thông qua chế độ remote tiến hành tìm kiếm những người dùng
vừa tạo bằng lệnh grep bằng lệnh: cat /var/log/auth.log | grep useradd
Hình 16 – Kiểm tra nhanh ai đã tạo tài khoản trên hệ thống
Lệnh gawk '/useradd/ {print}' /var/log/auth.log:
gawk: Đây là GNU Awk, một công cụ xử lý văn bản mạnh mẽ để tìm kiếm và thao tác
trên dữ liệu văn bản
'/useradd/ {print}':
/useradd/ → Đây là một biểu thức tìm kiếm (pattern) trong file log, nghĩa là nó sẽ tìm
tất cả các dòng có chứa từ "useradd"
{print} → Khi tìm thấy dòng nào khớp với từ "useradd", lệnh print sẽ in ra toàn bộ
dòng đó
Trang 15/var/log/auth.log : Đây là file log chứa thông tin về các sự kiện xác thực, bao gồm cả
việc tạo tài khoản người dùng trên hệ thống
Hình 17 – Lệnh gawk để kiểm tra ai đã tạo tài khoản mới trên hệ thống
2.2.3 Phân tích log sử dụng find trong Windows
Trên máy Kali External Attack khởi động xHydra, chọn target là 10.10.19.202 (ip của máy Windows Server), cài đặt giao thức ftp và cài đặt Password list sau đó nhấn Start
và chờ xHydra tìm ra mật khẩu
Hình 18 - Mở xHydra và cấu hình địa chỉ target, cổng và giao thức
Trang 16Hình 19 - Cấu hình tài khoản và password list để tiến hành tấn công mật khẩu
Hình 20 – Lỗi …
Trang 17TÀI LIỆU THAM KHẢO
[1] Đinh Trường Duy, Phạm Hoàng Duy, Bài giảng Hệ điều hành Windows và Linux/Unix, Học viện Công Nghệ Bưu Chính Viễn Thông, 2022
[2] Tom Carpenter, Microsoft Windows Server Operating System Essentials, Sybex,
2011
Tài liệu tham khảo các lệnh:
[3] grep: https://linuxcommand.org/lc3_man_pages/grep1.html
[4] grep: https://linuxcommand.org/lc3_man_pages/grep1.html
[5] find:https://docs.microsoft.com/en-us/windows-server/administration/windows- commands/find
[6] xhydra: http://manpages.ubuntu.com/manpages/bionic/man1/hydra.1.html