Приложение MOVEit, массово эксплуатируемое в прошлом месяце, исправляет новую критическую уязвимость

Мультфильм старше 15 лет. В то время подготовленные операторы были новинкой — по крайней мере, для баз данных с открытым исходным кодом, таких как MySQL, и сред программирования, таких как PHP. Сегодня этому действительно нет оправдания.

...
Меня поражает, что веб-разработчики до сих пор не понимают лучших практик в этом вопросе...

Меня поражает тот факт, что веб-разработчики по сей день не понимают передового опыта в этом вопросе и используют конструкции, которые требуют больше ресурсов (из определения пути во время выполнения), менее надежны и в некоторые базы данных делают невозможным оптимизацию запросов, если (как в Oracle) вы не намекаете на хер свой SQL, что просто глупо - если вы можете приложить такие усилия, вы сможете составить правильные планы и связывает.

И ситуация будет только ухудшаться, поскольку все больше и больше кода абстрагируется в (плохо написанные, но популярные) фреймворки, которые увековечивают выполнение определенных действий. глупо, и вы понятия не имеете, что это происходит, пока кто-нибудь не запустит фаззер на одной из ваших страниц и не выяснит, насколько близко все к поломке.

Предотвратить появление ссылок XKCD в комментариях, включив их в статью?

Учитывая этот послужной список, кажется, что реакция на инцидент должна заключаться в том, чтобы исправить это, а затем работать над его устранением как можно быстрее. Множество недостатков SQL-инъекций указывают на фундаментальные проблемы построения всей системы.

Меня поражает тот факт, что веб-разработчики по сей день не понимают передового опыта в этом вопросе и используют конструкции, которые требуют больше ресурсов (из определения пути во время выполнения), менее надежны и в некоторые базы данных делают невозможным оптимизацию запросов, если (как в Oracle) вы не намекаете на хер свой SQL, что просто глупо - если вы можете приложить такие усилия, вы сможете составить правильные планы и связывает.

История

MOVEit был выпущен в 2002 году компанией Standard Networks.[13] В 2006 году компания выпустила интеграцию между MOVEit и антивирусная программа остановить передачу зараженных файлов.[14]

Ipswitch приобрела MOVEit в 2008 году, когда компания приобрела Standard Networks.[15] MOVEit Cloud был анонсирован в 2012 году как облачныйпередача файла программное обеспечение для управления.[16] MOVEit Cloud было первым программным обеспечением корпоративного класса для управляемой облачной передачи файлов. Он масштабируем и может обмениваться файлами между системами, группами или между людьми.[17]

В 2013 году были выпущены клиенты MOVEit для iOS и Андроид платформы. В выпуск включен мастер настройки, а также электронная почта. шифрование.[1][18]

Ipswitch Analytics была выпущена в 2015 году для мониторинга и составления отчетов с помощью программного обеспечения MOVEit. Аналитические данные включают монитор активности и автоматическое создание отчетов. Ipswitch Analytics может получать доступ к данным с серверов передачи файлов и автоматизации MOVEit.[19][20] В том же году был выпущен Ipswitch Failover. Программное обеспечение может вернуться цели точки восстановления (RPO) в секундах с целевым временем восстановления (RTO) менее минуты, что повышает доступность MOVEit.[21]

О, это не только веб-разработчики. Я работал над программами на Java, которые использовали StringBuffer/Builder, и программами на C, которые выполняли snprintf в массивы фиксированного размера для 95% запросов — с одним или двумя параметризованными запросами, разбросанными по те же разработчики. Некоторые люди, похоже, просто зациклены на том, чтобы делать SQL-запросы более сложными, чем необходимо.

Предотвратить появление ссылок XKCD в комментариях, включив их в статью?

Проблема началась, как вы говорите, с PHP, который, по крайней мере, изначально выполнял все операторы SQL встроенными и динамическими. Я вообще не слежу за PHP, предполагаю, что они уже давно позволили все делать правильно.

Даже в MySQL переменные хоста были вещью практически с первой версии (которую я использовал). Если используются переменные хоста, опасность SQL-инъекций отсутствует вообще. Проблема началась, как вы говорите, с PHP, который, по крайней мере, изначально выполнял все операторы SQL встроенными и динамическими. Я вообще не слежу за PHP, предполагаю, что они уже давно позволили все делать правильно.

