Thu 6 03 bootcamp 2014 - xxe injection - nguyen tang hung

Preview:

Citation preview

XXE InjectionTấn công & Phòng thủ

Bootcamp - 10/2014Nguyễn Tăng Hưng

Information Security AnalystFPT Telecom

Nội dung trình bày

Giới thiệu XML External Entity (XXE) - 101 XXE Attack Kỹ thuật phát hiện lỗi Kỹ thuật phòng tránh Tham khảo

Giới thiệu

Lịch sử phát hiện Nguồn: Trên Bugtraq 10/2002: XXE:

http://www.securityfocus.com/archive/1/297714/2002-10-27/2002-11-02/0

Không mới, nhưng......

Đến năm 2014,.....

Đến năm 2014,...

Đến năm 2014,...

Thống kê từ CVE

Nguồn: PHP Conference Japan 2013 - Speaker: Kousuke Ebihara

Thống kê từ OSVDB

Từ khóa XXE

XML External Entity 101

XML External Entity

XML (Extensible Markup Language): là một tiêu chuẩn để trao đổi dữ liệu có cấu trúc theo định dạng text.

Ví dụ:

<?xml version="1.0" encoding="UTF-8"?>

<user>

<userid>0</userid>

<username>Hung</username>

<lastname>Nguyen</lastname>

<job>troller</job>

</user>

XML External Entity

Entity: có thể được sử dụng như một kiểu tham chiếu đến dữ liệu, cho phép thay thế một ký tự đặc biêt, một khối văn bản hay thậm chí toàn bộ nội dung một file vào trong tài liệu xml. Một số kiểu entity: character, named (internal), external, parameter.

Ví dụ: &amps; -> & &lt; -> < &gt; -> > &#x41; -> A <!ENTITY n "Hung"> <!ENTITY f "&n; Nguyen"> <!ENTITY format SYSTEM "doc.dtd">

XML External Entity

External entity: entity tham chiếu đến nội dung một file bên ngoài tài liệu xml

Ví dụ:

<!DOCTYPE order SYSTEM "order.dtd">

<!DOCTYPE ran SYSTEM "/dev/random">

<!DOCTYPE request [

<!ENTITY include SYSTEM "c:\boot.ini">

]>

XXE Attack

Các bước trong quá trình xác định External Entity

Phân giải XML DOCTYPE Các khai báo Entities

Resolve các external entities Thư viện xml Entity loader từ framework

XXE Attack

Khi DTD (Document Type Definition) được xử lý, ứng dụng có thể đọc hoặc nhúng file vào trong tài liệu XML. Nếu có khả năng điều khiển được nội dung của DTD, khi đó attacker có thể chỉ định truy xuất các tài nguyên nhạy cảm hoặc thực hiện các kiểu khai thác khác.

Ví dụ:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE request [

<!ENTITY here SYSTEM "file:///etc/passwd">

]>

<request>

<desc>&here;</desc>

....

</request>

Nguy cơ của XXE Attack

Information Exposed Port scanning DOS SSRF ...

Demo 1 - Một số nguy cơ XXE

Kỹ thuật phát hiện lỗi

Error based XXE Injection

Ý tưởng: ' ; " ; < ; <!-- Từ khóa:

"parser error" "failed to load external entity" "XMLParserError" "Unknown language DATA" "Login DATA are not valid" "Password for user DATA does not match"

Demo 2 - Error based XXE Injection

ini_set('display_errors', 'Off'); error_reporting(0);

Kết thúc ????

Blind XXE Injection

Kỹ thuật 1: Ý tưởng:

Sử dụng cơ chế thẩm tra DTD & XSD Thu thập trạng thái của kết quả thẩm tra (dựa vào kết quả hay lỗi)

Hạn chế: Không phải ứng dụng nào cũng hiện thực việc thẩm tra trước khi

xử lý Không áp dụng được trên PHP trong một số trường hợp ...

Nguồn: Blind XXE injections - Vladimir Vorontsov - Hội nghị: HackPra, Germany, 05/2012

Blind XXE Injection (tt)

Kỹ thuật 2: Timed - based Ý tưởng:

Còn nhớ ví dụ DOS ở trên ?

Demo 3 - Time based XXE

Demo 4 - Phối hợp với Burp Suite

Kỹ thuật phòng tránh

Update, update & update libxml2 -> version 2.9.0

/* https://git.gnome.org/browse/libxml2/commit/?id=8915c */ PHP -> version 5.3.23

/* https://github.com/php/php-src/commit/8e76d0404b7f664ee6719fd98f0483f0ac4669d6*/

Net Framework -> version 4 Java

/* https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing */

Thiết lập cấu hình ngăn chặn việc load các entity từ bên ngoài White-list các protocol & domain được chấp nhận trong XXE

Tham khảo

http://www.securityfocus.com/archive/1/297714 https://www.owasp.org/index.php/

XML_External_Entity_(XXE)_Processing Introduction of XXE attack and XML Bomb with

PHP - Kousuke Ebihara - PHPCon Japan, 2013 Blind XXE injections - HackPra, Germany,

Bochum, 05/2012 Google :-)