Open source
PHP
May 2014 7

Как я 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/
+16
32.8k 200
Comments 50