8.2. Направления атак и типовые сценарии их осуществления в ОС UNIX

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

Итак, какие же цели преследует кракер, атакующий извне ваш компьютер? Видимо, их может быть несколько:

  1. получить доступ к важной информации, хранящейся у вас. О, вероятно, вы крупная компьютерная шишка и за вами серьезно охотятся (если, только конечно, этой информацией не является несколько гигабайт gif'ов высокого разрешения);
  2. получить доступ к ресурсам вашей системы. Это может быть как процессорное время (особенно если вы обладаете суперкомпьютером), так и дисковое пространство (например, для организации пиратского ftp-сайта (site). В этом случае вы не только ничего не потеряете, но и, может быть, приобретете честно сворованное программное обеспечение стоимостью много тысяч долларов);
  3. иметь плацдарм для осуществления цели 1), но для атаки на другой компьютер - тогда в журналах атакованного компьютера будет значиться, что атака осуществлялась с вашего адреса. Вы, конечно, будете доказывать, что вы тут не при чем, и, вероятно, докажете это, но инцидент принесет вам несколько неприятных минут и несколько неприятных слов об уровне защиты вашего хоста;
  4. как пробный шар, отладка механизмов атак на другие хосты. Ну, не расстраивайтесь, вы докажете тем самым, что вы не так уж небесполезны в сети, в отличие от других хостов, на которые никогда никто не нападал, и которые остро ощущают свою ненужность.

Теперь рассмотрим основные пути получения взлом-щиком несанкционированного доступа на компьютер.

Как известно, в UNIX различают два вида пользователей - обычный пользователь, имеющий права на доступ в рамках своего идентификатора (UID, user id) и членства в группе (GID, group ID) (в UNIX каждый пользователь в текущий момент может быть членом только одной группы, соответственно, он имеет один UID и один GID); а также так называемый суперпользователь (root), имеющий неограниченные права (UID и GID у него равны специальному значению 0). По мере развития среди обычных пользователей выделились так называемые специальные пользователи. Они обычно имеют зарезервированные имена (например, guest, bin, uucp и т.п.) и номера UID и GID (например, они всегда меньшие 100). Хотя нет никакого особого механизма в защите UNIX, отличающего специального пользователя от обычного можно сказать, что первый имеет еще меньшие права, чем второй. В частности, специальным пользователям обычно нельзя зайти в систему нормальным образом. Самым интересным для нас примером специального пользователя является анонимный пользователь ftp, который так и называется - anonymous или ftp.

Наконец, условно к категории пользователей можно отнести человека, удаленно подключившегося (обычно по протоколу TELNET) к вашей машине и взаимодействующего с одной из программ-демонов (в современной терминологии такие программы называются серверами). Эти программы обычно стартуют при загрузке машины, чаще всего от имени суперпользователя и всегда активны как процессы. Это позволяет пользователю в любой момент времени удаленно подключаться к ним, но при этом он не имеет никаких прав на чтение/запись информации на вашем компьютере, он вообще не идентифицируется системой UNIX (командой who). Однако он может исполнять некоторые команды - не программы UNIX, а команды-запросы к тому демону, к которому он подключен. Так, подключившись по протоколу TELNET на 25 порт, можно вводить команды SMTP-сервера, например, mail или expn. Последний тип пользователя (назовем его псевдопользователь) оказывается чуть ли не самым важным для нашего рассмотрения, т.к., не обладая никакими правами (и обязанностями тоже, кстати - от него не требуется аутентификация, учет по нему тоже не ведется), он взаимодействует с демонами, которые практически всегда имеют полномочия суперпользователя.

Итак, условно иерархию пользователей на UNIX-машине можно представить как:

  1. Суперпользователь - неограниченные права.
  2. Обычный пользователь - права, ограниченные ему суперпользователем.
  3. Специальный пользователь - права, ограниченные ему суперпользователем для работы с конкретным приложением.
  4. Псевдопользователь - нет никаких прав, он вообще не идентифицируется системой.

Очевидно, что любой пользователь интернета всегда имеет привилегии уровня 3 на вашем хосте, а также, если поддерживается соответствующий сервис, привилегии уровня 2.

