Tuesday, November 12, 2013

Truy tìm IP thật của server đằng sau CloudFlare hay các dịch vụ CDN

Guide này nhằm giúp các System Admin nhận ra được rằng mình "misconfiguration" ở đâu khiến hệ thống bị lộ real IP khiến các kẻ tấn công DDoS dễ dàng tấn công hệ thống mà bỏ qua các lớp CDN bảo vệ

CloudFlare IP

Đầu tiên ta cần phải biết danh sách IP của cloudflare (CloudFlare IP ) là những IP nào để biết rằng IP tìm được bằng các phương pháp dưới đây là IP thật của server ( real IP ). Danh sách CloudFlare IP được hãng này public tại đây: https://www.cloudflare.com/ips
Các CDN khác thì tìm trên internet :)



Cách hoạt động của CloudFlare

Cơ chế hoạt động của CloudFlare và các CDN rất đơn giản. Họ sẽ trở thành các Reverse Proxy ( máy chủ trung gian ) giữa người dùng và server

User <----------> CloudFlare Servers ( CDN Servers ) <----------> Real Servers

Để làm chuyện này thì người dùng phải bị buộc kết nối đến các CDN Server thay vì Real Server, CDN server sẽ thay người dùng request và cache các dữ liệu từ Real Server. Và để "ép" người dùng phải bị buộc kết nối đến các CDN Server thay vì Real Server thì các CDN dùng một giải pháp đơn giản đó là khai báo lại các Name Server record của domain website

Ví dụ:

Ở tình trạng bình thường thì Name Server thường là của Hosting Provider hoặc Domain Registra

> set type=NS
> xnohat.com  
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
xnohat.com nameserver = ns57.domaincontrol.com.
xnohat.com nameserver = ns58.domaincontrol.com.

Khi sử dụng CloudFlare thì Name Server sẽ là của CloudFlare


> set type=NS
> anonnews.org
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
anonnews.org nameserver = lisa.ns.cloudflare.com.

anonnews.org nameserver = ed.ns.cloudflare.com.

Từ đó các DNS request của user sẽ được phân giải bởi CloudFlare Name Server thay vì Registra Name Server.

Đây chính là chỗ có thể xảy ra điểm hở khiến có thể tìm thấy server thực đằng sau


Concept chính của việc tìm ra Real IP đằng sau CDN

Là tìm vào các chỗ cấu hình là các Sys Admin vô tình hoặc buộc phải set IP thật thay vì để CloudFlare tự định đoạt


Phương pháp #1: Ping 

Cách đơn giản nhất là ping nhưng mà ping vào đâu ?

Một domain ngoài host chính là www thì còn có những subdomain host như ftp.domain.com, mail.domain.com , cpanel.domain.com ...

Có thể các subdomain này vì nhiều lý do bị các SysAdmin cấu hình trỏ A record về IP thật của server. Do đó khi ping các domain này sẽ lòi ra được các IP thật, lấy các IP này so với danh sách CloudFlare IP hoặc CDN IP ở trên, nếu thấy không trùng thì nhiều khả năng là IP thật của server

Nếu server chặn ICMP request ( ping luôn báo timeout ) thì dùng Nmap mà scan

Lệnh:
nmap -sV -sS -F xnohat.com


Phương pháp #2: NetCraft IP history

NetCraft là hãng phần mềm network lâu đời, họ có phát triển một hệ thống bot chuyên đi check Domain-IP trên internet. Nhiều khả năng Netcraft Bot đã lấy được IP thật của server trước khi SysAdmin áp dụng CloudFlare

Cách dùng:
http://toolbar.netcraft.com/site_report?url=xnohat.com

Phương pháp #3: DNS Bruteforce (Subdomain Bruteforce)

Phương pháp này cũng tương tự như phương pháp Ping, tức là tìm ra cái subdomain chứa IP thật. Ý tưởng của phương pháp này là ping thử hết các subdomain có thể có xem cái nào đang tồn tại thật và check IP của nó xem có phải cloudflare IP không ? nếu không thì nhiều khả năng nó là real IP

Cách làm:
Cũng dùng Nmap để scan, và lần này thì dùng DNS Bruteforce script của Nmap
nmap --script dns-brute -sn xnohat.com
Phương pháp #4: mx record
Các máy chủ mail là một điểm yếu thú vị, nếu như máy chủ web và máy chủ mail đặt cùng một server thì khả năng tìm ra IP thật là rất dễ. Vì các MX record buộc phải phân giải ra IP thật của máy chủ mail, do đó các Sys Admin phải set MX record bằng IP thật. Phương pháp này chỉ thất bại khi mail server là máy chủ riêng biệt với webserver hoặc Sys Admin dùng ... Google Mail :))

Cách dùng là sử dụng NSLookup

> set type=MX
> lazada.vn
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
lazada.vn mail exchanger = 30 aspmx2.googlemail.com.
lazada.vn mail exchanger = 30 aspmx4.googlemail.com.
lazada.vn mail exchanger = 20 alt1.aspmx.l.google.com.
lazada.vn mail exchanger = 10 aspmx.l.google.com.
lazada.vn mail exchanger = 30 aspmx5.googlemail.com.
lazada.vn mail exchanger = 30 aspmx3.googlemail.com.
lazada.vn mail exchanger = 20 alt2.aspmx.l.google.com.

Sau đó ping hoặc nmap scan IP các mx record trên nhằm tìm ra IP thật của server :)
Phương pháp #5: Script tự động làm hết đống trên :))

Rất hay là có một hacker đã viết một script tự động làm hết mấy phương pháp ở trên :))


xnohat

5 comments:

  1. Bài viết rất hay cảm ơn tác giả :)

    ReplyDelete
  2. hix vậy là không thể tin tưởng vào CF sao
    buồn quá , mình là site nhỏ , không có cơ chế chống ddos như site lơn

    ReplyDelete
  3. bài viết rất hay

    ReplyDelete
  4. This knowledge is good, thanks for share.

    ReplyDelete
  5. Vậy nếu block hết các đường trên rồi có cách nào detect ra IP thật của site không? thanks.

    ReplyDelete

Quí đọc giả đọc xong, nếu thấy chút thú vị thì tác giả cũng mong được chút comment lấy làm kích lệ