Home > System Penetration Testing > Tấn công và phòng thủ hệ thống (Phần 4)

Tấn công và phòng thủ hệ thống (Phần 4)


4) OS Fingerprinting

Khi thực hiện tấn công vào máy chủ mà hacker lại không biết máy chủ đó chạy hệ điều hành gì ? Ở phiên bản nào ? Nghe có vẻ rất là buồn cười, đúng không các bạn ? Do vậy việc xác định hệ điều hành và phiên bản đang chạy trên hệ thống đích cực kỳ quan trọng. Tại sao nó lại quan trọng ? Bởi vì hiện tại các máy chủ không phải đều chạy các hệ điều hành giống nhau, có rất nhiều loại như Windows, Linux, Sun, FreeBSD, … Việc phát hiện một máy chủ chạy một trong những hệ điều hành như Windows, Linux, …cũng đã thấy “oải” rồi, tiếp đến phải xác định phiên bản của hệ điều hành đó ? Bản thân WIndows như các bạn đã biết nó cũng có rất nhiêu phiên bản khác nhau, từ ngôn ngữ đến năm đưa ra ví dụ như Windows 2000, WIndows 2000 Server, Windows XP, WIndows Server 2003, Windows Vista, … Nếu như xác định càng rõ hệ điều hành mà máy đích đang chạy là gì và phiên bản tương ứng giúp hacker biết rõ hơn về hệ thống và thực hiện các pentest không lung tung mà sẽ tập trung vào phiên bản và hệ điều hành mà nó đang chạy. Ví dụ giả sử một hệ thống đích ta biết được nó chính xác là đang chạy Windows thì chắc chắn chúng ta không test lỗi gì mà liên quan bên các OS khác như Linux, SUn, …. Tiếp đến biết được hệ thống đích chạy Windows rồi thì xác định xem nó chạy ở WIndows 2000, 2003, hay Vista, nếu giả sử nó đang chạy Windows Server 2003 thì nó thuộc dòng nào Windows Server 2003 nào ? và liệu nó đang ở Service Pack nào ? SP0, SP1, SP3, … Bởi vì nhiều lỗi không phải ảnh hưởng hết tất cả dòng sản phẩm WIndows hoặc một phiên bản Windows cố định nào ? Một lỗi có thể nó nằm ở SP0 mà nó lại không có ở SP1, SP2 hoặc lỗi xuất hiện khi upgrade lên SP1, SP2, …

Tóm lại là xác định càng rõ hệ điều hành, phiên bản thì đỡ phải lang man trong việc kiểm tra lỗi. Phương thức mà xác định hệ điều hành đang chạy trên hệ thống đích có tên gọi là OS Fingerprinting.

Có 2 kiểu xác định OS Fingerprinting khác nhau

+ Active stack fingerprinting

+ Passive fingerprinting.

Active stack fingerprinting là dựa vào hệ điều hành khởi tạo TCP khác nhau để xác định hệ điều hành đó là gì. Những công cụ sẽ tạo những gói tin và gửi đến máy định và dựa vào sự phản hồi của máy đích và so sánh với database để xác định OS. Tuy nhiên việc kiểm tra này có thể bị Firewall log.

Passive fingerprinting không trực tiếp scan hệ thống để lấy thông tin về hệ điều hành mà nó sử dụng kỹ thuật sniffing thay vì kỹ thuật scanning. Phương pháp này thì ít chính xác hơn là active stack fingerprinting.

Tóm lại việc thực hiện Active Stack Fingerprinting hay là Passive Fingerprinting tất cả đều dựa vào sự khởi tạo TCP stack và những cách mà OS phản hồi khác nhau để xác định hệ điều hành và phiên bản. Một số công cụ thực hiện Active Stack Fingerprinting như XPROBE2, RING v2 và Nmap. Seamoun thường dùng nmap vì tất cả những cái cần thiết nhất cho việc scan, detect, bypass đều có cả ở trong nmap !!!!

Để thực hiện nhận biết hệ điều hành với nmap thực hiện với tùy chọn -O. Ví dụ

D:\Hacking\scanning\nmap>nmap -O 192.168.1.17

Starting Nmap 4.53 ( http://insecure.org ) at 2008-04-08 10:27 SE Asia Standard Time

Interesting ports on 192.168.1.17:

Not shown: 1707 closed ports

PORT STATE SERVICE

80/tcp open http

135/tcp open msrpc

139/tcp open netbios-ssn

443/tcp open https

445/tcp open microsoft-ds

3389/tcp open ms-term-serv

5101/tcp open admdog

MAC Address: 00:E0:4D:08:67:AD (Internet Initiative Japan)

Device type: general purpose

Running: Microsoft Windows XP

OS details: Microsoft Windows XP SP2

Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 4.235 seconds

5) Nhận biết máy chủ Web Server

Sở dĩ seamoun tách riêng phần nhận biết máy chủ Web Server thành một chủ đề bởi vì ngày nay web trở nên rất phổ biến và cách tấn công máy chủ từ web cũng vậy do nó phải luôn luôn được duy trì (trừ khi server web bị DOS nên down thôi !  ). Thực chất việc tấn công một máy chủ web tức là tấn công hệ thống đích đó trên cổng 80. Hiển nhiên nó có nhiều kỹ thuật và sự khác biệt so với những dịch vụ khác , điều này seamoun không cần phải giới thiệu về web cũng thành phần liên quan đến web, do nó quá phổ biến và ai cũng biết. Các bước tiến hành xác định banner của máy chủ web cũng tương tự như các dịch vụ khác. Do nó cũng là một dịch vụ chạy trên TCP port 80 do vậy việc xác định nó cũng kết nối đến máy chủ web trên port 80

Ví dụ

D:\Hacking>nx -vv matbao.com 80

DNS fwd/rev mismatch: matbao.com != smb57.vdrs.net

matbao.com [203.162.163.57] 80 (http) open

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Content-Length: 5118

Content-Type: text/html

Content-Location: http://203.162.163.57/index.htm

Last-Modified: Tue, 27 Sep 2005 07:20:00 GMT

Accept-Ranges: bytes

ETag: “2c739df33c3c51:5ea”

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Tue, 08 Apr 2008 08:20:43 GMT

Connection: close

sent 17, rcvd 319: NOTSOCK

Cách trên là cách đơn giản nhất để xác định máy chủ Web đang chạy là gì, và sử dụng công nghệ gì. Ở vì dụ trên thì Web Server là IIS/6.0 chạy ASP.NET hoặc ASP. Nếu một máy chủ Web cố tình sử dụng một số phần mềm như IIS Lockdown, Server Mask đối với IIS hoặc thay đổi tên máy chủ trên cấu hình Apache nhằm mục đích chống hacker xác định dịch vụ web server là gì ? Hacker có thể sử dụng kỹ thuật http fingerprinting cao cấp hơn như sau :

a) Cách 1

Cũng kết nối đến máy chủ web trên cổng 80 như lại sử dụng một lệnh khác (không phải phương thức GET, POST thông thường) và chờ sự phản hồi lỗi từ phía máy chủ web và từ đó xác định máy chủ web đang chạy là gì

Ví dụ

Đối với máy chủ Sun One Web Server nếu thực hiện:

$ nc sun.site.com 80

PUT / HTTP/1.0

Host: sun.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 401 Unauthorized

Server: Sun-ONE-Web-Server/6.1

Đối với máy chủ IIS 6.0 nếu thực hiện:

$ nc iis6.site.com 80

PUT / HTTP/1.0

Host: iis6.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 411 Length Required

Server: Microsoft-IIS/6.0

Content-Type: text/html

Đối với máy chủ là IIS 5.x nếu thực hiện

$ nc iis5.site.com 80

PUT / HTTP/1.0

Host: iis5.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 403 Forbidden

Server: Microsoft-IIS/5.1

Đối với máy chủ là Apache 2.0.x nếu thực hiện:

$ nc apache.site.com 80

PUT / HTTP/1.0

Host: apache.site.com

nó sẽ phản hồi như sau:

HTTP/1.1 405 Method Not Allowed

Server: Apache/2.0.54

Như các bạn đã thấy ở trên đối với máy chủ khác nhau thì nó sẽ có cách phản hồi khi gửi lệnh PUT khác nhau và từ đó ta xác định được dịch vụ máy chủ web đang chạy là gì ?

Cách 2) Dựa vào đặc điểm phản hồi của máy chủ sau khi gửi lệnh HEAD