Таким образом, задачей хакера будет являться несанкционированное получение привилегий более высокого уровня. (Заметим, кстати, что вовсе необязательно конечной целой хакера является получение именно привилегий суперпользователя - вирус Морриса, например, даже и не пытался сделать этого.) Эту задачу он, очевидно, может попытаться решить различными путями: либо получить сразу требуемые привилегии, либо постепенно наращивать их. Рассмотрим далее типовые сценарии их получения и средства UNIX, делающие их возможными.

1. "Сразу в дамки" - имея привилегии уровня 3, хакер получает права суперпользователя. Как уже отмечалось, такой фантастический прыжок возможен "благодаря" механизму демонов UNIX, отвечающих за обработку удаленных запросов. Т. к. эти демоны выполняются от имени суперпользователя, то все, что надо сделать псевдопользователю - это знать (существующие или най-ти самому) "дыры" или ошибки в этих демонах, которые позволят эксплуатировать их нестандартным или запрещенным образом. Обычно это сводится к возможности удаленно выполнить от их имени любую команду на атакуемом хосте - какую конкретно, зависит от намерений и характера хакера. Иногда это может быть создание ошибочной ситуации, приводящей к аварийному завершению демона с выдачей дампа памяти на диск, содержащий весьма полезную для хакера информацию (например, кэшированные пароли). Типичными примерами уязвимых демонов были и остаются sendmail, ftpd, fingerd. Новые демоны (типа httpd или talkd) имеют гораздо меньшую историю эксплуатации, соответственно, известно меньшее число их дыр и, соответственно, тем перспективнее они для поиска новых.

Такой сценарий был очень популярен на заре развития глобальных сетей, им пользовался вирус Морриса (см. п. 8.4.1.1). Сейчас найти дыру такого рода в демонах очень трудно, но можно, о чем свидетельствует п.8.6.2. Хосты, допускающие атаку по этому сценарию, должны считаться катастрофически незащищенными.

2. "Из специального - в обычного или выше" . Этот сценарий очень похож на описанный выше, с тем исключением, что для хакера требуются начальные привилегии уровня 2 (иначе говоря, запущен некоторый дополнительный сервис). Чтобы четко отличать эти атаки от предыдущего типа, будем требовать, что в этом случае злоумышленник всегда проходит некую (пусть примитивную) идентификацию и, возможно, аутентификацию. Это не очень серьезное допущение, большинство хостов поддерживают некоторый удобный (например, анонимный ftp) или необходимый сервис (типа tftp для удаленной загрузки бездисковых станций). Привилегии уровня 2 могут дать возможность хакеру читать некоторые файлы (например, из ~ftp/pub), и, что самое главное, записывать свои файлы на ваш компьютер (в каталог типа ~ftp/incoming). С другой стороны, т. к. Пользователь регистрируется на вашем компьютере, в его файлах-протоколах остается некоторая информация о подключении.

Типичным примером атаки по данному сценарию является атака, которая по протоколу tftp получает файл паролей /etc/passwd, и затем с его помощью подбираются пароли пользователей. Этот пример показывает, что необязательно желаемые привилегии будут получены немедленно, подобные атаки могут лишь создать предпосылки для их возможного получения в дальнейшем.

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

3. "Маловато будет: из обычного - в суперпользователи" . Этот сценарий, пожалуй, наиболее прост, широко распространен и подавляющее большинство сообщений о так назваемых "дырах" в UNIX относится именно к нему. Для его осуществления злоумышленник должен уже быть обычным пользователем (иногда говорят, что он имеет бюджет (account)) на том компьютере, который он собирается взламывать. Это, с одной стороны, серьезное ограничение на масштабность проникновения, с другой стороны, большинство утечек информации происходит через "своих" , через подкупленного сотрудника, который пусть и не имеет больших полномо-чий, но уж входное имя на секретный компьютер у него будет.

Своей осуществимостью атаки данного рода обязаны очередному недостатку безопасности UNIX, который называется механизм SUID/SGID-процессов. Не будем сейчас подробно останавливаться на необходимости и причинах появления такого механизма в этой операционной системе, отметим лишь, что многим системным программам (которые могут быть запущены любым, в том числе и непривилегированным пользователем) для правильного функционирования необходимы дополнительный полномочия. Приведем хрестоматийный пример: изменения пользователем пароля самому себе. Не вызывает сомнения, что пользователь может иметь право на подобную операцию, однако в терминах UNIX это равносильно наличию права на запись в общий для всех пользователей файл /etc/passwd, что, очевидно, недопустимо. Поэтому программа, осуществляющая смену пароля пользователя, выполняется не от имени запустившего его пользователя, а от имени суперпользователя (который, естественно, имеет право на запись в файл /etc/passwd). Для этого она обладает специальным атрибутом SUID/SGID, означающего смену идентификатора пользователя и/или группы у запущенного процесса.

