Гипотетический сценарий
   Некоторые программы, например Sendmail, в большинстве своих реализаций по умолчанию предоставляют сведения о пользователях системы. Усугубляет ситуацию еще и то, что эти программы используют пользовательскую базу данных как справочник для адресов электронной почты. Кое-кто, возможно, лишь усмехнется, услышав рассуждения о возможности утечки информации. В этом случае задумайтесь над следующим примером.
   В маленьком городке два Интернет-провайдера. Интернет-провайдер A появился позднее Интернет-провайдера B и быстро развивается, существенно увеличивая число своих клиентов. Интернет-провайдер B обосновался в городке раньше A и владеет большим процентом клиентов. Интернет-провайдер B ведет конкурентную войну с Интернет-провайдером A, недовольный тем, что A ограничивает сферу деятельности B и выбивает почву из-под его ног. У Интернет-провайдера A работают более квалифицированные системные администраторы, которые смогли воспользоваться преимуществами различных программных средств, ограничив доступ пользователей к важной информации. Они достигли этого с помощью таких ухищрений, как организация почты (hosting mail) на отдельном сервере, использование различных регистрационных имен оболочки сервера для исключения возможности получения доступа к базе данных почтовых адресов различным пользователям. Однако Интернет-провайдер B не предпринял таких мер предосторожности. Однажды сотрудников Интернет-провайдера A осенила блестящая идея, как получить учетные записи Интернет-провайдера B. Эти учетные записи позволят им сначала получить доступ к почтовому серверу Интернет-провайдера B, а затем легко завладеть файлом паролей passwd. Зная пароли, можно будет по почте отправить всем пользователям Интернет-провайдера B предложение о сотрудничестве с Интернет-провайдером A, предлагая им существенные скидки по сравнению с текущими расходами у Интернет-провайдера B.
   Как вы можете видеть, утечка подобной информации может привести не только к взлому системы безопасности, но и, возможно, к банкротству. Предположим, что компания смогла получить доступ к информационным системам своего конкурента. Что остановит ее от кражи, дезинформации, мошенничества и осуществления всего того, что можно сделать для подрыва честной конкуренции? Дни наивности в Интернете закончены.
Почему опасна утечка информации?
   В силу различных причин всегда найдутся люди, которые не обеспокоены утечкой информации. Такое отношение к утечке информации объясняется, например, тем, что, по их мнению, утечку информации остановить невозможно и тайное всегда станет явным, или тем, что без допуска к некоторой хранимой на сервере информации нельзя наладить доверительные отношения с клиентами. Сюда относится и такая возможность, как «снятие отпечатков пальцев» систем, смысл которой состоит в идентификации систем на основе сравнения реакции системы с ожидаемыми действиями.
   Любая грамотно разработанная операционная система предоставляет возможности или для уклонения от «снятия отпечатков пальцев», или для затруднения проведения идентификации системы на их основе, требуя проведения дополнительных мероприятий. Некоторые системы даже предоставляют возможность посылки поддельных «отпечатков пальцев» чрезмерно навязчивым хостам. Причины этого очевидны. Возвращаясь к примеру из военной области, отметим, что зачастую подготовка к предстоящему нападению тщательно скрывается для достижения эффекта неожиданности. Это может достигаться маскировкой своих сил, скрытию их передислокации, передаче только зашифрованных сведений и т. д. Подобное ограничение утечки информации заставляет неприятеля принимать решения без знания истинного положения дел, увеличивая тем самым возможность совершения ошибки.
   Поэтому, по аналогии с армией, для которой существует риск нападения на нее грозного врага, следует приложить максимум усилий для скрытия ресурсов собственной сети от сбора сведений и предотвратить утечку информации. Любая имеющая значение информация о сети, которая окажется в распоряжении злоумышленника, предоставит ему возможность сделать обоснованные выводы в нужном направлении. Устранение утечки информации вынуждает злоумышленника предпринимать дополнительные меры для сбора необходимой ему информации. Возросшая активность злоумышленника увеличивает шансы его обнаружения.

Нарушения прав доступа к файлу

   Нарушения прав доступа к файлу создают благоприятные условия для начала атаки. Используя нарушения прав доступа к файлу и методы, описанные в секции «Утечка информации», злоумышленник может добраться до секретной информации типа имен пользователей или их паролей в системе, получить доступ к другим файлам при помощи, например, смены владельца файла или атаки символических ссылок (symboliclink attack).
