пятница, 27 февраля 2015 г.

TP-Link WDR4300: httpd, который рулит всем.

Во время подготовки образа со всключенным snmpd в данный роутер, обнаружил, что httpd-сервис этого роутера даже в GPL-коде вставлен бинарником, никаких сырцов не дадено. Поиск в интернетах ничего не дал.

Дальше стал искать, как включаются правила для iptables, для чего грепнул rootfs на предмет упоминания iptables. Очень удивился, когда в /etc упоминания оного были только о сбросе, зато в httpd встретилось упоминание. Посмотрел внутрь httpd и обнаружил все правила для запуска iptables. В бинарнике! Никак не понять мне скрытого смысла. Зачем помещать текстовые данные в текстовом виде внутрь бинарника? Причина только одна - спрятать бэкдоры и прочие вещи, о которых пользователю лучше не знать. Вот кусок вывода strings httpd:

iptables -F FORWARD_FILTER
iptables -F FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 1 -j FORWARD_ACCESSCTRL
sh /tmp/wr841n/parent.sh
iptables -I FORWARD_FILTER 1 -i %s -p udp --dport 53 -j FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 2 -i %s -p tcp --dport 80 -j FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 3 -i %s -p tcp ! --dport 80 -j DROP
iptables -I FORWARD_FILTER 4 -i %s -p udp ! --dport 53 -j DROP
iptables -I FORWARD_FILTER -m mark --mark %s -j FORWARD_ACCESSCTRL
iptables -I FORWARD_FILTER 1 -i %s -m mac --mac-source %s -j RETURN
iptables -A FORWARD_PARENTCTRL -i %s -j DROP
iptables -A FORWARD_ACCESSCTRL -i %s

Упоминание "/tmp/wr841n/parent.sh" наводит на мысль о том, что бинарный httpd особо извращенным способом читает данные из бинарного (!) пользовательского конфига, закидывает их во внешний шелл-скрипт, а потом запускает на исполнение. Считаю, что задумка хранить конфиг в бинарном виде - прекрасна, так же, как и хранение больших текстовых блоков внутри бинарника - даже если какой-то гад доберется до данного изврата, переизвратить не сможет!

Что же скрывает от нас TP-Link? Может быть он перехватывает данные, которые наши iPhone шлют в АНБ и шлет копию этих данных в китайские спецслужбы?

среда, 25 февраля 2015 г.

Netgear WNR3500Lv2 Router

Есть у меня в дому еще один старенький роутер означенной модели. Скорость на его wifi выше 130мбит/с не поднимается, но ethernet-порты у него гигабитные, и есть пачка устройств, которым быстрее чем 130 и не нать, типа телефонов да принтеров. А портов в дому не хватает. Потому - решил и его заюзать.

Проблема на нем та же, что и в tp-link'е - нет поддержки snmp, а хотелось бы, поскольку домосеть как-то неимоверно быстро растет - уже более 30 разных устройств - андроиды, яблоки, телевизоры и прочая хрень...

Нашел на их сайте GPL source, скачал, почитал инструкцию. Увидел в ней
You will need to use the 4.2.3 Linux 2.6 MIPS Cross Compiler and Tools (mipsel-uclibc toolchain), which should have also been posted to your account. If you still can't find it, please download the toolchain from the GPL source package WNR3500Lv2-V1.2.0.16_40.0.66_src.tar.zip, which also includes the toolchain.
но вот беда - нету тулчейна в комплекте... При чем инструкция в каждой из примерно 7 версий прошивок говорит, что есть!

Ну, в итоге, нашел нужный тулчейн, и собрал прошивку as-is. Далее - скачал готовый образ, отрезал от него rootfs и сравнил. Вроде все соответствует. Надо бы подрихтовать Makefile, чтобы snmpd встраивался. Не умею я это дело совсем. Придется изучать.

вторник, 24 февраля 2015 г.

make 3.82: mixed implicit and normal rules

При сборке образа для роутера Netgear WNR3500Lv2 наткнулся на ошибки Makefile. Кто бы мог подумать, что в версии make 3.82 возникнут проблемы со сборкой:

mixed implicit and normal rules
Откатился на 3.81 - make работает успешно.

воскресенье, 8 февраля 2015 г.

TP-Link WDR4300 snmpd. Part3

Оказалось, что отсутствующие модули, о которых я писал в предыдущем сообщении удалены не зря - после того, как был загружен xt_tcpudp.ko перестал работать форвардинг и перестали раздаваться адреса по dhcp. Не первый раз наблюдаю, что firmware пишется хреново - модули удалили, а почистить стартовый скрипт на предмет загрузки удаленных модулей - забыли. Всё равно ж никто не видит, что там, на консоли, происходит...