Эта, безусловно нарушающая исходную модель разграничения доступа, особенность UNIX была бы "нехо-рошей" , будь она всего у одной программы passwd. Однако оказывается, что этот атрибут необходим целому множеству программ, порой очень сложных. Отсюда ясно, что злоумышленник, найдя ошибку в одной из программ, обладающей атрибутом SUID root, может от ее (т. е. суперпользователя) имени произвести некоторые действия. Стандартным приемом считается копирование файла с командным интерпретатором (sh или csh) и установка на него атрибута SUID root. Таким образом, злоумышленник имеет под рукой стандартную программу sh, но все команды в ней он исполняет от имени суперпользователя.

Ошибки в SUID/SGID-программах находятся регулярно, с частотой несколько раз в месяц. Следуя одной из основных аксиом программирования, можно сделать вывод, что эти ошибки будут находиться всегда. Соответственно, многие защищенные версии UNIX стремятся обезопасить себя от атак такого рода, сильно модифицировав или вообще уйдя от SUID/SGID-механизма.

Внимательный читатель заметил, что этот сценарий, вообще говоря, не является удаленной атакой по определению (и не будет подробно рассматриваться в примерах), но введен в классификацию из-за своей масштабности и фундаментальности причины - механизма SUID/SGID-процессов. Поскольку любая система UNIX (использующая этот механизм) является уязвимой, то хосты, которые подвержены атакам такого класса, будем называть потенциально незащищенными.

4. "Он слишком многим доверял" . Взлом производит обычно псевдопользователь, повышая свои полномочия до обычного, с использованием механизма доверия. Термин "доверие" , также оказывающийся одной из важнейших брешей в безопасности UNIX, пришел из тех далеких времен, когда компьютерные системы хотели доверять друг другу. "Доверие" употребляется всякий раз, когда возникает ситуация, в которой хост может позволить пользователю (как правило удаленному) использовать локальные ресурсы без аутентификации (ввода пароля).

В UNIX существует много подсистем, использующих доверие. Наиболее простой и часто применяемой(даже против такого мастера, как Шимомура) из них являются так называемые r-службы (remote, "удаленные"). При наличии файлов .rhosts и hosts.equiv, содержащих имена хостов, доступ с них возможен без указания пароля. Аналогично построены на механизме доверия, например, NFS-сервера, в управляющих (export) файлах которых можно разрешить доступ к некоторому каталогу для группы пользователей, в том числе и всем (everyone). Как подчеркивал В. Венема в своей статье [16], "любая форма доверия может быть подменена, обманута или разрушена, особенно когда служба, получающая запросы на проверку клиента, расположена вне сервера, или когда механизм доверия основан на слабой форме аутентификации" .

Обычно доступ к системе по данному сценарию возможен только при неправильных настройках соответствующих файлов (не будем сейчас подчеркивать, что эти настройки также могут быть внесены злоумышленником сознательно - см. атаку Митника в п. 4.5.2), поэтому хосты, подверженные атакам этого класса, будем называть "слишком доверчивыми" или административно незащищенными.

Итак, подводя итог, повторим те механизмы и особенности UNIX, которые делают возможным удаленные атаки на телекоммуникационные службы. Это, в первую очередь, механизм SUID/SGID-процессов, относительно легко позволяющий обычному пользователю получить привилегии другого пользователя или группы. Во-вто-рых, это наличие демонов (в современных ОС они называются серверными программами), обеспечивающих обработку удаленных запросов. Поскольку они обычно запускаются от имени суперпользователя, то при неправильном функционировании его права могут быть полу-чены удаленным пользователем. Наконец, это широкое использование механизма доверия, который может быть обманут удаленным пользователем.

В следующих разделах мы опишем в хронологическом порядке наиболее интересные или известные способы проникновения в UNIX-системы.


Хакинг | Главная | Содержание

Hosted by uCoz