Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 8:

Средства взлома Web-приложений Hacking Tools

Пример из жизни. Альтернатива Inetd

Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd, а операционная система Windows определенно не имеет данной функции.

Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL, которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.

# /etc/inetd.conf Cygwin SSL proxy example
www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh

Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d, отладочной опцией, чтобы все работало корректно.

$ /usr/sbin/inetd.exe -d /etc/inetd.conf

Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.

Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:\cygwin\bin или любое место, где находится директория cygwin\bin. Inetd может установить себя как службу.

$ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf

Чтобы удалить его, используйте опцию -remove-as-service.

Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.

cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d
    -e CYGWIN=ntsec

cygrunsrv -S inetd

Опция -R удаляет службу inetd.

Xinetd. Xinetd добавляет еще немного к демону inetd. Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd, дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.

#default: off
#description: OpenSSL s_client proxy to www.victim.com
service 80
{
    socket_type = stream
    wait = no
    protocol = tcp
    user = root
    server = /root/ssl_proxy.sh
    only_from = 127.0.0.1
    disable = no
}

Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.

Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL. Netcat pseudo-proxy подходит для одной команды:

$ nc -w -L -p 80 -e "openssl s_client -quiet \
-connect www.victim.com:443"

Опция -L ("слушай внимательнее") дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).

Для этого вам придется использовать оригинальную версию Netcat. Например, на OpenBSD опция -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).

Команда OpenBSD выглядит следующим образом.

$ nc -w -k -l 80 | openssl s_client -quiet \
-connect www.victim.com:443

Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.

Stunnel

OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.

Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (Internet Message Access Protocol) для обеспечения шифрованного доступа к электронной почте (вам также может понадобиться stunnel для управления клиентом).

Реализация

SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный PEM-файл, который содержит ключи шифрования для использования в процессе взаимодействия. Stunnel поставляется с файлом по умолчанию, который называется stunnel.pem, но вы можете создать и свой собственный с использованием команды openssl.

$ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \
> -days 365
...follow prompts...
$ openssl dhparam 512 >> custom.pem

Теперь файл custom.pem готов к использованию. Stunnel ищет по умолчанию файл stunnel.pem, или вы можете использовать свой собственный с помощью параметра -p.

Замечания о компиляции под Cygwin. Вам может понадобиться отредактировать файл stunnel.c для компиляции stunnel под Cygwin. Закомментируйте следующие строки, которые располагаются в районе 391 строки.

/*          if(setgroups(1, gr_list)) {
                sockerror("setgroups");
                exit(1);
        } */

Смысл в том, что вы не сможете использовать параметр -g для определения альтернативной группы привилегий, с которыми выполняется stunnel, но вам не понравится ситуация, в которой это могло бы понадобиться.

Обезьяна в центре поля. Как быть, если вам необходимо просматривать данные, передаваемые поверх SSL-соединения? Вам может понадобиться проверять данные, передаваемые между клиентом, основанным на Web-приложении, и сервером, но клиент передает HTTPS, и сервер принимает только HTTPS. В таком случае, вам понадобится заморозить stunnel между клиентом и сервером, переведя соединение в HTTP, чтобы иметь возможность его читать, а затем вернуть трафик обратно в HTTPS, чтобы сервер мог его получить. Для этого понадобится две команды stunnel.

Запустите stunnel в обычном режиме демона ( -d ). В таком режиме stunnel принимает SSL-трафик и выдает простой текст. Параметр -f заставляет stunnel оставаться в диалоговом режиме. Обычно это используется для просмотра информации о соединении и чтобы убедиться, что программа работает. Stunnel - не программа с конечной точкой. Другими словами, вы должны задать порт, который будет прослушиваться ( -d <port> ), а также хост и порт, на которые будет перенаправляться трафик ( -r <host:port> ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel.

$ stunnel -p custom.pem -f -d 443 -r host:80
2002.04.15 16:56:16 LOG5[464:1916]: Using '80' as tcpwrapper service name
2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on
  x86-pc-mingw32-gnu WIN32 with OpenSSL
 0.9.6c 21 dec 2001
2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1
  (unlimited) - 2000 clients allowed

Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.

$ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c
2002.04.15 17:00:10 LOG5[1916:1416]: Using '80' as tcpwrapper service name
2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on
  x86-pc-mingw32-gnu WIN32 with OpenSSL
  0.9.6c 21 dec 2001
2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1
  (unlimited) - 2000 clients allowed

Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.

SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd, с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP - протокол для удаленного доступа к почтовому ящику. Недостаток IMAP состоит в том, что может быть перехвачен пароль.

Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.

imap    stream  tcp nowait  root    /usr/sbin/tcpd  imapd

Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.

Теперь посмотрим аналогичную конфигурацию под stunnel. Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.

# stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd
2002.04.15 17:08:38 LOG5[1820:1680]: Using 'imapd' as 
  tcpwrapper service name
2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on
  x86-pc-mingw32-gnu WIN32 with OpenSSL
  0.9.6c 21 dec 2001
2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1
(unlimited) - 2000 clients allowed

Вы уже знакомы с параметром -d, но здесь мы вводим параметры -l и -N. Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd. Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper. Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва