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

 

 

Использование переменных среды

Еще одним источником для передачи данных в программу (о котором часто за­бывают) являются переменные среды. Если хакер может контролировать значения переменных среды, то он способен нанести серьезный ущерб программе.
Шаблон атаки: клиент управляет значениями переменных среды
Передавая данные, хакер до прохождения аутентификации предоставляет значения, с по­мощью которых изменяет значения переменных среды для атакуемого процесса. Основная идея состоит в том, что переменные среды изменяются до использования аутентификацион-ного кода.

Существует небольшая вероятность что во время сеанса, после прохождения ау­тентификации, обычный пользователь сможет изменить значения переменных сре­ды и получить привилегированный доступ.
Переменные среды UNIX
Изменив значение переменной среды LD_LIBRARY_PATH для программы Telnet, можно заставить эту программу использовать альтернативную версию (возможно, "троянскую") библиотеки функций. Эта троянская библиотека должна быть доступ­на в атакуемой файловой системе и содержать "троянский" код, позволяющий поль­зователю входить в систему с неправильным паролем.
В качестве альтернативы загрузки на атакуемую систему троянского файла, в некото­рых файловых системах можно использовать имена файлов, в которых содержатся адре­са удаленных хостов, например: W172.16.2.100\shared_files\trojan_dll.dll.
Использование внешних переменных
Во многих случаях программное обеспечение поставляется с набором заранее ус­тановленных параметров. И часто установка этих параметров выполнена без всякого учета требований безопасности. При атаке хакер может воспользоваться этими уста­новленными по умолчанию параметрами.
Шаблон атаки: предоставленные пользователем глобальные переменные
В мощных языках наподобие РНР многие настройки по умолчанию установлены непра­вильно.
ДЛЯ удобства (а может, из-за своей лени) некоторые программисты могут интег­рировать "секретные" переменные в свои приложения. Секретная переменная ис­пользуется как пароль, по которому приложение предоставляет привилегированный доступ. Например, существует Web-приложение, которое различает обычного поль­зователя и администратора, проверяя значение переменной скрытой формы (например ADMIN=YES). Это может казаться сумасшествием, но самостоятельно разработанные Web-приложения для использования в крупнейших банках планеты работают именно таким образом. Именно такие ошибки стараются выявить команды по проведению аудита программного обеспечения.
Иногда подобные проблемы возникают не из-за ошибок программистов, но в ре­зультате изначального "проекта" платформы или языка. Это относится к глобаль­ным переменным РНР.
Использование глобальных переменных РНР
Язык РНР можно назвать "наглядным пособием" безответственного отношения к безопасности. Основная причина быстрого распространения РНР состоит в "прос­тоте использования" и в "магическом" заклинании "Не заставляйте разработчика де­лать лишнюю работу". Это реализовано в РНР благодаря тому, что язык стал менее формальным, т.е. в РНР можно объявлять переменные при первом использовании,

инициализировать что угодно с заранее установленными значениями и "захваты­вать" любую переменную из транзакции с доступом к этой переменной. В языке РНР при выборе между простым и более сложным предпочтение всегда отдается бо­лее простому варианту.
Одним из последствий такого подхода является то, что РНР позволяет пользова­телям Web-приложений заменять переменные среды собственными переменными из непроверенных запросов. Таким образом, удаленный пользователь может заменить и контролировать критически важные значения, такие как текущий рабочий каталог и строка поиска.
Еще одно следствие — значения переменных могут непосредственно контролиро­ваться и назначаться с помощью предоставляемых пользователями значений, уста­новленных в полях запроса GET и POST. Таким образом, казалось бы, абсолютно без­обидный программный код может позволять делать весьма неприятные вещи.
while($count <  10){
// Делаем что-либо $count++;
}
В этом цикле по идее действия (тело цикла) должны повторяться десять раз. При первой итерации будет использовано значение нуля (по умолчанию), а при каждом последующем прохождении цикла будет происходить инкрементное приращение значения переменной $ count. Проблема в том, что программист не инициализиро­вал значение нуля до входа в цикл. Это нормально, поскольку РНР инициализирует переменную при ее объявлении. В результате код работает, несмотря на низкое каче­ство. Проблема в том, что пользователь Web-приложения может отправить запрос наподобие
GET /logir±.php?cour±t=9
и заставить переменную $ count начать со значения 9, т.е. цикл будет выполнен только один раз.
В зависимости от конфигурации, РНР может использовать пользовательские пе­ременные вместо переменных среды. РНР для всех переменных среды исполняемых процессов инициализирует глобальные переменные, например $РАТН и $HOSTNAME. Эти переменные имеют огромное значение, поскольку они могут использоваться при операциях с файлами или при организации сетевого взаимодействия. Если хакер может установить новое значение для переменной PATH (например РАТН=! /var' ), то, скорее всего, программу можно взломать.
Язык РНР также позволяет принимать теги полей, предоставленные в запросах GET/POST и преобразовывать их в глобальные переменные. Это как раз касается пе­ременной $ count, которую мы использовали в предыдущем примере.
Рассмотрим еще один пример, связанный с этой проблемой, в котором в про­грамме определяется переменная $ temp file. Хакер может предоставить новое зна­чение для временного файла, например $tempfile = "/etc/passwd". Затем этот временный файл можно стереть с помощью команды unlink ($tempfile) ;. Те­перь файл паролей уничтожен — прискорбное событие для большинства операцион­ных систем.
Также не забывайте, что при использовании функций include () и require () сначала выполняется поиск значения переменной $РАТН и что при вызовах команд­

ного интерпретатора могут выполняться критически важные программы, например Is. Таким образом, хакер может подменить Is "троянской" копией этой программы (изменив значение переменной $РАТН). Подобная атака может использоваться для подмены библиотек путем изменения значения переменной $LD_LIBRARY_PATH.
И наконец, в некоторых версиях РНР пользовательские данные могут переда­ваться в системный журнал как строка форматирования, что может вызвать пере­полнение буфера в приложении с помощью этой строки форматирования.

 

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