Cũng kết nối đến máy chủ đích trên port 80 và sử dụng HEAD giống như trường hợp ban đầu như phân tích kỹ hơn phần phản hồi của máy chủ web để nhận định.

HTTP/1.1 200 OK

Date: Mon, 22 Aug 2005 20:22:16 GMT

Server: Apache/2.0.54

Last-Modified: Wed, 10 Aug 2005 04:05:47 GMT

ETag: “20095-2de2-3fdf365353cc0”

Accept-Ranges: bytes

Content-Length: 11746

Cache-Control: max-age=86400

Expires: Tue, 23 Aug 2005 20:22:16 GMT

Connection: close

Content-Type: text/html; charset=ISO-8859-1

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.1

Date: Mon, 22 Aug 2005 20:24:07 GMT

Connection: Keep-Alive

Content-Length: 6278

Content-Type: text/html

Cache-control: private

HTTP/1.1 200 OK

Server: Sun-ONE-Web-Server/6.1

Date: Mon, 22 Aug 2005 20:23:36 GMT

Content-length: 2628

Content-type: text/html

Last-modified: Tue, 01 Apr 2003 20:47:57 GMT

Accept-ranges: bytes

Connection: close

HTTP/1.1 200 OK

Connection: close

Date: Mon, 22 Aug 2005 20:39:23 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 1.1.4322

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 23756

Những phần mà seamoun làm đậm lên các bạn sẽ thấy sự khác biệt giữa những máy chủ web. Nếu nó là Apache thì Date để trước Server ngược lại so với IIS 5.1. Còn đối với Sun thì lengh và type nó viết thường không giống như Apache và IIS. Còn IIS 6.0 thì nó có thêm dòng Connection: close. Tất các cách thực hiện trên đều dựa trên việc kết nối đến máy đích và sử dụng lệnh và chờ đợi sự phản hồi từ máy chủ web, sau đó phân tích sự phản hồi của máy chủ web và đưa ra kết luận về máy chủ web. Một công cụ mạnh dùng để thực hiện http fingerprinting là httprint Tool. Nó cho phép xác định dịch vụ web đang chạy là gì ? Là một đối thủ nặng ký đối với những công cụ chống banner grabbing như Server Mask , IIS Lockdown

Demo

Trong phần demo của mình, seamoun sẽ thực hiện những kỹ thuật trên và tiếp đến là sử dụng công cụ httprint trong việc xác định máy chủ web.

7) Giới thiệu Passive OS Fingerprinting

Kỹ thuật Passive OS Fingerprinting là liên quan đến việc sử dụng sniffing để nhận diện hệ điều hành khác với Active OS Fingerprinting dùng scanning để thực hiện nhận diện hệ điều hành.

Dựa vào đặc tính của packet được sử dụng để nhận biết hệ điều hành. Sau đây là một số thuộc tính của TCP/IP dùng để xét khi thực hiện Passive OS Fingerprinting:

1.      TTL: Dựa vào Time-To-Live của mỗi packet trong hệ điều hành

2.      Window size: Tùy theo hệ điều hành mà có thể set các window size khác nhau.

3.      DF (Don’t Fragment bit): Hệ điều hành có thiết lập việc phân rã bit hay không ?

4.      …

