Giải thuật

Một phần của tài liệu lọc nội dung internet tại máy tính cá nhân và xây dựng phần mềm (Trang 49 - 71)

1.11. Hoạt động

Khởi tạo chương trình thực hiện hook vào lớp mạng mức kernel mode của window:

Kiểm soát tất cả các gói tin gửi đến và đi trước khi chuyển qua lớp mạng của Window.

Các gói tin được kiểm soát theo chế độ thời gian thực: đảm bảo không ảnh hưởng tới tốc độ truy cập của người sử dụng, mỗi gói tin được kiểm soát trong khoảng thời gian nhất định.

Thành phần Lấy dữ liệu và Phân tích gói tin sẽ cung cấp thông tin để thực hiện kiểm soát nội dung của gói tin được gửi tới.

Các thông số của gói tin được kiểm tra Kho dữ liệu Thread:

- Không xử lý: gói tin thuộc dạng không cần kiểm tra (do xác nhận của gói tin trước là phiên làm việc hiện tại thuộc danh sách trắng): gói tin sẽ được chuyển tiếp tới lớp mạng của Window, chương trình quay về trạng thái chờ gói tin tiếp theo. Gửi thông báo tới Bộ quyết định để xác định nếu là gói tin sau cùng sẽ thực hiện đóng Thread.

- Nếu gói tin thuộc diện cần kiểm tra (phiên làm việc được xác lập mới, nội dung truy cập không phải thuộc danh sách trắng): sẽ chuyển tiếp cho thành phần tiếp theo xử lý.

- Xử lý riêng: khi không phải là gói tin đầu tiên hoặc được điều khiển để bỏ qua những thành phần kiểm tra nhất định.

Thành phần Lọc cụ thể, lọc loại trừ (URL, IP): chủ yếu thực hiện đối với gói tin đầu tiên đi đến của một truy cập, ngoài ra thành phần này có thể thực hiện công việc khi tiếp nhận yêu cầu xử lý trực tiếp.

Lọc cụ thể, lọc loại trừ URL, IP chỉ cần thực hiện với gói tin đầu tiên: mọi gói tin tiếp theo sẽ hủy bỏ hoặc chuyển tiếp không cần xử lý.

Hiệu quả đối với người sử dụng: một truy cập để chuyển tải nội dung về máy người sử dụng thường bao gồm rất nhiều gói tin

Thành phần Lọc kiểu dữ liệu: kiểm soát kiểu dữ liệu truy cập. Thành phần Lọc cổng: kiểm soát cổng truy cập dữ liệu.

Thành phần Lọc nội dung: - Lọc nội dung văn bản. - Lọc nội dung hình ảnh. Thành phần Bộ quyết định:

- Tiếp nhận thông tin từ các thành phần và đưa ra quyết định đối với gói tin. Trong nhiều trường hợp để đảm bảo chương trình có thể hoạt động theo chế độ thời gian thực, Bộ quyết định sẽ đưa ra quyết định đối với gói tin trước khi có thông tin từ các thành phần khác.

- Điều khiển các thành phần xử lý truy cập ở cả hai mức: user mode và kernel mode.

- Cập nhật thông tin cho Kho dữ liệu Thread.

1.12. Phân tích các thành phần1.12.1. Thành phần lấy dữ liệu 1.12.1. Thành phần lấy dữ liệu

Để kiểm soát được gói tin và các ứng dụng truy cập internet, tường lửa lọc nội dung thực hiện hook vào hệ thống cả mức user mode và kernel mode [ 7, 8, 9, 10, 11, 12, 13 ] :

Hình 1.2. Sơ đồ xử lý tổng quát giải pháp lọc nội dung

Nhìn ở góc độ bộ đệm dữ liệu (Buffer), có thể thấy chu trình dữ liệu đi như ở hình dưới. Dữ liệu gói tin đi qua driver, lên ứng dụng, và được thao tác tại ứng dụng, và có thể đưa ra hệ thống file…

Kiến trúc tường lửa lọc nội dung có thể được chia thành hai phần theo chức năng, đó là:

