Chương 1 Chương 7 - Đánh giá và kiểm thử Đánh giá và nhận xét module kết nối giữa các users và server. Kiểm thử ở mức đơn vị hai thành phần Scriptbot và ServiceStatus. Chương 8 - Tổng kết Tổng kết về luận văn và trình bày các hướng phát triển của đề tài. 4 2 Kiến thức nền tảng 2.1 Capture the flag Capture the flag (CTF) là một cuộc thi sử dụng kiến thức về an toàn thông tin.
Trong cuộc thi, các đội chơi sẽ phải giải quyết các vấn đề về bảo mật máy tính với mục tiêu tìm ra một chuỗi ký tự đặc biệt được giấu bên trong thử thách được gọi là “flag”. Các cuộc thi CTF thường được chia thành 3 hình thức như sau: 1. Jeopardy Ở hình thức này ban tổ chức sẽ đưa ra một loạt các thử thách khác nhau, được phân ra thành nhiều chủ đề như: Web, Pwn, Reverse, Crypto, Forensic,. “flag” sẽ được các đội chơi tìm thấy bên trong thử thách sau khi giải hoặc ở trong máy chủ do ban tổ chức cung cấp.
Điểm số sẽ được tính dựa vào số lượng “flag” và độ phức tạp của thử thách. Tấn công - phòng thủ Ở hình thức thi này các đội chơi sẽ sử dụng máy chủ của mình hoặc do ban tổ chức cung cấp để vận hành các dịch vụ có chứa lỗ hỗng do ban tổ chức cung cấp sau đó cùng kết nối đến một mạng riêng. Các đội chơi sẽ có hai nhiệm vụ chính đó là tấn công các đội khác để lấy “flag” thông qua các lỗ hổng và ngăn chặn sự tấn công của các đội khác vào các dịch vụ do mình đang vận hành thông qua việc ngăn chặn các yêu cầu tới hoặc vá lỗ hổng trên dịch vụ được cung cấp. Thời gian thi đấu sẽ được chia thành các vòng, “flag” được chứa bên trong dịch vụ của các đội sẽ thay đổi sau mỗi vòng.
Điểm số của các đội sẽ được tính theo số lượng “flag” đội đó lấy được và điểm thưởng từ việc phòng thủ thành công các dịch vụ của đội mình (phòng thủ thành công nghĩa là không có đội nào lấy được “flag” của dịch vụ). Đây là hình thức thi sát với thực tiễn nhất hiện nay khi mà đội ngũ bảo mật ngoài việc nghiên cứu các lỗ hổng thông qua suy nghĩ cách tấn công họ còn có thể phân tích các nguy cơ về lỗ hổng thông qua các yêu cầu gửi đến dịch vụ. Hình thức thi kết hơp Là sự phối hợp của hai hình thức trên, hình thức thi được tùy biến theo người tổ chức dựa trên mục đích của cuộc thi.2 Mạng riêng ảo - VPN Mạng riêng ảo - Virtual Private Network [1] là một công nghệ mạng giúp tạo kết nối an toàn khi tham gia môi trường công cộng như internet hoặc mạng riêng do một nhà cung cấp dịch vụ sở hữu. Các máy tính tham gia mạng riêng ảo sẽ “nhìn thấy nhau” như trong một mạng nội bộ - Local Area Network (LAN).
Dưới đây là một số lợi ích mà VPN mang lại: • Truy cập mạng doanh nghiệp từ xa: VPN thường được sử dụng để truy cập vào mạng lưới hệ thống của doanh nghiệp gồm các tài nguyên trên mạng cục bộ. Khi có trở ngại về địa lý, nhân viên có thể kết nối thông qua VPN. Nhờ vậy mà các tài nguyên này không phải tiếp xúc trực tiếp với internet, giúp tăng tính bảo mật. • Duyệt web ẩn danh: các yêu cầu (request) được gửi thông qua VPN sẽ được mã hóa, do vậy tất cả các thông tin, dữ liệu trao đổi qua lại giữa người dùng và website sẽ được đảm bảo bí mật.
• Truy cập đến những website bị chặn do giới hạn địa lý: khi truy cập internet thông qua VPN thì thiết bị sẽ sử dụng địa chỉ IP của máy chủ chứa VPN nên các hạn chế về địa chỉ IP hiện tại sẽ được bỏ qua. 6 3 Một số nền tảng đã được phát triển Trong quá trình khảo sát một số nền tảng tấn công phòng thủ đã tổ chức sinh viên gặp một số khó khăn về mã nguồn và tài liệu. Nguyên nhân bởi các cuộc thi từng diễn ra ban tổ chức rất hạn chế trong việc công bố mã nguồn tổ chức và các tài liệu hỗ trợ vận hành. Dưới đây là ba nền tảng mã nguồn mở mà sinh viên tìm hiểu được trong quá tìm đọc mã nguồn và dựng lại hệ thống dựa vào các mã nguồn này.1 Mô hình nền tảng tấn công - phòng thủ của iCTF Hình 3.1: Kiến trúc mô hình tấn công - phòng thủ của iCTF[7] 7 Chương 3 Mô hình nền tảng tấn công - phòng thủ iCTF[5] là một nền tảng mã nguồn mở do UCSB phát triển từ năm 2003 và vẫn đang trong quá trình hoàn thiện.
Kiến trúc hệ thống của iCTF bao gồm. • VulnerableServer: Máy chủ chứa các lỗ hổng. • VPNServer: Server trung tâm kết nối các đội chơi và cả hệ thống vận hành. • Gamebot: Thành phần tính điểm các đối mỗi Tick.
Tính toán điểm số cho các đội và lưu trữ điểm số các đội xuống database. • Scriptbot: Chịu trách nhiệm đổi flag cho các đội trong mỗi vòng và kiểm tra trạng thái dịch vụ các đội trong tick - đơn vị thời gian trong mỗi round. • Database: Lưu trữ trạng thái của cuộc thi. • Scoreboard: Hiển thị thông tin điểm số các đội thi theo thời gian, cho phép mọi người theo dõi trận đấu.
• Team Interface: Cho phép các đội chơi đăng ký, là nơi nhận và kiểm tra flag các đội chơi gửi lên trong các vòng. Kiến trúc hệ thống cho phép các đội chơi sử dụng máy chủ chứa các lỗ hổng do ban tổ chức cung cấp cùng kết nối mạng riêng ảo sử dụng OpenVPN. Địa chỉ IP của mỗi đội trong mạng riêng ảo được giấu đi thông qua cơ chế NAT1 n-1. Tất cả các yêu cầu bên trong mạng riêng ảo, khi đi qua thành phần VPNServer sẽ được đổi địa chỉ nguồn thành một địa chỉ IP do thành phần VPNServer cung cấp.
Các yêu cầu của các đội chơi lẫn của các thành phần quản lý sẽ được trộn lẫn trong cùng một địa chỉ IP nguồn này. Điều này sẽ giúp cho các đội chơi giấu được danh tính, ngoài ra còn giúp tránh được tình trạng các các đội chơi cố tình chặn yêu cầu dịch vụ từ một địa chỉ IP xác định của đội khác. Vì nếu đội chơi đó cố tình chặn địa chỉ IP do thành phần VPNServer cấp thì cũng đồng nghĩa đội chơi chặn luôn cả kết nối tới thành phần VPNServer và cả hệ thống thi đấu đồng nghĩa với việc đội chơi không hoạt động trong quá trình thi đấu. Đơn vị thời gian nhỏ nhất trong hệ thống là tick.
Một vòng đầu được tạo thành từ việc kết hợp nhiều tick với nhau. Tick là đơn vị thời gian giúp cho hệ thống dễ đồng bộ hơn. Ngoài ra với đơn vị thời gian này, ban tổ chức có thể thay trực tiếp thời gian của một vòng đầu bằng cách tăng giảm số tick có trong một vòng đấu. Điều này cho phép ban tổ chức có thể rút ngắn thời gian các vòng đấu vào cuối cuộc thi để tạo ra sự gấp rút, tăng kịch tích giữa các đội thi trong trận thi đấu.
Việc kiểm tra trạng thái và phân phát “flag” đến các dịch vụ được giao cho thành phần Scriptbot đảm nhiệm. Trong thời gian trân đấu, Scriptbot sẽ quản lý cùng lúc một số lượng dịch vụ kiểm tra. Trong một tick, Scriptbot sẽ điều khiển một dịch vụ đến dịch vụ 1 NAT- Network Address Translation: Cơ chế dịch địa chỉ mạng 8 Chương 3 của các đội để cập nhật “flag” cho dịch vụ tương ứng đó. Trong một tick, thành phần Scriptbot sẽ ra lệnh cho nhiều dịch vụ kiểm tra đến kiểm tra xem dịch vụ của các đội có hoạt động bình thường hay không và “flag” của các dịch vụ có còn tồn tại hay không.
Một dịch vụ có thể được thành phần Scriptbot ra lệnh kiểm tra nhiều lần trong một tick. Và hai chức năng kiểm tra dịch vụ và phân phát “flag” đến các đội chơi đều được Scriptbot giấu luồng thực thi thông qua một chức năng có tên là “benign”. Thông tin các đội chơi cần được kiểm tra được cung cấp bởi thành phần Gamebot thông qua một module kết nối được gọi là dispatcher sử dụng ứng dụng RabbitMQ. Ngoài chức năng ra lệnh cho Scriptbot hoạt động để kiểm tra và cập nhật “flag” tới dịch vụ của các đội.
Ngoài ra, Gamebot còn đảm nhận chức năng quản lý các dịch vụ hoạt động trong hệ thống và tính điểm thông qua dữ liệu được trả về từ các Scriptbot và thành phần kiểm tra “flag”. Thành phần Team Interface là thành phần hỗ trợ cho các người chơi, đội chơi giao tiếp với hệ thống. Ở thành phần Team Interface được hiện thực các API công khai cho phép người chơi thực hiện các tương tác chính trong trận đấu như: đăng ký tham gia trận đấu, gửi các “flag” mà đội chơi lấy được từ đội khác để tính điểm, nhận thông tin trong trận đấu về đội chơi có thể tấn công, điểm số hiện tại của đội mình và một số thông tin khác trong trận đấu. Hệ thống đã giải quyết được các vấn đề: kết nối, thiết lập máy chủ các đội chơi, cung cấp dịch vụ tính điểm, cập nhập “flag” và phòng chống gian lận.
Một điểm hay trong thiết kế hệ thống đó là đơn vị thời gian nhỏ nhất không phải là các vòng mà là tick. Ngoài ra hệ thống còn sử dụng ngôn ngữ lập trình là Python nên rất lợi cho việc phát triển và duy trì sau này. Tuy nhiên cơ chế giấu địa chỉ IP của các đội thông qua cơ chế dịch địa chỉ mạng - NAT lại gặp phải vấn đề cho đội phòng thủ. Cụ thể đó là đội chơi bị tấn công DDoS, các đội chỉ có thể biết được đỉa chỉ IP tấn công mình là địa chỉ IP dùng chung của hệ thống khi gói tin đi qua NAT và không thể phòng thủ được bằng cách hạn chế truy cập từ địa chỉ IP này được, vì hạn chế địa chỉ này đồng nghĩa với việc tự bỏ kết nối với hệ thống trận đấu.
Hệ quả là đội có thể bị tê liệt trong toàn bộ thời gian đấu. Điều này dẫn tới mất công bằng giữa các đội chơi trong trận đấu. Nền tảng này có thiết kế một các rõ ràng, rành mạch. Các thành phần được chia theo thành từng chức năng riêng và hoạt động độc lập nên khi có một thành phần gặp sự cố thì hệ thống vẫn có thể hoạt động bình thường.
Với các chức năng và thành phần chi tiết của hệ thống này sinh viên có thể học hỏi rất nhiều trong quá trình thiết kế hệ thống. Tuy nhiên về kết nối giữa các đội sinh viên vẫn đang tiếp tục cân nhắc.