Как я bind`ом вирусы искал…

    Ну сразу скажу, что не сами вирусы, а их активность, но тем ни менее открыл для себя много нового о том, куда “ходят” мои компьютеры, телефоны и планшет.
    image
    А дело было вечером, делать было нечего… Шел дождь, интеренет подозрительно тормозил, хотя вроде 8 мегабит и все должно “летать”. Парк домашней техники, которая связанна с всемирной паутиной у меня небольшой – стационарный компьютер, ноутбук, планшет, спутниковый тюнер с линуксом, 3 смартфона и дохленький сервачок-хеончик с debian и xen (на нем ещё с пятёрку постоянно работающих виртуальных OC). Не много не мало, но постоянно поддерживать, обновлять и проверять на вирусы все это хозяйство отнимает деньги (лицензионное ПО) и время, которого как всегда нет. И в какой-то момент было принято решение полностью отказаться от антивирусов, а то их покупай, обновляй… Да и субъективно тормозит с ними все…

    С момента как я отказался от антивирусов прошло больше года. Все работает, все прекрасно, Но…«Ты ведишь хомячка? – А он есть!»

    Я web программист, посему на сервере для себя настроил dns (bind9), в котором создал зону .dev для разработки ( оооочень удобно, см [тыц]), а за одно и логирование включил, пускай будет на всякий случай. Адрес моего локального DNS-сервера раздаёт DHCP ADSL-модема как основной DNS-сервер сети.

    И вот однажды я таки решил просмотреть, что ж там пишется в логах DNS сервера. Оказалось, что один из домашних компьютеров постоянно стучится не пойми куда:
    01-Nov-2013 23:11:03.128 queries: info: client 192.168.1.11#63500: query: yfp2lvdyye86s78.pp.ua IN A + (192.168.1.1)                                    
    01-Nov-2013 23:11:04.138 queries: info: client 192.168.1.11#63500: query: yfp2lvdyye86s78.pp.ua IN A + (192.168.1.1)                   
    01-Nov-2013 23:11:09.867 queries: info: client 192.168.1.11#58461: query: yfp2lvdyye86s78.free IN A + (192.168.1.1)             
    01-Nov-2013 23:11:15.390 queries: info: client 192.168.1.11#52119: query: yfp2lvdyye86s78.ce.ms IN A + (192.168.1.1)                           
    01-Nov-2013 23:11:21.006 queries: info: client 192.168.1.11#50737: query: yfp2lvdyye86s78.net IN A + (192.168.1.1)             
    01-Nov-2013 23:11:26.512 queries: info: client 192.168.1.11#54267: query: 35pa1j6h47e1l7v.tk IN A + (192.168.1.1)    
    

    Я точно туда не ходил, значит это кто-то другой. Была проведена профилактика вирусов, и действительно был найден зловред и “вылечен”. Тут бы и сказочке конец, но на этом я не остановился. Захотелось более глубоко и в удобной форме проанализировать накопленные логи DNS сервера, возможно происходило что-то еще помимо моей воли и желаний.

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

    Нужно решить две проблемы – провести анализ логов в удобном виде, и заблокировать не нужные сайты (счетчики, рекламу и etc.), т.к. ставить на все компьютеры рекламорезалку как-то не выход, и интернет через прокси тоже не хотелось делать. Способов заблокировать уйма, но для себя я выбрал подмену реального IP адреса DNS, моим локальным. То есть конфигурациями локального DNS.

    С первым пунктом думалось, проблем не будет. Все хорошее написано до нас. Был найден чудный bash скрипт – умеющий показывать наиболее посещаемые сайты разбирая логи и проект на руби Bind log analyzer который преобразовывает логи в mysql базу да еще и было заявлено, что в нем есть веб интерфейс для просмотров результатов. Так же по горячим следам был найден ресурс http://pgl.yoyo.org/adservers/ на котором вроде бы все есть, и списки доменов которые можно безболезненно запретить, и описание как это сделать, но … Не знаю как в bind8, но bind9 сильно ругался на предложенную на том сайте пустую зону, а браузеры судорожно не завершали процесс загрузки страницы, пытаясь до грузить на страницу счетчики, рекламу, не понимая, где ж собака то покопалась.

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

    Итак, про велосипед. Называется statdnslog, лежит на гитхабе и состоит из двух частей: утилит и WEB интерфейса.
    Утилиты умеют:
    — разбирать лог фалы запросов к DNS Bind9;
    — сохранять полученные данные в базу (mysql);
    — создавать списки запрещений на основе списков с сайта pgl.yoyo.org (например);
    — добавление новых DNS в список запрещений из своего списка (текстовый файл с перечислениями DNS);
    — генерировать шаблоны настроек DNS для BIND9.

    WEB интерфейс:
    — отображает статистику с сортировкой по дате (по умолчанию верху крайние посещенные) и другим полям;
    — показывает самые посещаемые DNS и сколько раз посещали;
    — выделять цветом (красным) в общем списке посещенных DNS, DNS из списка запрещенных.

    К слову скажу, что переопределение DNS ни от чего не спасет и это не средство защиты. Защитой могут быть антивирусы, фаерволы, прокси с анализатором трафика и прочие специализированные средства защиты, однако в случае с анализом DNS трафика – предупрежден, значит вооружен, да и кто, куда и когда из семейных ходит видно.

    Еще раз ссылка на github: https://github.com/mcdir/statdnslog
    Сайт: http://statdns.nedze.com/
    Демонстрационная версия WEB интерфейса: http://demo.statdns.nedze.com/

    Доп материал
    Включение логов DNS BIND9 logging Clause — http://www.zytrax.com/books/dns/ch7/logging.html
    How to enable named/bind/DNS full logging — http://stackoverflow.com/questions/11153958/how-to-enabled-named-bind-dns-full-logging
    Bind Logs – Top DNS Queries http://www.pablumfication.co.uk/2010/09/03/bind-logs-top-dns-queries/
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 50

    • UFO just landed and posted this here
        –2
        Антивирусы для Linux беспомощны чуть менее чем полностью.

        Буквально на той неделе изъяли почти 35 экземляров разлчичного зловредного ПО с серверов на Linux. Из них всех все возможные антивирусы на VirusTotal нашли лишь 5. А на 30 заявили, что это нормальные такие программы :)

        Антивирусы — это иллюзия защиты, а на Linux — так тем более. Там даже иллюзию никто не пытается создать.
          +7
          От чего вы хотите защиту антивирусом? От дырок в серверных веб-приложениях?

          Это не антивирус, это вам IDS нужна.

          А на десктопах у линукса проблем совершенно нет, пока непривыкшие руки не делают wget | curl и прочие sudo ./install.sh. Хотя даже с учетом последнего я о массовых случаях не слышал.
            0
            Каким образом IDS зловредное ПО влитое через дырявое приложение или запущенно от соседнего системного пользователя?
            0
            Скажите, а как вы нашли те 35 программ? И как определили, что те 30 зловредные?
              0
              Вы очень вовремя спросили, я буквально только что отписал небольшой отчет про то как искали: ссылка. Правда, там не все 30, а те, которые были особо тщательно проанализированы.

              Обнаруживались они по косвенным признакам, например, попытка подделать Apache, атаки на удаленные серверы, подбор паролей к сторонним серверам. То есть именно по зловредной активности они себя и проявляли.
                0
                Это просто наработки какие-то? Или продукт делаете? А то пиаром попахивает…
                  +2
                  Пиаром совершенно бесплатного open source GPLv2 продукта? :) Не, ну хотите — используйте, хотите — нет. А эффективность антивирусов там очень хорошо показана.
                    0
                    Просто дело было вечером, делать было не чего…
                    Продуктом это можно назовётся, если найдутся единомышленники и будет сделаны доработки по дизайну, документации, расширен функционал. Например, нужны утилиты разбора для логов других DNS-серверов, автоматического обновления бан листов и др. Для моих нужд того, что сделано хватает за глаза, но это ж все навсего пока солянка из утилит и сайта одностраничника.
                +4
                Чего минусим-то человека?

                Мнение извесное, неоднократно высказываемое извесными в инетах людьми от безопасности, кстати частненько и даказываемое как в теории так и на практике. Как минимум имеет место…

                Иногда, я бы даже дальше пошел и сказал: «Антивирусы беспомощны чуть менее чем полностью». Без слова «линукс».
                Поясню мысль:
                — вы не представляете сколько раз, вычищая заразу из компьютеров очередного «родственника» (или друга друга и т.д. и т.п.), я находил на нем не старый анивирус (любимое подставить) с актуальными базами; Скорее это даже правило;
                — часто, даже не зависит от «марки» операционки (чего я только не видел от XP, вист, 7-к до ubuntu, даже экзотические, по понятиям простых смертных, фряхи, хотя последняя ес-но без антивиря);
                — а уж как часто я убеждался в том, что зловреды, извините, клали на установленый там антивирус… Книги писать можно… Иногда, просто теряешся в догадках, как оне туда забираются. Ладно под XP, когда люди под админом работают. Но блин бывало же: в 3-й раз после переустановки, у меня сдавали нервы — закрывал все (забирая пароль админа домой) и все устанавливая только сам, через удаленный доступ. Полгода — и все по новой, причем вплоть до — у зловреда все права администратора.
                — всех этих зверей, начиная от питомцев ботовода и заканчивая койн-калькуляторами, оно (антивирь), если еще не отключен зловредом, не видит в упор или если и видит то позно — через два месяца, когда с обнавленными базами наконец-то нюх появился, но на компе уже зоопарк.

                Люди спрашивают потом, а зачем мне антивирус и почему он не сработал (или сработал через два месяца, когда — зоопарк). Пытаюсь объяснить такой сказкой:

                Антивирус — это как собака наоборот.
                Нормальная сторожевая собака не пускает чужих в дом.
                Перевернутая собака «Антивирь» — не пускает тех, кого она знает как чужой, остальные для нее нейтральны как минимум, если не свои в доску...


                Думаю дальше на хабре развивать мысль не стоит — люди тут образованые… Хотя в последнее время, антивирусы разжирели и это не совсем верно — современные анивирусные пакеты на борту только что атомную бомбу не имеют (я имею ввиду все-то чем и сегодня их пичкают от firewall до ids, эвристики, анализаторов поведения и т.д. и т.п.).
                Но упор к сожалению все еще не там, имхо.

                Однако, что я заметил, внимание: Как правило, только человек уяснил что антивирь не панацея — доктор (всмысле я) больше не нужен. Больше я там не появляюсь или очень редко вычищаю какой-нить «поисковик» из браузера и подобную мелочь. Никаких больше плясок с бубном (скрытых, не удаляющихся процессов, самараспаковывающихся в самых неожиданных местах и прочей сереьезной дряни).
                Сервера и персоналки (под nix) здесь к сожалению не исключение. Их меньше заражается — это да. Но и вычищать их — тот еще геморой.
                И уровень дряни повыше, ломают часто серьезно, логи правильно подчищены, вплоть даже как пакеты указаные в apt/history, iptables красивый и все такое няшное. С виду совсем приличный сервер, не подкопаешся — если бы например не слитые пароли и ключи или не абузы одна лучше другой.

                Так вот, в продолжение той сказки, простой вопрос:

                Почему анивирусные компании дальше разводят «собак наоборот», вместо того чтобы просто установить хорошие «ворота» в доме, ну или хотя бы хорошую «сигнализацию»?

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

                А статья дельная, спасибо!
              0
              ТС, приятная статья и хорошая идея. Вообще со статистикой напрямую плохо у всех без исключения DNS серверов — ее тупо нету. Давно подумыаю чтобы на базе golib-dns нарисовать свой DNS, чтобы можно было почти в реальном времени анализировать аномалии.
                0
                Ну напрямую можно и этон инструмент настроить с использованием по расписанию. А в общем, соглашусь, везде нужен большой напильник. В том же bind9 чтобы включить логи нужно еще поискать где и как это сделать. Обидно другое, для использования своего DNS в идеале нужен постоянно включенный компьютер и не нулевые знания об устройсте и конфигурации Dns сервера. Это многих отталкивает, поэтому предложенное решение редко используется.
                  –1
                  Еще можно случайно получить открытый для всех DNS-resolver и, как результат, получить реальный шанс поучаствовать в DNS Amplification атаках.
                    0
                    Да да. Именно. Посему удобные анализаторы логов чаще нужны администраторам, которые знают где как их примененить. Без навыков администрирования такое ПО бесполезно.
                      –1
                      Открытость резолвера никак принципиально не влияет на возможность проведения через него DNS Amplification.
                        0
                        В своей сети желающих поDDoSить других я могу гонять и изолировать, а если резолвер доступен для всего мира, то весь мир почистить я не могу.
                        Так что не принципиально, но фактически влияет.
                          0
                          Причем тут своя сеть? DNS Amplification основан на том, что DNS сервер получает UDP-запросы с поддельными source-address жертвы и отвечает на них пакетами в несколько раз больше размера запроса.

                          К ддосу ботнетами изнутри сети это никакого отношения не имеет.
                            0
                            Как при чем? Если DNS-сервер не доступен для всего интернета, то как до него дойдет пакет запроса от злоумышленника из интернета?

                            А ботов, которые шлют пакеты с поддельным source-address внутри моей сети я могут и погонять.
                              0
                              ДНС сервер, помимо рекурсии, зачастую (а обычно это его единственное занятие) занимается обслуживанием собственных доменов, на запросы к которым и отправляет ответы на фейковые адреса.

                              Внутри сети не имеет особого смысла их гонять — нормальный ДНС сервер не будет отправлять ответ через интерфейс, отличный от того с которого пришел запрос. Т.е. если запрос пришел с внутреннего интерфейса, то ддосить боты могут только твою сеть :)
                  0
                  А еще можно посмотреть на возможность аналитики работы powerdns/nsd(?) и чего уж, логи ms dns, оформить это на каком-то более кросслатформенном решении, в общем-то.
                  Мне тут по ходу работы надо днс заниматься, так что я бы и помог.
                  и кстати, про национальные.рф/.укр и т.п. тоже не стоит забывать, если уже подходить комплексно
                    0
                    В том и была задумка, если сообществу проект понравится расширять его можно до бесконечности. Главно чтобы пользу приносил. Ну и да, у меня на доработки не особо время есть, так что любая помощь будет не лишней.
                      +1
                      Ни у PowerDNS, ни у nsd нет никакой толковой системы аналитики. В nsd ее нет вообще. В PowerDNS есть очень подробный лог топовых резольверов/топовых доменов/записей, но он довольно ограничен и не дает всей информации.

                      Единственно правильный вариант в данный момент, который существует — это приложение на PF_RING/PCAP слушающее 53й порт и собирающее статистику с него. А-ля dnstop, но умнее.
                        0
                        На википедии например PowerDNS стоит в связке с bind, у последнего есть система логирования. Конечно наиболее универсальное решение — снифер порта DNS-службы. Используемые в DNS протоколы стандартизованы, но все равно снифер весьма не тривиальная задача.
                          0
                          Все их системы логгирования на серьезных нагрузках либо убьют сервер либо приведут к таким лагам DNS сервера, что будет страшно :) Самое крутое, что есть, как мне кажется, у CloudFlare, у них свой демон на GoLang.
                      0
                      Очень не хватает обратных доменных имен к IP адресам. Не понятно же так кто есть кто
                        0
                        О каких обратных речь?
                        Там есть как IP клиента, который обращался к DNS,
                        image
                        так и обратные DNS запросы.
                        image
                          0
                          Делать gethostbyaddr() на всех IP адресах клиентов.
                            0
                            Это сделать конечно можно, актуально будет если в сети много компьютеров и IP клиента может меняться или DNS лучше ассоциируется с компьютером. Запишу себе в TODO.
                        +4
                        Не понимаю, почему нельзя было просто использовать /etc/hosts или iptables -j REJECT, зачем бинд мучать?
                          +1
                          Отвечу за топикстартера, когда много техники на каждом смартфоне, планшете, чайнике, etc. настраивать фаирвол и обновлять его то еще удовольствие а при DNS, не являющимся при этом gw, настраиваем 1 раз и вся техника не ходит на зануленные ресурсы, делал похожее на домашнем сервере только подгружал базы адблока и ghostery, чтоб с мобильных устройств рекламу не грузило, просто например, на smart-TV банерорезалку или фаирвол не поставишь.
                            +1
                            Я имел в виду сделать это на шлюзе (там, где вероятно стоит бинд).
                              0
                              DNS != Gateway
                              Часто шлюзом выступает роутер, тогда как ДНС крутится на NAS. Пустить весь трафик через сервер с DNS не всегда целесообразно и чем шире полоса, тем меньше смысла.
                                0
                                Смотря какой DNS-сервер. DNSMASQ, например, умеет смотреть в hosts.
                                  +1
                                  Пользуюсь pdnsd дома, также умеет смотреть, что не меняет сути. Сформировать конфиг для любого DNS сервера дело пары минут и скрипта в несколько строк. Я лишь ответил почему не iptables, а именно dns.
                                    0
                                    Да, конечно, согласен, что DNS+hosts будет быстрее и проще всего. Хотя по большому счету это уже дело вкуса, что использовать ;-) Вон некоторые уже и базу данных поднять хотят)))
                                  0
                                  В домашних условиях как раз обычно DNS = Gateway. Тут видимо не совсем обычно все.
                              0
                              Во первых выше правильно сказали, hosts нужно будет настраивать везде (на каждом компьютере ) + поддерживать в актуальном состоянии.
                              Во вторых мне нужны были логи.
                              В третьих в статье я сказал, что вариантов много, мой не единственно и не догма.
                                0
                                Да расслабьтесь, я же не наезжаю. Просто интересно стало.
                              0
                              Если бы вы выложили на базе своей аналитики скриптик, который генерировал бы файл hosts с top-1000 хостов с рекламой и счётчиками (типа mc.yandex.ru) — цены бы не было.

                              А то в интернетах полно школоты, которая собирает многомегабайтные (?!!!) списки хостов, которые в смартфон или в роутер не загрузишь — тяжело им с их маленькими процессорами и памятью.
                                0
                                Пользуйтесь на здоровье, все придумано до нас:
                                github.com/dschuermann/ad-away/wiki/HostsSources
                                  0
                                  Вы не поняли, ключевое слово — «топ-1000».

                                  Ну нафига мне, скажите, в hosts держать IP аргентинской баннерокрутилки? Я баннер от неё увижу раз или два в жизни. А вот из-за мегабайтного hosts у меня планшет включается по пять минут _каждый_ раз. Так что пусть там будет Яндекс.Метрика, серверы AdWords и прочий крупняк.
                                    0
                                    Тогда только самому набивать, у каждого свой ТОП-1000, у меня наоборот, я банер яндекса увижу раз в 2 месяца в лучшем случае, а вот ресурсы из usa и nl вижу систематически. Вообще это не так сложно сделать, неделю позаморачиваться, потом будет попадаться очень редко. Ну а большие списки фильтровать на собственном DNS (самая дешевая виртуалка, если нет своего сервера.) Я например даже через мобильный интернет иду через свой сервер со своим ДНС и без VPN не работаю.
                                  0
                                  см github.com/mcdir/statdnslog/blob/master/utill/tmp/ban_list.txt. Можно добавлять ручками и банить любые домены.
                                  Можно и hosts генерировать, вообще тривиальная задача (см https://github.com/mcdir/statdnslog/blob/master/utill/tmp/local_serverlist_ban.txt).
                                  А то в интернетах полно школоты, которая собирает многомегабайтные (?!!!) списки хостов, которые в смартфон или в роутер не загрузишь — тяжело им с их маленькими процессорами и памятью.

                                  Но все равно удобнее централизованный контролируемый свой DNS.
                                    0
                                    Мне МегаФон не даст в их DNS копаться)))
                                  0
                                  А просто поснифать весь трафик и получить то же самое плюс еще много чего интересного нельзя? Включите в разрыв между провайдером и вашим роутером нечто, в простейшем случае комп с двумя сетевухами, настроенными мостом и наслаждайтесь. Можно и snort какой-нибудь еще на трафик натравить.
                                    0
                                    Тут вот какой минус, чем шире полоса, тем сложнее это сделать, попробуйте проделать такой фокус на трафике в гигабит или выше, да даже на 200-300 мегабит уже получите задержки, если вдумчиво не заниматься тюнингом всего. Например у меня дома выделенный гигабит, который через год я планирую расширить до 10Г, стоит хороший маршрутизатор L4 и пустить трафик не через него, а через отдельный сервак — это убить свою полосу и загрузить домашний сервер в полку бесполезными вычислениями, ему и так есть чем заняться. А вариант с ДНС в этом плане очень удобный, да не все фильтруется и на конечных устройствах нужно дополнительно принимать меры, но очень многое уходит в null изначально, не скачиваясь и не подвергаясь постобработке.
                                      0
                                      "… раздаёт DHCP ADSL-модема"

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

                                        0
                                        Нет rspan не использую, анализа netflow по фильтрам пока хватает с головой, вы правы у меня специфика такая что трафика бывает много, не постоянно, но пару раз в неделю надо перегонять базы в несколько терабайт и тут нужна именно широкая труба, пусть не на долго.
                                    0
                                    … да и кто, куда и когда из семейных ходит видно

                                    Локальный маленький Большой Брат? ;)
                                      0
                                      Жена, сын, НЛО…

                                    Only users with full accounts can post comments. Log in, please.