Hướng dẫn dùng psad để phát hiên các nỗ lực xâm nhập mạng trên một Ubuntu VPS

5 năm trước

 

Giới thiệu

Khả năng phát hiện ra các lỗ lực xâm nhập mạng sẽ giúp bạn có được các biện pháp hợp lí trước khi sự việc diễn ra. Vì lí do này mà các hệ thống phát hiện xâm nhập cực kì hữu dụng trong trường hợp này. 

Hệ thống phát hiện xâm nhập được sử dụng để ghi lại các kết nối đáng ngờ và báo cáo khi  hoạt động bất thường đang diễn ra. Một số chương trình được sử dụng hoàn toàn như một hệ thống thông báo, trong khi các chương trình khác có thể chủ động chặn lưu lượng truy cập có ý định gây hại.

 Công cụ psad, viết tắt của phát hiện tấn công quét cổng, là một phần mềm giám sát các bản ghi tường lửa của bạn để xác định xem sự kiện quét hoặc tấn công có đang diễn ra hay không. Sau đó, nó có thể cảnh báo cho quản trị viên hoặc thực hiện các bước hoạt động để ngăn chặn mối đe dọa.

Trong bài viết này, chúng ta sẽ đi khám phá các cài đặt và cấu hình psad trên Ubuntu 12.04 VPS. Quy trình thì cũng khá giống với các bản phân phối khác

Cài đặt psad

Hệ thống phát hiện xâm nhập psad có sẵn trong kho mặc định của Ubuntu nên bạn có thể lấy nó thông qua apt:

sudo apt-get update
sudo apt-get install psad

Để cấu hình gửi mail để cảnh báo tới quản trị viên, bạn sẽ phải cấu hình máy chủ mail postfix

Trong hầu hết các trường hợp, bạn có thể chọn "Internet Site" và nhập tên miền liên quan với máy chủ của bạn. Nó sẽ là tên miền để điểm vào trong trường "From" trong mail được gửi bởi psad.

Cấu hình các quy tắc IPTables 

Cách mà psad phát hiện hoạt động trên các cổng của máy chủ của bạn là theo dõi các bản ghi được tạo ra bởi một ứng dụng tường lửa. Theo mặc định, Ubuntu sẽ gửi kèm theo tường lửa iptables, nhưng nó hoàn toàn chưa được định cấu hình và không theo dõi hoặc chặn bất cứ thứ gì theo mặc định.

Mặc dù bạn có thể loại bỏ các lệnh sau để chỉ cần bật ghi nhật ký, chúng tôi sẽ thực hiện một cấu hình mạnh mẽ hơn:

sudo iptables -A INPUT -j LOG
sudo iptables -A FORWARD -j LOG

Nếu bạn đã nhập các quy tắc trên, xoá chúng trước khi cấu hình để chúng ta có thể bắt đầu.

sudo iptables -F

Bạn có thể thấy các quy tắc đang hiện có( sẽ chỉ bảo gồm các chính sách tại thời điểm này),bằng cách gõ:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Bây giờ chúng ta có thể bắt đầu bổ sung các quy tắc của chúng ta, chủ yếu cho chuỗi INPUT. Chúng ta muốn báo với iptables để thả các kết nối mà chúng ta không cần hoặc muốn. Chúng ta cần thêm các quy tắc để cho phép các kết nối được ủy quyền của chúng ta một cách rõ ràng trước khi thêm các hạn chế.

Quy tắc đầu tiên sẽ cho phát tất cả các lưu lượng được tạo ra bởi máy chủ, hướng về máy chủ. Loại kết nối này thường được sử dụng cho các dịch vụ giao tiếp với máy chủ khác và truyền thông tin đi một cách dễ dàng:

sudo iptables -A INPUT -i lo -j ACCEPT

Tiếp theo, chúng ta sẽ thêm các quy tắc cho phát tất cả các lưu lượng liên quan đến kết nối ở thời điểm hiện tại. Nó sẽ cho phép các phiên là việc hoạt động mà không bị gián đoạn:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Tiếp theo, chúng ta sẽ thêm các quy tắc chúng ta muốn để giữ cho chúng mở.Với SSH, chúng ta có thể thêm các dòng như:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Nếu bạn có web server đang chạy trên cổng 80, bạn có thể thêm quy tắc như:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Bất cứ cổng nào hợp lệ, bạn có thể để người khác tiếp cận với dịch vụ  với cùng cú pháp:

sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT

Sau khi bạn hoàn tất việc thêm các dịch vụ hợp pháp, chúng tôi sẽ xả tất cả các kết nối còn lại. Bất kỳ điều gì xảy ra với quy tắc này không phù hợp với quy tắc của chúng tôi dành cho lưu lượng truy cập hợp pháp.

Trước khi thực hiện, chúng ta cần thêm quy tắc để báo cho iptables bắt đầu ghi chép lưu lượng. Iptables sẽ bắt đầu ghi chét các lưu lượng chưa được quản lí

sudo iptables -A INPUT -j LOG

Chúng ta cũng thêm thêm quy tắc này vào chuỗi chuyển tiếp trong trường hợp chúng ta kết thúc lưu lượng chuyển tiếp.

sudo iptables -A FORWARD -j LOG

Cuối cùng, hãy xoá các lưu lượng chưa khớp. Bạn có thể thực hiện bằng cách thêm một quy tắc khớp với mọi thức trong chuỗi vào cuối như sau:

sudo iptables -A INPUT -j DROP

Hoặc bạn có thể dùng chức năng tích hợp để cấu hình cái diễn ra khi một gói chuyển xuống chuỗi mà không khớp với bất kì quy tắc nào:

sudo iptables -P INPUT DROP

Kết quả có chức năng giống hệt nhau.

Một điều bạn phải lưu ý rằng nếu bạn muốn xả iptables và cài đặt chính sách DROP( thay vì thêm nó vào cuối chuỗi như một quy tắc),bạn nên đảo chính sách trước khi xả:

sudo iptables -P INPUT ACCEPT
sudo iptables -F

Nếu bạn không thực hiện được điều này, các quy tắc iptables của bạn sẽ bị xóa và chỉ chính sách mặc định để loại bỏ tất cả các gói tin gửi đến sẽ vẫn còn. Điều này sẽ cắt bỏ tất cả lưu lượng mạng đến máy chủ của bạn, bao gồm lưu lượng truy cập từ kết nối SSH của bạn.

Theo mặc định, iptables không duy trì các quy tắc giữa khởi động lại, vì vậy sau khi bạn đã thử nghiệm cấu hình của mình và chắc chắn rằng nó làm những gì bạn muốn, bạn có thể tải xuống và bật công cụ khiến các quy tắc này liên tục:

sudo apt-get install iptables-persistent
sudo service iptables-persistent start
 

Cấu hình psad để phát hiện quét

Bây giờ chúng ta có một bộ quy tắc iptables được cấu hình với cái được gọi là chính sách "default drop", chúng ta có thể bắt đầu cấu hình psad để bắt đầu phân tích các bản ghi.

Mở file cấu hình chính psad với quyền root:

sudo nano /etc/psad/psad.conf

Những điều đầu tiên bạn cần sửa đổi là ở đầu tệp. Bạn nên thay đổi thông số  EMAIL_ADDRESSESđể khớp với địa chỉ email bạn muốn thông báo khi tạo báo cáo. Bạn cũng nên sửa đổi HOSTNAME để khớp với miền của bạn để nó tham chiếu đến đúng máy:

EMAIL_ADDRESSES address1@domain.com, address2@other.com;
HOSTNAME your_domain.com;

Nhớ kế thúc mỗi dòng với dấu (;) để cho psad có thể đọc  file chính xác.

Một phần mà bạn có thể muốn xem xét là các khai báo "mức nguy hiểm". Những cấp độ này là một cách để psad phân loại mức độ đe dọa.

Chúng được tự động xác định bởi số lượng gói dữ liệu liên quan đến một sự kiện, nhưng bạn có thể gán một số loại lưu lượng nhất định cũng là một mức độ nguy hiểm nhất định. Các ngưỡng mặc định cho mỗi cấp độ cần đạt được là:

DANGER_LEVEL1 5;
DANGER_LEVEL2 15;
DANGER_LEVEL3 150;
DANGER_LEVEL4 1500;
DANGER_LEVEL5 10000;

