8 Tổng kết
4.2 Kiến trúc chi tiết khối đội chơi kết nối
Các đội chơi
Dưới đây là cấu trúc của TeamVM máy ảo được đưa về cho các đội vận hành.
• Thành phần hỗ trợ đổi địa chỉ IP - gồm clientVPNChanger: yếu tố giúp máy chủ của một đội chơi đổi địa chỉ IP trong mạng cục bộ mỗi vài vòng.
• flag.bin: một dịch vụ hoạt động theo chu kỳ mỗi vòng gửi yêu cầu tới GameBot để lấy flag mới cho toàn bộ dịch vụ chứa bên máy chủ và lưu trữ trong bộ nhớ của chính nó.
• Các container: chứa các dịch vụ do ban tổ chức đưa ra các TeanVM_challenge_x và một dịch vụ flag_x.bin lấy “flag” tương ứng với container đó từ flag.bin.
• Thành phần hỗ trợ kết nối cho các người chơi.
Thành phần TeamVM là máy ảo chứa gồm các dịch vụ có chứa các lỗ hổng bảo mật do ban tổ chức đưa ra. Các máy ảo này sẽ được đưa về cho các đội chơi để vận hành thông qua các ảnh máy ảo. Để đồng nhất giữa các đội chơi thì các dịch vụ chứa lỗ hổng và các chương trình hỗ trợ trong tất cả các máy ảo khi hoạt động, điểm khác duy nhất của các máy ảo này là các thiết lập định danh của mỗi đội chơi. Dịch vụ chứa các lỗ hổng sẽ là
Chương 4
Một dịch vụ mục miêu có thể có chứa một hoặc một vài lỗ hổng khác nhau. Và sau khi khai thác thành công một dịch vụ, đội tấn công có thể kiểm soát tải nguyên xung quanh dịch vụ này và tìm kiếm “flag” để gửi về ban tổ chức để tính điểm. Để đảm bảo tính độc lập cho mỗi dịch vụ, nghĩa là bất kỳ sự thay đổi của dịch vụ A sẽ không ảnh hưởng đến dịch vụ B trong cùng một máy ảo, thành phần TeamVM thiết kế các dịch vụ mục tiêu hoạt động trong các môi trường độc lập gọi là container. Đội tấn công kiểm soát được dịch vụ A và lấy được “flag” của dịch vụ Trong quá trình thiết kế hệ thống sinh viên nhận ra rằng, nếu lưu trữ “flag” dưới dạng một tệp tin tĩnh bình thường thì đội phòng thủ có thể cố tình xóa nó đi khiến cho các đội chơi cho dù có khai thác được lỗ hổng rồi thì cũng không thể tìm thấy được “flag” nữa. Chính vì vậy sinh viên quyết định lưu trữ nó trong một dịch vụ hoạt động liên tục để bên ngoài các container đó là flag.bin và flag_x.bin bên trong container. Khi một đội chiếm quyền kiểm soát thành công container thì có thể chạy dịch vụ flag_x.bin để nhận “flag” tương ứng từ flag.bin phía bên ngoài container. Về phần flag.bin, sau mỗi vòng flag.bin sẽ gửi yêu cầu tới khối cung cấp “flag” là Game- Bot, đồng thời flag.bin cũng phải xác thực rằng ở vòng trước flag.bin hoạt động một cách liên tục bằng cách chứng minh rằng nó vẫn còn giữ “flag” ở vòng trước (nếu flag.bin bị tắt để chặn không cho các đội chạy flag_x.bin bên trong không nhận được “flag” thì bộ nhớ của dịch vụ này sẽ bị reset và “flag” của vòng trước sẽ mất). Sau khi trải qua bước xác thực thì GameBot mới trả về cho flag.bin các “flag” tương ứng để lưu trữ. Nếu trong một vòng mà flag.bin không xác thực thì đội sẽ bị đánh dấu gian lận và không được thưởng điểm phòng thủ trong vòng này.
Kết nối
Cấu tạo thành phần VPN SERVER gồm hai thành phần nhỏ hơn.
• change_IP: đây là một dịch vụ hoạt động liên tục hỗ trợ việc chuyển đổi địa chỉ IP trong mạng cục bộ.
• connects là phần minh họa cho việc chuyển hướng yêu cầu của các thành phần trong mạng riêng ảo do VPN SERVER thực hiện.
Thành phần VPNServer là thành phần trung tâm hỗ trợ kết nối giữa các máy chủ các đội chơi và các thành phần của hệ thống vào mạng riêng ảo. Thành phần VPNServer sẽ hỗ trợ các máy chủ này kết nối với nhau thông qua việc chuyển hướng các gói tin từ địa chỉ nguồn tới các địa chỉ đích. Ngoài ra thành phần này còn nắm giữ một chức năng quan trọng được đề xuất ở trên đó là đổi địa chỉ IP trong mạng riêng ảo của các thành phần trong hệ thống. Thành phần VPNServer sẽ được nhận lệnh từ một thành phần quản lý trận đấu là Gamebot (sẽ được đề cập ở các phần tiếp theo) vào mỗi cuối vài vòng đấu. Sau đó thành phần này sẽ gửi yêu cầu thay đổi thông tin tới các thành phần mục tiêu và khởi động lại mạng riêng ảo với các thiết lập mới.
Một đội chơi bao gồm nhiều người và nhu cầu kết nối đến máy chủ của các đội để điều khiển rất là rõ ràng. Bình thường, khi người chơi kết nối tới máy chủ một cách trực tiếp sẽ phải đi qua rất nhiều các nút ISP1và điều này ảnh hưởng rất nhiều đến tốc độ khi kết nối. Ta có thể hỗ trợ người chơi kết nối qua điều khiển tới máy chủ bằng cách kết nối qua một VPN PLAYER có sử dụng các gateway do các doanh nghiệp có quy mô lớn hỗ trợ để giảm thiểu các việc đi qua các nút ISP. Ví dụ, người chơi ở khối Châu Âu có thể kết nối vào node ở EU, người chơi ở khối Châu Á kết nối vào các nút ở Asia. Việc kết nối giữa các node EU và Asia được hỗ trợ bởi doanh nghiệp với thuật toán tối ưu của họ, bài toán tối ưu kết nối được doanh nghiệp giải quyết. Vì vậy người phát triển chỉ cần chuyên tâm phát triển ứng dụng. Chính vì vậy ở khối đội chơi - kết nối này sinh viên thêm một một số khối VPN Player, VPN Gateway.
4.3.2 Khối vận hành Khối này gồm các thành phần. • Scriptbot • Service status • GameBot • Ranking • Database • ScoreBoard • ComBot
Ta đi sâu vào khối vận hành thông qua kiến trúc chi tiết dưới đây.
Scriptbot
Scriptbot là thành kiểm tra trạng thái dịch vụ của hệ thống. Trong một trận đấu có nhiều Scriptbot hoạt động cùng một lúc và các Scriptbot hoạt động một cách độc lập. Các Scriptbot sẽ chỉ hoạt động dựa trên lệnh của thành phần Service Status. Để có thể kiểm tra dịch vụ của các đội chơi thì Scriptbot cần các mã nguồn kiểm tra do các tác giả của các dịch vụ chứa lỗ hổng cung cấp. Các mã nguồn này chỉ được phép kiểm tra các chức năng cơ bản của một dịch vụ với mục đích là chúng hoạt động bình thường, các mã nguồn này không được phép kiểm tra “flag” của một đội bởi vì các luồng thực thi kiểm tra này có thể làm lộ lỗ hổng của các dịch vụ thông qua việc phân tích các luồng tấn công của các đội chơi. Và các mã nguồn này cần được lưu trữ trong một cây thư mục có cấu trúc xác định tạo điều kiện Scriptbot thiết lập các giá trị môi trường khi vận hành.
Chương 4