Права
   Один из самых простых способов обеспечить безопасность файла состоит в обеспечении прав работы с ним. Часто это один из наиболее освещаемых аспектов безопасности системы. Некоторые однопользовательские системы типа Microsoft Windows 3.1/95/98/ME не поддерживают права доступа к файлам. В то же время многопользовательские системы имеют, по крайней мере, одно, а обычно несколько возможностей управления доступом к файлам.
   Например, Unix-подобные системы и некоторые Windows-системы поддерживают пользователей и группы пользователей, позволяют задавать атрибуты файлов для указания прав пользователя и группы пользователей на выполнение тех или иных действий с файлом. Пользователь или владелец файла может быть наделен правами полного управления файлом, включая операции чтения, записи и выполнения других разрешенных действий с файлом. В то же время пользователь группы, назначенной этому файлу, может иметь права на чтение и выполнение файла, а пользователи, не являющиеся владельцами файла или членами группы, могут обладать другим набором прав или вообще не иметь никаких разрешений на работу с файлом.
   В дополнение к стандартному набору прав владельца файла группы пользователей и многие Unix-подобные системы поддерживают более изощренные методы разрешения доступа к файлу. Их реализация разнообразна: от простого – типа предоставления возможности определить, какие пользователи имеют доступ к файлу, – до более сложного – назначения ролевого имени для открытия пользователям доступа к набору утилит. В составе операционной системы Solaris имеется два таких примера: ролевое управление доступом (Role-Based Access Control – RBAC) и списки управления доступом (ACL – Access Control Lists).
   Списки управления доступом ACL позволяют пользователю определить доступ к файлу для отдельных пользователей системы. Список доступа связан с владельцем и членством в группе.
   Ролевое управление доступом RBAC – сложный инструментарий, предусматривающий различные слои прав. Инструментарий можно настраивать, предоставляя пользователям обширные общие роли для выполнения таких функций, как добавление пользователей, изменение некоторых настроек системы и т. п. Также можно ограничить права пользователей, разрешив им выполнять только отдельные функции.
   Примечание
   Дополнительные сведения о RBAC и ACL можно найти в книге издательства Syngress Hack Proofing Sun Solaris 8 (ISBN 1-928994-44-X).
Атаки символических связей
   Атаки символических связей – это проблема, которая обычно используется злоумышленником для реализации своих замыслов. Цель подобных атак состоит в изменении полномочий работы с файлом, разрушении файла в результате добавления в конец новых данных или перезаписи файла с уничтожением ранее содержащейся в нем информации.
   Атаки символических связей часто начинаются из директорий для хранения временных данных. Обычно проблема возникает из-за ошибки программирования. Когда запускается уязвимая программа, она создает файл с параметрами, делающими его уязвимым для нападения. Таких параметров два.
   Первый – права работы с файлами. Второй – создание небезопасных временных файлов, то есть уязвимых для нападения злоумышленника. Если файл был создан с опасными с точки зрения безопасности системы правами работы, то он может быть изменен злоумышленником. В зависимости от алгоритма работы программы возможна ситуация, когда измененные злоумышленником данные временного файла могут быть переданы сессии пользователя.
   Во втором случае, если программа не проверяет существование файла на диске перед его созданием, атака на систему реализуется следующим образом. Если пользователь в состоянии определить имя временного файла прежде, чем он будет создан, то создается символическая связь с временным файлом, который будет создан и который намечен для нападения. В следующем примере продемонстрирован исходный текст программы, создающей файл с предсказуемым именем:
 
   /* lameprogram.c – Hal Flynn <mrhal@mrhal.com> */
   /* does not perform sufficient checks for a */
   /* file before opening it and storing data */
   #include <stdio.h>
   #include <unistd.h>
   int main()
   {
   char a[] = “This is my own special junk data
   storage.\n”;
   char junkpath[] = “/tmp/junktmp”;
   FILE *fp;
   fp = fopen(junkpath, “w”);
   fputs(a, fp);
   fclose(fp);
   unlink(junkpath);
   return(0);
   }
 
   Эта программа создает файл /tmp/junktmp без первоначальной проверки его существования.
   Пусть во время выполнения программы, создающей небезопасный временный файл, создаваемый файл уже существует. Тогда файл, указанный в символической связи, будет или перезаписан, или в конец этого файла будут добавлены новые данные при условии, если пользователь, выполняющий потенциально опасную программу, имеет право на запись в файл. Рисунки 3.5 и 3.6 демонстрируют пример использования подобной программы пользователем haxor для перезаписи файла пользователя ellipse.
   Рис. 3.5. Пользователь haxor создает злонамеренную символическую ссылку
 
   Рис. 3.6. В результате выполнения программы Lameprogram пользователем Ellipse осуществляется перезапись данных файла Lamedata

