Атаки хакеров

Прежде чем знакомится с Linux и ее принципами безопасности, мы должны знать, как хакеры могут проникать в систему. Для того чтобы защитить систему, нужно иметь представление о возможных действиях злоумышленника. Давайте познакомимся с процессом взлома компьютера. Мы должны знать, о чем думают хакеры, чем они дышат и что едят :). Только так мы сможем построить непреступную информационную стену для сервера или сети. 

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

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

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

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

Злоумышленники при проникновении в системы могут преследовать разные цели.

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

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

3.Отказ от обслуживания — атака на сервер с целью сделать его недосягаемым для остальных участников сети. Этим занимаются в основном любители, желая нанести вред. 

4.Рабство — получило распространение в последнее время. Сервер захватывается для дальнейшего использования в нападении на другие серверы. Например, для осуществления атаки типа "Отказ от обслуживания" чаще всего нужны мощные ресурсы (быстрый процессор и быстрый доступ в сеть), которые отсутствуют на домашнем компьютере. Для осуществления таких атак захватывается какой-либо слабо защищенный сервер в Интернете, обладающий необходимыми ресурсами, и используется в дальнейших взломах. 

Атаки могут быть трех видов:

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

2.Внешняя из глобальной сети — удаленный взлом через сеть. Именно этот вид атаки является самым сложным для защиты. Даже если поставить самый лучший сейф от удаленной атаки (Firewall) и постоянную охрану для наблюдения (программы мониторинга и журналирования), безопасность не может быть гарантированной. Примерами этого являются взломы самых защищаемых серверов в сети (yahoo.com, microsoft.com, серверы NASA и т. д.). 

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

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

Единственное, чего мы не будем затрагивать, так это вопросы социальной инженерии. Это тема отдельной книги и затрагивать ее не имеет смысла. 

Исследования

Допустим, что у вас есть некий сервер, который нужно взломать или протестировать на защищенность от проникновения. С чего нужно начинать? Что сделать в первую очередь? Сразу возникает очень много вопросов и ни одного ответа. 

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

Сканирование

Самое первое, с чего начинается взлом или тест системы на уязвимость, — сканирование портов. Для чего? А для того, чтобы узнать, какие сервисы (в Linux это демоны) установлены в системе. Каждый открытый порт — это сервисная программа, установленная на сервере, к которой можно подсоединиться и выполнить определенные действия. Например, на 21 порту висит FTP-сервис. Если вы сможете к нему подключиться, то станет доступной возможность скачивания и закачивания на сервер файлов. Но это только в том случае, если вы будете обладать соответствующими правами. 

Для начала нужно просканировать первые 1024 порта. Среди них очень много стандартных сервисов типа FTP, HTTP, Telnet и т. д. Каждый открытый порт — это дверь с замочком для входа на сервер. Чем больше таких дверей, тем больше вероятность, что какой-то засов не выдержит натиска и откроется. 

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

Хороший сканер портов устанавливает не только номер открытого порта, но и определяет установленный на нем сервис. Жаль, что название не настоящее, а только имя возможного сервера. Так, для 80 порта будет показано "HTTP". Желательно, чтобы сканер умел сохранять результат своей работы в каком-нибудь файле и даже распечатывать. Если этой возможности нет, то придется переписать все вручную и положить на видное место. В дальнейшем вам пригодится каждая строчка этих записей. 

После этого можно сканировать порты свыше 1024. Здесь стандартные сервисы встречаются редко. Зачем же тогда сканировать? А вдруг кто-то до вас уже побывал здесь и оставил незапертой дверку или установил на сервер троян. Большинство троянских программ держат открытыми порты свыше 1024, поэтому если вы администратор и обнаружили такой порт, необходимо сразу насторожиться. Ну а если вы взломщик, то необходимо узнать имя троянской программы, найти для нее клиентскую часть и воспользоваться для управления чужой машиной. 

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

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

Таким образом, сканирование становится непростой задачей. Сложность заключается в том, что нельзя исследовать порты пачками. Именно поэтому профессионалы предпочитают использовать ручной метод. Для этого достаточно выполнить команду:

telnet сервер порт

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

Иногда может помочь утилита nmap, которая позволяет делать сканирование с использованием неполного цикла пакетов. Но современные программы обеспечения безопасности могут обнаружить использование этого метода. 

