Bài học

Trong thời gian diễn ra Cuộc thi, chúng tôi sẽ liên tục cập nhật các module mới. Ngoài ra, khi bạn tham gia tương tác các thảo luận trên Discord, bạn sẽ nhận được thông báo về các tài liệu học mới. Để nhận được sự tư vấn từ đội ngũ tư vấn viên và hướng dẫn của chúng tôi và tham gia thảo luận với các thành viên khác, hãy truy cập kênh Discord chính thức của chúng tôi tại địa chỉ https://discord.gg/sGx9GyAraN.

Giới thiệu về CTFs và các khái niệm về An Toàn Thông Tin

Khái niệm

Capture The Flag (CTF) trong ngữ cảnh An Toàn Thông Tin là một cuộc thi hack có đạo đức, trong đó người tham gia giải quyết một loạt các vấn đề để tìm một lá cờ (flag), là một chuỗi văn bản cụ thể. Flag thường được ẩn hoặc được bảo vệ và các thí sinh cần tận dụng các lỗ hổng hoặc giải các câu đố để tìm ra nó. Có ba loại CTF chính:

  • CTF theo kiểu Jeopardy: Đây là loại phổ biến nhất và bao gồm một tập hợp các thử thách độc lập được phân bổ trên nhiều danh mục như mật mã học, khai thác web, pháp y, v.v. Các đội có thể chọn giải quyết các thử thách theo bất kỳ thứ tự nào.
  • CTF theo kiểu tấn công-phòng thủ: Trong các cuộc thi này, mỗi đội có một mạng riêng (hoặc một máy đơn lẻ) với các dịch vụ có lỗ hổng. Các đội phải bảo vệ các dịch vụ của mình và tấn công các dịch vụ của các đội khác.
  • CTF theo kiểu "King of the Hill" (KotH): Trong các cuộc thi này, tất cả các thí sinh tấn công vào cùng một máy hoặc mạng và cố gắng giữ nó trong thời gian dài nhất.

Các khái niệm cơ bản về An Toàn Thông Tin: Dưới đây là một số khái niệm cơ bản trong lĩnh vực An Toàn Thông Tin cần biết

  • Bảo mật thông tin: Đảm bảo rằng thông tin không được tiết lộ cho những cá nhân không được ủy quyền.
  • Tính toàn vẹn: Đảm bảo rằng thông tin không bị thay đổi trong quá trình truyền và vẫn giữ nguyên chính xác
  • Tính sẵn có: Đảm bảo rằng thông tin có sẵn khi cần thiết.
  • Xác thực: Xác minh danh tính của một người hoặc hệ thống.
  • Ủy quyền: Cấp phép hoặc từ chối truy cập vào các tài nguyên cụ thể.
  • Tính không từ chối: Đảm bảo rằng một bên trong một giao dịch không thể phủ nhận rằng giao dịch đã xảy ra.

Gợi ý & Lời khuyên

Cách tiếp cận một thử thách CTF

  1. Hiểu vấn đề: Đọc kỹ mô tả thử thách. Thông thường, nó chứa những gợi ý về những gì bạn nên làm.
  2. Nghiên cứu: Nếu bạn không biết cách giải quyết vấn đề, hãy tìm hiểu thêm. Tra cứu bất kỳ thuật ngữ hoặc khái niệm nào mà bạn chưa quen thuộc.
  3. Đưa ra ý tưởng giải pháp: Suy nghĩ về các cách khác nhau để giải quyết vấn đề. Ghi lại ý tưởng của bạn để không quên chúng.
  4. Kiểm thử và lặp lại: Thử nghiệm các giải pháp của bạn để xem chúng hoạt động hay không. Nếu chúng không hoạt động, điều chỉnh và thử lại.

Làm việc nhóm và giao tiếp: Trong CTF, làm việc nhóm hiệu quả và giao tiếp là rất quan trọng. Việc phân công nhiệm vụ dựa trên điểm mạnh của các thành viên trong nhóm và cập nhật tất cả mọi người về tiến độ là điều quan trọng.

Các ví dụ

Hướng dẫn thực hiện một thử thách CTF đơn giản

Hãy lấy một thử thách mật mã đơn giản làm ví dụ

  1. Thử thách cung cấp một chuỗi ký tự: "U2FsdGVkX1+vupppZksvRf5pq5g5XjFRlipRkwB0K1Y96Qsv2Lm+31cmzaAILwyt". Đây là gợi ý rằng có thể là một mật mã 'đối xứng'.
  2. Từ gợi ý, chúng ta có thể suy đoán rằng đây có thể là một chuỗi được mã hóa và phương pháp có thể là một kiểu mã hóa phổ biến như Base64.
  3. Chúng ta thử giải mã chuỗi này bằng Base64 và nhận được một loạt các ký tự vô nghĩa, nhưng một số ký tự đầu tiên là "Salted__", đó là một dấu hiệu của dữ liệu được mã hóa bằng OpenSSL.
  4. Chúng ta đoán rằng chuỗi có thể đã được mã hóa bằng OpenSSL với một thuật toán mã hóa đối xứng. Chúng ta thử giải mã nó bằng công cụ dòng lệnh openssl sử dụng các thuật toán phổ biến và tùy chọn mặc định.
  5. Sau một vài lần thử và sai, chúng ta phát hiện ra rằng lệnh 'echo U2FsdGVkX1+vupppZksvRf5pq5g5XjFRlipRkwB0K1Y96Qsv2# Chúng ta sử dụng công cụ tìm kiếm trong trình duyệt để tìm kiếm "common openssl ciphers".
  6. Sau một số lần thử và sai, chúng ta phát hiện rằng lệnh echo U2FsdGVkX1+vupppZksvRf5pq5g5XjFRlipRkwB0K1Y96Qsv2Lm+31cmzaAILwyt | base64 --decode | openssl enc -d -aes-256-cbc -a -salt -pass pass:mysecretpass giải mã chuỗi thành "CTF{this_is_a_test_flag}" bằng cách sử dụng thuật toán mã hóa AES-256-CBC với mật khẩu "mysecretpass".

Trong trường hợp này, chiến lược liên quan đến việc hiểu các gợi ý được cung cấp trong thử thách, sử dụng kiến ​​thức về các phương pháp mã hóa và mã hóa thông thường, và thử nghiệm với các khả năng khác nhau cho đến khi tìm thấy cờ

Các câu hỏi thường gặp

Bắt đầu với CTF kiểu Jeopardy vì chúng thích hợp cho người mới bắt đầu. Chọn những thử thách phù hợp với sở thích và lĩnh vực kiến thức của bạn. Sử dụng các nguồn tài liệu và diễn đàn trực tuyến để học từ người khác và nâng cao kỹ năng của mình.

Điều đó hoàn toàn không sao cả. Một trong những điều tốt nhất của CTF là nó khuyến khích việc học hỏi. Nếu bạn gặp phải một chủ đề mà bạn không quen thuộc, hãy dành thời gian để tìm hiểu và nắm bắt kiến thức về nó. Bạn có thể sử dụng các nguồn tài liệu trực tuyến, sách, hoặc thậm chí hỏi cộng đồng để được giúp đỡ.

Mặc dù bạn có thể tham gia một mình, nhưng thường thì việc tham gia nhóm sẽ mang lại nhiều lợi ích hơn (và vui hơn). Các thành viên trong nhóm có thể bổ sung cho nhau về kỹ năng và học hỏi từ nhau.

Thực hành là yếu tố quan trọng. Tham gia vào càng nhiều CTFs càng tốt, học từ những sai lầm của bạn và từ người khác. Ngoài ra, hãy cố gắng tìm hiểu về các lĩnh vực khác nhau trong lĩnh vực an ninh mạng để mở rộng kiến thức của bạn.

OpenSSL là một bộ công cụ mạnh mẽ cho các giao thức SSL và TLS, và nó thường được sử dụng trong các thử thách mật mã hóa. Bạn có thể sử dụng nó để mã hóa/giải mã dữ liệu, tạo chứng chỉ, xem thông tin chứng chỉ và nhiều công việc khác. Ví dụ, để giải mã một tệp với một thuật toán mã hóa cụ thể, bạn có thể sử dụng lệnh như sau: openssl enc -d -aes-256-cbc -in file.enc -out file.dec -k mypassword.

Flag trong CTF là một mẩu dữ liệu cụ thể mà người tham gia cần tìm. Thông thường, đó là một chuỗi văn bản, thường có định dạng như: "CTF{đây_là_một_flag}". Flag thường được ẩn hoặc bảo vệ, và việc tìm ra nó là mục tiêu của thử thách. Khi đã tìm được, flag có thể được nộp để nhận điểm.

Đây là một giới thiệu cơ bản về CTFs và các khái niệm về an toàn thông tin. Khi bạn tiến bộ qua các module, bạn sẽ đi sâu vào các chủ đề cụ thể hơn và có được nhiều kinh nghiệm thực tế hơn với các thử thách CTF.

Giới thiệu về Các công cụ và Thiết lập môi trường

Khái niệm

Môi trường ảo: Đây tương tự như việc có một máy tính bên trong máy tính của bạn. Giống như bạn đã cài đặt một hệ điều hành (như Windows, Mac hoặc Linux) trên máy tính của mình, bạn cũng có thể cài đặt một hệ điều hành hoàn toàn riêng biệt bên trong hệ thống hiện tại của bạn. Điều này hữu ích vì nó cho phép bạn giữ các môi trường riêng biệt cho các nhiệm vụ khác nhau. Ví dụ, bạn có thể sử dụng hệ điều hành chính của mình cho các nhiệm vụ hàng ngày như duyệt web hoặc xem phim, và một môi trường ảo riêng biệt cho các nhiệm vụ bảo mật như tham gia vào CTFs. Điều này giúp bảo vệ hệ thống chính của bạn an toàn và sạch sẽ.

Công cụ: Trong ngữ cảnh của CTFs và bảo mật thông tin, công cụ là các ứng dụng phần mềm được sử dụng để thực hiện các nhiệm vụ cụ thể. Điều này có thể bao gồm các ứng dụng như các công cụ phân tích mạng, cho phép bạn xem dữ liệu đang được gửi qua mạng, hoặc các công cụ phân tích mã, cho phép bạn xem các chỉ thị cá nhân mà một phần mềm đang thực thi. Các công cụ khác nhau được sử dụng cho các loại nhiệm vụ khác nhau, và một phần của việc trở thành một người tham gia CTF thành công là biết rõ ràng sử dụng công cụ nào cho từng công việc.

Các mẹo và kỹ thuật

Môi trường ảo: Khi thiết lập môi trường ảo của bạn, hãy xem xét sử dụng một bản phân phối Linux, vì nhiều công cụ bảo mật thông tin được thiết kế dành riêng cho Linux. Một lựa chọn phổ biến là Kali Linux, đi kèm với nhiều công cụ cần thiết đã được cài đặt sẵn. Ngoài ra, hãy nhớ cách ly môi trường ảo của bạn khỏi hệ thống chính càng nhiều càng tốt. Điều này có thể giúp ngăn chặn bất kỳ phần mềm độc hại tiềm ẩn nào ảnh hưởng đến hệ thống chính của bạn.

Công cụ: Hãy tìm hiểu những kiến thức cơ bản về mỗi công cụ trước khi bạn cần sử dụng chúng trong một cuộc thi. Mỗi công cụ có riêng một tập lệnh và tính năng, và việc cố gắng học tất cả chúng cùng một lúc trong một cuộc thi căng thẳng có thể gây áp lực. Hãy dành thời gian để luyện tập với từng công cụ và hiểu rõ điểm mạnh và điểm yếu của chúng. Hơn nữa, hãy cập nhật công cụ của bạn. Nhà phát triển thường phát hành các bản cập nhật để khắc phục lỗi hoặc thêm tính năng mới, vì vậy việc cập nhật sẽ giúp bạn thực hiện tốt hơn.