Дезинформация

   Поясним суть дезинформации на примере из военной области. Предположим, что часовые выставлены на посты для наблюдения за обстановкой. Один из них обнаружил разведчиков неприятеля. Часовой сообщает командованию о вражеской разведке, а командование отправляет собственную группу разведки для точного выяснения, кто шпионит за ними.
   Можно предположить, что генерал неприятеля уже думал над возможными вариантами своих действий при подобном развитии обстановки. Например, он может решить скрывать свои силы, пока не убедится, что перед ним никого нет. «Но что, если кто-то увидит мои наступающие силы, – может быть его следующей мыслью. – И если противостоящий мне неприятель пошлет разведчиков для разведки моих сил и занимаемых ими позиций, которые найдут мою армию сильнее, чем свою, то неприятель, вероятно, или укрепит свои позиции, или отойдет на другие позиции, где на них труднее напасть или где их нельзя обнаружить».
   Поэтому вражеский генерал может захотеть представить свои силы менее опасными, чем они являются в действительности. Он может спрятать тяжелое вооружение и большую часть пехоты, оставляя на обозрении только маленькую часть своих сил. В основе дезинформации лежит та же самая идея.
Способы и инструментарий дезинформации
   Как правило, после компрометации системы злоумышленник прилагает максимум усилий для скрытия своего присутствия и распространения дезинформации. Злоумышленники добиваются этого при помощи ряда способов.
   Например, в системе Sun Solaris была обнаружена уязвимость, предоставляющая злоумышленнику дополнительные возможности для распространения дезинформации. Речь идет об обработке списков контроля доступа ACL (access control list) на псевдотерминалах, подсоединенных к системе. После получения доступа к терминалу злоумышленник может установить элемент списка контроля доступа и завершить работу. Во время обращения другого пользователя к системе с того же самого терминала предыдущий владелец терминала (в данном случае злоумышленник) сохраняет за собой право записи на терминал, что позволит ему записать дезинформацию на терминал нового владельца.
   В следующих разделах рассмотрены некоторые из применяемых на практике способов дезинформации и соответствующего инструментария.
 
   Редактирование журналов регистрации
   Редактирование журналов регистрации – один из способов распространения дезинформации злоумышленником. Замечено, что когда действия злоумышленника становятся опасными для системы, у него появляется желание как можно дольше оставаться незамеченным. Для него будет даже лучше, если он сможет еще кого-нибудь увлечь в атаку или наделать достаточно шума, для того чтобы на этом фоне скрыть свое вторжение.
   При рассмотрении отказа от обслуживания поступившего запроса уже говорилось о генерации событий для записи их в журнал регистрации. Злоумышленник может попытаться переполнить журналы регистрации, но хорошо разработанная система предусматривает средства циклического заполнения журналов регистрации и обладает достаточными возможностями для предотвращения их переполнения. Зная это и пытаясь скрыть свою деятельность, злоумышленник может найти выход в генерации большого количества событий. При соответствующих обстоятельствах злоумышленник сможет создать большой поток событий, регистрируемых в журнале событий, а причина одного или нескольких из генерируемых злоумышленником событий будет выглядеть вполне законной.
   Если злоумышленник получает доступ к системе с правами администратора, то любые предположения о целостности журналов регистрации несостоятельны. Обладая правами администратора, злоумышленник может так отредактировать журналы регистрации, что будут удалены любые события, свидетельствующие о нападении, а содержимое журналов будет изменено таким образом, что можно будет заподозрить в нападении другого пользователя. Если это произошло, то только внешние программы, предназначенные для регистрации системных данных скомпрометированных компьютеров, или системы обнаружения вторжения в сеть могут предоставить полезную информацию.
   Некоторые инструментальные средства предусматривают возможность генерации случайных данных или случайного потока информации, который называется шумом. Обычно они используются злоумышленником для того, чтобы отвлечь внимание или запутать суть дела. Генерируемый инструментальными средствами шум может использоваться для обмана администратора, отвлечения его внимания от атаки или внушения ему мысли о том, что на систему начал атаку кто угодно, но только не этот человек.
   Редактирующий журналы регистрации злоумышленник преследует ряд целей. Одна из них заключается в создании видимости нормальной работы системы, как будто ничего не произошло. Другая – в создании обстановки полной неразберихи, когда противоречивые записи в журнале регистрации подталкивают администратора к мысли о выходе системы из-под контроля или, как было сказано ранее, наличия шума в системе. Некоторые средства, например типа Nmap, исследуя сеть, представляют дело таким образом, как если бы запросы на сканирование пришли из разных источников, создавая обстановку неразберихи и пряча злоумышленника за ложными целями.
 
   Программы типа rootkit
   К средствам дезинформации можно отнести программы rootkit, предназначенные для скрытия деятельности злоумышленника в системе. Известно несколько вариантов этих программ с собственными возможностями и недостатками. Программа rootkit – первое, что выбирает злоумышленник для обеспечения длительного доступа к системе.
   Rootkit работает, подменяя в UNIX-системах ключевые системные программы типа ls, df, du, ps, sshd и netstat, а в Windows – драйверы и записи системного реестра. Rootkit заменяет эти программы, а возможно, и еще какие-нибудь, на другие, которые настроены таким образом, чтобы не предоставлять администраторам достоверной информации о работе системы. Вне всякого сомнения, программы типа rootkit используются для скрытия злоумышленника и его деятельности в системе и предназначены для дезинформации. Они подталкивают администратора к мысли о нормальной работе системы в то время, когда злоумышленник контролирует ее, атакует новые хосты или занимается другими нехорошими делами.
 
   Модули ядра
   Модули ядра – часть кода, который может быть загружен в память и выгружен из памяти ядром операционной системы. Модуль ядра предоставляет ядру дополнительные функциональные возможности по мере необходимости. Ядро выгружает ненужный в данный момент модуль из памяти, чтобы освободить память для других программ. Модули ядра могут быть загружены для того, чтобы обеспечить поддержку, например, файловой системы другой операционной системой, управления устройством или чего-то еще.
   Злонамеренные модули ядра преследуют те же цели, что и программы типа rootkit. Они предназначены для дезинформации администраторов системы, заставляя их поверить в нормальную работу хоста. Тем самым они защищают злоумышленника от обнаружения, позволяя ему выполнить задуманное.
   Принципы работы модуля ядра и программы типа rootkit отличаются принципиально. Программы rootkit работают как фильтр, защищающий нужные данные от вездесущих администраторов. А модуль ядра работает на более низком уровне, перехватывая информационные запросы на уровне системных вызовов и не доводя до администратора любые данные, которые могут выдать присутствие несанкционированных гостей. Тем временем защищенный злонамеренным модулем ядра гость может найти скрытую лазейку в системе защиты системы и скомпрометировать систему, не подвергая себя опасности быть обнаруженным вследствие модификации системных утилит.
   Модули ядра становятся стандартом скрытия вторжения. После проникновения в систему злоумышленник должен просто загрузить модуль и удостовериться в том, что модуль загружен и в дальнейшем будет подгружаться системой. С этого момента и до перевода дисковода в автономный режим и монтировки другой копии операционной системы нельзя обнаружить ни злонамеренного модуля ядра, ни маскирующего с его помощью злоумышленника.

