Однако были гораздо более серьезные атаки. Многие сайты были выведены из строя за счет искусственно созданной чрезмерной нагрузки (атака типа «отказ в обслуживании», DoS), с которой заведомо не может справиться сервер. Зачастую такие нападения совершались сразу с нескольких машин, которые взломщику уже удалось
взломать и заставить против воли участвовать в преступлении («распределенный DoS», DDoS). Такие атаки настолько распространены, что уже перестали быть новостью. Тем не менее ущерб от них исчисляется тысячами долларов.
В 1999 году шведский взломщик проник на сайт Hotmail (корпорации Microsoft) и создал зеркало, на котором все желающие могли ввести имя любого пользователя этого сайта и прочесть всю его текущую почту и почтовые архивы.
А один русский 19-летний взломщик по имени Максим смог украсть с сайта, занимающегося электронной коммерцией, номера 300 000 кредитных карт. Затем он обратился к их владельцам и сообщил, что если они не заплатят ему 100 000 долларов, он опубликует номера кредиток в Интернете. Они не поддались на провокацию, и тогда он действительно опубликовал номера кредитных карт, что нанесло серьезный ущерб невинным жертвам.
Двадцатитрехлетний студент из Калифорнии послал по электронной почте в агентство новостей фальшивый пресс-релиз, в котором сообщалось об огромных убытках корпорации Emulex и об уходе в отставку ее генерального директора. Спустя несколько часов биржевые цены на акции Emulex снизились на 60 %, в результате чего их держатели лишились более $2 млрд. Злоумышленник заработал около четверти миллиона долларов, продав акции незадолго до своего ложного заявления. Хотя в данном случае взлом не произошел непосредственно во Всемирной паутине, понятно, что объявление подобного рода, размещенное на сайте компании, привело бы к такому же эффекту.
К сожалению, одно перечисление таких примеров могло бы занять несколько страниц. И теперь нам пора обратиться к технической стороне дела. Более подробную информацию, касающуюся проблем безопасности всех видов, см. в (Anderson, 2008a; Stuttard и Pinto, 2007; Schneier, 2000). Поиск в Интернете также даст неплохие результаты.
8.9.2. Безопасное именование ресурсов
Начнем с чего-нибудь очень простого. Допустим, Алиса хочет посетить веб-сайт Боба. Она набирает в браузере URL, и через несколько секунд появляется страничка. Но в самом ли деле эта страничка создана Бобом? Может, да, а может, нет. Не исключено, что Труди снова принялась за свои шуточки. Например, она могла перехватить исходящие от Алисы пакеты и изучить их. Найдя запрос GET на получение страницы Боба, Труди могла сама зайти на эту страницу, изменить ее и отослать Алисе. Алиса не заметила бы ровным счетом ничего. Хуже того, Труди могла изменить цены в электронном магазине Боба на более низкие, сделав тем самым предложение Боба очень привлекательным. Вероятность того, что теперь Алиса вышлет номер своей кредитной карты «Бобу» (с целью приобрести чего-нибудь по выгодной цене), резко повысилась.
Одним из недостатков схемы «человек посередине» является то, что Труди должна быть в состоянии перехватывать исходящий трафик Алисы и подделывать свой исходящий трафик. На практике она должна прослушивать телефонную линию либо Боба, либо Алисы (поскольку прослушивание оптоволоконного кабеля — задача непростая). Это, конечно, возможно, но Труди не только умна и хитра, но и ленива. Она знает более простые способы обмануть Алису.
Обман DNS
Допустим, Труди может взломать систему DNS (например, ту ее часть, которая хранится в кэше DNS у интернет-провайдера Алисы) и заменить IP-адрес Боба (например, 36.1.2.3) своим IP-адресом (например, 42.9.9.9). Тогда можно провести атаку. То, как все должно работать в нормальной ситуации, показано на рис. 8.42, а: (1) Алиса запрашивает у службы DNS IP-адрес Боба и (2) получает его. (3) Она запрашивает домашнюю страничку Боба и (4) получает ее. После того как Труди заменяет IP-адрес Боба на свой собственный, мы получаем ситуацию, показанную на рис. 8.42, б. Алиса ищет IP-адрес Боба, а получает вместо него IP-адрес злоумышленницы Труди, поэтому весь трафик Алисы, предназначенный для Боба, приходит, на самом деле, Труди. Та может организовать атаку типа «человек посередине», не мучаясь с установкой «крокодилов» на телефонной линии Алисы. Вместо этого она может заменить всего одну запись на сервере имен DNS. Это, согласитесь, куда проще.
Рис. 8.42. Нормальная ситуация (а); атака со взломом DNS и изменением записи
относящейся к Бобу (б)
Как Труди удалось обмануть DNS? А это оказалось не таким уж сложным делом. Если не вдаваться в подробности, можно описать процесс так: Труди обманным путем заставляет DNS-сервер провайдера Алисы послать запрос для поиска адреса Боба. К несчастью, так как DNS использует UDP, сервер не может узнать, кто является реальным отправителем ответа. Труди использует это свойство, фальсифицируя ожидаемый ответ и тем самым занося неверные сведения об IP-адресе Боба в кэш DNS-сервера. Для простоты мы будем предполагать, что провайдер Алисы изначально не имеет сведений о веб-сайте Боба, bob.com. Если же такие сведения есть, злоумышленник может выждать, пока срок действия записи истечет, и попробовать еще раз (либо применить другие хитрости).
Труди начинает свою атаку с того, что посылает провайдеру Алисы запрос на поиск IP-адреса bob.com. Так как соответствующая запись отсутствует, сервер, в свою очередь, опрашивает сервер домена верхнего уровня (.com). Но Труди опережает этот сервер и посылает ложный ответ, в котором сообщается, что IP-адрес bob.com якобы
42.9.9.9. Как мы знаем, в реальности это адрес Труди. Так как этот ответ приходит первым, данные из него заносятся в кэш сервера провайдера, а настоящий ответ, если он приходит позже, отвергается. Установка ложного IP-адреса называется обманом DNS (DNS spoofing). А кэш, в котором хранится заведомо ложный IP-адрес, называется отравленным кэшем (poisoned cache).
Надо сказать, что на практике все не так просто. Во-первых, провайдер Алисы все-таки проверяет наличие в ответе правильного адреса сервера верхнего уровня. Но Труди может написать в соответствующем поле что угодно и преодолеть эту преграду. Учитывая то, что адреса серверов верхнего уровня общедоступны, сделать это несложно.
Во-вторых, для того чтобы DNS-сервер мог понять, какому запросу соответствует ответ, во все запросы добавляются порядковые номера. Чтобы обмануть провайдера Алисы, Труди должна знать текущий порядковый номер. Самый простой способ узнать его — это зарегистрировать собственный домен, например trudy-the-intruder.com.
Предположим, что IP-адрес этого домена также 42.9.9.9. Труди создает DNS-сервер для этого домена: dns.trudy-the-intruder.com. Его IP-адрес тот же самый (42.9.9.9), поскольку оба домена расположены на одном и том же компьютере. Теперь надо заставить провайдера Алисы поинтересоваться DNS-сервером Труди. Сделать это несложно. Требуется лишь запросить, например, foobar.trudy-the-intruder.com, и серверу провайдера Алисы придется опросить сервер верхнего уровня, .com, и узнать у него, кто обслуживает новый домен Труди.
И вот теперь, когда запись dns.trudy-the-intruder.com занесена в кэш провайдера, можно спокойно начинать атаку. Труди запрашивает у провайдера Алисы www. trudy-the-intruder.com, а тот в ответ посылает на DNS-сервер Труди соответствующий запрос. Вот в этом-то запросе и содержится нужный злоумышленнице порядковый номер. Теперь Труди должна действовать без промедления: она ищет с помощью провайдера Алисы Боба и тут же отвечает на собственный вопрос, посылая фальшивку: «Адрес bob.com: 42.9.9.9». Этот подделанный ответ несет в себе порядковый номер, на единицу больше только что полученного. За время атаки она может послать еще одну фальшивку, с номером, на два больше полученного, а также еще около дюжины таких «ответов» с увеличивающимися номерами. Задача одного из них нам уже ясна. Остальные никому не нужны, их просто выкинут. После прибытия фальшивого ответа на запрос Алисы он будет помещен в кэш; к тому времени, когда доберется настоящий ответ, он будет отвергнут, так как сервер уже ничего не ожидает.