Это не вина самого SQL, как говорят некоторые. Я использовал базы данных, созданные еще в 1970-х годах, и они всегда обменивались данными с приложениями на хосте. переменные или, по крайней мере, выделенные буферы данных фиксированного размера (например, IMS, хотя это не реляционный). А некоторые СУБД, такие как ныне древняя DB2, имеют отдельные разрешения, позволяющие вообще использовать любую форму динамического SQL (кроме утилит например, DSNTEP2 и DSNTIAUL, хотя я видел, как ими злоупотребляли по-своему), и администратор базы данных сделал бы вам жест, если бы вы попытались это сделать. запрос.

Меня поражает тот факт, что веб-разработчики по сей день не понимают передового опыта в этом вопросе и используют конструкции, которые требуют больше ресурсов (из определения пути во время выполнения), менее надежны и в некоторые базы данных делают невозможным оптимизацию запросов, если (как в Oracle) вы не намекаете на хер свой SQL, что просто глупо - если вы можете приложить такие усилия, вы сможете составить правильные планы и связывает.

И ситуация будет только ухудшаться, поскольку все больше и больше кода абстрагируется в (плохо написанные, но популярные) фреймворки, которые увековечивают выполнение определенных действий. глупо, и вы понятия не имеете, что это происходит, пока кто-нибудь не запустит фаззер на одной из ваших страниц и не выяснит, насколько близко все к поломке.

... видимо мы уже пропатчены...

Ни Schneider Electric, ни Siemens Electric не являются энергетическими компаниями. Оба производят оборудование, используемое энергетическими компаниями, но это только часть их бизнеса.

По моему опыту, инструменты этого типа попадают в одну из двух категорий: (1) Переработанные продукты, требующие большого количества испытаний, надежные, дорогостоящие, сложные в реализации и уродливые в использовании. использовать или (2) продукты, которые со временем создавались на основе ядра, которому уже несколько десятилетий, которое невозможно протестировать и которое изначально едва ли представляло собой прототип, пригодный для демонстрации, но выглядит круто и его легко использовать. настроить.

Модернизация продукта, отнесенного к категории 2, является трудоемким и дорогостоящим мероприятием, а это означает, что это происходит только в том случае, если компания вынуждена.

Однако Шнайдер любит говорить о себе как об «энергетической компании», даже несмотря на то, что они не производят, не распределяют и не продают в розницу значительные объемы энергии. (Наиболее близкими к ним, вероятно, являются их подразделение UPS, APC).

Предотвратить появление ссылок XKCD в комментариях, включив их в статью?

Они также производят инверторы, распределительные трансформаторы и многое другое. Но они не управляют какими-либо предприятиями или предприятиями по производству или распределению энергии, их бизнес заключается в производстве продуктов, которые помогают другим управлять производством и потреблением энергии. (Хотя это такой огромный конгломерат, невозможно сказать, что они не владеют какой-либо частью какой-либо энергетической компании где-то в мире.)

Раньше я работал в одной из бесчисленных компаний, сожранных Шнайдером, но наш бизнес не имел ничего общего с энергетикой.

Даже в MySQL переменные хоста были вещью практически с первой версии (которую я использовал). Если используются переменные хоста, опасность SQL-инъекций отсутствует вообще. Проблема началась, как вы говорите, с PHP, который, по крайней мере, изначально выполнял все операторы SQL встроенными и динамическими. Я вообще не слежу за PHP, предполагаю, что они уже давно позволили все делать правильно.

Это не вина самого SQL, как говорят некоторые. Я использовал базы данных, созданные еще в 1970-х годах, и они всегда обменивались данными с приложениями на хосте. переменные или, по крайней мере, выделенные буферы данных фиксированного размера (например, IMS, хотя это не реляционный). А некоторые СУБД, такие как ныне древняя DB2, имеют отдельные разрешения, позволяющие вообще использовать любую форму динамического SQL (кроме утилит например, DSNTEP2 и DSNTIAUL, хотя я видел, как ими злоупотребляли по-своему), и администратор базы данных сделал бы вам жест, если бы вы попытались это сделать. запрос.

