Tìm hiểu và xây dựng hệ thống phát hiện xâm nhập trên mạng IP

Mục lục Lời nói đầu Với sự bùng nổ của khoa học và công nghệ hiện nay, tin học đã len lỏi vào mọi lĩnh vực của đồi sống nhân loại. Internet đã trở nên hết sức phổ biến trong cuộc sống. Mọi thông tin cần thiết đều có thể được tìm thấy trên Internet. Mọi thông tin đều được đăng tải trên đó, từ mục giao vặt đến cập nhập về các công nghệ mới nhất hoặc các thông tin thời sự nóng hổi. Chính phủ điện tử và báo chí điện tử cũng đang phát triển rất mạnh để đáp ứng cho nhu cầu hiện tại. Việc sở hữu 1

doc76 trang | Chia sẻ: huyen82 | Lượt xem: 1777 | Lượt tải: 0download
Tóm tắt tài liệu Tìm hiểu và xây dựng hệ thống phát hiện xâm nhập trên mạng IP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trang web không cần phải là các chính phủ, tổ chức lớn mà các công ty tổ chức vừa và nhỏ thậm chí là các cá nhân cũng có thể sở hữu 1 trang web giới thiệu về mình hay để thuận tiện cho việc kinh doanh giao dịch. Nhưng đi cùng với sự phát triển của công nghệ thông tin và Internet thì yếu tố bảo mật các thông tin, dữ liệu nhạy cảm trên đó cũng là 1 yếu tố hết sức quan trọng không thể tách rời. Trên thế giới trong các năm qua thường xuyên có những cuộc tấn công vào các trang web của các tổ chức lớn như các trang của Microsoft, hoặc các hệ thống ngân hàng. Mặc dù các tổ chức này cũng có đội ngũ các chuyên gia bảo mật nhưng đôi khi vẫn bị các hacker vượt mặt với các chiêu thức hack ngày càng tinh vi và thủ đoạn hơn. Điều này đặt các tổ chức đó phải tìm kiếm nhiều biện pháp để nhằm đảm bảo cho tính an toàn về thông tin, dữ liệu của họ. Bên cạnh các hệ thống firewall truyền thống thì hiện nay hệ thống phát hiện sự xâm nhập trái phép trong mạng cũng là 1 biện pháp đựơc nhiều công ty và các tổ chức quan tâm. Các hệ thống này có thể phát hiện các dấu hiệu của 1 cuộc tấn công trước khi nó xảy ra và cảnh báo với nhà quản trị. Từ đó giúp họ có thể đưa ra các biện pháp nhằm vô hiệu hoá các cuộc tấn công này. Giảm thiệt hại đến mức tối thiểu cho công ty. Hệ thống phát hiện xâm nhập về cơ bản được chia làm hai loại: Hệ thống phát hiện xâm nhập trên một máy (HIDS) và hệ thống phát hiện xâm nhập trên mạng (NIDS). Hệ thống HIDS là hệ thống dùng để phát hiện những xâm nhập trái phép vào máy đó. Mục đích của hệ thống này là bảo đảm tính toàn vẹn cho máy tính. Còn hệ thống NIDS dùng để phát hiện những xâm nhập trái phép vào mạng. Hệ thống này có tác dụng phát hiện những cuộc tấn công nhằm vào hệ thống mạng trong thời gian thực. Khi công ty, tổ chức cài đặt mạng nội bộ và có kết nối vào Internet thì việc chống những loại xâm phạm như thế này có ý nghĩa rất lớn. Với đề tài " Tìm hiểu và xây dựng hệ thống phát hiện xâm nhập trên mạng IP", mục tiêu của đồ án là nghiên cứu về an toàn mạng, các mô hình hệ thống phát hiện xâm nhập, sau đó tìm hiểu các kỹ thuật để cài đặt một hệ thống phát hiện xâm nhập trên Windows dựa trên giao thức TCP/IP. Trên cơ sở đó cài đặt một chương trình HIDS để giám sát các lưu thông trên mạng, cảnh báo cho người quản trị về những bất thường trong mạng. Đồ án của em gồm có 4 chương Chương 1. Các kiến thức cơ bản về mô hình TCP/IP Chương 2. Tổng quan về an ninh mạng , các nguy cơ bị tấn công và một số biện pháp bảo mật Chương 3. Giới thiệu các hệ thống IDS Chương 4. Xây dựng 1 ứng dụng IDS Đề tài về IDS là 1 đề tài hay nhưng cũng rất khó và rộng vì vậy em chỉ xin thực hiện xây dựng một chương trình IDS nhỏ để minh hoạ cho các kiến thức đã được nghiên cứu, đề cập trong đồ án . Trong qua trình làm đồ án không khó tránh khỏi những thiếu xót, em mong nhận được những ý kiến đóng góp của các bạn và các thầy cô giáo trong khoa. Trước hết em xin cảm ơn các thầy cô giáo trong khoa Công nghệ thông tin trường đại học Bách khoa Hà Nội đã dạy dỗ chỉ bảo tận tình trong những năm qua. Cuối cùng em xin gửi lời càm ơn chân thành đến thầy giáo Ngô Văn Dũng - giảng viên trường đại học Bách khoa Hà Nội, đã tận tình chỉ bảo, hướng đẫn em hoàn thành đồ án này. Chương 1 Các kiến thức về mô hình mạng TCP/IP 1.Kiến thức chung về mạng máy tính Mạng máy tính đã và đang phát triển mạnh mẽ. Chỉ khoảng 2 thập kỷ về trước, chỉ có 1 số ít người có khả năng truy nhập vào mạng. Ngày nay thì sự truyền thông bằng máy tính đã trở thành 1 phần tất yếu của cơ sở hạ tầng. Mạng máy tính dược sử dụng trong tất cả các lĩnh vực thương mại, bao gồm cả việc quảng cáo, sản xuất hàng hoá, thanh toán hoá đơn, lập kế hoạch …. Vì vậy hầu hết các công ty lớn đều có mạng máy tính. Trong các trường đại học cũng vậy, mạng máy tính được sử dụng để nhằm cung cấp cho sinh viên và giáo viên có thể ngay lập tức truy nhập vào các thư viện trực tuyến để khai thác các thông tin cần thiết phục vụ cho mục đích học tập và giảng dạy của mình. Các cơ quan nhà nước, các tổ chức quân sự cũng sử dụng mạng máy tính. Nói tóm lại là đâu đâu chúng ta cũng thấy sự hiện diện của mạng máy tính. Tiếp theo đó là sự phát triển của mạng Internet toàn cầu. Đây là 1 hiện tượng thú vị và hấp dẫn nhất trong lĩnh vực mạng máy tính. Khoảng 10 năm về trước Internet chỉ là 1 dự án đang được nghiên cứu mà chỉ có 1 số ít trang web. Ngày nay Internet đã phát triển trong các hệ thống thống thông tin liên lạc mà được hàng triệu người trên kháp thế giới sử dụng(ví dụ như dịch vụ Mail của Yahoo…). Mạng Internet cũng được kết nối với hầu hết các công ty, các trường đại học, các tổ chức trên toàn thế giới. Việc kết nối với mạng internet lại hết sức đơn giản và thuận tiện, cùng với các dịch vụ sẵn sàng trên mạng giúp người dân có thể làm được rất nhiề điều trong khi chỉ cần ở ngay tại nhà, nên số ngưới sử dụng Internet ngày càng nhiều. Một bằng chứng về sự tác động của Internet trong xã hội hiện có thể được nhìn thấy được trong các quảng cáo của các tạp chí, vô tuyến thường có thêm các thông tin tham khảo tại các website mà có thể cung cấp các thông tin chi tiết hơn về các sản phẩm và dịch vụ của họ. 1.1. Mô hình OSI Hầu hết các mạng máy tính hiện nay đều sử dụng cấu trúc phân tầng theo mô hình OSI (Open Systems Interconnection - Mô hình liên kết các hệ thống mở). Theo mô hình OSI thì mạng máy tính được phân làm 7 tầng: - Tầng vật lý: Physical layer. - Tầng liên kết dữ liệu: Datalink layer. - Tầng mạng : Network layer. - Tầng giao vận : Transport layer. - Tầng phiên : Session layer. - Tầng trình bày : Presentation layer. - Tầng ứng dụng : Appication layer. Mô hình tham chiếu 7 lớp OSI 1.1.1. Tầng vật lý. Tầng này có chức năng truyền dòng bít không cấu trúc trên đường truyền vật lý nhờ các phương tiện điện, cơ, các hàm và các thủ tục. Tầng này thực hiện các chức năng: - Duy trì sự liên kết vật lý giữa các hệ thống. - Thiết lập và giải phóng sự đấu nối. - Truyền các bit qua kênh vật lý. Tầng này chỉ đơn giản là truyền dòng bít đi mà không cần biết dòng bít đó chứa nội dung gì. Các bít được truyền đi dạng số hoặc tương tự. Có rất nhiều giao thức trong tầng này tương ứng với các mạng khác nhau như Ethernet, TockenRing, FDDI… nhưng ở đây chỉ quan tâm đến mạng Ethernet. 1.1.2. Tầng liên kết dữ liệu. Tầng này có chức năng biến đổi các bit nhận được ở tầng vật lý thành các khung số liệu (frame), thông báo cho hệ phát biết kết quả thu được và truyền thông tin không lỗi lên tầng mạng. Khung dữ liệu bao gồm các trường: - Trường địa chỉ (Address field): chứa địa chỉ của phía phát và phía nhận dữ liệu. - Trường điều khiển (Control field): được dùng để phân loại các khung dữ liệu. - Trường dữ liệu (Data field): chứa dữ liệu đang được phát. - Trường kiểm soát lỗi (Checksum field): được dùng để phát hiện lỗi trong khung liên kết dữ liệu. Tầng liên kết dữ liệu là tầng đầu tiên trong mô hình đề cập đến vấn đề kiểm soát lỗi. Nó cung cấp các phương tiện để truyền thông tin thông qua liên kết vật lý, đảm bảo tin cậy thông qua các cơ chế đồng bộ hóa, kiểm soát lỗi, kiểm soát luồng dữ liệu. Các thông tin truyền ở tầng vật lý có thể làm hỏng các khung số liệu (frame error), phần mềm lớp liên kết dữ liệu sẽ thông báo cho tầng vật lý truyền lại các thông tin bị mất hay bị lỗi, đồng bộ hệ có tốc độ xử lý khác nhau. Phương pháp hay sử dụng dùng bộ đệm trung gian lưu trữ số liệu nhận. Ngoài ra, tầng vật lý còn đảm bảo việc quản lý các thông tin số liệu và các thông tin trạng thái. 1.1.3. Tầng mạng Tầng mạng là tầng có cấu trúc phức tạp nhất trong các tầng của mô hình OSI. Hai chức năng chủ yếu của tầng mạng là chọn đường (routing) và chuyển tiếp (relaying). Các thông số số liệu ở tầng mạng được tổ chức thành từng gói dữ liệu (packet) chứa đầy đủ địa chỉ nguồn và địa chỉ đích. Tầng mạng đảm nhiệm chức năng chọn đường giữa các nút mạng cho các gói dữ liệu này. Tầng mạng còn giúp điều hòa lưu lượng bằng cách kiểm soát thông tin trong mạng để quyết định số gói vận chuyển hạn chế tình trạng tắc nghẽn dữ liệu. Số lượng các gói dữ liệu truyền trên các kênh khác nhau của mạng phụ thuộc vào lưu lượng thông tin trên các đường truyền . Tầng mạng đảm bảo việc tìm đường tối ưu cho các gói dữ liệu bằng các giao thức chọn đường dựa trên các thiết bị chọn đường. Đây là chức năng kiểm soát lưu lượng của tầng mạng. Ngoài ra, tầng mạng còn thực hiện một số chức năng khác như thiết lập, duy trì và giải phóng các liên kết logic, kiểm sát lỗi, dồn kênh và phân kênh, cắt và hợp dữ liệu. Tầng mạng cung cấp phương tiện để truyền các đơn vị dữ liệu qua mạng, vì vậy các giao thức cho tầng mạng phải đáp ứng được với nhiều loại mạng và nhiều loại dịch vụ cung cấp bởi các mạng khác nhau. Giao thức chủ yếu được sử dụng trong tầng mạng là giao thức X25PLP (X25 Packet Level Protocol). 1.1.4. Tầng giao vận Tầng giao vận thực hiện các chức năng nhận thông tin từ tầng trên,chia thanh các gói nhỏ hơn và chuyển xuống tầng dưới và nhận thông tin từ tầng dưới chuyển lên phục hồi theo cách chia của hệ phát. Tầng này đảm bảo sự vận chuyển dữ liệu tin cậy và tính toàn vẹn của dữ liệu từ đầu cuối đến đầu cuối. Trong mô hình OSI, người ta phân biệt các tầng thấp và các tầng cao. Các tầng thấp là các tầng vật lý, liên kết dữ liệu,mạng và giao vận. Các tầng thấp này quan tâm đến việc truyền dữ liệu giữa các hệ thống đầu cuối qua phương tiện truyền thông. Tầng giao vận là tầng cao nhất trong các tầng thấp, nó che phủ toàn bộ các hoạt động của các tầng bên dưới nó đối với các tầng cao. Nó có khả năng thích ứng với nhiều đặc trưng của các loại mạng khác nhau như là mạng liên kết hay là không liên kết, mạng tin cậy hoặc chưa tin cậy... Tầng giao vận phải biết được yêu cầu về chất lượng dịch vụ của người sử dụng đồng thời cũng phải biết được khả năng cung cấp dịch vụ của mạng để có thể sử dụng các giao thức thích hợp trong truyền dữ liệu. 1.1.5. Tầng phiên Phiên (Session) là sự kết nối giữa hai người dùng hoặc giữa người dùng và máy chủ qua mạng. Tầng phiên cung cấp cho người sử dụng cuối các chức năng cần thiết để quản trị các phiên ứng dụng của họ. Tầng phiên thực hiện các chức năng sau: - Quản lý đối thoại (Dialogues Control). - Quản lý quyền truy nhập (Token Management). - Quản lý hành vi (Activity Management) Các liên kết tầng phiên có một sự tương ứng với các liên kết tầng giao vận.Tại một thời điểm cho trước có tồn tại một ánh xạ 1-1 giữa các liên kết phiên và các liên kết giao vận.Thời gian tồn tại các liên kết này có thể khác nhau. Trong đó: a)Một liên kết giao vận đảm nhiệm nhiều liên kết phiên liên tiếp. b)Một liên kết phiên sử dụng nhiều liên kết giao vận liên tiếp. 1.1.6. Tầng trình diễn Tầng trình diễn (Presentation Layer) quản lý phương pháp trình bày dữ liệu. Có nhiều phương pháp trình bày dữ liệu như mã ASCII và EBCDIC cho các file văn bản... Nếu hai bên dùng các phương pháp trình bày dữ liệu khác nhau thì sẽ không thể hiểu nhau. Do đó, tầng trình diễn đảm bảo cho các hệ thống cuối có thể truyền thông có kết quả ngay khi chúng sử dụng các biểu diễn các dữ liệu khác nhau. Tầng trình diễn dùng một biểu diễn chung đó. Có 3 dạng cú pháp thông tin được trao đổi giữa các thực thể ứng dụng: Cú pháp dược dùng bởi thực thể ứng dụng nguồn, cú pháp được dùng bởi thực thể ứng dụng đích và cú pháp dùng giữa các thực thể tầng trình diễn. Cú pháp dùng giữa các thực thể tầng trình diễn gọi là cú pháp truyền. Các tầng trình diễn đảm nhiệm việc chuyển đổi biểu diễn thông tin giữa cú pháp truyền và các cú pháp kia khi có yêu cầu. 1.1.7. Tầng ứng dụng Tầng ứng dụng chứa các giao thức và các hàm cần thiết cho các ứng dụng của người dùng để thực hiện các chức năng thông tin. Là tầng cao nhất trong cấu trúc OSI, nó có một số đặc điểm khác với các tầng trước đó nó không có cung cấp các dịch vụ cho tầng trên nên không có khái niệm điểm truy nhập dịch vụ tầng ứng dụng. Tầng ứng dụng bao gồm các thực thể ứng dụng dùng các giao thức ứng dụng và các dịch vụ trình diễn để trao đổi thông tin. Tầng ứng dụng là ranh giới giữa môi trường kết nối các hệ thống mở OSI và các tiến trình ứng dụng (Application Process). Tiến trình ứng dụng là một phần tử trong một hệ thống mở thực hiện việc xử lý thông tin cho một ứng dụng cụ thể. Trên đây chỉ mô tả sơ lược về nguyên lý phân tầng trong các mạng máy tính để thấy dược sự tương ứng giữa mô hình OSI và giao thức quan trọng nhất trên Internet là giao thức TCP/IP. 1.2. Cấu trúc phân tầng trong giao thức TCP/IP Trong liên lạc Internet mô hình TCP/IP được sử dụng để truyền thông giữa các mạng máy tính. Mô hình này rất phổ biến do tính mở và đơn giản của các giao thức. Mạng Internet có thể coi là cộng đồng các mạng LAN kết nối với nhau bằng giao thức TCP/IP. Giao thức TCP (Transmissions Control Protocol) và giao thức IP (Internet Protocol) là hai giao thức quan trọng nhất trên Internet. Giao thức TCP là giao thức ở tầng 4 trong mô hình 7 tầng OSI, nó là một giao thức hướng kết(conection - oriented) nối cung cấp một phương tiện truyền dữ liệu tin cậy chính xác. Khi truyền thông trên mạng nếu vì một lý do nào đó mà các gói dữ liệu bị mất thì giao thức này cho phép truyền lại các khối dữ liệu bị mất trong quá trình truyền. Trước mỗi phiên giao dịch thì cả hai bên truyền và nhận tiến hành một thủ tục gọi là bắt tay ba bước nhằm xác định các thông số cho việc trao đổi dữ liệu . Giao thức này cũng thực hiện việc kiểm tra lỗi nếu xảy ra trong quá trình truyền. Giao thức IP là giao thức thuộc tầng 3 trong mô hình 7 tầng OSI. Đây là môt giao thức không hướng nối kết(conectioness-oriented). Giao thức này không có cơ chế kiểm tra lỗi hay việc mất các gói tin trong khi truyền vì vậy nó cung cấp một phương thức truyền linh hoạt, nó tạo ra một liên kết ảo khi truyền các khối dữ liệu. Thực chất phải gọi giao thức TCP/IP là một họ các giao thức cùng làm việc với nhau để cung cấp phương tiện truyền thông liên mạng. Giao thức TCP/IP được mô tả theo mô hình phân tầng như hình dưới. Mô hình phân tầng của giao thức TCP/IP - Tầng ứng dụng (Application Layer): bao gồm các ứng dụng của người sử dụng và các tiến trình sử dụng trên mạng như: Telnet,FTP,SMTP... - Tầng giao vận (Transport Layer): Cung cấp các dịch vụ truyền dữ liệu liên tục như các giao thức TCP, UDP... - Tầng liên mạng (Internet Layer): Xác định đơn vị truyền và tìm đường đi từ đầu cuối này đến đầu cuối khác bao gồm các giao thức như IP, ARP. ICMP - Tầng truy cập mạng (Network Access Layer): Làm nhiệm vụ truy nhập mạng vật lý. Internet không có bất kỳ chuẩn nào được định nghĩa cho tầng này Các chuẩn thường sử dụng là:X25, Ethernet(IEE802.3), Token bus(IEE802.4), Token ring(IEE802.5). Tầng này tương ứng là hai tầng liên kế dữ liệu và tầng vật lý trong mô hình OSI Trong cấu trúc phân tầng này, khi truyền dữ liệu từ tầng ứng dụng đến tầng vật lý thì mỗi tầng đều thêm phần header hoặc có thể là tailer của mình vào. Các header này chứa các thông tin điều khiển để cho việc truyền dữ liệu được chính xác. Mỗi tầng dưới xem tất cả các thông tin mà nó nhận được từ tầng trên là dữ liệu và nó thêm phần header của nó vào trước dữ liệu này và truyền xuống tầng dưới. Quá trình truyền dữ liệu từ tầng dưới lên tầng trên sẽ diễn ra chiều ngược lại, tức là mỗi tầng sẽ phân tách phần header của nó ra trước khi truyền dữ liệu lên tầng trên. Mô hình việc đóng gói lại dữ liệu khi đi qua các tầng của mô hình TCP/IP So sánh cấu trúc phân tầng của OSI và TCP/IP Mỗi tầng có cấu trúc dữ liệu độc lập với tầng trên và tầng dưới nó. Tức là mỗi tầng đều có một cấu trúc dữ liệu riêng và một thuật toán riêng để mô tả cấu trúc đó. Tuy nhiên, cấu trúc dữ liệu của một tầng được cấu tạo tương thích với tầng cạnh nó để việc truyền dữ liệu có hiệu quả hơn. Hình trên so sánh cấu trúc phân tầng của OSI và TCP/IP. Các ứng dụng dùng TCP gọi cấu trúc dữ liệu của nó là stream, còn các ứng dụng dùng UDP gọi cấu trúc dữ liệu của nó là message. Khi các stream hay message này được truyền từ tầng TCP/UDP xuống tầng IP ở dưới chúng được thêm vào header của tầng IP và đựoc gọi là các Packet. Packet này đựoc truyền xuống tầng Network Interface. Tại đay chúng được thêm vào cả header và tailer tạo thành Frame. Frame này đựoc truuyền qua mạng Internet. 1.2.1. Tầng truy nhập mạng Tầng truy nhập mạng (Network Access Layer) là tầng thấp nhất trong cấu trúc phân tầng của TCP/IP. Các giao thức ở lớp này cung cấp cho hệ thống phương thức để truyền sữ liệu trên các tầng vật lý khác nhau của mạng. Nó định nghĩa cách thức truyền các khối dữ liệu IP (IP datagram). Các giao thức ở tầng này phải biết cấu trúc vật lý mạng ở dưới nó bao gồm cấu trúc gói, địa chỉ...) để định dạng được chính xác các dữ liệu sẽ được truyền tùy vào từng loại mạng cụ thể. Chức năng định dạng dữ liệu được truyền ở tầng này bao gồm việc đóng gói các khối dữ liệu IP datagram vào các frames sẽ được truyền trên mạng và sắp xếp các địa chỉ IP vào phần địa chỉ vật lý được dùng cho mạng. Tầng này tương ứng với tầng 1, tầng 2 và một phần tầng 3 của mô hình OSI. 1.2.2. Tầng liên mạng Tầng liên mạng (Internet Layer) là tầng ngay trên tầng truy nhập mạng trong cấu trúc phân tầng của TCP/IP. Internet Protocol (IP) là giao thức quan trọng nhất trong tầng này và là giao thức trung tâm của TCP/IP. Nó thực hiện một số chức năng chính sau: - Định nghĩa các khối dữ liệu (datagram). - Định nghĩa hệ thống địa chỉ IP. - Truyền dữ liệu giữa tầng giao vận và tầng truy nhập trong cấu trúc phân tầng TCP/IP. - Tìm đường để gửi các khối dữ liệu đến các trạm xa. - Phân đoạn và hợp nhất các gói dữ liệu. 1.2.3. Tầng giao vận Hai giao thức quan trọng nhất trong tầng này là TCP (Transmission Control Protocol) và UDP (User Datagram Protocol). Giao thức TCP cung cấp dịch vụ truyền dữ liệu tin cậy với khả năng phát hiện lỗi và sửa lỗi theo kiểu end-to-end. Giao thức UDP cung cấp các chương trình ứng dụng thâm nhập trực tiếp đến các dịch vụ lưu chuyển datagram, cho phép trao đổi các thông điệp ra ngoài mạng với số lượng nhỏ các giao thức. Cả hai giao thức này đều truyền dữ liệu giữa tầng ứng dụng và tầng Internet. IP là giao thức thuộc loại không liên kết (connectionless), còn TCP là giao thức có liên kết (connection-oriented), nghĩa là phải có các thủ tục thiết lập liên kết và giải phóng liên kết. Chức năng liên kết của TCP tương ứng với tầng giao vận (tầng 4) của mô hình OSI. TCP dùng phương thức trao đổi các dòng dữ liệu (Data Stream) giữa những người sử dụng,dữ liệu theo dòng cũng được phân đoạn thành các TPDU (Transport Protocol Data Unit) để truyền đi. UDP là giao thức thuộc loại không liên kết. UDP truyền dữ liệu một cách trực tiếp, nó sử dụng 16 bit để ghi nhận cổng nguồn và cổng đích trong phần header của dữ liệu.Các cổng chuẩn là các cổng hay được dùng, ý nghĩa của từng cổng được quy định theo một chuẩn nhất định. UDP truyền từng thông điệp tới IP để yêu cầu truyền. Khi tầng ứng dụng gửi một yêu cầu qua UDP Datagram và không có phản hồi trong một số lần nào đó thì nó sẽ yêu cầu tầng ứng dụng gửi yêu cầu lại. 1.2.4. Tầng ứng dụng Đây là tầng trên cùng trong họ giao thức TCP/IP. Tầng này bao gồm tất cả các tiến trình dùng các giao thức của tầng giao vận để truyền dữ liệu. Tầng ứng dụng chứa các giao thức và các hàm cần thiết cho các ứng dụng của người dùng để thực hiện các chức năng thông tin như: - Các giao thức cho việc truy nhập file từ xa: mở, đóng, đọc, ghi và truy nhập các file chia xẻ. Như FTP, FTTP… - Các dịch vụ xử lý mẫu tin cho các ứng dụng e-mail. - Và các dịch vụ khác như Gopher, Mosais, WWW... Như vậy họ giao thức TCP/IP được xây dựng dựa trên cơ sở phân tầng có sự tương ứng với mô hình tham chiếu OSI. Các tầng trong họ giao thức TCP/IP đều chứa một tập các giao thức cung cấp khả năng truyền dữ liệu tin cậy giữa các tầng và giữa các mạng kết nối với Internet. Họ giao thức TCP/IP là cơ sở quan trọng để các mạng liên kết với nhau trên Internet. 2. Giao thức IP Giao thức trên mạng IP (Internet Protocol) cung cấp chức năng liên kết các mạng nội bộ thành liên mạng để truyền dữ liệu. Giao thức IP có vai trò tương tự như giao thức tầng mạng của mô hình tham chiếu OSI. IP là giao thức không hướng kết nối (connectionless- oriented ). Giao thức không hướng kết nối này không đảm bảo chính xác cho việc giao vận. Không có báo nhận, không có điều khiển luồng không truyền lại hoặc khôi phục lỗi. Nó không cần có giai đoạn thiết lập liên kết trước khi truyền dữ liệu và do đó không cần phải giải phóng liên kết khi không có nhu cầu truyền. Điều này làm giảm nhẹ các thủ tục kết nối mạng nhưng làm tăng độ phức tạp trong công việc kiểm soát luồng dữ liệu và kiểm tra tính đúng đắn của dữ liệu, đặc biệt là trong trường hợp nhiều người sử dụng đồng thời. Đơn vị dữ liệu truyền trong IP là datagram. Mỗi datagram có phần header chứa thông tin cần thiết để truyền dữ liệu đi. Trong header này có chứa địa chỉ đích, địa chỉ đích bao gồm địa chỉ mạng và địa chỉ trạm trên mạng đó. Nếu địa chỉ đích là địa chỉ của một trạm nằm trên mạng đó thì trạm nguồn sẽ truyền thẳng tới trạm đó, nếu không nằm trên cùng một mạng với trạm nguồn thì các khối dữ liệu được truyền đến Gateway để chuyển đi. 2.1. Cấu trúc khối dữ liệu IP Cấu trúc khối dữ liệu IP được mô tả trên hình, ý nghĩa các trường như sau: Trường VER (Version): 4 bit. Chỉ báo version của IP đang sử dụng. Trường IHL (Internet Header Length): 4 bit. Chỉ độ dài header của datagram tính theo đơn vị từ (Word) 32 bits. độ dài tối thiểu là 5 words, tức là không có option nào được sử dụng. - Trường Type of service: 8 bits. Chứa các thông số về dịch vụ, có vai trò quan trọng trong việc điều khiển các gói dữ liệu. 0 1 2 3 4 5 6 7 Precedence D T R Reserved Khuôn dạng trường Type of service Bit 0 3 4 7 8 15 16 18 19 31 VER IHL Type of Service Total Length Identification Flags Fragment Offset Time to live Protocol Header Checksum Source Address Destination Address Options + Padding Data (max 65535 bytes) Cấu trúc của IP Datagram - Trường Total Lengh: 16 bit. Chỉ độ dài toàn bộ khối dữ liệu datagram, kể cả phần header, tính theo đơn vị byte. Trường này có 16 bit, vậy kích thước lớn nhất của khối lên đến 216 = 65536 bytes, lớn hơn hầu hết các kích thước các khối dữ liệu của các mạng vật lý trợ giúp khác. Khi khối dữ liệu được phân đoạn thì giá trị này chỉ số hiệu của khối ban đầu. - Trường Identification:16 bit. Dùng để nhận dạng khối dữ liệu, định danh duy nhất cho một datagram trong thời gian nó còn trên liên mạng, nhận dạng các đoạn trong khối giống như số hiệu tuần tự. Trường Flags:3 bit. Liên quan đến sự phân đoạn các datagram. Bit 0:không sử dụng, luôn lấy giá trị 0. Bit 1(DF): cho biết khối dữ liệu có phân đoạn được hay không. DF=0 : được phép phân đoạn. DF=1 : không được phân đoạn. Nếu gói dữ liệu quá lớn thì sẽ bỏ gói tin. Bit 2(MF):cho biết có phải là đoạn cuối cùng của khối dữ liệu hay không. MF=0 : đoạn cuối cùng. MF=1 : không phải đoạn cuối cùng. - Trường Fragment Offset: 13 bit. Chỉ vị trí của đoạn (fragment) trong datagram, tính theo đơn vị 64 bit, mỗi fragment phải chứa một vùng dữ liệu có độ dài là bội số của 64 bit. - Trường Time to live: 8 bit. Qui định thời gian tồn tại của datagram trong liên mạng (tính bằng giây). Thời gian này được cho bởi trạm gửi và được giảm đi một đơn vị khi đi qua một Router của liên mạng. Khi thời gian này giảm đến 0, datagram bị loại bỏ để tránh tình trạng một datagram cứ chạy mãi trên mạng. Trường Protocol: 8 bit. Chỉ giao thức tầng trên kế tiếp sẽ nhận vùng dữ liệu này. 1:ICMP. 6:TCP. 8:EGP. 17:UDP. 89:OSPF. Trường Header Checksum:16 bit. Mã kiểm soát lỗi CRC 16 bit cho header. Trường Source Address:32 bit. Địa chỉ IP nguồn. Trường Destination Address:32 bit. Địa chỉ IP đích. Trường Options: độ dài thay đổi. Khai báo các options do người gửi yêu cầu. Trường Padding: độ dài thay đổi. Vùng đệm, dùng để đảm bảo cho phần header luôn kết thúc ở một mốc 32 bit. Trường Data: độ dài thay đổi. Phần này gồm các header của các giao thức tầng cao hơn và dữ liệu của người sử dụng. Có độ dài là bội số của 8 bit, tối đa là 65535 bytes. 2.2. Cấu trúc địa chỉ IP Trên mạng Internet thì có rất nhiều trạm kết nối vào. Để việc truyền thông trao đổi được chính xác thì mỗi trạm phải có một định danh duy nhất trên mạng. IP sử dụng 32 bit địa chỉ cho mỗi trạm trong liên mạng gọi là địa chỉ IP. Mỗi địa chỉ IP được chia thành 4 vùng, mỗi vùng 1 byte, thường được biểu thị dưới dạng thập phân có dấu chấm phân cách các vùng. Địa chỉ IP gồm hai phần. Một phần dành cho việc đánh số mạng(NetId) , phần còn lại dùng để đánh số trạm(HostId) trong mạng đó. Tuỳ theo nhu cầu số lượng các trạm trong các mạng mà địa chỉ IP lại được chia ra thành 5 lớp địa chỉ riêng biệt là A, B, C, D, E. Cấu trúc các lớp địa chỉ IP - Lớp A: bit đầu tiên là 0, 7 bit kế tiếp là chỉ số hiệu mạng, 24 bit ccòn lại là chỉ số hiệu của trạm trong mạng đó. Lớp này định danh tối đa là 27 mạng, mỗi mạng có tối đa 224 trạm làm việc nối vào. Lớp này dùng cho các mạng có số trạm làm việc cực lớn. - Lớp B: 2 bit đầu tiên là 10, 14 bit kế tiếp dành cho số hiệu mạng, 16 bit cuối cùng dùng cho đánh số cá trạm. Lớp này định danh tối đa 214 mạng mỗi mạng có tối đa 216 trạm nối vào. - Lớp C: 3 bit đầu tiên là 110, 21 bit kế tiếp dùng định số hiệu mạng, 8 bit cuối dùng đánh số cá trạm. Lớp này định danh tối đa 221 mạng mỗi mạng có tối đa 28 trạm làm việc nối vào. - Lớp D: 4 bit đầu tiên là 1110, 28 bit còn lại được dùng để gửi khối dữ liệu IP đến nhóm người sử dụng trên mạng (usergroup). Địa chỉ tổng quát của lớp này là 224.X.X.X - Lớp E: 5 bit đầu tiên là 11110. Hiện nay chưa được dùng Trong 5 lớp trên thì 3 lớp A, B, C là đựoc dùng bình thường còn dải địa chỉ lớp D thì được dành riêng cho Multycast(tức là dùng 1 địa chỉ của dải này có thể đại diện cho một nhóm các người dùng. Khi thông tin được gửi đến địa chỉ này thì nó được đồng thời gửi đến tất cả cá người dùng thuộc nhóm đấy). Dải địa chỉ lóp E thì đựơc dùng dự phòng cho nhu cầu về sau Một số địa chỉ đặc biệt 224.0.0.1 dùng để chỉ tất cả các trạm trong cùng một mạng 224.0.0.2 dùng để chỉ tất cảc các switch trong mạng 255.255.255.255 hay còn gọi là địa chỉ broadcast dùng để gửi đến tất tả các thiết bị trong mạng Các địa chỉ này không được dùng để định danh một trạm hay một mạng nào. Chúng chỉ được dùng cho các mục đích đặc biệt. 2.3. Phân đoạn các khối dữ liệu Trong quá trình truyền dữ liệu, một khối dữ liệu (datagram) có thể được truyền đi thông qua nhiều mạng khác nhau. Một datagram nhận được từ một mạng nào đó có thể quá lớn đối với một đơn vị dữ liệu trên mạng khác, do mỗi loại cấu trúc mạng cho phép một đơn vị truyền cực đại (Maximum Transmission Unit MTU) khác nhau. MTU là kích thước lớn nhất của một khối mà chúng có thể truyền. Nếu như một khối dữ kiệu nhận được từ một mạng nào đó mà lớn hơn MTU thì nó cần phải được phân đoạn ra thành khối nhỏ hơn gọi là fragment để truyền đi, quá trình này gọi là phân đoạn các khối dữ liệu. Khuôn dạng của các fragment cũng giống như khuôn dạng của các khối dữ liệu. Trong phần header có chứa các thông tin để xác định mỗi fragment và cung cấp các thông tin để hợp nhất các fragment này lại thành khối dữ liệu như ban đầu. Trường Indentification để xác định fragment này thuộc khối dữ liệu nào. Tất cả các fragment đều có số hiệu nhận dạng của khối dữ liệu ban đầu trước khi phân đoạn. Điều này được sử dụng để nhận dạng các fragment của khối dữ liệu ban đầu khi ráp nối chúng lại với nhau tại diểm đích. Mỗi lần một khối dữ liệu được phân đoạn chúng sẽ không được ráp lại với nhau cho đến khi chúng đến được nút cuối cùng. 3. Giao thức TCP Giao thức điều khiển truyền TCP (Transmission Control Protocol) là một giao thức theo kiểu hướng kết nối (connection-oriented), nghĩa là cần phải thiết lập một liên kết logic giữa một cặp thực thể TCP trước khi chúng trao đổi dữ liệu với nhau. Giao thức TCP là một giao thức truyền tin cậy. Điểm mạnh của TCP là nó rất linh hoạt. Nó không chỉ rõ bất cứ một giao thức nào cho tầng trên hay tầng dưới nó trong mô hình phân cấp. Trong Internet thì giao thức tầng dưới của TCP luôn là là IP . Dữ liệu của TCP là đoạn dữ liệu( Segment). Một tư tưởng quan trọng trong TCP là một kết nối. TCP cung cấp 1 tập các địa chỉ hay còn gọi là cổng dịch vụ(port) cho 1 máy tính. Rất nhiều tiến trình có thể gắn với một cổng. Địa chỉ IP và một cổng thì xác định một socket, một cặp socket chỉ ra một kết nối. Trước khi truyền thông được thực hiện thì một kết nối phải được thiết lập trước giữa hai tiến trình. Kết nối này còn có thể được xem là một mạch ảo(virtual circuit). Nó tương tự với việc một kết nối điện thoại đựơc thiết lập trước khi bắt đầu tiến hành hội thoại. Trong quá trình truyền thông trên một mạng thì các đoạn dữ liệu có thể bị mất vì một lý do nào đó thì TCP cho phép bên nhận có thể gửi báo nhận(acknowledgment) để báo cho bên gửi truyền lại đoạn dữ liệu đó. Khi bắt đầu gửi dữ liệu thì bên gửi khởi động một bộ đếm thời gian, và gửi kèm một số thứ tự của đoạn dữ liệu. Khi bên nhận nhận được thì lại gửi ngược lại một số báo nhận. Số báo nhận này tham chiếu đến đoạn dữ liệu tiếp theo mà bên nhận đang mong nhận tiếp. Nếu báo nhận không được nhận trước khi quá một thời gian nào đó thì đoạn dữ liệu sẽ được gửi lại. Điều khiển luồng (flow control) đựơc thực hiện theo cách một biến cửa sổ đựoc gửi đi với báo nhận của bên nhận. Nếu bên nhận không đủ bộ đệm thì nó sẽ gửi một biến cửa sổ với giá trị nhỏ hơn. Cứ thế cho đến khi tốc độ truyền nhận phù hợp cho cả hai bên -Tức là bên gửi không gửi nhiều hơn khả năng bên nhận có thể nhận. 3.1. Cấu trúc đoạn dữ liệu TCP Khuôn dạng của đoạn dữ liệu TCP được mô tả trên hình Mô tả các trường: Source Port: 16 bit. Số hiệu cổng của trạm nguồn. Destination Port : 16 bit. Số hiệu cổng của trạm đích Sequense Number: 32 bit. Số hiệu tuần tự của byte dữ liệu đầu tiên trong segment, trừ trường hợp bit SYN được thiết lập. Nếu bit SYN được thiết lập thì Sequence Number là số hiệu tuần tự ban đầu. Trường này được dùng để thực hiện việc điều đình khi TCP mở một kết nối với một TCP ở xa. Source Port Destination Port Sequence Number Acknowledgment Number Data Offset Reserved URC ACK PSH RST SYN FIN Window Checksum Urgent Poi._.nter Options Padding TCP Data Khuôn dạng TCP segment Acknowledgment Number: 32 bit. Số hiệu của segment tiếp theo mà trạm nguồn đang chờ để nhận. Trường này được dùng để báo cho biết segment trước có nhận thàn công hay không. Trường này được kiểm tra khi ACK được thiết lập. Khi kết nối được thiết lập thì trường này luôn được gửi đi. Data Offset: 4 bit. Cho biết số lượng các word trong header của TCP. Chỉ vị trí bắt đầu của vùng dữ liệu. Reserved: 6 bit. Chưa sử dụng. Các cờ: URG: khi được thiết lập thì vùng Urgent Pointer có hiệu lực. ACK: khi được thiết lập thì vùng Acknowledgment Number có hiệu lực. PSH : chức năng PUSH được thiết lập. RST : khởi động lại liên kết. SYN: Dùng để đồng bộ hóa các số hiệu tuần tự lúc ban đầu khi thiết lập liên kết. FIN : không còn dữ liệu ở trạm nguồn để truyền tiếp. Window: 16 bit. Chỉ số byte dữ liệu được chấp nhận, bắt đầu từ byte được chỉ ra trong vùng ACK Number. Trường này được dùng để kiểm soát luồng truyền quản lý buffer. Checksum: 16 bit. Mã kiểm soát lỗi CRC cho toàn bộ segment (gồm cả header và data). Urgent Pointer: 16 bit. Có hiệu lực khi bit URG được thiết lập. Chỉ số hiệu tuần tự của byte đi theo sau dữ liệu khẩn, cho biết độ dài của dữ liệu khẩn. Options: có độ dài thay đổi được. Khai báo các options của TCP, trong đó có độ dài tối đa của vùng TCP data trong một segment. Padding: có độ dài thay đổi. Phần chèn thêm vào header của TCP để header luôn kết thúc ở cột mốc 32 bit, trường Padding chỉ gồm toàn số 0. TCP data: độ dài thay đổi. Chứa dữ liệu của tầng trên. Độ dài tối đa ngầm định là 556 byte, giá trị này có thể thay đổi được trong phần options. 3.2. Mô hình hoạt động của TCP Khi cờ SYN được thiết lập là 1 thì gói tin TCP là gói yêu cầu mở kết nối hoặc gói xác nhận mở kết nối. Cờ SYN là 1 thì cờ ACK có thể là 1 hoặc 0, các tổ hợp cờ SYN và ACK mô tả trong bảng. Cờ SYN Cờ ACK Ý nghĩa 1 0 Gói mở kết nối TCP 1 1 Xác nhận mở kết nối 0 1 Gói dữ liệu hoặc gói xác nhận Ý nghĩa của các tổ hợp SYN và ACK Khi một client trên Internet muốn mở kết nối với một server nào đó thì nó gửi gói TCP có các cờ: SYN = 1 ACK = 0 Server trả lời một gói xác nhận mở kết nối có các cờ như sau: SYN = 1 ACK = 1 Khi client nhận được gói xác nhận mở kết nối từ server nó xác nhận bằng cách gửi một gói xác nhận đã nhận được gói xác nhận mở kết nối đến server có các cờ: SYN = 0 ACK = 1 Đến đây đã hoàn thành quá trình bắt tay ba bước (three-way handshake) giữa client và serverr. 4. Khuôn dạng dữ liệu của frame ethernet. Trên mô hình mạng TCP/IP tại tầng truy nhập mạng có thể dùng các chuẩn như Ethernet802.3, Tockenring hay FDDI. Nhưng phổ biến là Ethernet802.3. Trong chương trình của em hỗ trợ bắt gói tin theo chuẩn Ethernet802.3 nên em xin giới thiệu khuôn dạng gói tin tại tầng này theo chuẩn Ethernet 802.3. Theo chuẩn này thì độ dài tối đa của gói tin Ethernet là 1518 byte. Phần header cố định là 14 byte. Phần dữ liệu bên trong có thể thay đổi từ 46 byte đến 1500 byte, và cuối cùng là phần checksum dài 4 byte. Độ dài tối thiểu của gói Ethernet là 64 byte, nếu không dủ 64 byte thì nó sẽ tự động thêm các byte rỗng vào cho đủ 64 byte Khuôn dạng gói tin tại tầng truy cập phương tiện theo chuẩn Ethernet 802.3 Trong đó Destination Mac Address là địa chỉ Mac của máy đích cần gửi dữ liệu đến. Trường này dài 6 byte Source Mac Address là địa chỉ Mac của máy nguồn gửi dữ liệu đến. Trường này dài 6 byte Length chứa trong 1 byte thể hiện độ dài của header gói Ethernet, nhưng thường là giá trị 14 . Type là trường thể hiện giao thức lớp trên của giao thức IP(là TCP, UDP...) . Trường này chứa trong 1 byte. Như vậy phần tiếp theo sau header là dữ liệu của gói Ethernet. Vị trí bắt đầu của header của gói Ip cũng coi như là bắt đầu tại đây. Viêc biết rõ các trường thông tin trong gói Ethernet này sẽ phục vụ chúng ta trong việc phân tích các thông tin của gói tin khi nhận được từ card mạng. Một ví dụ cho việc phân tích một gói tin như sau: Chương 2 Tổng quan về an ninh mạng, các nguy cơ bị tấn công, và một số biện pháp phòng tránh. 1. Tổng quan về an ninh mạng 1.1. Đặt vấn đề Nhưng đồng thời với sự phát triển lớn mạnh của mạng máy tính, Internet và các dịch vụ trên đó thì số lượng các vụ tấn công trên Internet cũng tăng rất nhanh. Rõ ràng rằng mạng Internet đã làm thay đổi cuộc sống của con người, làm thay đổi công việc kinh doanh làm cho nó trở nên dễ dàng hơn. Nhưng đồng thời với lợi ích to lớn của nó, mạng Internet cùng với các công nghệ liên quan đã mở ra một cánh cửa làm tăng số lượng các vụ tấn công vào những  công ty , cơ quan và cả những cá nhân, nơi lưu giữ những dữ liệu nhạy cảm như bí mật Quốc gia, số liệu tài chính, số liệu cá nhân... Hậu quả của các cuộc tấn công này rất đa rạng từ các phiền phức nhỏ gây ra cho các người dùng cá nhân , nhưng cũng có thể gây ra các tổn thất nghiêm trọng như các dữ liệu quan trọng bị xóa, sự riêng tư bị xâm phạm, và thậm chí toàn bộ hệ thống có thể bị tê liệt hoàn toàn. Để việc bảo vệ an toàn thông tin được hiệu quả cao phải lường trước được càng nhiều càng tốt các khả năng xâm phạm, các sự cố rủi ro đối với các loại thiết bị và dữ liệu trên mạng. Xác định càng chính xác các nguy cơ nói trên thì càng giải quyết tốt các giải pháp phù hợp để giảm thiểu các thiệt hại. Mọi nguy cơ đều cần phải quan tâm vì các vụ tấn công nhỏ thường có tần suất cao và các vụ việc ít xảy ra đôi khi gây nên những hậu quả khôn lường. 1.2. Tình hình thực tế Theo số liệu của CERT (Computer Emergency Response Team - "Đội cấp cứu máy tính"), số lượng các vụ tấn công trên Internet được thông báo cho tổ chức này là ít hơn 200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào năm 1993, và 2241 vào năm 1994. Những vụ tấn công này nhằm vào tất cả các máy tính có mặt trên Internet, các máy tính của tất cả các công ty lớn như AT&T, IBM, các trường đại học, các cơ quan nhà nước, các tổ chức quân sự, nhà băng... Một số vụ tấn công có quy mô khổng lồ (có tới 100.000 máy tính bị tấn công). Hơn nữa, những con số này chỉ là phần nổi của tảng băng. Một phần rất lớn các vụ tấn công không được thông báo, vì nhiều lý do, trong đó có thể kể đến nỗi lo bị mất uy tín, hoặc đơn giản những người quản trị hệ thống không hề hay biết những cuộc tấn công nhằm vào hệ thống của họ. Không chỉ số lượng các cuộc tấn công tăng lên nhanh chóng, mà các phương pháp tấn công cũng liên tục được hoàn thiện. Điều đó một phần do các nhân viên quản trị hệ thống được kết nối với Internet ngày càng đề cao cảnh giác. Cũng theo CERT, những cuộc tấn công thời kỳ 1988-1989 chủ yếu đoán tên người sử dụng-mật khẩu (UserID-password) hoặc sử dụng một số lỗi của các chương trình và hệ điều hành (security hole) làm vô hiệu hệ thống bảo vệ, tuy nhiên các cuộc tấn công vào thời gian gần đây bao gồm cả các thao tác như giả mạo địa chỉ IP, theo dõi thông tin truyền qua mạng, chiếm các phiên làm việc từ xa (telnet hoặc rlogin). 1.3. Các hình thức xâm phạm an toàn mạng và nhu cầu bảo vệ dữ liệu. Về bản chất có thể phân loại các tấn công thành hai loại : tấn công thụ động và tấn công chủ động. “Thụ động” và “chủ động” ở đây được hiểu theo nghĩa có can thiệp vào nội dung và vào luồng thông tin trao đổi hay không? Tấn công “thụ động” chỉ nhằm đặt mục tiêu cuối cùng là nắm bắt được thông tin, có thể không biết được nội dung nhưng cũng có thể dò ra được người gửi, người nhận nhờ vào thông điều khiển giao thức chứa trong phần đầu của các gói tin. Hơn thế nữa, kẻ xấu còn có thể kiểm tra được số lượng, độ dài và tần số trao đổi để biết được đặc tính của dữ liệu. Như vậy các tấn công “thụ động” không làm sai lạc hoặc huỷ hoại nội dung và luồng thông tin trao đổi trên mạng. Trong khi đó các tấn công “chủ động” lại có thể biến đổi, xoá bỏ, làm trễ, sắp xếp lại thứ tự hoặc làm lặp lại các gói tin ngay tại thời điểm đó hoặc sau đó một thời gian. Hơn thế, một số thông tin ngoại lai còn có thể được đẩy vào để làm sai lệch nội dung của thông tin gốc hoặc nhằm các mục đích không bình thường khác. Một hình thức tấn công “chủ động” khác đó là làm vô hiệu hoá các chức năng phục vụ người dùng một cách tạm thời hoặc lâu dài. Cũng cần lưu ý là việc tấn công thụ động thường khó có thể phát hiện nhưng lại có thể ngăn chặn một cách hiệu quả. Trái lại tấn công chủ động rất dễ bị phát hiện nhưng lại rất khó ngăn chặn. Kẻ tấn công trong thực tế có thể thâm nhập vào bất cứ điểm nào mà thông tin anh ta quan tâm đi qua hoặc được cất giữ. Điểm đó có thể ở trên đường truyền, ở máy chủ nhiều người dùng hoặc tại các giao diện kết nối liên mạng (bridge, router, gateway......). Trong quan hệ tương tác ngưòi máy, các thiết bị ngoại vi, đặc biệt là các terminal (tổ hợp bàn phím và màn hình) chính là cửa ngõ thuận lợi nhất cho các loại thâm nhập. Ngoài ra cũng cần kể đến khả năng phát xạ điện từ của máy tính làm cho nó trở thành vật chuyển giao thông tin. Bằng các thiết bị chuyên dụng người ta có thể đón bắt các tia phát xạ này và giải mã chúng. Người ta cũng có thể sử dụng các tia bức xạ được điều khiển từ bên ngoài để tác động lên máy tính gây lỗi và sự cố đối với thiết bị và dữ liệu. Tất cả những điều tệ hại đó đều có thể xảy ra đối với đường truyền. Nói chung trong hầu hết các trường hợp đều có thể đánh giá được thiệt hại của các vụ tấn công, nhưng công việc rất cần thiết đó lại thường hay bị bỏ qua. Trước khi quyết định đầu tư cho các giải pháp bảo vệ thông tin, cần phải đánh giá được chi phí để khôi phục dữ liệu và các tổn thất khác nếu những kẻ tấn công (có thể là đối thủ cạnh tranh) tìm được cách thâm nhập vào mạng. Trước khi đi vào các giải pháp an toàn mạng cụ thể, cần nhấn mạnh một thực tế: không có thứ gì là an toàn tuyệt đối cả. Bởi hệ thống bảo vệ có thể chắc chắn đến đâu đi nữa rồi cũng có lúc bị vô hiệu hoá bởi những kẻ phá hoại điêu luyện về kỹ xảo và có đủ thời gian. Chưa kể trong nhiều trường hợp kẻ phá hoại lại nằm ngay trong hàng ngũ chúng ta và được chúng ta đào tạo, huấn luyện hết mình. Từ đó có thể thấy rằng vấn đề an toàn mạng thực tế là cuộc chạy tiếp sức không ngừng, và không ai dám chắc khẳng định là có đích cuối cùng hay không. Vì vậy, nhu cầu bảo vệ thông tin đối với các máy tính kết nối mạng là rất lớn, có thể tạm chia thành ba loại gồm: Bảo vệ dữ liệu Bảo vệ các tài nguyên sử dụng trên mạng Bảo vệ danh tiếng của cơ quan, tổ chức 1.3.1. Bảo vệ dữ liệu Những thông tin lưu trữ trên hệ thống máy tính cần được bảo vệ do các yêu cầu sau: Bảo mật: Những thông tin có giá trị về kinh tế, quân sự, chính trị… cần được giữ kín. Toàn vẹn: Thông tin không bị mất mát hay sửa đổi. Kịp thời: Yêu cầu truy nhập thông tin vào đúng thời điểm cần thiết. Trong đó, yêu cầu về bảo mật thường được coi là vấn đề số một đối với thông tin lưu trữ trên mạng. Tuy nhiên, tính toàn vẹn cũng là một trong những vấn đề rất quan trọng, vì không có một cá nhân hay tổ chức nào lại muốn lãng phí tài nguyên vật chất và thời gian để lưu trữ những thông tin mà không biết chắc về tính đúng đắn của những thông tin đó. 1.3.2. Bảo vệ các tài nguyên sử dụng trên mạng Trong các cuộc tấn công trên Internet, kẻ tấn công sau khi đã xâm nhập, làm chủ được hệ thống nào đó thì chúng có thể sử dụng hệ thống này để phục vụ các mục đích của chúng. Chúng có thể làm bàn đạp, sử dụng kết nối mạng có sẵn của máy đó, để tấn công vào hệ thống khác… 1.3.3. Bảo vệ danh tiếng Có rất nhiều cuộc tấn công không được thông báo rộng rãi, và một trong những nguyên nhân là nỗi lo bị mất uy tín của cơ quan, đặt biệt là các công ty lớn và các cơ quan quan trọng trong bộ máy nhà nước. Trong trường hợp người quản trị hệ thống chỉ được biết đến sau khi chính hệ thống của mình đã bị làm bàn đạp để tấn công các hệ thống khác thì tổn thất về uy tín là rất lớn và có thể để lại lâu dài 2. Các mối đe dọa vào an ninh hệ thống: Các hệ thống máy tính được cấu thành từ các thiết bị phần cứng như bộ vi xử lý, bộ điều khiển vào ra, thiết bị lưu trữ, .v.v. và hệ điều hành với các thành phần lõi hệ điều hành, hệ thống tệp, các tiến trình hệ thống, các dịch vụ hệ thống, .v.v. Tất cả các thành phần nêu trên đều có thể bị đột nhập hay bị lợi dụng, khai thác thông qua các kẽ hở của chính bản thân các thành phần đó nhằm làm suy yếu, tê liệt một phần hoặc toàn bộ hệ thống. 2.1. Các tấn công vào phần cứng: Các tấn công vào phần cứng dựa trên lỗi của chính bản thân phần cứng. Đây là lỗi của thiết kế phần cứng và kẻ tấn công có thể lợi dụng những lỗi này để tấn công hệ thống. Thí dụ: mặc dù đã được cải tiến và phát triển rất lâu, bộ vi xử lý Pentium của Intel vẫn còn có lỗi. Chỉ cần thực hiện một đoạn mã đặc biệt là có thể làm cho hệ thống bị tê liệt hoàn toàn, bất kể hệ điều hành đang chạy có ưu việt đến đâu, chạy ở chế độ bảo vệ nào. 2.2. Tấn công trực tiếp Phần lớn các cuộc tấn công vào hệ thống là trực tiếp. Những kẻ tấn công muốn sử dụng máy tính của chúng ta như là những người dùng hợp pháp và họ có hàng tá cách để chiếm được quyền truy nhập vào bên trong. Một phương pháp tấn công cổ điển là dò cặp tên người dùng và mật khẩu (username/password). Đây là phương pháp đơn giản, dễ thực hiện và không đòi hỏi một điều kiện đặc biệt nào để bắt đầu. Kẻ tấn công có thể sử dụng những thông tin như tên người dùng, ngày sinh, địa chỉ, số nhà… để đoán mật khẩu. Trong trường hợp có được danh sách người dùng và những thông tin về môi trường làm việc thì sẽ có những chương trình tự động hoá về việc dò tìm mật khẩu này. Một số chương trình có thể lấy được dễ dàng từ Internet để giải các mật khẩu đã mã hoá của hệ thống, chúng có khả năng như thử các tổ hợp các từ trong một từ điển lớn theo những nguyên tắc do người dùng tự định nghĩa. Trong một số trường hợp, khả năng của phương pháp này có thể lên tới 30%. Một phương pháp khác là sử dụng các lỗi của chương trình ứng dụng và bản thân hệ điều hành. Đây là phương pháp đã được sử dụng từ những vụ tấn công đầu tiên và vẫn tiếp tục được sử dụng để chiếm quyền truy nhập. Trong một số trường hợp, phương pháp này cho phép kẻ tấn công có được quyền của người quản trị hệ thống. Để minh hoạ cho phương pháp này, ta có thể lấy ví dụ chương trình sendmail và chương trình rlogin của hệ điều hành UNIX. Sendmail là một chương trình phức tạp, với mã nguồn bao gồm hàng ngàn dòng lệnh của ngôn ngữ C. Sendmail được chạy với quyền ưu tiên của người quản trị hệ thống, do chương trình phải có quyền ghi vào hộp thư của những người sử dụng máy. Và Sendmail trực tiếp nhận các yêu cầu về thư tín trên mạng bên ngoài. Đây là những yếu tố làm cho Sendmail trở thành một nguồn cung cấp những lỗ hổng về bảo mật để truy nhập hệ thống. Rlogin cho phép người dùng sử dụng từ một máy trên mạng truy nhập từ xa vào một máy khác sử dụng tài nguyên của máy này. Trong quá trình nhận tên và mật khẩu của người dùng, rlogin không kiểm tra độ dài của dòng nhập, do đó kẻ tấn công có thể đưa vào một xâu đã được tính toán trước để ghi đè lên mã chương trình của rlogin, qua đó chiếm được quyền truy nhập. 2.3. Các truy nhập không được phép Đây là một hiểm họa thông thường liên quan đến việc truy nhập trái phép vào các tài nguyên máy tính và mạng máy tính. Cách dễ nhất để vào một hệ thống máy tính là thông qua "cửa trước" bằng hình thức đăng nhập “login:”. Một yếu tố an ninh của hệ thống phải dựa trên sự bí mật của tệp mật khẩu. Hệ thống được bảo vệ nếu như lệnh liệt kê nội dung thư mục của hệ thống không hiện tên tệp mật khẩu. Kẻ tấn công có nhiều cách để có truy nhập bất hợp pháp vào hệ thống. Các kiểu này có thể là: “Quan hệ xã hội” hoặc các phép đoán đơn giản (thử một tên tài khoản và các kết hợp của mật khẩu cho đến khi có được một tài khoản hoạt động) hay bằng những cách phức tạp mà không cần biết tên tài khoản và mật khẩu. Trong UNIX, các tệp mật khẩu được mã hóa nhưng mọi người dùng đều đọc được (ở dạng đã mã hóa). Điều này cho phép các tấn công bằng cách dùng chương trình đoán mật khẩu dựa trên các từ điển. Các mạng đều có thêm nhu cầu về dịch vụ do đó có thêm các hiểm họa. Các dịch vụ như FTP yêu cầu cùng một phương thức xác thực người dùng, nhưng FTP lại dùng các hàm hệ thống khác và điều đó dễ dẫn đến hiểm họa. Một chương trình bắt gói đơn giản trên mạng có thể lấy được mật khẩu từ một vài gói dữ liệu đầu tiên trong phiên làm việc của kết nối Telnet. 2.4. Quan hệ xã hội: Đây là cách lợi dụng quan hệ xã hội để lấy mật khẩu. Thí dụ bằng cách giả danh là một quan chức của công ty gọi điện hoặc gửi thư điện tử cho quản trị hệ thống và yêu cầu đổi mật khẩu hoặc tạo một tài khoản mới để thực hiện một việc quan trọng nào đó. Những yêu cầu như vậy phải được kiểm tra kỹ lưỡng trước khi được đáp ứng. Ta phải biết chính xác ai đang yêu cầu ta làm việc đó (đổi mật khẩu, tạo tài khoản mới, .v.v.) hay phải thực hiện các thủ tục “bắt tay 3 bước”, bằng cách khẳng định lại yêu cầu thay đổi từ phía người yêu cầu. 2.5. Lỗi hệ thống và các chương trình ẩn: Từ khi xuất hiện các công nghệ tính toán, máy tính, phần cứng, phần mềm, kết nối mạng máy tính, .v.v., luôn xuất hiện các lỗi kỹ thuật trong hệ thống, ở phần cứng và nhiều hơn cả là phần mềm. Các lỗi như vậy gọi là “bugs”. Một “bug” là một hoạt động trong một chương trình hoặc trong một thiết bị không theo đúng các đặc tả thiết kế về hoạt động đó. Kẻ tấn công có thể lợi dụng các bug để phá hoại hệ thống, đánh lừa các phần mềm dựa trên các lỗi do nhà lập trình (không chủ ý) gây ra nhưng chưa được phát hiện và điều chỉnh. Kẻ phá hoại có thể dựa trên các kẽ hở từ các bug hệ thống. Thí dụ: hoạt động của các virus chẳng hạn. Sau đây là mô tả một số lỗi hệ thống. 2.5.1. Lỗi của cơ chế xác thực Rất nhiều cuộc tấn công xuất phát từ (khe hở) cơ chế xác thực của hệ thống. Một cơ chế hoạt động tốt cũng có thể bị tấn công và bại trận. Thí dụ, quá trình kiểm tra địa chỉ nguồn IP có thể hoạt động tốt trong một tình huống nào đó, nhưng những kẻ tấn công có thể dùng trình chuyển cổng dịch vụ (portmapper) để gửi lại các yêu cầu. Trong trường hợp đó, dịch vụ nền phía dưới đã bị đánh lừa, thông điệp được gửi đến máy dịch vụ xuất hiện dường như từ địa chỉ nguồn nội bộ, nhưng thực ra nó xuất phát từ nơi khác. Xác thực dựa trên địa chỉ IP cũng có thể bị hỏng nếu hệ thống gửi yêu cầu xác thực không đáng tin cậy. Có lúc, cơ chế xác thực hỏng do các giao thức không mang thông tin đúng. Cả TCP và IP đều không định danh người gửi; các giao thức như X11 và rsh phải tự lấy địa chỉ nguồn IP mà không biết có tin tưởng được địa chỉ đó hay không. 2.5.2. Lỗi trong các giao thức Đây là trường hợp các bug xuất hiện trong bản thân các phần mềm thực hiện giao thức. Các bug này có thể dẫn tới việc từ chối các ứng dụng và từ chối công việc thường nhật đã qui định. Thí dụ: Các tấn công nhờ “số tuần tự TCP”. Vì không đủ số ngẫu nhiên trong quá trình tạo “số tuần tự TCP ban đầu” cho một kết nối TCP nên có thể gây ra kẽ hở cho kẻ tấn công lừa địa chỉ nguồn. Chính xác hơn, cơ chế tạo các số tuần tự TCP được thiết kế mà không lường trước loại tấn công này. Có thể coi đây là một bug của TCP. Và đến gần đây, chuyên gia nghiên cứu về bảo mật Paul Watson đã chỉ ra rằng, đoán được số tuần tự trong các gói tin TCP không cần đến việc thử cả hơn 4 tỷ tổ hợp mà chỉ cần sau vài phép đoán. Bên cạnh đó, giao thức TCP còn cho phép ngắt kết nối sử dụng cờ RST trong gói tin. Hacker có thể lợi dụng lỗ hổng này để reset lại phiên làm việc từ xa và điều này còn có thể ảnh hưởng rất lớn đến hoạt động của thiết bị dẫn đường (router).Từ đó sẽ ảnh hưởng rất lớn đến cơ sở hạ tầng mạng Internet. Lỗ hổng này của giao thức TCP được công bố vào 20-4-2004. Các giao thức khác dựa trên số tuần tự đều có thể bị tấn công bằng cùng phương cách, bao gồm cả dịch vụ tên miền DNS và dịch vụ thực hiện tiến trình từ xa RPC (Remote Procedure Call). 2.5.3. Rò rỉ thông tin Hầu hết các dịch vụ đều cung cấp một vài thông tin về người sử dụng dịch vụ đó. Thông thường, đó là yêu cầu của chính người dùng dịch vụ này. Các thông tin đó có thể là mục tiêu của các tình báo thương mại, hoặc nó có thể dùng để đột nhập hệ thống trái phép. Dịch vụ “finger” là một thí dụ. Các thông tin mà dịch vụ này cung cấp có ích rất nhiều cho các kẻ mò mật khẩu. 2.5.4. Từ chối dịch vụ Các yêu cầu được gửi đến máy dịch vụ quá nhiều có thể gây nên tình trạng từ chối dịch vụ. Nguyên nhân ở đây là do các máy dịch vụ phải sản sinh nhiều tiến trình con và hệ thống phải cấp phát bộ nhớ và vùng đệm cho chúng. Đến một lúc nào đó tài nguyên hệ thống cạn kiệt và nó không trả lời các yêu cầu từ khách hàng. Bom thu là 1 ví dụ, khi có quá nhiều thu đến cùng 1 lúc vượt quá khả năng quản lý của hệ thống thì nó có thể làm hệ thống down. Một kẻ tấn công có thể làm tràn ngập một mạng hay một hệ thống bằng một loạt các yêu cầu, thông điệp hay tiến trình, điều mà không một mạng thật nào có thể đáp ứng được. Nguyên nhân là hệ thống phải bỏ tất cả thời gian của nó để đáp ứng các yêu cầu đó và làm hỏng tất cả các dịch vụ khác. Làm tràn ngập mạng để dẫn đến từ chối dịch vụ là cách đơn giản và thông dụng. Những kẻ tấn công thông minh hơn còn có thể làm tê liệt dịch vụ, định hướng lại hay thay thế các dịch vụ. Một phương thức đơn giản và hữu hiệu để chống lại các cuộc tấn công trên là đảm bảo đầy đủ tài nguyên cho hệ thống như RAM, đĩa cứng và công suất tính toán của hệ thống (bộ vi xử lý đủ mạnh). Một cách khác là tách biệt các dịch vụ có dùng chung tài nguyên đĩa như Email, FTP, các hệ nhật ký, .v.v. và có biện pháp kiểm tra và ngăn chặn những hiện tượng bất thường đối với các dịch vụ. Vì đây là phương pháp tấn công phổ biến trên mạng, nhiều công ty đã đầu tư rất nhiều tiền của và công sức để chống lại nhưng kết quả vẫn chưa hoàn toàn. Gần đây những vụ tấn công này ngày càng tăng, nên để di sâu hơn về phương pháp tấn công này, xin mời xem thêm phần sau. 3. Một số loại tấn công trên mạng Trong phần này xem xét các khía cạnh an ninh của các mạng dựa trên công nghệ Internet (sử dụng bộ giao thức TCP/IP). Cũng như các mạng khác, mạng Internet trên cơ sở bộ giao thức TCP/IP cũng có những kẽ hở, có thể bị lợi dụng để thực hiện các hoạt động phá hoại và làm tê liệt hoạt động của mạng. Thứ nhất, TCP/IP không có cơ chế xác thực đối với mỗi gói dữ liệu, do đó kẻ tấn công có thể dùng các gói dữ liệu giả mạo đánh lừa các hệ thống. Thứ hai, bản thân các giao thức thành phần trong bộ giao thức TCP/IP đều được thiết kế để làm việc với một loại gói dữ liệu nhất định, với một thủ tục thiết lập kết nối (thủ tục bắt tay - Handshake) và trao đổi tin nhất định vv. . . Do đó, nếu các giao thức thành phần này bị làm việc với một chế độ khác hay với một loại giả mạo khi thiết lập kết nối và trao đổi dữ liệu, thì rất có thể chúng sẽ suy yếu hay làm sụp đổ cả hệ TCP/IP của hệ thống. Dựa vào các kẽ hở có thể lợi dụng được của kiến trúc và tổ chức mạng, kẻ tấn công có thể chui vào các hệ thống phía trong mạng, gây ra các trục trặc về hoạt động với các hậu quả không thể lường trước được. Sau đây là một số loại tấn công điển hình: 3.1. Ping of Death TCP/IP cho phép độ lớn tối đa của gói dữ liệu là 65.536 byte. Nhưng trong thực tế nhiều hệ thống có các phản ứng bất bình thường khi nhận được các gói IP quá lớn, chẳng hạn hệ bị tê liệt, bị treo hoặc bị khởi động lại. Cách thông thường để lợi dụng nhược điểm này là thông qua gói ICMP được tạo ra bởi lệnh “PING” trong các hệ thống. ICMP là một giao thức hỗ trợ điều khiển trong bộ giao thức TCP/IP. Nó truyền các thông điệp lỗi và điều khiển đường truyền giữa các hệ thống trên mạng. Hai loại thông điệp ICMP phổ biến nhất là ECHO-REQUEST và ECHO-REPLY, dùng để kiểm tra một hệ thống ở xa có đến được hay có còn hoạt động không. Các lệnh PING thông thường đều tạo các gói có chứa 8 Byte thông tin phần đầu của ICMP, với độ lớn thông thường của gói IP khoảng 64 bytes. Nhưng các lệnh PING còn cho phép người dùng tạo các gói lớn hơn nếu họ muốn. Một gói IP có độ dài lớn hơn 65.536 byte được coi là không hợp lệ. Khi gói này được tạo ra và truyền đến đích, nó sẽ bị phân mảnh trên đờng truyền. Khi các gói đến đích, chúng được tái hợp lại thành gói ban đầu, với độ lớn 65.536 byte và làm tràn vùng đệm trên nhiều hệ thống. 3.2. Giả mạo IP (IP spoofing) Trên nhiều mạng chuyên dùng, thông thường có một hệ thống tường lửa (firewall) hay bộ lọc gói dùng ngăn chặn việc trao đổi dữ liệu không được phép giữa mạng trong và mạng bên ngoài (Internet). Trong những mạng này, để giảm thiểu các quá trình xác thực khi truy nhập giữa các máy trong mạng nội bộ (mạng trong), một số máy của mạng trong có thể được đặt thành các máy “tin cậy” (trusted host). Điều này cho phép các dịch vụ đi từ máy “tin cậy” đến máy đích mà không cần qua bất cứ trình xác thực nào. Nếu kẻ tấn công bên ngoài giả mạo được địa chỉ IP nguồn là địa chỉ IP của các máy như vậy để gửi các gói vào mạng bên trong, thì hệ firewall hay bộ lọc gói đều cho phép chúng đi qua, vì địa chỉ nguồn của chúng là địa chỉ mạng trong. Phương pháp tấn công này được gọi là “giả địa chỉ IP”. Nhờ phương pháp này, kẻ tấn công có thể đột nhập được vào các máy có đặt chế độ tin cậy và các máy khác trong mạng chuyên dụng. 3.3. Giả mạo TCP (TCP spoofing) Một kết nối TCP được định nghĩa đầy đủ với 4 tham số: địa chỉ IP nguồn, số hiệu cổng TCP nguồn, địa chỉ IP đích, số hiệu cổng TCP đích. Phần đầu gói IP chứa địa chỉ IP nguồn và đích, loại giao thức vận chuyển (TCP=6, UDP=17, vv...). Phần đầu gói TCP có chứa số hiệu cổng nguồn, số hiệu cổng đích, các số tuần tự (sequence) và báo nhận (acknowledge) cũng như các cờ SYN, ACK, RST, FIN, .v.v. Khi một gói IP đi qua một giao diện mạng của hệ thống, ta có thể đọc được nội dung của gói đó, bao gồm cả các giá trị SEQ/ACK hiện thời của các gói trên kết nối đó. Khi bắt được một gói, hệ thống của người đột nhập (hacker) có thể tạo ra các gói dữ liệu IP giả có cùng địa chỉ IP nguồn và số hiệu cổng TCP nguồn cũng như các giá trị SYN/ACK cùng các cờ của TCP đặt trong gói sao cho hệ thống đích bị đánh lừa, ngộ nhận gói dữ liệu thu được là gói dữ liệu của bên phát thật. Đồng thời với việc này, hệ thống của hacker còn gửi gói TCP cho hệ thống nguồn với cờ FIN = 1 (kết thúc kết nối) hay cờ RST = 1 (khởi tạo lại, reset) để đánh lừa là hệ thống đích muốn kết thúc kết nối với hệ thống nguồn. Thông thường như vậy thì hệ thống của hacker đã đánh lừa được cả bên phát (hệ thống nguồn) và bên nhận (hệ thống đích). Sau khi bị lừa, bên phát kết thúc kết nối TCP với bên thu, trong khi bên thu lại tưởng hệ thống của hacker là bên phát và tiếp tục trao đổi dữ liệu. 3.4. Bắt cóc phiên (Session hijacking) Khi bên phát S và bên thu D thiết lập kết nối cũng như truyền dữ liệu, mối tin tưởng của S và D với nhau là: địa chỉ IP nguồn, địa chỉ TCP nguồn, địa chỉ IP đích, địa chỉ TCP đích, các giá trị SEQ/ACK. Nếu một hacker làm lẫn lộn các giá trị SEQ/ACK trong các gói từ S đến D thì D sẽ không còn tin tưởng các gói thật từ S đến nữa. Khi đó, hacker sẽ giả làm S, dùng đúng các giá trị SEQ/ACK của S để tiếp tục trao đổi dữ liệu với D. Phương thức của hacker là làm lẫn lộn các giá trị SEQ/ACK từ S đến D được thực hiện bằng cách chèn các gói dữ liệu vào đúng thời điểm gói từ S đến D, làm cho D chấp nhận gói dữ liệu giả này và cập nhật giá trị ACK của nó. 3.5. Tấn công bằng hàng loạt các gói SYN (SYN flood attack) Bình thường, khi một client muốn thiết lập một liên kết TCP với Server nó gửi một gói TCP với cờ SYN = 1, yêu cầu thiết lập kết nối. Khi server nhận được gói SYN, nó xác nhận với client bằng cách gửi gói SYN-ACK (SYN = 1 và ACK =1) cho client. Client khi nhận được gói này cũng xác nhận lại với Server bằng gói SYN-ACK và kết nối bắt đầu. Quá trình thiết lập kết nối này được gọi là bắt tay 3 bước. Khi tấn công sử dụng SYN, gói SYN đầu tiên được gửi tới cho server đã bị giả địa chỉ IP nguồn, hoặc được thay thế bằng một địa chỉ IP không tồn tại trên Internet, hoặc là địa chỉ IP của một máy tính khác. Kẻ tấn công sẽ gửi rất nhiều gói SYN tới server để làm cạn kiệt tài nguyên TCP (vùng đệm lưu các trạng thái kết nối). Khi nhận được các gói đồng bộ SYN này, server sẽ cấp phát tài nguyên để xử lý và theo dõi các kết nối mới này sau đó gửi lại các gói đồng bộ SYN-ACK. Trong trường hợp này, gói SYN-ACK được gửi tới cho một địa chỉ giả hay địa chỉ IP đã bị lừa. Vì là địa chỉ giả nên server sẽ không nhận được các gói SYN-ACK (bước 3) từ phía client để bắt đầu thiết lập kết nối. Server sẽ giả sử rằng gói SYN-ACK đã gửi đi bị thất lạc trên mạng và sẽ gửi lại vài gói SYN-ACK nữa (5 lần với Windows NT), đồng thời tăng giá trị time-out cho mỗi lần truyền lại (3, 6, 12, 24, 48 giây với Windows NT). Sau lần truyền lại gói SYN-ACK cuối cùng, server sẽ từ bỏ kết nối đó và giải phóng các tài nguyên đã cấp phát cho kết nối. Như vậy, tổng số thời gian chiếm giữ tài nguyên TCP cho kết nối đó là lớn và "vô nghĩa" (với Windows NT khoảng 189 giây). Với kiểu tấn công này, server sẽ bị cạn kiệt tài nguyên TCP và không có khả năng xử lý các kết nối TCP khác nữa. 3.6. Tấn công bằng IP phân đoạn (IP frags attack) Các router thường rất dễ bị tấn công (bị lừa) bởi phương pháp này. Thông thường, các router đều có các danh sách điều khiển truy nhập ACL (Access Control List). Danh sách này được thiết lập bởi người quản trị mạng, cho phép thiết lập các luật lọc gói trong router. Các gói IP có được qua hay không đều dựa vào danh sách này. Trong hoạt động bình thường của router, nếu phân đoạn IP đầu tiên được phép đi qua dựa trên ACL thì router sẽ chuyển gói đi đúng đích. Sau đó, nó sẽ tuần tự chuyển các phân đoạn IP tiếp theo mà không kiểm tra theo ACL. Trong phương thức tấn công dùng Overlapping Fragments, kẻ tấn công dùng các phân đoạn IP sau ghi đè lên phần cuối của phân đoạn đầu tiên, đánh lừa router để chấp nhận 3.7. LAND attack Kẻ tấn công gửi một gói đánh lừa đến cho một hệ thống với địa chỉ IP đích và địa chỉ IP nguồn trùng nhau, số hiệu cổng TCP đích và số hiệu cổng TCP nguồn trùng nhau. Khi nhận được gói này, theo phản ứng tự nhiên của một hệ TCP/IP, hệ thống bắt đầu trao đổi dữ liệu với chính nó. Một số hệ thống sẽ trở nên chậm chạp và không có phản ứng gì với các hoạt động khác khi gặp phải loại tấn công này. 4. Các mối đe dọa đối với dịch vụ thông tin Các dịch vụ thông tin là chỗ yếu nhất của toàn hệ thống. Chúng không._.iều ưu điểm. Quá trình phân tích mẫu trong mạng và những thông báo liên tiếp về những hành vi bất thường trong hệ thống có thể cho người quản trị thấy được những gì là bất thường và những gì là bình thường. Nếu hệ thống bị tấn công bởi những loại sâu mới, virus và cả tấn công DOS thì hệ thống này sẽ báo động dựa trên hành vi bất thường của chúng. Hệ thống này có một ưu điểm khác so với các hệ thống IDS dò tìm dấu hiệu là không phải cập nhật các dấu hiệu mà chỉ cần điều chỉnh lại sao cho thích hợp. Đặc điểm chính của hệ thống là có thể thông báo hiệu quả về các hành vi tấn công DOS, quét cổng và dùng những cổng không được phép trên một máy nào đó. 3.2. Nhược điểm Nếu hệ thống IDS này là hệ thống tự học được từ môi trường (có ứng dụng trí tuệ nhân tạo) thì nó có thể sẽ hoạt động không hiệu quả. Bởi vì nều một kẻ xâm nhập dùng nhiều lần chương trình Nmap để gửi các gói tin SYN đi để quét mạng thì sau một thời gian hệ thống sẽ coi hành động đó là hành động bình thường trong mạng và khi đó, hệ thống mạng sẽ không còn được an toàn nữa. Do đó, nếu tích hợp phương pháp tự học (trí tuệ nhân tạo) vào sẽ có thể giảm công việc cho người quản trị nhưng mức độ mạo hiểm sẽ tăng lên. Chương 4 Xây dựng 1 chương trình IDS 1. Mục đích : - Xây dựng một chương trình có khả năng giám sát các hoạt động bất thường trên mạng và có thể đưa ra các cảnh báo kịp thời cho người quản trị. - Có khả năng ghi lại toàn bộ các hoạt động trên mạng - Dựng lại được phiên làm việc giữa hai máy trên mạng dùng giao thức TCP,UDP,ICMP. Phát hiện các hành vi bất thường để thông báo cho người quản trị. Theo dõi các cổng trên một máy theo địa chỉ IP. - Cấu hình một cách đơn giản hệ thống IDS. 1.1. Có khả năng ghi lại các hoạt động trên mạng Với chế độ bắt gói tin là Promicous thì tất cả các gói tin qua lại trên mạng đều đựơc bắt giữ lại để xử lý. Các gói tin này đựoc lưu lại vào trong cơ sở dữ liệu để chờ xử lý. Sau khi đã được xử lý thì các gói tin này được loại bỏ khỏi cơ sở dữ liệu. 1.2. Dựng lại phiên làm việc giữa hai máy trên mạng Chương trình làm việc dựa trên nguyên tắc thống kê nên việc dựng lại phiên làm việc có ý nghĩa hết sức quan trọng. Ngoài những dấu hiệu bất thường thì có những cuộc tấn công hết sức tinh vi thì dấu hiệu của các cuộc tấn công này thường là không rõ ràng. Vì vậy việc lưu lại các phiên làm việc sẽ giúp chúng ta phát hiện được các cuộc tấn công kiểu này. 1.3. Phát hiện các hành vi bất thường để thông báo cho người quản trị. Các gói tin sau khi được phân tích sẽ được kiểm tra các tính bất thường của gói tin. Có thể là độ lớn bất thường hoặc các mang các cờ bất thường. Ngoài ra dựa vào cấu hình mà người sử dụng đã cấu hình cho chương trình mỗi khi có các sự kiện khớp với dấu hiệu đó thì chương trình lập tức đưa ra các cảnh báo. Việc đưa ra các cảnh báo giúp cho người quản trị có thể phát hiện ra các cuộc tấn công ngay khi nó đang diễn ra để có các biện pháp xử lý ngăn chặn kịp thời 1.4. Cho phép cấu hình một cách đơn giản Chương trình được xây dựng với giao diện đồ hoạ thân thiện. Cho phép người sử dụng đễ quan sát diễn biến chi tiết của chương trình trong khi chạy. Các thông số cấu hình đều rõ ràng cho phép người sử dụng đễ dàng cấu hình, thiết lập các tham số cho chương trình. Với mỗi một hệ thống thì các tham số này lại có thể rất khác nhau tuỳ theo quy mô tính chất công việc trong từng mạng. Do đó vói hệ thống mạng này thì các tham số này có thể là bất thường nhưng trong một hệ thống mạng khác các tham số này có thể lại là một điều bình thưòng vì vậy mỗi hệ thống đều có một bộ các tham số khác nhau. 2. Thiết kế chương trình. Theo yêu cầu của chương trình em chia chương trình ra làm 5 modul chính , 1 bộ CSDL . 5 module chính làm việc trên cùng 1 CSDL đó: Module thứ nhất: Có nhiệm vụ bắt các gói tin di qua card mạng.và chuyển các gói tin này cho module thứ hai phân tích. Module thứ hai: phân tích các gói tin và đưa các thông tin của các gói tin vào một cơ sở dữ liệu như là loại giao thức, địa chỉ ip nguồn, đích, địa chỉ cổng dịch vụ nguồn và đích…. Module thứ ba: Xây dựng lại các phiên làm việc, dựa trên các thông tin trong cơ sở dữ liệu mà ta đã xây dựng được. Module thứ tư: cho phép người dùng có thể tuỳ chọn 1 số các tham số được dùng để đối chiếu khẳng định các yếu tố nào là các yếu tố bất thường cần cảnh báo. Module thứ năm: So sánh với các cấu hình trong hệ thống để đưa ra cảnh báo, có lưu trữ vào trong cơ sở dữ liệu để có thể đưa ra theo báo cáo trong ngày. Hệ thống IDS So sánh và đưa ra cảnh báo Thu nhận cấu hình Module bắt gói tin Module xử lý gói tin Module xây dựng lại phiên Sơ đồ các hoạt động của các module trong chương trình Bắt gói tin Dựng lại các phiên làm việc So sánh và đưa ra cảnh báo Phân tích các gói tin Cơ sở dữ liệu Nhận các thông tin tuỳ chọn của người sử dụng Luồng gói tin 2.1. Cơ sở dữ liệu: Các dữ liệu trong CSDL bao gồm: Bảng chứa các gói tin lấy ra từ network adapter. Bảng chứa các thông tin về gói tin IP, dùng để ghép các gói IP. Bảng chứa các thông tin về các gói tin TCP. Bảng chứa các thông tin về các Session. Bảng chứa các thông tin về các cảnh báo Bảng chứa các xâu cần cảnh báo khi xuất hiện trong gói tin TCP Bảng chứa các địa chỉ IP và cổng giám sát. Các bảng được cập nhật thường xuyên khi chạy chương trình. Module bắt các gói tin Bảng tblPacket Bắt gói tin Các gói tin qua Card mạng Cập nhập Module này nhận được các thông tin đầu vào về gói tin về gói tin từ card mạng. Các gói tin này là gói tin Ethernet. Các thông tin nhận được nữa là : Mảng byte chứa toàn bộ gói tin Ethernet. Số lượng byte của gói Ethernet mà card mạng bắt được. Sau khi nhận được các thông tin trên thì module này cập nhập vào bảng tblPacket các thông tin sau. Toàn bộ mảng byte chứa gói tin. Số lượng byte của gói tin. 2.3 Module phân tích các gói tin Cập nhập Phân tích các gói tin Bảng tblPacket Bảng tblPacketTCP Module này lấy các thông tin sau từ trong bảng tblPacket ra để xử lý. Mảng byte chứa toàn bộ gói tin Ethernet(có thể coi là gói Ethernet) Khi đã có thông tin này thì tiến hành việc phân tích tìm ra các thông tin trong phần header của gói Ethernet . Các thông tin này là: Địa chỉ Mac của máy gửi. Địa chỉ Mac của máy nhận. Loại gói tin của tầng bên trên (Network layer) mà nó chứa bên trong (IP , Arp, SNMP,... ). Tiếp theo nếu loại gói tin của tầng network là IP thì tiến hành phân tích theo khuôn dạng của gói IP để tìm ra được các thông tin sau về gói IP . Địa chỉ IP của máy gửi. Địa chỉ IP của máy nhận. Trường Identification. Trường Fragment Offset. Loại gói tin của tầng trên(Transport ) mà nó chứa bên trong(TCP, UDP ...). Nếu gói IP này là hoàn chỉnh(không bị Fragment) và gói tin của tầng Transport là TCP thì tiến hành phân tích theo khuôn dạng của gói TCP để tìm ra các thông tin sau: Số cổng dịch vụ dùng trên máy gửi. Số cổng dịch vụ dùng trên máy nhận. Loại ứng dụng sử dụng (HTTP, TELNET, FTP...). Khi này Module sẽ cập nhập các thông tin sau về gói TCP vào trong bảng tblPacketTCP: Địa chỉ Mac của máy gửi. Địa chỉ Mac của máy nhận. Địa chỉ IP của máy gửi. Địa chỉ IP của máy nhận. Số cổng dịch vụ dùng trên máy gửi. Số cổng dịch vụ dùng trên máy nhận. Loại ứng dụng sử dụng (HTTP, TELNET, FTP...). Các cờ thể hiện trạng thái của phiên làm việc.(SYN, FIN, RESET) Trong Module này khi gói IP là không hoàn chỉnh thì ta sẽ lưu toàn bộ thông tin về gói IP đó bao gồm các thông tin về header và các dữ liệu của nó vào bang tblPacketIP để tiến hành ghép các gói IP lại. Các thông tin cần để ghép các gói IP lại là trường Identification và Fragment trong Header của gói IP. Khi đã có gói IP hoàn chỉnh thì ta lại tiến hành phân tích như trên. Khi nhận được gói TCP thì cũng tiến hành đối chiếu nếu chuỗi cần cảnh báo (được lấy ra từ bảng tblMoniterString) xuất hiện bên trong phần dữ liệu của gói TCP thì cập nhập vào bảng tblAlert một cảnh báo gồm Thời gian cảnh báo. Xâu chứa nội dung cảnh báo. Mức độ cảnh báo. 2.3. Xây dựng lại phiên làm việc Dựng lại các phiên làm việc Bảng tblPacketTCP Cập nhập Bảng tblSession Module này lấy từ bảng tblPacketTCP ra các gói tin TCP của cùng một phiên làm việc tức là các gói tin có cùng 4 tham số sau. Địa chỉ IP nguồn. Địa chỉ IP đích. Số hiệu cổng nguồn. Số hiệu cổng đích Tiếp theo xem tiếp trạng thái của phiên này, được thể hiện trong trường Status của các gói TCP. Cuối cùng kiểm tra phiên đó trong bảng tblSession xem, nếu phiên này có sự thay đổi trạng thái thì tiến hành cập nhập vào trong bảng này các thông tin sau. Địa chỉ Mac của máy gửi. Địa chỉ Mac của máy nhận. Địa chỉ IP của máy gửi. Địa chỉ IP của máy nhận. Số cổng dịch vụ dùng trên máy gửi. Số cổng dịch vụ dùng trên máy nhận. Loại ứng dụng sử dụng (HTTP, TELNET, FTP...). Trạng thái của phiên làm việc(bắt đầu, kết thúc, reset.) Thời gian bắt đầu. Thời gian kết thúc. 2.4. So sánh với các cấu hình trong hệ thống Cập nhập Bảng tblSession, Bảng tblAlert So sánh và đưa ra cảnh báo tblMoniterHost Trong module này, chương trình sử dụng phương pháp thống kê để xem những liên kết giữa các máy trong mạng. Các thông tin được lấy ra từ bảng tblSession. Địa chỉ IP của máy gửi. Địa chỉ IP của máy nhận. Số cổng dịch vụ dùng trên máy gửi. Số cổng dịch vụ dùng trên máy nhận. Trạng thái của phiên làm việc(bắt đầu, kết thúc, reset.) Thời gian bắt đầu. Thời gian kết thúc. Các thông tin sau được lấy ra từ bảng tblConfig Số lượng kết nối tối đa đến một máy Thời gian cho số lượng kết nối. Số lượng tối đa kết nối đến một máy bị RESET. Thời gian cho số lượng kết nối bị RESET . Các thông tin lấy ra từ bảng tblSesion được thống kê lần lượt theo các thông số lấy từ bảng tblConfig khi có sự trùng khớp thì cập nhập vào bảng tblAlert cảnh báo có các mục. Thời gian cảnh báo. Xâu chứa nội dung cảnh báo. Mức độ cảnh báo. Module nhận các thông tin từ người sử dụng Thông tin cấu hình Cập nhập Nhận các thông tin tuỳ chọn của người sử dụng tblConfig, tblMoniterHost, tblMoniterString Người dùng Các thông tin mà module này nhận từ người dùng là Số lượng kết nối tối đa đến một máy Thời gian cho số lượng kết nối. Số lượng tối đa kết nối đến một máy bị RESET. Thời gian cho số lượng kết nối bị RESET . Thời gian lưu trữ các cảnh báo. Chế độ bắt gói tin. Xâu cần cảnh báo khi xuất hiện trong gói tin. Các địa chỉ IP và cổng dịch vụ cần giám sát. Sáu thông tin trên cùng được lưu vào bảng tblconfig. Thông tin tiếp được lưu vào bảng tblMoniterString. Thông tin còn lại được lưu vào bảng tblMoniterHost. 3. Thiết kế chi tiết của chương trình 3.1. Cơ sở dữ liệu. Xây dựng 1 bộ cơ sở dữ liệu dùng để lưu trữ các thông tin cần thiết dùng trong chương trình như thông tin về loại các gói tin, thông tin về các phiên làm việc để chương trình có thể thao tác trên đó. Trong cơ sở dữ liệu cũng chứa luôn cả cấu hình hệ thống mà ngưới sử dụng đưa vào để sau đó chương trình có thể lấy ra đối chiếu. Cơ sở dữ liệu lựa chọn là Access. Đây là một cơ sở dữ liệu nhỏ vỡi số bản ghi hỗ trợ được không lớn lắm.Khi số lượng bản ghi lớn thì có thể làm treo chương trình.. Mặc dù có những hạn chế như vậy nhưng bù lai là việc truy xuất các cơ sở dữ liệu Access trong Visual Basic lại đơn giản và trong khuôn khổ một đồ án tốt nghiệp thì có thể chấp nhận được Các bảng cơ sở dữ liệu được dùng trong chương trình: Các dữ liệu trong CSDL bao gồm: - Bảng chứa các gói tin lấy ra từ network adapter.(tblPacket) - Bảng chứa các thông tin về gói tin IP, dùng để ghép các gói IP(tblPacketIp). - Bảng chứa các thông tin về các gói tin TCP.(tblPacketTCP) - Bảng chứa các thông tin về các phiên làm việc(tblSession). - Bảng chứa các thông tin về các cảnh báo (tblAlert). Bảng chứa các thông tin về cấu hình cho chương trình(tblConfig). Bảng chứa các xâu cần cảnh báo khi nó xuất hiện trong gói tin.(tblMoniterString) Bảng chứa thông tin về các địa chỉ IP và cổng giám sát(tblMoniterHost). Các bảng Cơ sở dữ liệu dùng trong chương trình Các bảng cơ sở dữ liệu dùng trong chương trình 3.2. Thu bắt các gói tin Chương trình sử dụng một bộ thư viện PacketVB là một phiên bản loại nhẹ của bộ thư viện Winpcap. Bộ thư viên này có các chức năng thu bắt, lọc gói tin, và một số hàm có liên quan trong việc thu nhận các gói tin. Trong mạng Lan là môi trường chia sẻ đường truyền nên tất cả các gói tin khi được truyền trên đó đều có thể đựoc thu bắt tại một card mạng. Trong chế độ bình thường thì các card mạng chỉ thu nhận và xử lý các gói tin mà có đích đến là chính card mạng đó còn với các gói tin khác thì card mạng có nhận được nhưn sau khi kiểm tra gói tin đó không phải dành cho nó thì nó bỏ gói tin đó không xử lý. Vói chế độ thu bắt gói tin là Promicous thì card mạng sẽ thu nhận và xử lý tất cả các gói tin đựoc truyền trên mạng. Mỗi khi bắt đựoc một gói tin Ethernet thì thư viện PacketVB được tự động triệu gọi và trả lại cho chúng ta mảng byte chứa gói tin. mảng byte này được cập nhập ngay vào cơ sở dữ liệu để phục vụ cho việc phân tích sau này. 3.3. Xây dựng lại phiên làm việc Phiên làm việc được xây dựng dựa trên thông tin về các gói tin TCP mà chương trình thu được. Các gói tin TCP này lấy được sau khi phân tích các gói tin IP trong cơ sở dữ liệu. Sau khi đã có các gói tin TCP rồi thì tiến hành ghép các gói tin này lại theo các phiên làm việc xác định. Trong quá trình xây dựng lại phiên làm việc thì có hai công việc chính cần làm là. Với các gói tin IP không hoàn chỉnh(bị Fragment) thì cần tiến hành ghép các gói này lại để tạo ra gói IP hoàn chỉnh. Như đã giới thiệu ở phần trên của báo cáo trong phần cấu trúc khối dữ liệu IP. Mỗi khối IP đều có các trường cần thiết cho việc ghép lại gói IP ban đầu, các trường đó là Identification và Offset. Phần xây dựng lại các phiên giao dịch từ các gói tin IP. Nếu gói tin IP là không hoàn chỉnh trong phần header thì chương trình sẽ bỏ qua vì không đủ dữ liệu để phân tích. Từ các gói tin IP lấy ra các gói tin TCP . Với các gói TCP này, chương trình sẽ xây dựng lại phiên TCP giữa hai máy và sau đó lưu phiên đã được xây dựng vào trong cơ sở dữ liệu. Đây là một công việc rất tốn kém, tiêu tốn nhiều tài nguyên nhưng lại là một công việc quan trọng. Việc này chỉ liên quan đến giao thức TCP. Hiện nay chương trình chưa làm được việc phân tích gói tin ICMP. 3.4. So sánh với các cấu hình trong hệ thống Dựa trên cơ sở dữ liệu về các phiên làm việc chương trình sẽ thực hiện việc thống kê. Kết quả sẽ đựoc so sánh với cấu hình của người sử dụng cũng đã được lưu trong cơ sở dữ liệu. Khi phát hiện được những điều không bình thường thì chương trình lập tức báo cáo cho người sử dụng. Các cảnh báo này sẽ đựoc lưu lại để tiện cho việc sử dụng sau này. 4. Cài đặt chương trình Hệ điều hành Windows là hệ điều hành khá phổ biến ở Việt Nam trong thời điểm hiện nay. Các cuộc tấn công trên mạng chủ yếu nhằm vào những lỗ hổng bảo mật của Windows để khai thác. Do đó đề tài giúp cho những hệ thống mạng sử dụng Windows có khả năng phát hiện những cuộc tấn công nhanh hơn, tăng tính an ninh cho hệ thống mạng. Sử dụng thư viện PacketVB là phiên bản loại nhẹ của bộ thư viện WinPcap hỗ trợ bắt gói, chương trình được lập trình bằng ngôn ngữ Visual Basic. Những hệ thống phát hiện xâm nhập dựa vào thống kê cần sử dụng một loại ngôn ngữ xử lý cơ sở dữ liệu tốt. Visual Basic chưa hẳn là một ngỗn ngữ dành cho các ứng dụng chuyên nghiệp, nhưng trong khuôn khổ một đề tài tốt nghiệp thì có thể chấp nhận được và dùng ngôn ngữ này thì khả năng truy cập và xử lý cơ sở dữ liệu Access lại đơn giản. Toàn bộ cơ sở dữ liệu về các gói tin, phiên giao dịch và các cảnh báo được lưu trữ trong cơ sở dữ liệu Access. Các sơ đồ thuật toán của chương trình. Sơ đồ thuật toán tổng hợp dùng trong chương trình Bắt gói tin Ethernet Đưa vào CSDL Xử lý gói tin để đua gói tin TCP vào CSDL Thống kê các phiên để đưa ra cảnh báo Xử lý các gói tin TCP để đưa phiên vào CSDL Nếu còn gói tin trong CSDL Nếu còn gói tin TCP trong CSDL Hiển thị các cảnh báo và các phiên làm việc lên Nếu có các phiên cần cập nhật Cập nhật phiên vào trong CSDL Y Y Y N N N Trong phần xử lý các gói tin sẽ bao gồm cả việc ghép các gói IP bị Fragment và nếu có các gói tin bất thường thì cũng cập nhập cảnh báo vào bảng Alert Sơ đồ thuật toán cụ thể của việc ghép các gói IP bị phân đoạn thành các gói IP hoàn chỉnh. Do sơ đồ này khá phức tạp nên em xin trình bày theo phương pháp mô tả sau: While Packet.Count>0 do { Khi vẫn còn gói tin trong CSDL } Begin Read_Packet ; { Đọc gói tin từ cơ sở dữ liệu } If (DF = 1) OR ((DF=0) AND (MF = 0) AND (FragmentOffset=0) then { Gói tin này là gói tin không bị fragment } Begin Case Protocol of TCP : Get_TCP_Packet(IP_Packet); {Lấy ra gói tin TCP} Put_TCP_Packet_into_Database; {Đưa gói tin TCP vào trong CSDL} End Else { Gói tin này là gói tin bị fragment} Begin Find_IP_Packet_in_Database; { Tìm gói tin IP tương ứng trong CSDL} If Found then Defragment_IP_Packet; {Ghép gói tin IP lại} else Put_IP_Packet_into_Database; {Đưa gói tin IP vào trong CSDL} Find_Full_IP_Packet_in_Database; { Tìm gói tin IP đã ghép đủ trong CSDL} If Found then Begin Get_TCP_Packet(IP_Packet); {Lấy ra gói tin TCP} Put_TCP_Packet_into_Database; {Đưa gói tin TCP vào trong CSDL} End; End; Delete_Packet; {Xóa gói tin trong CSDL} End; Sơ đồ thuật toán của việc thành lập phiên Còn gói tin TCP Đọc các gói tin từ CSDL Đọc các gói tin của một phiên Có phiên trong CSDL Phiên kết thúc hoặc Reset Đưa vào CSDL một phiên mới Cập nhật trạng thái phiên Xóa các gói tin khỏi CSDL Kết thúc Y Y Y N N N Các hàm sử dụng trong chương trình 4.2.1. Các hàm dùng để bắt gói tin. Hàm PacketReceive(numbytes as Long). Hàm này là một hàm của thư viện PacketVB. Đây là một hàm hướng sự kiện, mỗi khi có một gói tin thì hàm này tự động được triệu gọi và kết quả trả về của hàm này là só lượng byte của gói tin mà thư viện PacketVB bắt được. Hàm GetRawPacketData(ArrayOfBytes() as Byte) . Hàm này có tác dụng là đem gói tin mà hàm PacketReceive(numbytes as Long) bắt được xếp vào một mảng kiểu byte. Hàm này được gọi ngay sau khi đã gọi hàm PacketReceive(numbytes as Long). 4.2.2. Các hàm dùng để xử lý gói tin Hàm GetFrameHeader(thearray() As Byte, StartOfNextProto As Long) As FrameHeader: Hàm này dùng để lấy về header của frame dữ liệu. Tham số đưa vào là dòng dữ liệu dạng byte(mảng byte mà hàmGetRawPacketData trả về). StartOfNextProto cho biết vị trí bắt đầu của gói tin Ethernet trong dòng dữ liệu. Hàm này trả về cấu trúc FrameHeader. Hàm GetEtherNetHeader(thearray() As Byte, StartOfThisProto As Long, StartOfNextProto As Long) As EtherNetHeader: Hàm này đưa dòng dữ liệu vào để lấy ra header của gói tin Ethernet. Tương tự, StartOfThisProto cho biết vị trí bắt đầu của gói tin Ethernet, còn StartOfNextProto cho biết vị trí bắt đầu của Header của gói tin IP. Hàm này trả về cấu trúc EtherNetHeader. Hàm GetIpV4Proto(thearray() As Byte, startofIPProto As Long, StartOfNextProto As Long) As IPv4Header. Hàm này đưa dòng dữ liệu vào, vị trí bắt đầu của Header của gói IP. Kết quả trả về là một cấu trúc kiểu Ipv4Header và vị trí bắt đầu của Header gói tin lớp trên lớp IP. Hàm GetTCPHeader(thearray() As Byte, startofTCPProto As Long) As TCPHeader. Cũng tương tự. Nhận đầu vào là dòng dữ liệu, vị trí bắt đầu của gói tin TCP và kết quả trả về là một cấu trúc kiểu TCPHeader. Một số hàm nhỏ khác là các hàm để xử lý chuõi nhị phân để đưa ra dạng thích hợp cho hiển thị kết quả như GetIpFromLong(lngIPAddress As Long) As String, BytestoHexString(thearray() As Byte, startPos As Long, numbytes As Long) As String. 4.2.3. Hàm xây dựng lại phiên làm việc Hàm này là một hàm hướng sự kiện. Hàm này lấy thông tin trong cơ sở dữ liệu ra, cụ thể là các thông tin trong bảng TCPPacket. Dựa vào các thông tin đó để xây dựng lại phiên. Giải thuật chi tiết cho việc thành lập phiên đã được đề cập ở trên phần các giải thuật. Kiểm tra Phiên Đây cũng là một hàm hướng sự kiện. Cứ đến một thời điểm nào đó thì hàm này lại được thực thi. Hàm lấy trong cơ sở dữ liệu thông tin về các phiên làm việc(Trong bảng Section), và các thông số cấu hình(trong bảng Config). Sau khi đã thống kê các phiên làm việc theo các tiêu chí thì hàm tiếp tục so sánh với các thông số đã được cấu hình. Nếu có vi pham thì hàm tự động lưu các cảnh báo vào bảng Alert. Hiện nay em mới chỉ đưa ra một số các tham số để chương trình cảnh báo như. Có quá nhiều kết nối giữa hai máy trong khoảng thời gian nhất định. Có quá nhiều kết nối giữa hai máy bị reset trong 1 khoảng thời gian nhất định. Có quá nhiều kết nối đến 1 cổng trên 1 máy. Có quá nhiều kết nối từ 1 máy Có quá nhiều kết nối đến 1 máy Có các gói tin TCP bất thường (như trình bày trên) 5. Các Form trong chương trình Giao diện của chương trình được tổ chức theo dạng các tab. Các thể hiện thân thiện và rõ ràng dễ sử dụng. Mỗi tab có một chức năng riêng được thể hiện ở tên của các tab. Các form này được cập nhập thường xuyên. 5.1. Form Config Form chính của chương trình có thể được coi là form cấu hình cho chương trình với để thực hiện các thao tác trước khi chương trình làm việc. Form này cho phép người sử dụng có thể lựa chọn loại NetworkAdapter( card mạng) để thực hiện bắt gói tin trên card đó. Sau khi chọn xong thì chương trình cũng cho biết thông tin về địa chỉ IP và SubnetMask của NetworkAdapter đó. Các tham số cấu hình cho chương trình về tiêu chí cảnh báo cũng được nhập vào tại đây. Form này còn cho phép người sử dụng có thể lựa chọn việc sử dụng lại cơ sở dữ liệu của việc chạy chương trình lần trước hay là dùng mới một cơ sở dữ liệu( Xoá cơ sở dữ liệu của việc chạy chương trình lần trước). Trong form có cho phép người dùng mở cơ sở dữ liệu cũ ra để xem thông tin cấu hình và xem lại các thông tin mà chương trình đã thu thập và phân tích được trong các lần chạy trước. Form Config của chương trình Form có phần cấu hình để giám sát các cổng trên một địa chỉ IP xác định. Các cổng trên các máy được giám khi có các kết nối đến được cho là bình thường còn khi có kết nối đến các địa chỉ IP này mà không thuộc tập các cổng được phép thì chương trình cũng sẽ đưa ra cảnh báo. Phần moniter String thì cho phép thiết lập các cảnh báo khi có gói tin chứa xâu cho trước. HIện tại thì chương trình mới xử lý được việc cảnh báo khi xuất hiện xâu cần cảnh báo trong gói TCP. trong tương lai thì sẽ phải phát triển giám sát công việc này trên nhiều loại gói tin hơn. 5.2. Form Packet Detail Information Form này cho phép người sử dụng có thể theo dõi chi tiết hơn về các gói tin mà chương trình bắt được. Form này có tác dụng cho người sử dụng thấy trực quan hơn trong việc quan sát chương trình làm việc. Thông tin về các gói Ethernet sẽ được hiển thị lên. Bên dưới là bảng thể hiện các phiên làm việc mà chương trình cập nhập trong bảng tblSession ra. Trong bảng thể hiện tổng kết việc xây dựng lại các phiên trong chương trình. Nó cho phép người sử dụng quan sát được các phiên làm việc của các máy trong mạng, địa chỉ IP, địa chỉ Mac, cổng giao dịch và giao thức mà hai máy sử dụng. Form Packet Informaion 5.3. Form Alert Đây là form chứa các cảnh báo của chương trình. Nó có nhiệm vụ cung cấp cho người sử dụng các thông tin về các cảnh báo như thời gian đưa ra cảnh báo, nguyên nhân cảnh báo. Form Alert 6. Một số kết quả đạt được Chương trình đã hoàn thành được phần lớn các yêu cầu đề ra. Chương trình có khả năng cảnh báo được một số các sự kiện bất thường trong hệ thống. Khi tiến hành chạy thử trên một mạng Lan của một cửa hàng Internet cho thấy kết quả như sau. Chương trình đã cảnh báo được khi số kết nối đến một máy là lớn hơn so với cấu hình được chọn lúc ban đầu chạy chương trình. Ưu điểm Với giao diện thân thiện, các tham số cấu hình rõ ràng và đơn giản, cách vận hành cũng dễ hiểu, chương trình giúp cho người sử dụng dễ thao tác. Các cảnh báo mỗi khi có hiện tượng bất thường đều được cập nhập ngay và thông báo cho người sử dụng biết để có biện pháp đối phó kịp thời. Nhược điểm. Chương trình sử dụng ngôn ngữ lập trình là Visual Basic. Đây là ngôn ngữ dễ học, dễ tìm hiểu, hỗ trợ dễ dàng việc tạo giao diện đẹp và thân thiện nhưng không phải là ngôn ngữ dùng cho lập trình chuyên nghiệp vì nó không cho phép can thiệp sâu vào hệ thống, người dùng không trực tiếp quản lý được bộ nhớ. Chương trình sử dụng cơ sở dữ liệu là Access đây là cũng là một cơ sở dữ liệu chỉ nên dùng cho các ứng dụng nhỏ không được chuyên nghiệp lắm. Với số lượng bản ghi nhỏ thì không có vấn đề gì nhưng khi số lượng bản ghi tăng lên rất lớn thì đây thực sự là vấn đề(sẽ gây treo máy hoặc xử lý chậm). Hiện tại thì chương trình mới chỉ hỗ trợ sáu loại cảnh báo như vậy là còn ít. Chương trình hiện tại mới dừng lại ở việc xử lý gói tin IP, TCP, còn nhiều loại gói tin quan trọng khác trong mạng chưa được xử lý như ARP, ICMP... 7. Phương hướng phát triển trong tương lai Chương trình tuy đã làm được một số nhiệm vụ quan trọng nhưng so với các chương trình thương mại thì vẫn còn nhiều nhược điểm. Vì vậy trong tương lai chương trình cần đươc phát triển để hoàn thiện thêm nhằm có khả năng chạy ổn định, hiệu quả , chính xác trên các hệ thống mạng lớn. Trước mắt là về ngôn ngữ lập trình và cơ sở dữ liệu trong. Tương lai chương trình sẽ được xây dựng trên ngôn ngữ Visual C++ và cơ sở dữ liệu My SQL để khắc phục vấn đề về việc quản lý bộ nhớ. Chương trình hiện tại mới phân tích và xử lý một số gói tin như IP, TCP. Ngoài các gói tin này thì còn nhiều loại gói tin quan trọng khác như ICMP, ARP, UDP … Phương hướng phát triển của chương trình là hỗ trợ việc xử lý cả các gói tin quan trọng này. Hiện tại giao thức IP version 6 đang dần được đưa vào sử dụng vì vậy chương trình cũng phải phát triển thêm để hỗ trợ thêm giao thức mới này. Các chương trình thương mại hiện nay đều tiến hành phân tích dựa trên các mẫu có sắn, còn chương trình này thì sử dụng phương pháp thống kê. Tuy mỗi phương pháp đều có những ưu điểm và nhược điểm nhưng chương trình cần phải tích hợp cả hai biện pháp phân tích để bổ xung cho nhau. Chương trình có tích hợp thêm phần theo dõi nội dung gói tin nhưng vẫn còn rất đơn giản và mới chỉ theo dõi được trên gói tin TCP. Trong tương lai thì sẽ cần phát triển thêm để có thể theo dõi nội dung của nhiều loại gói tin hơn. 8. Lời kết Sau khi tìm hiểu lý thuyết và bắt tay vào xây dựng được một chương trình IDS, có khả năng phát hiện được một số dấu hiệu bất thường trong mạng IP. Chương trình cũng đã thể hiện được một số kết quả nghiên cứu mà em đã tìm hiểu được trong quá trình làm đề tài này. Trong quá trình làm đề tài thì em cũng đã có những hiểu biết thêm về vấn đề an ninh mạng và những kinh nghiệm thực tiễn chỉ có thể gặp được khi trực tiếp bắt tay vào việc xây dựng một chương trinh nghiêm túc . Chắc chắn đây là các hiểu biết và kinh nghiệm sẽ giúp em bớt bỡ ngỡ khi gặp phải các công việc thực tế khi bắt đầu ra trường. Mặc dù đã có nhiều cố gắng nhưng chắc chắn đề tài vẫn còn nhiều thiếu sót do những hạn chế về thời gian làm đề tài, và cả kinh nghiệm chuyên môn. Em mong nhận được sự góp ý của các thầy cô và các bạn. Một lần nữa em xin gửi lời cảm ơn chân thành tới thầy Ngô Văn Dũng, người đã tận tình hướng dẫn em hoàn thành đề tài này. Phụ lục A Một số các thuật ngữ dùng trong đồ án ARP Address resolution protocol. Giao thức dùng để tìm ra địa chỉ Mac của máy trạm khi mà biết được địa chỉ IP của nó. AIDS Hệ thống IDS hoạt động dựa trên việc phân tích các thông tin thu thập được về các ứng dụng Datagram. Một đơn vị khối dữ liệu truyền đi. Ethernet. Một giao thức được sử dụng trong các mạng Lan và được định nghĩa đầy đủ trong chuẩn 802.3 FireWall. Hay còn gọi là bức tường lửa, có tác dụng kiểm soát truy nhập giữa bên trong mạng và bên ngoài mạng. Fragment. Chỉ hiện tượng các gói tin IP bị phân đoạn khi có kích cỡ lớn hơn so với kích thước gói dữ liệu mà mạng cho phép truyền qua. HIDS. Host-based Instrusion Detection System. Đây là hệ thống làm nhiệm vụ theo dõi bảo vệ trên một máy đơn. Host. Một máy tính trên mạng. IDS Instrusion Detection System. Đây là tên gọi chung của các hệ thống cảnh báo, phát hiện xâm nhập. ICMP. Internet Control Message Protocol. Đây là giao thức dùng trong việc truyền thông, điều khiển, chỉ ra tình trạng lỗi trên mạng. Ví dụ như không thấy trạm đích hoặc không tìm thấy đường dẫn đến trạm đích. IP Internet Protocol.Đây làmột trong các giao thức quan trọng nhất trong mô hình TCP/IP. Được sử dụng tại tầng liên mạng. NIDS. Network-Based Instrusion Detection System. Hệ thống phát hiện xâm nhập trong một hệ thống mạng. Chứ không riêng gì chỉ trên một máy đơn. Mtu Maximum transfer unit- đơn vị cực đại của dữ liệu cho phép truyền trên mạng Packet. Một đơn vị dữ liệu của tầng Liên mạng trong mô hình TCP/IP. Protocol Giao thức. Là một tập các quy tắc dùng trong việc truyền thông nào đó trên mạng. Router. Là một thiết bị làm việc trên tầng liên mạng, có nhiệm vụ định tuyến cho các gói tin trên mạng. Và dùng để kết nối các mạng với nhau. Section. Chỉ phiên làm việc giữa hai trạm trên mạng. System log File ghi lại các hoạt động của hệ thống. Switch Là thiết bị dùng để phân đoạn kết nối các phân đoạn mạng lại với nhau. TCP Transmission Control Protocol . Là giao thức dùng tại tầng giao vận. Đây là giao thức hướng nối kết, tin cậy. UDP User Datagram Protocol. Đây là giao thức cùng được sử dụng trên tầng giao vận với giao thức TCP nhưng UDP là giao thức không hướng kết nối, không tin cậy. VPN Virtual Private Lan - Mạng riêng ảo Phụ lục B Danh sách các tài liệu tham khảo. 1. Mạng máy tính và các hệ thống mở - TS Nguyễn Thúc Hải. 2. Computer Network.Andrew - S.Tanenbaum . 3. TCP/IP Illustrated Volume 1- The Protocols - W.Richard Steven (1995) 4. TCP.IP Illustrated Volume 2-The Implement Richard Stevens-(1995). 5. Cisco CCNP Switching Exam Certification Guide.Tim Boyles and Dave Hucaby, CCIE #4594. 6. Introduction to Intrusion Detection and Assessment - Rebecca Bace (1999). 7. Abnormal IP Packets - Karen Kent Frederick (2000). 8. Bace, Rebecca G., Intrusion Detection, Macmillan Technical Publishing, 2000. Một số trang web: ._.

Các file đính kèm theo tài liệu này:

  • doc24801.doc
Tài liệu liên quan