Với sự phát triển vượt bậc của công nghệ mạng, tốc độ mạng ngày càng được nâng cao, số người sử dụng mạng để làm việc ngày càng nhiều. Điều đó đặt ra vô số vấn đề cho hệ thống mạng đã tồn tại trước đây và hiện tại như : vấn đề độ tin cậy,tính toàn vẹn, tính bảo mật, và hiệu suất hoạt động của mạng …Vì thế việc cần phải có một công cụ để giúp người quản trị giám sát, phát hiện các vấn đề của mạng, cũng như phát hiện sự tấn công từ bên ngoài ngày càng trở nên quan trọng. Công cụ này đối với người quản trị mạng cũng quan trọng như máy siêu âm ,máy xquang, máy điện tâm đồ đối với các bác sĩ, những dụng cụ mà nếu thiếu thì người bác sĩ sẽ khó lòng hoàn thành tốt nhiệm vụ của mình nếu như không muốn nói là không thể. Vì thế nhóm chúng em quyết định chọn đề tài nghiên cứu cơ chế hoạt động và ứng dụng của công cụ bắt gói trên mạng. Trong quá trình thực hiện, nhóm cũng đã gặp không ít khó khăn về tài liệu vì thực sự tài liệu về mảng đề tài này là không nhiều. Cho nên đề tài chỉ dừng mức giới thiệu cơ chế chung, và thực hiện hiện chương trình demo bắt gói đơn giản bằng Java, đến ứng dụng và cách thực capture trên các môi trường mạng như thế nào. Hướng phát triển đề tài là rất rộng : như phát triển thành chương trình giám sát và phân tích gói chuyên nghiệp hoặc xây dựng IDS, firewall, ..vv
Trang 1Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
MỤC LỤC
Trang 2Lời nói đầu -o0o-
Với sự phát triển vượt bậc của công nghệ mạng, tốc độ mạng ngày càng được nâng cao, số người sử dụng mạng để làm việc ngày càng nhiều Điều đó đặt ra vô số vấn đề cho hệ thống mạng đã tồn tại trước đây và hiện tại như : vấn đề độ tin cậy,tính toàn vẹn, tính bảo mật, và hiệu suất hoạt động của mạng …Vì thế việc cần phải có một công cụ để giúp người quản trị giám sát, phát hiện các vấn đề của mạng, cũng như phát hiện sự tấn công từ bên ngoài ngày càng trở nên quan trọng Công cụ này đối với người quản trị mạng cũng quan trọng như máy siêu âm ,máy x-quang, máy điện tâm đồ đối với các bác sĩ, những dụng cụ mà nếu thiếu thì người bác sĩ sẽ khó lòng hoàn thành tốt nhiệm vụ của mình nếu như không muốn nói là không thể Vì thế nhóm chúng em quyết định chọn đề tài nghiên cứu cơ chế hoạt động và ứng dụng của công cụ bắt gói trên mạng Trong quá trình thực hiện, nhóm cũng đã gặp không ít khó khăn về tài liệu vì thực sự tài liệu về mảng đề tài này là không nhiều Cho nên đề tài chỉ dừng mức giới thiệu cơ chế chung, và thực hiện hiện chương trình demo bắt gói đơn giản bằng Java, đến ứng dụng và cách thực capture trên các môi trường mạng như thế nào
Hướng phát triển đề tài là rất rộng : như phát triển thành chương trình giám sát và phân tích gói chuyên nghiệp hoặc xây dựng IDS, firewall, vv
Trang 3Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Phần I : NỀN TẢNG CAPTURE GÓI
1 Giới thiệu Pcap / Libpcap / Winpcap :
Pcap là tên chung cho bộ thư viện lập trình API ( application programming interface – giao tiếp lập trình ứng dụng ) dùng để bắt gói Trên hệ thống linux còn gọi với tên là
libpcap và trên hệ thống Windows còn gọi là winpcap
Libpcap và Winpcap đều là mã nguồn mở Là nền tảng xây dựng các tool ứng dụng mang tính thương mại như IDS ( Network intrusion detection systems – hệ thống phát hiện xâm nhập, Packet sniffers – phân tích gói, Network Monitor – giám sát mạng…vv Pcap API được viết cho bằng C và C++ nhưng được đóng bao (wrapper) cho nhiều ngôn ngữ cao cấp như Java, C# , VB, Delphi, vv
Winpcap là một phần của Pcap được phát triển ban đầu tại Politecnico di Torino Winpcap có thể chạy trên các hệ điều hành Windows 9x/Me, NT, 2000, XP, Server 2003, Vista
Winpcap sử dụng NDIS (Network Driver Interface Specification ) để đọc các gói
trực tiếp từ card mạng (Network Adapter) NDIS là một thư viện mức thấp của hệ điều hành giao tiếp với các driver
Tên các thư viện đóng bao từ pcap của thư viện pcap trên các ngôn ngữ :
• Net::Pcap, a Perl wrapper for pcap
• python-libpcap, a Python wrapper for pcap
• Ruby/Pcap, a Ruby wrapper for pcap
• tclpcap, a Tcl wrapper for pcap
• jpcap, a Java wrapper for pcap
• WinPcapNET and SharpPcap, NET wrappers for WinPcap
2 Giới thiệu Winpcap :
a Chức năng:
WinPcap là một thư viện mã nguồn mở cho phép bắt gói và phân tích mạng cho nền Win32 Hầu hết các chương trình ứng dụng truy cập mạng qua các hàm nguyên thủy của hệ thống chẳng hạn như qua socket Thật dễ dàng để truy cập dữ liệu trên mạng qua cách này vì hệ điều hành chỉ xử lý với mức chi tiết thấp (giao thức xử lý, tái hợp gói, ) và cung cấp interface tương tự như là đọc hay ghi vào
file
Tuy nhiên có lúc các ứng dụng yêu cầu truy cập trực tiếp đến gói trên mạng, tức là khi nó cần có dữ liệu “thô” mà chưa có sự xử lý giao thức của hệ điều hành Mục đích của WinPcap là để cung cấp cách truy cập này đối với nền Win32, nó có khả năng:
• acketói thô, cả trên máy đang chạy chương trình hoặc thậm chí là ở máy ở
xa
• Lọc gói theo các luật đã định nghĩa trước trước khi chuyển chúng cho chương trình ứng dụng
• Truyền gói thô trên mạng
Trang 4• Thu thập thông tin thống kê về lưu lượng mạng
Các khả năng này có được thông qua driver thiết bị được cài đặt bên trong phần mạng của kernel Win32 (các thư viện DLL)
Loại chương trình nào sử dụng WinPcap:
Giao tiếp lập trình WinPcap được có thể được sử dụng bởi rất nhiều loại công
cụ phân tích, giải quyết sự cố, bảo mật và giám sát Các loại công cụ điển hình dựa trên WinPcap là:
• Phân tích giao thức mạng
• Giám sát mạng
• Ghi lại lưu lượng mạng
• Tạo lưu lượng mạng
• Hệ thống phát hiện xâm nhập mạng (NIDS)
• Các công cụ bảo mật
Một số chương trình sử dụng thư viện Winpcap trong thực tế
• Wireshark, Ethereal: công cụ bắt gói và phân tích các giao thức
• TCPdump: công cụ bắt và kết xuất các gói để phân tích
• Snort: hệ thống phát hiện xâm nhập
• SSLDump: công cụ phân tích SSLv3/TLS Nó giải mã các bản ghi SSL và hiển thị trên stdout
• Nmap: một tiện ích scan port trên mạng
b Kiến trúc:
Hình – Kiến trúc WinPcap BPF(Berkeley Packet Filter) là một thiết bị phần mềm cho phép bắt gói ở
kernel buffer và lọc các gói không mong muốn Nó đã được chứng minh là một kiến trúc mạnh mẽ và ổn định, WinPcap giữ lại một số tính năng của nó nhưng
có một số khác biệt trong kiến trúc và trong hành vi bắt gói, nó được xem là một sự phát triển của BPF
Trang 5Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Hình - Winpcap và NPF
Một điều khác biệt quan trọng trong kiến trúc giữa BPF và NPF (Netgroup Packet Filter) là sự lựa chọn bộ đệm ở mức kernel, sự thực thi bộ đệm được
tối ưu để có thể sao chép các block của gói ở cùng một thời điểm Điều này là khó quản lý vì dữ liệu được sao chép không có kích thước cố định (libpcap sử dụng cùng kích thước với kernel và bộ đệm 32KB) và vì số lượng các bytes sao chép được cập nhật trong khi vẫn truyền dữ liệu từ kernel đến user Tiến trình sao chép sẽ giải phóng phần bộ đệm đã được truyền đi, nó được chạy ở
độ ưu tiên cao hơn nhưng nó không chiếm giữ độc quyền CPU
Toàn bộ bộ đệm kernel được sao chép bằng hàm read(), vì vậy giảm số lượng lời gọi hệ thống và do đó giảm số lượng chuyển đổi ngữ cảnh giữa user
và kernel.Vì một chuyển đổi ngữ cảnh yêu cầu lưu trạng thái của tác vụ, nên một lượng lớn các công việc được giảm xuống Tuy nhiên, một bộ đệm user lớn không thuận lợi vì chuyển đổi ngữ cảnh không đáng kể trong khi sự cấp phát bộ nhớ lại tăng lên Bộ đệm WinPcap kernel thì lớn hơn (mặc định là 1MB) so với BPF Một bộ đệm nhỏ sẽ cản trở tiến trình bắt gói đặc biệt là trong trường hợp ứng dụng không thể đọc nhanh bằng driver capture trong một khoảng giới hạn thời gian Ngược lại thì bộ đệm user nhỏ hơn với mặc định là 256KB Cả bộ đệm kernel và user có thể được thay đổi ở thời điểm chạy
Kích thước của bộ đệm user rất quan trọng bởi vì nó xác định số lượng tối
đa dữ liệu được sao chép từ kernel đến user trong lời gọi hệ thống Khi giá trị này lớn, kernel đợi khoảng thời gian trước khi chuyển dữ liệu đến user Điều này bảo đảm số lượng nhỏ các lời gọi hệ thống, công suất sử dụng CPU ít hơn,
đó là điều tốt cho các chương trình ứng dụng như sniffer Nói cách khác, khigiá trị nhỏ thì kernel thì kerlel sẽ sao chép các gói ngay khi ứng dụng sẵn sàng nhận chúng Điều này rất tốt trong ứng dụng thời gian thực cần có sự đáp ứng tốt từ kernel NPF hoàn toàn có thể cấu hình được và nó cho phép user chọn giữa hiệu quả tốt nhất hay sự đáp ứng tốt nhất WinPcap chứa một cặp lời gọi hệ thống có thể được sử dụng để thiết lập cả timeout sau khi hết hạn đọc và
số lượng nhỏ nhất dữ liệu có thể được truyền đến ứng dụng Các gói được sao chép khi số lượng dữ liệu là nhỏ nhất hoặc thời gian đọc hết hạn Mặc định,
Trang 6timeout là 1giây và lượng dữ liệu nhỏ nhất là 16K Khả năng này được gọi là
“delayed write”
Đối với WinPcap thì các gói được sao chép hai lần (từ network driver đến kernel sau đó đến user)
c Các module:
WinPcap được tạo nên từ 3 module: một ở mức kernel và hai ở mức user:
§ Module đầu tiên là phần kernel (NPF) (file VXD trong Windows 95/98/ME và file SYS trong Windows NT/2000), nó lọc các gói, chuyển giao chúng đến mức user và chứa một số mã đặt biệt của hệ điều hành (chẳng hạn timestamp)
§ Module thứ hai là packet.dll, được tạo ra để giao tiếp với packet driver trong nền Win32 Trên thực tế, mỗi phiên bản Windows cung cấp các
giao tiếp khác nhau giữa kernel và và các ứng dụng mức user: packet.dll
sẽ xử lý những sự khác nhau này, cung cấp các hàm API độc lập Các
chương trình dựa trên packet.dll có thể bắt được các gói trên mọi nền
Win32 mà không cần phải biên dịch lại.Nó thực thi một tập các thao tác mức thấp như là lấy tên của adapter hoặc thư viện tải driver, làm hiện hữu về thông tin đặc trưng của hệ thống như là netmask và một số bộ đếm phần cứng (số đụng độ trong Ethernet,etc)
§ Module thứ ba là WPcap.dll, nó không phụ thuộc hệ điều hành và chứa các hàm mức cao chẳng hạn như tạo ra bộ lọc và bộ đệm ở mức user, cộng với một số chức năng mở rộng như thống kê gói Như vậy các lập trình viên có thể truy cập vào hai loại API: một tập các hàm thô chứa
trong packet.dll ánh xạ trực tiếp đến các lời gọi mức kernel và một tập các hàm mức cao được cung cấp bởi WPcap.dll
Hình – Packet.dll
Trang 7Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Hình – Wpcap.dll
3 Giao tiếp với card mạng :
a NetworkCard Driver và Protocol:
Một network adapter card, tức bảng mạch điều hợp mạng, (đôi khi gọi là network interface card hay vắn tắt là NIC) là một bảng mạch phần cứng được cài đặt trong máy tính của bạn để cho phép máy tính hoạt động được trên mạng Network adapter card cung cấp một (hoặc nhiều) cổng để cho cáp mạng được nối vào về mặt vật lý, và về mặt vật lý bảng mạch đó sẽ truyền dữ liệu từ máy tính tới cáp mạng và theo chiều ngược lại
Mỗi máy tính trong mạng cần phải có một trình điều khiển (driver) cho network adapter card, đó là một chương trình phần mềm kiểm soát bảng mạch mạng Mỗi trình điều khiển của network adapter card được cấu hình cụ thể để chạy với một kiểu bảng mạch mạng (network card) nhất định
Cùng với các bảng mạch mạng và trình điều khiển bảng mạch mạng, một máy tính mạng cũng cần phải có một trình điều khiển giao thức (protocol driver) mà đôi khi gọi là một giao thức giao vận hay chỉ vắn tắt là giao thức Trình điều khiển giao thức thực hiện công việc giữa phần mềm mạng ở mức trên (giống như trạm làm việc và máy chủ) và network adapter card Giao thức đóng gói
dữ liệu cần gửi đi trên mạng theo cách mà máy tính ở nơi nhận có thể hiểu được
Qui trình kết hợp một trình điều khiển giao thức với network adapter card tương ứng, và thiết lập một kênh truyền thông giữa hai thứ đó gọi là kết gắn (binding)
Để hai máy tính truyền thông với nhau trên một mạng, chúng phải dùng cùng một giao thức Đôi khi một máy tính được cấu hình để dùng nhiều giao thức Trong trường hợp này, hai máy tính chỉ cần một giao thức chung là có thể truyền thông với nhau
Trong một số mạng, mỗi trình điều khiển network adapter card và giao thức của máy tính là một phần mềm riêng Trong một số mạng khác thì chỉ một phần mềm gọi là monolithic protocol stack thực hiện các chức năng của cả
trình điều khiển network adapter card và giao thức
Trang 8b "Network Driver Interface Specification" (NDIS) là gì ?
Tạm dịch là tiêu chuẩn giao tiếp thiết bị mạng Đây là tập hợp các hàm API liên quan đến NICs Được hợp tác phát triển bởi Microsoft và 3Com Corporation, ngày nay được sử dụng hầu hết trong hệ điều hành Windows
Nhưng NDIS- wrapper mã nguồn mỡ và dự án Project Evil driver wrapper
cho phép các NDIS sử dụng được trên hệ thống Linux and FreeBSD
NDIS là chuẩn cung cấp cho việc nói chuyện giữa card mạng (network card)
và các giao thức (protocol) mạng được dùng NDIS cho phép sử dụng nhiều giao thức mạng trên cùng một card mạng Trong trường hợp phải sử dụng một loại card mạng khác, tức là phải cần trình điều khiển cho card mạng không có sẵn trong hệ điều hành, NDIS vẫn có thể sử dụng đa giao thức mạng trên card mạng này
Khi máy tính sử dụng đa giao thức mạng, các gói tin dữ liệu sẽ được chuyển
đi thông qua giao thức mạng thứ nhất (giao thức này được gọi là primary protocol), nếu không được máy tính sẽ sử dụng tiếp giao thức thứ hai và cứ thế tiếp tục.Trên mỗi máy tính được cài đặt Windows NT, mỗi một giao thức mạng được đặt sử dụng trên một card mạng cần phải được đặt một giá trị gọi là LAN adapter number trên card mạng đó
c Các kiểu driver NDIS :
Có 3 kiểu driver được hỗ trợ trên windows là:
• Driver card mạng – (Network Interface card (NIC) drivers)
• Driver giao thức trung gian (Intermediate Protocol drivers)
• Driver giao thức mức cao (Upper-level protocol drivers)
Trang 9Đồ án môn học: An toàn mạng GVBM: Ths Lê Phúc
Hình - Minh họa các thành phần driver mạng của Windows NT
d Driver card mạng (NIC) :
Driver của card mạng được quản lý bởi chính nó Driver card mạng giao tiếp trực tiếp với phần cứng tại cạnh thấp và tại cạnh trên cung cấp một giao tiếp với driver mức cao hơn để :
• Gửi và nhận gói
• Khởi động lại NIC
• Tắt NIC
• Truy vấn NIC
• Thiết lập các thực thi đặc trưng của NIC
Driver NIC có hai kiểu :
Miniport DriversMiniport drivers : thực thi tác vụ phần cứng đặc
trưng cần thiết cho việc quản lý NIC, bao gồm gửi và nhận dữ liệu trên NIC Miniport drivers không thực hiện lời gọi hệ điều hành trực tiếp, thay vào đó nó gọi các hàm cung cấp bởi NDIS
Full NIC Drivers : quản lý cả phần cứng đặc trưng và tác vụ đặc trưng
của hệ điều hành thường được dùng bởi NDIS Full NIC drivers phải luôn duy trì một thông tin cho dữ liệu nhận
Trang 10ü Driver giao thức trung gian -Intermediate Protocol Driver? nằm giữa
legacy protocol driver và miniport drivers Để lớp điều khiển vận
chuyển mức cao tương tự như miniport driver Tạo sự chuyển đổi môi trường giữa lớp điều khiển cao và lớp miniport trong việc quản lý những kiểu môi trường truyền chưa
ü Driver giao thức mức cao - Upper Level Protocol Driver ? là giao thức điều khiển mức trên thực thi các một giao diện TDI hay những giao diện ứng dụng đặc trưng để cung cấp dịch vụ cho người sử dụng Như điều khiển tạo gói, chép dữ liệu vào gói, gửi gói đi xuống điều khiển mức thấp bằng các gọi NDIS Cung cấp một giao tiếp giao thức với mức thấp để nhận gói
Làm sao chương trình ứng dụng có thể tương tác với trình điều khiển? Tất cả
các trình điều khiển ( driver ) được viết bởi Windows NT phải có một hàm DriverEntry Tất cả các hàm khác của trong trình điều khiển sẽ được trình ứng dụng nhận biến thông thường trình DriverEntry Trình ứng dụng gọi những hàm như CreateFile, ReadFile vv sẽ trả về bộ quản lý nhập/xuất mạng, bộ phận này sẽ tạo ra một IRP (input/output Request Packet) chịu trách
nhiệm đến mỗi lời gọi hàm
Ví dụ:
Chương trình ứng dụng gọi một hàm trong dll, hàm này sẽ trả về một điểm vào trong trình điều khiển PACKET
Trình điều khiển sử dụng các hàm của NDIS.SYS để giao tiếp với card mạng
4 Nhận dạng giao thức :
a Luồng dữ liệu trong mạng TCP/IP :