Ну, короче, сделал я прошивку, в которую встроен snmpd, который запускается автоматически. Вот она. Сделана на базе 3.13.33 Build 140715 Rel.41693n. После перешивки весрию показывает ту же самую. Понятное дело, если кто-то станет шить - на свой страх и риск.

TP-Link WDR4300 snmpd и другое

Нашел на просторах инструмент для сборки-разборки стоковых имиджей TP-Link. Он входит в комплект firmware-mod-kit, что позволило разобрать-проверить-собрать правленый и дополненый имидж.

Пересобрал busybox и дополнил его полезными фичами, добавил net-snmp, прошил. Snmpd не запустился автоматически, но после изучения лога загрузки возникло понимание, что snmpd не смог понять с командной строки, кто такой daemon (-u daemon -g daemon), видимо надо цифровой id поставить.

Зато теперь есть netstat. Тут же выяснилось странное - на нескольких портах висят листенеры:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:33344           0.0.0.0:*               LISTEN
tcp        0      0 [local-net]:49152       0.0.0.0:*               LISTEN
tcp        0      0 [local-net]:49153       0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:49154           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:20005           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1900            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1041            0.0.0.0:*               LISTEN

Ну там 80-й и 1900-й порты еще понятны, но что делают остальные - неясно. Кроме того, обнаружилось, что в предоставляемом GPL Source Three нет исходников httpd, а как я понял, основные функции по работе с mtd производит он.

Да, вчитываясь в лог загрузки увидел совсем уже полное безобразие - отсутствуют модули ядра:

insmod: cannot open module `/lib/modules/2.6.31/kernel/x_tables.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/xt_tcpudp.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/iptable_raw.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/flashid.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/harmony.ko': No such file or directory

И это в стоковой прошивке! Первые два были найдены в GPL sources после сборки ядра, но первый ставиться не захотел:

# insmod ./x_tables.ko
[41243.332000] x_tables: exports duplicate symbol xt_free_table_info (owned by kernel)
insmod: cannot insert `./x_tables.ko': Invalid module format (-1): Exec format error

Видимо забыли вычеркнуть из спискм загрузки. Второй нормально загрузился. Где взять остальные пока неясно...

четверг, 5 февраля 2015 г.

TP-Link WDR4300 и snmpd. Part 1

По каким-то неясным для меня причинам, в современных домашних маршрутизаторах не принято устанавливать демона snmpd, который сильно облегчает жизнь, если к маршрутизатору приходит не один-два клиента, а пара десятков или того больше. При таких нагрузках роутер периодически "впадает в задумчивость" или вовсе выпадает из работы.
Конечно, нетрудно нажать кнопку power и перегрузить роутер. Но это, на мой взгляд, неправильный путь. Правильный - получать статистику с маршрутизатора и скармливать ее какому-либо "кактусу". И в момент, когда роутер отказался работать - изучить показания оного кактуса. Но для этого на роутере должен работать snmpd, которого современные производители прошивок не вставляют, считая, что для SOHO-роутеров это не нужно. А если нужно конкретно вам, то нужно "занести" примерно вдвое большую сумму за enterprise-решение. Вот такие сложности, обусловленные видимо маркетологами.
Да, есть разного рода WRT-системы, но в них появляются иные проблемы, поскольку такие системы пишутся для некоего гипотетического роутера. Так например, мой WDR4300 на OpenWRT не смог "подружиться" с половиной оборудования через WIFI, поэтому данная система была отринута. Помимо прочего, при перешивке на сток роутер "завис" и "закирпичился", но был восстановлен с помощью tftp и консольного шнурка.
К счастью, фирма TP-Link выложила GPL sources для данного роутера. Сорцы сильно с издержками. К примеру:
5. After building code, you can get the uboot and linux kernel image, then you
can make rootfs with mksquashfs tool, 
but you can't upgrade these images to your
router through web management page.
И ни слова о том, как собирать образ, который can upgrade, нехорошо.
Что забавно, в сорцах net-snmp имеется. Видимо, мысль таки появлялась, но маркетологи не дали воплотить.
Пришлось изучить методы кросс-сборки. Сегодня удалось собрать и запустить на роутере. Первый раз при сборке указал ключик --enable-minimalist, так snmp-walk вывел всего 52 строки данных. После отключения оной опции была получена вполне нормальная статистика из полутора тысяч строк. Что не может не радовать.

Теперь встает вопрос, как поместить данного демона внутрь прошивки (пока что он работает с внешнего диска, библиотеки ищутся через LD_LIBRARY_PATH) и стартовать автоматически, желательно только на внутреннем интерфейсе. Точнее - как собрать прошивку, после помещения туда snmpd, нужных библиотек и куда вписать автозапуск.
"Будем искать" (с).