CTF, viết tắt của Capture The Flag, là cuộc thi an ninh mạng trong đó người chơi giải các thử thách được dựng sẵn để tìm ra một chuỗi bí mật gọi là "cờ", rồi nộp cờ để lấy điểm. Toàn bộ hệ thống trong cuộc thi do ban tổ chức dựng ra và cho phép tấn công, nên đây là một trong những cách hợp pháp và hiệu quả nhất để luyện kỹ năng.
CTF có nhiều cấp độ, từ thử thách cho học sinh mới làm quen tới giải đấu cho các đội chuyên nghiệp. Với người mới, điều quan trọng không phải thắng mà là học được một kỹ thuật mới qua mỗi thử thách và viết lại được cách mình giải. Bài này giải thích các thể loại, cách bắt đầu, và những ranh giới cần giữ.
Các thể loại thử thách thường gặp
Phần lớn CTF dạng câu đố chia thử thách theo chủ đề. Bảng dưới giúp bạn biết mỗi chủ đề luyện kỹ năng gì, để chọn chỗ bắt đầu hợp với nền của mình.
| Chủ đề | Thử thách xoay quanh | Kỹ năng được luyện |
|---|---|---|
| Web | Ứng dụng web có lỗi cố ý | Hiểu HTTP, phiên đăng nhập, cách máy chủ xử lý dữ liệu nhập vào |
| Pháp chứng (forensics) | Tệp ghi gói tin, ảnh ổ đĩa, tệp nhật ký, tệp bị giấu dữ liệu | Đọc dữ liệu thô, dựng lại diễn biến, kiên nhẫn |
| Mật mã (crypto) | Dữ liệu mã hoá bằng cách dùng sai thuật toán | Nguyên lý mã hoá, nhận ra cấu hình yếu, chút toán |
| Dịch ngược (reverse) | Chương trình đã biên dịch cần hiểu logic bên trong | Đọc mã máy, hiểu cách chương trình chạy |
| Khai thác (pwn) | Chương trình có lỗi xử lý bộ nhớ | Kiến trúc máy tính, hệ điều hành, gỡ lỗi |
| Tình báo nguồn mở (OSINT) | Tìm thông tin từ dữ liệu công khai do ban tổ chức dựng | Tìm kiếm có phương pháp, kiểm chứng nguồn |
| Linh tinh (misc) | Câu đố tổng hợp, mã hoá đơn giản, dữ liệu lạ | Tư duy linh hoạt, ghép nhiều kỹ năng |
Người mới thường hợp nhất với web, pháp chứng và tình báo nguồn mở, vì cần ít nền chuyên sâu hơn. Dịch ngược và khai thác bộ nhớ đòi hỏi nền kiến trúc máy tính, nên để sau.
Hai kiểu thi chính: giải đố và công thủ
Kiểu phổ biến nhất là giải đố, thường gọi là Jeopardy theo tên một trò chơi truyền hình. Ban tổ chức đưa lên một bảng thử thách chia theo chủ đề, mỗi thử thách một mức điểm tuỳ độ khó. Người chơi hoặc đội chọn thử thách nào giải trước, nộp cờ để lấy điểm. Kiểu này hợp với người mới vì có nhiều mức độ, chơi được một mình và thường diễn ra trực tuyến trong một hai ngày.
Kiểu thứ hai là công thủ (Attack-Defense). Mỗi đội được giao một hệ thống giống nhau có lỗ hổng; đội phải vừa vá hệ thống của mình vừa tìm cách lấy cờ từ hệ thống các đội khác trong mạng riêng của cuộc thi. Kiểu này gần với thực tế hơn vì buộc bạn cân nhắc giữa phòng thủ và tấn công, giữ dịch vụ chạy liên tục, nhưng đòi hỏi đội có kinh nghiệm và phối hợp tốt.
Ngoài ra còn các hình thức khác như thử thách luôn mở để luyện tập không giới hạn thời gian, hay các bài phòng thủ thuần tuý như điều tra một sự cố giả định. Với người hướng tới giám sát và ứng cứu, loại thử thách phòng thủ này rất đáng thử.
Bắt đầu chơi CTF trong tháng đầu tiên
Lộ trình dưới đây dành cho người đã có nền cơ bản về Linux và mạng. Nếu chưa, hãy học nền trước, vì không có nền thì CTF dễ thành chuỗi tra lời giải.
- Tuần 1: chọn một nền tảng luyện tập có thử thách luôn mở dành cho người mới, làm các bài dễ nhất ở chủ đề web và pháp chứng. Mục tiêu là quen cách nộp cờ và cách đọc đề.
- Tuần 2: mỗi ngày một thử thách. Khi kẹt quá một giờ, đọc gợi ý của đề trước, chỉ xem lời giải của người khác khi đã thật sự bế tắc, và sau đó tự làm lại không nhìn.
- Tuần 3: viết lời giải cho ba thử thách đã giải, theo cấu trúc: đề yêu cầu gì, mình thử những gì, cái gì sai, cái gì đúng, học được gì, và trong hệ thống thật thì nên phòng thế nào.
- Tuần 4: tham gia một cuộc thi trực tuyến dành cho người mới hoặc có hạng mục cho người mới. Đừng đặt mục tiêu thứ hạng; đặt mục tiêu giải được hai ba thử thách và học được một kỹ thuật chưa biết.
Sau cuộc thi, hầu hết cộng đồng sẽ chia sẻ lời giải. Đọc lời giải của những thử thách bạn không làm được là phần học quý nhất của cả cuộc thi.
Lập đội và học cùng người khác
Đội nhỏ, phân chủ đề. Một đội ba tới năm người, mỗi người mạnh một vài chủ đề, thường hiệu quả hơn đội đông mà ai cũng làm web. Khi mới, cứ thử đủ chủ đề, rồi dần nhận phần mình hợp.
Ghi chép chung. Một tài liệu chung trong lúc thi, ghi ai đang làm thử thách nào, đã thử gì, giúp đội không làm trùng và người vào sau nắm nhanh tình hình.
Câu lạc bộ trường hoặc nhóm cộng đồng. Nhiều trường đại học có câu lạc bộ an ninh mạng tổ chức luyện tập định kỳ. Người đi làm có thể tìm nhóm cộng đồng trực tuyến. Học cùng người khác giúp bạn thấy cách tiếp cận khác hẳn cách của mình, và có người đọc lời giải của bạn rồi chỉ ra chỗ giải thích chưa rõ.
Họp rút kinh nghiệm sau mỗi giải. Dành một buổi sau cuộc thi để mỗi người trình bày một thử thách đã giải hoặc chưa giải được. Thói quen này luyện kỹ năng trình bày kỹ thuật, thứ rất cần khi đi làm, và giúp kiến thức của một người thành kiến thức của cả đội.
Chia sẻ lời giải đúng lúc. Không trao đổi lời giải với đội khác khi cuộc thi đang diễn ra; đó là gian lận và thường bị loại. Sau khi kết thúc và ban tổ chức cho phép, việc viết và chia sẻ lời giải lại được cộng đồng khuyến khích.
Ranh giới: CTF khác hệ thống thật ở đâu
Quy tắc cốt lõi: chỉ tấn công đúng hạ tầng ban tổ chức chỉ định trong thể lệ. Hạ tầng của chính nền tảng thi, máy chủ chấm điểm, hay máy của người chơi khác (trong kiểu giải đố) đều nằm ngoài phạm vi, trừ khi thể lệ nói khác. Nhiều cuộc thi loại người chơi tấn công hạ tầng chấm điểm hay làm nghẽn hệ thống chung.
Kỹ thuật học trong CTF không có nghĩa là được dùng ở bất cứ đâu. Thử một kỹ thuật vừa học lên trang web của trường, của công ty hay của một cửa hàng "chỉ để xem có được không" là hành vi truy cập trái phép, có thể bị xử lý theo pháp luật về an ninh mạng và an toàn thông tin, bất kể bạn có lấy gì hay không. Nếu bạn tình cờ phát hiện lỗi ở hệ thống thật, cách đúng là báo cho chủ hệ thống qua kênh chính thức của họ và không khai thác thêm.
Cũng cần nói rõ: CTF là trò chơi có lời giải. Hệ thống thật thường không có cờ để tìm, không có gợi ý, và phần lớn công việc bảo mật là phòng thủ, theo dõi, giải thích. CTF dạy kỹ thuật và tư duy, không thay cho trải nghiệm vận hành thật.
Từ CTF sang công việc thật: mang theo được gì
Kỹ năng dễ mang theo nhất là cách nghĩ có hệ thống khi gặp một thứ lạ: đọc kỹ đề, liệt kê giả thuyết, thử từng cái và ghi lại kết quả, loại trừ dần. Người giám sát an ninh làm đúng như vậy với một cảnh báo chưa rõ; người ứng cứu sự cố làm như vậy với một máy bị nghi nhiễm.
Các thử thách pháp chứng chuyển sang công việc gần như trực tiếp: đọc tệp ghi gói tin, dựng lại dòng thời gian từ nhật ký, tìm dữ liệu bị giấu. Thử thách web giúp bạn hiểu vì sao lập trình viên phải kiểm dữ liệu nhập vào, và từ đó giải thích cho họ thuyết phục hơn khi làm bảo mật ứng dụng.
Thứ không mang theo được là cảm giác "chắc chắn có lời giải". Trong công việc, nhiều câu hỏi không có câu trả lời rõ, dữ liệu thiếu, và quyết định phải đưa ra khi chưa đủ chắc. Vì vậy, khi viết lời giải CTF, hãy luyện thêm một đoạn "nếu đây là hệ thống thật thì đội phòng thủ sẽ thấy dấu vết gì và nên chặn ở đâu". Đoạn này biến một bài giải đố thành bài học phòng thủ, và cũng là phần người tuyển dụng muốn đọc nhất.
Dùng AI trong CTF: được gì và mất gì
Nhiều cuộc thi có quy định riêng về việc dùng công cụ AI; đọc thể lệ trước. Ở góc học tập:
- AI hữu ích khi giải thích một khái niệm lạ trong đề, ví dụ một định dạng tệp hay một kiểu mã hoá, để bạn biết hướng tìm hiểu.
- AI có thể giúp viết nhanh một kịch bản xử lý dữ liệu lặp lại, như giải mã nhiều lớp hay lọc tệp ghi gói tin.
- Nếu bạn để AI giải hộ toàn bộ thử thách, bạn có cờ nhưng không có kỹ năng, và lần sau gặp đề tương tự vẫn bế tắc.
- AI thường đưa hướng sai cho thử thách được thiết kế có bẫy; người mới dễ đi theo hướng sai đó rất lâu.
- Đừng dán dữ liệu của hệ thống thật vào chatbot với lý do "luyện CTF"; dữ liệu thi do ban tổ chức tạo ra mới là dữ liệu luyện tập.
Một cách cân bằng: tự làm ít nhất ba mươi phút trước khi hỏi AI, và chỉ hỏi để hiểu khái niệm, không hỏi lời giải.
Câu hỏi thường gặp
CTF có phù hợp với học sinh phổ thông không?
Có những cuộc thi và nền tảng thiết kế riêng cho học sinh, đề bài nhẹ hơn và tập trung vào tư duy, tìm kiếm thông tin, mã hoá đơn giản. Phụ huynh nên cùng con đọc thể lệ, chọn nền tảng có quy định rõ ràng, và nhắc con rằng kỹ năng học được chỉ dùng trong cuộc thi.
Chơi CTF có cần máy tính cấu hình mạnh không?
Phần lớn thử thách giải đố chạy trên máy chủ của ban tổ chức, bạn chỉ cần một máy tính đủ chạy một máy ảo Linux và trình duyệt. Một số thử thách dịch ngược hay pháp chứng có tệp lớn cần thêm bộ nhớ, nhưng hiếm khi đòi máy chuyên dụng.
Thành tích CTF có giá trị khi xin việc không?
Thành tích và lời giải bạn viết là bằng chứng bạn tự học và giải quyết vấn đề, nhiều người tuyển dụng trong nghề đánh giá cao điều này. Tuy vậy, không có đảm bảo nào về việc làm. Lời giải viết rõ ràng thường thuyết phục hơn một dòng thứ hạng.
Kẹt ở một thử thách quá lâu thì làm gì?
Đặt giới hạn thời gian trước, ví dụ một hai giờ. Hết giờ thì đọc gợi ý, nghỉ một lúc, hoặc chuyển sang thử thách khác. Sau cuộc thi, đọc lời giải và tự làm lại. Kẹt là bình thường; điều quan trọng là rút ra được mình thiếu kiến thức gì.
CTF có phải là hack không?
CTF dùng kỹ thuật tấn công nhưng trong hệ thống được dựng ra để bị tấn công, có sự cho phép rõ ràng của chủ hệ thống là ban tổ chức. Đó chính là ranh giới giữa luyện tập hợp pháp và hành vi trái phép. Cùng một kỹ thuật, dùng ngoài phạm vi được phép là vi phạm.
Nên tự tổ chức CTF nhỏ cho câu lạc bộ không?
Đây là cách học rất tốt, vì ra đề đòi hỏi hiểu sâu hơn giải đề. Hãy dựng toàn bộ trên hạ tầng riêng tách biệt, không dùng máy chủ thật của trường hay công ty, viết thể lệ rõ phạm vi được tấn công, và chuẩn bị lời giải chính thức cho từng thử thách.