В обновлениях системы мониторинга Zabbix 2.2.14 и 3.0.4 (http://www.zabbix.com/) устранена уязвимость (http://seclists.org/fulldisclosure/2016/Aug/60), позволяющая выполнить SQL-код в СУБД и добиться выполнения произвольных команд на сервере и отслеживаемых хостах. В частности, через SQL-запрос можно получить права администратора Zabbix, который в зависимости от конфигурации может выполнять команды на хостах, отслеживаемых в Zabbix. Проблема вызвана (https://support.zabbix.com/browse/ZBX-11023) недостаточной проверкой допустимых значений параметра toggle_ids при обращении к странице latest.php. Атака возможна со стороны аутентифицированного пользователя или при включении гостевого входа без пароля.
URL: http://seclists.org/fulldisclosure/2016/Aug/60
Новость: https://www.opennet.ru/opennews/art.shtml?num=44962
Лес. Зима. Вечер.
Подходит toggle_ids к latest.php, стучит и спрашивает: "А кто в скриптике живёт?"
А из latest.php ему отвечают: "Я Заббикс, за процессами слежу в этом скриптике сижу! А ты кто?"
-- А я Случайный Запрос, toggle_ids не донёс. Можно я с тобой поживу, SQL-код в СУБД пропихну?
-- Ну заходи, будем вместе жить, процессы сторожить.
И жили они долго и счастливо до самого kill -9!
> kill -9Слишком добрый!!! Требую продолжения!!!
Alt-sysrq-b тебе в помощь. В мультиках это обычно так: ты стоишь себе такой, ла-ла-ла. И тут на тебя падает рояль с тридцатого этажа.
Похоже, ветка 2.4.х не подвержена атаке
> Похоже, ветка 2.4.х не подвержена атакеЯ тебе больще скажу: похоже, и 2.0.18 не подвержена. Ср.:
2016-07-22 [Zabbix-announce] Zabbix 3.0.4 and 2.2.14 released
--https://sourceforge.net/p/zabbix/mailman/message/35237249/2016-04-20 [Zabbix-announce] Zabbix 2.0.17, 2.2.12, 2.4.8 and 3.0.2 released
--https://sourceforge.net/p/zabbix/mailman/message/35027668/Зато LTS такая LTS. http://www.zabbix.com/life_cycle_and_release_policy.php
2.0, видимо, выпкстили до введения ярлыка TLS... На картинках его не рисуют: плохо для продаж.
Две недели назад у меня отключили сервер мониторинга на публичном IP. Якобы за рассылку спама. Установить не удалось что это было. Обновил zabbix и ОС. Запаролил админку апачевским паролем. Пока полет нормальный. Читал логи. Проверял конфиги. Проверял всякими утилитами типа tiger и т.д. в логах zabbix на тот период когда пров жаловался - странное повышение la - при среднем la 0,1 было повышение до примерно 0,7 которое четко видно на графике. Вопрос. Что это было?
> Что это было?Просто к сведению -- в альте версию 3.0.4 собрали ещё несколько раньше, так что могло быть и оно: http://packages.altlinux.org/ru/p8/srpms/zabbix
В альте собрали на 3 дня позже, чем пакеты под Ubuntu и Centos, которые появились на оффсайте 22-го числа.
Мда... в 2016 году пыхеры так и не освоили санитизацию запросов.
Google вбросил им как это нужно реализовать https://wiki.php.net/rfc/sql_injection_protection
> Google вбросил им как это нужно реализовать https://wiki.php.net/rfc/sql_injection_protectionЛегко реализуется путем NoSQL баз. Извините, но SQL слишком много всего умеет. Вот занафига базе уметь код выполнять? Чтобы хакерью удобнее было? Если вы играете с огнем - однажды вы обжигаетесь.
> Легко реализуется путем NoSQL баз.Тот же MongoDB имеет язык запросов основанный на JSON. Думаю уже набралось немало умников, которые эти самые запросы шлют из клентского жаваскрипта. Так что проблема отнюдь не в языке запросов.
А если у меня база простая как валенок, понимающая только key и value ассоциированный с ним, и оба произвольные значения, возможно как максимум с ограничением по длине - как ты это хакать будешь, интересно? Оно чисто технически не имеет никаких языков запросов через которые ты бы мог у меня выполнить код. Как самый максимум ты может быть положишь какой-то мусор в базу лишний раз. Это, конечно, свинство, но намного менее неприятное :)
>Оно чисто технически не имеет никаких языков запросов через которые ты бы мог у меня выполнить код. Как самый максимум ты может быть положишь какой-то мусор в базу лишний раз. Это, конечно, свинство, но намного менее неприятное :)Товарищ, потише. Думайте, прежде чем говорить. Здесь именно это и происходит - в базу кладут "какой-то мусор". Только, вот беда, Zabbix штатно позволяет выполнять команды локально или через Zabbix-агентов, если это разрешено в их конфигах. В результате в базу можно положить не только "какой-то мусор", но и так называемые "действия", который как раз и позволяют выполнять произвольные команды на Zabbix-сервере или через Zabbix-агентов.
Смена одного хранилища на другое тут не помогла бы. Проблема только в недостаточной валидации данных в веб-интерфейсе, написанном на PHP.
>>А если у меня база простая как валенок, понимающая только key и value ассоциированный с нимТо где-то есть программа реализующая логику в которой значения из базы - операнд.
Ну и далее эта программа и стрельнет. А будет ли это в СуБД или в браузере у клиента выполнится вдруг неожиданный javascipt пришедший из доверенной базы - уже детали. :)
Просто у тебя хакерское воображение отсутсвует как таковое. Тут пару дней назад пробегала новость о использовании redis для взлома сервера. Поинтересуйся деталями, они есть по ссылкам. Откроешь для себя новый мир, где подстановка "мусорного" ключ->значение достаточна для взлома. И никакого SQL или выполнения кода со стороны БД.
https://mariadb.com/sites/default/files/MaxScaleSecuritySolu...
> https://mariadb.com/sites/default/files/MaxScaleSecuritySolu...Отличный пример того как сначала люди создают себе проблемы. зачем-то научив базу выполнять код, парить, жарить и крестиком вышивать, а потом - героически с этим борятся изобретая чуть ли не app-level firewall. При том что половина вещей делается на тривиальных key-value, которые быстрые как понос и хакать там просто нечего. Ну да, програмить это может быть несколько менее удобно, особенно если вы планируете активно перетрясать схему базы.
>> https://mariadb.com/sites/default/files/MaxScaleSecuritySolu...
> Отличный пример того как сначала люди создают себе проблемы. зачем-то научив базу
> выполнять кодТы уверен, что база выполняет какой-то там код? СУБД выполняет запросы. Если базу попросить выполнить DROP DATABASE, а права пользователя разрешают ему это сделать, то чья это проблема? Всякие хранилища ключ-значение тоже выполняют запросы. Можно вставить туда значение, можно прочитать, можно удалить. Если попросят удалить и имеют на это право, то это проблема базы? Если попросят вставить что-то нежелательное, то это проблема базы? Это проблема приложения. Оно должно следить за тем, что просит сделать СУБД.
Формально, можно было бы разнести DDL и DML, да и в принципе любовь WEB + MySQL + PHP к "Alter table add column" нехорошая штука.
Столкнулся с тем что "некоторых разработчиков" очень сложно убедить в том что им для "сайта" ddl не нужен :)
Честно говоря, я не понимаю о ком вы. Разработчики Zabbix нигде не делают alter table add column. Разве что при миграции на новую версию.Иногда структуру базы данных бывает нужно менять. И довольно часто делать это нужно над имеющимися данными, а не экспортом и реимпортом в новую структуру. Так что DDL плохому танцору мешают, а хорошему - нет. Не нравится - учётную запись можно ограничить так, чтобы никаких alter table. Чтобы учётная запись могла только select, insert, update и delete.
Болезный, ты где на картинке увидел код? Если для тебя where это код, то настоятельно советую сменить профессию.
SQL умеет столько, сколько нужно для работы с множествами. А что большинство ниасиляторов использует РСУБД в качестве индексированого кеша - это проблемы ниасиляторов.Хотя, казалось бы, достаточно сделать прослоечку из хранимых процыдурок, которую и отдавать наружу в пхп, но нет же, непременно нужно лезть в часы хлебным ножом.
Что ни придумают, лишь бы Nagios не пользоваться(
В Nagios есть NRPE и это его основное назначение - выполнять команды, которые попросит сервер мониторинга. Zabbix позволяет выполнять команды на удалённом узле, но по умолчанию эта функция отключена, потому как хватает штатных возможностей агента и UserParameter. Выполнять вообще-вообще произвольные команды - это очень редкий случай.Да, в Zabbix можно настроить выполнение команды без перезапуска всего сервера мониторинга, просто зайдя в веб-интерфейс и указав, где и какую команду нужно выполнять. В Nagios после правки конфига нужно перезапускать весь сервер. Кушайте сами.
>В Nagios после правки конфига нужно перезапускать весь сервер. Кушайте сами.Хороший вброс, но у вас "нипалучилось".
Вброс или не вброс, но кушайте сами. Меня Zabbix устраивает вполне. В "ём" есть сложные выражения для триггеров, графики, оповещения, действия, API, разграничение доступа. Ядро умеет очень много. В Nagios что ни надо замониторить, всё внешним плагином делается, который может только сказать хорошо или плохо сейчас. Предыдущее состояние в плагине взять неоткуда. Попробуйте в вашем нагиосе сделать триггер "если среднее значение на хосте A за сутки больше, чем 10% от среднего значения на хосте Б за час, то проблема". Своё хранилище придётся придумывать для хранения данных предыдущих опросов.
> Вброс или не вброс, но кушайте сами. Меня Zabbix устраивает вполне.Устраивает - пользуйтесь.
>В Nagios после правки конфига нужно перезапускать весь сервер.
А вот гнать чушь про ПО, которым вы не пользуетесь - не надо.
Вот вам вбросик: https://www.opennet.ru/opennews/art.shtml?num=22285
> Что ни придумают, лишь бы Nagios не пользоваться(Чет я не находил, чтобы nagios мог получать 500 новых значений в секунду.
А вот zabbix с таким спокойно справляется.
Это Поллер Zabbix'a за тебя решил.Частая ошибка Заббистов, в том что они вначале пробуют мониторинг на слабом железе,
и Там где Nagios\Icinga2 начинают задыхаться - Zabbix адаптируеться. Итого Zabbix - победиль!Дело в том что Icinga2 ( nagios лучше таки выкидывать ) - как то все равно на твое железо.
Указал ты ей, например, мониторить раз в секунду 500 хостов, где у каждого 500 метрик, - она и будет запускать их каждую секунду. Т.е. 500*500=250000 в секунду. Ну а справиться ли? Зависит от железа. Сервер может вообще зависнуть к х*.Хотим офигенный мониторинг, покупаем для него офигенное железо.
Про всякие там триггреры, где "на одном хосте то, на другом это - непорядок" - пишем в Graphite. ( Icinga2 + Graphite ) Ну а для graphite много приложений умеющих работать с его базой разными функциями и оповещать заодно.
В целом, сравнивать zabbix и icinga2, тоже самое как сравнивать США и Советский Союз в период разгара холодной войны.
Я посмотрел на эту уязвимость. Не знаю, почему, но у меня на 2.4.0 выдаёт такую ошибку:
Error in query [INSERT INTO profiles (profileid, userid, idx, value_int, type, idx2) VALUES (800800175701336, 1001000000000075, 'web.latest.toggle', '1', 2, 1);select * from users (1=1)] [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from users (1=1)' at line 1]Ну то есть этот дописанный сбоку запрос не выполняется. Пробовал что-нибудь придумать, как этим воспользоваться. Вставить вместо числа результат из подзапроса, например, или какой-нибудь union изобразить. Ничего не придумал. Может быть фантазия бедная, но сдаётся мне, что проблема преувеличена.
На 3.0.0 выдаёт:
Zabbix получил некорректный запрос.
Детали
Операция не может быть выполнена из-за несанкционированного запроса.
Операция не может быть выполнена из-за несанкционированного запроса.
Операция не может быть выполнена из-за несанкционированного запроса.
ЗакрытьПроблем нашли, да. А как её эксплуатировать - не придумали. Ну или у выполнявших какое-то другое программное окружение. Может PHP другой.
заббикс имеет такой дикий говнокод в фронтэнде на пхп, что волосы под мышками становятся дыбом. Этот невинный баг баловство. Там и покруче вещи накопать можно, если нужно.
Очень даже не плохо. Панель сделана в духе Windows 7-10. Только непорадовало, что нет индикации, что приложение запущено.