TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TOÁN ĐẢM BẢO AN TOÀN
TRONG HỆ PHÂN TÁN
Giáo viên hướng dẫn: TS. Vũ Thị Hương Giang
Học viên thực hiện : Trương Thảo Nguyên CB120098
Vũ Đình Phú CB120104
Nguyễn Thị Thùy Liên CB120046
Lớp: Công nghệ thông tin 2 (KT)
Chuyên ngành: Công nghệ thông tin (KT)
Đề bài: Đề số 07. Bài toán đảm bảo an toàn trong hệ phân tán
HÀ NỘI 12 – 2012
Mục lục
2
1. Giới thiệu chung
1.1. Tổng quan về hệ phân tán
1.1.1. Khái niệm hệ phân tán
Hiện nay có nhiều cách định nghĩa hệ phân tán khác nhau. Có người nói “hệ phân tán là tập
hợp các máy tính tự trị được kết nối với nhau bởi một mạng máy tính và được cài đặt phần mềm
tương ứng cho hệ phân tán”. Có người lại định nghĩa “hệ phân tán là một hệ thống có chức năng
và dữ liệu phân tán trên các trạm(máy tính) được kết nối với nhau bởi một mạng máy tính” hay
“hệ phân tán là một tập các máy tính độc lập giá tiếp với người dùng như một hệ thống thống
nhất, toàng vẹn”. Tuy nhiên, dù định nghĩa theo cách này hay cách khác, hệ phân tán vẫn phải
bao gồm những thành phần(máy tính) tự trị, tương tác qua lại với nhau thông qua mạng. Các
máy tính tự trị này trao đổi, làm việc nhằm phục vụ một mục đích chung.
1.1.2. Đặc điểm hệ phân tán
Theo như định nghĩa trên, hệ phân tán có một vài đặc điểm chính sau [6]:
- Đa thực thể (Multiple entities): Một hệ phân tán bao giờ cũng là sự kết hợp của nhiều thực
thể khác nhau. Thực thể ở đây có thể là người dùng, có thể là các máy tính tính toán, cũng
có thể là một hệ thống hoạt động độc lập.
- Không đồng nhất (Heterogeneity)
- Hoạt động song song (Concurrency)
- Chia sẻ tài nguyên (Resource sharing)
1.1.3. Phân loại hệ phân tán
Hệ phân tán có thể được chia thành ba loại chính sau:
- Hệ tính toán phân tán (distributed computing systems): hỗ trợ việc tính toán một cách
phân tán
- Hệ thông tin phân tán (Distributed information systems): hỗ trợ lưu trữ, truy cập và quản
lý dữ liệu một cách phân tán
- Hệ phân tán rộng khắp (Distributed pervasive systems): là thế hệ hệ phân tán hiện nay.
1.1.4. Các kiến trúc của hệ phân tán
Có thể thiết kế một hệ phân tán theo 4 kiến trúc khác nhau [6] lần lượt là “client-server”,
“multinode systems”, “P2P” và “service oriented systems”. Client-server là kiến trúc được biết
tới nhiều nhất trong các kiến trúc của hệ phân tán. Kiến trúc này bao gồm hai thành phần là
server và client. Server có nhiệm vụ cung cấp các dịch vụ cho client hoặc một nhóm các clients.
Các client không cần quan tâm đến việc xử lý nghiệp vụ. Chức năng này sẽ được server đảm
nhiệm. Khi cần các thao tác xử lý nghiệp vụ, client sẽ hỏi server để có được kết quả cần thiết.
Trong kiến trúc client-server, chỉ tồn tài một server xử lý nghiệp vụ, phục vụ các client. Mở
rộng hơn, kiến trúc multinode systems, server được chia thành nhiều phần nhỏ (nodes). Qua đó,
3
hỗ trợ quá trình xử lý song song nhằm nâng cao hiệu suất, chống lỗi và đảm bảo việc đáp ứng
nhiều client hơn (tính chất mở rộng)
Khác với hai kiến trúc đã đề cập trước, P2P (peer-to-peer) là mô hình ở đó không có sự phân
cấp. Trong kiến trúc này, tất cả các máy (nodes) đều có chung một cấp độ và không còn khái
niệm client cũng như server. Một máy tham gia vào hệ thống trao đổi với các máy khác sẽ có vai
trò thay đổi phụ thuộc vào yêu cầu của bài toán cần thực hiện, phụ thuộc vào thời điểm xử lý
công việc. Có thể hiểu, máy đó tại thời điểm A đóng vai trò như một server để xử lý một nghiệp
vụ nào đó, nhưng tại thời điểm B khác lại đóng vai trò như một client yêu cầu dịch vụ từ một
máy khác.Ưu điểm của kiến trúc này là khả năng mở rộng (có thể hình dung là không giới hạn)
và khả năng chịu lỗi cao. Tuy nhiên kiến trúc này lại yêu cầu việc giải quyết bài toán bảo mật
một cách cẩn thận và thấu đáo
Cuối cùng, kiến trúc hướng dịch vụ (Service oriented architechture - SOA) được xây dựng
trên mô hình client-server nhưng tập trung lấy dịch vụ làm trung tâm. Một dịch vụ có thể hiểu là
một phần hoạt động tự chủ của một phần mêm với chức năng được định sẵn.
1.2. Tổng quan về bài toán đảm bảo an toàn trong hệ
phân tán.
Quá trình thiết kế và cài đặt một hệ phân tán đòi hỏi phải cân nhắc nhiều các vấn đề khác
nhau như sự đồng bộ, sự thống nhất về mặt dữ liệu, khả năng chống lỗi cũng như bài toán bảo
mật, an toàn thông tin…vv Trong đó, bài toán đảm bảo an toàn trong hệ phân tán là một trong
những vấn đề quan trọng và khó khăn nhất. Trong những phần tiếp theo, nhóm sẽ trình bày về
các vấn đề để của đảm bảo an toàn trong hệ phân tán. Để người đọc hiểu rõ, nhóm sẽ trình bày
một số khái niệm cơ bản trong phần 1.2.1 dưới đây. Từ đó, nhóm sẽ đề cập đến các vấn đề
thường gặp để đảm bảo an toàn trong hệ phân tán ở phần 1.2.2
1.2.1. Các khái niệm
1.2.1.1. Điểm yếu (Vulnerability)
Điểm yếu là các đặc tính hoạt thiếu sót có thể bị khai thác và dẫn tới hậu quả vi phậm các yêu
cầu về đảm bảo an toàn. Điểm yếu có thể tòn tại trong phần cứng, phần mềm, trong kiến trúc
mạng, trong hệ thống dữ liệu. Điểm yếu có thể xuất hiện trong quá trình thiết kế hay cài đặt hệ
thống, thậm chí trong carc bước, các thủ tục đảm bảo an toàn.
Có thể phân chia điểm yếu ra làm hai loại: điểm yếu về mặt tính toán và điểm yếu về mặt
thông tin [1]. Điểm yếu về mặt tính toán (operational-based) đề cập đén những lỗi không mong
muốn xảy ra mà không lường trước được. Điểm yếu về mặt thông tin (information-based)có thể
hiểu là những truy cập trái phép, sự không toàn vẹn của dữ liệu.vv
4
1.2.1.2. Đe dọa (Threats)
Đe dọa được hiểu là các sự kiện tiềm ẩn có thể vi phậm các yêu cầu đảm bảo an toàn thông
tin. Đe dọa cũng có thể hiểu là một kịch bản khai thác các điểm yếu của hệ thống từ đó gây ra
các vị phạm về an toàn thông tin [1].
Mối đe dọa có thể được phân loại dựa vào hành động hoặc hậu quả của nó để lại. Dựa vào các
hành động, đe dọa được chia thành các loại như các hành động xem thông tin trái phép, các hành
động phá hủy, sửa chữa dữ liệu. Nếu phân chia theo hậu quả, đe dọa có thể chia thành mối đe
dọa bị lộ thông tin, xuyên tạc, bóp méo thông tin, chối bỏ trách nhiệm, không toàn vẹn dữ liệu …
1.2.1.3. Tấn công (Attack)
Một kẻ xấu thực hiện khai thác các điểm yếu thông qua các kịch bản, các mối đe dọa vốn có
của hệ thống thì được gọi là một cuộc tấn công. Tấn công thường khiến cho hệ thống hoạt động
không bình thường hoặc bị ảnh hưởng về mặt thông tin.
1.2.2. Các vấn đề thường gặp khi bảo đảm an toàn trong hệ phân tán
Ngày nay, đảm bảo an toàn trong hệ phân tán nói riêng và bài toán an toàn thông tin nói
chung quan tâm đến một số các vấn đề sau:
- Quản lý truy nhập (Access control): Hệ phân tán là sự tương tác của nhiều máy tính có tính
tự chủ, là việc sử dụng chung tài nguyên. Bài toán đặt ra là làm sao để quản lý được máy nào,
thành phần nào được quyền yêu cầu dịch vụ, sử dụng tài nguyên nào trong từng trường hợp
là một bài toán khó.
- Xác thực (Authentication): Mọi hoạt động đều cần được xác thực. Làm thế nào để biết
được một máy A đang thực hiện trao đổi trong mạng phân tán có phải là chính máy A hay
không? Trong mô hình client-server, làm thế nào để server biết là đang giao tiếp với client
nào và ngược lại. Để giải quyết vấn đề này, người ta hay sử dụng kĩ thuật mã hóa
(crytography) Ngoài ra xác thực cũng có thể tiếp cận trên phương diện xác thực một thông
điệp (message authentication). Ở đó, vấn đề xác định được một thông điệp không bị sửa đổi
trong quá trình truyền tải, xác định nội dung của thông điệp là chính xác rất quan trọng.
- Chống chối bỏ (Non-repudiation): Đây là yêu cầu đặt ra với một số hệ thống cần phải chắc
chắn rằng thành phần gửi yêu cầu, hoặc gửi thông tin (sender) không thể chối bỏ được rằng
mình đã gửi đi yêu cầu hay thông tin đó. Ví dụ như khách hàng không thể chối bỏ rằng mình
đã thực hiện giao dịch chuyển tiền để mua một mặt hàng nào đó hay trong cuộc trao đổi giữa
hai công ty A và B, A không thể chối bỏ là mình đã gửi hợp đồng có nội dung xác định cho
bên B. Cũng như vậy, B không thể chối bỏ rằng đã đồng ý với các điều khoản trong bản hợp
đồng khác với bản hợp đồng mà bên A gửi. Có thể thực hiện được điều này thông qua một số
các kĩ thuật về chữ kí (liên quan đến nội dung tin nhắn) hoặc kĩ thuật mã hóa văn bản
2. Các điểm yếu và mối đe dọa của một hệ phân tán
Tiếp theo, nhóm sẽ trình bày về các điểm yếu(vulnerability) và mối đe dọa (threats) có thể có
trong một hệ phân tán nhằm giúp cho người đọc hình dung được các nguy cơ tiềm ần trong hệ
5
phân tán. Nhóm xem xét, đánh giá các điểm yếu, mối đe dọa trên các góc nhìn khác nhau từ phía
máy chủ, cơ sở hạ tầng, ứng dụng và dịch vụ (tham khảo từ [6])
2.1. Điểm yếu và mối đe dọa trong máy chủ (host-
level)
2.1.1. Nghe lén
Trong các mô hình hợp tác tính toán trên hệ phân tán, mô hình tính toán lưới, các máy tính
phải trao đổi thông tin tính toán với nhau, người dùng phải chia sẻ tài nguyên tính toán, chia sẻ
màn hình với nhau. Tuy nhiên tồn tại một điểm yếu khiến cho những kẻ xấu có thể chặn bắt ở
giữa đường truyền giữa hai máy tính. Kẻ xấu truy cập vào các thông điệp được gửi qua lại giữa
hai máy tính này và thay đổi các kết quả tính toán với hi vọng có thể làm hệ thống ngừng hoạt
động hoặc thực hiện các thao tác sai. Đặc biệt, kiểu tấn công này chỉ thành công nếu như kết quả
trả ra dưới dạng dễ dàng có thể hiểu được.
2.1.2. Tràn bộ nhớ Overflow
Tràn bộ nhớ là một điểm yếu thường gặp trong các ứng dụng phần mềm. Các điểm yếu liên
quan đến tràn bộ nhớ được nhắc đến rất nhiều trong các báo cáo của cấc tổ chức CERT[6]. Tràn
bộ nhớ khiến cho quá trình truy nhập bào bộ nhớ có thể bị lỗi, bị dừng lại hoặc là thực hiện
không đúng. Trong thực tế tràn bộ nhớ bao gồm hai loại là stack over flow và heap over flow,
tận dụng hai đoạn bộ nhớ khác nhau là heap và buffer có thể gây tràn. Dựa trên cơ chế lập trình,
kẻ tấn công có thể truyền dữ liệu đầu vào rất lớn, gây tràn bộ nhớ, thông qua đó chuyển hướng
thực hiện chương trình sang thực hiện những đoạn mã độc đã được cài sẵn vào trong đoạn input
nhập vào. Ví dụ đơn giản, một chương trình có chức năng chọn file để thực thi tính toán trên nội
dung của file đó. Nếu lập trình lỗi có thể có lỗi buffer over flow (khi chương trình load nội dung
của file đó vào bộ nhớ stack).
2.1.3. Tiêm nhiễm mã độc
Tiêm nhiễm mã độc là những cố gắng của kẻ tấn công nhằm vào các chương trình mà không
kiểm tra giá trị đầu vào của người dùng một cách cẩn thận. Thông thường, trong kiểu tấn công
này, kẻ xấu sử dụng các đoạn mã thực thi , thông qua các giá trị đầu vào của chương trình tiêm
nhiễm vào trong hệ thống. Một số ví dụ điển hình của loại hình tấn công này đó là kẻ tấn công có
thể thông qua chức năng upload file của một trang web để chèn Shell, backdoor vào hệ thông.
Sau đó kẻ xấu có thể truy nhập vào shell và backdoor này, thực hiện các thao tác xấu thông qua
đó. Ví dụ khác là SQL injection. Lợi dụng khả năng chèn thêm thông tin vào câu truy vấn đề cơ
sở dữ liệu, kẻ xấu có thể truy vấn ra được các thông tin nhạy cảm của dữ liệu như tên bảng, tên
trường, thông tin đăng nhập của users.
6
2.2. Điểm yếu và mối đe dọa trong ứng dụng (application-level)
2.2.1. Injection
Injection đề cập đến một tập các điểm yếu ở dó các ứng dụng không kiểm tra giá trị đầu vào
một cách cẩn thận. Đặc biệt, injection hay xảy ra trong trường hợp mà giá trị đầu vòa của người
dùng là một phần của câu lệnh hoặc câu truy vấn.
Có nhiều hình thức tấn công khác nhau thông qua hình thức injection. SQL injection mà trình
bày ở trên là một trong số đó. Ngoài ro có thể nhắc tới một số loại hình khác như:
- Blind injection: Hình thức này gần giống với SQL injection.Nhưng thay vì kẻ tấn công có
được thông tin về dữ liệu khi chèn đoạn truy vấn SQL vào trong giá trị đầu vào thì kẻ tấn
công chỉ có thể xác định được sự đúng sai của câu truy vấn. Mặc dù vậy, vẫn có những kĩ
thuật giúp cho kẻ tấn công lấy được thông tin cần thiết trong dữ liệu, thông qua việc kiểm tra
tính đúng sai của các câu truy vấn con. Ví dụ, lấy pass của một admin có thể kiểm tra kí tự
đầu tiên có phải là kí tự a. Nếu đúng kiểm tra tiếp kí tự thứ 2 cho đến hết.
- XPATH injection: Đây là cách tấn công vào các ứng dụng sử dụng các văn bản XML. Xpath
là cách để xác định chính xác đến một item trong XML document đó. Để truy vấn đền các
phần tử này phải thông qua Xquery. Qua đó, kẻ tấn công có thể chèn các đoạn Xquery vòa
trong giá trị đầu vào (tương tự SQL injection)
2.2.2. XSS
XSS là một kĩ thuật được Hacker sử dụng cố gắng bắt một Website hiển thị một đoạn mã đôc
hại. Đoạn mã đó sẽ được thực thi ở trên trình duyệt web của người dùng. Hay hiểu theo một cách
chính xác hơn, XSS là một loại lỗ hổng máy tính trên ứng dụng web cho phép kẻ xấu hacker có
thể chèn những đoạn client-script (đoạn mã được thực thi trên trình duyệt của người dùng) độc
hại vào trong một trang web. Trang web này sau đó sẽ được người khác truy cập, và đoạn mã
độc sẽ được thực hiện tại trình duyệt của người dùng.
Một người dùng (client) khi truy nhập vào một website thông qua trình duyệt web của mình,
sẽ gửi một http request đến server chạy ứng dụng cho website đó. Server sau khi nhận được
request sẽ xử lý và gửi lại về phía client một http response. Kết quả trả lại bao gồm header để
quản lý thông tin, mã html của trang web đã được tạo ra theo yêu cầu, các file style css, các đoạn
thực thi ajax, javascript, các hình ảnh, video… Trình duyệt web của người dùng khi nhận được
những thông tin này sẽ hiển thị cho người dùng các thông tin về website đó. Đồng thời, trong quá
trình người dùng thao tác trên trình duyệt, một số đoạn mã client-script (ajax, javascript) cũng
được thực thi. Do đó, nếu như trong response có chứa những đoạn mã client- script độc hại, thì
người dùng sẽ vô tình thực thi những đoạn mã đó. Các đoạn mã này có thể gây ra nhiều tác hại
như người dùng bị ăn trộm cookies, người dùng bị mất tài khoản hoặc mật khẩu, người dùng
thực thi một worm
Có ba cách thông thường để chèn một đoạn mã client-script vào nội dung của một website:
7
- Người quản lý website đó chèn đoạn mã vào nhằm mục đích xử lý ứng dụng thông thường.
- Nội dung của website trong quá trình response bị thay đổi do tồn lại những lỗ hổng an ninh
mạng hay trong hệ điều hành,.
- Website tồn tại lỗ hổng XSS và bị khai thác. Phần tiếp theo sẽ trình bày cụ thể hơn về việc
khai thác theo ba loại khác nhau của XSS
2.2.3. DoS
Một cách tấn công phổ biến trên mạng là DoS. Đây là phương thức tấn công từ chối dịch vụ
nhằm mục đích khiến cho một ứng dụng hoặc một dịch vụ không thể thực hiện các yêu cầu của
người dùng hợp lệ. Có rất nhiều cách có thể làm một ứng dụng hoặc một dịch vụ ngừng phục vụ
người dùng. Đó có thể xuất phát từ kiến trúc phần cứng, cấu hình mạng, ứng dụng phần mềm
chạy trên server, máy cung cấp dịch vụ. Cụ thể về cách tấn công này, nhóm sẽ trình bày trong
phần 3 tiếp sau đây.
2.2.4. Mã hóa không đúng cách
Trong phần trước, bài toán án toàn thông tin có đề cập đến các vấn đề về chống chối bỏ, hay
xác thực. Để đảm bảo được các vấn đề này đều cần phải dùng đến việc mã hóa. Tuy nhiên nếu
như mã hóa không đúng cách, hoặc sử dụng phương thức mã hóa có lỗ hổng có thể tạo thành lỗ
hổng để kẻ xấu lợi dụng.
Ví dụ như trong ứng dụng web, tại form nhập username, password. Nếu đăng nhập chỉ dựa
vào API mà thông tin password được truyền đi trên mạng bằng plantext (dạng không mã hóa) thì
rất có thẻ user đó sẽ bị lộ mật khẩu (do đường link API lưu lại trong history của browser). Tương
tự như vậy, nếu như mật khẩu chỉ được mã hóa bằng cách đơn giản, hai chiều như Base64 chẳng
hạn. Kẻ xấu hoàn toàn có thể nhận biết được dấu hiệu của mã hóa base64 chỉ bằng việc nhìn vào
đoạn mã, giải mã nó và lấy được thông tin cần thiết.
Một ví dụ khác của mã hóa không đúng cách đó chính là Flick API, ứng dụng chia sẻ ảnh của
Yahoo rất nổi tiếng. Flick đã từng bị tấn công do kẻ tấn công đã biết cách chèn được các đoạn
xác thực giả vào đoạn giá trị được mã hóa bằng hàm mã hóa khối. Qua đó thay đổi được thông
tin xác thực mà không càn phải biết nội dung của chuỗi kí tự bí mật (tấn công năm 2010)
2.2.5. Quản lý session không đúng cách
Quản lý session là một bài toán phổ biến trong các ứng dụng web trong hệ phân tán. HTTP là
một stateless protocol (giao thức truyền thôn xử lý từng yêu cầu như là một giao dịch độc lập.
Quá trình xử lý yêu cầu này không phụ thuộc vào các yêu cầu trước). Do đó, một server có thể
xử lý một chuỗi các yêu cầu từ cùng một người dùng. Để quản lý truy nhập của từng người dùng,
server đưa ra khái niệm session cho họ. Mỗi người dùng tương ứng với một sessionID xác định.
Mỗi session cũng có thời gian sống của nó. SessionId và thời gian sống của session phụ thuộc và
cấu hình của hệ thống, cài đặt trên server. Do đó việc cấu hình và cài đặt session system trên
server không hợp lý có thể tạo thành điểm yếu có kẻ xấu lợi dụng
8
Lấy một ví dụ thực tế cho các trang web được lập trình bằng ASP.NET. Mỗi một user có một
session và sessionID nhất định. Tuy nhiên, ASP.NET có cớ chế quản lý sessionID dựa trên
cookie. Nếu như người dùng truy nhập vào hệ thống mà trong cookies đã có sessionID thì hệ
thống sẽ dùng sessionID đó luôn (kể cả khi sessionID của session đã hết thời gian sống). Nếu
như cookies chưa có sessionID, hệ thống cấp một sessionId mới. Trong thực tế, kẻ gian có thể lợi
dụng lấy được sessionID trong một máy dùng chung, lưu trữ lại tại một máy khác. Khi có một
người dùng khác sử dụng máy dùng chung này đăng nhập vào hệ thống thì người dùng đó sẽ
dùng sessionID đã được sao lưu kia. Kẻ xấu có thể truy cập vào hệ thống thông qua sessionID đó
với tư cách của người dùng bị hại. Kịch bản này đã từng rất phổ biến trong các hệ thống ngân
hàng năm 2010.
Như vậy, có thể thấy, trong một hệ phân tán, tiềm ẩn rất nhiều các điểm yếu cũng như các mối
đe dọa nếu như không được thiết kế và cài đặt một cách cẩn thận. Thông qua các điểm yếu, các
mối đe dọa đó, kẻ xấu hoàn toàn có thể tấn công nhằm phá hoại hệ thống. Với mỗi loại đe dọa
khác nhau, kẻ xấu có thể thực hiện tấn công theo nhiều cách khác nhau. Trong khuôn khổ của bài
tiểu luận, nhóm thực hiện không tham vọng trình bày hết tất cả các loại hình tấn công vào một hệ
phân tán. Nhóm thực hiện sẽ trình bày về loại hình tấn công phổ biến trong những nằm gần đây
trên mạng là tấn công từ chối dịch vụ DoS. Đây cũng là loại hình tấn công khó phòng chống
khiến nhiều nhà quản trị, thiết kế và xây dựng các hệ thống phân tán phải đau đầu.
3. Từ chối dịch vụ DoS.
3.1. Tổng quan về tấn công từ chối dịch vụ
Tấn công từ chối dịch vụ còn được biết đến với cái tên là DoS (Denial of Service Attack).
Đây là một loại tấn công tiêu tốn tài nguyên của mạng (network) host (server) khiến cho mạng
này từ chối dịch vụ đối với người dùng hợp pháp. Tài nguyên ở đây có thể hiểu là băng thông
của mạng, bộ nhớ, thời gian xử lý trên CPU. Bản chất của loại tấn công này nằm ở việc kẻ tấn
công sẽ tìm cách chiếm dụng một lượng lớn tài nguyên trên server làm cho server có thể nhanh
chóng bị ngừng hoạt động, đổ vỡ hoặc khởi động lại. Từ đó, server không thể nào đáp ứng các
yêu cầu khác của những người dùng hợp lệ.
9
Hình 1: Phân loại tấn công từ chối dịch vụ theo kiểu tấn công
Trên thực tế tồn tại nhiều cách thức tấn công từ chối dịch vụ khác nhau với nhiều mức độ ảnh
hưởng khác nhau. Trong quá trình tìm hiểu, người thực hiện đã tiếp cận vấn đề dựa trên hai cách
phân loại khác nhau: phân loại theo kiểu tấn công và phân loại theo mục đích tấn công. Hình 1 ở
trên thể hiện cách phân loại theo kiểu tấn công. Ở đó, ngoài DoS, DDoS (Distributed denial of
serivce attack) và DRDoS (Distributed Reflected Denial of Service Attack) là hai kiểu tấn công
cần được tìm hiểu
DDoS là kiểu tấn công từ chối dịch vụ phân tán. Ở đó, kẻ tấn công điều khiển hơn một hệ
thống tấn công vào server cùng một lúc. Qua đó, hiệu quả của cuộc tấn công được nâng cao lên
rất nhiều. DRDoS là kiểu tấn công phân tán sử dụng phương pháp ánh xạ. Trong kiểu tấn công
này, những máy tính bị chiếm quyền điều khiển không trực tiếp gửi yêu cầu, gửi các gói tín đến
server một cách trực tiếp. Các máy tính đó sẽ lợi dụng cơ chế request- response của một số giao
thức trên mạng để thực hiện cuộc tấn công. Ở đó, các máy tính bị chiếm quyền điều khiển sẽ gửi
các gói tin đến các reflectors (dns servers, một server bất kì khác) với địa chỉ IP nguồn trong các
gói tin là địa chỉ IP của đối tượng bị tấn công. Các reflectors sẽ xử lý, trả lời các gói tin đó và gửi
cho đối tượng bị tấn công. Như vậy reflectors vô tình đã đóng vai trò tấn công.
Phân loại theo mục đích tấn công bao gồm flood attack và software attack được thể hiện trong
Hình 2.
10
Hình 2: Phân loại tấn công từ chối dịch vụ theo mục đích tấn công
Flood attack là loại tấn công theo kiểu thác lũ. Trong đó, kẻ tấn công dựa trên các giao thức
mạng để gửi một lượng lớn các gói tin không hợp lệ đến đối tượng bị tấn công. Số lượng gói tin
này nhiều đến mức khiến cho đối tượng tấn công không còn tài nguyên dư thừa để cung cấp dịch
vụ cho người dùng hợp lệ. Software attack lại tấn công và chính hệ thống của đối tượng bị tấn
công. Qua đó, kẻ tấn công tìm cách gửi các gói tin không tuân theo giao thức mạng khiến cho hệ
thống bị đổ vỡ, tê liệt do gặp phải lỗi khi xử lý các gói tin này. Khi đó, đối tượng tấn công không
thể phục vụ bất cứ một người dùng nào cho đến khi được khởi động lại.
3.2. Một số phương pháp phòng chống và giảm thiểu
3.2.1. Dò vết IP
3.2.1.1. Tổng quan về dò vết IP
Dò vết IP là một trong những phương pháp nhằn hạn chế, giảm thiểu tấn công từ chối dịch vụ.
Tư tưởng chủ đạo của phương pháp này là sử dụng một biện pháp nào đó để lần ra được địa chỉ
(IP), vị trí, cũng như con đường thực hiện của kẻ tấn công. Có nhiều phương pháp dò vết kẻ tấn
công được trình bày trong [8] như Ingress filtering, Link Testing, Logging, ICMP traceback, và
packet marking. Mỗi một phương pháp có những ưu điểm, hạn chế cũng như tình huống áp dụng
riêng. Trong khuôn khổ giới hạn của tiểu luận, nhóm xin trình bày phương pháp dò vết IP
PACKET MARKING.
Packet marking là phương pháp dò vết cuộc tấn công DoS bằng cách ghi thông tin về đường
đi của gói tin lên chính gói tin đó. Thông qua đó, đối tượng tấn công có thể xác định được gần
đúng địa chỉ router mà gói tin đã đi qua (đường tấn công). Thông tin này, cuối cùng có thể chỉ ra
được nguồn gốc của các gói tin xấu xuất phát từ đâu. Qua đó, phát hiện được kẻ tấn công.
Phương pháp này xét một cách tổng quát, không yêu cầu sự tương tác chặt chẽ giữa các nhà cung
cấp dịch vụ mạng (ISP), không yêu cầu thông tin về cấu trúc mạng (network topology) như một
số phương pháp đề cập phía trên [8]. Bên cạnh đó, packet marking còn hỗ trợ dò vết kể cả khi
11
cuộc tấn công đã kết thúc, dò vết đa tấn công. Để hiểu rõ hơn về phương pháp này, cần phải hiểu
rõ một số các khái niệm sau:
- V(Victim): nạn nhân bị tấn công
- A
i
(Attackers): kẻ tấn công. Kẻ tấn công có thể sử dụng nhiều máy (node mạng) tham gia vào
cuộc tấn công như hình 3 ở dưới.
- R
i
(Router): một node trong mạng
- Attack path: Đường tấn công (đường chấm đứt trong hình 3 ở dưới)
Hình 3: Minh họa các khái niệm trong packet marking
Phương pháp packet marking, được chia làm hai bước. Bước 1, khi gói tin (packet) được
truyền qua một router bất kì, router sẽ đánh dấu thông tin của mình vào gói tin đó. Đây còn gọi là
quá trình đánh dấu lên gói tin (Marking procedure). Bước 2, được thực hiện khi có cuộc tấn công
xảy ra. Nạn nhân sẽ dựa vào thông tin được đánh dấu trong các gói tin nhận được, để tính toán ra
con đường tấn công cũng như vị trí của kẻ tấn công. Quá trình này còn gọi là quá trình tái dựng
đường tấn công (Reconstruction procedure). Vấn đề đặt ra là thông tin nào được ghi vào trong
gói tin, router nào sẽ đánh dấu thông tin của mình vào gói tin, việc xây dựng lại đường tấn công
được thực hiện như thế nào? Dưới đây, nhóm sẽ trình bày cụ thể hơn về một số giải thuật đánh
dấu và và tại dựng đường tấn công đã được đề suất.
3.2.1.2. Node append
Đây là phương pháp đánh dấu đơn giản nhất. Mỗi khi router R nhận một gói tin gửi tới, R sẽ
đính thêm địa chỉ IP của mình vào gói tin. Như vậy mỗi gói tin khi tới điểm nhận, sẽ chứa một
danh sách lưu lại địa chỉ IP của các router mà nó đi qua. Khi nạn nhân phát hiện cuộc tấn công
DoS, chỉ cần kiểm tra danh sách router trong mỗi gói tin là đã có thể xây dựng lại được đường
tấn công.
Tuy nhiên đây chỉ là một phương pháp lý tưởng nhưng không khả thi do độ dài đường đi của
mỗi gói tin là không biết trước. Do đó không gian lưu trữ địa chỉ IP ở mỗi gói tin có thể không
đủ. Việc thêm thông tin vào các gói tin như trên cũng khiến cho kích thước gói tin trở nên lớn,
phát sinh thêm lưu lượng mạng, ảnh hưởng xấu đến các dịch vụ khác trên mạng.
12
3.2.1.3. Node sampling
Để khắc phục hạn chế của node append, tại thời điểm router R nhận được gói tin, không phải
lúc nào R cũng đính thêm địa chỉ IP của mình vào gói tin, mà chỉ ghi thông tin của mình với một
xác suất p nào đó. Ngoài ra, địa chỉ IP cũng không phải được đính vào cuối danh sách như trên,
mà sẽ được ghi đè lên địa chỉ IP của router trước đó. Chúng ta tạm gọi đây là trường node trong
phần header của một gói tin. Người bị tấn công cần nhận được một số lượng gói tin đủ lớn để
xây dựng lại được đường tấn công thông qua việc sưu tập đủ tất cả các địa chỉ IP của các router
mà các gói tin đã đi qua(dựa trên phương pháp xác suất – nghịch lý birthday).
Hình 4: Minh họa marking procedure trong phương pháp node sampling với xác suất p=0.51. Biến
ngẫu nhiên x=0.2 < p, ghi địa chỉ của R2 vào trường node, đè lên giá trị trước đó là R7.
Theo [8] đánh giá, phương pháp này do cần phải thu thập số lượng gói tin đủ lớn nên quá
trình tái dựng đường tấn công là một quá trình rất chậm. Bên cạnh đó, nếu có nhiều kẻ tấn công,
thì việc tái dựng đường đi cũng trở nên khó khăn và thiếu chính xác hơn. Tuy nhiên, đây là một
phương pháp đáng được xem xét và cải tiến do việc chiếm ít không gian trong gói tin (4bytes với
mọi độ dài của đường đi)
3.2.1.4. Edge sampling
Phương pháp edge sampling được xây dựng nhằm khắc phục nhược điểm tốn kém thời gian
lâu trong việc xây dựng lại đường tấn công của node sampling. Ở đó, phần thêm vào mỗi gói tin
không phải địa chỉ của một node nữa mà bao gồm địa chỉ đầu (start), địa chỉ cuối(end) của một
cạnh trong đường tấn công và một trường distance để lưu khoảng cách từ router đánh dấu đến
nạn nhân.
13
Hình 5: Minh họa marking procedure trong phương pháp edge sampling với xác suất p=0.51.
(a)Tại R2, biến ngẫu nhiên x=0.4 <p, ghi giá trị R2 vào start. (b)Tại R2, x=0.6 >p, ghi giá trị R2 vào
end (c)Tại R2, biến ngẫu nhiên x=0.73 > p,không ghi giá trị mới mà chỉ tăng distance từ 1 lên 2.
Giải thuật đánh dấu, xây dựng lại đường tấn công được trình bày bằng đọa giả mã như sau:
Marking procedure at router
for each packet w
let x be a random number from [0 1)
if x < p then
write R into w.start and 0 into
w.distance
else
if w.distance = 0 then
write R into w.end
increment w.distance
Path reconstruction procedure at victim
Let G be a tree with root v
Let edges in G be tuples (start,end,distance)
for each packet w from attacker
if w.distance = 0 then
insert edge (w.start,v,0) into G
else
insert edge (w.start,w.end,w.distance) into G
remove any edge (x,y,d) with d ≠distance x to v in G
extract path(R
i
…R
j
) by enumerating acyclic paths in G
Theo đó, phương pháp tại dựng đường tấn công như trên không cần phải chờ đợi thống kê số
lượng gói tin đủ lớn, quá trình xây dựng lại con đường đó hoàn toàn có thể được thực hiện ngay
khi nhận được những gói tin đầu tiên của kẻ tấn công(từ thời điểm bắt đầu bị tấn công). Phương
pháp này xây dựng một cây (đồ thị) từ nạn nhân tới kẻ tấn công, do đó có thể áp dụng được cả
với cuộc tấn công mà attackers điều khiển nhiều máy. Đây là một ưu điểm rất đáng chú ý của
phương pháp egde sampling
3.2.1.5. Packet sampling
Tất cả các giải thuật marking đã nếu ở trên, đều phải ghi thêm thông tin vào gói tin. Với Node
append, cần ghi thông tin với kích thước lớn. Node sampling cần ghi thêm 4 bytes cho địa chỉ
của một node, còn edge sampling cần ghi 9bytes (cho bộ start, end, distance). Để áp dụng các
phương pháp này vào thực tế, việc định nghĩa lại header của các gói tin để có chỗ cho thông tin
ghi thêm là rất khó, do header của các gói tin đã tạo thành chuẩn và được nhiều ứng dụng sử
dụng từ nhiều năm nay. Do đó Stefan Savage, David Wetherall, Anna Karlin and Tom Anderson
đã có những đề suất trong [8] trong việc mã hóa (encoding) thông tin ghi thêm này. Từ đó ghi lại
thông tin trong một số trường ít được sử dụng có trong IP header. Các tác giả đề cập đến ba cải
tiến từ edge sampling thông qua các phương pháp:
14
- XOR bit hai địa chỉ IP start và end và phân mảnh các địa chỉ IP nói trên (fragment) nhằm
giảm kích thước
- Thêm thành phần phát hiện lỗi đơn (nhờ giá trị băm).
Trong khuôn khỏ tiêu luận, nhóm sẽ không đi sâu vào giải thích những cải tiến này.
Như vậy, phần 3.2.1 trình bày về phương pháp giảm thiểu tấn công bằng cách truy tìm dấu vết
của kẻ tân công. Thông qua phương pháp này nhằm chấm dứt sớm cuộc tấn công, răn đe những
kẻ xấu không dám thực hiện tấn công vì khả năng có thể bị phát hiện cao. Tiếp theo, phần 3.2.2
sẽ trình bày phương pháp phát hiện sớm, hạn chế tác hại của cuộc tấn công. Đó là phương pháp
giảm thiểu tác hại của loại hình tấn công TCP/SYN flood attack – loại hình tấn công phổ biến
nhất hiện này.
3.2.2. Giảm thiểu TCP/SYN flood attack bằng phương pháp sử dụng Bloom filter
3.2.2.1. TCP/SYN flood attack
TCP/SYN flood attack là loại tấn công từ chối dịch vụ nhằm vào các host sử dụng giao thức
TCP. Kẻ tấn công lợi dụng cơ chế bắt tay bước khi bắt đầu thiết lập kết nối trong giao thức TCP
để thực hiện tấn công. Hình 6a miêu tả quá trình bắt tay ba bước bao gồm:
- Client A gửi một SYN tới server B yêu cầu kết nối (với sequence number là một giá trị ngẫu
nhiên x).
- Server trả lời lại client bằng cách gửi một SYN-ACK với acknowledgment là x+1 và
sequence number là một số ngẫu nhiên y khác
- Cuối cùng, client send ACK lại cho server với sequence number là x+1 và acknowledgement
là y+1. Bắt đầu truyền dữ liệu.
Hình 6: Mô tả quá trình tấn công TCP/SYN flood
Cụ thể hơn, chúng ta có thể tóm tắt cơ chế hoạt động của TCP thông qua một vài dòng sau:
15
- TCP quản lý hoạt động thông qua một tập các trạng thái kết nôi. Tại một trạng thái nhất định,
dựa trên thông điệp nhận được từ mạng hoặc dựa trên yêu cầu nhận được từ người sử dụng,
TCP sẽ quyết định việc chuyển trạng thái đưa ra các hành động tương ứng.
- Các trạng thái và thông tin của một kết nối được lưu trữ trong TCBs, là một tập các cấu trúc
dữ liệu TCB (tranmission control block). Mọi kết nối đều được lưu giữ thông tin trong một
TCB.
- Các hoạt động của TCP sẽ được xác định nhờ các cờ trạng thái nằm trong TCB.
Một vài điểm cần chú ý trong cơ chế quản lý này đó là:
- Mỗi khi nhận được một SYN hay gửi 1 SYN thì TCP sẽ tạo ra một TCB tương ứng cho kết
nối đó.
- TCB chỉ được xóa đi khi kết nối được đóng lại
- Trong thực tế, để tránh hiện tượng thắt cổ chai trong việc gửi nhận các gói tin, TCP sẽ có cơ
chế điều phối hoạt động thông qua việc hạn chế tài nguyên cung cấp cho bộ đệm các gói tin
gửi nhận. Nghĩa là TCP sẽ hạn chế kích thước của bộ đệm chứa các gói tin gửi nhận thông
qua backlog (việc tồn đọng). Khi backlog đầy, TCP sẽ không thao tác với các gói tin gửi đến
và gửi đi nữa cho đến khi bộ đệm được giải phóng (tự reset hay một thao tác được thực hiện).
Dựa vào cơ chế bắt tay ba bước và quá trình xử lý nêu trên, kẻ xấu (attacker) có thể tiến hành tấn
công theo cơ chế mô tả trong Hình 6b:
- Attacker gửi thật nhiều các gói tin SYN yêu cầu kết nối đến server.
- Với mối một gói tin SYN, server sẽ tạo ra một TCB để chứa thông tin về kết nối và gửi lại
một SYN/ACK để thực hiện quá trình bắt tay ba bước, chờ đợi ACK từ phía yêu cầu kết nối
để hoàn thành quá trình thiết lập kết nối
- Attacker do muốn ở server bị đầy backlog, không thể sản sinh ra tiếp các TCB, nên sẽ không
gửi lại ACK mà sẽ tiếp tục gửi các gói tin SYN. Một cách khác là attacker khi gửi các goi stin
SYN sẽ giả mạo địa chỉ IP để các gói tin SYN/ACK mà server gửi đi sẽ đến một địa chỉ các
không phải là attacker. Nghiễm nhiên, các gói tin SYN/ACK này sẽ không được trả lời.
- Khi server bị tấn công và backlog đầy, các yêu cầu kết nối hợp lệ sẽ bị từ chối, không được
đáp ứng.
3.2.2.2. Phương pháp giảm thiểu tác hại sử dụng BloomFilter
Bloom filter[11] là một cấu trúc dữ liệu sử dụng để biễu diễn một tập hợp với chi phí về
không gian nhớ là hằng số. Bloom filter cũng cho phép xác định một phần tử có thuộc về tập hợp
đó hay không với thời gian tính toán không phụ thuộc vào số lượng phần tử trong tập hợp.
Counter bloom filter là cấu trúc dữ liệu mở rộng từ bloom filter. Trong đó, counter bloom filter
không chỉ cho phép xác định một phần tử có nằm trong tập hợp đang xét hay không mà còn cho
phép xác định số lượng phần tử có cùng giá trị với phần tử đang xét trong tập hợp. Cấu trúc dữ
liệu bloom filter được ứng dụng trong nhiều lĩnh vực, đặc biệt trong các lĩnh vực nghiên cứu về
mạng internet. Một trong số những ứng dụng đó chính là phương pháp phòng chống và giảm
thiểu tác hại của tấn công TCP/SYN flood.
16
Phương pháp này là một cải tiến từ phương pháp SFD (SYN Flooding Detection) nhờ sử dụng
cấu trúc dữ liệu bloom filter. Trong tiểu luận này, tạm gọi phương pháp là SFD-BF. SFD-BF
được công bố [9] và thực nghiệm [10] vào năm 2007 bởi nhóm tác giả Changhua Sun, Jindou
Fan, Bin Liu. Ý tưởng chính của SFD-BF đó là dựa vào cơ chế nếu một gói tin SYN không được
phản hồi sau một khoảng thời gian định trước, người dùng hợp lệ sẽ gửi lại gói SYN đó còn kẻ
tấn công thì không. Do đó, các tác giả của SFD-BF đề xuất ra một mô hình sử dụng ba cấu trúc
dữ liệu counter bloom filter để lưu trữ thông tin.
- BF1: ghi lại thông tin (IP nguồn, IP đích, port nguồn, port đích) của các gói SYN lần đầu kết
nối tới server. Bộ 4 thông tin này gọi là một item
- BF2: ghi lại thông tin của các gói SYN từ địa chỉ đã được thiết lập kết nối, hoàn thành quá
trình bắt tay ba bước
- BF3: ghi lại thông tin của các gói SYN khác.
Cơ chế giảm thiểu tác hại của cuộc tấn công được thực hiện khi phát hiện có tấn công. Khi
nhận được một gói SYN, các thông tin của gói SYN này sẽ được trích xuất và được tìm kiếm
trong cả ba bộ bloom filter xem có thuộc về tập hợp nào hay không:
- Nếu như item này chưa có trong bất kì BF nào thì có nghĩa rằng đây là kết nối mới. Gói SYN
sẽ bị xóa bỏ và thêm vào BF-1.
- Nếu như item này đã có trong BF-1, thì đây là gói SYN thứ hai. Gói SYN sẽ được chuyển
qua bộ giảm thiểu. Item tương ứng với gói SYN sẽ được chuyển từ BF-1 sang BF-3.
- Nếu như item trong BF-2 nghĩa là các kết nối đã được thiết lập. Gói SYN được truyền qua
- Nếu như item có trong BF-3, thì gói SYN có khả năng được truyền qua với xác suất p = 1/n.
Trong đó n là số lần item này được thêm vào BF-3. Điều này đảm bảo xác suất vượt qua càng
nhỏ nếu như số lần gói SYN được gửi tới càng lớn.
17
Tài liệu tham khảo
Trong đó [4][5] là sách
[1][7][8][9][10][11] là bài báo khoa học
[1] Bharat Bhargava and Leszek Lilien, “Vulnerabilities and Threats in Distributed Systems”,
Conference: Distributed Computing and Internet Technology - ICDCIT, pp. 146-157, 2004,
DOI: 10.1007/978-3-540-30555-2_18
[2] Bài giảng: "Distributed Systems Security", Prof. Steve Wilbur, Room G03, Ext. 1397,
[3] Butler Lampson, "Security", TECS Week 2005, January 2005
[4] Distributed Systems Concepts and Design 5
th
Edition, Copyright © 2012, 2005, 2001, 1994,
1988 Pearson Education, Inc., publishing as Addison-Wesley.
[5] Ihor Kuz, Felix Rauch, Manuel M. T. Chakravarty & Gernot Heiser, "Security in Distributed
Systems" COMP9243 — Week 11 (12s1)
[6] “DISTRIBUTED SYSTEMS SECURITY,Issues, Processes and Solutions” first edittion
published 2009 © 2009 John Wiley & Sons Ltd
[7] Memòria del projecte, “VULNERABILITY ASSESSMENT OF DISTRIBUTED
SYSTEMS”
[8] Stefan Savage, David Wetherall, Anna Karlin and Tom Anderson, “Practical Network
Support for IP Traceback” , ACM SIGCOMM Computer Communication Review, Volume 30
Issue 4, October 2000, Pages 295-306.
[9] Changhua Sun, Jindou Fan, Lei Shi, Bin Liu, “A Novel Router-based Scheme to Mitigate
SYN Flooding DDoS Attacks”, in Proc. IEEE INFOCOM (Poster), Anchorage, Alaska, USA,
May 6-12, 2007.
[10] Changhua Sun, Jindou Fan, Bin Liu, “A Robust Scheme to Detect SYN Flooding Attacks”,
in Proc. International Conference on Communications and Networking in China (ChinaCom),
Shanghai, China, August 22-24, 2007.
[11] Wikipedia, "Bloom filter", URL: />18