Закрытый код и уязвимости: чья мельница выиграла?

padlock by Augapfel, Flickr Вновь приходится слышать от разработчиков CMS старую песню: “мы закрываем исходный код, потому что там наверняка уязвимости, а в закрытом коде найти их сложнее”. Речь о коммерческой CMS, о PHP, а “закрывают код”, понятно, с помощью Zend Optimizer.

А вот интересно разобраться, кому в действительности нужно, чтобы код был закрыт подобным образом. Разбираемся. Например, раз уязвимости есть (а они есть), то наверняка среди них полно шаблонных решений. Разработчики-то, собственно, нормальные, как и у других продуктов, поэтому нужно ожидать неистребимых SQL injection и далее по списку. То есть, обнаружению и использованию типичных уязвимостей закрытый код не помешал. Не удивительно – ведь от того, что код закрыт, дыры не исчезли, их просто хуже видно.

Но это одно дело. Теперь предположим, что некий квалифицированный специалист-хакер решил найти особую дыру в данной конкретной CMS. CMS эта не самая распространённая, а значит специалиста заинтересовала не просто так, но с точки зрения атаки конкретного сервера. Потому что ради спортивного интереса специалисты не работают по мелочи, а вот под заказ – вполне. (Заказ может быть и “имиджевым”, кстати. Для этого сайт-цель должен быть очень известным.) Специалист либо приобретает демо-версию, либо покупает лицензию – и, так как он специалист, “раскрывает для себя” исходный код и исследует его. То есть, особенных препятствий нет, и специалисту “закрытый код” не очень помешает – всё ж технологии используются известные. Так что опять концепция “спрятанных под Zend`ом дыр” промахивается.

А вот “хакеры-дети” (“пионеры”), которым не все технологии понятны – может, им помешает “закрытый код”? Нет, оказывается, что “пионеры” либо используют готовый инструментарий, который ищет шаблонные уязвимости (от доступности исходных кодов не зависят), либо просто отправляются атаковать другой сервер. Предположить, что этот тип атакующего станет тратить сутки на тщательный аудит кода одной CMS, когда на сайтах вокруг полно других соблазнов, будет, мягко говоря, странным – потому что это уже не начинающий хакер выходит, а тот самый спец, работающий под заказ. То есть, “закрытый код” тут просто не играет роли, которую ему приписывают.

Итак, против кого работают “спрятанные дыры”? Оказывается, что только против добропорядочных веб-мастеров и админов, которые хотели бы поверхностно взглянуть, что же там внутри CMS, которую планируют поставить на свой любимый сервер. Хотя бы с целью оценить стиль, прикинуть возможности “адаптации”, а вовсе и не для поиска дыр. Для них создаются дополнительные трудности, вполне ощутимые.

А выгода, естественно, у разработчиков: во-первых, спрятаны от глаз потребителя дыры, огрехи и неряшливый код; во-вторых, можно списывать ошибки и проблемы на сопутствующие технологии, потому что потребитель-то в исходный код пальцем ткнуть не может; ну и, в-третьих, можно и в ус не дуть, считая что система лучше защищена, потому что Zend все глубокие архитектурные дефекты попрятал.

Так вот. Требуйте открытых исходников CMS – проще будет эксплуатировать ПО.

Адрес записки: https://dxdt.ru/2009/01/25/2011/

Похожие записки:



Далее - мнения и дискуссии

(Сообщения ниже добавляются читателями сайта, через форму, расположенную в конце страницы.)

Комментарии читателей блога: 23

  • 1 <t> // 25th January 2009, 14:49 // Читатель Vadim написал:

    Опять накатал неприлично длинный комментарий, который лучше вывесить отдельным постом, дабы не загаживать ленту
    http://vadim-proskurin.livejournal.com/326885.html

    Краткое содержание: не знаю, как в CMS, а в ОС, подтверждаю, отсутствие открытых исходников не сильно мешает искать уязвимости программной реализации.

  • 2 <t> // 25th January 2009, 14:56 // Александр Венедюхин:

    Спасибо, интересно.

  • 3 <t> // 25th January 2009, 15:11 // Читатель arcman написал:

    Опять очередная эпидемия разразалась из-за очередной критической уязвимости в “безопасных” закрытых исходниках виндовс.

    ?Лаборатория Касперского? предупреждает о существенном росте числа заражений несколькими версиями полиморфного сетевого червя Kido.

    Net-Worm.Win32.Kido использует критическую уязвимость в Microsoft Windows (MS08-067) для распространения через локальные сети и съёмные носители информации.

    Червь отключает функцию System Restore, блокирует доступ к сайтам, посвящённым информационной безопасности, и скачивает на заражённые компьютеры дополнительные вредоносные программы.

  • 4 <t> // 25th January 2009, 20:12 // Читатель Vadim написал:

    >Net-Worm.Win32.Kido использует критическую уязвимость в Microsoft Windows (MS08-067) для распространения через локальные сети

    Забыли уточнить, что речь идет о Windows 2003 и моложе. Начиная с Vista, MS08-067 удаленно не эксплуатируется ибо ASLR.

  • 5 <t> // 26th January 2009, 12:39 // Читатель arcman написал:

    всё зависит от реализации, коя скрыта.

    да и от того что машина повиснет, а не инфицируется, пользователю легче не станет =)

  • 6 <t> // 26th January 2009, 20:27 // Читатель Vadim написал:

    >всё зависит от реализации, коя скрыта.
    Неверно, всё зависит от ASLR, коя документирована.

    >да и от того что машина повиснет, а не инфицируется, пользователю легче не станет =)
    Неверно. Во-первых, машина не повиснет, во-вторых, пользователю обычно легче перезагрузить машину, чем лишиться пароля на webmoney или персонажа в wow.

    Вы бы лучше, прежде чем здесь писать, в гугл заглядывали. Тогда бы не пришлось указывать вам на ошибки, из которых ваши комментарии состоят чуть менее, чем полностью.

  • 7 <t> // 26th January 2009, 22:38 // Читатель arcman написал:

    Это ты молодец =)
    Видимо долго гуглил.
    Может нагуглил документации на ASLR?
    Что то я кроме как заявленых 256 возможных адресов, больше не заметил подробностей.

    Особо интересно, где в моих 2х предложениях ошибки, мистер умник.

  • 8 <t> // 26th January 2009, 23:23 // Читатель Vadim написал:

    >Это ты молодец =)
    >Особо интересно, где в моих 2х предложениях ошибки, мистер умник.
    Когда аргументы по существу заканчиваются, а признать слив не позволяет ЧСВ, происходит переход на личности. Типично.

    >Что то я кроме как заявленых 256 возможных адресов, больше не заметил подробностей.
    Так возьмите висту, возьмите отладчик и посмотрите на подробности глазами. Сразу всё увидите, например, что “возможных адресов” вовсе не 256. Но чтобы заметить подробности, надо не флудить в комментах, а напрягать мозг. Похоже, вам это трудно.

  • 9 <t> // 27th January 2009, 15:13 // Читатель arcman написал:

    Т.е. ответить за свои слова не способен, так и запишем.

    Заметим, что мой первый ответ был “по теме” – “Закрытый код и уязвимости”.
    Так кто тут флудит?

    > Неверно, всё зависит от ASLR, коя документирована.
    Как я понимаю документации на ASLR у вас нет, получается?
    Т.е. это был понт вызваный зашкаливанием ЧСВ.

    Далее по документации – надо ли вам объяснить, что критические уязвимости (равно как и ошибки в реализации) в документации не отражены?

    > Неверно. Во-первых, машина не повиснет.
    Неверно =)
    Доступны лишь 3 варианта:
    – исключение обработается внутри процесса и пользователь ничего не заметит
    – процесс “вывалится”
    – kernel panic & BSOD

    Вероятный диагноз:
    Проецирование своего распухшего ЧСВ на окружающих.
    (с.м. “психика” “проекция”)

  • 10 <t> // 27th January 2009, 15:20 // Читатель arcman написал:

    Кстати, ASLR есть и для ХР, но в виде строннего продукта на базе юниксового PaX – BufferShield.

    “Основные свойства продукта:
    – Распознает выполнение кода на стеке, куче, виртуальной памяти и сегменте данных;
    – Запрашивает подтверждение на завершение, если обнаружено переполнение буфера;
    – Ведет отчет обнаруженных переполнение в протоколе событий (Windows event log);
    – Позволяет включать защиту даже для отдельных частей выбранных приложений(!);
    – Поддерживает NX-бит и задействует его, если доступен (но может работает и без него);
    – Поддерживает симметричные многопроцессорные системы (SMP) с однополыми ЦП;
    – Рандомизирует раскладку адресного пространства (технология ASLR);

    http://www.sys-manage.com/PRODUCTS/BufferShield/tabid/61/Default.aspx

  • 11 <t> // 27th January 2009, 19:19 // Читатель Vadim написал:

    2 arcman: А отладчик-то в руки так и не взяли :-) Я уж не говорю о том, чтобы взять в руки MS08-67, натравить на висту и посмотреть глазами, какой из трех вариантов сработает.

    Интересно, что количество аргументов по существу спора в новом комменте от arcman не изменилось (было 1, стало 1), количество личных выпадов удвоилось (было 2, стало 4), впервые появились weasel words (“надо ли вам объяснять”). Ждем-с продолжения.

  • 12 <t> // 27th January 2009, 20:55 // Читатель memo написал:

    // А отладчик-то в руки так и не взяли :-) Я уж не говорю о том, чтобы взять в руки MS08-67

    Советую брать биту… :)

  • 13 <t> // 27th January 2009, 22:36 // Александр Венедюхин:

    Вероятный диагноз:
    Проецирование своего распухшего ЧСВ на окружающих.

    О, психиатрия по переписке! Arcman, это забавно.

  • 14 <t> // 28th January 2009, 11:22 // Читатель arcman написал:

    Тут кстати вопрос возник – у нас червь “Conficker.AA” (по классификации NOD32) успешно удалённо поразил машину с Vista.
    И продолжает поражать, несмотря на установленные обновления и заплатки.
    NOD его засекает и при попытки записаться на диск “бьёт по рукам”.
    После перезагрузки всё повторяется.

  • 15 <t> // 28th January 2009, 12:36 // Читатель arcman написал:

    UPD:
    Ответ найден и причём – вовсе без дебагера =)

  • 16 <t> // 28th January 2009, 14:35 // Читатель Giardo написал:

    Странно найти в этом блоге столь детский взгляд. Согласно Вашей логике, безопасность Пентагона – отстой, потому, что если на него сбросить бомбу, ему ничего не поможет,
    //и, так как он специалист, ?раскрывает для себя? //исходный код и исследует его.
    а script-kiddies (пионеры в вашей терминологии) туда не полезут, они лучше бабушку в переулке ограбят.
    //Предположить, что этот тип атакующего станет тратить //сутки на тщательный аудит кода одной CMS, когда на //сайтах вокруг полно других соблазнов, будет, мягко //говоря, странным

    Есть такое понятие как “сложность взлома”. Естественно открытость системы эту самую сложность понижает. Насколько – зависит от ее качества. Но в случае с CMS о высоком качестве говорить не приходится в любом случае.

    Пишите лучше про авиацию. Пожалуйста :)

  • 17 <t> // 28th January 2009, 16:30 // Александр Венедюхин:

    Согласно Вашей логике, безопасность Пентагона – отстой

    Это согласно Вашей логике, какой-то особенной.

    Есть такое понятие как “сложность взлома”.

    Что же это за понятие, поясните? Впрочем, я так понимаю, что по существу Вам сказать нечего.

    Пишите лучше про авиацию.

    Я без подсказок разберусь, о чём мне писать.

  • 18 <t> // 31st January 2009, 02:28 // Читатель Giardo написал:

    //Это согласно Вашей логике, какой-то особенной.
    Это Ваша логика меня поразила :) Впрочем неважно.
    //Что же это за понятие, поясните?
    Начну сначала.
    В ИДЕАЛЬНОЙ системе нет разницы открыты исходники или нет. Злоумышленник может знать методы аутентификации, способ связи с БД, сервер БД и любую другую информацию. И ничто ему не поможет если он не знает логинов/паролей и тп.
    В реальности же, кто-то где-то что-то обязательно позабудет. Где тонко – там и рвется. Открытый доступ в сеть для SQL сервера, возможность запустить эксплойт который просто покажет строку коннекта к БД – скорее всего все эти дырки есть и в вашей CMS.
    Первое, что будет делать взломщик (конечно после того как прощупает все дыры сканером уязвимостей) – соберет информацию по ней. И если исходники открыты, то проблем с нахождением дыр не будет. Для интереса – посмотрите сколько эксплойтов пишут под freebsd. и будут писать. потому что коды открыты. Пожалуйста только без unux vs windows, ладно? :) Если исходников нет – то все усложняется. Не критически, но может оказаться проще связать охранника и отвезти сервер домой на машине :)
    Сложность взлома системы = сложности взлома самого слабого звена этой системы, понимаете?

    //Я без подсказок разберусь, о чём мне писать.
    Как угодно. Если вам нравится вести записки дилетанта…

  • 19 <t> // 31st January 2009, 11:32 // Александр Венедюхин:

    //Что же это за понятие, поясните?
    Начну сначала.
    В ИДЕАЛЬНОЙ системе

    По-моему, Вы вообще не понимаете, что такое сложность. А рассказываете какие-то благоглупости типа “где тонко там и рвётся”.

    Сложность взлома системы = сложности взлома самого слабого звена этой системы, понимаете?

    Во-первых, это не сложность, а уж тогда “стойкость” какая-нибудь – или что там Вы имели в виду на самом деле.

    Во-вторых, “про слабое звено” – это чепуха, которую, впрочем, то и дело повторяют дилетанты. Систему нужно строить так, чтобы “слабое звено” не ломало всю систему. Вообще, это азы проектирования ПО.

    Если вам нравится вести записки дилетанта?

    Самое интересное, что сложно придумать что-то более дилетантское и наивное, чем самонапрашивающееся в умы всех начинающих программистов “решение” про то, что “закрытый код делает систему безопасной”. Это ведь как раз и есть банальное одноходовое рассуждение, когда из рассмотрения выбрасывается весь комплекс факторов кроме одного – “спрятать код”.

    Ну и, конечно, “цепная безопасность” – второй основной признак дилетанта в вопросах безопасности. Об этом “слабом звене” постоянно приходится слышать от наивных студентов (которые, тем не менее, поработали и с UNIX, и, скажем, с RAID – но выводов о реальности для себя, пока что, не сделали).

  • 20 <t> // 31st January 2009, 14:20 // Читатель arcman написал:

    > Читатель Giardo написал:
    > Для интереса – посмотрите сколько эксплойтов пишут под freebsd. и будут писать. потому что коды открыты.

    А для MS Windows сколько пишут?
    А сколько из них можно реально использовать на практике?

    > Пожалуйста только без unux vs windows, ладно? :)
    Это заранее в своей беззащитности расписался чтоли? =)

  • 21 <t> // 31st January 2009, 14:40 // Александр Венедюхин:

    > Пожалуйста только без unux vs windows, ладно? :)
    Это заранее в своей беззащитности расписался чтоли? =)

    Ага, видимо. Кстати, уже и заявление, что “эксплоиты под FreeBSD пишут потому, что коды открыты” – выдаёт уровень возможной “защиты” и тип подхода к проблеме.

  • 22 <t> // 2nd February 2009, 14:18 // Читатель Giardo написал:

    > Пожалуйста только без unux vs windows, ладно? :)
    Это заранее в своей беззащитности расписался чтоли? =)
    Просто не хотелось холивар поднимать. :)

    Вообще спорить с упертыми дилетантами – скучно и ненужно. Оставайтесь при своем мнении. Если вы и по остальным темам такой же “специалист”, то пожалуй я отпишусь. :)

  • 23 <t> // 2nd February 2009, 23:45 // Александр Венедюхин:

    Ну именно! Поразив изречениями типа “эксплоиты под FreeBSD пишут потому, что код открыт” аудиторию, “гуру” должен удалиться, важно задрав нос.