DNS ID хакинг/спуфинг
Теперь несомненно пора объяснить что такое DNS ID хакинг/спуфинг. Как я
уже объяснял раньше, единственным путем для DNS демона распознать различные вопросы/ответы - это ID флаг в пакете. Взгляните на этот пример:
ns.bibi.com;53 ----->[?www.heike.com] ------> ns.heike.com:53
Итак вы всего лишь должны подменить ip ns.heike.com и ответить ложной
информацией ns.bibi.com прежде, чем это сделает ns.heike.com!
ns.bibi.com <-- . . . . . . . . . . . ns.heike.com
<--[IP для www.heike.com это 1.2.3.4]<-- hum.roxor.com
Но на практике довольно непросто придумать хороший,
правильный ID 🙂 Если вы в LAN, то вы можете сниффать для получения этого ID,
используя его и отвечать раньше сервера имен (в Локальной
Сети это очень просто 🙂
Если вы хотите делать это удаленно, то выбор у вас не очень большой, у вас
есть только 4 основных метода:
1.) В произвольном порядке протестировать все возможные значения ID
флага. Вы должны ответить раньше чем ns! (ns.heike.com в данном случае). Этот метод не подходит если вы хотите узнать ID .. или любую другую информацию для его предугадывания.
2.) Послать некоторое число DNS запросов (200 или 300) для того, чтобы увеличить шансы попадания на хороший ID.
3.) Флудить DNS для того, чтобы избежать этой работы. Сервер имен
повиснет и покажет следующую ошибку!
>> Oct 06 05:18:12 ADM named[1913]: db_free: DB_F_ACTIVE set - ABORT
at this time named daemon is out of order 🙂
4.) Или вы можете использовать уязвимость в BIND, обнаруженную SNI
(Secure Networks, Inc.) с предугадыванием ID (мы немного обсудим это).
Уязвимость Windows ID
Я обнаружил серьезную уязвимость в Windows 95 (я не тестировал это на
WinNT), давайте представим, мой маленький друг, как это выглядит на
Windows 95. Windows ID чрезвычайно легко предугадать, так как по умолчанию это "1" :))) и "2" для второго запроса (если осуществляется 2
запроса в одно и то же время).
Уязвимость BIND
Существует уязвимость в BIND (обнаружена SNI). Фактически DNS ID очень
легко предугадать, вам всего лишь нужно посниффать DNS
пакеты для того, чтобы
сделать что вы хотите. Позвольте объяснить...
В начале DNS использует произвольный ID, но для следующих запросов ID увеличивается... =)))
Этой уязвимостью очень легко воспользоваться.
Вот метод:
1. Легко посниффать сообщения, приходящие на произвольный DNS
(например, ns.dede.com в нашем случае).
2. Вы просите NS.victim.com разрешить имя (random).dede.com. NS.victim.com просит ns.dede.com разрешить имя (random).dede.com
ns.victim.com ---> [?(rand).dede.com ID = 444] ---> ns.dede.com
3. Теперь у вас есть ID сообщения от NS.victim.com, теперь вы знаете
какую область ID вам нужно использовать. (в данном примере ID = 444).
4. Затем вы делаете ваш запрос на разрешение, например, www.microsoft.com
на NS.victim.com
(вы) ---> [?www.microsoft.com] ---> ns.victim.com
ns.victim.com --> [?www.microsoft.com ID = 446 ] --> ns.microsoft.com
5. Начинаем флудить сервер имен ns.victim.com запросом с ID (444), который
собственно у вас уже есть и затем
увеличиваем его на единицу.
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 444] --> ns.victim.com
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 445] --> ns.victim.com
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 446] --> ns.victim.com
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 447] --> ns.victim.com
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 448] --> ns.victim.com
ns.microsoft.com --> [www.microsoft.com = 1.1.1.1 ID = 449] --> ns.victim.com
(теперь вы знаете, что DNS ID легко предсказуемы, и они только увеличиваются.
Вы флудите ns.victim.com ложными ответами с ID 444+ 😉
Это делает ADMsnOOfID
Есть и другой путь использования это уязвимости, не имея root'а на любой
DNS.
Механизм очень простой. Вот объяснение
Мы шлем на ns.victim.com запрос на разрешение *.provnet.fr
(вы) ----------[?(random).provnet.fr] -------> ns.victim.com
Затем ns.victim.com спрашивает ns1.provnet.fr на разрешение
(random).provnet.fr.
Здесь нет ничего нового, однако самое интересное начинается
дальше.
На данном этапе вы начинаете флудить ns.victim.com ложными ответами
(с IP ns1.provnet.fr) с идентификаторами от 100 до 110...
(спуфер) ----[(random).provnet.fr это 1.2.3.4 ID=100] --> ns.victim.com
(спуфер) ----[(random).provnet.fr это 1.2.3.4 ID=101] --> ns.victim.com
(спуфер) ----[(random).provnet.fr это 1.2.3.4 ID=102] --> ns.victim.com
(спуфер) ----[(random).provnet.fr это 1.2.3.4 ID=103] --> ns.victim.com
.....
После этого мы снова спрашиваем ns.victim.com,
есть ли у него IP адрес (random).provnet.fr.
Если ns.victim.com дает нам IP для (random).provnet.fr то мы нашли правильный ID 🙂 В противном случае нужно повторить эту атаку до тех
пор, пока мы не найдем ID. Это немного долго, но эффективно. И никто не запрещает вам проделывать это с друзьями 😉
Именно так работает ADMnOg00d 😉
Здесь (ftp://ftp.janova.org/pub/ADM) вы найдете 5 программ
для реализации вышеназванных действий:
ADMkillDNS - очень простой спуфер DNS
ADMsniffID - сниффает LAN и отвечает ложными DNS ответами раньше NS
ADMsnOOfID - спуфер DNS ID (вы должны быть root'ом на NS)
ADMnOg00d - предугадыватель ID DNS (не требуется быть root'ом на NS)
ADNdnsfuckr - очень простая атака отказа в обслуживании для выведения DNS из строя
Удачи!! 🙂
Примечание: Вы можете найти исходники и бинарии этих программ на
ftp.janova.org/pub/ADM. Скоро я собираюсь сделать небольшой HOWTO,
который должен быть на janova. Перед компиляцией любой программы из пакета ADMID вам нужно установить libpcap на вашу машину 🙂
ADM Crew.
Благодарности: всем из ADM crew, Shok, pirus, fyber, Heike и w00w00 (вы должны любить этих парней).
Особые благодарности: ackboo и, конечно, Secure Networks, Inc. (SNI) на
www.secnet.com за обнаружение уязвимости =)
/* I'm a w00w00ify'd w00c0w */
Перевод GoodWin