Một đồng nghiệp trong công ti giới thiệu cho mình blcheck, tool này dùng để check một IP có nằm trong mail blacklist hay không bằng cách check qua một danh sách các tổ chức. Về cơ bản nó tương tự mxtoolbox nhưng nó là command-line tool.

./blcheck 1.2.3.4

----------------------------------------------------------
Results for 1.2.3.4

Tested:        3
Passed:        3
Invalid:       0
Blacklisted:   0
----------------------------------------------------------

Sẵn tò mò nên thử đọc code và xem cách nó hoạt động như thế nào, phương pháp rất đơn giản là xoá code và đọc từng phần và chạy thử.

> bash -x ./blcheck 1.2.3.4

Sau một hồi lò mò thì đại khái cũng hiểu cách hoạt động, cơ bản thì:

  • Reversed địa chỉ IP
  • Dùng dig để check DNS của ${REVERSED_IP}.blacklist_domain., dạng dạng như command /usr/bin/dig +short -t a +time=3 +tries=2 4.3.2.1.zen.spamhaus.org.
  • Đánh giá dựa trên kết quả trả về

Overview

Trước tiên câu hỏi đặt ra là các tổ chức trong danh sách làm sao có bộ dữ liệu IP để đánh giá IP đó là xấu? và dữ liệu có đáng tin cậy hay không?

Mình để ý, để có bộ data thì thường người ta hay sử dụng phương pháp đặt bẫy (trap) hoặc đặt các honey pot. Rất nhiều trap và honey pot được tạo ra để dụ spammer. Spammer tất nhiên không thể bỏ qua một miếng mồi ngon như vậy được, nên sẽ ra sức để spam hoặc tìm cách tấn công/khai thác. Từ các trap/honey pot này, dữ liệu sẽ được thu thập và dùng để đánh giá. Bộ dữ liệu từ các trap/honey pot này sẽ được cập nhật liên tục để tránh dữ liệu sai, ngoài ra họ cũng cho phép bạn submit một địa chỉ IP là spam nếu bạn biết chắc chắn hoặc ngược lại gửi yêu cầu gỡ một IP ra khỏi danh sách spam.

Nên đôi khi trên Internet, bạn thấy một miếng mồi ngon thì chưa chắc nó đã thực sự ngon :troll:, đôi khi nó chỉ là một cái bẫy để dụ bạn mà thôi.

Nếu một địa chỉ IP của mail server bị dính blacklist, khi bạn gửi email tới người khác, email sẽ bị vô Spam hoặc tới người nhận chậm hoặc không thể tới được người nhận. (Email OTP mà chậm thì expired mất tiêu).

Tương tự như email, cũng có các tổ chức bảo trì một bộ dữ liệu cho web traffic, dựa vào dữ liệu này, có thể biết được có nên chặn/cản lọc request từ các IP này hay không. Phương pháp thu thập dữ liệu là tương tự với email.

DNS Query Format

Nếu dữ liệu đã có thì phương pháp để xác định một IP là spammer rất đơn giản. Chúng ta sẽ thực hiện một DNS query bằng các công cụ quen thuộc như nslookup hoặc dig như cách phân giải các domain. Cú pháp với dig như sau:

> dig +short <octec-reversed-IP>.<list-domains>.
  • +short trả về dữ liệu đơn giản cho dễ nhìn.
  • <octec-reversed-IP> đây là địa chỉ IP mà bạn muốn kiểm tra, nhưng quan trọng nhất là địa chỉ IP này cần được đảo ngược. Ví dụ bạn muốn kiểm tra IP 1.23.34.5 thì giá trị ở DNS query sẽ là 5.34.23.1. (5.43.32.1. là sai).
  • List-domains là danh sách các tổ chức cung cấp bộ dữ liệu cho chúng ta truy vấn, ví dụ cbl.abuseat.org, sbl-xbl.spamhaus.org … bạn có thể kiếm một danh sách về email ở mxtoolbox.