Так как уже на этапе сканирования администратор может занести ваш IP-адрес в список подозреваемых, желательно осуществлять проверку портов не со своего компьютера. Для этого взломщики заводят WEB-сайт на сервере, позволяющем встраивать сценарии на языках PHP или Perl, используя бесплатный хостинг, где во время регистрации не требуют персональных данных, а если запрашивают, то можно ввести неверные данные, потому что их нельзя проверить. После этого к серверу можно подключаться через proxy-сервер и по безопасному соединению управлять собственными сценариями, которые и будут сканировать компьютер жертвы. 

Теперь мы в курсе, какие двери у сервера существуют и как это можно определить. Открытые порты – это всего лишь двери, которые чаще всего закрыты паролем. Но этого мало, потому что мы не знаем, как их открыть. Дальше потребуется больше усилий. 

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

Процесс установки соединения с удаленным компьютером разбивается на несколько этапов. Сначала компьютер посылает пакет с запросом на нужный порт сервера, а сервер в ответ должен отправить специальный пакет (не будем вдаваться в подробности протокола TCP, а ограничимся общими понятиями). Только после этого может устанавливаться виртуальное соединение. Сканер nmap может прервать контакт после первого ответа сервера, т. к. уже ясно, что порт открыт и нет смысла продолжать диалог по установке соединения. 

Таким образом, программы антисканирования воспринимают такие контакты за ошибки и не сигнализируют администратору о возможной атаке. 

Определение ОС

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

Как определяется тип ОС? Для этого есть несколько способов. 

1.По реализации протокола TCP/IP. 

Различные ОС по-разному реализуют стек протоколов. Программа клиент (например, nmap) просто анализирует ответы на запросы от сервера и делает вывод об установленной ОС. В основном это заключение расплывчатое: Windows или Linux. Точную версию таким образом узнать невозможно, потому что в Windows 2000/XP/2003 реализация протокола практически не менялась, и отклики сервера будут одинаковыми. Даже если программа определила, что на сервере установлен Linux, то какой именно дистрибутив — вам никто не скажет, а ведь уязвимости в них разные. И поэтому такая информация — это только часть необходимых вам данных для взлома сервера. 

2.По ответам разных сервисов. 

Допустим, что на сервере жертвы есть анонимный доступ по FTP. Вам нужно всего лишь присоединиться к нему и посмотреть сообщение при входе в систему. По умолчанию, в качестве приглашения используется надпись типа "Добро пожаловать на сервер FreeBSD4.0 версия FTP-клиента Х.ХХХ". Если вы такое увидели, то еще рано радоваться, т. к. неизвестно, правда это или нет. Если администратор сервера достаточно опытный, то он скорей всего поменяет текст таких сообщений.

Если надпись приглашения отражает действительность, то администратор — "чайник" со стажем. Опытный администратор всегда изменяет приглашение, заданное по умолчанию. А вот хороший специалист может написать и ложное сообщение. Тогда на сервере с Windows NT 4.0 появится приглашение, например, в Linux. В этом случае злоумышленник безуспешно потратит очень много времени в попытках сломать Windows NT через дыры Linux. Поэтому не очень доверяйте надписям и старайтесь перепроверить любыми другими способами. 

Чтобы вас не обманули, обязательно обращайте внимание на используемые на сервере сервисы, например, в Linux не будут крутиться страницы, созданные по технологии ASP. Такие вещи подделывают редко, хотя возможно. Достаточно немного постараться: применять расширение asp для хранения PHP-сценариев и перенаправлять их интерпретатору PHP. Таким образом, хакер увидит, что на сервере работают файлы asp, но реально это будут PHP-сценарии. 

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

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

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

Используем скрипты

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

На этом можно остановить исследования. У вас есть достаточно информации для простейшего взлома с помощью дыр в ОС и сервисах, установленных на сервере. Просто посещайте регулярно www.securityfocus.com. Именно здесь нужно искать информацию о новых уязвимостях. Уже давно известно, что большая часть серверов (по разным источникам от 70 % до 90 %) просто не латаются. Поэтому проверяйте все найденные ошибки на жертве, возможно, что-то и сработает. 

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

Взлом WWW-сервера

