Phần 1 : Phân tích gói tin với WIRESHARK
Phần 2 :
Xử lý các tính huống thực tế với WireShark (1)
Phần 3 : Xử lý các tính huống thực tế với WireShark (2)
Địa chỉ trên Google Docs:
http://docs.google.com/View?docid=dg34rcvn_22cn7krtjs
Xử lý các tính huống thực tế với WireShark (1)
http://docs.google.com/Doc?id=dg34rcvn_78hs7d6cgc
Xử lý các tính huống thực tế với WireShark (2)
http://docs.google.com/Doc?id=dg34rcvn_60c9v5jgcb
(Nội dung chi tiết của http://docs.google.com/View?docid=dg34rcvn_22cn7krtjs trong bài Phân tích gói tin với WIRESHARK)
Hàng ngày, có hàng triệu vấn
đề lỗi trong một mạng máy tính,
từ việc đơn giản là nhiễm
Spyware cho đến việc phức tạp như
lỗi cấu hình router, và các vấn
đề này không thể được
xử lý tất cả lập tức. Tốt
nhất là chúng ta có thể hi vọng
thực hiện công việc đó bằng
cách chuẩn bị đầy đủ các
kiến thức và các công cụ tương
ứng với các vấn đề. Tất cả
các vấn đề trên mạng đều
xuất phát ở mức gói, nơi mà
không có gì được che dấu
đối với chúng ta, nơi mà không
có thứ gì bị ẩn đi bởi các
cấu trúc menu, các hình ảnh bắt
mắt hoặc là các nhân viên không
đáng tin cậy. Không có gì bí
mật ở đây, và chúng ta có
thể điều khiển được mạng
và giải quyết các vấn đề.
Đây chính là thế giới của
phân tích gói tin.
Thế nào là phân
tích gói tin?
Phân tích gói tin, thông thường
được quy vào việc nghe các gói
tin và phân tích giao thức, mô tả
quá trình bắt và phiên dịch
các dữ liệu sống như là các
luồng đang lưu chuyển trong mạng với
mục tiêu hiểu rõ hơn điều gì
đang diễn ra trên mạng. Phân tích
gói tin thường được thực hiện
bởi một packet sniffer, một công cụ
được sử dụng để bắt dữ
liệu thô trên đang lưu chuyển trên
đường dây. Phân tích gói
tin có thể giúp chung ta hiểu cấu tạo
mạng, ai đang ở trên mạng, xác
định ai hoặc cái gì đang sử
dụng băng thông, chỉ ra những thời
điểm mà việc sử dụng mạng
đạt cao điểm, chỉ ra các khả
năng tấn công và các hành vi
phá hoại, và tìm ra các ứng
dụng không được bảo mật.
Có một vài kiểu chương trình
nghe gói tin, bao gồm cả miễn phí và
sản phẩm thương mại. Mỗi chương
trình được thiết kế với các
mục tiêu khác nhau. Một vài chương
trình nghe gói tin phổ biến như là
tcpdump (a command-line program), OmniPeek, và Wireshark (cả
hai đều là chương trình có
giao diện đồ hoạ). Khi lựa chọn
chương trình nghe gói tin, ta cần phải
quan tâm đến một số vấn đề:
các giao thức mà chương trình
cần hỗ trợ, tính dễ sử dụng,
chi phí, hỗ trợ kỹ thuật và
chương trình hỗ trợ cho hệ điều
hành nào.
Các bước để
nghe gói tin:
Quá trình nghe gói tin được chia
làm 3 bước: thu thập dữ liệu,
chuyển đổi dữ liệu và phân
tích.
Thu thập dữ liệu: đây là bước
đầu tiên, chương trình nghe gói
tin chuyển giao diện mạng được lựa
chọn sang chế độ Promiscuous. Chế độ
này cho phép card mạng có thể nghe
tất cả các gói tin đang lưu
chuyển trên phân mạng của nó.
Chương trình nghe gói sử dụng
chế độ này cùng với việc
truy nhập ở mức thấp để bắt
các dữ liệu nhị phân trên đường
truyền.
Chuyển đổi dữ liệu: trong bước
này, các gói tin nhị phân trên
được chuyển đổi thành các
khuôn dạng có thể đọc được.
Phân tích: phân tích các gói
tin đã được chuyển đổi.
Có vài chương trình khác nhau
về nghe gói tin, trong tiểu luận này,
chúng tôi xin giới thiệu một chương
trình điển hình với nhiều tính
năng mạnh hỗ trợ việc bắt và
phân tích gói tin. Đó là
WireShark.
Nội dung gồm
các phần chính:
Phần I: Các cách thức nghe gói tin
trên mạng
Phần II: Giới thiệu WireShark
Phần III: Các tính huống với
WireShark
Phần IV: Xử lý các tình huống
mạng với WireShark
I. Các
cách thức nghe gói tin trên mạng
Để thực hiện việc bắt các
gói tin trên mạng, ta phải chỉ ra
những vị trí tương ứng để
đặt “máy nghe” vào hệ
thống đường truyền của mạng.
Quá trình này đơn giản là
đặt “máy nghe” vào đúng
vị trí vật lý nào trong một
mạng máy tính. Việc nghe các gói
tin không đơn giản chỉ là cắm
một máy xách tay vào mạng và
bắt gói. Thực tế, nhiều khi việc
đặt máy nghe vào mạng khó hơn
việc phân tích các gói tin. Thách
thức của việc này là ở chỗ
là có một số lượng lớn các
thiết bị mạng phần cứng được
sử dụng để kết nối các
thiết bị với nhau. Lý do là vì
3 loại thiết bị chính (hub, switch, router)
có nguyên lý hoạt động rất
khác nhau. Và điều này đòi
hỏi ta phải nắm rõ được cấu
trúc vật lý của mạng mà ta
đang phân tích.
Chúng ta sẽ nghiên cứu một số
mạng thực tế để chỉ ra cách
tốt nhất để bắt các gói
tin trong từng môi trường mạng sử
dụng Hub, Switch và Router.
Living Promiscuously (chế độ
bắt tất cả các gói tin đi qua)
Trước khi nghe các gói tin trên mạng,
ta cần một card mạng có hỗ trợ
chế độ Promiscuous. Chế độ
Promiscuous cho phép card mạng nhìn thấy
thất cả các gói tin đi qua hệ
thống dây mạng. Khi một card mạng không
ở chế độ này, nó nhìn
thấy một số lượng lớn các
gói tin trên mạng nhưng không gửi
cho nó, nó sẽ huỷ (drop) các gói
tin này. Khi nó ở chế độ
Promiscuous, nó bắt tất cả các gói
tin và gửi toàn bộ tới CPU.
“Nghe” trong mạng có
Hub
Việc nghe trong một mạng có hub là
một điều kiện trong mơ cho việc
phân tích gói tin. Cơ chế hoạt
động của Hub cho phép gói tin được
gửi tất cả các cổng của hub. Hơn
nữa, để phân tích một máy
tinh trên một hub, tất cả các công
việc mà bạn cần làm là cắm
máy nghe vào một cổng còn trống
trên hub. Bạn có thể nhìn thấy
tất cả các thông tin truyền và
nhận từ tất cả các máy đang
kết nối với hub đó, của sổ
tầm nhìn của bạn không bị hạn
chế khi mà máy nghe của bạn được
kết nối với một mạng hub.
“Nghe” trong mạng Switched
Một môi trường switched là kiểu
mạng phổ biến mà bạn làm việc.
Switch cung cấp một phương thức hiệu
quả để vận chuyển dữ liệu
thông qua broadcast, unicast, multicast. Switch cho phép
kết nối song công (full-duplex), có nghĩa
là máy trạm có thể truyền và
nhận dữ liệu đồng thời từ
switch. Khi bạn cắm một máy nghe vào
một cổng của switch, bạn chỉ có
thể nhìn thấy các broadcast traffic và
những gói tin gửi và nhận của
máy tính mà bạn đang sử dụng.

Có 3 cách chính để bắt được
các gói tin từ một thiết bị mục
tiêu trên mạng switch: port mirroring, ARP cache
poisoning và hubbing out.
Port Mirroring
Port mirroring hay còn gọi là port spanning có
thể là cách đơn giản nhất
để bắt các lưu lượng từ
thiết bị mục tiêu trên mạng
switch. Với cách này, bạn phải truy
cập được giao diện dòng lệnh
của switch mà máy mục tiêu cắm
vào. Tất nhiên là switch này phải
hỗ trợ tính năng port mirroring và có
một port trống để bạn có thể
cắm máy nghe vào. Khi ánh xạ cổng,
bạn đã copy toàn bộ lưu lượng
đi qua cổng này sang một cổng khác.

Hubbing Out
Một cách đơn giản khác để
bắt các lưu lượng của thiết
bị mục tiêu trong một mạng switch là
hubbing out. Hubbing out là kỹ thuật mà
trong đó bạn đặt thiết bị
mục tiêu và máy nghe vào cùng
một phân mạng bằng cách đặt
chúng trực tiếp vào một hub.

Rất nhiều người nghĩ rằng hubbing
out là lừa dối, nhưng nó thật sự
là một giải pháp hoàn hảo
trong các tình huống mà bạn không
thể thực hiện port mirroring nhưng vẫn
có khả năng truy cập vật lý tới
switch mà thiết bị mục tiêu cắm
vào.
Trong hầu hết các tình huống, hubbing
out sẽ giảm tính năng song công của
thiết bị mục tiêu (full to haft). Trong khi
phương thức này không phải là
cách sạch sẽ nhất để nghe, và
nó thường được bạn sử
dụng như là một lựa chọn khi mà
switch không hỗ trợ port mirroring.
Khi hubbing out, chắc chắn rằng bạn sử
dụng một cái hub chứ không phải
là một switch bị gắn nhầm nhãn.
Khi mà bạn sử dụng hub, hãy kiểm
tra để chắc chắn rằng nó là
một hub bằng cách cắm 2 máy tính
vào nó và nhìn xem cái một
máy có thể nhìn thấy lưu lượng
của cái còn lại không.
ARP Cache Poisoning
Địa chỉ tầng 2 (địa chỉ MAC)
được sử dụng chung với hệ
thống hệ thống địa chỉ tầng
2. Tất cả các thiết bị trong một
mạng liên lạc với nhau thông qua địa
chỉ IP. Do switch làm việc tại tầng 2,
vì vậy nó phải có khả năng
phiên dịch địa chỉ tầng 2 (MAC)
sang địa chỉ tầng 3 (IP) hoặc ngược
lại để có thể chuyển tiếp
gói tin tới thiết bị tương ứng.
Quá trình phiên dịch được
thực hiện thông qua một giao thức tầng
3 là ARP (Address Resolution Protocol). Khi một máy
tính cần gửi dữ liệu cho một máy
khác, nó gửi một yêu cầu ARP
tới switch mà nó kết nối. Switch đó
sẽ gửi một gói ARP broadcast tới tất
cả các máy đang kết nối với
nó để hỏi. Khi mà máy đích
nhận được gói tin này, nó
sẽ thông báo cho switch bằng cách gửi
địa chỉ MAC của nó. Sau khi nhận
được gói tin phản hồi, Switch định
tuyến được kết nối tới máy
đích. Thông tin nhận được
được lưu trữ trong ARP cache của
switch và switch sẽ không cần phải gửi
một thông điệp ARP broadcast mới mỗi
lần nó cần gửi dữ liệu tới
máy nhận.
ARP cache poisoning là một kỹ thuật nâng
cao trong việc nghe đường truyền trong
một mạng switch. Nó được sử
dụng phổ biến bởi hacker để gửi
các gói tin địa chỉ sai tới máy
nhận với mục tiêu để nghe trộm
đường truyền hiện tại hoặc
tấn công từ chối dịch vụ, nhưng
ARP cache poisoning chỉ có thể phục vụ
như là một cách hợp pháp để
bắt các gói tin của máy mục
tiêu trong mạng switch. ARP cache poisoning là quá
trình gửi một thông điệp ARP với
địa chỉ MAC giả mạo tới switch
hoặc router nhằm mục đích nghe lưu
lượng của thiết bị mục tiêu.
Có thể sử dụng chương trinh Cain &
Abel để thực hiện việc này
(http://www.oxid.it).

Nghe trong mạng sử dụng
Router
Tất cả các kỹ thuật nghe trong mạng
switch đều có thể được sử
dụng trong mạng router. Chỉ có một
việc cần quan tâm khi mà thực hiện
với mạng router là sự quan trọng của
việc đặt máy nghe khi mà thực
hiện xử lý một vấn đề liên
quan đến nhiều phân mạng. Broadcast
domain của một thiết bị được
mở rộng cho đến khi nó gặp
router. Khi đó, lưu lượng sẽ được
chuyển giao sang dòng dữ liệu router tiếp
theo và bạn sẽ mất liên lạc với
các gói tin đó cho đến khi bạn
nhận được một ACK của các
máy nhận trả về. Trong tình hướng
này, dữ liệu sẽ lưu chuyển qua
nhiều router, vì vậy rất quan trọng để
thực hiện phân tích tất cả lưu
lượng trên các giao diện của
router.
Ví dụ, liên quan đến vấn đề
liên kết, bạn có thể gặp phải
một mạng với một số phân mạng
được kết nối với nhau thông
qua các router. Trong mạng đó, một
phân mạng liên kết với một phân
mạng với mục đích lưu trữ và
tham chiếu dữ liệu. Vấn đề mà
chúng ta đang cố gắng giải quyết
là phân mạng D không thể kết nối
với các thiết bị trong phân mạng
A.

Khi mà bạn nghe lưu lượng của một
thiết bị trong phân mạng D. Khi đó,
bạn có thể nhìn tháy rõ ràng
lưu lượng truyền tới phân mạng
A, nhưng không có biên nhận (ACK) nào
được gửi lại. Khi bạn nghe luồng
lưu lượng ở phân mạng cấp
trên để tìm ra nguyên nhân vấn
đề, bạn tìm ra rằng lưu lượng
bị huỷ bởi router ở phân mạng B.
Cuối cùng dẫn đến việc bạn
kiểm tra cấu hình của router, nếu
đúng, hãy giải quyết vấn đề
đó của bạn. Đó là một
ví dụ điển hình lý do vì
sao cần nghe lưu lượng của nhiều
thiết bị trên nhiều phân mạng với
mục tiêu xác định chính xác
vấn đề.
Network Maps
Để quyết định việc đặt
máy nghe ở đâu, cách tốt nhất
là bạn phải biết được một
cách rõ ràng mạng mà bạn định
phân tích. Nhiều khi việc xác định
vấn đề đã chiếm nửa khối
lượng công việc trong việc xử lý
sự cố.
II. Giới thiệu WireShark
WireShark có một bề dầy lịch sử.
Gerald Combs là người đầu tiên
phát triển phần mềm này. Phiên
bản đầu tiên được gọi là
Ethereal được phát hành năm 1998.
Tám năm sau kể từ khi phiên bản
đầu tiên ra đời, Combs từ bỏ
công việc hiện tại để theo đuổi
một cơ hội nghề nghiệp khác. Thật
không may, tại thời điểm đó,
ông không thể đạt được
thoả thuận với công ty đã thuê
ông về việc bản quyền của thương
hiệu Ethereal. Thay vào đó, Combs và
phần còn lại của đội phát
triển đã xây dựng một thương
hiệu mới cho sản phẩm “Ethereal”
vào năm 2006, dự án tên là
WireShark.
WireShark đã phát triển mạnh mẽ
và đến nay, nhóm phát triển cho
đến nay đã lên tới 500 cộng
tác viên. Sản phẩm đã tồn
tại dưới cái tên Ethereal không
được phát triển thêm.
Lợi ích Wireshark đem lại đã giúp
cho nó trở nên phổ biến như hiện
nay. Nó có thể đáp ứng nhu cầu
của cả các nhà phân tích
chuyên nghiệp và nghiệp dư và nó
đưa ra nhiều tính năng để thu
hút mỗi đối tượng khác
nhau.
Các giao thực được hỗ trợ
bởi WireShark:
WireShark vượt trội về khả năng hỗ
trợ các giao thức (khoảng 850 loại),
từ những loại phổ biến như TCP, IP
đến những loại đặc biệt như
là AppleTalk và Bit Torrent. Và cũng bởi
Wireshark được phát triển trên mô
hình mã nguồn mở, những giao thức
mới sẽ được thêm vào. Và
có thể nói rằng không có giao
thức nào mà Wireshark không thể hỗ
trợ.
Thân thiện với người dùng:
Giao diện của Wireshark là một trong những
giao diện phần mềm phân tích gói
dễ dùng nhất. Wireshark là ứng dụng
đồ hoạ với hệ thống menu rât
rõ ràng và được bố trí
dễ hiểu. Không như một số sản
phẩm sử dụng dòng lệnh phức tạp
như TCPdump, giao diện đồ hoạ của
Wireshark thật tuyệt vời cho những ai đã
từng nghiên cứu thế giới của
phân tích giao thức.
Giá rẻ: Wireshark là một sản
phẩm miễn phí GPL. Bạn có thể
tải về và sử dụng Wireshark cho bất
kỳ mục đích nào, kể cả
với mục đích thương mại.
Hỗ trợ: Cộng đồng của
Wireshark là một trong những cộng đồng
tốt và năng động nhất của
các dự án mã nguồn mở.
Hệ điều hành hỗ trợ
Wireshark: Wireshark hỗ trợ hầu hết các
loại hệ điều hành hiện nay.
Một số tính năng nâng
cao của Wireshark
Name Resolution
Dữ liệu truyền trong mạng thông qua một
vài hệ thống địa chỉ, các
địa chỉ này thường dài và
khó nhớ (Ví dụ: MAC). Phân giải
điạch chỉ là quá trình mà
một giao thức sử dụng để chuyển
đổi một địa chỉ loại này
thành một địa chỉ loại khác
đơn giản hơn. Chúng ta có thể
tiết kiệm thời gian bằng cách sử
dụng một vài công cụ phân giải
địa chỉ để file dữ liệu ta
bắt được dễ đọc hơn. Ví
dụ như là chúng ta có thể sử
dụng phân giải tên DNS để giúp
định danh tên của một máy tính
mà ta đang có gắng xác định
như là nguồn của các gói cụ
thể.
Các kiểu công cụ phân giải
tên trong Wireshark: có 3 loại
MAC Name Resolution: phân giải địa
chỉ MAC tầng 2 sang địa chỉ IP tầng
3. Nếu việc phân giải này lỗi,
Wireshark sẽ chuyển 3 byte đầu tiên của
địa chỉ MAC sang tên hãng sản
xuất đã được IEEE đặc
tả, ví dụ: Netgear_01:02:03.
Network Name Resolution: chuyển đổi
địa chỉ tầng 3 sang một tên DNS
dễ đọc như là MarketingPC1.
Transport Name Resolution: chuyển đổi
một cổng sang một tên dịch vụ
tương ứng với nó, ví dụ:
cổng 80 là http.
Protocol Dissection
Một protocol dissector cho phép Wireshark phân
chia một giao thức thành một số thành
phần để phân tích. ICMP protocol
dissector cho phép Wireshark phân chia dữ liệu
bắt được và định dạng
chúng như là một gói tin ICMP. Bạn
có thể nghĩ rằng một dissector như
là một bộ phiên dịch giữa dòng
dữ liệu trên đường truyền và
chương trình Wireshark. Với mục đích
để hỗ trợ một giao thức nào
đó, một dessector cho giao thức đó
phải được tích hợp trong
Wireshark. Wireshark sử dụng đồng thời
vài dissector để phiên dịch mỗi
gói tin. Nó quyết định dissector nào
được sử dụng bằng cách sử
dụng phân tích lôgic đã được
cài đặt sẵn và thực hiện
việc dự đoán. Thật không may là
Wireshark không phải lúc nào cũng đúng
trong việc lựa chọn dissector phù hợp
cho một gói tin. Tuy nhiên, ta có thể
thay đổi việc lựa chọn này trong
từng trường hợp cụ thể.
Following TCP Streams
Một trong những tính năng hữu ích
nhất của Wireshark là khả năng xem các
dòng TCP như là ở tầng ứng dụng.
Tính năng này cho phép bạn phối
hợp tất cả các thông tin liên
quan đến các gói tin và chỉ cho
bạn dữ liệu mà các gói tin này
hàm chứa giống như là người
dùng cuối nhìn thấy trong ứng dụng.
Còn hơn cả việc xem các dữ liệu
đang được truyền giữa máy
trạm và máy chủ trong một mớ
hỗn độn, tính năng này sắp
xếp dữ liệu để có thể xem
một cách đơn giản. Bạn có
thể sử dụng công cụ này để
bắt và giải mã một phiên
instant messages được gửi bởi một
người làm thuê (người này
đang bị nghi ngờ phát tán các
thông tin tài chính của công ty).
Cửa sổ thống kê phân
cấp giao thức
Khi bắt được một file có kích
thước lớn, chúng ta cần biết được
phân bố các giao thức trong file đó,
bao nhiêu phần trăm là TCP, bao nhiêu
phần trăm là IP và DHCP là bao nhiêu
phần trăm,... Thay vì phải đếm
từng gói tin để thu được kết
quả, chúng ta có thể sử dụng
cửa sổ thống kê phân cấp giao
thức của Wireshark. Đây là cách
tuyệt với để kiểm thử mạng
của bạn. Ví dụ, nếu bạn biết
rằng 10% lưu lượng mạng của bạn
được sử dụng bởi các lưu
lượng ARP, và một ngày nào đó,
bạn thấy lưu lượng ARP lên tới
50%, bạn hoàn toàn có thể hiểu
rằng đang có một cái gì đó
không ổn xảy ra.
Xem các Endpoints
Một Endpoint là chỗ mà kết nối
kết thúc trên một giao thức cụ
thể. Ví dụ, có hai endpoint trong kết
nối TCP/IP: các địa chỉ IP của
các hệ thống gửi và nhận dữ
liệu, 192.168.1.5 và 192.168.0.8. Một ví dụ
ở tầng 2 có thể là kết nối
giữa hai NIC vật lý và địa chỉ
MAC của chúng. Các NIC gửi và nhận
dữ liệu, các MAC đó tạo nên
các endpoint trong kết nối.

Khi thực hiện phân tích gói tin, bạn
có thể nhận ra rằng bạn đã
khoanh vùng vấn đề chỉ còn là
một enpoint cụ thể trong mạng. Hộp
thoại Wireshark endpoints chỉ
ra một vài thống kê hữu ích cho
mỗi endpoint, bao gồm các địa chỉ
của từng máy cũng như là số
lượng các gói tin và dung lượng
đã được truyền nhận của
từng máy.

Cửa số đồ thị
IO
Cách tốt nhất để hình dung hướng
giải quyết là xem chúng dưới
dạng hình ảnh. Cửa sổ đồ
thị IO của Wireshark cho phép bạn vẽ
đồ thị lưu lượng dữ liệu
trên mạng. Bạn có thể sử dụng
tính năng này để tìm kiếm
các đột biến hoặc những thời
điểm không có dữ liệu truyền
của các giao thức cụ thể mà bạn
đang quan tâm. Bạn có thể vẽ đồng
thời 5 đường trên cùng một
đồ thị cho từng giao thức mà bạn
quan tâm bằng các màu khác nhau.
Điều này giúp bạn dễ dàng
hơn để thấy sự khác nhau của
các đồ thị.

15