Доступ к специальным файлам / базам данных

   Ниже излагаются два метода проникновения в систему, которые основаны на получении доступа к специальным файлам и базам данных. Специальные файлы хотя и различаются форматом и функциями, но присутствуют во всех системах на всех платформах от систем NT до Sun Enterprise 15000 на Unisys Mainframe.
Нападения на специальные файлы
   Проблема нападений на специальные файлы становится очевидной, если пользователь использует сервис RunAs операционной системы Windows 2000. Когда пользователь выполняет обращающуюся к RunAs программу, Windows 2000 создает поименованный канал (канал – механизм связи между процессами, который позволяет одному процессу передавать данные другому процессу), запоминая мандат аутентификации в незашифрованном виде. Если сервис RunAs остановлен, то злоумышленник может создать именованный канал под тем же самым именем. Когда сервис RunAs стартует еще раз, соответствующий процессу мандат будет передан злоумышленнику, что позволит злоумышленнику зарегистрироваться в системе пользователем сервиса RunAs.
   Аналогичные проблемы есть и в UNIX-системах. Уже упоминалось об одной из них – псевдотерминалах системы Solaris. В компоненте дистрибутива Red Hat Linux 7.1, отвечающего за обновление системы, была выявлена следующая уязвимость. Оказывается, у злоумышленника есть возможность тайно просматривать файл подкачки, создаваемый пользователем при обновлении системы. Это происходит из-за создания файла подкачки с атрибутами, которые разрешают всем пользователям читать его. Сначала злоумышленник, руководствуясь низменными целями, основательно загружает память системы, вынуждая систему использовать файл подкачки. А затем, при различных состояниях системы, несколько раз копирует файл подкачки, для того чтобы на досуге поискать в копиях пароли и другую важную информацию.