Меня поражает тот факт, что веб-разработчики по сей день не понимают передового опыта в этом вопросе и используют конструкции, которые требуют больше ресурсов (из определения пути во время выполнения), менее надежны и в некоторые базы данных делают невозможным оптимизацию запросов, если (как в Oracle) вы не намекаете на хер свой SQL, что просто глупо - если вы можете приложить такие усилия, вы сможете составить правильные планы и связывает.

И ситуация будет только ухудшаться, поскольку все больше и больше кода абстрагируется в (плохо написанные, но популярные) фреймворки, которые увековечивают выполнение определенных действий. глупо, и вы понятия не имеете, что это происходит, пока кто-нибудь не запустит фаззер на одной из ваших страниц и не выяснит, насколько близко все к поломке.

Исходный интерфейс MySQL в PHP/FI 2.0 и PHP 3->4.0 не позволял использовать подготовленные операторы. Были функции для надлежащего экранирования строк, но вам приходилось делать всю работу самостоятельно (была опция «магических кавычек», которая почти автоматически выполнила эту работу, но она была признана устаревшей и удалена, поскольку ее было недостаточно, и она была создана для плохого кода с ужасными предположения)

В PHP 5 добавлен новый модуль MySQLi (улучшенный MySQL), который поддерживает подготовленные операторы, в PHP 5.5 старый модуль объявлен устаревшим, а с PHP 7 старый модуль MySQL исчез.

У меня двоякое мнение по этому поводу. С одной стороны, да, разработчикам абсолютно необходимо лучше понимать тот факт, что запросы, с которыми они работают, явно нет данные — это код, и с ним нужно обращаться соответственно. Как только вы подойдете к SQL с такого подхода, станет совершенно очевидно, насколько безумно было бы включать в эти запросы несанкционированный пользовательский ввод.

С другой стороны, использование (хороших) фреймворков может помочь разработчикам избежать распространенных ошибок. Что-то вроде создания собственной арифметической логики с датами или криптографии — используйте хорошо зарекомендовавшие себя популярные решения. Если вы обнаружите, что активно боретесь с тем, чего требует от вас библиотека/фреймворк, переоцените то, что вы делаете, потому что в лучшем случае это неэффективно, а в худшем — активно вредно.

Что касается контекста, PHP5 уже давно был в ходу (хотя и широко использовался) более 10 лет назад. Нет оправдания.

...студент, полное имя которого «Роберт»); БРОСИТЬ СТОЛ Студенты;--? (без кавычек).

У меня двоякое мнение по этому поводу. С одной стороны, да, разработчикам абсолютно необходимо лучше понимать тот факт, что запросы, с которыми они работают, явно нет данные — это код, и с ним нужно обращаться соответственно. Как только вы подойдете к SQL с такого подхода, станет совершенно очевидно, насколько безумно было бы включать в эти запросы несанкционированный пользовательский ввод.

С другой стороны, использование (хороших) фреймворков может помочь разработчикам избежать распространенных ошибок. Что-то вроде создания собственной арифметической логики с датами или криптографии — используйте хорошо зарекомендовавшие себя популярные решения. Если вы обнаружите, что активно боретесь с тем, чего требует от вас библиотека/фреймворк, переоцените то, что вы делаете, потому что в лучшем случае это неэффективно, а в худшем — активно вредно.

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

Последнее сообщение в блоге

Вопрос Python/Pandas и сравнение фреймов данных
October 05, 2023

Я не понимаю, что ты пытаешься сделать. Объясните, что такое 7-8 ряд? Насколько новые цены соответствуют 47 тысячам других?Посмотрим, смогу ли я да...

Ищете конкретную проблему 321 Contact с этой программой BASIC.
September 25, 2023

ФорумыОперационные системы и программное обеспечениеСимпозиум программистовИщете конкретную проблему 321 Contact с этой программой BASIC.Вы использ...

Лучшая платформа с низким кодом для нашего варианта использования.
October 06, 2023

Какая среда с низким кодом лучше всего подходит для нашего варианта использования?Данные будут поступать из MS SQL и Postgre, а также из служб REST...