Bằng việc sniffing và phân tích packet có các thuộc tính ở trên, chương trình sẽ so sánh với một database thuộc tính và đưa ra kết quả của hệ điều hành sử dụng là gì. Một số công cụ thực hiện Passive OS Fingerprinting có thể kể đến là siphon (http://packetstormsecurity.org/UNIX/utilities/siphon-v.666.tar.gz ), p0f (http://lcamtuf.coredump.cx/p0f.shtml)

Ví dụ một số dấu hiệu nhận biết hệ điều hành của chương trình p0f

# —————– Windows —————–

# Windows TCP/IP stack is a mess. For most recent XP, 2000 and

# seem. Luckily for us, almost all Windows 9x boxes have an

8192:32:1:44:M*:.:Windows:3.11 (Tucows)

S44:64:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:95

8192:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:95b

# Windows 98 it is no longer possible to tell them from each other

S44:32:1:48:M*,N,N,S:.:Windows:98 (low TTL) (1)

8192:32:1:48:M*,N,N,S:.:Windows:98 (low TTL) (2)

%8192:64:1:48:M536,N,N,S:.:Windows:98 (13)

%8192:128:1:48:M536,N,N,S:.:Windows:98 (15)

S4:64:1:48:M*,N,N,S:.:Windows:98 (1)

S6:64:1:48:M*,N,N,S:.:Windows:98 (2)

S12:64:1:48:M*,N,N,S:.:Windows:98 (3

T30:64:1:64:M1460,N,W0,N,N,T0,N,N,S:.:Windows:98 (16)

32767:64:1:48:M*,N,N,S:.:Windows:98 (4)

37300:64:1:48:M*,N,N,S:.:Windows:98 (5)

46080:64:1:52:M*,N,W3,N,N,S:.:Windows:98 (RFC1323+)

65535:64:1:44:M*:.:Windows:98 (no sack)

S16:128:1:48:M*,N,N,S:.:Windows:98 (6)

S16:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:98 (7)

S26:128:1:48:M*,N,N,S:.:Windows:98 (8)

T30:128:1:48:M*,N,N,S:.:Windows:98 (9)

32767:128:1:52:M*,N,W0,N,N,S:.:Windows:98 (10)

60352:128:1:48:M*,N,N,S:.:Windows:98 (11)

60352:128:1:64:M*,N,W2,N,N,T0,N,N,S:.:Windows:98 (12)

T31:128:1:44:M1414:.:Windows:NT 4.0 SP6a (1)

64512:128:1:44:M1414:.:Windows:NT 4.0 SP6a (2)

8192:128:1:44:M*:.:Windows:NT 4.0 (older)

# Windows XP and 2000. Most of the signatures that were

65535:128:1:48:M*,N,N,S:.:Windows:2000 SP4, XP SP1+

%8192:128:1:48:M*,N,N,S:.:Windows:2000 SP2+, XP SP1+ (seldom 98)

S20:128:1:48:M*,N,N,S:.:Windows:SP3

S45:128:1:48:M*,N,N,S:.:Windows:2000 SP4, XP SP1+ (2)

40320:128:1:48:M*,N,N,S:.:Windows:2000 SP4

S6:128:1:48:M*,N,N,S:.:Windows:XP, 2000 SP2+

S12:128:1:48:M*,N,N,S:.:Windows:XP SP1+ (1)

S44:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP3

64512:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP3 (2)

32767:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP4 (3)

# Windows 2003 & Vista

8192:128:1:52:M*,W8,N,N,N,S:.:Windows:Vista (beta)

32768:32:1:52:M1460,N,W0,N,N,S:.:Windows:2003 AS

65535:64:1:52:M1460,N,W2,N,N,S:.:Windows:2003 (1)

65535:64:1:48:M1460,N,N,S:.:Windows:2003 (2)

S52:128:1:48:M1260,N,N,S:.:Windows:XP/2000 via Cisco

65520:128:1:48:M*,N,N,S:.:Windows:XP bare-bone

16384:128:1:52:M536,N,W0,N,N,S:.:Windows:2000 w/ZoneAlarm?

2048:255:0:40:.:.:Windows:.NET Enterprise Server

44620:64:0:48:M*,N,N,S:.:Windows:ME no SP (?)

S6:255:1:48:M536,N,N,S:.:Windows:95 winsock 2

32000:128:0:48:M*,N,N,S:.:Windows:XP w/Winroute?

16384:64:1:48:M1452,N,N,S:.:Windows:XP w/Sygate? (1)

17256:64:1:48:M1460,N,N,S:.:Windows:XP w/Sygate? (2)

*:128:1:48:M*,N,N,S:U:-Windows:XP/2000 while downloading (leak!)

32768:32:1:44:M1460:.:Windows:CE 3

3100:32:1:44:M1460:.:Windows:CE 2.0

*:128:1:52:M*,N,W0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w, tstamp-)

*:128:1:52:M*,N,W*,N,N,S:.:@Windows:XP/2000 (RFC1323+, w+, tstamp-)

*:128:1:52:M*,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w-, tstamp+)

*:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w, tstamp+)

*:128:1:64:M*,N,W*,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w+, tstamp+)

*:128:1:48:M536,N,N,S:.:@Windows:98

*:128:1:48:M*,N,N,S:.:@Windows:XP/2000

