Information disclosure vulnerabilities
Trong phần này, sẽ giải thích kiến thức cơ bản về các lỗ hổng tiết lộ thông tin và mô tả cách bạn có thể tìm và khai thác chúng.
Information disclosure là gì ?
Tiết lộ thông tin hay rò rỉ thông tin là một khi trang web vô tính tiết lộ thông tin nhạy cảm cho người dùng. Tùy thuộc vào ngữ cảnh, các trang web có thể rò rỉ tất cả các loại thông tin cho kẻ tấn công tiềm năng, bao gồm:
Dữ liệu về người dùng khác (thông tin tài chính, tên...)
Dữ liệu thương mại hoặc kinh doanh nhạy cảm.
Chi tiết kỹ thuật về trang web và cơ sở hạ tầng của nó.
Nguy cơ rò rỉ dữ liệu kinh doanh hoặc người dùng nhạy cảm là rõ ràng, nhưng tiết lộ thông tin kỹ thuật đôi khi cũng nghiêm trọng không kém. Mặc dù một số thông tin này sẽ được sử dụng ít, nhưng nó có khả năng là điểm khởi đầu để lộ ra một bề mặt tấn công bổ sung, có thể chứa các lỗ hổng khác.
Đôi khi thông tin nhạy cảm có thể bị rò rỉ một cách bất cẩn cho những người chỉ duyệt trang web theo cách thông thường. Tuy nhiên, attacker cần khơi gợi việc tiết lộ thông tin bằng cách tương tác với trang web theo những cách không mong muốn hoặc độc hại. Sau đó, họ sẽ nghien cứu cẩn thận các phản hồi của trang web để thử và xác định các hành vi của trang web.
Một số ví dụ cơ bản:
Tiết lộ tên của các thư mục ẩn, cấu trúc và nội dung của chúng thông qua tệp robots.txt hoặc các thư mục khác.
Cung cấp quyền truy cập vào các tệp mã nguồn thông qua các bản sao lưu tạm thời.
Đề cập rõ ràng đến bảng cơ sở dữ liệu hoặc tên cột trong thông báo lỗi.
Tiết lộ thông tin nhạy cảm cao một cách không cần thiết.
Khóa API mã hóa cứng, địa chỉ IP, thông tin đăng nhập cơ sở dữ liệu ... trong mã nguồn.
Gợi ý về sự tồn tại hoặc vắng mặt của tài nguyên, tên người dùng... thông qua sự khác biệt nhỏ trong hành vi của ứng dụng.
Lỗ hổng rò rỉ thông tin phát sinh như thế nào ?
Các lỗ hổng rò rỉ thông tin có thể phát sinh theo vô số cách khác nhau, dưới đây là một số:
Không thể xóa nội dung nội bộ khỏi nội dung công khai. Ví dụ: nhận xét của dev trong code đôi khi hiển thị với người dùng.
Cấu hình không an toàn của trang web và các công nghệ liên quan. Ví dụ: việc không tắt tính năng gỡ lỗi và chuẩn đoán đôi khi có thể cung cấp cho attacker các công cụ hữu ích để giúp chúng lấy được thông tin nhạy cảm; cấu hình mặc định cũng có thể khiến các trang web dễ bị tấn công bằng cách hiển thị các thông báo lỗi quá chi tiết.
Thiết kế sai sót hành vi của ứng dụng. Ví dụ: nếu một trang web trả về phản hồi riêng biệt khi xảy ra các trạng thái lỗi khác nhau, thì điều này cũng có thể cho phép attacker liệt kê dữ liệu nhạy cảm, chẳng hạn như thông tin đăng nhập hợp lệ của người dùng.
Tác động của lỗ hổng rò rỉ thông tin
Các lỗ hổng rò rỉ thông tin có thể có cả tác động trực tiếp và gián tiếp tùy thuộc vào mục đích của trang web đó tùy thuộc vào attacker có thể lấy được thông tin gì. Trong một số trường hợp, chỉ hành động tiết lộ thông tin nhạy cảm thôi cũng có thể gây tác động lớn đối với đối tượng bị ảnh hưởng.
Cách đánh giá mức độ nghiêm trọng của lỗ hổng rò rỉ thông tin
Việc tiết lộ thông tin kỹ thuật thường chỉ được quan tâm nếu bạn có thể chứng minh cách attacker có thể làm điều gì đó có hại với thông tin đó.
Cách tìm và khai thác lỗ hổng rò rỉ thông tin
Điều quan trọng là nên mở rộng tầm nhìn trong quá trình khai thác. KHÔNG nên tập trung quá hẹp vào một lỗ hổng cụ thể. Dữ liệu nhạy cảm có thể bị rò rỉ ở mọi nơi, vì vậy điều quan trọng là không bỏ sót bất cứ điều gì có thể hữu ích.
Các nguồn rò rỉ thông tin phổ biến:
File for web crawlers
Nhiều website cung cấp tệp /robots.txt và /sitemap.xml để giúp trình thu thập dữ liệu điều hướng trang web của họ. Các tệp này thường liệt kê các thư mục cụ thể mà trình thu thập dữ liệu nên bỏ qua vì chúng có thể chứa thông tin nhạy cảm.
Directory listing
Các máy chủ web có thể được cấu hình để tự động liệt kê nội dung của các thư mục không có trang index. Điều này có thể hỗ trợ attacker tấn công bằng cách cho phép chúng nhanh chóng xác định tài nguyên tại một đường dẫn nhất định và trực tiếp tiến hành phân tích và tấn công các tài nguyên đó. Nó đặt biệt làm tăng mức độ hiển thị của các tệp nhạy cảm trong thư mục mà người dùng không có ý định truy cập.
Developer comments
Trong quá trình phát triển sản phẩm, các nhận xét HTML đôi khi được thêm vào. Những nhận xét này thường được loại bỏ trước khi vận hành trang web đến người dùng. Tuy nhiên, đôi khi điều này có thể bị quên, bị bỏ sót, hoặc chủ định của ai đó không có nhận thức đầy đủ về bảo mật.
Error messages
Một trong những nguyên nhân phổ biến nhất của việc rò rỉ thông tin là thông báo lỗi quá chi tiết. Nội dung của thông báo lỗi có thể tiết lộ thông tin đầu vào hoặc loại dữ liệu được mong đợi từ một tham số nhất định. Điều này có thể giúp bạn thu hẹp cuộc tấn công của mình bằng cách xác định các tham số có thể khai thác.
Thông báo lỗi quá chi tiết cũng có thể cung cấp thông tin về các công nghệ khác nhau đang được sử dụng trong trang web. Với điều này, trong một vài trường hợp, bạn cũng có thể phát hiện ra rằng trang web đang sử dụng một số loại khung mã nguồn mở.
Thực hành lab: ( Level Apprentice)
Tên lab: Information disclosure in error messages
Nội dung lab : Trang web này có thông báo lỗi chi tiết rằng nó đang sử dụng một phiên bản dễ bị tấn công. Để giải quyết, tìm phiên bản của ứng dụng này.
Thực hiện lab: Kiểm tra SQLi trong tham số productId, trang web trả về thông báo lỗi.
Debugging data
Vì mục đích gỡ lỗi, nhiều trang web tạo thông báo lỗi tùy chỉnh và nhật ký chứa lượng lớn thông tin về hành vi của ứng dụng. Mặc dù thông tin này là hữu ích trong quá trình phát triển sản phẩm nhưng nó lại cũng cực kì hữu ích đối với attacker.
Thông báo gỡ lỗi đôi khi có thể chứa thông tin quan trọng cho một cuộc tấn công:
Giá trị cho các biến phiên chính có thể được tao tác thông qua đầu vào của người dùng.
Tên máy chủ và thông tin đăng nhập.
Tên tập tin và thư mục trên máy chủ.
Các khóa dùng để mã hóa dữ liệu truyền qua máy client.
Thông tin gỡ lỗi có thể được ghi vào một tệp riêng biệt. Nếu kẻ tấn công có thể giành được quyền truy cập vào tệp này, nó có thể đóng vai trò là tài liệu tham khảo hữu ích để hiểu ứng dụng.
Thực hành lab: (Level Apprentice)
Tên lab: Information disclosure on debug page
Nội dung lab: Trang web này chứa một trang gỡ lỗi tiết lộ thông tin nhạy cảm về ứng dụng. Để giải quyết, hãy gửi biến môi trường SECRET_KEY
Thực hiện lab:
Sử dụng Burp suite -> Sitemap -> Tìm request
GET /cgi-bin/phpinfo.php HTTP/1.1
Gửi request đến Repeater :
Source code disclosure via backup files
Có được quyền truy cập mã nguồn giúp attacker hiểu hành vi của ứng dụng dễ dàng hơn và xây dựng các cuộc tấn công có mức độ nghiêm trọng cao. Dữ liệu nhạy cảm đôi khi thậm chí được mã hóa cứng trong mã nguồn (khóa API, thông tin đăng nhập) Nếu bạn có thể xác định rằng một công nghệ nguồn mở cụ thể đang được sử dụng, điều này sẽ giúp bạn dễ dàng truy cập vào một lượng mã nguồn hạn chế.
Đôi khi, thậm chí có thể khiến một trang web để lộ thông tin mã nguồn của chính nó. Khi vạch ra một trang web, bạn có thể thấy rằng một số tệp mã nguồn được tham chiếu rõ ràng.
Thực hành lab: (Level: Apprentice)
Tên lab: Source code disclosure via backup files
Nội dung lab: Trang web này làm rò rỉ mã nguồn của nó thông qua các tệp sao lưu trong thư mục ẩn. Để giải quyết lab này, hãy xác định và gửi mật khẩu cơ sở dữ liệu.
Thực hiện lab:
Như đã trình bày ở phần trước. Trong tệp robots.txt đôi khi có chứa những đường dẫn ẩn. Ở trong lab này cũng vậy:
Thấy có một thư mục được tiết lộ. Truy cập và thấy 1 file ẩn:
Tìm mật khẩu và submit:
Information disclosure due to insecure configuration
Các trang web đôi khi dễ bị tấn công do cấu hình không đúng. Điều này đặc biệt phổ biến do việc sử dụng rộng rãi các công nghệ của bên thứ 3, có rất nhiều tùy chọn cấu hình mà những người triển khai chúng không nhất thiết phải hiểu rõ.
Trong các trường hợp khác, dev có thể quên tắt các tùy chọn sửa lỗi khác trong trong môi trường phát triển sản phẩm. Ví dụ phương thức TRACE HTTP được thiết kế cho mục đích chuẩn đoán. Nếu được bật, máy chủ web sẽ phản hồi các yêu cầu sử dụng phương thức TRACE này bằng cách lặp lại trong phản hồi yêu cầu chính xác đã nhận được. Hành vi này thường vô hại nhưng đôi khi dẫn đến tiết lộ thông tin, chẳng hạn như tên của tiêu đề xác thực nội bộ có thể được thêm vào yêu cầu bởi proxy.
Thực hành lab: (Level Apprentice)
Tên lab: Authentication bypass via information disclosure
Nội dung lab: Trang web này chứa một lỗ hổng bỏ qua xác thực. Để giải quyết lab, hãy lấy tên tiêu đề rồi sử dụng nó để bỏ qua xác thực. Truy cập quản trị viên và xóa tài khoản Carlos để hoàn thành lab
Thực hiện lab:
Dùng Burp suite, truy cập đến trang quản trị viên: GET /admin
Phản hồi trả về một đoạn thông báo :
Thực hiện lại yêu cầu đến trang admin với phương thức TRACE:
Như vậy, trang web đã tự động điền IP của chúng ta vào. Đối với header này, chúng ta có thể thay đổi sang IP localhost xem liệu có thể đăng nhập vào trang admin như thông báo ở bước 2 hay không.
Thêm X-Custom-IP-Authorization: 127.0.0.1 vào request GET /admin
Thực hiện xóa tài khoản user Carlos để hoàn thành lab
Version control history
Hầu như tất cả các trang web được phát triển bằng cách sử dụng một số dạng hệ thống kiểm soát phiên bản, chẳng hạn như git. Theo mặc định, một dự án Git lưu trữ tất cả dữ liệu kiểm soát phiên bản của nó trong một thư mục có tên .git.
Phương pháp ngăn chặn rò rỉ thông tin
Để ngăn chặn hoàn toàn việc rò rỉ thông tin là một công việc khó khăn do có rất nhiều cách thức mà thông tin bị rò rỉ. Tuy nhiên, có một số phương pháp chung tốt nhất mà bạn có thể làm theo để giảm thiểu nguy cơ này:
Đảm bảo rằng mọi dev tham gia phát triển web có nhận thức đầy đủ về bảo mật thông tin.
Kiểm tra bất kì đoạn code nào để lộ thông tin tiềm ẩn như một phần của quy trình xây dựng hoặc đảm bảo chất lượng.
Sử dụng các thông báo lỗi chung càng nhiều càng tốt.
Kiểm tra kỹ lưỡng xem có bất kì tính năng debug hoặc chẩn đoán nào bị tắt không.
Có kiến thức đầy đủ về cấu hình và bảo mật của bất kì công nghệ của bên thứ 3 nào mà bạn đang sử dụng.
Last updated