Нападения на базы данных
   Автор на одном из этапов своей карьеры собирался стать администратором базы данных, полагая, что это позволит ему усовершенствовать профессиональные навыки в обслуживании систем и их безопасности. Чем больше он входил в курс дела, тем сильнее убеждался в том, что по напряженности труда работа администратором баз данных сродни участию в боевых действиях, потому что от него зависит финансовое благополучие компании. И если пришлось бы выбирать, он лучше бы пошел добровольцем на войну.
   Базы данных всегда были лакомым кусочком для злоумышленника. Современная профессиональная деятельность людей зачастую немыслима без централизованного хранилища информации, в котором содержатся финансовые данные, сведения о кредитных карточках, платежные ведомости, списки клиентов и т. д. Одна только мысль о ненадежности баз данных способна лишить сна генерального директора, не говоря уже о доведении администратора баз данных до нервного срыва. Можно сказать, что сегодня электронная коммерция процветает. А где бизнес, там и базы данных.
 
   Зона риска
   Системы управления базами данных являются объектами нападения с двух сторон. Поскольку они относятся к программному обеспечению, то им присущи общие проблемы программ, как, например, переполнение буфера, отказ в обслуживании, скорость реакции. Дополнительно к этому системы управления базами данных – фоновая компонента большинства современных программ Web-интерфейса, средств графического интерфейса пользователя и т. д. Поэтому базы данных безопасны настолько, насколько безопасны программные средства интерфейса с пользователем и обработки данных.
   Наблюдается устойчивая зависимость безопасности баз данных от Web-интерфейса, по крайней мере, по двум причинам. Во-первых, зачастую программы Web-интерфейса завершаются аварийно при обработке специальных символов. Во-вторых, из-за неважного проектирования алгоритмов Web-интерфейса известны случаи неавторизованного доступа к базам данных. Сказанное подтверждается фактами регулярного нахождения ошибок в интерфейсах пакетов электронной коммерции.
   Сложно написать хорошую программу обработки информации, введенной пользователем. Пользователь всегда может ввести что-нибудь такое, что почти невозможно предусмотреть. Иногда – по невежеству, иногда – специально. Программа должна правильно обрабатывать специальные символы, например одинарные () и двойные (") кавычки, прямой (/) и обратный слэш (\) и некоторые другие, иначе быстро найдется желающий воспользоваться ошибками. Пропускающая спецсимволы программа интерфейса не сможет служить преградой для выполнения произвольно заданных команд.
   Плохо разработанный интерфейс – тема отдельного разговора. Ошибки в проектировании интерфейса позволяют злоумышленнику по своему желанию просматривать и удалять таблицы, выполнять SQL-запросы. Хотя в этом нет ничего нового, подобные инциденты происходят постоянно.
 
   Программные средства баз данных
   Программные средства баз данных богаты сюрпризами нарушения безопасности. Безопасность базы данных зачастую определяется безопасностью ее программных средств. И это не требует особых пояснений.
   Например, система управления базами данных Oracle может работать на нескольких платформах. Нишад Херат (Nishad Herath) и Брок Теллер (Brock Tell ier) из Network Associates COVERT Labs нашли уязвимость в версиях Oracle 8.1.5–8.1.7. Уязвимость была вызвана некорректной работой программы Oracle – TNS Listener.
   Для незнакомых с Oracle поясним, что программа TNS Listener облегчает подключения к базе данных и управляет ими. Она прослушивает произвольный порт данных, в последних версиях порт 1521/TCP, ожидая запроса на установку соединений к базе данных. После получения запроса программа разрешает пользователю зарегистрироваться в базе данных в соответствии с его мандатом (мандат – учетная запись с параметрами доступа пользователя, сформированными после его успешной аутентификации).
   Выявленная уязвимость проявляется при посылке откорректированного злоумышленником пакета Net8, который перехватывается программой TNS Listener. Логика работы программы TNS Listener такова, что этого оказывается достаточно для получения доступа к базе данных на локальной машине и выполнения произвольной программы на ней. Если для Unix-систем подобный дефект имеет большое значение, то для систем Windows – очень большое. Для Unix-систем найденная уязвимость позволяет злоумышленнику получить доступ к базе данных на локальной машине и зарегистрироваться пользователем Oracle, а для систем Windows – с привилегиями LocalSystem, эквивалентными правам администратора. Вопросы выполнения программы будут рассмотрены в следующей секции.