Chia sẻ về CTF

CTF (Capture the Flag) là một cuộc thi kiến thức chuyên sâu về bảo mật máy tính, được tổ chức theo mô hình trò chơi chiến tranh mạng, tập trung vào hai kỹ năng tấn công và phòng thủ mạng máy tính của người chơi. Hàng năm có rất nhiều các cuộc thi CTF được tổ chức trên toàn thế giới theo các quy mô khác nhau. Các cuộc thi CTF được giới chuyên môn đánh giá cao và là một “thước đo” quan trọng về “kỹ năng nghề nghiệp” trong lĩnh vực ATTT. Phong trào CTF tại Việt Nam đã bắt đầu phát triển trong khoảng 2 năm vừa qua khi Việt Nam thường xuyên nằm trong top 10 các nước có nhiều đội tham gia thi CTF nhất (theo thống kê của CTFTIME.org), với các nhóm CTF đã có một số thành tích nhất định, được cộng đồng ATTT thế giới biết đến.

Các cuộc thi CTF thường chia thành 3 hình thức chơi chính:

1. Jeopardy-style:

Hình thức này là tập hợp một loạt các các bài thi khác nhau được phân ra thành nhiều chủ đề. Trong mỗi chủ đề sẽ có nhiều bài thi được sắp theo theo độ khó tăng dần và điểm số cũng tăng dần theo độ khó. Các đội thực hiện tìm kiếm các “flag” được giấu, với mỗi “flag” chính xác thì đội chơi sẽ được số điểm tương ứng với bài thi. Chi tiết về các chủ đề:

  • Reverse engineering (Tập trung vào kĩ năng dịch ngược mã nguồn phần mềm, cách unpack các packer, crypter bảo vệ phần mềm)
  • Web ( Các kỹ thuật tìm điểm yếu, lỗ hổng trên ứng dụng web)
  • Network/Forensic (Điều tra, phân tích, truy vết các vụ án số)
  • Crypto/ACM (Đánh đố giải mã, tấn công các thuật toán mã hóa, dùng kĩ năng lập trình/giải thuật để giải các trò chơi, mê cung,…)
  • Pwnable (Các kỹ thuật khai thác tìm điểm yếu, lỗ hổng trên phần mềm như buffer overflow, format string, shellcode, …)

2. Attack & Defence:

Hình thức này ngoài yêu cầu ở người chơi ngoài các kỹ năng tìm kiếm lỗ hổng bảo mật, khai thác các lỗ hổng đó thì người chơi cần có có khả năng khắc phục các điểm yếu lỗ hổng, bảo vệ hệ thống của mình trước các tấn công từ các đội khác.

3. Hình thức thứ 3 là sự kết hợp của hình thức 1 và 2.

Trong đó, hình thức tổ chức được sử dụng phổ biến nhất chính là Jeopardy CTF.

 

CÁC DẠNG BÀI THI JEOPARDY CTF

Reverse engineering – Kỹ thuật dịch ngược

Dịch ngược (Reverse engineering – RE) là quá trình trích xuất các thành phần quan trọng của chương trình từ các file thực thi trên máy tính.

Ứng dụng của dịch ngược là phá vỡ cơ chế bảo vệ phần mềm (cracking), nghiên cứu và phân tích mã độc, kiểm tra chất lượng phần mềm, thẩm định tính an toàn cũng như phát hiện các lỗ hổng của phần mềm, bổ sung thêm tính năng vào chương trình.

Những kiến thức cần có khi thực hiện RE

  • Ngôn ngữ Assembly
  • Sự khác biệt giữa các hệ điều hành, cấu trúc hệ điều hành, cơ chế truyền tham số, hàm gọi API,…
  • Cơ chế Anti Debug, cơ chế làm rối và mã hóa chương trình, cấu trúc file thực thi, cơ chế pack và unpack,…

Các loại tool hỗ trợ dịch ngược

  • Disassemblers: công cụ để dịch ngôn ngữ máy trong các file binary ra ngôn ngữ Assembly (ví dụ: IDA, Radare2)
  • Decompilers: công cụ chuyển đổi bytecode của ngôn ngữ bậc cao như C#, Java, … về mã nguồn gốc (ví dụ: dnSpy, Bytecode Viewer, …)
  • Debuggers: công cụ phân tích binary cho phép chương trình chạy từng lệnh và hiển thị giá trị trên bộ nhớ và trạng thái của các thanh ghi tại thời điểm đó (ví dụ: OllyDBG, GDB)
  • Hex editors: cho phép nhìn thấy từng byte trong binary và thay đổi chúng (ví dụ: 010 editor, Hex Editor)
  • PE and resource viewers/editors: cho phép xem và chỉnh sửa PE (phần dữ liệu cụ thể ở đầu mỗi file, giúp cho hệ thống khởi tạo chạy chương trình) (ví dụ: CFF Explorer, LordPE, PE Studio)
  • System Monitoring tools: hiển thị sự thay đổi mà chương trình gây ra đối với hệ thống (ví dụ: process XP, regshot, and process hacker)

 

Web Security

Để có thể xử lý tốt các bài thi này, người chơi phải nắm vững:

  • Hoạt động của website từ phía client cho đến phía server, HTTP request, HTTP response, HTTP Headers, HTTP methods
  • Cookie, session, hệ quản trị sở dữ liệu(DBMS) như: MySQL, MSSQL,Sqlite, …
  • Kiến thức về lập trình web: JavaScript, HTML/CSS, các ngôn ngữ phía back-end như: PHP, ASP.NET, JSP, Python, NodeJS, …
  • Một số kiến thức về mã hóa: urlencode, base64, MD5, SHA, AES, RSA, …
  • Cách tìm và khai thác các lỗ hổng web phổ biến.

