Mô tả giao thức

Một phần của tài liệu đề tài phần mềm bảo mật mạng dùng giao thức ip quyển 4a các phần mềm bảo mật gói ip trên hệ điều hành linux (Trang 84 - 88)

ý t−ởng ban đầu của phần mềm này là cung cấp một ph−ơng pháp bảo mật (chống lại việc nghe trộm, bao gồm việc phân tích truyền thơng, và tạo các thông điệp giả) trong truyền thông giữa các mạng con thông qua những mạng không bảo mật, chẳng hạn nh− Internet.

Giao thức này đ−ợc thiết kế để có thể làm việc đơn giản và hiệu quả thông qua các kiến trúc mạng đã có sẵn, đặc biệt bằng việc bao bọc các gói tin UDP.

Giao thức này đ−ợc chia thành hai phần: Mã hoá dữ liệu và trao đổi khoá động.

2.1 Mã hố các gói

Mỗi gói tin IP đ−ợc mã hố tồn bộ, kể cả phần đầu của gói tin (header). Gói tin sẽ đ−ợc thêm vào một số byte tùy từng độ dài gói tin cụ thể. Gói tin đ−ợc đệm vào cuối cùng đ−ợc thêm vào một octet chứa giá trị P (đ−ợc mô tả ở d−ới). Điều này đảm bảo rằng độ dài của gói tin ln là bội của 16 octet.

Gói tin này sau đó đ−ợc mã hoá bằng thuật toán mã khối MK1 (128 bit) trong chế độ CBC với một vector IV đ−ợc mô tả ở d−ới. Khoá sử dụng hoặc là khoá tĩnh hoặc khố động đ−ợc thực hiện thơng qua việc trao đổi khố cơng khai bằng cơng cụ KEX. Mã khối MK1 thực hiện mã hoá 128 bit dữ liệu bằng 512 bit khố.

Gói tin đã mã hố cũng ch−a quyết định đ−ợc với khối IV. Bit có thứ tự cao nhất của octet đầu tiên của IV là 0 nếu khoá sử dụng là khoá tĩnh, bằng 1 nếu sử dụng khoá động.

Giá trị P đ−ợc đ−a ra nh− sau: có 4 bít của P chỉ ra độ dài của phần thêm vào giữa các gói gốc và P. Các bit 2, 1 là mã kiểu, chỉ ra kiểu gói tin là gì.

Mã kiểu gồm có: 00 - dữ liệu, 01 - trao đổi khoá, 10 - đ−ợc đặt tr−ớc, 11 - đ−ợc đặt tr−ớc.

2.2 Trao đổi khố

Khóa đ−ợc trao đổi tự động bằng công cụ KEX, đ−ợc chúng tôi mô tả chi tiết trong một mục khác.

2.3 Các vấn đề về bảo mật

Các gói tin thực tế đ−ợc gửi đi khơng mang bất kỳ thơng tin hữu ích khác có liên quan tới các gói tin IP gốc ban đầu cả về độ dài gói tin (đ−ợc thêm vào thành là bội của 16). Điều này có thể bảo vệ một cách hiệu quả với hầu hết các khía cạnh trong việc phân tích truyền thơng. Một thơng tin khác là bit xác định để giải mã gói tin là bit báo là sử dụng khố tĩnh hay khố động. Thơng th−ờng khoá tĩnh chỉ đ−ợc dùng trong những giai đoạn ngắn trong q trình trao đổi khố. Khố động là khố

thiết, bởi lẽ ch−ơng trình ứng dụng thám mã bằng các ph−ơng pháp tấn công các bản mã đã biết hoặc tấn công bản rõ chọn lọc từ việc chặn bắt đ−ợc một khối l−ợng lớn các dữ liệu trên một khố.

Tuy nhiên cũng có các gói tin IP mang một số các bản rõ dễ đốn hoặc biết tr−ớc trong những vị trí chắc chắn của chúng. Sự khai thác có hiệu quả thực tế này có thể làm giảm khả năng của khóa. Việc sử dụng số IV ngẫu nhiên cho mỗi gói tin có ý nghĩa trong việc chuyển lại các gói tin mã hóa thành các bản mã khác nhau.

3.Giải phỏp can thiệp mật mó trong Transcrypt

3.1 Gúi tin được gửi đi

Khi một gúi tin cần chuyển đi từ mạng riờng này sang mạng riờng khỏc mà thuộc diện transcrypt bảo mật, thỡ trỡnh transcrypt sẽ thực hiện việc bọc gúi tin nguyờn bản vào gúi tin UDP (User Datagram Protocol – Gúi tin người sử dụng).