При взломе WWW-сервера есть свои особенности. Если на нем выполняются CGI/PHP или иные скрипты, то взлом проводится совершенно по-другому. Для начала нужно просканировать сервер на наличие уязвимых CGI-скриптов. Вы не поверите, но опять же по исследованиям различных компаний в Интернете работает большое количество "дырявых" скриптов. Это связано с тем, что при разработке сайтов изначально вносятся ошибки. Начинающие программисты очень редко проверяют входящие параметры в надежде, что пользователь не будет изменять код странички или адрес URL, где серверу передаются необходимые данные для выполнения каких-либо действий. 

Ошибку с параметрами имела одна из знаменитых систем управления сайтом — PHP-nuke.  Это набор скриптов, позволяющих создать форум, чат, новостную ленту и управлять содержимым сайта. Все параметры в скриптах передаются через строку URL браузера, и просчет содержалась в параметре ID. Разработчики предполагали, что в нем будет передаваться число, но не проверяли это. Хакер, знающий структуру базы данных (а это не сложно, потому что исходные коды PHP-nuke доступны), легко мог поместить SQL-запрос к базе данных сервера в параметр ID и получить пароли всех зарегистрированных на сайте пользователей. Конечно, клиенты будут зашифрованы, но для расшифровки не надо много усилий, и это мы рассмотрим чуть позже. 

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

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

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

Итак, ваша первостепенная задача — запастись парочкой хороших CGI-сканеров. Какой лучше? Ответ однозначный — ВСЕ. Даже самый дрянной сканер может найти брешь, о которой неизвестно даже самому лучшему хакеру. А главное, что по закону подлости именно она окажется доступной на сервере. Помимо этого, нужно посещать все тот же сайт www.securityfocus.com, где регулярно выкладываются описания уязвимостей различных пакетов программ для WEB-сайтов. 

Серп и молот

Там, где не удалось взломать сервер с помощью умения и знаний, всегда можно воспользоваться чисто русским методом "Серпа и молота". Это не значит, что серп нужно приставлять к горлу администратора, а молотком стучать по его голове. Просто всегда остается в запасе тупой подбор паролей. 

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

Вы до сих пор еще не верите мне? Давайте вспомним знаменитейшего "червя Морриса", который проникал в систему, взламывая ее по словарю. Собственный лексикон червя был достаточно маленький и состоял менее чем из ста слов. Помимо этого, при переборе использовались термины из словаря, установленного в системе. Там их было тоже не так уж много. И вот благодаря такому примитивному алгоритму червь смог поразить громаднейшее число компьютеров и серверов. Это был один из самых массовых взломов!!! Да, случай давний, но средний профессионализм пользователей не растет, т. к. среди них много опытных, но достаточно и начинающих. 

Локальная сеть

Взлом в локальной сети может быть проще по многим причинам:

компьютеры подключены по скоростному соединению от 10 Мбит и выше;

есть возможность прослушивать трафик других компьютеров в сети;

можно создавать подставные серверы;

очень редко используются сетевые экраны, потому что их ставят в основном перед выходом в Интернет. 

Рассмотрим различные варианты взломов, которые получили наибольшее распространение. 

Прослушивание трафика

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

Если используется такая топология, то весь трафик обязательно проходит через все компьютеры сети. Почему же вы его не видите? Просто ОС и сетевой адатер сговорились и не показывают чужой трафик. Но если очень сильно захотеть, то, воспользовавшись программой-снифером, можно и просмотреть все данные, проходящие мимо сетевой карточки, даже если они предназначены не вам. 

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

Соединение по коаксиальному кабелю встречается все реже, потому что оно ненадежно и позволяет передавать данные максимум на скорости 10 Мбит/с. 

При объединении компьютеров через хаб (Hub) или коммутатор (Swich) используется топология звезда. В этом случае компьютеры с помощью витой пары получают одну общую точку. Если в центре стоит устройство типа Hub, то пакеты, пришедшие с одного компьютера, копируются на все узлы, подключенные к этому хабу. В случае с коммутатором пакеты будет видеть только получатель, потому что Swich имеет встроенные возможности маршрутизации, которые реализуются в основном на уровне MAC-адреса. В локальной сети, даже если вы отправляете данные на IP-адрес, применяется физический адрес компьютера. При работе через Интернет всегда используется IP-адресация, а на этом уровне работают далеко не все коммутаторы. Для того чтобы пакеты проходили по правильному пути, нужны уже более интеллектуальные устройства — маршрутизаторы. Они также передают набор данных только на определенную машину или другому маршрутизатору, который знает, где находится компьютер получателя. 

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

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