Một số dấu hiệu để nhận biết hệ điều hành Linux

# —————– Linux ——————-

S1:64:0:44:M*:A:Linux:1.2.x

512:64:0:44:M*:.:Linux:2.0.3x (1)

16384:64:0:44:M*:.:Linux:2.0.3x (2)

2:64:0:44:M*:.:Linux:2.0.3x (MkLinux) on Mac (1)

64:64:0:44:M*:.:Linux:2.0.3x (MkLinux) on Mac (2)

S4:64:1:60:M1360,S,T,N,W0:.:Linux:2.4 (Google crawlbot)

S4:64:1:60:M1430,S,T,N,W0:.:Linux:2.4-2.6 (Google crawlbot)

S2:64:1:60:M*,S,T,N,W0:.:Linux:2.4 (large MTU?)

S3:64:1:60:M*,S,T,N,W0:.:Linux:2.4 (newer)

S4:64:1:60:M*,S,T,N,W0:.:Linux:2.4-2.6

S3:64:1:60:M*,S,T,N,W1:.:Linux:2.6, seldom 2.4 (older, 1)

S4:64:1:60:M*,S,T,N,W1:.:Linux:2.6, seldom 2.4 (older, 2)

S3:64:1:60:M*,S,T,N,W2:.:Linux:2.6, seldom 2.4 (older, 3)

S4:64:1:60:M*,S,T,N,W2:.:Linux:2.6, seldom 2.4 (older, 4)

T4:64:1:60:M*,S,T,N,W2:.:Linux:2.6 (older, 5)

S4:64:1:60:M*,S,T,N,W5:.:Linux:2.6 (newer, 1)

S4:64:1:60:M*,S,T,N,W6:.:Linux:2.6 (newer, 2)

S4:64:1:60:M*,S,T,N,W7:.:Linux:2.6 (newer, 3)

T4:64:1:60:M*,S,T,N,W7:.:Linux:2.6 (newer, 4)

S20:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (1)

S22:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (2)

S11:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (3)

S4:64:1:48:M1460,N,W0:.:Linux:2.4 in cluster

32767:64:1:60:M16396,S,T,N,W0:.:Linux:2.4 (loopback)

32767:64:1:60:M16396,S,T,N,W2:.:Linux:2.6 (newer, loopback)

S8:64:1:60:M3884,S,T,N,W0:.:Linux:2.2 (loopback)

16384:64:1:60:M*,S,T,N,W0:.:-Linux:2.2 (Opera?)

32767:64:1:60:M*,S,T,N,W0:.:-Linux:2.4 (Opera?)

S22:64:1:52:M*,N,N,S,N,W0:.:Linux:2.2 (tstamp-)

S4:64:1:52:M*,N,N,S,N,W0:.:Linux:2.4 (tstamp-)

S4:64:1:52:M*,N,N,S,N,W2:.:Linux:2.6 (tstamp-)

S4:64:1:44:M*:.:Linux:2.6? (barebone, rare!)

T4:64:1:60:M1412,S,T,N,W0:.:Linux:2.4 (rare!)

27085:128:0:40:.:.:Dell:PowerApp cache (Linux-based)

Ngoài Linux và Windows còn các dấu hiệu đề nhận biết các hệ điều hành khác

Cách thức điều tra hệ điều với kỹ thuật Passive OS Fingerprint

Ngoài việc sử dụng các chương trình trên có thể điều tra hệ điều hành thông qua một trang web nổi tiếng về report các OS: http://netcraft.com. Khi truy cập trang Web này chỉ cần gõ domain của server đích cần kiểm tra thì Website sẽ thông báo chi tiết các OS sử dụng cũng như ngày giờ và các thông tin về Web Server sử dụng cũng như các thành phần khác…

Ví dụ một điều tra OS đối với domain vnexpress.net

Ưu điểm của kỹ thuật Passive OS Fingerprint là không thực hiện scanning mà sniffing, và từ kết quả phân tích sniffing với các dấu hiệu tương ứng so với database đưa ra kết quả của OS đang chạy là gì, cho nên không làm “ồn ào” đối với hệ thống đích như là thực hiện Active OS Fingerprinting. Tất nhiên nhược điểm lớn nhất của kỹ thuật này là tính chính xác không cao

Link download demo tại đây

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: