Kiến trúc chi tiết khối đội vận hành mô hình đề xuất

Một phần của tài liệu Nghiên cứu và phát triển nền tảng tổ chức thi tấn công phòng thủ máy tính efiens giai đoạn 1 thiết kế hệ thống và xây dựng module giao tiếp giữa các users vaf server, thành phần kiểm tra dịch vụ và tổng hợp trạng thái dịch vụ (Trang 33 - 39)

8 Tổng kết

4.3 Kiến trúc chi tiết khối đội vận hành mô hình đề xuất

Để có thể kiểm tra dịch vụ của các đội chơi thì thành phần Scriptbot cũng cần kết nối tới mạng riêng ảo do thành phần VPNServer thiết lập. Và nó cũng là một trong các đối tượng được đổi địa chỉ IP trong mạng riêng ảo. Bốn chức năng chính của Scriptbot được liệt kê sau đây.

• Kiểm tra trạng thái dịch vụ máy chủ của các đội chơi: trong một vòng đấu Scriptbot sẽ gửi yêu cầu tới dịch vụ của các đội giống như một đội tấn công bình thường, để kiểm tra xem rằng dịch vụ này có hoạt động hay không, sau đó lưu trữ trạng thái của dịch vụ này vào bộ nhớ.

• Gửi dữ liệu về trạng thái các dịch vụ tới thành phần tổng hợp trạng thái: Cuối mỗi tick Scriptbot sẽ gửi các trạng thái lưu trữ dịch vụ của các đội về thành phần tổng hợp để phục vụ cho việc đánh giá là dịch vụ này có hoạt động hay không trong vòng đó.

• Nhận lệnh hoạt động từ thành phần tổng hợp trạng thái: Scriptbot nhận thông tin điều khiển từ thành phần tổng hợp trạng thái để kiểm tra lại một số dịch vụ của các đội có dấu hiệu đáng ngờ.

• Phát hiện gian lận khi các đội chơi cố tình chặn kết nối từ đội chơi khác.

Với chức năng phát hiện gian lận của các đội chơi, đây là một sự tổng hợp kết quả kiểm tra của các Scriptbot sau quá trình đổi địa chỉ IP trong mạng riêng ảo mỗi vài vòng đấu. Kịch bản phát phiện gian lận diễn ra như sau.

công thông qua địa chỉ IP. Sau mỗi vài vòng đổi địa chỉ IP các thành phần trong hệ thống địa chỉ IP của đội bị chặn kết nối vừa rồi sẽ được đổi cho một trong các Scriptbot hoạt động. Vì địa chỉ IP này đã bị chặn nên Scriptbot dùng địa chỉ IP để kiểm tra dịch vụ đội chơi gian lận sẽ có kết quả là dịch vụ không hoạt động. Để chắc chắn rằng đây là tình trạng chặn địa chỉ IP thì thành phần Service Status sẽ ra lệnh cho toàn bộ Scriptbot với các địa chỉ IP khác đến kiểm tra đội chơi này. Nếu kết quả trả về từ các Scriptbot là không đồng nhất (hoạt động hoặc không hoạt động) chứng tỏ đội chơi này đã gian lận bằng cách chặn kết nối đội chơi khác.

Service Status

Service Status là thành phần tổng hợp trạng thái dịch vụ của hệ thống. Service Status có hai chức năng chính là tổng hợp kết quả kiểm tra dịch vụ từ các Scriptbot và điều khiển các Scriptbot kiểm tra hoạt động kiểm tra dịch vụ các đội. Thành phần ServiceStatus sẽ hoạt động theo chu kỳ trong một tick. Và nó sẽ bắt đầu ra lệnh cho các Scriptbot kiểm tra, sau khi nhận được lệnh từ Gamebot. Việc nhận lệnh từ Gamebot để đảm bảo rằng các thành phần trong hệ thống gồm: TeamVM, các Combot và các Scriptbot đã đổi địa chỉ IP trong mạng riêng ảo xong và các thành phần đã liên thông lại trong mạng riêng ảo. Thông tin các đội cần kiểm tra sẽ được thành phần ServiceStatus gửi yêu cầu tới thành phần Gamebot để lấy mỗi tick. Các thông tin này sẽ được ServiceStatus phân phát tới các Scriptbot để các Scriptbot kiểm tra. Các thông tin được trả về từ Scriptbot sẽ được thành phần ServiceStatus kiểm tra và tổng hợp lại. Các trường hợp dịch vụ không hoạt động sẽ được thành phần này gửi yêu cầu tới tất cả Scriptbot kiểm tra để phục vụ xác địch gian lận như kịch bản đã được để cập ở phần phía trên. Các kết quả kiểm tra từ các Scriptbot sẽ được ServiceStatus tổng hợp nhiều lần và được gửi về thành phần Ranking vào cuối mỗi tick phục vụ cho việc tính điểm phòng thủ.

ComBot

Combot là thành phần hỗ trợ kiểm soát trận đấu của hệ thống. Thành phần Combot có cấu trúc tương tự với một máy chủ đội chơi TeamVM. Cũng có các dịch vụ chứa các lỗ hổng phần mềm hoạt động trong các môi trường độc lập, các chương trình lưu trữ “flag” cho từng dịch vụ, chương trình cung cấp “flag” cho từng dịch vụ chứa các lỗ hổng và thành phần hỗ trợ đổi địa chỉ IP trong mạng riêng ảo. Thành phần Combot cũng sẽ được kết nối tới mạng riêng ảo. Một Combot sẽ đóng vai trò giống như một máy chủ một đội chơi bình thường - TeamVM. Nhưng Combot sẽ do ban tổ chức quản lý và nó có chức năng giúp ban tổ chức có thể đóng vai một đội chơi tấn công hoặc phòng thủ từ các đội chơi thực sự. Kiểm tra kết nối và tính công bằng trong trận đấu. Số lượng Combot hoạt động trong một vòng đấu có thể thay đổi được dựa vào quyết định của ban tổ chức. Việc thêm Combot vào mạng riêng ảo sẽ tăng số lượng máy chủ các đội chơi có thể tấn công, giúp danh tính các đội chơi được giữ tốt hơn và nó còn giúp cân bằng trận lượng đội chơi khi về cuối trận đấu có một vài đội chơi từ bỏ không kết nối đến mạng riêng ảo nữa. Ngoài ra thành phần Combot là một thành phần có thể áp dụng thêm nhiều chức năng

Chương 4

GameBot

Khối đảm nhiệm các chức năng trung tâm của hệ thống bao gồm. • Ra lệnh thay đổi địa chỉ IP các thành phần

• Tạo và phân phối “flag” cho các đội chơi. • Nhận và kiểm tra “flag” do các đội nộp. • Cung cấp danh sách địa chỉ IP các đội chơi • Điều khiển Service Status qua mỗi tick. • Điểu khiển các ComBot.

• Gửi thông tin các đội nộp “flag” hợp lệ cho khối Ranking để tính điểm.

Gamebot là thành phần trung tâm của trận đấu. Cũng là thành phần cung cấp thông tin cho các đội chơi, điều khiển các thành phần chính và đồng bộ hệ thống trong suốt quá trình thi đấu. Vào mỗi đầu vòng đấu, Gamebot có nhiệm vụ tạo và phân phối các “flag” ứng với từng dịch vụ các đội chơi, Combot và sau đó lưu trữ các “flag” này ở thành phần Database. Trong suốt vòng đấu, Gamebot sẽ cung cấp địa chỉ IP các đối tượng có thể tấn công cho các đội chơi, các đội tượng này gồm các đội chơi khác và các Combot. Ngoài ra trong vòng đấu Gamebot còn là nơi nhận và kiểm tra “flag” do các đội gửi lên trong vòng đấu. Trong thời gian thi đấu, một vòng đấu sẽ được chia thành nhiều tick, đầu mỗi tick thành phần Gamebot sẽ gửi yêu cầu bắt đầu hoạt động tới thành phần ServiceStatus, để thành phần này bắt đầu ra lệnh cho các Scriptbot kiểm tra dịch vụ. Cuối mỗi vòng đấu, Gamebot sẽ có hai nhiệm vụ là: gửi thông tin các đội nộp “flag” đúng về thành phần Ranking để tính điểm tấn công và gửi yêu cầu tới thành phần VPNServer để yêu cầu đổi địa chỉ IP các thành phần trong mạng riêng ảo.

Mặc dù, thành phần ServiceStatus có thể thiết kế để hoạt động một cách tự động nghĩa là ServiceStatus có thể tự động ra lệnh cho các Scriptbot hoạt động mỗi đầu tick mà không cần lệnh bắt đầu hoạt động từ thành phần Gamebot. Tuy nhiên, nếu để ServiceStatus tự lên lịch bắt đầu thì có thể gặp tình trạng lỗi đầu mỗi vòng đấu, khi mà các thành phần được đổi địa chỉ IP trong mạng riêng ảo chưa hoàn thành kết nối lại. Dẫn tới kết quả kiểm tra từ các Scriptbot không chính xác. Chính vì vậy hệ thống được sinh viên thiết kế, gom chung hai nhiệm vụ ra lệnh thay đổi địa chỉ IP các thành phần và ra lệnh thành phần ServiceStatus bắt đầu ra lệnh các Scriptbot kiểm tra mỗi tick về cho thành phần Gamebot. Việc ra lệnh cho thành phần ServiceStatus cho các Scriptbot kiểm tra sẽ được Gamebot thực hiện sau khi kết quả thay đổi địa chỉ IP các thành phần được trả về.

Ranking

Ranking là thành phần tổng hợp điểm số và thông tin các đội chơi dựa vào hai nguồn thông tin gồm: thông tin trả về từ thành phần ServiceStatus là thông tin về trạng thái

các đội chơi theo các tick và thông tin các đội nộp được “flag” của các đội chơi khác được gửi về từ thành phần Gamebot. Các thông tin này đều được Ranking gửi về thành phần Database theo thời gian định kỳ để lưu trữ và cung cấp cho thành phần Scoreboard hiển thị giúp mọi người có thể theo dõi tiến trình trận đấu. Điểm số sẽ được Ranking tính vào mỗi cuối vòng đầu và lúc này thì điểm mới được gửi về thành phần Database.

Mặc dù thành phần này có chức năng tương đối ít và các chức năng này có thể tích hợp vào một trong hai thành phần là ServiceStatus và Gamebot. Tuy nhiên, trong quá trình thiết kế sinh viên nhận thấy rằng hai thành phần kể trên có khả năng sẽ cần khởi động lại trong quá trình hoạt động để sửa lỗi hoặc thêm các thông tin thiết lập trong thời gian đấu. Lúc này nếu thành phần tổng hợp ở trên hai thành phần này sẽ không hoạt động dẫn tới tình trạng mất các gói tin và việc cập nhật tới thành phần Database sẽ bị gián đoạn. Chính vì vậy để đảm bảo tính sẵn sàng của chức năng tổng hợp điểm số, sinh viên đã thiết kế thành phần Ranking chuyên dùng để thực hiện chức năng này.

Database

Database là thành phần lưu trữ dữ liệu của toàn bộ hệ thống bao gồm thông tin của các đội chơi về: tên đội chơi, điểm số theo các vòng, “flag” của các dịch vụ qua các vòng, địa chỉ IP trong mạng riêng ảo trước và sau khi được thay đổi và một số thông tin vận hành của hệ thống như: thời gian của một tick, thời gian bắt đầu thay đổi số lượng tick trong một vòng,...

Thành phần này sẽ bao gồm một cơ sở dữ liệu và một hệ thống API2 để cho phép các thành phần của hệ thống. Mặc dù thiết kế của cơ sở dữ liệu hiện đại cho phép các thành phần có thể kết nối tới cơ sở dữ liệu một các trực tiếp để gia tăng tốc đội xử lý. Nhưng kết nối này lại mang lại quá nhiều rủi ro khi mà các thành phần khi kết nối trực tiếp như vậy có quá nhiều quyền truy cập vào các bảng trong cơ sở dữ liệu. Như vậy nếu một thành phần trong hệ thống bị chiếm quyền kiểm soát thì cơ sở dữ liệu của toàn bộ trận đấu sẽ bị thao túng dựa theo kẻ tấn công. Để giảm thiểu rủi ro này, thành phần Database được thiết kế hỗ trợ lấy thông tin qua hệ thống API, hệ thống API này sẽ cung cấp các luồng lấy thông tin tương ứng với các thành phần của hệ thống dựa trên theo các mã định danh đã được cung cấp cho từng thành phần từ trước khi hệ thống được vận hành. Điều này có thể giảm đi đôi chút về tốc độ nhưng nó mang lại sự an toàn cao hơn cho thành phần giữ những thông tin quan trọng nhất của cả hệ thống.

Scoreboard

Scoreboard là thành phần cung cấp thông tin trận đấu trong suốt quá trình thi đấu thông qua một trang website. Thành phần này sẽ cung cấp thông tin về trận đấu như: số lượng vòng đấu, thời gian hiện tại của trận đấu, thông tin các đội chơi: các dịch vụ đã phòng thủ thành công theo mỗi tick, các đội đã bị tấn công,... . Thành phần Scoreboard sẽ lấy

Chương 4

thông tin một cách định kỳ từ thành phần Database thông qua các API và cập nhật lên website. Đây là thành phần duy nhất trong toàn bộ hệ thống thiết kế mà được phép truy cập từ internet để nhằm phục vụ cho khán giả theo dõi trận đấu. Tuy nhiên để đảm bảo tính an toàn, tránh cho thành phần này bị tấn công. Thành phần này chỉ cung cấp thông tin một chiều, từ bên trong hệ thống ra ngoài thông qua website và không cung cấp các dịch vụ tương tác với dữ liệu được gửi lên từ các khán giả.

5

Một số công cụ phù hợp để phát triển hệ thống

5.1 Docker Container

Docker container là một đơn vị phần mềm tiêu chuẩn, đóng gói mã nguồn và dữ liệu cần thiết để dễ dàng chạy trên nhiều môi trường khác nhau. Docker container image là một ảnh phần mềm, trong đó bao gồm toàn bộ mọi thứ cần thiết có thể để chạy một ứng dụng bao gồm: mã nguồn, môi trường, công cụ, thư viện hệ thống và cấu hình. Khi một docker container image được khởi động, nó sẽ trở thành docker container (tương tự như file thực thi và process). Công nghệ Docker giúp cho các ứng dụng dựa trên nền hệ điều hành Linux có thể chạy được trên môi trường Windows hoặc MacOS. Do đó, Docker đóng một vai trò quan trọng trong công việc cài đặt, triển khai hệ thống cũng như hỗ trợ mạnh mẽ cho quá trình phát triển ứng dụng.

Điểm mạnh của Docker container là cung cấp môi trường hoàn toàn độc lập cho mỗi ứng dụng tương tự như máy ảo, do đó giúp dễ dàng xử lý vấn đề không tương thích môi trường giữa nhiều ứng dụng cùng chạy trên một máy chủ. Tuy cung cấp môi trường độc lập giống với một máy ảo thông thưởng nhưng Docker container sử dụng ít tài nguyên hơn nhiều bởi cơ chế dùng chung phần lõi của hệ điều hành (kernel) giữa máy chủ và container (xem Hình 5.1), trong khi máy ảo phải giả lập lại toàn bộ kernel của hệ điều hành. Đối với máy chủ chạy hệ điều hành Windows hoặc MacOS thì vẫn cần phải giả lập Linux kernel khi sử dụng Docker, do đó Docker chỉ phát huy được hiệu năng tối đa khi chạy trên hệ điều hành Linux.

Việc sử dụng công nghệ Docker sẽ giúp cho quá trình vận hành và tách bạch các ứng dụng trở nên dễ dàng hơn. Cụ thể, mỗi dịch vụ sẽ được chạy trên một Docker container riêng biệt và có bộ nhớ khác nhau. Khi các đội đối thủ khai thác được một dịch vụ thì không có khả năng tác động đến các dịch vụ khác trong cùng một máy chủ. Để dễ dàng quản lý cũng như giao tiếp với các Docker container, sinh viên sử dụng Docker-compose. Việc này sẽ giúp cho các đội chơi dễ dàng hơn khi bật/tắt các dịch vụ, thuận lợi cho việc

Chương 5

Một phần của tài liệu Nghiên cứu và phát triển nền tảng tổ chức thi tấn công phòng thủ máy tính efiens giai đoạn 1 thiết kế hệ thống và xây dựng module giao tiếp giữa các users vaf server, thành phần kiểm tra dịch vụ và tổng hợp trạng thái dịch vụ (Trang 33 - 39)

Tải bản đầy đủ (PDF)

(62 trang)