o Lọc cụ thể, lọc loại trừ: lọc IP, URL.

o Lọc nội dung: lọc cổng, lọc kiểu dữ liệu, tổng hợp, phân tích nội dung truy cập.

Tương ứng với từng trường hợp lọc, việc xác định vị trí lấy dữ liệu phù hợp là cần thiết đảm bảo thực hiện yêu cầu đặt ra. Đối với chức năng “lọc cụ thể, lọc loại trừ” và một số chức năng lọc trong chức năng “lọc nội dung”, các thông tin cần thiết để thực hiện lọc có trong các gói tin mức kernel mode (Transport Layer, Network Layer, Data Link Layer).

Hình 1.4. Cấu trúc dữ liệu tầng Transport

struct tcp_hdr{

unsigned short sport //Source Port unsigned short dport //Destiantion Port unsigned int seq_num //Sequence Number

unsigned int ack_num //Acknowledgment Number unsigned char dataoffset //Data Offset

unsigned char flags //2 bits Reserve + 6 bits Flags: SYN, ACK, FIN, RST, PUSH, URG

unsigned short window //Windows unsigned short checksum //Checksum unsigned short urgpointer //Urgent Pointer } (adsbygoogle = window.adsbygoogle || []).push({});

Hình 1.5. Cấu trúc dữ liệu tầng Network

struct ip_hdr{

unsigned char ver_ihl; //Version (4 bits) + Internet Header Length (4 bits) unsigned char tos; //Type Of Service

unsigned short tol_len //Total Length (Ip Header + TCP Header + Data) unsigned short id //Identification

unsigned short offset //Frame Offset trong đó 8 bits cho flags unsigned char ttl //Time to Live

unsigned char protocol //Protocol

unsigned short checksum //Header Checksum unsigned int saddr //Source Address unsigned int daddr //Destination Address };

Hình 1.6. Cấu trúc dữ liệu tầng DataLink

Ứng với mỗi tầng dữ liệu trong mô hình OSI từ tầng Transport đến tầng DataLink, gói tin sẽ được bọc thêm vào phần tiêu đề của tầng dữ liệu tương ứng. Các thông tin cần thiết để thực hiện lọc cụ thể, lọc loại trừ có trong tiêu đề gói tin mức tương ứng:

Transport: cổng nguồn, cổng đích, URL và kiểu dữ liệu (trong phần data của gói tin gửi đi hoặc gửi đến).

Network: giao thức thực hiện, địa chỉ IP nguồn, địa chỉ IP đích. DataLink: địa chỉ MAC nguồn, địa chỉ MAC đích.

Do tường lửa lọc nội dung cho máy tính người dùng cá nhân thực hiện kiểm soát nội dung truy cập Internet của người sử dụng cá nhân nên thông tin về địa chỉ

MAC nguồn và đích có tại tầng DataLink là hoàn toàn không cần thiết. Và nếu dữ liệu được lấy từ tầng Transport thì sẽ không có thông tin về địa chỉ IP nguồn, địa chỉ IP đích, giao thức được sử dụng.

Do đó, thành phần lấy dữ liệu tại kernel mode sẽ thực hiện lấy dữ liệu tại tầng Network:

− Thông tin đầu vào cho các thành phần lọc cụ thể, lọc loại trừ có sẵn và đầy đủ.

− Cung cấp các thông tin cần thiết để có thể tổng hợp các gói tin thành phiên giao dịch đầy đủ: sequence number, acknowledgement number, data ofset, flags, window,… đảm bảo dữ liệu đầu vào cho thành phần lọc nội dung đầy đủ và chính xác.

Như vậy với thành phần lấy dữ liệu, ta đã có thể thu thập được toàn bộ các gói tin vào ra máy tính. Công việc tiếp theo là phân tích, tổng hợp các gói tin đi và đến. Nhiệm vụ này được các thành phần tiếp theo thực hiện.

1.12.2. Thành phần phân tích nội dung gói tin

Với mỗi gói tin lấy được từ tầng Network, thành phần phân tích nội dung gói tin với cấu trúc như sau:

IP header: 24 bytes TCP header: 24 bytes Data (<1500 bytes)

Hình 2.1. Cấu trúc gói tin lấy dữ liệu

Tách 20 bytes IP header (đến 60 bytes) lấy các thông tin:

− IHL (4 bits): trường có độ dài 4 bits qui định độ dài của phần header (tính theo đơn vị words 32 bits). Phần header có độ dài tối thiểu là 5 words (160 bits) và tối đa là 15 words (480 bits).

− Total length (16bits): độ lớn gói tin, đơn vị tính octets, độ dài tối đa 65535 octets.

− Fragment Offset (13 bits): mảnh đầu tiên có giá trị là 0. Tùy theo giá trị của trường này sẽ xác định được có phải gói tin đầu tiên nhận được hay không, hệ thống thực hiện một số tùy chọn về lọc cụ thể, lọc loại trừ và mở tác vụ lọc nội dung mới nếu cần.

− Protocol (8 bits): xác định giao thức tầng transport sử dụng, cung cấp dữ liệu cho thành phần lọc cụ thể, lọc loại trừ giao thức.

− Source address (32 bits): địa chỉ IP nguồn, cung cấp đầu vào cho thành phần lọc cụ thể, lọc loại trừ IP.

− Destination address (32bits): địa chỉ IP đích, cung cấp đầu vào cho thành phần lọc cụ thể, lọc loại trừ IP.

− Phần dữ liệu còn lại là gói tin TCP.

Tách 20 bytes TCP header (đến 60 bytes) lấy các thông tin: (adsbygoogle = window.adsbygoogle || []).push({});

− Source port (16 bits): địa chỉ cổng nguồn, cung cấp đầu vào cho thành phần lọc cụ thể, lọc loại trừ cổng.

− Destination port (16 bits): địa chỉ cổng đích, cung cấp đầu vào cho thành phần lọc cụ thể, lọc loại trừ cổng.

− Sequence number (32 bits): Ở hai bước đầu tiên trong quá trình bắt tay ba bước, hai máy tính trao đổi một số thứ tự gói ban đầu (Initial Sequence Number -ISN). Số này có thể chọn một cách ngẫu nhiên. Số thứ tự này được dùng để đánh dấu các khối dữ liệu gửi từ mỗi máy tính. Sau mỗi byte được truyền đi, số này lại được tăng lên. Nhờ vậy ta có thể sắp xếp lại chúng khi tới máy tính kia bất kể các gói tới nơi theo thứ tự thế nào. Việc xác định gói tin đầu tiên phụ thuộc vào cờ flags, nếu cờ SYN bật thì nó là số thứ tự gói ban đầu và byte đầu tiên được gửi có số thứ tự này cộng thêm 1. Nếu không có cờ SYN thì đây là số thứ tự của byte đầu tiên.

− Acknowledgement Number (32 bits): số bytes của gói dữ liệu tiếp theo sẽ được gửi đi. Nếu cờ ACK bật thì giá trị của trường chính là số thứ tự gói tin tiếp theo mà bên nhận cần.

− Data offset (4 bits): Trường có độ dài 4 bits qui định độ dài của phần header (tính theo đơn vị words 32 bits). Phần header có độ dài tối thiểu là 5 words (160 bits) và tối đa là 15 words (480 bits).

− Flags (6 bits):

o URG: The Urgent Pointer field is significant.

o ACK: The Acknowledgement field is significant.

o EOL: End of Letter.

o FIN: No more data from the sender.

− Phần dữ liệu còn lại là gói tin HTTP.

Phần dữ liệu còn lại sau khi được tách IP header và TCP header là dữ liệu tầng ứng dụng. Dữ liệu tầng ứng dụng được chia thành 2 phần: tiêu đề và nội dung được phân cách nhau bởi cặp thẻ “\r\n” xuất hiện 2 lần liên tiếp tính từ đầu gói tin.

Cấu trúc tiêu đề gói tin HTTP có dạng:

“tên trường” + “: ” + “giá trị thuộc tính” + “\r\n”.

Một số “tên trường” sử dụng lấy dữ liệu đầu vào của thành phần lọc cụ thể, lọc loại trừ:

GET/POST: giao thức sử dụng.

Accept-Language: ngôn ngữ sử dụng. Host: địa chỉ tên miền truy cập.

Refered: địa chỉ URL truy cập.

Phần dữ liệu còn lại kết hợp với các thông tin trích rút được từ IP header và TCP header sẽ được tổng hợp thành phiên giao dịch đầy đủ, phục vụ kiểm soát nội dung.

Hình 2.2. Các gói tin dạng thô và được phân tích theo từng lớp mạng

Cùng một thời điểm có thể có nhiều phiên giao dịch tương ứng với các đối tượng của trang web (text, ảnh…). Các phiên này được phân biệt bởi các tham số trong cấu trúc dữ liệu TCP/IP (ở trên), bao gồm: địa chỉ ip, số cổng, số ACK, SEQUENT (xem hình dưới).

Hình 2.3. Dữ liệu tầng TCP/IP của một gói tin

1.12.3. Thành phần tách, tổng hợp gói tin thành phiên giao dịch

Ở phần trên, module phân tích nội dung gói tin thực hiện xử lý các gói tin trong tầng TCP để thu được các phiên giao dịch. Khi thu được dữ liệu các phiên giao dịch, nhiệm vụ tiếp theo của module tổng hợp sẽ là phân tích nội dung giao dịch để biết đó là giao dịch theo dạng nào. Dạng của phiên giao dịch ở đây có ý nghĩa là: một trang web vốn có nhiều thành phần, gồm ảnh, phim, flash file, javascript, text file… Do đó cần phân loại các đối tượng này, để có thể phân tích nội dung tương ứng. Dưới đây là quy trình tổng hợp dữ liệu dạng text.

Dưới đây là ví dụ về nội dung gói tin được phân tích.

Trong hình trên ta có thể thấy một cấu trúc header, với nội dung cho biết đây là một gói tin chứa nội dung ảnh gif, với kích thước 12755 bytes.

Hình 3.2. Header file text/html

Trên đây là tiêu đề của phiên giao dịch nội dung gói tin text/html, với một trang text có nội dung 46071 bytes.

Tiếp theo, các gói tin được tổng hợp để ra một trang web hoàn chỉnh. Như trên nội dung gói tin trên cho biết phiên giao dịch này có kích thước text file là 46071 bytes, với kích thước tương đối của một gói tin khoảng 1500 bytes, như vậy phiên giao dịch này sẽ có khoảng 30 gói tin.

Trọn vẹn gói tin HTTP đầu tiên của phiên giao dịch có nội dung như sau: (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.3. Gói tin đầu tiên của một phiên giao dịch

Công việc tiếp theo đó là tập hợp các gói tin kế tiếp của phiên giao dịch. Thành phần này sẽ thực hiện tổng hợp, sắp xếp các gói tin lại thành phiên giao dịch đầy đủ dựa vào các tham số: địa chỉ ip, số cổng, số ACK, SEQUENT.

Thực hiện kiểm tra các gói tin có các tham số như trên và Seq theo qui luật, để ghép nội dung gói tiếp theo vào phiên. Cụ thể trong ví dụ này, gói tiếp theo như sau, tham số Ack là của gói tin trước nó, tham số Seq bằng tổng của Seq của gói tin trước và kích thước gói tin trước nó (1+1460=1461):

Hình 3.5. Tham số Seq và Ack gói tin kế tiếp

Thực hiện tương tự đối với các gói tin tiếp theo cho tới khi nhận đủ gói tin cần thiết: tổng số Len bằng kích thước phiên giao dịch (46071 bytes) hoặc khi gói tin đến tại cổng này và ACK đã bị thay đổi.

Hình dưới đây mô tả thứ tự các gói tin của phiên giao dịch.

Hình 3.6. Tổng hợp các gói tin đơn lẻ thành phiên giao dịch

Sau khi đã tổng hợp được hoàn chỉnh một phiên giao dịch Text, bước tiếp theo sẽ là phân tích nội dung phiên giao dịch đó, cụ thể là phân tích nội dung một text file.

1.12.4. Thành phần lọc cụ thể, lọc loại trừLọc cụ thể, lọc loại trừ: IP Lọc cụ thể, lọc loại trừ: IP

Đối soát trực tiếp các thông tin trích rút được từ thành phần phân tích nội dung với kho dữ liệu lọc IP. Cung cấp kết quả kiểm tra cho module Bộ quyết định để thực hiện lọc cụ thể, lọc loại trừ đối với gói tin truy cập.

Như ví dụ tại hình 4.10, danh sách lọc cụ thể, lọc loại trừ IP được đối soát với địa chỉ IP trích rút ra từ tiêu đề tầng IP.

Lọc cụ thể, lọc loại trừ: URL

Quy trình thực hiện tương tự như đối với lọc IP, tuy nhiên thông tin để đối soát với các kho dữ liệu tương ứng không thuộc vị trí nhất định trong tiêu đề của các gói tin IP và TCP mà là một phần dữ liệu trong gói tin HTTP.

Thành phần phân tích nội dung gói tin (3.2) thực hiện phân tích nội dung cung cấp thông tin URL để thành phần lọc cụ thể lọc loại trừ URL thực hiện đối soát.

Áp dụng thực hiện với một danh sách lọc URL (hiện đang sử dụng cho quản lý đại lý Internet công cộng của Công ty VDC) như sau:

'anhuynh.freehomepage.com', 'datviet.com', 'bangboat.com', 'dddcvn.org', 'bdqvn.org', 'diendanpaltalk.com', 'butvang.org', 'diendangiaodan.com', 'canhen.de', 'dungday.tripod.com', 'canhsatquocgia.com', 'ebonyjoy.com', 'canhtan.choao.com', 'emviet.com', 'caodai.net', 'groups.yahoo.com/group/cpcmvntd-bc', 'conong.com', 'groups.yahoo.com/group/chinhluan', 'congly.com', 'groups.yahoo.com/group/dangcongsanvietnam', 'crfvn.org', 'groups.yahoo.com/group/diendanchinhtri', 'ctnb.org', 'groups.yahoo.com/group/diendandautranh', 'chantroi.net', 'groups.yahoo.com/group/diendantintuc', 'ChaocoVNCH.8m.com', 'groups.yahoo.com/group/freevietnam', 'chinhnghia.org', 'groups.yahoo.com/group/hanoivietnam', 'chuyenluan.com', 'groups.yahoo.com/group/hoinghi', 'daichung.com', 'groups.yahoo.com/group/nghiluan', 'daihoccuunuoc.com', 'groups.yahoo.com/group/nhanquyenchovietnam', 'daiviet.org', 'groups.yahoo.com/group/tiengchuong1', 'danchimviet.com', 'groups.yahoo.com/group/tinhlam', 'danchu.net', 'groups.yahoo.com/group/tinhmuonmau', 'danchuqueme.free.fr', 'groups.yahoo.com/group/tinhthuong36', 'danuoc.org', 'groups.yahoo.com/group/toiacdangcongsanvietnam', 'danguyen.org', 'groups.yahoo.com/group/vietnamdiendan',

Tường lửa lọc nội dung sẽ kiểm tra gói tin đầu tiên đi/đến máy tính trong một phiên truy cập (hoặc kiểm tra tất cả các gói tin đi/đến, tùy thuộc lựa chọn người sử dụng) trích rút các thông tin của trường Referer và Content-Type:

Hình 4.2. Gói tin request(Get)

Đối với ví dụ trên, trường Referer trong gói tin cho biết có tiến trình truy cập đến địa chỉ http://tintuc.vnn.vn/forum/. Nếu địa chỉ này nằm trong danh sách ‘đen’ ở trên, tường lửa lọc nội dung sẽ tác động vào trình duyệt đang truy cập trang web đó.

1.12.5. Thành phần lọc nội dungLọc cổng truy cập

Một phần của tài liệu lọc nội dung internet tại máy tính cá nhân và xây dựng phần mềm (Trang 49 - 71)