Что такое переполнение буфера

      Комментарии к записи Что такое переполнение буфера отключены

Лабораторная работа №4.

Основные виды атак. Методы хакеров.

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

Исследования показали, что хакерами чаще всего становятся:

  • мужчины;
  • в возрасте от 16 до 35 лет;
  • одинокие;
  • образованные;
  • технически грамотные.

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

Определение мотивации хакеров

Мотивация дает ключ к пониманию поступков хакеров, выявляя замысел неудавшегося вторжения. Мотивация объясняет, почему компьютеры так привлекают их. Какую ценность представляет ваша система? Чем она интересна? Для какого метода взлома подходит? Ответы на эти вопросы позволят профессионалам в области безопасности лучше оценить возможные угрозы для своих систем.

Привлечение внимания

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

Взломав систему, хакеры хвастаются своими победами на IRC-канале (Internet Relay Chat — программа для общения в реальном времени через интернет), который они специально завели для таких дискуссий. Хакеры зарабатывают положение в обществе выводом из строя сложной системы или нескольких систем одновременно, размещением своего опознавательного знака на повреждаемых ими веб-страницах.

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

Желание привлечь к себе внимание порождает ненаправленные атаки, т. е. взлом выполняется ради развлечения и не связан с определенной системой. Направленные атаки, целью которых является получение конкретной информации или доступ к конкретной системе, имеют другую мотивацию. С точки зрения безопасности это означает, что любой компьютер, подключенный к интернету, представляет собой потенциальную мишень для атак.

Примечание

Все чаще наблюдается еще одна форма мотивации — хактивизм (hactivism), или хакинг во имя общественного блага. Хактивизм связывает себя с политическими акциями и зачастую служит поводом для оправдания преступления. Он является более опасным, поскольку привлекает честных и наивных людей. Дополнительная информация находится на сайте http://hacktivismo.com/.

Алчность

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

Если в системе обнаружится вторжение, большинство организаций исправит уязвимость, которая использовалась при атаке, восстановит систему и продолжит работу. Некоторые обратятся за поддержкой к правоохранительным органам, если не смогут выследить взломщика за недостатком доказательств, или если хакер находится в стране, где отсутствуют законы о компьютерной безопасности. Предположим, что хакер оставил улики и задержан. Далее дело будет вынесено на суд присяжных, и прокурор округа (или федеральный прокурор) должен будет доказать, что человек на скамье подсудимых действительно взломал систему жертвы и совершил кражу. Это сделать очень трудно!

Даже в случае вынесения обвинительного приговора наказание хакера может быть очень легким. Вспомним случай с хакером по имени Datastream Cowboy. Вместе с хакером Kuji он взломал систему Центра авиационных разработок базы ВВС Гриффиз (Griffis) в Риме и Нью-Йорке и украл программное обеспечение на сумму свыше двухсот тысяч долларов. Хакером Datastream Cowboy оказался 16-летний подросток из Великобритании — он был арестован и осужден в 1997 г. Его присудили к уплате штрафа размером в 1915 долларов.

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

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

Злой умысел

И последней мотивацией хакера может быть злой умысел, вандализм. В этом случае хакер не заботится о захвате управления системой (только если это не помогает ему в его целях). Вместо этого он старается причинить вред легальным пользователям, препятствуя их работе в системе, или законным владельцам сайта, изменяя его веб-страницы. Злонамеренные атаки обычно направлены на конкретные цели. Хакер активно стремится нанести ущерб определенному сайту или организации. Основная причина таких атак — желание отомстить за несправедливое обращение или сделать политическое заявление, а конечный результат — причинение вреда системе без получения доступа к ней.

История хакерских методов

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

Коллективный доступ

Первоначальной целью при создании интернета был общий доступ к данным и совместная работа исследовательских институтов. Таким образом, большинство систем было сконфигурировано для коллективного использования информации. При работе в операционной системе Unix использовалась сетевая файловая система (Network File System, NFS), которая позволяла одному компьютеру подключать диск другого компьютера через локальную сеть (local area network, LAN) или интернет.

Этим механизмом воспользовались первые хакеры для получения доступа к информации — они подключали удаленный диск и считывали ее. NFS использовала номера идентификаторов пользователя (user ID, UID) в качестве промежуточного звена для доступа к данным на диске. Если пользователь JOE с номером ID 104 имел разрешение на доступ к файлу на своем домашнем компьютере, то другой пользователь ALICE с номером ID 104 на удаленном компьютере также мог прочитать этот файл. Опасность возросла, когда некоторые системы разрешили общий доступ в корневую файловую систему (root file system), включая файлы конфигурации и паролей. В этом случае хакер мог завладеть правами администратора и подключить корневую файловую систему, что позволяло ему изменять файлы конфигурации удаленной системы (рис. 4.1).

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

увеличить изображение
Рис. 4.1. Использование сетевой файловой системы NFS для доступа к удаленным системным файлам

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

