29
XXE Injection Tấn công & Phòng thủ Bootcamp - 10/2014 Nguyễn Tăng Hưng Information Security Analyst FPT Telecom

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

Embed Size (px)

Citation preview

Page 1: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

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

Information Security AnalystFPT Telecom

Page 2: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 3: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Giới thiệu

Page 4: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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......

Page 5: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

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

Đến năm 2014,...

Page 7: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Đến năm 2014,...

Page 8: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Thống kê từ CVE

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

Page 9: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Thống kê từ OSVDB

Từ khóa XXE

Page 10: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

XML External Entity 101

Page 11: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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>

Page 12: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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">

Page 13: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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">

]>

Page 14: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

XXE Attack

Page 15: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 16: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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>

Page 17: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Nguy cơ của XXE Attack

Information Exposed Port scanning DOS SSRF ...

Page 18: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 19: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 20: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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"

Page 21: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Demo 2 - Error based XXE Injection

Page 22: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 23: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Kết thúc ????

Page 24: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 25: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Blind XXE Injection (tt)

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

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

Page 26: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

Demo 3 - Time based XXE

Page 27: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 28: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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

Page 29: Thu 6   03 bootcamp 2014 - xxe injection - nguyen tang hung

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 :-)