Gúi tin nguyờn bản trước đú sẽ được mó hoỏ bằng việc gọi hàm:

int length = skb->len;

transcrypt_encrypt(tunnel, skb->data, &length, TW_DATA);

Quỏ trỡnh bọc gúi tin nguyờn bản bởi UDP header (phần đầu gúi tin UDP) được thực hiện trong hàm transcrypt_xmit() trong file output.c:

Thực hiện việc cấp phỏt vựng nhớ cho UDP header:

/* Install our new headers */

udph = skb->h.uh = (struct udphdr *) skb_push(skb, sizeof(struct udphdr));

Gỏn địa chỉ UDP cho gúi tin chuyển đi:

udph->source = tunnel->myport; udph->dest = tunnel->peerport;

dph->len = htons(length+sizeof(struct udphdr));

Sau khi gỏn địa chỉ UDP cho gúi tin thỡ trỡnh sẽ thực hiện bọc gúi tin UDP này bởi IP header được tạo thành tunnel giữa hai mỏy chạy transcrypt:

Địa chỉ đớch là địa chỉ của mỏy bạn:

u32 dst = tunnel->peeraddr; (adsbygoogle = window.adsbygoogle || []).push({});

if (ip_route_output(&rt, dst, tunnel->sock->rcv_saddr, RT_TOS(tos), tunnel->sock->bound_dev_if)) {

dprintk(DEB_OUT, (KERN_NOTICE "%s: no route\n", dev->name));

. . .

goto tx_error_out; }

/*

* Push down and install the TRANSCRYPT/UDP header. */

iph->version = 4;

iph->ihl = sizeof(struct iphdr)>>2; iph->tos = tos; iph->tot_len = htons(skb->len); ip_ident(iph, &rt->u.dst); iph->frag_off = df; iph->ttl = ttl; iph->protocol = IPPROTO_UDP; iph->saddr = rt->rt_src; iph->daddr = rt->rt_dst; ip_send_check(iph);

Cõu lệnh gỏn iph->protocol = IPPROTO_UDP chứng tỏ rằng gúi tin mới tạo ra là gúi tin UDP.

Chỳng ta cú thể mụ tả cấu trỳc gúi tin trước và sau khi tạo tunnel: Gúi tin trước khi bọc:

data IP

Gúi tin sau khi bọc:

New IP UDP IP data

3.2 Nhận gúi tin

Ta nhận thấy việc xử lý gúi tin nhận được hàm struct sk_buff

*transcrypt_decrypt_skb(struct transcrypt *c, struct sock *sk,

struct sk_buff *skb, int *msgflag) ở tệp sock.c

thực hiện.

Khi nhận được gúi tin do bờn mó hoỏ gửi sang, thỡ bờn nhận sẽ thực hiện cụng việc loại bỏ phần IP header và UDP header thờm vào.

Loại bỏ IP header thờm vào:

skb_put(n,skb->len);

memcpy(n->data, skb->h.raw, skb->len); n->h.uh=(struct udphdr *)n->data;

Loại bỏ UDP header:

/* Pull out UDP header */ #ifdef LINUX_21

#else . . . #endif

Sau khi loại bỏ IP header và UDP header thỡ trỡnh sẽ thực hiện cụng việc giải mó gúi tin để nhận được gúi tin nguyờn dạng ban đầu:

length=ntohs(skb->h.uh->len)-sizeof(struct udphdr); switch (transcrypt_decrypt(c, n->data, &length)) { ...

}

Khi xử lý giải mó gúi tin xong thỡ trỡnh sẽ thực hiện gọi hàm netif_rx() để chuyển gúi tin lờn tầng mạng trờn xử lý.

/* requeue */ netif_rx(n); (adsbygoogle = window.adsbygoogle || []).push({});

Ch−ơng 2

Phần mềm TRANSCRYPT

Gói phần mềm TRANSCRYPT đ−ợc cung cấp d−ới dạng file nén .tgz. Để thực hiện biên dịch, và cài đặt phần mềm này, ta tiến hành giải nén file này, chạy kịch bản configure để tạo ra các Makefile phục vụ cho quá trình biên dịch, cài đặt.

Một phần của tài liệu đề tài phần mềm bảo mật mạng dùng giao thức ip quyển 4a các phần mềm bảo mật gói ip trên hệ điều hành linux (Trang 84 - 88)