Bạn có thể thay đổi mức độ phụ thuộc vào độ nhảy cảm bạn muốn psad để cảnh báo.

Bạn cũng có thể cấu hình mức độ nhạy cảm của psad thông qua tham số PORT_RANGE_SCAN_THRESHOLD. Điều này xác định số lượng cổng trong một phạm vi phải được quét trước khi cảnh báo được nâng lên. Mặc định là một cảnh báo được nâng lên sau khi hai cổng được quét.

PORT_RANGE_SCAN_THRESHOLD 1;

Một trong những điều quan trọng để cấu hình là tham số IPT_SYSLOG_FILE ,vì hiện tại nó đang chỉ vào file syslog sử dụng.

Sửa đổi điều này để trỏ vào tệp nhật ký hệ thống, nơi psad thực sự sẽ có cơ hội xem qua các nhật ký hoạt động

IPT_SYSLOG_FILE /var/log/syslog;

Nếu bạn sử dụng một số cổng cho những thứ như port knocking, bạn nên nói với psad bỏ qua những nỗ lực trên các cổng này để bạn không kích hoạt cảnh báo thông qua các hoạt động thường lệ: 

IGNORE_PORTS ports_or_range_to_ignore;

Bạn cũng có thê bỏ qua các tin nhắn thông qua các tham số IGNORE_PROTOCOLSIGNORE_INTERFACES, and IGNORE_LOG_PREFIXES.

Nếu nhận thấy rằng bạn đang nhận được cảnh báo quá thường xuyên, bạn có thể đặt ngưỡng trên email bằng cách điều chỉnh mức độ nào phải đạt được trước khi email được gửi:

MIN_DANGER_LEVEL 1; # Controls psad logging and email alerts
EMAIL_ALERT_DANGER_LEVEL 1; # Applies only for email alerts

Bạn có thể hạn chế số lượng mail trực tiếp với:

EMAIL_LIMIT 0;

Số không nghĩa là không giới hạn. Giới hạn này là số lượng mail có thể được gửi đi  từ duy nhất 1 địa chỉ IP.

Bây giờ hãy lưu và đóng file

Triển khai psad

Bây giờ chúng ta có một cấu hình psad cơ bản đã sẵn sàng, hoàn chỉnh với các khả năng cảnh báo, chúng ta có thể thực hiện các chính sách của chúng ta và kích hoạt hệ thống của chúng ta.

Trước khi chúng ta bắt đầu, chúng ta nên cập nhật signature của psad để nó có thể nhận biết chính xác các kiểu tấn công đã biết. Làm điều này bằng cách gọi:

sudo psad --sig-update

Nó sẽ tìm nạp các file mới nhất và update cơ sở dữ liệu

Bây giờ chúng ta cần khởi động lại dịch vụ để dùng những update đó và triển khai những thay đổi của cấu hình. Gõ:

sudo service psad restart

Điều này sẽ thực hiện giám sát nhật ký của chúng tôi. Để xem trạng thái hiện tại của các sự kiện, hãy gõ:

sudo service psad status
[+] psadwatchd (pid: 3737) %CPU: 0.0 %MEM: 0.0
Running since: Fri Jan 10 15:36:04 2014
[+] psad (pid: 3735) %CPU: 0.0 %MEM: 0.3
Running since: Fri Jan 10 15:36:04 2014
Command line arguments: [none specified]
Alert email address(es): example@domain.com
[+] Version: psad v2.1.7
[+] Top 50 signature matches:
[NONE]
[+] Top 25 attackers:
[NONE]
[+] Top 20 scanned ports:
[NONE]
[+] iptables log prefix counters:
[NONE]
Total packet counters: tcp: 0, udp: 0, icmp: 0
[+] IP Status Detail:
[NONE]
Total scan sources: 0
Total scan destinations: 0
[+] These results are available in: /var/log/psad/status.out

Như bạn có thể thấy không có cái gì được phát hiện. Bạn cũng có thể thấy rằng các sự kiện đã được phát hiện được ghi vào các file đặt trong /var/log/psad/.

Thực hiện quét cổng thử nghiệm

 Từ một máy tính khác, chúng ta nên thử quét các cổng của máy chủ để tạo ra một số lần truy cập trên tường lửa. Chúng ta có thể làm điều này với tiện ích nmap.