Ví dụ muốn kiểm tra địa chỉ IP 85.117.61.186 tại thời điểm mình viết bài này:

> dig +short 186.61.117.85.cbl.abuseat.org.
127.0.0.2

>  dig +short 186.61.117.85.bl.spamcannibal.org.
103.224.212.22

> dig +short 186.61.117.85.b.barracudacentral.org.
127.0.0.2

> dig +short 186.61.117.85.korea.services.net.
=> nil

Ở đây mình kiểm tra thông qua 4 blacklist mình lấy bất kỳ để ra 4 kết quả khác nhau.

Query Responses

Phương pháp truy vấn thì rất đơn giản, giờ ta sẽ cần biết kết quả trả về phía trên có ý nghĩa như thế nào trong việc xác định thông tin về một IP có là spammer hay không.

Đâu tiên, ta có 2 kết quả là 103.224.212.22nil (không có kết quả trả về). Hai kết quả này không có ý nghĩa trong việc xác định thông tin của một IP. Coi như 2 blacklist mình lấy không có thông tin gì về IP này. Nên sẽ bỏ qua.

Còn lại kết quả 127.0.0.2, một địa chỉ IPv4 với 4 octet, từng octet sẽ có ý nghĩa riêng:

Octet đầu tiên luôn luôn là 127 và không mang ý nghĩa gì đặc biệt ngoài thể hiện là có dữ liệu validate (ngược lại với 2 kết quả phía trên do không bằng bắt đầu bằng 127 nên invalidate).

Octet thứ hai (giá trị 0 ở ví dụ trên) đại diện cho số ngày kể từ lần hoạt động cuối. Giá trị này từ 0 - 255, giúp đánh giá dữ liệu của tổ chức blacklist là cũ hay mới, càng mới thì càng đáng tin cậy. Giá trị 0 nghĩa là địa chỉ IP này mới vừa hoạt động mới gần đây.

Octet thứ 3 (giá trị 0 ở ví dụ trên) đại diện threat score của địa chỉ IP. Đánh giá trên một số yếu tố như số trap/honeypot mà địa chỉ IP này truy cập, số request/email gửi tới trap/honeypot… Tương tự giá trị này nằm trong khoảng từ 0 - 255, trong đó 255 là cực kỳ đe doạ. Như ở đây giá trị là 0 nghĩa là mức độ đe doạ thấp nhất. Một tổ chức như ProjectHoneyPot thì họ tính cứ gửi 100 spam message +25 điểm, 1000 spam message thì +50 điểm và 1_000_000 thì +75 điểm -> link

Octet thứ 4 (giá trị 2 ở ví dụ trên) đại diện cho loại (type) của vistor. Có 4 type chính là:

  • Search Engine
  • Suspicious
  • Harvester
  • Comment Spammer

Giá trị của octet này cũng nằm trong khoảng từ 0 - 255, tương ứng với bảng sau.

Value Meaning
0 Search Engine
1 Suspicious (nghi ngờ)
2 Harvester (thu tập dữ liệu)
4 Comment Spammer
8 [Reserved for Future Use]
6 [Reserved for Future Use]
32 [Reserved for Future Use]
64 [Reserved for Future Use]
128 [Reserved for Future Use]

Do một địa chỉ IP cũng có thể thuộc nhiều loại khác nhau, nên tổ hợp lại ta có một bảng dữ liệu khác:

Value Meaning
0 Search Engine (0)
1 Suspicious (1)
2 Harvester (2)
3 Suspicious & Harvester (1+2)
4 Comment Spammer (4)
5 Suspicious & Comment Spammer (1+4)
6 Harvester & Comment Spammer (2+4)
7 Suspicious & Harvester & Comment Spammer (1+2+4)
>7 [Reserved for Future Use]

Như kết quả của mình thì địa chỉ IP mà mình kiểm tra được xếp vào loại thu thập dữ liệu.