Các ví dụ:

Thiết đặt một máy ảo

  1. Tải phần mềm ảo hóa như VirtualBox hoặc VMware
  2. Tải tệp ISO cho bản phân phối Linux mà bạn muốn sử dụng (ví dụ: Kali Linux.
  3. Mở phần mềm ảo hóa của bạn và tạo một máy ảo mới.
  4. Làm theo hướng dẫn để thiết lập máy ảo của bạn. Bạn sẽ cần chỉ định các thông số như lượng RAM và không gian lưu trữ dành cho máy ảo, và chọn tệp ISO mà bạn đã tải về trước đó.
  5. Sau khi máy ảo của bạn được thiết lập, bạn có thể khởi động nó và bắt đầu sử dụng nó giống như bạn sử dụng một máy tính thông thường.

Cài đặt và sử dụng Wireshark

  1. Trong máy ảo của bạn, mở một cửa sổ terminal
  2. Sử dụng trình quản lý gói để cài đặt Wireshark. Ví dụ, trên hệ thống dựa trên Debian như Kali Linux, bạn có thể sử dụng lệnh sudo apt-get install wireshark.
  3. Sau khi cài đặt Wireshark, bạn có thể khởi động nó bằng cách gõ lệnh wireshark trong terminal.
  4. Với Wireshark đã mở, bạn có thể bắt đầu một bản ghi mạng bằng cách chọn một giao diện (như bộ điều khiển ethernet hoặc Wi-Fi của bạn) và nhấp vào nút "Start".
  5. Wireshark sẽ hiển thị tất cả các gói mạng đang được gửi và nhận qua giao diện đó. Bạn có thể phân tích các gói này để hiểu loại dữ liệu đang được gửi qua mạng của bạn.

Các câu hỏi thường gặp

Hầu hết các chuyên gia bảo mật thông tin thích sử dụng Linux cho CTFs và các nhiệm vụ bảo mật khác. Điều này là do Linux là một hệ điều hành mã nguồn mở, có nghĩa là mã nguồn của nó miễn phí và có thể được chỉnh sửa bởi bất kỳ ai. Điều này khiến nó trở thành một nền tảng tuyệt vời để học và thực nghiệm. Ngoài ra, nhiều công cụ bảo mật mạnh mẽ được thiết kế cho Linux. Một sự lựa chọn phổ biến là Kali Linux, đi kèm với nhiều công cụ mà bạn sẽ cần cho CTFs.

Một trong những cách tốt nhất để bảo vệ hệ thống chính của bạn là sử dụng máy ảo cho các hoạt động CTF. Điều này có nghĩa là ngay cả khi bạn vô tình tải xuống phần mềm độc hại hoặc gây ra các vấn đề khác, nó sẽ được chứa trong máy ảo và không ảnh hưởng đến hệ thống chính của bạn. Đồng thời, nên cố gắng giữ máy ảo của bạn cách ly khỏi hệ thống chính càng nhiều càng tốt. Ví dụ, bạn có thể tắt chia sẻ thư mục và chia sẻ bảng ghi tạm giữa hệ thống chính và máy ảo. Cuối cùng, luôn luôn cập nhật hệ thống và các công cụ của bạn, vì các bản cập nhật thường bao gồm các bản vá bảo mật để bảo vệ khỏi các lỗ hổng đã được biết đến.

Bảo mật Web

Khái niệm

HTTP/HTTPS: Đây là các giao thức, hoặc bộ quy tắc, mà trình duyệt của bạn sử dụng để giao tiếp với máy chủ khi bạn duyệt web. HTTP viết tắt của Hypertext Transfer Protocol, và HTTPS cũng tương tự, nhưng có tính bảo mật cao hơn (chữ "S" đại diện cho secure - bảo mật). Các giao thức này xác định cách các yêu cầu và phản hồi nên được định dạng và truyền đi.

GET và POST: Đây là hai phương thức mà HTTP sử dụng để yêu cầu dữ liệu. GET được sử dụng để yêu cầu dữ liệu từ máy chủ, và POST được sử dụng để gửi dữ liệu đến máy chủ. Ví dụ, khi bạn nhập một URL và nhấn enter, trình duyệt của bạn gửi một yêu cầu GET đến máy chủ để tải trang web. Khi bạn điền vào một biểu mẫu và nhấp vào nút gửi, trình duyệt của bạn gửi một yêu cầu POST để gửi dữ liệu biểu mẫu đến máy chủ.

Cookie và Phiên: Đây là các công nghệ mà các trang web sử dụng để theo dõi người dùng. Cookie là một mảnh nhỏ dữ liệu mà một trang web lưu trữ trên trình duyệt của bạn. Lần sau bạn truy cập trang web đó, trình duyệt của bạn gửi cookie cùng với yêu cầu, để trang web có thể nhớ bạn. Phiên là một cách để lưu trữ dữ liệu về một người dùng qua nhiều yêu cầu. Khi bạn đăng nhập vào một trang web, máy chủ bắt đầu một phiên cho bạn và lưu trữ dữ liệu về bạn, như tên người dùng và trạng thái đăng nhập, trong phiên.

Các Lỗ hổng Web: Đây là nhược điểm trong một ứng dụng web có thể cho phép kẻ tấn công xâm nhập vào ứng dụng hoặc dữ liệu mà nó xử lý. Ví dụ, Cross-Site Scripting (XSS) là một lỗ hổng cho phép kẻ tấn công chèn các tập lệnh độc hại vào các trang web được xem bởi người dùng khác. SQL Injection (SQLi) là một loại lỗ hổng khác cho phép kẻ tấn công can thiệp vào các truy vấn mà ứng dụng thực hiện đến cơ sở dữ liệu của nó.

Khai thác Web: Khai thác Web đề cập đến quá trình xác định và tận dụng các lỗ hổng trong ứng dụng web, máy chủ hoặc các thành phần phía máy khách để có quyền truy cập trái phép hoặc thực hiện các hành động độc hại. Nó bao gồm việc hiểu cách các công nghệ web hoạt động, chẳng hạn như HTTP, HTML, JavaScript và các ngôn ngữ kịch bản phía máy chủ.

Cross-Site Scripting (XSS): XSS là một loại lỗ hổng cho phép kẻ tấn công chèn và thực thi các tập lệnh độc hại trong các trang web được xem bởi người dùng khác. Nó xảy ra khi đầu vào của người dùng không được làm sạch hoặc xác nhận đúng cách, cho phép chèn các tập lệnh có thể lấy cắp thông tin nhạy cảm, chiếm đoạt phiên người dùng hoặc thực hiện các hành động trái phép khác.

SQL Injection: SQL injection là một lỗ hổng xảy ra khi đầu vào được cung cấp bởi người dùng không được xác nhận hoặc làm sạch đúng cách trước khi được bao gồm trong các truy vấn SQL. Kẻ tấn công có thể khai thác lỗ hổng này bằng cách chèn mã SQL độc hại, từ đó có thể thao túng hoặc tiết lộ dữ liệu nhạy cảm, thay đổi nội dung cơ sở dữ liệu hoặc thực thi các lệnh tùy ý.

Cross-Site Request Forgery (CSRF): CSRF là một cuộc tấn công lừa người dùng thực hiện các hành động không mong muốn trên một trang web mà họ không biết hoặc không đồng ý. Nó khai thác sự tin tưởng giữa người dùng và trang web bằng cách tạo ra các yêu cầu độc hại được thực thi tự động khi người dùng truy cập một trang bị xâm phạm hoặc nhấp vào một liên kết độc hại.

Server-Side Request Forgery (SSRF): SSRF là một lỗ hổng cho phép kẻ tấn công thực hiện yêu cầu từ một máy chủ có lỗi đến các tài nguyên nội bộ hoặc bên ngoài mà không nên được truy cập. Bằng cách thay đổi các tham số đầu vào, kẻ tấn công có thể buộc máy chủ thực hiện các hành động không đúng ý, chẳng hạn như truy cập vào các tài nguyên nội bộ hoặc khởi tạo yêu cầu đến các máy chủ khác.

Mẹo và Kỹ thuật:

Chặn và Sửa đổi Yêu cầu HTTP: Các công cụ như Burp Suite cho phép bạn chặn và sửa đổi yêu cầu HTTP giữa trình duyệt và máy chủ. Điều này có thể giúp bạn hiểu cách ứng dụng hoạt động và xác định các lỗ hổng tiềm năng. Ví dụ, bạn có thể thay đổi yêu cầu GET thành yêu cầu POST hoặc sửa đổi các tham số trong yêu cầu để xem ứng dụng phản hồi như thế nào.

Xác định và Khai thác Lỗ hổng Web: Hiểu về các lỗ hổng web thông thường và cách chúng hoạt động có thể giúp bạn phát hiện các lỗ hổng tiềm năng trong một ứng dụng. Sau khi bạn xác định một lỗ hổng tiềm năng, bạn có thể sử dụng các kỹ thuật như nhập ký tự đặc biệt hoặc chuỗi để kiểm tra xem lỗ hổng có thể bị khai thác hay không.

Xác thực và Làm sạch Đầu vào: Luôn luôn xác thực và làm sạch đầu vào của người dùng để ngăn chặn các lỗ hổng như XSS và SQL injection. Sử dụng các phương pháp lập trình an toàn và kỹ thuật xác thực đầu vào chính xác để đảm bảo rằng dữ liệu được cung cấp bởi người dùng là an toàn.

Công cụ Kiểm tra Bảo mật: Sử dụng các công cụ kiểm tra bảo mật ứng dụng web như Burp Suite, OWASP ZAP hoặc Nmap để tự động quét lỗ hổng, xác định các lỗi bảo mật và thực hiện kiểm tra xâm nhập.

Cập nhật Thường xuyên: Theo dõi các lỗ hổng bảo mật, bản vá và các phương pháp tốt nhất mới nhất. Thường xuyên kiểm tra các cảnh báo bảo mật và theo dõi cộng đồng bảo mật để cập nhật về các mối đe dọa mới nổi và các kỹ thuật giảm thiểu.

Các ví dụ:

Khai thác SQL Injection:

  1. Giả sử bạn được cung cấp một biểu mẫu đăng nhập, và sau khi nhập một tên người dùng, ứng dụng web thực hiện truy vấn SQL như sau: SELECT * FROM users WHERE username = 'input_username';
  2. Bằng cách nhập ' OR '1'='1 vào trường tên người dùng, bạn có thể gửi truy vấn sau đến máy chủ: SELECT * FROM users WHERE username = '' OR '1'='1';
  3. Điều này sẽ trả về tất cả các bản ghi trong bảng người dùng, vì điều kiện '1'='1' luôn đúng.

Khai thác Cross-Site Scripting (XSS):

  1. Giả sử một trang web cho phép người dùng gửi bình luận và hiển thị chúng cho người dùng khác. Khi một người dùng gửi một bình luận, ứng dụng web hiển thị nội dung đó mà không làm sạch đầu vào. Nếu bạn nhập một bình luận chứa mã JavaScript độc hại như sau: <script>alert('XSS')script>.
  2. Khi người dùng khác xem bình luận của bạn, mã JavaScript độc hại sẽ được thực thi trong trình duyệt của họ và hiển thị hộp thoại cảnh báo "XSS Attack". Đây chỉ là một số ví dụ cơ bản về khai thác lỗ hổng web, và có nhiều kỹ thuật và phương pháp phức tạp hơn để khai thác các lỗ hổng này. Việc hiểu và áp dụng các biện pháp bảo mật cho ứng dụng web là rất quan trọng để ngăn chặn các cuộc tấn công và bảo vệ dữ liệu của người dùng.

Câu hỏi thường gặp:

GET và POST là hai loại yêu cầu HTTP khác nhau. Yêu cầu GET được sử dụng để lấy dữ liệu từ máy chủ, trong khi yêu cầu POST được sử dụng để gửi dữ liệu đến máy chủ. Về mặt bảo mật, một khác biệt quan trọng là dữ liệu được gửi trong yêu cầu GET được bao gồm trong URL, trong khi dữ liệu được gửi trong yêu cầu POST được bao gồm trong phần thân của yêu cầu và do đó không hiển thị trên URL hoặc trong lịch sử trình duyệt.

Một dấu hiệu phổ biến của lỗ hổng SQLi tiềm ẩn là khi ứng dụng trả về một thông báo lỗi khi bạn nhập các ký tự đặc biệt (như dấu nháy đơn) vào trường của biểu mẫu. Điều này có thể chỉ ra rằng ứng dụng đang trực tiếp tích hợp đầu vào của bạn vào truy vấn SQL mà không làm sạch đầu vào đó một cách đúng đắn. Tuy nhiên, không phải tất cả các ứng dụng đều hiển thị thông báo lỗi như vậy, vì vậy phương pháp này không hoàn toàn đảm bảo. Một cách đáng tin cậy hơn để xác định lỗ hổng SQLi là sử dụng một công cụ quét bảo mật web hoặc công cụ kiểm tra xâm nhập, có thể tự động hóa quá trình kiểm tra các lỗ hổng thông thường.

Cách hiệu quả nhất để bảo vệ chống lại lỗ hổng XSS là làm sạch đầu vào của người dùng một cách đúng đắn. Điều này có nghĩa là trước khi tích hợp đầu vào của người dùng vào một trang web, bạn nên loại bỏ hoặc tránh bất kỳ ký tự nào có ý nghĩa đặc biệt trong HTML, chẳng hạn như <, > và &. Điều này ngăn chặn bất kỳ đầu vào nào được hiểu là mã. Bạn cũng có thể sử dụng các tiêu đề HTTP, như Chính sách Bảo mật Nội dung (Content Security Policy - CSP), để hạn chế nơi các script có thể được tải từ đó, giúp giảm thiểu tác động của bất kỳ lỗ hổng XSS tiềm ẩn nào.

Sự khác biệt giữa XSS lưu trữ và XSS phản ánh nằm ở cách mà mã script độc hại được chuyển đến người bị tấn công. Trong cuộc tấn công XSS lưu trữ, mã script được lưu trữ vĩnh viễn trên máy chủ mục tiêu (ví dụ: trong cơ sở dữ liệu) và được phục vụ cho người dùng khi họ xem một trang cụ thể. Điều này có nghĩa là cuộc tấn công có thể ảnh hưởng đến bất kỳ người dùng nào xem trang đó. Trong cuộc tấn công XSS phản ánh, mã script được bao gồm trong một URL và chỉ được phục vụ cho người dùng nhấp vào liên kết độc hại. Điều này có nghĩa là cuộc tấn công chỉ ảnh hưởng đến người dùng nhấp vào liên kết, nhưng nó có thể dễ dàng hơn để thực hiện cuộc tấn công vì kẻ tấn công không cần lưu trữ mã script trên máy chủ.

Cookie là một đoạn dữ liệu nhỏ được lưu trữ trên máy tính của người dùng bởi trình duyệt web trong quá trình duyệt web. Cookie được thiết kế để làm cơ chế đáng tin cậy để các trang web ghi nhớ thông tin có trạng thái hoặc ghi lại hoạt động duyệt web của người dùng.

Chính sách Cùng nguồn (Same-Origin Policy) là một khái niệm bảo mật quan trọng được thực hiện bởi trình duyệt web để ngăn các đoạn mã được chứa trong một trang web truy cập hoặc tương tác với các tài nguyên từ một trang web khác nếu nguồn gốc của chúng (giao thức, cổng và máy chủ) không giống nhau.

Web shell là một đoạn mã độc hại được sử dụng bởi một kẻ tấn công với mục đích tăng cường và duy trì quyền truy cập liên tục trên một ứng dụng web đã bị xâm nhập. Một web shell không thể tấn công hoặc khai thác một lỗ hổng từ xa, vì vậy nó luôn là bước thứ hai trong một cuộc tấn công.

Cuộc tấn công điều hướng thư mục (còn được gọi là cuộc tấn công điều hướng đường dẫn) nhằm mục đích truy cập vào các tệp và thư mục được lưu trữ bên ngoài thư mục gốc của trang web. Bằng cách thao tác các biến tham chiếu tệp tin với chuỗi "dot-dot-slash (../)" hoặc các biến khác và sử dụng đường dẫn tuyệt đối, có thể có khả năng truy cập vào các tệp tin và thư mục tùy ý được lưu trữ trên hệ thống tệp tin, bao gồm mã nguồn ứng dụng, cấu hình và các tệp tin hệ thống quan trọng.

Cuộc tấn công CSRF có thể dẫn đến việc thực hiện các hành động trái phép thay mặt người bị tấn công. Kẻ tấn công lừa người dùng không biết rằng họ đang thực hiện các hành động không mong muốn trên một trang web, chẳng hạn như thay đổi cài đặt tài khoản, thực hiện giao dịch gian lận hoặc xóa dữ liệu. Để giảm thiểu lỗ hổng CSRF, ứng dụng web nên triển khai mã thông báo chống CSRF (anti-CSRF tokens) và tuân thủ các phương pháp tốt nhất về quản lý phiên.

Để giảm thiểu lỗ hổng XSS, ứng dụng web nên thực hiện xác thực đầu vào đúng đắn và mã hóa đầu ra. Xác thực đầu vào đảm bảo rằng dữ liệu được cung cấp bởi người dùng tuân thủ định dạng mong đợi, trong khi mã hóa đầu ra nên được sử dụng khi hiển thị nội dung do người dùng tạo ra để ngăn chặn việc thực thi mã độc.

Ứng dụng web nên áp dụng câu lệnh đã được chuẩn bị (prepared statements) hoặc truy vấn có tham số (parameterized queries), cho phép phân tách mã SQL và dữ liệu được cung cấp bởi người dùng. Câu lệnh đã được chuẩn bị đảm bảo rằng dữ liệu đầu vào từ người dùng được xem như dữ liệu thay vì mã thực thi, hiệu quả ngăn chặn các cuộc tấn công SQL injection.

Ứng dụng web có thể phòng vệ chống lại các cuộc tấn công SSRF bằng cách thực hiện kiểm tra dữ liệu đầu vào nghiêm ngặt và whitelist (danh sách trắng) các tài nguyên được phép. Họ cũng nên sử dụng tường lửa và các biện pháp bảo mạng để chặn các yêu cầu truy cập đến các tài nguyên nội bộ nhạy cảm. Thêm vào đó, triển khai các cấu hình an toàn cho máy chủ và hạn chế quyền truy cập máy chủ có thể giảm thiểu tác động của các lỗ hổng SSRF.

Bảo mật Mạng

Khái niệm:

Mạng là một khía cạnh cơ bản của bảo mật mạng và đóng một vai trò quan trọng trong các cuộc thi Capture The Flag (CTF). Mô-đun này tập trung vào những nguyên tắc cơ bản về mạng và giới thiệu cho người tham gia các công cụ và kỹ thuật quan trọng để tham gia hiệu quả trong các cuộc thi CTF.

Các kiến thức căn bản về mạng: Người tham gia cần hiểu về các kiến thức căn bản về mạng như mạng máy tính, bao gồm các mô hình OSI và TCP/IP, địa chỉ IP, phân mạng và các lớp mạng. Họ cần biết về các giao thức mạng phổ biến như TCP, UDP, HTTP, HTTPS, FTP, SSH và DNS, cũng như các thiết bị mạng như router, switch, tường lửa và vai trò quan trọng của chúng trong bảo mật mạng.

Phân tích và ghi lại lưu lượng mạng: Việc ghi lại và phân tích lưu lượng mạng là một kỹ năng quan trọng đối với người tham gia CTF. Họ nên học cách cài đặt và cấu hình các công cụ như Wireshark, cho phép họ ghi lại và phân tích các gói tin mạng. Họ nên khám phá các kỹ thuật ghi lại gói tin và hiểu cách áp dụng bộ lọc cho phân tích lưu lượng cụ thể. Bằng cách giải thích tiêu đề gói tin, xác định các giao thức và trích xuất thông tin quan trọng từ các gói tin đã ghi lại, người tham gia có thể phát hiện ra các lỗ hổng tiềm ẩn và thu được cái nhìn về mô hình giao tiếp mạng.

Quét và liệt kê mạng: Quét và liệt kê mạng là những kỹ thuật cần thiết cho người tham gia CTF. Bằng cách sử dụng các công cụ như Nmap, người tham gia có thể thực hiện quét mạng, tìm kiếm máy chủ và phát hiện dịch vụ và phiên bản. Họ nên thành thạo các kỹ thuật quét khác nhau, bao gồm quét kết nối TCP, quét SYN và quét UDP. Bằng cách liệt kê các dịch vụ, xác định các cổng mở và thu thập thông tin bằng cách sử dụng Nmap và các tập lệnh liệt kê, người tham gia có thể thu thập thông tin quý giá về các hệ thống mục tiêu.

Tấn công mạng: Hiểu về các lỗ hổng liên quan đến mạng là rất quan trọng đối với người tham gia nhằm khai thác các điểm yếu trong các hệ thống mục tiêu. Họ nên làm quen với các lỗ hổng như cấu hình sai, xác thực yếu và tràn bộ đệm. Khám phá Metasploit Framework có thể cung cấp cho họ cái nhìn về việc khai thác các lỗ hổng, truy cập từ xa vào hệ thống và thực hiện các hoạt động sau khai thác. Nên nghiên cứu các kỹ thuật khai thác như tạo payload, kỹ thuật xã hội hóa và tấn công phía máy khách.

Bảo mật mạng không dây: Mạng không dây là mục tiêu phổ biến trong các cuộc thi CTF và người tham gia phải am hiểu về các khái niệm bảo mật mạng không dây. Điều này bao gồm hiểu về SSID, các phương pháp mã hóa, cơ chế xác thực và tiêu chuẩn Wi-Fi. Việc xác định các cuộc tấn công không dây phổ biến như sniffing, rogue access points và việc đánh sập WEP/WPA/WPA2 là rất quan trọng. Người tham gia nên quen thuộc với các công cụ như Aircrack-ng, Reaver và Wireshark, giúp kiểm tra và bảo mật mạng không dây.

Mẹo và Kỹ thuật:

Ghi lại nhật ký để ghi chép quá trình khám phá mạng, quét và các nỗ lực khai thác để tham

khảo và học hỏi.

Hiểu về Môi trường Mục tiêu: Trước khi thực hiện khai thác mạng, tiến hành khám phá toàn diện để thu thập thông tin về cơ sở hạ tầng mạng, các dịch vụ, phiên bản và lỗ hổng tiềm năng của mục tiêu. Hiểu biết này giúp xác định các vector tấn công cụ thể và tạo ra các khai thác nhắm mục tiêu.

Cập nhật Kiến thức về Lỗ hổng và Khai thác: Cập nhật thông tin về các lỗ hổng và khai thác mới nhất để khai thác mạng hiệu quả. Theo dõi thường xuyên các thông báo bảo mật, cơ sở dữ liệu CVE (Common Vulnerabilities and Exposures) và các nguồn đáng tin cậy khác để cập nhật về lỗ hổng mới được phát hiện và khai thác tương ứng.

Các Ví dụ:

Ghi lại và Phân tích Lưu lượng Mạng bằng Wireshark

  1. Cài đặt Wireshark và bắt đầu ghi lại gói tin trên một giao diện mạng cụ thể.
  2. Áp dụng bộ lọc để ghi lại các địa chỉ IP, cổng hoặc giao thức cụ thể.
  3. Phân tích các gói tin đã ghi lại để hiểu các mô hình giao tiếp, giao thức được sử dụng và các lỗ hổng tiềm năng.

Quét Mạng bằng Nmap

  1. Xác định phạm vi địa chỉ IP của mạng mục tiêu.
  2. Thực hiện các kỹ thuật quét kết nối TCP, quét SYN và quét UDP bằng Nmap.
  3. Phân tích kết quả quét để xác định các cổng mở, dịch vụ đang chạy và các lỗ hổng tiềm năng.

Các câu hỏi thường gặp:

Kiến thức về mạng là rất quan trọng trong các cuộc thi CTF vì nó giúp người tham gia hiểu về giao thức mạng, xác định các lỗ hổng và khai thác những yếu điểm về an ninh dựa trên mạng.

Người tham gia CTF nên hiểu rõ về địa chỉ IP, subnetting, các giao thức mạng (TCP, UDP, HTTP, v.v.), các thiết bị mạng (router, switch, tường lửa) và an ninh mạng không dây.

Wireshark có thể được sử dụng để bắt lưu lượng mạng bằng cách chọn giao diện mạng thích hợp và áp dụng bộ lọc. Nó cho phép phân tích sâu về tiêu đề gói tin, giao thức và thông tin chi tiết được trích xuất từ các gói tin đã bắt được.

Nmap là một công cụ mạnh mẽ trong các cuộc thi CTF để quét mạng, phát hiện máy chủ và xác định dịch vụ. Nó cung cấp các kỹ thuật quét khác nhau (quét kết nối TCP, quét SYN, quét UDP) để xác định các cổng mở, dịch vụ đang chạy và các lỗ hổng tiềm năng.

Mạng không dây có thể được bảo mật trong các cuộc thi CTF bằng cách đảm bảo mã hóa đúng đắn (WPA2 hoặc cao hơn), cơ chế xác thực mạnh mẽ, tắt các dịch vụ không cần thiết, thường xuyên cập nhật firmware và giám sát các điểm truy cập giả mạo.

Các Lỗ hổng Nâng cao trong Ứng dụng Web

Khái niệm

Trong một cuộc thi Capture The Flag (CTF) tập trung vào bảo mật web, các người tham gia gặp phải nhiều lỗ hổng nâng cao trong ứng dụng web. Những lỗ hổng này có thể bị khai thác để truy cập trái phép, trích xuất thông tin nhạy cảm, thực thi mã từ xa hoặc thay đổi chức năng của ứng dụng. Một số lỗ hổng phổ biến trong ứng dụng web nâng cao bao gồm Server-Side Template Injection (SSTI), XML External Entity (XXE) Injection, Remote File Inclusion (RFI), hoặc Insecure Direct Object References (IDOR).

Server-Side Template Injection (SSTI): SSTI xảy ra khi kẻ tấn công có thể tiêm mã độc hại vào một công cụ mô-đun mẫu phía máy chủ. Điều này cho phép họ thực thi các lệnh tùy ý hoặc truy cập thông tin nhạy cảm được lưu trữ trên máy chủ. Khai thác SSTI thường liên quan đến việc tiêm mã vào các trường nhập dữ liệu người dùng, sau đó được hiển thị như một phần của mẫu. Mã tiêm vào được thực thi trong ngữ cảnh của máy chủ, cho phép kẻ tấn công thực thi các lệnh tùy ý hoặc truy cập tài nguyên phía máy chủ.

XML External Entity (XXE) Injection: XXE Injection tận dụng việc xử lý đầu vào XML bởi ứng dụng. Bằng cách thao tác các thực thể XML và các tham chiếu bên ngoài, kẻ tấn công có thể tiết lộ các tệp nội bộ, thực hiện tấn công chèn yêu cầu phía máy chủ (SSRF) hoặc tiêu thụ tài nguyên quá mức, dẫn đến từ chối dịch vụ. Lỗ hổng XXE thường tồn tại khi một ứng dụng phân tích đầu vào XML mà không tắt phân giải thực thể bên ngoài.

Remote File Inclusion (RFI): RFI cho phép kẻ tấn công bao gồm các tệp từ xa trên máy chủ web bằng cách khai thác một lỗ hổng trong cơ chế bao gồm tệp của ứng dụng. Bằng cách tiêm một URL trỏ đến một tệp độc hại, kẻ tấn công có thể thực thi mã tùy ý hoặc tiết lộ thông tin nhạy cảm được lưu trữ trên máy chủ từ xa. RFI thường xuất hiện trong các ứng dụng web mà bao gồm các tệp động dựa trên đầu vào do người dùng cung cấp, chẳng hạn như một tham số tệp trong URL.

Insecure Direct Object References (IDOR): IDOR xảy ra khi một ứng dụng tiết lộ các đối tượng hoặc tài nguyên nội bộ nhạy cảm trực tiếp thông qua đầu vào người dùng có thể kiểm soát. Kẻ tấn công có thể thao túng các tham chiếu này để truy cập dữ liệu không được ủy quyền hoặc thực hiện các hành động phải bị hạn chế. Các lỗ hổng IDOR thường xảy ra khi một ứng dụng chỉ phụ thuộc vào kiểm tra phía máy khách để xác thực, cho phép kẻ tấn công vượt qua những kiểm tra đó và truy cập hoặc thay đổi thông tin nhạy cảm.

Mẹo và Thủ thuật

Thao tác Khai thác và Bỏ qua Kỹ thuật Kiểm tra Đầu vào: Tìm cách để bỏ qua các kiểm tra xác thực đầu vào, như bỏ qua bộ lọc, né tránh các hạn chế độ dài đầu vào hoặc tìm cách thay thế để tiêm các tải lừa đảo vào.

Khai thác Lỗ hổng Đặc thù Ngữ cảnh: Hiểu ngữ cảnh mà đầu vào người dùng được sử dụng, như các truy vấn SQL, thực thi lệnh hoặc hiển thị mẫu. Khai thác các lỗ hổng cụ thể liên quan đến từng ngữ cảnh, chẳng hạn như SQL injection, lệnh injection hoặc SSTI, để truy cập trái phép, thực thi mã tùy ý hoặc trích xuất thông tin nhạy cảm.

Nhắm vào Các Cấu hình Sai và Thiết lập Yếu của Máy chủ: Xác định các cấu hình không an toàn trong máy chủ web, máy chủ ứng dụng và các framework. Khai thác các cấu hình sai, vô hiệu hóa các tính năng bảo mật và tận dụng các thiết lập yếu để truy cập trái phép, tăng quyền truy cập hoặc né qua các điều khiển bảo mật. Tìm kiếm các lỗ hổng đã biết trong môi trường mục tiêu.

Tăng Quyền Truy cập Đặc quyền: Sau khi đạt được quyền truy cập ban đầu, tập trung vào việc tăng quyền truy cập trong hệ thống hoặc ứng dụng mục tiêu. Tìm kiếm các cấu hình sai, kiểm soát truy cập yếu hoặc lỗ hổng cho phép tăng quyền truy cập. Bằng cách đạt được quyền truy cập cao hơn, bạn có thể di chuyển ngang qua mạng hoặc truy cập vào tài nguyên quan trọng.

Khai thác Vi phạm Nguyên tắc Quyền ít nhất: Xác định các tình huống mà nguyên tắc quyền ít nhất không được thực hiện đúng cách. Khai thác các tình huống mà các thành phần ứng dụng có quyền hạn quá mức hoặc quyền truy cập không cần thiết. Bằng cách khai thác các vi phạm này, bạn có thể truy cập vào dữ liệu nhạy cảm, thay đổi các cấu hình quan trọng hoặc thực thi các hành động có đặc quyền.

Các Ví dụ

Khai thác SSTI: Kẻ tấn công xác định một ứng dụng web sử dụng một công cụ mô-đun mẫu có lỗ hổng và tiêm mã độc hại vào trường nhập dữ liệu người dùng. Mã này được thực thi bởi máy chủ, cho phép kẻ tấn công truy xuất dữ liệu nhạy cảm, thực thi các lệnh tùy ý, hoặc thậm chí thực hiện thực thi mã từ xa trên máy chủ.

  1. Thực thi Mã từ xa (RCE): Khai thác lỗ hổng SSTI cho phép thực thi mã, kẻ tấn công có thể tiêm mã độc hại vào mẫu, dẫn đến việc thực thi mã từ xa trên máy chủ. Điều này có thể được thực hiện bằng cách tiêm các đoạn mã như {{ 7*'7' }} hoặc {{ os.system('lệnh') }} để thực thi các lệnh tùy ý và chiếm quyền điều khiển máy chủ.
  2. Tiết lộ Thông tin: Bằng cách tận dụng SSTI, kẻ tấn công có thể trích xuất thông tin nhạy cảm từ máy chủ. Họ có thể tiêm mã để truy xuất và hiển thị các tệp phía máy chủ, nội dung cơ sở dữ liệu hoặc biến môi trường. Ví dụ, tiêm {{ config }} hoặc {{ globals }} có thể tiết lộ chi tiết cấu hình hoặc dữ liệu máy chủ nội bộ.

Sự Tiêm XXE: Bằng cách thao tác các trường đầu vào XML trong ứng dụng, kẻ tấn công kích hoạt một lỗ hổng XXE. Điều này cho phép họ truy cập vào các tệp nội bộ, thực hiện các cuộc tấn công SSRF hoặc tiêu thụ tài nguyên quá mức, dẫn đến từ chối dịch vụ.

Cuộc Tấn công RFI: Khai thác lỗ hổng trong cơ chế bao gồm tệp của ứng dụng web, kẻ tấn công tiêm một URL trỏ đến một tệp độc hại được lưu trữ trên máy chủ từ xa. Ứng dụng bao gồm tệp này, thực thi mã của kẻ tấn công và có thể gây nguy hiểm cho máy chủ hoặc trích xuất dữ liệu nhạy cảm. Kẻ tấn công có thể bao gồm các tệp ngoài lưu trữ trên máy chủ của họ. Họ có thể tiêm mã để truy xuất và thực thi các tệp tùy ý, dẫn đến các lỗ hổng RFI từ xa. Ví dụ, tiêm {{ include('/đường/dẫn/đến/tệp/của/kẻ/tấn/công') }} có thể thực thi mã được điều khiển bởi kẻ tấn công.

Các Câu hỏi Thường gặp

Tìm kiếm đầu vào người dùng có thể kiểm soát được được tiêm trực tiếp vào các mẫu hoặc công cụ mô-đun mẫu. Kiểm tra các ngữ cảnh và công cụ mô-đun mẫu khác nhau để xác định các điểm tiêm nạp tiềm năng. Ngoài ra, thử tiêm cú pháp hoặc tải lừa đảo cụ thể cho mỗi mẫu để xem liệu chúng có được thực thi như dự kiến hay không.

Sử dụng các tải lừa đảo XML độc hại chứa các khai báo thực thể bên ngoài để truy xuất các tệp nhạy cảm, thực hiện các cuộc tấn công SSRF hoặc khởi động các cuộc tấn công DoS. Ngoài ra, khám phá các kỹ thuật như mở rộng thực thể tham số, XXE qua SOAP/WSDL hoặc XXE qua chức năng tải lên tệp dựa trên XML.

Khai thác lỗ hổng RFI để bao gồm mã độc hại từ nguồn bên ngoài, chẳng hạn như các máy chủ từ xa hoặc các tệp do kẻ tấn công điều khiển. Điều này có thể được sử dụng để thực thi các lệnh tùy ý, đạt được quyền truy cập không ủy quyền hoặc chuyển hướng sang các hệ thống khác trong mạng mục tiêu.

Xác định các điểm cuối không xác thực hoặc được xác thực yếu dựa trên tham chiếu đối tượng. Thao túng các tham số hoặc thay đổi các định danh đối tượng để truy cập vào các tài nguyên không được ủy quyền, tăng cường đặc quyền truy cập hoặc bypass kiểm soát truy cập. Khám phá các API hoặc chức năng ẩn mà có thể có các cơ chế kiểm soát truy cập bị bỏ qua.

Khai thác Tệp nhị phân

Khái niệm

Khai thác tệp nhị phân là một lĩnh vực trong an ninh mạng tập trung vào việc xác định và khai thác lỗ hổng trong các tệp nhị phân, chẳng hạn như các chương trình thực thi hoặc dịch vụ hệ thống. Nó liên quan đến việc hiểu về cấu trúc, bố cục bộ nhớ và luồng thực thi của các tệp nhị phân. Bằng cách tận dụng các điểm yếu trong mã hoặc thiết kế, kẻ tấn công có thể tiếp cận trái phép, kiểm soát thực thi chương trình hoặc trích xuất thông tin nhạy cảm.

Tràn bộ đệm: Tràn bộ đệm xảy ra khi một chương trình ghi dữ liệu vượt quá giới hạn của một bộ đệm, dẫn đến lỗi xáo trộn bộ nhớ. Bằng cách tinh vi tạo ra đầu vào, kẻ tấn công có thể ghi đè lên các khu vực bộ nhớ kế cận, bao gồm con trỏ hàm hoặc địa chỉ trả về, để chiếm đoạt luồng chương trình và thực thi mã tùy ý.

Tấn công dựa trên ngăn xếp: Tấn công dựa trên ngăn xếp khai thác các lỗ hổng liên quan đến bộ nhớ ngăn xếp của chương trình. Các kỹ thuật như nghiền ngăn xếp hoặc lập trình dựa trên việc trả về (ROP) liên quan đến việc ghi đè ngăn xếp để điều khiển thực thi chương trình. Kẻ tấn công xây dựng một chuỗi các tiện ích (đoạn mã nhỏ) mà điều hướng luồng điều khiển và thực thi các hành động mong muốn.

Khai thác lỗi chuỗi định dạng: Lỗ hổng chuỗi định dạng xảy ra khi một chương trình sử dụng dữ liệu do người dùng điều khiển trong hàm chuỗi định dạng mà không có kiểm tra đúng đắn. Kẻ tấn công có thể khai thác điểm yếu này để đọc hoặc ghi vào các vị trí bộ nhớ tùy ý, tiết lộ thông tin nhạy cảm hoặc thực thi mã tùy ý.

Khai thác vùng nhớ heap: Các tấn công dựa trên vùng nhớ heap tập trung vào các lỗ hổng trong cơ chế phân bổ bộ nhớ động. Các kỹ thuật như tràn vùng nhớ heap, sử dụng sau khi được giải phóng hoặc tấn công double-free thao tác các cấu trúc dữ liệu heap để kiểm soát hành vi chương trình hoặc trích xuất thông tin nhạy cảm.

Tiêm shellcode: Shellcode: là một đoạn mã nhỏ mà kẻ tấn công tiêm vào các chương trình có lỗ hổng để truy cập từ xa hoặc thực hiện các hành động độc hại. Bằng cách khai thác các lỗ hổng, kẻ tấn công có thể tiêm và thực thi shellcode của riêng mình, hiệu quả kiểm soát hệ thống bị xâm nhập.

Đảo ngược mã nhị phân: Đảo ngược mã nhị phân liên quan đến phân tích các tệp nhị phân để hiểu về cấu trúc, hành vi và lỗ hổng của chúng. Bằng cách giải mã và giải tham vấn tệp nhị phân, những người nghiên cứu an ninh có thể khám phá các chức năng ẩn, tìm ra các điểm yếu phần mềm hoặc khám phá các tính năng chưa được tài liệu hóa có thể bị khai thác.

Nhược điểm mật mã: Khai thác tệp nhị phân cũng có thể liên quan đến việc xác định nhược điểm trong các thuật toán hoặc cài đặt mật mã. Bằng cách khai thác các lỗ hổng trong mã mật mã, kẻ tấn công có thể bypass kiểm soát an ninh, khôi phục lại khả năng mã hóa.

Mẹo và Kỹ thuật:

Fuzzing: Fuzzing là một kỹ thuật trong đó các công cụ tự động tạo ra một lượng lớn các đầu vào ngẫu nhiên hoặc được tạo riêng để kiểm tra tính ổn định của một tệp nhị phân. Nó có thể giúp xác định các hành vi không mong đợi, sự sụp đổ hoặc các lỗ hổng tiềm năng.

Phân tích Tĩnh và Động: Sử dụng các công cụ phân tích tĩnh để phân tích mã nguồn hoặc tệp nhị phân đã được dịch ngược để tìm các lỗ hổng tiềm năng. Phân tích động bao gồm chạy các tệp nhị phân trong môi trường kiểm soát và theo dõi hành vi của chúng, cho phép phát hiện các lỗ hổng thời gian chạy.

Các Ví dụ

Fuzzing: Đây là quy trình fuzzing có thể được thực hiện:

  1. Xác định Các Đầu Vào Fuzzing: Xác định các đầu vào mà chương trình máy chủ chấp nhận. Các đầu vào này có thể bao gồm các gói tin mạng, các đối số dòng lệnh hoặc các tệp cấu hình.
  2. Tạo Một Fuzzer: Phát triển hoặc sử dụng một công cụ fuzzing để tạo ra một lượng lớn các đầu vào ngẫu nhiên hoặc được tạo riêng dựa trên các đầu vào đã được xác định. Các công cụ fuzzing thường sử dụng các kỹ thuật như fuzzing dựa trên biến đổi hoặc fuzzing dựa trên sinh để tạo ra một tập hợp đa dạng các đầu vào.
  3. Thực Thi Fuzzer: Chạy fuzzer, nó sẽ gửi các đầu vào đã được tạo ra đến chương trình máy chủ. Fuzzer sẽ thay đổi các đầu vào một cách có hệ thống, thay đổi chúng một chút hoặc đưa vào các giá trị không mong đợi.
  4. Giám sát Chương Trình Máy Chủ: Giám sát chương trình máy chủ trong khi fuzzer đang chạy. Tìm kiếm sự sụp đổ, hành vi không mong đợi hoặc các điều kiện lỗi được kích hoạt bởi các đầu vào đã được fuzzed.
  5. Phân tích Kết quả: Sau khi quá trình fuzzing hoàn thành, phân tích kết quả để xác định các lỗ hổng tiềm năng. Sự sụp đổ, các ngoại lệ hoặc hành vi không mong đợi có thể chỉ ra sự tồn tại của lỗ hổng bảo mật hoặc yếu điểm trong chương trình.

Khai thác tràn bộ đệm: Bằng cách cẩn thận tạo ra đầu vào vượt quá giới hạn của một bộ đệm, kẻ tấn công có thể ghi đè lên các vị trí bộ nhớ quan trọng, như địa chỉ trả về trên ngăn xếp. Điều này cho phép họ chuyển hướng thực thi chương trình sang mã tùy ý và kiểm soát hệ thống. Hãy xem ví dụ sau đây về cách một tràn bộ đệm có thể xảy ra: #include <stdio.h> void vulnerableFunction() { char buffer[5]; printf("Enter your name: "); gets(buffer); // This function is vulnerable to buffer overflow printf("Hello, %s!\n", buffer); } int main() { vulnerableFunction(); return 0; }

Trong ví dụ này, hàm vulnerableFunction() đọc đầu vào từ người dùng bằng cách sử dụng hàm gets() và lưu trữ nó trong một bộ đệm với kích thước 5 ký tự. Bây giờ, hãy xem cách một tràn bộ đệm có thể xảy ra:

  1. Thực thi: Khi chương trình được thực thi, người dùng được nhắc nhập tên của họ.
  2. Đầu vào: Người dùng quyết định nhập một tên dài hơn kích thước của bộ đệm. Ví dụ, họ nhập "JohnDoeIsAwesome".
  3. Tràn Bộ đệm: Vì hàm gets() không thực hiện kiểm tra giới hạn, nó sao chép nguyên nhân của người dùng vào bộ đệm. Trong trường hợp này, đầu vào "JohnDoeIsAwesome" vượt quá khả năng của bộ đệm 5 ký tự, dẫn đến tràn bộ đệm.
  4. Hậu quả: Các ký tự vượt quá sẽ tràn vào các vị trí bộ nhớ lân cận, có thể ghi đè lên các dữ liệu quan trọng khác, chẳng hạn như địa chỉ trả về của hàm, biến hoặc cấu trúc kiểm soát. Điều này có thể dẫn đến hành vi không mong đợi, sự sụp đổ hoặc thậm chí cho phép kẻ tấn công thực thi mã tùy ý.

Tràn bộ đệm là một rủi ro bảo mật đáng kể vì chúng có thể được khai thác bởi kẻ tấn công để truy cập trái phép, thực thi mã độc hại hoặc nâng cao đặc quyền trên một hệ thống.

Để giảm thiểu các lỗ hổng tràn bộ đệm, rất quan trọng để sử dụng các phương pháp lập trình an toàn, chẳng hạn như sử dụng các hàm như fgets() thay vì gets(), thực hiện kiểm tra và làm sạch đầu vào một cách đúng đắn và sử dụng các phương pháp an toàn hơn như bộ đệm có kích thước động hoặc các hàm chuỗi an toàn mà áp dụng giới hạn kích thước bộ đệm.

Câu hỏi thường gặp:

Fuzzing là một kỹ thuật được sử dụng để kiểm tra tính mạnh mẽ của một tệp nhị phân bằng cách cung cấp một lượng lớn đầu vào ngẫu nhiên hoặc đặc biệt. Các công cụ fuzzing tự động tạo và đưa các đầu vào này vào chương trình mục tiêu, nhằm kích hoạt sự sập đổ hoặc hành vi không mong đợi có thể chỉ ra các lỗ hổng tiềm năng.

Lỗ hổng tràn bộ đệm có thể biểu hiện dưới dạng sự sập đổ hoặc hành vi không mong muốn của chương trình. Các công cụ như fuzzers hoặc các công cụ phân tích tĩnh có thể giúp xác định các lỗ hổng tràn bộ đệm tiềm năng bằng cách tạo ra lượng lớn đầu vào ngẫu nhiên hoặc đặc biệt và phân tích mã nguồn để tìm các hoạt động bộ nhớ không an toàn.

Bảo vệ khỏi các cuộc tấn công tràn bộ đệm bao gồm việc áp dụng các phương pháp lập trình an toàn như kiểm tra đầu vào, sử dụng đúng ranh giới bộ đệm và triển khai các biện pháp như canaries của ngăn xếp hoặc ngăn xếp không thực thi. Ngôn ngữ như Rust hoặc C++ với con trỏ thông minh cũng có thể cung cấp tính an toàn bộ nhớ bổ sung.

ROP là một kỹ thuật được sử dụng trong khai thác tệp nhị phân khi các biện pháp như canaries của ngăn xếp hoặc ngăn xếp không thực thi có mặt. Kẻ tấn công xây dựng một chuỗi các đoạn mã hiện có (gadgets) kết thúc bằng một lệnh "ret" để điều chỉnh việc thực thi chương trình mà không cần thêm mã mới.

Bảo vệ khỏi các cuộc tấn công ROP bao gồm triển khai các biện pháp bảo mật như làm ngẫu nhiên vị trí không gian địa chỉ (ASLR), canaries của ngăn xếp hoặc các cơ chế Integrity Flow Control (CFI). Những kỹ thuật này làm cho việc xây dựng chuỗi ROP hợp lệ và thực thi mã tùy ý của kẻ tấn công khó hơn.

Các lỗ hổng mật mã phổ biến bao gồm thuật toán mã hóa yếu hoặc lỗi cũ, quản lý khóa không đúng, thiếu mã hóa, tấn công kênh phụ hoặc lỗi triển khai. Tuân thủ các phương pháp tốt nhất, chẳng hạn như sử dụng thuật toán và thư viện được khuyến nghị, rất quan trọng để giảm thiểu các lỗ hổng mật mã.

Mật mã học

Khái niệm

Mật mã học: Đây là việc thực hành và nghiên cứu các kỹ thuật để bảo mật thông tin trong môi trường có các đối thủ. Nó liên quan đến việc xây dựng và phân tích các giao thức ngăn chặn các bên thứ ba hoặc công chúng đọc các tin nhắn riêng tư.

Mã hóa đối xứng: Đây là một loại mã hóa trong đó cùng một khóa được sử dụng cho cả mã hóa và giải mã. Hãy tưởng tượng bạn có một chiếc hộp với một ổ khóa và một cái khóa. Bạn đặt một tin nhắn vào trong hộp, khóa nó và gửi nó cho người khác. Họ sử dụng cùng một khóa để mở hộp và đọc tin nhắn. Trong phân tích này, hộp là thuật toán mã hóa, khóa là khóa mã hóa, và tin nhắn là dữ liệu được mã hóa. Các ví dụ về thuật toán mã hóa đối xứng bao gồm AES và DES.

Mã hóa không đối xứng: Đây là một loại mã hóa trong đó sử dụng hai khóa khác nhau - một để mã hóa và một để giải mã. Hãy tưởng tượng một hòm thư với một khe thả và một cái khóa. Bất kỳ ai cũng có thể đặt thư vào khe (mã hóa), nhưng chỉ người có chìa khóa mới có thể mở hòm và đọc thư (giải mã). Trong trường hợp này, hòm thư là thuật toán mã hóa, khe là khóa công khai và chìa khóa là khóa bí mật. Các ví dụ về thuật toán mã hóa không đối xứng bao gồm RSA và ECC.

Hàm Băm (Hashing): Đây là một quá trình lấy đầu vào (hoặc 'tin nhắn') và trả về một chuỗi byte có kích thước cố định, thông thường là một 'tóm tắt' duy nhất cho mỗi đầu vào duy nhất. Đó là như một dấu vân tay cho dữ liệu. Ngay cả một thay đổi nhỏ trong đầu vào cũng sẽ tạo ra một sự thay đổi đáng kể trong đầu ra sao cho giá trị băm mới không giống giá trị băm cũ. Ngoài ra, nó là một hàm một chiều, bạn không thể lấy lại được dữ liệu gốc từ băm. Các hàm băm thông thường bao gồm MD5, SHA-1 và SHA-256.

Chữ ký số: Đây là một phương pháp toán học để xác minh tính xác thực của các tin nhắn số hoặc tài liệu số. Đó giống như một con dấu sáp trên một lá thư; con dấu là duy nhất cho người đã đặt nó (nó được tạo ra bằng khóa bí mật của họ), và nó có thể được xác minh bởi bất kỳ ai có quyền truy cập vào khóa công khai.

Các mẹo và kỹ thuật

Hiểu Thuật toán Phổ biến: Hiểu cách hoạt động của các thuật toán mã hóa và băm thông thường có thể rất hữu ích trong các thách thức mật mã học. Điều này bao gồm cả cách hoạt động và cách tấn công lên chúng.

Quản lý Khóa: Với cả mã hóa đối xứng và mã hóa không đối xứng, việc giữ an toàn cho các khóa của bạn là rất quan trọng. Nếu ai đó có quyền truy cập vào khóa của bạn, họ có thể giải mã dữ liệu của bạn. Vì vậy, không chia sẻ khóa của bạn với bất kỳ ai và lưu trữ chúng ở một vị trí an toàn.

Lựa chọn Thuật toán: Không phải tất cả các thuật toán mã hóa đều được tạo bằng nhau. Một số thuật toán an toàn hơn các thuật toán khác. Khi lựa chọn thuật toán để sử dụng cho mã hóa, hãy xem xét các yếu tố như độ dài khóa của nó (khóa dài thường an toàn hơn) và xem liệu nó đã được thử nghiệm và xem xét rộng rãi bởi cộng đồng bảo mật hay không.

Sử dụng Hàm Băm: Hàm băm có thể được sử dụng cho nhiều mục đích, như kiểm tra tính toàn vẹn của dữ liệu (đảm bảo nó không bị can thiệp trong quá trình truyền) và lưu trữ mật khẩu một cách an toàn. Khi lưu trữ mật khẩu, luôn luôn sử dụng "muối" (dữ liệu ngẫu nhiên được thêm vào đầu vào) để ngăn người tấn công sử dụng các bảng tính đã tính trước để phá mã hóa.

Tìm Kiếm Điểm Yếu: Nhiều thách thức mật mã học trong CTF liên quan đến tìm và khai thác điểm yếu trong các hệ thống mật mã hóa. Điều này có thể là một khóa yếu, một lỗi trong cách thuật toán được triển khai hoặc một sai sót trong cách hệ thống được sử dụng.

Các ví dụ:

Mã hóa đối xứng với AES:

  1. Giả sử bạn có một mảnh dữ liệu, chẳng hạn như một tệp văn bản, mà bạn muốn mã hóa. Bạn có thể sử dụng công cụ như OpenSSL để thực hiện điều này.
  2. Đầu tiên, bạn sẽ tạo một khóa. Với OpenSSL, bạn có thể làm điều này với lệnh openssl enc -aes-256-cbc -k secret -P -md sha1.
  3. Lệnh này cho OpenSSL biết sử dụng thuật toán AES với một khóa 256 bit và chế độ CBC, sử dụng "secret" như cụm từ để tạo khóa, xuất ra khóa, IV và muối (với -P) và sử dụng SHA1 cho hàm băm được sử dụng trong quá trình tạo khóa.
  4. Sau khi bạn có khóa của mình, bạn có thể sử dụng nó để mã hóa dữ liệu của mình với lệnh openssl enc -aes-256-cbc -in myfile.txt -out myfile.enc -pass file:/path/to/keyfile.
  5. Lệnh này cho OpenSSL mã hóa tệp myfile.txt bằng AES trong chế độ CBC và xuất kết quả vào myfile.enc, sử dụng khóa được lưu trữ trong keyfile.

Xác minh Chữ ký số với RSA:

  1. Giả sử bạn nhận được một chữ ký số cùng với một tin nhắn và bạn muốn xác minh rằng chữ ký là hợp lệ. Bạn có thể làm điều này với công cụ như OpenSSL.
  2. Trước tiên, bạn cần có được khóa công khai của người được cho là đã gửi tin nhắn. Điều này nên được chia sẻ với bạn một cách an toàn.
  3. Khi bạn có khóa công khai, bạn có thể sử dụng nó để xác minh chữ ký với lệnh openssl dgst -verify pubkey.pem -signature sigfile -sha256 msgfile.
  4. Lệnh này cho OpenSSL biết sử dụng khóa công khai được lưu trữ trong pubkey.pem để xác minh chữ ký trong sigfile so với tin nhắn trong msgfile, sử dụng SHA256 làm hàm băm.
  5. Nếu chữ ký hợp lệ, OpenSSL sẽ xuất ra "Verified OK". Nếu chữ ký không hợp lệ, OpenSSL sẽ xuất ra "Verification Failure".

Giải mã một Mật mã Caesar:

  1. Giả sử bạn được cung cấp một chuỗi văn bản đã được mã hóa bằng Mật mã Caesar, một loại mã thay thế trong đó mỗi chữ cái trong văn bản gốc được 'di chuyển' một số lượng nhất định sang phải trong bảng chữ cái.
  2. Để giải được mã này, bạn có thể viết một đoạn mã đơn giản để thử tất cả các di chuyển có thể và xem di chuyển nào dẫn đến văn bản có ý nghĩa. Dưới đây là cách bạn có thể làm điều này bằng Python:
code

Phá vỡ Mật mã XOR đơn giản:

  1. Giả sử bạn nhận được một chuỗi văn bản đã được mã hóa bằng một mật mã XOR đơn giản, trong đó mỗi byte trong văn bản gốc đã được XOR với một khóa có kích thước một byte.
  2. Nếu bạn biết một số thông tin về văn bản gốc (ví dụ: nó là văn bản tiếng Anh), bạn có thể thử XOR từng byte của văn bản đã mã hóa với mỗi byte có thể và kiểm tra xem trường hợp nào dẫn đến văn bản gốc có ý nghĩa.
  3. Dưới đây là cách bạn có thể làm điều này bằng Python:
code

Các câu hỏi thường gặp

Mặc dù cả mã hóa và băm được sử dụng để biến đổi dữ liệu, khác biệt chính là mã hóa có thể đảo ngược (bạn có thể lấy lại dữ liệu gốc bằng cách giải mã), trong khi băm không thể (sau khi dữ liệu được băm, bạn không thể lấy lại dữ liệu gốc). Hơn nữa, mã hóa yêu cầu một khóa, trong khi băm không yêu cầu.

Nonce là một số được sử dụng một lần. Trong mật mã học, nó thường được sử dụng như một bộ đếm hoặc một số ngẫu nhiên hoặc giả ngẫu nhiên trong giao tiếp mật mã hóa để đảm bảo rằng các giao tiếp cũ không thể được tái sử dụng trong các cuộc tấn công phát lại.

Tấn công Brute force là một phương pháp thử và sai, trong đó kẻ tấn công thử tất cả các kết hợp có thể để tìm ra kết quả chính xác. Trong mật mã học, điều này có thể bao gồm việc thử tất cả các khóa có thể để giải mã một tin nhắn đã được mã hóa.

Bảng rainbow là một bảng đã được tính toán trước để lưu vào bộ nhớ cache đầu ra của các hàm băm mật mã, thường được sử dụng để phá mật khẩu. Nó cung cấp một sự cân đối giữa thời gian cần để phá một mật khẩu và lượng bộ nhớ máy tính yêu cầu.

Cơ sở hạ tầng Khóa công khai (PKI) là một tập hợp các vai trò, chính sách, phần cứng, phần mềm và thủ tục cần thiết để tạo, quản lý, phân phối, sử dụng, lưu trữ và thu hồi các chứng chỉ số và quản lý mã hóa khóa công khai. Nó được sử dụng trong mã hóa không đối xứng để quản lý khóa và chứng chỉ số kỹ thuật số, cho phép sử dụng các công nghệ như chữ ký số và mã hóa trên tập người dùng lớn.

Mật mã khối và mật mã dòng là hai loại thuật toán mã hóa. Mật mã khối mã hóa dữ liệu thành các khối có kích thước cố định (như 128 hoặc 256 bit), trong khi mật mã dòng mã hóa dữ liệu từng bit hoặc byte một. Mỗi loại có những ưu điểm và nhược điểm riêng và phù hợp cho các loại nhiệm vụ khác nhau.

Chứng chỉ số là một tài liệu số kết nối một khóa công khai với một danh tính (như một cá nhân hoặc tổ chức). Chứng chỉ được cấp bởi một đơn vị tin cậy gọi là một cơ quan chứng thực (CA), đảm bảo tính xác thực của chủ sở hữu chứng chỉ. Chứng chỉ số được sử dụng trong nhiều khía cạnh của bảo mật mạng, bao gồm SSL/TLS để bảo mật lưu lượng web.

Chữ ký số là một cách để xác minh tính xác thực và tính toàn vẹn của một tin nhắn hoặc tài liệu số, trong khi chứng chỉ số là một cách để xác minh danh tính được liên kết với một khóa công khai. Bạn có thể tưởng tượng chữ ký số như một con dấu trên một lá thư để xác minh rằng nó chưa bị xâm phạm và chứng chỉ số như một hộ chiếu để xác minh danh tính của người nắm giữ.

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

Khái niệm

Kỹ thuật dịch ngược: Đây là quá trình phân tích một đối tượng để hiểu cách nó hoạt động. Trong ngữ cảnh của CTFs, dịch ngược mã thường liên quan đến việc xem xét một chương trình để hiểu logic của nó mà không có quyền truy cập vào mã nguồn. Điều này có thể bao gồm nghiên cứu mã nhị phân của chương trình, quan sát hành vi của nó hoặc thay đổi quá trình thực thi của nó. Điều này có thể được thực hiện với nhiều mục đích, bao gồm tìm và tận dụng các lỗ hổng trong phần mềm, loại bỏ bảo vệ bản sao hoặc tạo ra một phần mềm tương tự.

Ngôn ngữ hợp ngữ: Đây là một ngôn ngữ lập trình cấp thấp tương ứng chặt chẽ với các chỉ thị mã máy của một kiến trúc CPU cụ thể. Thông thường, nó được sử dụng trong dịch ngược mã nguồn vì các chương trình đã được biên dịch được dịch thành mã máy, có thể được biểu diễn dưới dạng ngôn ngữ hợp ngữ.

Phân tách mã: Đây là quá trình dịch mã máy thành ngôn ngữ hợp ngữ, dễ đọc hơn đối với con người. Các công cụ phân tách mã được sử dụng cho quá trình này.

Công cụ phân tách mã: Đây là một công cụ chuyển đổi mã máy trở lại dạng đọc được hơn (như ngôn ngữ hợp ngữ). Điều này có thể giúp dễ hiểu hơn về logic của chương trình.

Gỡ lỗi: Đây là quá trình tìm và sửa lỗi trong phần mềm. Các công cụ gỡ lỗi cho phép bạn thực thi chương trình từng bước, tạm dừng thực thi tại các điểm nhất định, xem giá trị của biến và nhiều hơn nữa.

Công cụ gỡ lỗi: Đây là một công cụ cho phép bạn xem xét quá trình thực thi của một chương trình từng dòng. Bạn có thể sử dụng công cụ gỡ lỗi để đặt các điểm dừng (điểm mà chương trình sẽ dừng lại), thực thi chương trình từng chỉ thị một và xem giá trị của biến tại các điểm khác nhau trong chương trình.

Khai thác Nhị phân: Đây là một loại thách thức CTF nơi mục tiêu thường là khai thác một lỗ hổng trong một chương trình nhị phân để làm cho nó thực hiện một số thứ mà nó không được thiết kế để làm, chẳng hạn như thực thi mã tùy ý hoặc tiết lộ một cờ.

Các mẹo và kỹ thuật

Hiểu Rõ Công cụ: Có rất nhiều công cụ có thể hỗ trợ dịch ngược mã nguồn, bao gồm các công cụ phân tách mã, công cụ gỡ lỗi và công cụ dịch ngược. Hiểu rõ cách sử dụng những công cụ này có thể giúp rất nhiều.

Hiểu Hợp ngữ: Học cách đọc ngôn ngữ hợp ngữ có thể khó khăn, nhưng nó rất quan trọng trong đảo ngược mã nguồn. Bắt đầu bằng việc học các chỉ thị cơ bản (như MOV, ADD, SUB, JMP, v.v.), và sau đó chuyển sang các khái niệm phức tạp hơn như vòng lặp và gọi hàm. Hiểu rõ bộ chỉ thị cho kiến trúc bạn đang làm việc (như x86 hoặc ARM) là quan trọng.

Sử dụng Công cụ Gỡ lỗi: Công cụ gỡ lỗi có thể là một công cụ mạnh mẽ để hiểu cách một chương trình hoạt động. Sử dụng nó để thực thi chương trình từng bước và quan sát cách giá trị của biến và thanh ghi thay đổi. Hãy chú ý đến ngăn xếp cuộc gọi, nó hiển thị chuỗi các cuộc gọi hàm đã dẫn đến điểm hiện tại trong chương trình.

Tìm Kiếm Mẫu: Nhiều chương trình sử dụng một số mẫu hoặc cấu trúc nhất định, chẳng hạn như vòng lặp và câu lệnh điều kiện, có thể cho bạn gợi ý về logic của chúng. Tìm kiếm các mẫu này trong mã hợp ngữ để giúp bạn hiểu chương trình.

Bắt đầu từ Cuối: Nếu bạn đang cố gắng tìm một phần chức năng cụ thể (chẳng hạn như nơi kiểm tra mật khẩu được thực hiện), thường rất hữu ích để bắt đầu từ nơi mà chức năng đó được sử dụng và làm việc ngược lại.

Các ví dụ:

Dịch ngược một Chương trình Đơn giản với GDB:

  1. Giả sử bạn có một chương trình nhị phân mà bạn muốn dịch ngược mã nguồn. Bạn có thể sử dụng công cụ GDB (GNU Debugger) để làm điều này.
  2. Bắt đầu bằng việc phân tách mã chính của chương trình với lệnh gdb -q ./myprogram.
  3. Sau đó, bạn có thể sử dụng lệnh disassemble main để xem mã hợp ngữ của hàm chính.
  4. Tìm các mẫu trong mã hợp ngữ để hiểu về logic của chương trình. Ví dụ, bạn có thể thấy một vòng lặp tính tổng của một mảng số.
  5. Bạn có thể sử dụng các lệnh như break *0xADDRESS để đặt một điểm dừng tại một địa chỉ cụ thể và chạy để bắt đầu chương trình. Chương trình sẽ dừng lại khi đạt đến điểm dừng, cho phép bạn xem trạng thái của chương trình.
  6. Sử dụng các lệnh như info registers để xem giá trị của các thanh ghi và x/10x $rsp để xem ngăn xếp.

Tìm Mật khẩu trong Một Chương trình Nhị phân:

  1. Giả sử bạn được cho một chương trình nhị phân yêu cầu mật khẩu và bạn cần tìm mật khẩu đó. Bạn có thể bắt đầu bằng việc chạy chương trình nhị phân trong một công cụ gỡ lỗi để xem chương trình làm gì khi bạn nhập mật khẩu.
  2. Chương trình nhị phân có thể so sánh đầu vào của bạn với mật khẩu chính xác. Vì vậy, bạn có thể đặt một điểm dừng tại lệnh so sánh và chạy chương trình.
  3. Khi điểm dừng được kích hoạt, bạn có thể xem bộ nhớ nơi mật khẩu chính xác được lưu trữ. Ví dụ, điều này có thể được thực hiện bằng cách sử dụng lệnh examine trong gdb.
  4. Sau khi tìm thấy mật khẩu chính xác, bạn có thể sử dụng nó để chạy chương trình thành công.

Khai thác Tràn bộ đệm:

  1. Giả sử bạn được cho một chương trình nhị phân có lỗ hổng tràn bộ đệm và bạn cần khai thác nó để thực thi mã tùy ý. Bạn có thể bắt đầu bằng việc tìm nơi xảy ra lỗi tràn bộ đệm, chẳng hạn như một hàm sử dụng gets hoặc strcpy.
  2. Tiếp theo, bạn cần tìm cách kiểm soát con trỏ chỉ thị. Điều này có thể bao gồm ghi đè địa chỉ trả về, ví dụ.
  3. Sau đó, bạn cần quyết định mã bạn muốn thực thi. Điều này có thể là một shellcode tạo ra một shell, chẳng hạn.
  4. Cuối cùng, bạn sẽ tạo input của mình để khai thác lỗi tràn bộ đệm. Điều này có thể liên quan đến một số padding, tiếp theo là payload của bạn, sau đó là địa chỉ mà bạn muốn nhảy đến.

Các câu hỏi thường gặp

Ngôn ngữ hợp ngữ là một ngôn ngữ lập trình cấp thấp tương ứng chặt chẽ với các chỉ thị mã máy của một kiến trúc CPU cụ thể. Nó có thể đọc được bởi con người và thường có tương ứng một-một với các chỉ thị mã máy nhị phân mà CPU có thể hiểu và thực thi.

Có rất nhiều công cụ có thể hỗ trợ dịch ngược mã nguồn, bao gồm:
  • Các công cụ gỡ lỗi như GDB và WinDbg, cho phép bạn kiểm soát thực thi của một chương trình và kiểm tra trạng thái của nó.
  • Các công cụ phân tách mã như IDA và Ghidra, có thể dịch mã máy trở lại thành ngôn ngữ hợp ngữ.
  • Các công cụ dịch ngược như Hex-Rays và JEB, có thể dịch mã máy trở lại thành ngôn ngữ cấp cao như C hoặc Java.
  • Các khung phân tích nhị phân như Radare2 và Binary Ninja, cung cấp một bộ công cụ để phân tích và thao tác các chương trình nhị phân.

Công cụ gỡ lỗi cho phép bạn kiểm soát thực thi của một chương trình và kiểm tra trạng thái của nó tại bất kỳ thời điểm nào, trong khi công cụ phân tách mã dịch mã máy của chương trình trở lại thành ngôn ngữ hợp ngữ. Bạn có thể sử dụng công cụ phân tách mã để phân tích tĩnh về mã của chương trình, và công cụ gỡ lỗi để phân tích động về thực thi của chương trình.

Phân tích tĩnh liên quan đến xem xét mã chương trình mà không thực thi nó, thường với sự trợ giúp của các công cụ như phân tách mã và công cụ dịch ngược. Phân tích động liên quan đến thực thi chương trình và quan sát hành vi của nó, thường với sự trợ giúp của các công cụ như công cụ gỡ lỗi. Cả hai kỹ thuật đều có thể hữu ích trong dịch ngược mã nguồn, và thường bổ sung cho nhau.

Tràn bộ đệm là một loại lỗ hổng bảo mật xảy ra khi có nhiều dữ liệu được ghi vào một khối bộ nhớ hoặc bộ đệm hơn nó có thể chứa. Điều này có thể làm cho dữ liệu thừa ghi đè lên bộ nhớ kế tiếp, gây ra hành vi chương trình không ổn định, lỗi truy cập bộ nhớ hoặc sự cố. Nếu bị khai thác bởi một kẻ tấn công độc hại, tràn bộ đệm có thể cho phép kẻ tấn công tiêm mã độc hại vào chương trình.

Trong ngữ cảnh của cuộc tấn công tràn bộ đệm, một NOP (No Operation) sled là một chuỗi các chỉ thị NOP được đặt trước shellcode trong bộ đệm. Điều này tăng phạm vi địa chỉ bộ nhớ có thể được sử dụng để nhảy tới shellcode, làm cho cuộc tấn công có khả năng thành công hơn.

Shellcode là một đoạn mã nhỏ được sử dụng như payload trong khai thác lỗ hổng phần mềm. Nó được gọi là "shellcode" vì thường khởi động một shell từ đó kẻ tấn công có thể kiểm soát máy tính bị xâm nhập, nhưng bất kỳ đoạn mã nào thực hiện một hành động payload cũng có thể được coi là shellcode.

Ngăn xếp là một khu vực trong bộ nhớ của máy tính nơi chương trình lưu trữ các biến tạm thời được tạo ra bởi mỗi hàm (bao gồm cả hàm main()). Ngăn xếp là một cấu trúc dữ liệu "LIFO" (last in, first out), nó được CPU quản lý và tối ưu khá chặt chẽ. Mỗi khi một hàm khai báo một biến mới, nó được "đẩy" vào ngăn xếp. Sau đó, mỗi khi một hàm thoát ra, tất cả các biến được đẩy vào ngăn xếp bởi hàm đó, đều được giải phóng (nghĩa là chúng được xóa bỏ). Khi một biến trong ngăn xếp được giải phóng, khu vực bộ nhớ đó trở thành có sẵn cho các biến khác trong ngăn xếp. Lợi ích của việc sử dụng ngăn xếp để lưu trữ biến là bộ nhớ được quản lý tự động. Bạn không cần phải cấp phát bộ nhớ bằng tay hoặc giải phóng nó khi bạn không cần nữa. Hơn nữa, do CPU tổ chức bộ nhớ theo cách này, việc đọc và ghi các biến trong ngăn xếp rất nhanh.

Điều Tra Số

Khái niệm

Điều tra số: Đây là quá trình khám phá và diễn giải dữ liệu điện tử để sử dụng trong tòa án hoặc hiểu chuỗi sự kiện dẫn đến một sự cố. Trong ngữ cảnh của CTF, thường liên quan đến việc khôi phục thông tin ẩn hoặc đã bị xóa từ một tập tin hoặc một nhóm tập tin.

Khắc phục tập tin: Đây là một quy trình được sử dụng trong pháp y máy tính để trích xuất dữ liệu từ ổ đĩa hoặc thiết bị lưu trữ khác mà không cần sự trợ giúp của hệ thống tập tin đã tạo ra tập tin ban đầu. Nó tương tự như việc khôi phục các mảnh của một tài liệu đã bị xé nhỏ.

Ẩn tin: Đây là việc giấu đi một tập tin, thông điệp, hình ảnh hoặc video trong một tập tin, thông điệp, hình ảnh hoặc video khác. Trong CTF, các thách thức ẩn tin thường liên quan đến việc tìm thông tin ẩn trong một tập tin hình ảnh hoặc âm thanh.

Siêu dữ liệu: Đây là dữ liệu về dữ liệu. Ví dụ, một bức ảnh có thể chứa thông tin siêu về nơi và thời gian chụp, máy ảnh được sử dụng và cài đặt của máy ảnh vào thời điểm đó.

Phân tích hệ thống tập tin nâng cao: Phân tích hệ thống tập tin nâng cao liên quan đến việc xem xét sâu hơn các hệ thống tập tin để xác định dữ liệu ẩn hoặc đã bị xóa, hiểu cách phân bổ tập tin và trích xuất thông tin có giá trị.

Các mẹo và kỹ thuật

Hiểu định dạng tập tin: Hiểu cấu trúc của các định dạng tập tin khác nhau có thể rất hữu ích trong các thách thức pháp y. Ví dụ, biết nơi tìm siêu dữ liệu trong một tập tin JPEG, hoặc hiểu định dạng tiêu đề tập tin ZIP, có thể giúp bạn trích xuất thông tin ẩn.

Sử dụng các công cụ phù hợp: Có nhiều công cụ có sẵn có thể giúp giải quyết các thách thức pháp y, từ trình chỉnh sửa hex đến các công cụ ẩn tin. Sở hữu một bộ công cụ tốt và biết cách sử dụng chúng có thể tiết kiệm rất nhiều thời gian cho bạn.

Tìm kiếm sự bất thường: Trong các thách thức pháp y, bạn thường tìm kiếm những điều không bình thường. Điều này có thể là một phần của tập tin không phù hợp với phần còn lại, một mẫu không thường trong dữ liệu hoặc một phần dữ liệu siêu không phù hợp.

Các ví dụ:

Trích xuất một tập tin ẩn từ một tập tin JPEG:

  1. Giả sử bạn có một hình ảnh JPEG mà bạn nghi ngờ chứa một tập tin ẩn. Bạn có thể sử dụng công cụ như binwalk để trích xuất nó.
  2. Bắt đầu bằng cách chạy lệnh binwalk -e myfile.jpg. Điều này cho biết binwalk trích xuất bất kỳ tập tin nhúng nào mà nó tìm thấy.
  3. Binwalk sẽ tạo một thư mục có cùng tên như tệp hình ảnh và đuôi _extracted. Bên trong thư mục này, bạn có thể tìm thấy bất kỳ tệp nào bị ẩn trong hình ảnh.
  4. Bạn có thể sử dụng công cụ như file để xác định loại của các tệp đã trích xuất, sau đó mở chúng bằng chương trình tương ứng.

Khôi phục một tập tin bị xóa từ hình ảnh đĩa:

  1. Nếu bạn có một hình ảnh đĩa (như tệp .dd hoặc .img) và bạn muốn khôi phục một tập tin bị xóa, bạn có thể sử dụng công cụ như foremost.
  2. Chạy lệnh foremost -i disk_image.img -o output_dir để cho foremost khắc phục tập tin từ hình ảnh đĩa và đầu ra chúng vào thư mục được chỉ định.
  3. Foremost sẽ tạo ra các thư mục trong thư mục đầu ra cho mỗi loại tệp mà nó tìm thấy. Bạn có thể duyệt qua các thư mục này để tìm tập tin bị xóa mà bạn đang tìm kiếm.

Khôi phục các tệp bị xóa:

  1. Phân tích siêu dữ liệu tập tin hệ thống. Sử dụng các công cụ như scalpel hoặc testdisk. Chạy lệnh scalpel -c scalpel.conf disk_image.dd hoặc testdisk disk_image.dd.
  2. Phân tích cấu trúc thư mục và bảng phân bổ tệp với các công cụ như scalpel hoặc testdisk. Thực hiện lệnh scalpel -c scalpel.conf disk_image.dd hoặc testdisk disk_image.dd.
  3. Lấy và kiểm tra một hình ảnh đĩa hoặc một hệ thống tệp tin mô phỏng. Chạy lệnh scalpel -c scalpel.conf disk_image.dd hoặc testdisk disk_image.dd để khôi phục các tệp tin bị xóa. Khám phá các tệp đã khôi phục và xác minh tính chính xác của quá trình khôi phục.

Phân tích dư thừa tập tin:

  1. Hiểu cấu trúc cụm tập tin. Sử dụng trình chỉnh sửa hex như HxD hoặc các công cụ đặc biệt như foremost Mở tệp trong trình chỉnh sửa hex hoặc chạy công cụ đặc biệt với các tùy chọn cần thiết.
  2. Tìm kiếm dữ liệu ẩn: Sử dụng trình chỉnh sửa hex như HxD hoặc các công cụ phân tích dư thừa tập tin đặc biệt như SlackScan hoặc Slacker. Mở tệp trong trình chỉnh sửa hex hoặc chạy công cụ đặc biệt với các tùy chọn cần thiết.
  3. Lấy một tệp tin có các phần đã cấp phát nhưng không sử dụng trong cụm của nó. Mở tệp trong một trình chỉnh sửa hex hoặc sử dụng các công cụ phân tích dư thừa tập tin đặc biệt để xem xét dư thừa tệp và tìm kiếm dữ liệu ẩn hoặc dấu vết của các tệp đã bị xóa.

Phân tích dấu thời gian tập tin:

  1. Hiểu thuộc tính dấu thời gian. Sử dụng các công cụ phân tích hệ thống tập tin như Sleuth Kit hoặc Autopsy. Sử dụng các lệnh như tcat, istat, hoặc ils từ Sleuth Kit.
  2. Thiết lập chuỗi thời gian và xác định sai khác: Sử dụng các lệnh như mactime, fls, hoặc ils để phân tích dấu thời gian và thiết lập chuỗi thời gian.
  3. Lấy một tập hợp các tệp tin với các dấu thời gian bị chỉnh sửa hoặc thay đổi. Sử dụng các công cụ phân tích hệ thống tập tin hoặc các tập lệnh tùy chỉnh để phân tích các dấu thời gian và xác định sai khác.

Các câu hỏi thường gặp

Mặc dù cả ẩn tin và mật mã hóa đều được sử dụng để bảo vệ thông tin, nhưng cách thức làm việc của chúng khác nhau. Mật mã hóa biến đổi thông tin thành một định dạng không đọc được mà không có khóa giải mã, trong khi ẩn tin giấu thông tin bên trong một đoạn thông tin khác. Có thể sử dụng cả hai kỹ thuật cùng nhau để tăng cường bảo mật.

Có một số dấu hiệu bạn có thể tìm kiếm. Ví dụ, kích thước tệp có thể rất lớn hoặc có thể có các mẫu hoặc dấu hiệu lạ trong dữ liệu khi bạn xem nó bằng trình chỉnh sửa hex. Một số công cụ ẩn tin cũng để lại các chữ ký đặc biệt trong các tệp tin mà chúng tạo ra.

Trình chỉnh sửa hex là một công cụ cho phép bạn xem và chỉnh sửa các byte thô của một tệp tin. Điều này có thể hữu ích trong pháp y để xem xét cấu trúc của một tệp, tìm thông tin ẩn hoặc chỉnh sửa tệp tin ở mức thấp.

Hình ảnh đĩa là một tệp tin chứa toàn bộ nội dung và cấu trúc của một thiết bị lưu trữ dữ liệu, như ổ cứng hoặc ổ USB. Hình ảnh đĩa thường được sử dụng trong pháp y vì nó cho phép bạn xem xét một bản sao của thiết bị mà không làm thay đổi tệp gốc.

Hàm băm là một hàm lấy đầu vào (hoặc 'thông điệp') và trả về một chuỗi byte cố định, thường là một bản tóm tắt duy nhất cho mỗi thông điệp duy nhất. Nó được sử dụng để xác minh tính toàn vẹn của dữ liệu, vì một thay đổi nhỏ trong thông điệp sẽ tạo ra một thay đổi lớn trong đầu ra. Các hàm băm phổ biến bao gồm MD5, SHA-1 và SHA-256.

Nhà Tài trợ và Đối tác của Chúng tôi

Chúng tôi rất vinh dự nhận được sự hỗ trợ của các Tổ chức và Cơ quan chức năng trong lĩnh vực An Toàn Thông Tin.

Bạch kim

roundesk

Bạc

roundesk agentis
Bảo Trợ chuyên môn
Mis