Chúng tôi sẽ thực hiện quét SYN tcp port từ một máy khác. Chúng tôi sẽ nói với nó để giả định rằng máy chủ của chúng tôi là bằng cách chuyển nó vào tùy chọn -PN:

sudo nmap -PN -sS server_domain_or_ip
Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-10 15:54 EST
Nmap scan report for server_domain_or_ip
Host is up (0.013s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds

Như bạn có thể thấy, quá trình quét này biểu thị những gì tôi đã định cấu hình cho tường lửa của mình. Mỗi cổng được dán nhãn là "filtered" cho biết rằng nó được bảo vệ bởi tường lửa, ngoại trừ cổng SSH, được tiếp xúc.

Trên máy chủ của bạn, bạn nên chạy lại command:

sudo service psad status

Bạn sẽ thấy một danh sách cảnh báo lớn hơn rất nhiều. Bởi vì sự kiện này chỉ là quét 1000 cổng, nó kích hoạt một signature match cho rất nhiều mối đe dọa khác nhau. Đối với một cuộc tấn công ác liệt hơn hơn, được tập trung vào một cổng cụ thể hoặc điểm vào, chữ ký sẽ hữu ích hơn nhiều.

Nếu bạn thiết lập cảnh báo qua email, bạn cũng phải nhận được một hoặc hai email. Nếu bạn có miền được liên kết với máy tính bạn đã quét, bạn sẽ thấy báo cáo "là ai" trên chủ sở hữu được liên kết với quá trình quét.

Bạn có thể dùng nó để liên hệ với người sở hữu IP hoặc có thể là ISP hoặc nhà cung cấp hosting.

 

Triển khai các biện pháp phòng tránh xâm nhập

Bây giờ chúng tôi đã xác minh rằng chúng tôi có thể phát hiện hoạt động cố gắng truy cập vào máy chủ của chúng tôi, chúng tôi có thể tùy chọn triển khai cơ chế phòng ngừa nơi psad có thể tự động sửa đổi quy tắc iptables để cấm máy quét.

Trước khi thực hiện, bạn nên nhìn vào file auto_dl:

sudo nano /etc/psad/auto_dl

Bây giờ chúng tôi đã xác minh rằng chúng tôi có thể phát hiện hoạt động cố gắng truy cập vào máy chủ của chúng tôi, chúng tôi có thể tùy chọn triển khai cơ chế phòng ngừa nơi psad có thể tự động sửa đổi quy tắc iptables để cấm máy quét.

attacker_ip 5;

Mặt khác, về cơ bản bạn có thể miễn một số địa chỉ IP nhất định từ việc gợi ra phản ứng từ psad. Chúng ta có thể thêm localhost vào đây và đặt nó là "0" nếu chúng ta không thêm một quy tắc vào iptables một cách rõ ràng.

Vì mục đích của chúng tôi, vì chúng ta sẽ thiết lập psad để tự động chặn lưu lượng truy cập từ IP bị phát hiện, chúng ta nên thêm máy tính gia đình vào danh sách này để chúng ta không tự khóa:

local_computer_ip 0;

Lưu và đóng file khi bạn xong.

Mở lại file cấu hình psad:

sudo nano /etc/psad/psad.conf

Tìm kiếm tham số có tên là ENABLE_AUTO_IDS. Đây là quy tắc cho phép psad sửa đổi tường lửa của chúng ta để chặn một số địa chỉ nhất định. Nếu bạn muốn tự động thực hiện việc này, bạn có thể thay đổi nó như sau:

ENABLE_AUTO_IDS Y;

Tiếp theo, chúng tôi muốn quyết định điều gì tạo thành mức độ đe dọa đủ lớn để chặn IP vi phạm. Chúng ta có thể làm điều đó bằng cách điều chỉnh tham số này:

AUTO_IDS_DANGER_LEVEL 5;

Lựa chọn quan trọng khác là tổng thời gian chặn tính bằng giây:

AUTO_BLOCK_TIMEOUT 3600;

Nó sẽ chặn trong 1 giờ

Kiểm tra các biện pháp chống xâm nhập 

Chúng ta có thể kiểm tra xem nó hoạt động ra sao bằng cách tạm thời chặn chúng ta. Trong cùng file cấu hình, chúng ta sẽ đặt các tham số sau:

ENABLE_AUTOIDS Y;
AUTO_IDS_DANGER_LEVEL 4;
AUTO_BLOCK_TIMEOUT 60;

Điều này sẽ tự động bật cấu hình tường lửa tự động và sẽ đặt ngưỡng tới mức nguy hiểm 4 mà chúng tôi đạt được khi dùng quét SYN thông thường và đặt thời gian chặn là 60 giây.

Lưu và đóng file

Mở file auto_dlnếu bạn đã thêm địa chỉ IP và tạm thời ghi chú nó.

# local_computer_ip 0;

Giờ thì khởi động lại psad để bắt chúng đọc lại các file:

sudo service psad restart

Từ máy tính của bạn, bạn có thể chạy lại lần quét bạn đã làm trước đó:

sudo nmap -PN -sS server_domain_or_ip

Tại thời điểm này, sau một vài giây, nếu bạn kết nối với máy psad của bạn thông qua SSH, kết nối của bạn sẽ bị ngắt. Bạn sẽ không thể kết nối lại trong 60 giây.

Điều này là do psad đã hành động khi quét của bạn đã đạt đủ cổng để đạt mức độ nguy hiểm 4. Nó sửa đổi các quy tắc iptables để chuyển hướng lưu lượng truy cập đến các chuỗi khác mà tạm thời bị chặn IP của bạn.

Một khi bạn có thể đăng nhập lại, bạn có thể xem phần còn lại của dòng này bằng cách kiểm tra các quy tắc iptable của bạn:

sudo iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N PSAD_BLOCK_FORWARD
-N PSAD_BLOCK_INPUT
-N PSAD_BLOCK_OUTPUT
-A INPUT -j PSAD_BLOCK_INPUT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j PSAD_BLOCK_FORWARD
-A FORWARD -j LOG
-A OUTPUT -j PSAD_BLOCK_OUTPUT

Như bạn có thể thấy, nhiều chuỗi hơn đã được tạo ra và tất cả các đầu vào đều được hướng vào một trong các chuỗi này. Trong quá trình cấm, chuỗi này sẽ làm mất kết nối cho IP của kết nối nhà của bạn.

Bây giờ bạn đã thử nghiệm chức năng này, hãy hoàn nguyên nó về những gì bạn muốn sử dụng. Bạn có lẽ nên tăng chiều dài lệnh cấm nếu bạn đang lên kế hoạch thực sự sử dụng chức năng này. Ngoài ra, bạn nên thêm lại địa chỉ IP mà bạn biết bạn sẽ kết nối với:

local_computer_ip 0;
ENABLE_AUTOIDS Y;
AUTO_IDS_DANGER_LEVEL 5;
AUTO_BLOCK_TIMEOUT 3600;

Đừng quên khởi động lại psad khi bạn cấu hình xong:

sudo service psad restart

Hãy nhớ, có một số loại tấn công nhất định có thể giả mạo địa chỉ IP nguồn. Điều này có nghĩa là kẻ tấn công nghi ngờ rằng bạn đã bật chức năng tự động chặn có thể khiến bạn vô tình cấm các trang web hoặc dịch vụ hợp pháp. Hãy rất cẩn thận và cân nhắc chi phí và lợi ích của loại cấu hình này.

 

Kết luận

Bằng cách cấu hình đúng công cụ phát hiện xâm nhập mạng như psad, bạn tăng cơ hội nhận được các cảnh báo cần thiết về các mối đe dọa trước khi sự cố thực sự xảy ra. Các công cụ như psad có thể cung cấp cho bạn cảnh báo nâng cao và có thể xử lý một số tình huống tự động.

Cái chính để sử dụng psad hiệu quả là cấu hình mức độ nguy hiểm và cảnh báo email một cách thích hợp, và sau đó theo dõi mọi vấn đề. Công cụ này, cùng với các tài nguyên phát hiện xâm nhập khác như tripwire có thể cung cấp phạm vi phủ sóng khá tốt để có thể phát hiện các lần xâm nhập.