Trong khi xây dựng kiến trúc WebSOS, các tác giả giả định rằng kiến trúc
WebSOS là ổn định và chắc chắn, nghĩa là các node trong mạng bao phủ WebSOS đều đáng tin cậy, và không bị chiếm dụng bởi kẻ tấn công, và kẻ tấn công chỉ có thể tấn công vào hệ thống từ bên ngoài mạng bao phủ.
Để nghiên cứu và cải thiện kiến trúc WebSOS, ta giả định trường hợp một, hoặc một số node trong mạng bao phủ WebSOS bị kẻ tấn công chiếm dụng. Từ node bị chiếm dụng này, kẻ tấn công có thể thực hiện một trong ba hình thức tấn công sau:
- Tấn công toàn vẹn dữ liệu: Tấn công toàn vẹn dữ liệu có thể trên kênh request, bằng cách hủy bỏ gói tin hoặc kênh truyền đã thiết lập. Khi node bị chiếm dụng hủy gói tin trên kênh request, người dùng sẽ nhận thấy rằng mình không thể kết nối đến server. Khi kẻ node bị chiếm dụng tấn công toàn vẹn dữ liệu trên kênh truyền đã thiết lập, chúng ta có thể phát hiện ra kiểu tấn công này thông qua giải
pháp cải tiến, hoặc ngay ứng dụng phía người dùng có thể nhận thấy được thông qua dữ liệu gửi về sai, hoặc qua việc xác thực… để có thể chuyển sang SOAP khác.
- Tấn công hủy gói tin: tấn công hủy các gói thiết lập kết nối khiến người dùng không thể kết nối đến server qua node đó. Phân tích sâu hơn trường hợp này, ta thấy trong kênh truyền đã được thiết lập, kẻ tấn công có thể hủy bỏ các gói tin được truyền giữa người dùng hợp lệ và server. Tương tự kiểu tấn công toàn vẹn dữ liệu, chúng ta có thể phát hiện kiểu tấn công này thông qua giải pháp cải tiến, hoặc ứng dụng người dùng cũng có thể nhận thấy qua việc kết nối bị ngừng, hoặc qua thông lượng thấp của ứng dụng.
- Tấn công gửi tràn gói tin: Một node bị chiếm dụng có thể tham gia tấn công gửi tràn đến server đích thông qua việc gửi tràn gói tin đến Servlet.
4.4.2 Đề xuất cải tiến
Chúng ta sẽ tập trung vào kiểu tấn công thứ nhất và thứ hai: tấn công hủy gói tin, và đưa ra giải pháp bằng cách thiết lập một cơ chế nhận diện kiểu tấn công này, và sau đó thiết lập cho proxylet của người dùng thực hiện thay đổi SOAP để kết nối đến server qua con đường định tuyến khác không thông qua node bị chiếm dụng. Cơ chế này được thực hiện theo ý tưởng bài báo [12] bằng cách gửi một gói tin thăm dò định kì đến server đích. Áp dụng vào kiến trúc WebSOS, chúng ta sẽ cho proxylet bên người dùng thực hiện gửi một gói tin thăm dò định kì đến server. Nếu server trả lời gói tin thăm dò đó sai quy định đã xác định trước, thì chúng ta kết luận là trong con đường định tuyến có một node đã bị chiếm dụng và thực hiện tấn công hủy gói tin, từ đó ta sẽ cho người dùng tự động thay đổi SOAP để đi qua con đường định tuyến khác. Cơ chế này là trong suốt với người dùng và người dùng sẽ không phải thực hiện xác thực hợp lệ qua SOAP mới.
Kẻ tấn công cũng có thể chỉ chặn các yêu cầu hợp lệ, ngoài ra các gói tin thăm dò và gói tin trả lời thăm dò vẫn được truyền qua node bị chiếm dụng. Để khắc phục
trường hợp này, cơ chế cho phép người dùng khi một số các yêu cầu nhất định không có trả lời từ phía server, thì proxylet cũng tự động kết nối đến một proxy khác, cho phép người dùng thiết lập kết nối bình thường, không đi qua node bị chiếm dụng nữa.
Đề xuất cải tiến có thể được thể hiện dưới dạng giả mã như sau:
Thiết lập biến số lượng thăm dò không được trả lời đúng probe=0; Thiết lập biến số lượng kết nối hỏng numD= 0;
Thiết lập số lượng kết nối thành công numS= 0; Thiết lập biến kiểm tra kết nối hỏng drop=false;
(*) Nếu probe>3, thực hiện thay đổi SOAP cho client và thiết lập lại giá trị các biến về mặc định.
Nếu numD>= 3 , thực hiện thay đổi SOAP cho client và thiết lập lại các biến về mặc định.
Gửi dữ liệu request.
Gửi dữ liệu probeRequest sau một khoảng thời gian random và tăng probe lên 1. Kiểm tra nếu drop==true, tăng numD lên 1.
Đặt giá trị drop=true.
Nếu số lượng kết nối thành công numS>7, gán numS= 0 và numD= 0. Nếu nhận được dữ liệu response, tăng numS lên 1, và đặt lại drop=false.
Nếu dữ liệu response là probeResponse, gán probe= 0 và numD=0; Quay lại (*)
- Đề xuất cải tiến thực hiện tại Server đích
Nếu nhận được request là probeRequest, xử lý và gửi lại probeResponse
Như vậy theo giả mã, proxylet chạy trên client sẽ kiểm tra nếu cứ 10 lần gửi request mà có tới 3 lần không nhận được dữ liệu response thì proxylet xem như có hành động tấn công hủy gói tin và tự động thay đổi SOAP để kết nối đến Server.
Ngoài ra, sau một khoảng thời gian random, một gói tin probeRequest được proxylet tại client gửi lên Server đích. Nếu như client không nhận được gói
probeResponse phù hợp, nó sẽ tăng một giá trị numD. Khi numD >=3, proxylet sẽ thực hiện thay đổi SOAP cho client, và gán lại numD=0, tiếp tục quá trình. Còn nếu nhận được gói tin probeResponse phù hợp, proxylet ghi nhận không có tấn công hủy gói tin, các biến được reset, quá trình được thực hiện lại từ đầu.