Я читал некоторые заметки о Новый публичный DNS-сервис Google:
Я заметил в разделе безопасности этот абзац:
До тех пор, пока стандартное общесистемное решение для уязвимостей DNS не будет повсеместно реализовано, например протокол DNSSEC2, открытые преобразователи DNS должны будут независимо принимать некоторые меры для смягчения последствий известных угроз. Было предложено много техник; видеть IETF RFC 4542: меры по повышению устойчивости DNS к ложным ответам для обзора большинства из них. В Google Public DNS мы реализовали и рекомендуем следующие подходы:
- Избыточное выделение машинных ресурсов для защиты от прямых DoS-атак на сами резолверы. Поскольку злоумышленники легко подделать IP-адреса, невозможно заблокировать запросы на основе IP-адреса или подсети; единственный эффективный способ справиться с такими атаками - просто принять на себя нагрузку.
Это удручающее осознание; даже в случаях переполнения стека / сбоя сервера / суперпользователя мы часто используем IP-адреса в качестве основы для всех видов запретов и блокировок.
Думать, что «талантливый» злоумышленник может тривиально использовать любой IP-адрес, который он хочет, и синтезировать столько уникальных поддельных IP-адресов, сколько он хочет, действительно страшно!
Итак, мой вопрос (ы):
Как утверждают многие другие, заголовки IP тривиально подделать, если никто не заботится о получении ответа. Вот почему это чаще всего встречается с UDP, поскольку TCP требует трехстороннего рукопожатия. Одно заметное исключение - SYN флуд, который использует TCP и пытается связать ресурсы на принимающем узле; опять же, поскольку ответы отбрасываются, адрес источника не имеет значения.
Особенно неприятным побочным эффектом способности злоумышленников подделывать исходные адреса является обратное рассеяние атака. Есть отличное описание Вот, но вкратце, это противоположность традиционной DDoS-атаке:
В любом из случаев, упомянутых в (3), многие хосты ответят сообщением о недоступности ICMP или сбросом TCP, нацеленным на адрес источника вредоносного пакета. Теперь у злоумышленника потенциально есть тысячи бескомпромиссных компьютеров в сети, выполняющих DDoS-атаку на его / ее выбранную жертву с использованием поддельного IP-адреса источника.
С точки зрения смягчения, этот риск действительно может быть устранен только интернет-провайдерами (и особенно провайдерами, обеспечивающими доступ клиентов, а не транзит). Это можно сделать двумя основными способами:
Входящая фильтрация - обеспечение того, чтобы пакеты, входящие в вашу сеть, поступали из диапазонов адресов, находящихся на дальней стороне входящего интерфейса. Многие производители маршрутизаторов реализуют такие функции, как одноадресная переадресация обратного пути, которые используют таблицы маршрутизации и пересылки маршрутизатора для проверки того, что следующим переходом исходного адреса входящего пакета является входящий интерфейс. Лучше всего это делать на первом переходе уровня 3 в сети (то есть на вашем шлюзе по умолчанию).
Исходящая фильтрация - обеспечение того, чтобы пакеты, покидающие вашу сеть, исходили только из принадлежащих вам диапазонов адресов. Это естественное дополнение к входящей фильтрации и, по сути, часть «хорошего соседа»; гарантируя, что даже если ваша сеть скомпрометирована вредоносным трафиком, этот трафик не будет перенаправлен в сети, с которыми вы взаимодействуете.
Оба эти метода наиболее эффективны и легко реализуются, когда они используются в «пограничных» сетях или сетях «доступа», где клиенты взаимодействуют с провайдером. Реализация входящей / исходящей фильтрации выше уровня доступа становится более сложной из-за сложности множественных путей и асимметричной маршрутизации.
Я видел, как эти методы (в частности, входящая фильтрация) используются с большим эффектом в корпоративной сети. Возможно, кто-то с большим опытом работы с поставщиками услуг сможет лучше понять проблемы развертывания входящей / исходящей фильтрации в Интернете в целом. Я считаю, что поддержка аппаратного и микропрограммного обеспечения будет большой проблемой, равно как и невозможность заставить провайдеров в других странах внедрять аналогичные политики ...
Неужели злоумышленнику так просто подделать IP-адрес в «дикой природе»?
Конечно, если я не забочусь о получении каких-либо ответов, я могу очень легко отправлять пакеты, используя любой адрес источника, который мне нравится. Поскольку у многих интернет-провайдеров на самом деле нет хороших правил выхода, все, что я подделываю, будет доставлено.
Если злоумышленнику действительно нужна двусторонняя связь, это становится очень сложно. Если им требуется двусторонняя связь, проще использовать какой-либо прокси. Это очень легко настроить, если вы знаете, что делаете.
Запрет людей по IP-адресу умеренно эффективен для SF / SO / SU, поскольку сайт использует http / https, что требует двусторонней связи.
Небольшое подтверждение концепции ответа Зордече (с ubuntu):
$ sudo apt-get install hping3
$ sudo hping3 -1 --spoof 11.10.10.20 www.google.com
HPING www.google.com (eth0 64.233.169.105): icmp mode set, 28 headers + 0 data bytes
Затем в другой консоли:
$ sudo tcpdump -i eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:30:19.439737 IP 11.10.10.20 > yo-in-f105.1e100.net: ICMP echo request, id 31297, seq 0, length 8
Так что да, тривиально, но тогда вы не получите ответов, как упоминалось ранее, если у вас нет доступа к 11.10.10.20 или у вас есть сниффер где-то между www.google.com и 11.10.10.20 (и он должен быть прямо перед любого конца, так как вы не можете предсказать маршрут пакетов). Кроме того, шлюз спуфера (ISP) может не пропускать этот пакет, если он проводит какую-то проверку IP и видит, что источник плохо пахнет.
IP-адреса легко подделать для однонаправленных UDP трафик. Для TCP-пакетов вы можете получить только полуоткрытые TCP-соединения с SYN-пакетами. Это тоже основа своего рода DOS-атаки. Но вы не можете создать HTTP-соединение с поддельным адресом (например, если вы фильтруете сеансы для использования того же IP-адреса). Хотя да, вы можете подделать IP-адрес в пакетах, это полезно только для определенных видов атак типа «отказ в обслуживании».
В статье GOOG явно обсуждался DNS. DNS использует пакеты UDP и TCP. UDP можно подделать, но не TCP. TCP требует 3-стороннее рукопожатие. Если IP-адрес для TCP-пакета подделан, компьютер-подделка не получит ответа и соединение не будет установлено. UDP, как упоминалось в других ответах, работает по принципу «выстрелил и забыл» и не требует ответной связи. По этой причине DoS-атаки происходят почти исключительно в форме UDP-пакетов.
В контексте Stack Overflow и семейных сайтов проблема, поднятая Takaun Daikon, очень актуальна. Есть много способов получить новый IP-адрес от интернет-провайдера. Очевидно, что изменение MAC-адреса является самым простым и работает для многих интернет-провайдеров. Кроме того, многие люди, которые замышляют глупости, могут использовать публичный прокси или TOR. Явная блокировка IP-адреса источника для этих пакетов просто заблокирует прокси-сервер или конечный узел TOR.
Так действует ли блокировка IP-адресов? Черт, да, это так. Но вы получите ошибки. Вы заблокируете некоторые IP-адреса, которые действительно не являются источником проблемы (например, прокси), и у вас также будут люди, избегающие ваших блоков, меняя IP-адреса. Человек, которому не повезло получить забаненный IP позже, не сможет получить доступ к семейству сайтов SO. Но ошибка ставка должно быть маленьким. Если только вы не блокируете огромные наборы IP-адресов. Но если вы блокируете один или два раза в день, все будет в порядке.
Вы можете ввести немного более сложную схему, в которой вы блокируете, но только на период, например, на год. Если ваша сеть поддерживает дросселирование полосы пропускания или ограничение количества подключений, вы также можете рассмотреть схему, в которой бездельники, запускающие Apache Benchmarks на вашем сайте, просто помещаются в клетку с очень ограниченной пропускной способностью.
Подмена IP-адреса будет продолжаться, потому что интернет-провайдеры ленивы.
Мой провайдер чертовски хорошо знает, что я нахожусь на определенном адресе или, по крайней мере, в подсети, в которой я нахожусь. Но я могу использовать любой исходный адрес. Это почему? Просто стоимость.
Если я подделаю несколько адресов здесь и там, это ничего не будет стоить моему провайдеру. Если бы каждый пользователь моего интернет-провайдера подделал один пакет между 1:00 и 2:00, это все равно вряд ли бросилось бы в глаза. Однако, когда ботнет отправляет множество поддельных пакетов с множества хостов на многих интернет-провайдеров, целевая машина или сеть перестают работать.
Финансовая реальность такова, что спуфинг ничего не стоит, если только вы не атакованы. Внедрение фильтрации рядом с клиентом стоит денег, и тот, кто тратит деньги, получает очень небольшую отдачу, если не знать, что он хороший гражданин сети.
UDP и ICMP легче всего подделать, но TCP также возможен. Для этого требуется небезопасная удаленная ОС, которая использует предсказуемые порядковые номера для использования. Иногда именно машины балансировки нагрузки изменяют порядковые номера и делают их предсказуемыми. Итак, TCP возможен, но сложнее.
Анти-спуфинг DNS в основном сосредоточен на стороне безопасности, чтобы предотвратить отправку ложного ответа рекурсивному преобразователю. Аспекты лавинной рассылки UDP не зависят от DNS, за исключением того, что один небольшой запрос (скажем, для '.') Вызовет довольно большой ответ. Таким образом, получается хороший вектор усиления. Есть много других протоколов UDP, которые работают, но DNS используется повсюду, и легко найти машины, которые можно использовать для усиления атак.
DNSSEC делает это еще хуже, поскольку UDP-пакеты могут достигать размера 4 КБ.
IP-адреса легко подделать в случае атак DOS на основе DNS (D), поскольку они обычно представляют собой UDP-пакеты типа "запустил и забыл". В случае HTTP-трафика это не так, поэтому вам нужно либо находиться в той же локальной сети, что и веб-сервер (это вполне возможно, конечно, в зависимости от того, где размещен ваш сайт), либо управлять промежуточными маршрутизаторами.
Вы можете отправить письмо кому угодно, и если вы не укажете обратный адрес на конверте (или укажете не тот), они могут нанять всех фильтров нежелательной почты в мире и не отфильтровать ваше сообщение, не открывая (обработка ) Это.
Однако, если отправитель хочет получить ответ, лучше указать правильный адрес возврата, иначе потребуется механизм прикладного уровня для получения правильного адреса. Так что я могу заставить вас думать, что вы открываете письмо от Наны, но даже если я обману вас содержанием письма, вы не собираетесь отправлять Нане чек, выписанный на CASH, на какой-то адрес в Нигерии (если только Нана не нигерийка). ). Так что вызов / ответ - эффективная защита, пока вы не являетесь Человеком посреди.
Я могу установить любой исходный IP-адрес в дейтаграмме.
Другой вопрос, выпустит ли мой интернет-провайдер такой пакет в дикую природу.
Хотя это, безусловно, реальность, с которой необходимо иметь дело, основная проблема на самом деле нетехническая: люди со злым умыслом пытаются делать злонамеренные действия. Поэтому реальное решение также должно быть нетехническим.
Я думаю, что то, что сделал Stackoverflow, - ИМЕННО правильное решение для обработки второй линии защиты: методов ограничения потенциальных пользователей спама с помощью различных способов ограничения их возможностей взаимодействия с платформой до достижения определенного уровня «достоверности».
Эти методы не только помогают улучшить общее качество сайта, они фактически стимулируют пользователей принимать более активное участие и предоставлять более достоверные / надежные ответы.
С технической точки зрения, лучше всего поступить так, как предлагает Google: просто эффективно поглощать / справляться с дополнительной нагрузкой.
Отличная работа, продолжайте совершенствоваться!
UDP - главная причина того, почему это просто - на самом деле Skype и Slingbox используют возможность легко подделывать IP-адреса в UDP дляудар'через NAT и упрощают одноранговую связь.
TCP сложнее, так как он требует полного цикла SYN / ACK, но вы все равно можете заполнить сервер зависшими SYN-пакетами, которые отправляются на IP-адреса на много переходов и по существу связывают огромное количество маршрутизаторов в процессе.
Как упоминалось выше, использование прокси-серверов тривиально, и доступно очень большое количество открытых анонимных прокси.
Даже без использования прокси-сервера я могу установить любое новое произвольное значение MAC-адреса на моем брандмауэре, сбросить настройки кабельного модема, и мой интернет-провайдер назначит мне новый блестящий IP-адрес.
И это только для начала. Есть много других способов обойти запреты IP.
Если да, то какие возможные меры?
На принимающей стороне мало что можно сделать.
Интернет-провайдер фальсификатора должен фильтровать свой исходящий трафик, чтобы его клиенты не могли подделывать IP-адреса из разных сетей.
Это всего лишь несколько строк в конфигурации маршрутизатора, поэтому нет повода не делать этого.
Есть способ отследить злоумышленника, но он требует сотрудничества ваших вышестоящих провайдеров: http://www.cymru.com/Documents/dos-and-vip.html
Как отмечали другие, UDP довольно тривиально подделать, TCP - не так уж и много.
Предпочтительной защитой, но, к сожалению, не повсеместно используемой, являются выходные фильтры.
Для интернет-провайдеров, использующих службы DSL и т. Д., Каждая виртуальная линия должна быть настроена с ip verify unicast reverse-path
(или любой другой эквивалент не Cisco), который блокирует любой пакет, исходный IP-адрес которого не входит в диапазоны, которые, как известно, маршрутизируются по этой линии.
Я помню, как программировал сокеты в конце 90-х с помощью того, что, вероятно, было Visual Basic, и мы могли установить исходный IP-адрес для нашего соединения. Я смутно помню, что когда мы это пробовали, netstat -an показывал фактический IP-адрес источника, но журналы Apache показывали поддельный IP-адрес; и я думаю, что Apache передавал поддельный IP-адрес модулям perl и так далее.