Phát hiện các cuộc tấn công Cross Site Scripting (XSS)
XSS là một loại lỗ hổng bảo mật web dựa trên kỹ thuật chèn mã độc có thể được tích hợp vào các ứng dụng web hợp pháp, cho phép thực thi mã độc
Có 3 loại XSS. Đó là:
- Reflected XSS (Non-Persistent) : Đây là loại XSS không bền vững, trong đó payload XSS phải có trong yêu cầu. Đây là loại XSS phổ biến nhất.
- Stored XSS (Persistent) : Loại XSS này cho phép kẻ tấn công tải vĩnh viễn dữ liệu XSS lên ứng dụng web. So với các loại khác, Stored XSS là loại XSS nguy hiểm nhất.
- DOM Based XSS : DOM Based XSS là một cuộc tấn công XSS trong đó tải trọng tấn công được thực thi do sửa đổi "môi trường" DOM trong trình duyệt của nạn nhân được tập lệnh phía máy khách ban đầu sử dụng để mã phía máy khách chạy theo cách "không mong đợi". (OWASP)
Kẻ tấn công có thể thực hiện những hành động sau với cuộc tấn công XSS:
- Đánh cắp thông tin phiên của người dùng
- Ghi lại thông tin xác thực
Phát hiện các cuộc tấn công XSS:
- Tìm kiếm từ khóa: Cách dễ nhất để phát hiện các cuộc tấn công XSS là tìm kiếm các từ khóa như "alert" và "script" thường được sử dụng trong các payload XSS.
- Tìm hiểu về các payload XSS thường được sử dụng: Kẻ tấn công thường sử dụng cùng một payload để tìm kiếm lỗ hổng trước khi khai thác lỗ hổng XSS. Do đó, việc làm quen với các payload XSS thường được sử dụng sẽ giúp phát hiện lỗ hổng XSS dễ dàng hơn. Một số payload thường được sử dụng . https://github.com/payloadbox/xss-payload-list
- Kiểm tra việc sử dụng các ký tự đặc biệt: Kiểm tra dữ liệu đến từ người dùng để xem có bất kỳ ký tự đặc biệt nào thường được sử dụng trong tải trọng XSS, chẳng hạn như lớn hơn (>) hoặc nhỏ hơn (<) hay không.
Khi xem nhật ký, có những từ liên quan đến JavaScript như "script", "prompt" và "console.log". Từ javascript ngay lập tức gợi nhớ đến XSS
Phát hiện các cuộc tấn công Command Injection (tiêm lệnh)
Tấn công tiêm lệnh là các cuộc tấn công xảy ra khi dữ liệu nhận được từ người dùng không được lọc, kiểm tra và được truyền trực tiếp đến shell của hệ điều hành.
Kẻ tấn công khai thác lỗ hổng tiêm lệnh để thực thi lệnh trực tiếp trên hệ điều hành. Vì mục tiêu chính của kẻ tấn công là chiếm quyền kiểm soát hệ thống, những lỗ hổng này nghiêm trọng hơn các lỗ hổng khác.
Kẻ tấn công có thể thực thi lệnh trên hệ điều hành bằng cách khai thác lỗ hổng tiêm lệnh. Điều này có nghĩa là ứng dụng web và tất cả các thành phần khác trên máy chủ đều có nguy cơ bị tấn công.
Phát hiện các cuộc tấn công tiêm lệnh:
- Khi kiểm tra một yêu cầu web, hãy xem xét tất cả các khu vực: Lỗ hổng chèn lệnh có thể nằm ở các khu vực khác nhau tùy thuộc vào cách ứng dụng web hoạt động. Do đó, nên kiểm tra tất cả các khu vực của yêu cầu web.
- Tìm kiếm các từ khóa liên quan đến ngôn ngữ thiết bị đầu cuối: Kiểm tra dữ liệu nhận được từ người dùng để tìm các từ khóa liên quan đến lệnh thiết bị đầu cuối như dir, ls, cp, cat, type, v.v.
- Tìm hiểu về các payload tiêm lệnh thường gặp: Khi kẻ tấn công phát hiện ra lỗ hổng tiêm lệnh, chúng thường tạo ra một reverse shell để dễ dàng thực hiện tác vụ hơn. Do đó, việc hiểu rõ các payload tiêm lệnh thường gặp sẽ giúp phát hiện tấn công tiêm lệnh dễ dàng hơn.
Phát hiện các cuộc tấn công IDOR
IDOR là một lỗ hổng bảo mật do thiếu hoặc sử dụng không đúng cơ chế ủy quyền. Nó cho phép một người truy cập vào một đối tượng thuộc về người khác. IDOR hay "Broken Access Control" là lỗ hổng ứng dụng web số một được liệt kê trong OWASP năm 2021.
Sau đây là một ví dụ để hiểu rõ hơn về cách khai thác lỗ hổng IDOR.
- Tưởng tượng một ứng dụng web đơn giản. Nó lấy biến “ id” từ người dùng và sau đó hiển thị dữ liệu thuộc về người dùng đã thực hiện yêu cầu với URL: https://letsdefend.io/get_user_information?id=1
- Khi một yêu cầu như trên được thực hiện trong ứng dụng web, nó sẽ hiển thị thông tin của người dùng có giá trị id là 1. Nếu đúng là người dùng có ID là 1 đã tạo yêu cầu, mọi thứ sẽ hoạt động bình thường. Khi tạo yêu cầu, sẽ thấy thông tin cá nhân của mình.
- Nhưng nếu tạo một yêu cầu với tham số "id" là 2? Hoặc 3? thì nếu ứng dụng web không kiểm tra xem giá trị "id" trong yêu cầu có thuộc về người thực hiện yêu cầu hay không, thì bất kỳ ai cũng có thể thực hiện yêu cầu đó và xem thông tin của người dùng. Lỗ hổng web này được gọi là IDOR.
- Kẻ tấn công có thể truy cập các mục không thuộc về chúng bằng cách thay đổi các tham số như "id". Loại thông tin chúng có thể truy cập có thể khác nhau tùy thuộc vào ứng dụng web.
Nếu kẻ tấn công khai thác lỗ hổng IDOR, chúng có thể:
- Đánh cắp thông tin cá nhân
- Truy cập tài liệu trái phép
- Thực hiện các hành động trái phép (như xóa, sửa đổi)
Phát hiện các cuộc tấn công IDOR
Tấn công IDOR khó phát hiện hơn các loại tấn công khác vì nó không chứa một số payload nhất định như SQL injection và XSS
- Kiểm tra tất cả các tham số: Lỗ hổng IDOR có thể xảy ra ở bất kỳ tham số nào. Do đó, kiểm tra tất cả các tham số.
- Hãy xem số lượng yêu cầu được gửi đến cùng một trang: Khi kẻ tấn công phát hiện ra lỗ hổng IDOR, chúng thường muốn truy cập thông tin của tất cả người dùng khác, vì vậy chúng thường thực hiện tấn công brute-force. Đây là lý do tại sao có thể thấy nhiều yêu cầu cho cùng một trang từ một nguồn.
- Cố gắng tìm ra một quy luật: Kẻ tấn công sẽ lên kế hoạch tấn công brute-force để tiếp cận tất cả các đối tượng. Vì chúng sẽ thực hiện tấn công trên các giá trị liên tiếp và có thể dự đoán được, chẳng hạn như số nguyên, có thể cố gắng tìm ra một quy luật trong các yêu cầu bạn thấy. Ví dụ: nếu bạn thấy các yêu cầu như id=1, id=2, id=3, có thể nghi ngờ.
Phát hiện các cuộc tấn công RFI & LFI
Remote File Inclusion (RFI) là một lỗ hổng bảo mật xảy ra khi một tệp được đưa vào mà không lọc, kiểm tra dữ liệu nhận được từ người dùng. RFI khác với LFI ở chỗ tệp được đưa vào được lưu trữ trên một máy chủ khác. Kẻ tấn công dụ nạn nhân thông qua các trang web trên máy chủ từ xa và lừa họ chạy mã độc trên các máy chủ mà chúng đã chuẩn bị.
Local File Inclusion (LFI) là lỗ hổng bảo mật xảy ra khi một tệp không được lọc, kiểm tra dữ liệu thu thập được từ người dùng. LFI khác với RFI ở chỗ tệp dự định nằm trên cùng một máy chủ web nơi ứng dụng web được lưu trữ. Kẻ tấn công có thể đọc các tập tin nhạy cảm trên máy chủ web, chúng có thể thấy các tập tin chứa mật khẩu cho phép chúng truy cập máy chủ từ xa.
SQL Injection xảy ra khi dữ liệu nhận được từ người dùng được nhập vào các truy vấn SQL; lỗ hổng Command Injection xảy ra khi dữ liệu nhận được từ người dùng được thực thi trực tiếp trong shell hệ thống; lỗ hổng IDOR xảy ra khi dữ liệu nhận được từ người dùng được sử dụng để truy cập trực tiếp vào các đối tượng. Lỗ hổng RFI và LFI phát sinh khi dữ liệu nhận được từ người dùng được sử dụng trực tiếp trong hệ thống hoặc để đưa một tệp vào máy chủ từ xa.
Phát hiện các cuộc tấn công LFI & RFI:
- Khi kiểm tra yêu cầu web từ người dùng, kiểm tra tất cả các trường.
- Tìm kiếm bất kỳ ký tự đặc biệt nào: Trong dữ liệu nhận được từ người dùng, tìm các ký hiệu như '/',
.
,\
. - Làm quen với các tệp thường được sử dụng trong các cuộc tấn công LFI: Trong một cuộc tấn công LFI, kẻ tấn công sẽ đọc các tệp trên máy chủ. Việc biết tên các tệp quan trọng trên máy chủ sẽ giúp phát hiện các cuộc tấn công LFI.
- Tìm các từ viết tắt như HTTP và HTTPS: Trong các cuộc tấn công RFI, kẻ tấn công sẽ đưa tệp vào thiết bị của chúng và cho phép tệp chạy.
- Để lưu trữ tệp, kẻ tấn công thường thiết lập một máy chủ web nhỏ trên thiết bị của chúng và hiển thị tệp bằng giao thức HTTP. Do đó, nên tìm các ký hiệu như 'http' và 'https' để giúp phát hiện các cuộc tấn công RFI.