Сейчас в сети можно скачать громадное количество сниферов и дополнений к ним. Всевозможные версии "заточены" под разные нужды, и тут необходимо выбирать именно из этих соображений. Если вы ищете непосредственно пароли, то вам требуется снифер, который умеет выделять данные о регистрации из общего трафика сети. В принципе, это не так сложно, если учесть, что все пароли и любая информация пересылаются в Интернет в открытом виде как текст, если не используется SSL-протокол (Secure Socket Layer — протокол защищенных сокетов). 

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

Подставной адрес

Очень часто сервера ограничивают доступ с помощью правил для сетевого экрана. Но блокировать абсолютно все обращения к любым портам не всегда удобно. Например, доступ к управляющим программам можно сохранить для определенного IP-адреса, с которого работает администратор. Каждый, кто попытается с другого адреса войти в запрещенную область, будет остановлен сетевым экраном.

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

Фиктивный сервер

В локальной сети намного проще производить атаку через подставные серверы или сервисы. Например, одна из знаменитых атак через некорректные ARP-записи, может быть воспроизведена именно в локальной сети.

Когда вы обращаетесь к какому-либо компьютеру по IP-адресу, сначала определяется его MAC-адрес, а потом уже на него отсылается сообщение. Как определить MAC-адрес, когда нам неизвестно, какой сетевой интерфейс установлен, а мы знаем только IP? Для этого используется протокол ARP(Address Resolution Protocol, протокол разрешения адресов), который рассылает широковещательный запрос всем компьютерам сети и выясняет, где находится экземпляр с указанным IP-адресом. В этом пакете заполнен только IP-адрес, а вместо искомого MAC-адреса указано значение FFFFFFFFFFFFh. Если в сети есть компьютер с запрошенным IP, то в ответном пакете будет указан MAC-адрес. Работа ARP-протокола происходит незаметно для пользователя. В противном случае ответ может прислать маршрутизатор, который сообщит свой MAC-адрес. Тогда компьютер будет обмениваться данными с ним, а тот уже в свою очередь будет пересылать пакеты дальше в сеть или другому маршрутизатору, пока они не достигнут получателя. 

А что если ответит не тот компьютер, а другой, с иным IP-адресом? Ведь в локальной сети передача осуществляется по MAC-адресу, поэтому пакет получит тот компьютер, который откликнется, независимо от его IP. Получается, что задача хакера вычислить ARP-запрос и ответить на него вместо реального адресата. Таким образом можно перехватить соединение. 

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

Троян

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

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

Как забрасывать троянскую программу? Самый распространенный способ — почтовый ящик. Просто даете исполняемому файлу серверной части какое-нибудь привлекательное имя и отправляете сообщение жертве. В тексте письма должны быть мягкие, но заманчивые призывы запустить прикрепленный файл. Это то же самое, что и распространение вирусов, письма с которыми мы видим каждый день в своих ящиках. Если пользователь запустит серверную часть, то считайте, что вы стали царем на его компьютере. Теперь вам будет доступно все, что может для вас сделать боевой конь. 

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

Трояны получили большое распространение из-за того, что вычислить автора при соблюдении простых правил анонимности нелегко. При этом использование самих программ стало примитивным занятием.

Опасность, которую таят в себе троянские программы, подтверждается и тем, что большинство антивирусных программ стали сканировать не только на наличие вирусов, но и троянов. Например, антивирусные программы идентифицируют Back Orifice, как вирус Win32.BO. 

Denial of Service

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

Атака DoS может производиться двумя способами: через ошибку в программе или перегрузку канала/мощности атакуемой машины. 

Первый способ требует знания уязвимостей на сервере. Рассмотрим, как происходит отказ от обслуживания через переполнение буфера (чаще всего используемая ошибка). Допустим, что вы должны передать на сервер строку "HELLO". Для этого в серверной части выделяется память для хранения 5 символов. Структура программы может выглядеть примерно следующим образом:

Код программы

Буфер для хранения 5 символов

Код программы

Предположим, пользователь отправит не пять, а сто символов. Если при приеме информации программа не проверит размер блока, то при записи данных в буфер они выйдут за его пределы и запишутся поверх кода. Это значит, что программа будет испорчена и не сможет выполнять каких-либо действий, и, скорее всего, произойдет зависание. В результате сервер не будет отвечать на запросы клиента, т. е. совершится классическая атака Denial of Service через переполнение буфера. 

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

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

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

Как происходит загрузка канала? Допустим, что вы находитесь в чате, и кто-то вам нагрубил. Вы узнаете его IP-адрес и выясняете, что обидчик работает на простом Dial-up соединении через модем в 56 Кбит/с. Даже если у вас такое же соединение, можно без проблем перегрузить канал обидчику. Для этого направляем на его IP-адрес бесконечное количество ping-запросов с большим размером пакета. Компьютер жертвы должен будет отвечать на них. Если пакетов много, то мощности канала хватит только на то, чтобы принимать и отвечать на эхо-запросы, и обидчик уже не сможет нормально работать в сети. Если у вас канал такой же, то и ваше соединение будет занято исключительно приемом-отсылкой больших пакетов. Таким образом, мы можем загрузить канал жертвы, но при условии, что характеристики нашего канала сопоставимы с атакуемым компьютером. Если у вас скорость соединения медленней, то удастся загрузить только часть канала, равную пропускной способности вашего соединения. Остальная часть останется свободной, и жертва сможет использовать ее. С другой стороны, связь будет заторможена, и хотя бы чего-то мы добьемся. Это того стоит? Если да, то можете приступать.

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

Для загрузки процессора тоже не требуется слишком большой канал. Нужно только подобрать запрос, который будет выполняться очень долго. Допустим, что вы решили произвести атаку на сервер, позволяющий переводить на другой язык указанные страницы любого сайта. Находим WEB-страницу с большим количеством текста (например, книгу или документацию RFC — Request for Comments — рабочее предложение) и посылаем множество запросов на ее перевод. Мало того, что объем большой, и для скачивания серверу нужно использовать свой канал, так еще и перевод — довольно трудоемкий процесс. Достаточно в течение 1 секунды отправить 100 запросов на перевод громадной книги, чтобы сервер перегрузился. А если используется блокировка многократного перевода одного и того же, то нужно подыскать несколько больших книг. 

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

Для сервера еще хуже, если взлом идет по TCP/IP, потому что этот протокол требует установки соединения. Если хакер пошлет очень большое количество запросов на открытие соединения с разными IP-адресами, то сервер разошлет на эти адреса подтверждения и будет дожидаться дальнейших действий. Но так как реально с этих адресов не было запроса, то и остановка будет лишенной смысла. Таким образом, заполнив буфер очереди на входящие соединения, сервер становится недоступным до момента подключения несуществующих компьютеров (TimeOut для этой операции может быть до 5 секунд). За это время хакер может забросать буфер новыми запросами и продлить бессмысленное ожидание сервера.

Distributed Denial Of Service

С помощью DoS достаточно сложно вывести из обслуживания такие серверы, как www.microsoft.com или www.yahoo.com, потому что здесь достаточно широкие каналы и сверхмощные серверы. Получить такие же ресурсы просто невозможно. Но как показывает практика, хакеры находят выходы из любых ситуаций. Для получения такой мощности используются распределенные атаки DoS (Distributed Denial of Service). 

Мало кто из пользователей добровольно отдаст мощность своего компьютера для проведения распределенной атаки на крупные серверы. Чтобы решить эту проблему, хакеры пишут вирусы, которые без разрешения занимаются захватом. Так вирус Mydoom C искал в сети компьютеры, зараженные вирусами Mydoom версий A и B, и использовал их для атаки на серверы корпорации Microsoft. Благо этот вирус не смог захватить достаточного количества машин, и мощности не хватило для проведения полноценного налета. Администрация Microsoft утверждала, что серверы функционировали в штатном режиме, но некоторые все же смогли заметить замедление в работе и задержки в получении ответов на запросы. 

От распределенной атаки защититься очен



Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Youtube Instagram