1.4 Почему нарушители могут проникать внутрь систем?
Программное обеспечение (ПО) всегда имеет ошибки и уязвимости. Системные администраторы и программисты никогда не могут отследить и исключить все возможные проблемы. Нарушителю же надо найти только одну "дыру", чтобы проникнуть внутрь.
1.4.1 Ошибки ПО
Ошибки ПО можно классифицировать следующим образом:
Переполнение буфера. Почти все уязвимости, о которых вы можете прочитать в прессе, связаны с этой проблемой. Типичный пример - программист, который хранения имени пользователя выделает только 256 символов. Несомненно, программист думает, что ни у кого не будет имени состоящего, из более чем 256 символов. Но хакер думает иначе, "Что произойдет, если я введу ложное имя пользователя длиннее 256 символов?" Где хранятся дополнительные символы? Если хакеры выполнят свою работу "правильно", они могут послать 300 символов, включая исполняемый код, который будет выполняться сервером, что может привести к опасным последствиям. Хакеры находят эти ошибки различными путями. Прежде всего, в Сети имеется исходный код для массы сервисов. Хакеры, как правило, просматривают этот код в поисках программ и утилит, имеющих проблемы с переполнением буфера. Во-вторых, хакеры могут и сами изучать программы с целью определить, имеют ли они какие-нибудь проблемы, хотя чтение двоичного кода является достаточно трудной задачей. В третьих, хакеры будут исследовать каждый участок программы, который работает с входными данными, и будут пытаться переполнить его с помощью случайных (произвольных) данных. Если программа выходит из строя, то появляется хороший шанс для проникновения внутрь. Отметим, например, что эта проблема является широко распространенной в программах, написанных на C/C++, но редкой в программах, написанных на языке Java.
Неожиданные комбинации. Программы обычно составляются с использованием многих слоев (уровней) кода, включая ядро операционной системы (ОС) в качестве основы для большой части других слоев. Нарушители могут часто посылать входные данные, которые являются бессмысленными для одного слоя (уровня), но много значащими для другого. Наиболее распространенный язык для обработки входных данных пользователя на Web - PERL. Программы, написанные на PERL, как правило, будут посылать эти входные данные к другим программам для дальнейшей оценки. Наиболее распространенный хакерский метод - ввести строку типа "| mail < /etc/passwd". И она будет выполняться, потому что PERL "просит" ОС запустить дополнительную программу с этими входными данными. Однако ОС перехватывает символ '|' и запускает 'mail' -программу, которая передает нарушителю файл паролей по электронной почте.
Необрабатываемые входные данные. Большинство программ пишутся для обработки достоверных входных данных. Большинство программистов не учитывают ситуацию, когда кто-то вводит данные, не соответствующие спецификации.
Состязания. Большинство систем сегодня являют "многозадачными ". Это означает, что они могут выполнять одновременно более одной программы. Есть опасность, если двум программам требуется доступ к одним и тем же данным в одно и то же время. Представим себе две программы А и В, которым необходимо изменить один и тот же файл. Для того, чтобы модифицировать файл, каждая программа должна сначала загрузить файл в оперативную память, изменить содержание в памяти, затем скопировать из памяти обратно в файл. Состязание имеет место, когда программа A читает файл в памяти, а затем производит изменение. Однако, до того как А запишет файл, программа В вступит в действие и полностью прочитает/модифицирует/запишет в файл. Теперь программа A записывает свою собственную копию обратно в файл. Поскольку программа А начала свое копирование до того, как программа В сделала свои изменения, все эти изменения, сделанные программой В, будут потеряны. Так как вы получаете последовательность событий как раз в правильном порядке, "состязание" проявляется очень редко. Нарушители, обычно, делают сотни и тысячи попыток, прежде чем они смогут реализовать данную ситуацию и проникнуть в систему.
1.4.2 Конфигурация системы
Ошибки в конфигурации системы можно классифицировать следующим образом:
Конфигурации по умолчанию: Большинство систем поставляется покупателям с конфигурациями, установленными по умолчанию, и облегчающими использование систем. К сожалению, "облегчающие использование" означает "легко взламываемые". Практически любой компьютер, поставляемый с ОС UNIX или WinNT, может быть легко взломан.
Ленивые администраторы: Поразительное количество машин сконфигурировано с пустым root/administrator паролем. Это связано с тем, что администраторы слишком ленивы для того, чтобы сразу сконфигурировать компьютер. Они хотят побыстрее включить и запустить его с минимумом действий. К сожалению, позднее они устраняют эту проблему с паролем, позволяя нарушителям легко получать несанкционированный доступ к компьютеру. Одна из первых вещей, которую сделает нарушитель при проникновении в сеть, заключается в том, что он просканирует все компьютеры на предмет пустых паролей.
Создание дыры: Виртуально все программы могут быть сконфигурированы для запуска в незащищенном режиме. Временами администраторы неумышленно открывают уязвимости в компьютере. Большинство руководств администратора рекомендует администраторам выключить все, в чем нет необходимости на компьютере. Отметим, что системы анализа защищенности защиты могут, как правило, находить эти дыры и уведомлять администратора.
Доверенные связи: Нарушители часто "прыгают по островкам" по всей сети, используя доверенные связи. Сеть из доверенных компьютеров является такой же защищенной, как ее самая слабая связь или звено.
1.4.3 Взлом пароля
Это довольно-таки специфическая категория:
Действительно слабые пароли: Большинство людей используют в качестве паролей свои имена, имена своих детей, супруга/супруги, любимого(ой) или модели машины. Также есть пользователи, которые выбрали в качестве пароля выбрали слово "пароль" или "password" или вообще никакого слова. В целом существует перечень из не менее чем 30 возможностей, которые может использовать нарушитель для подбора паролей.
Атака по словарю: Потерпев неудачу в случае вышеуказанной атаки, нарушитель может затем попытаться использовать "атаку по словарю". В этом случае нарушитель будет использовать программу, которая будет опробовать в качестве пароля каждое возможное слово, приведенное в словаре. Атаки по словарю могут осуществляться либо путем неоднократных регистраций в атакуемой системе, либо путем сбора шифрованных паролей и попыток найти им незашифрованную пару. Для этих целей нарушители, как правило, имеют копию русского, английского словаря, а также словари других иностранных языков. Все они используют дополнительные словари, как с именами (см. выше), так и со списками наиболее распространенных паролей.
Подбор пароля: Аналогично атаке по паролю, нарушитель старается использовать все возможные комбинации символов. Короткий пароль, состоящий из 4-х букв в нижнем регистре, может быть взломан за несколько секунд (приблизительно полмиллиона возможных комбинаций). Длинный семизначный пароль, состоящий из символов в нижнем и верхнем регистре, а также чисел и знаков препинания (10 триллионов комбинаций) может потребовать не один месяц для взлома, допуская что вы можете осуществлять миллион комбинаций в секунду.
1.4.4 Перехват незащищенного трафика
Общедоступная среда: На традиционном Ethernet вы можете разместить перехватчик (sniffer), чтобы перехватывать весь трафик на сегменте. В настоящее время это становится все более и более трудным, т.к. многие организации используют коммутируемые сети, состоящие из многих сегментов.
Перехват на сервере: Однако в коммутируемых сетях вы можете установить сниффер на сервере, тем самым, получая доступ ко всей циркулирующей в сети информации. Например, вы можете не знать пароля определенного пользователя, но перехват пароля, передаваемого по протоколу Telnet позволяет вам получить доступ к удаленного узлу.
Удаленный перехват: В больших сетях вы можете получить много интересной информации даже не имея возможности "прослушивать" весь трафик (например, в случае доступного RMON).