Lướt qua một số mẫu kết quả để dễ hình dùng hơn

  • 127.1.9.3: Kết quả này thể hiện địa chỉ IP được kiểm tra vừa có hành vi đáng nghi ngờ (1) vừa có hành vi thu thập dữ liệu (2) dựa vào octet cuối cùng, threat score là “9” và được nhìn thấy trên mạng dữ liệu cách đây 1 ngày.
  • 127.82.23.4: Kết quả này thể hiện địa chỉ IP được kiểm tra có hành vi spam content (4), có threat score là “23” và được thấy lần cuối trên mạng dữ liệu cách đây 82 ngày.

Search Engines

Search engines là một trường hợp đặc biệt. Với các search engines đã được biết tới như Google/Bing thì giá trị của octet cuối cùng sẽ luôn là 0. Sẽ không tồn tại một search engines vừa có hành vi search engines và vừa có hành vi của spammer, nếu một search engines vi phạm chính sách này, nó sẽ bị loại khỏi danh sách các search engines.

Trong trường hợp kết quả trả về là một search engines (octet cuối cùng là 0) thì giá trị của octet thứ ba sẽ là định danh của loại search engines. Còn octet thứ hai sẽ không có ý nghĩa gì trong trường hợp này.

Có một bảng định danh dựa trên octet thứ ba như sau:

Serial Number Search Engine
0 Undocumented
1 AltaVista
2 Ask
3 Baidu
4 Excite
5 Google
6 Looksmart
7 Lycos
8 MSN
9 Yahoo
10 Cuil
11 InfoSeek
12 Miscellaneous

ProjectHoneyPot

Về cơ bản thì nếu check một địa chỉ IP nằm trong blacklist email thì khả năng cao là nó cũng nằm trong blacklist web traffic. Có những tổ chức họ đặt bẫy và thu thập thông tin cho blacklist email, nhưng cũng có những tổ chức chỉ thu thập cho dữ liệu web. Ở phía trên mình tạm coi dữ liệu là như nhau nên không phân biệt blacklist.

Có một mạng lưới gọi là Project HoneyPot, chuyên đặt trap/honeypot để cung cấp các dữ liệu xác định thông tin một IP có phải là spammer hay không. Họ hoạt động phi lợi nhuận và chủ yếu dựa trên donate, tuy nhiên để dữ liệu chính xác và liên tục, họ cung cấp một giải pháp giúp cài đặt một trap trên website của chính bạn, nhằm thu thập thêm dữ liệu để chống spam (nhưng không ảnh hưởng đến hệ thống của bạn). Ngoài ra họ chia sẻ các dữ liệu thu thập được cho các lập trình viên và các nhà nghiên cứu chống spam khác. Tổ chức này cũng chịu trách nhiệm trong việc theo dõi, truy tố spammer tới các cơ quan pháp luật dựa trên đạo luật chống thư rác.

Ở phía trên, khi nhắc tới một mạng lưới dữ liệu thì bạn có thể ngầm hiểu đó là Project HoneyPot hoạt một tổ chức có chức năng tương tự.

Danh sách domain phía trên mình lấy của email blacklist, tuy nhiên ProjectHoneyPot họ cũng cấp một dịch vụ tương tự, bạn sẽ cần tạo một AccessKey để sử dụng. Cú pháp truy vấn thì tương tự nhưng thêm prefix là access_key. Ví dụ với IP phía trên:

> dig +short <access_key>.186.61.117.85.dnsbl.httpbl.org.
127.1.62.5

Kết quả trả về khá khác với các kết quả phía trên nhưng cũng dễ hiểu bởi mỗi mạng dữ liệu có cách đánh giá, bộ thu thập dữ liệu khác nhau. Nhưng về cơ bản phương pháp là tương tự nhau.

Bài viết tham khảo từ dịch vụ HTTP Blacklist của ProjectHoneyPot.