**** Foot Printing ****
Thân chào tất cả các bạn , nhằm đáp ứng nhu cầu học hỏi trong hacking và security, fantomas311 đã biên soạn một bộ bài viết "Basic hacking" và các bài viết liên quan đến hacking hệ thống để giới thiệu đến các bạn . Xin khuyến cáo với những ai muốn học hack một cách fast food là các bạn không nên đọc bài viết này ! Vì tôi không post những bài dạy hack cho các bạn , mà tôi chỉ post bài theo phương châm "hack như thế nào" . Hãy đọc , suy nghĩ và làm bằng đôi tay và khối óc của mình !!
Trước khi các hacker thực sự bắt tay vào việc, họ phải tiến hành 3 bước cơ bản là in dấu ấn (foot printing) , Quét (scanning) và điểm danh(enumeration). Bài viết này đề cập đến kỹ thuật in dấu ấn và những vấn đề liên quan.
**In dấu ấn là gì ??**
In dấu ấn là việc dùng các công cụ và kỹ thuật để lấy thông tin cơ bản đầu tiên về một tổ chức hoặc một chuyên khu web muốn tấn công ( trong bài viết này tạm gọi là victim). Việc in dấu ấn có hệ thống một tổ chức sẽ cho phép hacker thấy rõ tình hình an ninh ( độ bảo mật) của tổ chức đó.
**Tại sao cần in dấu ấn ??**
Foot Printing giúp có thể định danh tất cả các mẩu tin và nắm những thông tin cơ bản (đôi khi khá quan trọng) về victim
** Kỹ thuật in dấu ấn **
Có rất nhiều kỹ thuật in dấu ấn khác nhau, bài viết này sẽ mô tả các bước giúp bạn hoàn thành một đợt phân tích dấu ấn kỹ lưỡng.
*Bước 1:
định phạm vi hoạt động: Bước này nói cho đơn giản là bạn phải xác định rõ cái mà bạn muốn hack là gì ( một công ty , một server hay chỉ là một web cá nhân ... )
- Đối với người mới bắt đầu, bạn nên đọc kỹ và ghi lại những thông tin mà trang web cung cấp cho bạn ( những thông tin về nó , như số ĐT , mail của webmaster , địa chỉ ....). Có nhiều khi những thông tin này lại là "chiếc chìa khoá vàng" cho bạn Những mục đáng quan tâm bao gồm :
+ Các vị trí
+ Các công ty hoặc thực thể liên quan
+ Các kết nối hoặc tin tức có được
+ Các ngôn ngữ bảo mật nêu rõ các cơ chế bảo mật đã thiết đặt ( cấu hình fire wall chẳng hạn )
+ Các số điện thoại , tên liên lạc và Email .....
Ngoài ra, bạn cũng có thể xem lại mã nguồn HTML để tìm những sơ hở trong lập trình , bên cạnh đó , những chú thích nằm trong các thẻ HTML như < ! và ~ cũng là một " tài nguyên" đáng khai thác !! ( thí dụ như )
Sau khi nghiên cứu trang web , bạn tìm thêm những thông tin cung cấp các manh mối bổ sung về tình trạng của tổ chức và tình hình an ninh của nó ( trên báo chí , các bản tin trên NET chẳng hạn) . Những động cơ tìm kiếm là chìa khoá cho bạn . Sau đây là một vài động cơ tìm kiếm :
http://google.com http://sec.gov
http://cyberarmy.com Http://deja.com
http://networksolution.com http://dogpile.com
http://astalavista.com http://ipswich.com
http://arin.net/whois/ http://ferretsoft.com
Okie, hãy tiến hành bước đấu tiên trong kỹ thuật Hack !! B)
*Bước 2 : điểm danh mạng
Trong bước này , việc đầu tiên là định danh các domain và mạng có liên quan đến victim . Muốn làm điều này , hãy truy xuất dữ liệu của network solution ( www.networksolution.com ) và American Registry for Internet Number ( www.arin.net )
Một số kiểu truy vấn :
+Organizational : Tất cả các thông tin có liên quan đến một tổ chức cụ thể
+Domain:---------------------------------- domain -------
+Network:-----------------------------------mạng hoặc IP
+Point of contact:-------------------------1 cá nhân cụ thể ( admin )
*Bước 3 : Truy vấn DNS
Sau khi định danh các domain của tổ chức đích (victim), bạn có thể bắt đầu truy vấn DNS . Nếu DNS được cấu hình bấp bênh, ta có thể moi được thông tin tiết lộ về tổ chức . Một trong những cách cấu hình sai nghiêm trọng nhất mà một điều hành viên có thể mắc phải là cho phép người dùng internet không tin cậy thực hiện chuyển giao miền DNS ( zone transfer). Sự cố này có thể cho thấy tên hệ chủ, các IP ẩn .... nói chung là các thông tin muốn che dấu ! Việc cung cấp địa chỉ IP bên trong cho 1 người dùng không tin cậy trên internet cũng giống như cung cấp bản đồ ngôi nhà mình cho kẻ trộm vậy !!
Đến đây, có lẽ bạn có một câu hỏi " Zone transfer - how ??" . Xin thưa là đây là một vấn đề khác, có lẽ tôi sẽ đề cập trong một bài viết khác của mình để tránh loãng bài viết . Kết thúc bước 3 tại đây !
*Bước 4: trinh sát mạng
Sau khi đã có bản đồ trong tay, thì đây là giai đoạn "xâm nhập thực tế" để xác định lộ trình truy cập tiềm năng mạng ( tạm hiểu như là việc do thám để xác định các con đường trước khi tiến hành đánh cướp á mà ! )
Để thực hiện công việc này , xin giới hiệu các bạn chương trình trace route ( ftp://ftp.ec.lbl/traceroute.tar.z ) có trong hầu hết phiên bản của Unix & WinNT . Trong WinNT , nó có tên là tracert.
Trace route là một công cụ chẩn đoán do Van Jacobson viết để cho phép xem tuyến đường mà một gói tin IP sẽ theo từ server này sang server khác
Nếu bạn không rành các lệnh trong Unix , có thể dùng VIsual Route ( http://www.visualroute.com ) để thực hiện tiến trình trinh sát(tracerouting) này . Giao diện của visual route trông rất bắt mắt & dễ sử dụng. Nhưng không có tác dụng tốt với các mạng có quy mô lớn .
Ngoài ra , bạn còn có thể thực hiện một kỹ thuật phức tạp hơn gọi là "tiến trình quét giao thức firewall" (sẽ đề cập ở Basic hacking II - Scanning của fantomas311 )
Vậy là công đoạn đầu tiên của việc hack vào một hệ thống đã xong . Bây giờ, sau khi đã thực hiện hoàn tất các bước trên, bạn ( tôi chỉ nói những người đã làm đúng các bước trên) có thể tự hỏi : "vậy có tác dụng gì ??" Làm gì tiếp theo??" "những thông tin thu được có tác dụng gì?" " Có nhất thiết phải thực hiện bước này không ?? "
Nhiều câu hỏi quá ! Nhưng xin để các bạn tự trả lời vậy ! Tôi chỉ trả lời 1 câu thôi ! Bước tiếp theo của quá trình hack - theo lý thuyết - là Scanning . Quá trình Scanning sẽ được đề cập trong bài viết tiếp theo của fantomas311 : " Basic Hacking part II - Scanning"
Hy vọng bài viết này làm bạn hài lòng
Sơ Lược Trace Route
Trong bài viết trên tôi đã đề cập đến traceroute. Vậy Traceroute là gì ?? Mời các bạn xem bài viết sau:
Traceroute là gì?
Traceroute là một chương trình cho phép bạn xác định được đường đi của các gói packets từ máy bạn đến hệ thống đích trên mạng Internet.
Một ví dụ về Traceroute!
Traceroute có thể làm được gì? Bạn hãy xem ví dụ sau sẽ rõ!
C:\windows>tracert 203.94.12.54
Tracing route to 203.94.12.54 over a maximum of 30 hops
1 abc.netzero.com (232.61.41.251) 2 ms 1 ms 1 ms
2 xyz.Netzero.com (232.61.41.0) 5 ms 5 ms 5 ms
3 232.61.41.10 (232.61.41.251) 9 ms 11 ms 13 ms
4 we21.spectranet.com (196.01.83.12) 535 ms 549 ms 513 ms
5 isp.net.ny (196.23.0.0) 562 ms 596 ms 600 ms
6 196.23.0.25 (196.23.0.25) 1195 ms1204 ms
7 backbone.isp.ny (198.87.12.11) 1208 ms1216 ms1233 ms
8 asianet.com (202.12.32.10) 1210 ms1239 ms1211 ms
9 south.asinet.com (202.10.10.10) 1069 ms1087 ms1122 ms
10 backbone.vsnl.net.in (203.98.46.01) 1064 ms1109 ms1061 ms
11 newdelhi-01.backbone.vsnl.net.in (203.102.46.01) 1185 ms1146 ms1203 ms
12 newdelhi-00.backbone.vsnl.net.in (203.102.46.02) ms1159 ms1073 ms
13 mtnl.net.in (203.194.56.00) 1052 ms 642 ms 658 ms
Tôi cần biết đường đi từ máy tôi đến một host trên mạng Internet có địa chỉ ip là 203.94.12.54. Tôi cần phải tracert đến nó! Như bạn thấy ở trên, các gói packets từ máy tôi muốn đến được 203.94.12.54 phải đi qua 13 hops(mắt xích) trên mạng. Đây là đưòng đi của các gói packets:
Netzero(ISP đã gởi dữ liệu đi) -> Spectranet (một nhà công cấp mạng xương sống - Backbone Provider) -> New York ISP -> New York Backbone -> Asia -> South Asia -> India Backbone -> New Delhi Backbone -> một router khác trong New Delhi Backbone -> New Delhi ISP
Như vậy, host có địa chỉ ip 203.94.12.54 nằm ở New Delhi, India, South Asia! Bạn cũng có thể telnet đến 203.94.12.54 trên cổng 13(datetime) để xác định giờ GMT qua đó bạn có thể biết được vị trí của host này(yêu cầu là host 203.94.12.54 phải chạy daemon datetime và được định cấu hình đúng về thời gian)!
Traceroute hoạt động như thế nào?
Trước hết, bạn cần biết về ICMP, TTL và cách làm việc của các routers(bộ định tuyến)!
Những kiến thức cơ bản
ICMP - Internet Control Message Protocol. ICMP được dùng để thông báo các lỗi xảy ra trong quá trình truyền đi của các gói dữ liệu trên mạng. ICMP thuộc tầng vận huyển - Transpoort Layer! Tầng ứng dụng HTTP FTP Telnet Finger SSH DNS
POP3/IMAP SMTP Gopher BGP
Time/NTP Whois TACACS+ SSL DNS SNMP RIP
RADIUS Archie
Traceroute tftp Ping
Tầng vận chuyển
TCP
UDP
ICMP
OSPF
Tầng Internet
IP
ARP
Tầng vật lí Ethernet/802.3 Token Ring (802.5) SNAP/802.2 X.25 FDDI ISDN
Frame Relay SMDS ATM Wireless (WAP, CDPD, 802.11)
Fibre Channel DDS/DS0/T-carrier/E-carrier SONET/SDH DWDM
PPP HDLC SLIP/CSLIP xDSL Cable Modem (DOCSIS)
Tất cả các ICMP messages đều được chuyển đi cùng với các IP datagrams. Mỗi ICMP message được gói trong IP datagram sẽ có dạng như sau:
+---------------------+-------------------------+
| IP Header(20 bytes) | ICMP message (32 bytes) |
+---------------------+-------------------------+
Sau đây là cấu trúc của một IMCP message: (tham khảo RFC792 để biết thêm!)
0 7 8 15 16 31
+-----------------+-----------------+-----------------+
| Type (0 or 8) | Code (0) | 16-bit Checksum |
+-----------------+-----------------+-----------------+
| Indentifier | sequence number |
+-----------------+-----------------+-----------------+
| |
| Optional Data (nội dung tùy thuộc vào Type và Code) |
| |
+-----------------------------------------------------+
trường type có 15 giá trị khác nhau, tùy thuộc vào từng loại ICMP error message cụ thể. Ví dụ type=3 để chỉ định cho thông báo lỗi "Không đến được đích" - "Destination unreachable" error message!
trường code = sub-error dùng để xác định chính xác lỗi đã xảy ra. Ví dụ, type=3 và code=0 nghĩa là "Network Unreachable"(không đến được mạng); nếu type=3, code=1 nghĩa là "Host Unreachable"(không đến được host)...
TTL - Time to Live. TTL là một trường 8 bit trong IP header(bạn hãy xem lại cấu trúc của IP header!). TTL là thời gian gói dữ liệu tồn tại trên mạng trước khi nó bị bỏ qua. Người gởi dữ liệu đi sẽ xác định một giá trị TTL trước, thường là từ 32 -> 64. Giá trị này sẽ được giảm đi một khi một khi được chuyển qua một bộ định tuyến trên mạng. Khi giá trị này bằng 0, datagram này sẽ bị bỏ qua và giao thức ICMP sẽ báo lỗi về cho người gởi. Điều này sẽ tránh cho datagram này đi vào một vòng lặp vô tận qua các bộ định tuyến.
Mỗi bộ định tuyến khi nhận được IP datagram sẽ giảm giá trị TTL của datagram này đi một. Hầu hết các bộ định tuyến đều không giữ lại datagram này trong thời gian quá 1 giây trước khi chuyển datagram này đi. Nên giá trị TTL có thể coi bằng hop(counter) = số bộ định tuyến mà datagram này vừa vượt qua.
Khi bộ định tuyến nhận được một datagram có trường TTL bằng 0 hoặc 1, nó sẽ không chuyển datagram này đi tiếp. Thay vào đó, nó sẽ bỏ qua datagram này và gởi một ICMP message "Time Exceeded"(quá thời gian) trở lại cho người đã gởi datagram này! Vì ICMP message mà bộ định tuyến gởi trở lại cho người gởi có địa chỉ nguồn - source address là địa chỉ ip của bộ định tuyến này nên người gởi có thể biết được địa chỉ ip của router này!
Cách làm việc của traceroute!
Traceroute gởi một IP datagram có TTL=1 đến hệ thống đích. Router đầu tiên nhận được datagram này sẽ giảm giá trị TTL đi một -> TTL=0 và router này sẽ bỏ qua datagram này(không gởi nó đi tiếp!) và gởi một ICMP error message với địa chỉ ip nguồn là địa chỉ của nó đến máy bạn. Như vậy router có thể xác định địa chỉ ip của router thứ nhất! Sau đó, traceroute sẽ gởi một datagram mới đi với giá trị TTL=2(1+1=2) đến hệ thống đích. Router đầu tiên sẽ giảm giá trị của TTL đi một -> TTL=1(2-1=1) và chuyển datagram này sang router thứ 2. Router thứ 2 nhận được datagram có TTL=1 sẽ giảm TTL=0. Rounter 2 nhận thấy TTL=0 nên nó sẽ không chuyển datagram này đi tiếp. Router 2 sẽ gởi trở lại máy bạn một ICMP error message với địa chỉ ip nguồn là địa chỉ ip của nó(router 2). Như vậy trình traceroute trên máy bạn sẽ biết được router thứ 2 mà datagram đã đi qua. Traceroute sẽ tiếp tục gởi một datagram khác có TTL=3(2+1=3) đi và lặp lại quá trình trên cho đến khi datagram đến được hệ thống đích!
Nếu bây giờ IP datagram đã đến được đích, TTL=1. Host đích sẽ bỏ qua datagram này và nó cũng sẽ không gởi "Time Exceeded" ICMP error message. Như vậy thì bạn sẽ không thể nào biết được là mình đã đến đích chưa?! Traceroute dùng một cơ chế khác như sau:
Traceroute gởi UDP datagrams đến host đích trên các cổng UDP có số hiệu lớn(>30000). Sở dĩ nó chọn các cổng có giá trị lớn vì thường không có ứng dụng nào đang lắng nghe ở các cổng này. Khi host đích nhận được UDP datagram này, nó sẽ gởi trả lại một ICMP error message "Port Unreachable"(không đến được cổng) cho traceroute. Bây giờ thì traceroute có thể phân biệt được sự khác nhau giữa ICMP error message "Time Exceeded" với "Port Unreachable" để biết được đã đến được đích hay chưa?!
Ghi chú: ICMP error message "Time Exceeded" có type=1 và code=0; ICMP eror message "Port Unreachable" có type=3 và code=3
Tổng kết: traceroute gởi UDP datagrams đến host đích với giá trị TTL=1 và được tăng sau mỗi lần để xác định các routers mà datagrams đã đi qua. Mỗi router sẽ gởi trở về một ICMP message "Time Exceeded". Riêng hệ thống đích sẽ gởi trở lại cho traceroute một ICMP message "Port Unreachable". Traceroute dựa vào sự khác biệt này để xác định xem đã đến được đích chưa?!
Ví dụ cuối cùng!
host2 # traceroute xyz.com
traceroute to xyz.com (202.xx.12.34), 30 hops max, 40 byte packets
1 isp.net (202.xy.34.12) 20ms 10ms 10ms
2 xyz.com (202.xx.12.34) 130ms 130ms 130ms
Dòng đầu tiên cho biết hostname và địa chỉ IP của hệ thống đích. Dòng này còn cho chúng ta biết thêm giá trị TTL<=30 và kích thước của datagram là 40 bytes(20-bytes IP Header + 8-bytes UDP Header + 12-bytes user data).
Dòng thứ 2 cho biết router đầu tiên nhận được datagram là 202.xy.34.12, giá trị của TTL khi gởi đến router này là 1. Router này sẽ gởi trở lại cho chương trình traceroute một ICMP message error "Time Exceeded". Traceroute sẽ gởi tiếp một datagram đến hệ thống đích.
Dòng thứ 3, xyz.com(202.xx.12.34) nhận được datagram có TTL=1(router thứ nhất đã giảm một trước đó - TTL=2-1=1). Tuy nhiên, xyz.com không phải là một router, nó sẽ gởi trở lại cho traceroute một ICMP error message "Port Unreachable". Khi nhận được ICMP message này, traceroute sẽ biết được đã đến được hệ thống đích xyz.com và kết thúc nhiệm vụ tại đây.
Trong trường hợp router không trả lời sau 5 giây, traceroute sẽ in ra một dấu sao "*"(không biết) và tiếp tục gởi datagram khác đến host đích!
Tác giả : Fantomas311 - Vietnam Security
Thân chào tất cả các bạn , nhằm đáp ứng nhu cầu học hỏi trong hacking và security, fantomas311 đã biên soạn một bộ bài viết "Basic hacking" và các bài viết liên quan đến hacking hệ thống để giới thiệu đến các bạn . Xin khuyến cáo với những ai muốn học hack một cách fast food là các bạn không nên đọc bài viết này ! Vì tôi không post những bài dạy hack cho các bạn , mà tôi chỉ post bài theo phương châm "hack như thế nào" . Hãy đọc , suy nghĩ và làm bằng đôi tay và khối óc của mình !!
Trước khi các hacker thực sự bắt tay vào việc, họ phải tiến hành 3 bước cơ bản là in dấu ấn (foot printing) , Quét (scanning) và điểm danh(enumeration). Bài viết này đề cập đến kỹ thuật in dấu ấn và những vấn đề liên quan.
**In dấu ấn là gì ??**
In dấu ấn là việc dùng các công cụ và kỹ thuật để lấy thông tin cơ bản đầu tiên về một tổ chức hoặc một chuyên khu web muốn tấn công ( trong bài viết này tạm gọi là victim). Việc in dấu ấn có hệ thống một tổ chức sẽ cho phép hacker thấy rõ tình hình an ninh ( độ bảo mật) của tổ chức đó.
**Tại sao cần in dấu ấn ??**
Foot Printing giúp có thể định danh tất cả các mẩu tin và nắm những thông tin cơ bản (đôi khi khá quan trọng) về victim
** Kỹ thuật in dấu ấn **
Có rất nhiều kỹ thuật in dấu ấn khác nhau, bài viết này sẽ mô tả các bước giúp bạn hoàn thành một đợt phân tích dấu ấn kỹ lưỡng.
*Bước 1:
định phạm vi hoạt động: Bước này nói cho đơn giản là bạn phải xác định rõ cái mà bạn muốn hack là gì ( một công ty , một server hay chỉ là một web cá nhân ... )
- Đối với người mới bắt đầu, bạn nên đọc kỹ và ghi lại những thông tin mà trang web cung cấp cho bạn ( những thông tin về nó , như số ĐT , mail của webmaster , địa chỉ ....). Có nhiều khi những thông tin này lại là "chiếc chìa khoá vàng" cho bạn Những mục đáng quan tâm bao gồm :
+ Các vị trí
+ Các công ty hoặc thực thể liên quan
+ Các kết nối hoặc tin tức có được
+ Các ngôn ngữ bảo mật nêu rõ các cơ chế bảo mật đã thiết đặt ( cấu hình fire wall chẳng hạn )
+ Các số điện thoại , tên liên lạc và Email .....
Ngoài ra, bạn cũng có thể xem lại mã nguồn HTML để tìm những sơ hở trong lập trình , bên cạnh đó , những chú thích nằm trong các thẻ HTML như < ! và ~ cũng là một " tài nguyên" đáng khai thác !! ( thí dụ như )
Sau khi nghiên cứu trang web , bạn tìm thêm những thông tin cung cấp các manh mối bổ sung về tình trạng của tổ chức và tình hình an ninh của nó ( trên báo chí , các bản tin trên NET chẳng hạn) . Những động cơ tìm kiếm là chìa khoá cho bạn . Sau đây là một vài động cơ tìm kiếm :
http://google.com http://sec.gov
http://cyberarmy.com Http://deja.com
http://networksolution.com http://dogpile.com
http://astalavista.com http://ipswich.com
http://arin.net/whois/ http://ferretsoft.com
Okie, hãy tiến hành bước đấu tiên trong kỹ thuật Hack !! B)
*Bước 2 : điểm danh mạng
Trong bước này , việc đầu tiên là định danh các domain và mạng có liên quan đến victim . Muốn làm điều này , hãy truy xuất dữ liệu của network solution ( www.networksolution.com ) và American Registry for Internet Number ( www.arin.net )
Một số kiểu truy vấn :
+Organizational : Tất cả các thông tin có liên quan đến một tổ chức cụ thể
+Domain:---------------------------------- domain -------
+Network:-----------------------------------mạng hoặc IP
+Point of contact:-------------------------1 cá nhân cụ thể ( admin )
*Bước 3 : Truy vấn DNS
Sau khi định danh các domain của tổ chức đích (victim), bạn có thể bắt đầu truy vấn DNS . Nếu DNS được cấu hình bấp bênh, ta có thể moi được thông tin tiết lộ về tổ chức . Một trong những cách cấu hình sai nghiêm trọng nhất mà một điều hành viên có thể mắc phải là cho phép người dùng internet không tin cậy thực hiện chuyển giao miền DNS ( zone transfer). Sự cố này có thể cho thấy tên hệ chủ, các IP ẩn .... nói chung là các thông tin muốn che dấu ! Việc cung cấp địa chỉ IP bên trong cho 1 người dùng không tin cậy trên internet cũng giống như cung cấp bản đồ ngôi nhà mình cho kẻ trộm vậy !!
Đến đây, có lẽ bạn có một câu hỏi " Zone transfer - how ??" . Xin thưa là đây là một vấn đề khác, có lẽ tôi sẽ đề cập trong một bài viết khác của mình để tránh loãng bài viết . Kết thúc bước 3 tại đây !
*Bước 4: trinh sát mạng
Sau khi đã có bản đồ trong tay, thì đây là giai đoạn "xâm nhập thực tế" để xác định lộ trình truy cập tiềm năng mạng ( tạm hiểu như là việc do thám để xác định các con đường trước khi tiến hành đánh cướp á mà ! )
Để thực hiện công việc này , xin giới hiệu các bạn chương trình trace route ( ftp://ftp.ec.lbl/traceroute.tar.z ) có trong hầu hết phiên bản của Unix & WinNT . Trong WinNT , nó có tên là tracert.
Trace route là một công cụ chẩn đoán do Van Jacobson viết để cho phép xem tuyến đường mà một gói tin IP sẽ theo từ server này sang server khác
Nếu bạn không rành các lệnh trong Unix , có thể dùng VIsual Route ( http://www.visualroute.com ) để thực hiện tiến trình trinh sát(tracerouting) này . Giao diện của visual route trông rất bắt mắt & dễ sử dụng. Nhưng không có tác dụng tốt với các mạng có quy mô lớn .
Ngoài ra , bạn còn có thể thực hiện một kỹ thuật phức tạp hơn gọi là "tiến trình quét giao thức firewall" (sẽ đề cập ở Basic hacking II - Scanning của fantomas311 )
Vậy là công đoạn đầu tiên của việc hack vào một hệ thống đã xong . Bây giờ, sau khi đã thực hiện hoàn tất các bước trên, bạn ( tôi chỉ nói những người đã làm đúng các bước trên) có thể tự hỏi : "vậy có tác dụng gì ??" Làm gì tiếp theo??" "những thông tin thu được có tác dụng gì?" " Có nhất thiết phải thực hiện bước này không ?? "
Nhiều câu hỏi quá ! Nhưng xin để các bạn tự trả lời vậy ! Tôi chỉ trả lời 1 câu thôi ! Bước tiếp theo của quá trình hack - theo lý thuyết - là Scanning . Quá trình Scanning sẽ được đề cập trong bài viết tiếp theo của fantomas311 : " Basic Hacking part II - Scanning"
Hy vọng bài viết này làm bạn hài lòng
Sơ Lược Trace Route
Trong bài viết trên tôi đã đề cập đến traceroute. Vậy Traceroute là gì ?? Mời các bạn xem bài viết sau:
Traceroute là gì?
Traceroute là một chương trình cho phép bạn xác định được đường đi của các gói packets từ máy bạn đến hệ thống đích trên mạng Internet.
Một ví dụ về Traceroute!
Traceroute có thể làm được gì? Bạn hãy xem ví dụ sau sẽ rõ!
C:\windows>tracert 203.94.12.54
Tracing route to 203.94.12.54 over a maximum of 30 hops
1 abc.netzero.com (232.61.41.251) 2 ms 1 ms 1 ms
2 xyz.Netzero.com (232.61.41.0) 5 ms 5 ms 5 ms
3 232.61.41.10 (232.61.41.251) 9 ms 11 ms 13 ms
4 we21.spectranet.com (196.01.83.12) 535 ms 549 ms 513 ms
5 isp.net.ny (196.23.0.0) 562 ms 596 ms 600 ms
6 196.23.0.25 (196.23.0.25) 1195 ms1204 ms
7 backbone.isp.ny (198.87.12.11) 1208 ms1216 ms1233 ms
8 asianet.com (202.12.32.10) 1210 ms1239 ms1211 ms
9 south.asinet.com (202.10.10.10) 1069 ms1087 ms1122 ms
10 backbone.vsnl.net.in (203.98.46.01) 1064 ms1109 ms1061 ms
11 newdelhi-01.backbone.vsnl.net.in (203.102.46.01) 1185 ms1146 ms1203 ms
12 newdelhi-00.backbone.vsnl.net.in (203.102.46.02) ms1159 ms1073 ms
13 mtnl.net.in (203.194.56.00) 1052 ms 642 ms 658 ms
Tôi cần biết đường đi từ máy tôi đến một host trên mạng Internet có địa chỉ ip là 203.94.12.54. Tôi cần phải tracert đến nó! Như bạn thấy ở trên, các gói packets từ máy tôi muốn đến được 203.94.12.54 phải đi qua 13 hops(mắt xích) trên mạng. Đây là đưòng đi của các gói packets:
Netzero(ISP đã gởi dữ liệu đi) -> Spectranet (một nhà công cấp mạng xương sống - Backbone Provider) -> New York ISP -> New York Backbone -> Asia -> South Asia -> India Backbone -> New Delhi Backbone -> một router khác trong New Delhi Backbone -> New Delhi ISP
Như vậy, host có địa chỉ ip 203.94.12.54 nằm ở New Delhi, India, South Asia! Bạn cũng có thể telnet đến 203.94.12.54 trên cổng 13(datetime) để xác định giờ GMT qua đó bạn có thể biết được vị trí của host này(yêu cầu là host 203.94.12.54 phải chạy daemon datetime và được định cấu hình đúng về thời gian)!
Traceroute hoạt động như thế nào?
Trước hết, bạn cần biết về ICMP, TTL và cách làm việc của các routers(bộ định tuyến)!
Những kiến thức cơ bản
ICMP - Internet Control Message Protocol. ICMP được dùng để thông báo các lỗi xảy ra trong quá trình truyền đi của các gói dữ liệu trên mạng. ICMP thuộc tầng vận huyển - Transpoort Layer! Tầng ứng dụng HTTP FTP Telnet Finger SSH DNS
POP3/IMAP SMTP Gopher BGP
Time/NTP Whois TACACS+ SSL DNS SNMP RIP
RADIUS Archie
Traceroute tftp Ping
Tầng vận chuyển
TCP
UDP
ICMP
OSPF
Tầng Internet
IP
ARP
Tầng vật lí Ethernet/802.3 Token Ring (802.5) SNAP/802.2 X.25 FDDI ISDN
Frame Relay SMDS ATM Wireless (WAP, CDPD, 802.11)
Fibre Channel DDS/DS0/T-carrier/E-carrier SONET/SDH DWDM
PPP HDLC SLIP/CSLIP xDSL Cable Modem (DOCSIS)
Tất cả các ICMP messages đều được chuyển đi cùng với các IP datagrams. Mỗi ICMP message được gói trong IP datagram sẽ có dạng như sau:
+---------------------+-------------------------+
| IP Header(20 bytes) | ICMP message (32 bytes) |
+---------------------+-------------------------+
Sau đây là cấu trúc của một IMCP message: (tham khảo RFC792 để biết thêm!)
0 7 8 15 16 31
+-----------------+-----------------+-----------------+
| Type (0 or 8) | Code (0) | 16-bit Checksum |
+-----------------+-----------------+-----------------+
| Indentifier | sequence number |
+-----------------+-----------------+-----------------+
| |
| Optional Data (nội dung tùy thuộc vào Type và Code) |
| |
+-----------------------------------------------------+
trường type có 15 giá trị khác nhau, tùy thuộc vào từng loại ICMP error message cụ thể. Ví dụ type=3 để chỉ định cho thông báo lỗi "Không đến được đích" - "Destination unreachable" error message!
trường code = sub-error dùng để xác định chính xác lỗi đã xảy ra. Ví dụ, type=3 và code=0 nghĩa là "Network Unreachable"(không đến được mạng); nếu type=3, code=1 nghĩa là "Host Unreachable"(không đến được host)...
TTL - Time to Live. TTL là một trường 8 bit trong IP header(bạn hãy xem lại cấu trúc của IP header!). TTL là thời gian gói dữ liệu tồn tại trên mạng trước khi nó bị bỏ qua. Người gởi dữ liệu đi sẽ xác định một giá trị TTL trước, thường là từ 32 -> 64. Giá trị này sẽ được giảm đi một khi một khi được chuyển qua một bộ định tuyến trên mạng. Khi giá trị này bằng 0, datagram này sẽ bị bỏ qua và giao thức ICMP sẽ báo lỗi về cho người gởi. Điều này sẽ tránh cho datagram này đi vào một vòng lặp vô tận qua các bộ định tuyến.
Mỗi bộ định tuyến khi nhận được IP datagram sẽ giảm giá trị TTL của datagram này đi một. Hầu hết các bộ định tuyến đều không giữ lại datagram này trong thời gian quá 1 giây trước khi chuyển datagram này đi. Nên giá trị TTL có thể coi bằng hop(counter) = số bộ định tuyến mà datagram này vừa vượt qua.
Khi bộ định tuyến nhận được một datagram có trường TTL bằng 0 hoặc 1, nó sẽ không chuyển datagram này đi tiếp. Thay vào đó, nó sẽ bỏ qua datagram này và gởi một ICMP message "Time Exceeded"(quá thời gian) trở lại cho người đã gởi datagram này! Vì ICMP message mà bộ định tuyến gởi trở lại cho người gởi có địa chỉ nguồn - source address là địa chỉ ip của bộ định tuyến này nên người gởi có thể biết được địa chỉ ip của router này!
Cách làm việc của traceroute!
Traceroute gởi một IP datagram có TTL=1 đến hệ thống đích. Router đầu tiên nhận được datagram này sẽ giảm giá trị TTL đi một -> TTL=0 và router này sẽ bỏ qua datagram này(không gởi nó đi tiếp!) và gởi một ICMP error message với địa chỉ ip nguồn là địa chỉ của nó đến máy bạn. Như vậy router có thể xác định địa chỉ ip của router thứ nhất! Sau đó, traceroute sẽ gởi một datagram mới đi với giá trị TTL=2(1+1=2) đến hệ thống đích. Router đầu tiên sẽ giảm giá trị của TTL đi một -> TTL=1(2-1=1) và chuyển datagram này sang router thứ 2. Router thứ 2 nhận được datagram có TTL=1 sẽ giảm TTL=0. Rounter 2 nhận thấy TTL=0 nên nó sẽ không chuyển datagram này đi tiếp. Router 2 sẽ gởi trở lại máy bạn một ICMP error message với địa chỉ ip nguồn là địa chỉ ip của nó(router 2). Như vậy trình traceroute trên máy bạn sẽ biết được router thứ 2 mà datagram đã đi qua. Traceroute sẽ tiếp tục gởi một datagram khác có TTL=3(2+1=3) đi và lặp lại quá trình trên cho đến khi datagram đến được hệ thống đích!
Nếu bây giờ IP datagram đã đến được đích, TTL=1. Host đích sẽ bỏ qua datagram này và nó cũng sẽ không gởi "Time Exceeded" ICMP error message. Như vậy thì bạn sẽ không thể nào biết được là mình đã đến đích chưa?! Traceroute dùng một cơ chế khác như sau:
Traceroute gởi UDP datagrams đến host đích trên các cổng UDP có số hiệu lớn(>30000). Sở dĩ nó chọn các cổng có giá trị lớn vì thường không có ứng dụng nào đang lắng nghe ở các cổng này. Khi host đích nhận được UDP datagram này, nó sẽ gởi trả lại một ICMP error message "Port Unreachable"(không đến được cổng) cho traceroute. Bây giờ thì traceroute có thể phân biệt được sự khác nhau giữa ICMP error message "Time Exceeded" với "Port Unreachable" để biết được đã đến được đích hay chưa?!
Ghi chú: ICMP error message "Time Exceeded" có type=1 và code=0; ICMP eror message "Port Unreachable" có type=3 và code=3
Tổng kết: traceroute gởi UDP datagrams đến host đích với giá trị TTL=1 và được tăng sau mỗi lần để xác định các routers mà datagrams đã đi qua. Mỗi router sẽ gởi trở về một ICMP message "Time Exceeded". Riêng hệ thống đích sẽ gởi trở lại cho traceroute một ICMP message "Port Unreachable". Traceroute dựa vào sự khác biệt này để xác định xem đã đến được đích chưa?!
Ví dụ cuối cùng!
host2 # traceroute xyz.com
traceroute to xyz.com (202.xx.12.34), 30 hops max, 40 byte packets
1 isp.net (202.xy.34.12) 20ms 10ms 10ms
2 xyz.com (202.xx.12.34) 130ms 130ms 130ms
Dòng đầu tiên cho biết hostname và địa chỉ IP của hệ thống đích. Dòng này còn cho chúng ta biết thêm giá trị TTL<=30 và kích thước của datagram là 40 bytes(20-bytes IP Header + 8-bytes UDP Header + 12-bytes user data).
Dòng thứ 2 cho biết router đầu tiên nhận được datagram là 202.xy.34.12, giá trị của TTL khi gởi đến router này là 1. Router này sẽ gởi trở lại cho chương trình traceroute một ICMP message error "Time Exceeded". Traceroute sẽ gởi tiếp một datagram đến hệ thống đích.
Dòng thứ 3, xyz.com(202.xx.12.34) nhận được datagram có TTL=1(router thứ nhất đã giảm một trước đó - TTL=2-1=1). Tuy nhiên, xyz.com không phải là một router, nó sẽ gởi trở lại cho traceroute một ICMP error message "Port Unreachable". Khi nhận được ICMP message này, traceroute sẽ biết được đã đến được hệ thống đích xyz.com và kết thúc nhiệm vụ tại đây.
Trong trường hợp router không trả lời sau 5 giây, traceroute sẽ in ra một dấu sao "*"(không biết) và tiếp tục gởi datagram khác đến host đích!