Уязвимое место в виде совместного доступа к файлам имеется не только в операционной системе Unix, но и в Windows NT, 95, 98. Некоторые из этих систем можно настроить на разрешение удаленного подключения к их файловым системам. Если пользователь решит установить совместный доступ к файлам, то он по ошибке может легко открыть свою файловую систему для всеобщего использования.

Внимание!

Новые системы коллективного доступа к файлам, например Gnutella, позволяют компьютерам внутренней сети устанавливать общий доступ к файлам других систем в интернете. Эти системы имеют перенастраиваемую конфигурацию и могут открывать порты, обычно защищенные межсетевым экраном (например, порт 80). Такие системы представляют более серьезную опасность, чем NFS и общий доступ к файлам в ОС Windows.

В ту же самую категорию, что и совместное использование файлов и неправильная настройка, относится удаленный доступ с доверительными отношениями. Использование службы удаленного входа в систему без пароля rlogin является обычным делом среди системных администраторов и пользователей. Rlogin позволяет пользователям входить сразу в несколько систем без повторного ввода пароля. Этими разрешениями управляют файлы типа .rhost и host. В случае правильной настройки (хотя мы считаем, что использование rlogin недопустимо вообще) они однозначно определяют те системы, для которых разрешен удаленный вход. Система Unix использует знак плюс (+), размещенный в конце файла, который означает, что отдельные системы доверяют пользователю, что ему не обязательно повторно вводить пароль, и не важно, с какой системы он входит. Естественно, хакеры любят находить такие ошибки. Все, что им нужно сделать для проникновения в систему — это идентифицировать учетную запись пользователя или администратора.

Примечание

Межсетевые экраны могут контролировать не только коллективное использование файлов, но и удаленный доверительный доступ из внешней сети. Однако во внутренней сети внешний межсетевой экран такой контроль выполнить не сможет. И это является серьезной проблемой безопасности.

Слабые пароли

Наверное, самый общий способ, который используют хакеры для входа в систему, — это слабые пароли. Пароли по-прежнему применяются для аутентификации пользователей. Так как это стандартный метод идентификации для большинства систем, он не связан с дополнительными расходами. Кроме того, пользователи понимают, как работать с паролями. К сожалению, многие не знают, как выбрать сильный пароль. Очень часто используются короткие пароли (меньше четырех символов) или легко угадываемые. Короткий пароль позволяет применить атаку в лоб, т. е. хакер будет перебирать предположительные пароли, пока не подберет нужный. Если пароль имеет длину два символа (и это буквы), то возможных комбинаций будет всего 676. При восьмисимвольном пароле (включающем только буквы) число комбинаций увеличивается до 208 миллионов. Естественно, гораздо легче угадать двухсимвольный пароль, чем восьмисимвольный!

Легко угадываемый пароль также является слабым паролем. Например, пароль корневого каталога toor (root, записанный в обратном порядке) позволит хакеру очень быстро получить доступ к системе. Некоторые проблемы, связанные с паролем, принадлежат к категории неправильной настройки системы. Например, в старейшей корпорации цифрового оборудования Digital Equipment Corporation систем VAX/VMS учетная запись службы эксплуатации (field service) имела имя field и заданный по умолчанию пароль field. Если системный администратор не знал об этом и не менял пароль, то любой мог получить доступ к системе с помощью данной учетной записи. Вот несколько слабых паролей: wizard, NCC1701, gandalf и Drwho.

Наглядный пример того, как слабые пароли помогают взламывать системы, — червь Морриса. В 1988 г. студент Корнеллского университета Роберт Моррис разработал программу, которая распространялась через интернет. Эта программа использовала несколько уязвимых мест для получения доступа к компьютерным системам и воспроизведения самой себя. Одним из уязвимых мест были слабые пароли. Программа наряду со списком наиболее распространенных паролей использовала следующие пароли: пустой пароль, имя учетной записи, добавленное к самому себе, имя пользователя, фамилию пользователя и зарезервированное имя учетной записи. Этот червь нанес ущерб достаточно большому количеству систем и весьма эффективно вывел из строя интернет.

Дефекты программирования

Хакеры пользовались дефектами программирования много раз. К этим дефектам относится оставленный в программе черный ход (back door), который позволяет впоследствии входить в систему. Ранние версии программы Sendmail имели такие черные ходы. Наиболее часто использовалась команда WIZ, доступная в первых версиях Sendmail, работающих под Unix. При подключении с помощью Sendmail (через сетевой доступ к порту 25) и вводе команды WIZ появлялась возможность запуска интерпретатора команд (root shell). Эта функция сначала была включена в Sendmail как инструмент для отладки программы. Подобные функции, оставленные в программах общего назначения, позволяют хакерам моментально проникать в системы, использующие эти программы. Хакеры идентифицировали множество таких лазеек, большинство из которых было, в свою очередь, устранено программистами. К сожалению, некоторые черные ходы существуют до сих пор, поскольку не на всех системах обновилось программное обеспечение.