Một số add-on hữu ích trên trình trình duyệt:

  • Hackbar, Cookie manager, Tamper Data,Live Http Header
  • Wappalyzer, Shodan, FoxyProxy

Một số công cụ dùng trong khai thác lỗ hổng:

  • Burpsuite
  • Acunetix, Nessus, OWASP ZAP
  • Bộ công cụ Kali Linux: cung cấp rất nhiều công cụ penetration testing như OpenVAS-zap, Metasploit Framework, Sqlmap, Maltego, Nmap, Nikto, BeFF, …

 

Network/Forensic – Điều tra số

Điều tra số là việc thu thập, bảo vệ, phân tích chứng cứ số, lập báo cáo và trình bày lại những thông tin thực tế từ các nguồn dữ liệu số để tái hiện lại các sự kiện nhằm tìm ra hành vi vi phạm và dự đoán các hoạt động xâm nhập trái phép, tấn công hoặc gây gián đoạn quá trình làm việc của hệ thống.

Mục đích của điều tra số là giúp xác định những gì đang xảy ra làm ảnh hưởng tới hệ thống, phát hiện nguyên nhân hệ thống bị xâm nhập, các hành vi, nguồn gốc của các vi phạm xảy ra đối với hệ thống, điều tra thông tin kẻ phát động tấn công và phát hiện lỗ hổng của hệ thống để kịp thời khắc phục.

Kiến thức cần có khi thực hiện điều tra số

  • Kiến thức về hệ thống
  • Cấu trúc log window, linux
  • Cấu trúc các file
  • Cách truyền dữ liệu giữa các giao thức
  • Các loại malware cùng đặc điểm của chúng
  • Cập nhật thường xuyên lỗ hổng, công cụ, phương thức tấn công mới
  • “Khả năng ngoại cảm” (khả năng phán đoán, kinh nghiệm khi điều tra)
  • Các chứng chỉ quốc tế như CEH, CHFI, …

Phân loại điều tra số

  1. Registry Forensics: trích xuất thông tin và ngữ cảnh từ một nguồn dữ liệu chưa được khai thác qua đó biết được những thay đổi dữ liệu trong Register.
  2. Disk Forensics: thu thập, phân tích dữ liệu được lưu trữ trên phương tiện lưu trữ vật lý, nhằm trích xuất dữ liệu ẩn, khôi phục các tập tin bị xóa.
  3. Mobile forensics: thu thập dữ liệu, các chứng số trên các thiết bị di động, thiết bị PDA, GPS, máy tính bảng.
  4. Application Forensics: điều tra phân tích các ứng dụng chạy trên hệ thống, trích xuất các bản ghi được lưu trữ trên các ứng dụng.
  5. Network Forensics: theo dõi, giám sát, phân tích lưu lượng mạng máy tính nhằm phát hiện sự bất thường, các dấu hiệu xâm nhập trên môi trường mạng.
  6. Memory Forensics: ghi lại bộ nhớ RAM của hệ thống sau đó tiến hành phân tích, ánh xạ, trích xuất các tập tin đang thực thi và cư trú trong bộ nhớ.

Một số công cụ hỗ trợ điều tra số

  • Công cụ phân tích log: Splunk, Weblog expert, …
  • Công cụ giám sát lưu lượng mạng: Wireshark, tcpdump, Snort, Bro, …
  • Công cụ phân tích RAM: Dumpit, Strings, The Sleuthkit, Win32dd, Foremost, Volatility, Mandiant Redline, …
  • Công cụ phân tích registry: MuiCache View, Process Monitor, Regshot, USBDeview, …
  • Công cụ điều tra Disk: ADS Locator, Disk Investigator, Passware Encryption Analyzer, Disk Detector, FTK, …
  • Công cụ điều tra thiết bị di động: WPDeviceManager, PwnageTool, OXYGEN, Apktool, IPhone Analyzer, …
  • Công cụ điều tra ứng dụng: ChromeCacheView, MozillaCookiesView, MyLastSearch, PasswordFox, SkypeLogView, …

 

Crypto/ACM

Đến với dạng crypto của CTF, người chơi sẽ phải viết các thuật toán để mã hóa, giải mã các dữ liệu để tìm ra câu trả lời. Người chơi phải nắm rõ được các kiến thức nền tảng:

  • Mã hóa, giải mã thông điệp
  • Obfucating, deobfuscatting code
  • Mật mã cổ điển: mật mã Caesar, mật mã Affine, mật mã đồng âm, mật mã Beale, …
  • Mật mã hiện đại: DES, AES, RSA, Elgamal, …
  • Lập trình thuật toán mã hóa, giải mã.
  • Các chế độ mã hóa CYB, RCB,…
  • Các kiểu tấn công: CBC bit flipping, Many time pad, Xor repeating key, … đặc biệt là side channel attack
  • Các giao thức bảo mật: SSL/TLS,…
  • Các tấn công mật mã mới xuất hiện: padding Oracle, BEAST, POODLE, CRIME,…
  • Tìm kiếm các bài mẫu về các loại mã hóa tự tạo, luyện tập giải mã dựa trên encrypt source code.

 

Pwnable

Pwnable là dạng bài khai thác tìm điểm yếu, lỗ hổng trên phần mềm như buffer overflow, format string, shellcode,… Người chơi cần nắm vững các kiến thức về:

  • Shellcode, obfuscate shellcode, cách thức tự xây dựng shellcode
  • Các loại shellcode cơ bản (window, linux, arm) 32 bit và 64 bit
  • Nguyên nhân, cơ chế gây lỗi, dấu hiệu nhận dạng, kỹ thuật cơ bản khi khai thác lỗi phần mềm như buffer overflow, format string, bypass sandbox, type confusion, …