Не так давно бум в программировании веб-сайтов привел к созданию новой категории неосторожного программирования. Она имеет отношение к онлайновой торговле. На некоторых веб-сайтах информация о покупках: номер товара, количество и даже цена — сохраняется непосредственно в строке адреса URL. Эта информация используется веб-сайтом, когда вы подсчитываете стоимость покупок и определяете, сколько денег снято с вашей кредитной карты. Оказывается, что многие сайты не проверяют информацию при упорядочивании списка, а просто берут ее из строки URL. Если хакер модифицирует URL перед подтверждением, он сможет получить пустой номер в списке. Бывали случаи, когда хакер устанавливал цену с отрицательным значением и, вместо того чтобы потратить деньги на покупку, получал от веб-сайта кредит. Не совсем разумно оставлять подобную информацию в строке адреса, которая может быть изменена клиентом, и не проверять введенную информацию на сервере. Несмотря на то, что это уязвимое место не позволяет хакеру войти в систему, большому риску подвергается и веб-сайт, и организация.

Социальный инжиниринг

Социальный инжиниринг — это получение несанкционированного доступа к информации или к системе без применения технических средств. Вместо использования уязвимых мест или эсплойтов хакер играет на человеческих слабостях. Самое сильное оружие хакера в этом случае — приятный голос и актерские способности. Хакер может позвонить по телефону сотруднику компании под видом службы технической поддержки и узнать его пароль для решения небольшой проблемы в компьютерной системе сотрудника. В большинстве случаев этот номер проходит.

Иногда хакер под видом служащего компании звонит в службу технической поддержки. Если ему известно имя служащего, то он говорит, что забыл свой пароль, и в результате либо узнает пароль, либо меняет его на нужный. Учитывая, что служба технической поддержки ориентирована на безотлагательное оказание помощи, вероятность получения хакером хотя бы одной учетной записи весьма велика.

Хакер не поленится сделать множество звонков, чтобы как следует изучить свою цель. Он начнет с того, что узнает имена руководителей на веб-сайте компании. С помощью этих данных он попытается раздобыть имена других служащих. Эти новые имена пригодятся ему в разговоре со службой технической поддержки для получения информации об учетных записях и о процедуре предоставления доступа. Еще один телефонный звонок поможет узнать, какая система используется и как осуществляется удаленный вход в систему. Используя имена реальных служащих и руководителей, хакер придумает целую историю о важном совещании на сайте клиента, на которое он якобы не может попасть со своей учетной записью удаленного доступа. Сотрудник службы технической поддержки сопоставит факты: человек знает, что происходит, знает имя руководителя и компании — и, недолго думая, предоставит ему доступ.

Другими формами социального инжиниринга являются исследование мусора организаций, виртуальных мусорных корзин, использование источников открытой информации (веб-сайтов, отчетов, предоставляемых в Комиссию по ценным бумагам США, рекламы), открытый грабеж и самозванство. Кража портативного компьютера или набора инструментов сослужит хорошую службу хакеру, который захочет побольше узнать о компании. Инструменты помогут ему сыграть роль обслуживающего персонала или сотрудника компании.

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

Переполнение буфера

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

Переполнение буфера особенно опасно тем, что позволяет хакерам выполнить практически любую команду в системе, являющейся целью атаки. Большинство сценариев переполнения буфера дают хакерам возможность создания новых способов проникновения в атакуемую систему. С недавнего времени вход в систему посредством переполнения буфера заключался в добавлении строки в файл inetd.conf (в системе Unix этот файл управляет службами telnet и FTP), которая создает новую службу для порта 1524 (блокировка входа). Эта служба позволяет злоумышленнику запустить интерпретатор команд root shell.

Следует отметить, что переполнение буфера не ограничивает доступ к удаленной системе. Существует несколько типов переполнений буфера, с помощью которых можно повысить уровень пользователя в системе. Локальные уязвимые места так же опасны (если не больше), как и удаленные.

Что такое переполнение буфера

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

Стек управляет переключением между программами и сообщает операционной системе, какой код выполнять, когда одна часть программы (или функции) завершает свою задачу. В стеке хранятся локальные переменные функции. При атаке на переполнение буфера хакер помещает инструкции в локальную переменную, которая сохраняется в стеке. Эти данные занимают в локальной переменной больше места, чем выделенный под нее объем, и переписывают возвращаемый адрес в точку этой новой инструкции (рис. 4.2). Эта новая инструкция загружает для выполнения программную оболочку (осуществляющую интерактивный доступ) или другое приложение, изменяет файл конфигурации (inetd.conf) и разрешает хакеру доступ посредством создания новой конфигурации.

Рис. 4.2. Так работает переполнение буфера

Статьи к прочтению:

Вот это буфер!


Похожие статьи: