Создается впечатление, что работоспособность программных продуктов не является для индустрии необходимостью. Тем не менее, предприятия продолжают вкладывать в ПО огромные деньги.
Можно ли чувствовать себя защищенным, если используешь небезопасное программное обеспечение
Попробуйте представить себе, что компьютерная программа — это офисное здание. Его строят не архитекторы, а сотни плотников, электриков и водопроводчиков. И при этом строители не копируют что-то, а творят с чистого листа. Снаружи, скорее всего, это здание будет выглядеть привлекательно, зато внутри наверняка проявится масса проблем. Лифты станут часто ломаться. Воришки будут пролезать через вентиляционные отверстия, которые волею случая выходят на улицу на уровне первого этажа и никак не закрываются. К сотрудникам фирм, которые снимут здесь офисные помещения, придется приставлять проводников, чтобы те не заплутали. Кое-кто неожиданно обнаружит, что дверь в кабинет не запирается. Строители, безусловно, сразу пообещают в ближайшее время все починить, вышлют комплект инструментов и стройматериалов для ускорения починки особенно важных узлов и сообщат, что уж в следующем небоскребе, который они собираются возвести, таких дурацких проблем не будет. В любом случае организациям придется арендовать там офисы — выбора-то нет.
И что самое странное — все без исключения арендаторы будут довольны. Они привыкли к непрерывным исправлениям и доработкам. Ремонт стал частью их жизни. А если спросить кого-нибудь из них, зачем терпеть все эти мучения, они удивленно пожмут плечами и скажут, что ведь по-другому не бывает. Потому как здания несовершенны.
В этом, собственно, и состоит абсурдность происходящего. Вся индустрия по производству программного обеспечения функционирует в каком-то непонятном порядке. Создается впечатление, что работоспособность программных продуктов не является для индустрии необходимостью. Производители с легкостью выпускают на рынок программу, находящуюся на стадии бета-тестирования. А тестировщиками работаем мы с вами. И такой порядок вещей входит в нашу жизнь, мешая нам нормально работать. Гай Кавасаки в своей книге «Правила для революционеров» (Guy Kawasaki. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services, 2000) советует не надрываться. Он утверждает: «Сначала создайте и выпустите на рынок нечто и лишь потом пытайтесь сделать свое детище по-настоящему работоспособным». В первом «Макинтоше» образца 1984 года было огромное количество ошибок и недоработок. Но лежавшие в его основе решения несмотря на огромные изъяны действительно были революционными, поэтому после устранения недостатков он начал работать просто блестяще.
Лишь одна вещь шокирует еще больше, чем правило Кавасаки, противоречащее «нормальным» законам рынка. Как это ни удивительно, руководители компаний вкладывают миллиарды в незавершенные и несовершенные программные продукты — в революционные, но не обязательно хорошие системы. И если такая программа работает неправильно или попросту «падает» либо какой-нибудь злоумышленник с легкостью в нее проникает, то во всех смертных грехах обвиняют кого угодно, но только не разработчиков и продавцов.
«Мы создали культуру, в которой программное обеспечение не обязано хорошо работать, в которой бета-тестирование всех новинок перекладывается на покупателей, — признает Стив Кросс, директор Института инженерии программного обеспечения Университета Карнеги - Меллона. — Получается, что мы не требуем от новинок компьютерного рынка того же, что и от новинок бытовой техники. Мы одинаково платим деньги, покупая и Windows, и новенький тостер. Но если Windows ?падает?, то это в порядке вещей, если же перестает работать тостер, мы тут же бежим в магазин жаловаться».
«Безопасность приложения» — до недавнего времени это звучало как оксюморон. Но постепенно все начинает меняться.
Сегодня мы пытаемся создать мир, в котором не принято пользоваться незавершенными программными продуктами. Мир, в котором слова «а что делать, так было всегда» забудутся. Начнется новая эра компьютерных программ. Руководители будут думать, что программное обеспечение может и обязано стать лучше, что необходимо сделать решительный шаг в направлении увеличения стабильности и безопасности. Их станет волновать вопрос: почему программы небезопасны и как с этим бороться?
Фактически за безопасность программного обеспечения борются давно. Его защищенность увеличивается с каждым днем. Разрабатываются все более совершенные и многоуровневые «редуты». Специалисты настаивают: «Можете не беспокоиться, уже совсем немного осталось, и проблему безопасности решат».
И даже Кавасаки, похоже, начинает изменять свою точку зрения. Он признает, что безопасность — это мигрень, которую просто необходимо лечить: «Не надо рассказывать, как сделать мой сайт ?круче?, лучше расскажите, как сделать его безопасней».
Лозунг «Не надо надрываться, получилось криво — и ладно» теперь превращается в девиз «Не делайте кривых программных продуктов». Программы, которые «не падают»! Действительно, революционно новая концепция.
Почему программы небезопасны?
Прежде приложения не обладали достаточной защищенностью, потому что они не нуждались в защите. Крис Висопал, директор по технологиям консалтинговой компании @Stake, специализирующейся на проблемах безопасности, утверждает, что, получив университетский диплом по компьютерным наукам, он так ничего и не узнал о безопасности: «Изолированность программ — вот в чем была их защита».
Перед кодировщиками стояли две задачи: реализовать максимум возможностей и успеть к данному сроку. Проще говоря, требовалось, чтобы программа работала и чтобы это произошло как можно быстрее.
Появление сетей изменило положение коренным образом. Люди, находившиеся в тысячах километров, получили возможность взломать вашу сеть, пробравшись к вашим корпоративным ресурсам, и уйти незамеченными. Но появление соединений между компьютерами повлекло за собой увеличение потребностей в программах разного рода. Разработчики стали бороться за увеличение способностей своих детищ. И уж конечно, чем быстрее они придумывали что-то новенькое, тем больше денег это им приносило. У программ появилось огромное количество в основном невостребованных функций.
Сегодня наличие определенной функции обозначает, что программа может сделать нечто, но вовсе не исключает того, что она не может делать еще чего-либо. Скажем, возможность прикрепить файл к письму электронной почты — это очередная функция. Но именно она помогает вирусам распространяться по всему свету. Таким образом, у возможности прикрепления файла имеется нежелательное последствие. И чем больше функций, тем больше таких последствий.
К 1996 году сеть Internet, объединявшая около 16 млн. узлов, была абсолютно незащищена. Хакеры, сидя дома за компьютером, с легкостью могли взломать что им вздумается — серверы НАСА, Пентагона или мексиканского Минфина. Проблема заключалась в том, что, пока мир изменялся, программное обеспечение стояло на месте. Вместо того чтобы заниматься безопасностью приложений, разработчики зациклились на наращивании количества их функций.
И даже теперь немногое изменилось. Разработчики по-прежнему не торопятся улучшить безопасность своих программ. Конечно же, они пытаются уделить некоторое количество времени этому важнейшему аспекту, но в итоге защиты как таковой нет. Кроме того, бессмысленно пытаться защитить отдельные приложения, если они базируются на незащищенных операционных системах. Навешиваемые сверху средства защиты не повышают безопасность приложений. Стоит один раз взломать на входе нечто напоминающее систему защиты, и можно безнаказанно копаться по всему предприятию, изменяя все, что угодно.
Другими словами, теперь разработчики закрывают дверь на замок, но не слишком заботятся об окнах. Вместо того чтобы придумать безопасные сетевые протоколы, они возводят межсетевые экраны. Они направляют свои усилия не на создание почтовой программы, которая отслеживала и уничтожала бы вирусы, а на разработку специализированной антивирусной программы.
Когда в 2000 году атаки через Internet стали массовыми, программы обеспечения безопасности казались реальным спасением; на их создание не жалели средств. Но количество и эффективность нападений все увеличивалась, и программная защита постепенно стала терять былую привлекательность. Пришлось в срочном порядке искать новые инструменты, которые бы боролись с непрерывными атаками. Отношение к безопасности и сохранности информации в корне изменилось.
Новые исследования продемонстрировали производителям и пользователям экономическую эффективность инвестирования в создание более защищенного кода. Наряду с этим появились более совершенные программные инструменты для автоматического выявления наиболее опасных недостатков в программах.
В итоге после долгих лет следования старым принципам продавцы и разработчики наконец поняли: создавать изначально «дырявые» программы просто невыгодно, так как потом придется искать деньги на латание этих дыр все более совершенными защитными слоями. И если на рынок попадает незавершенный программный продукт, в котором находят бреши, то создатели тотчас бросают все свои силы на его доработку. Так что теперь можно надеяться — новая версия программного продукта будет и вправду полноценным продуктом.
Scott Berinato. Feeling secure about insecure software. Darwin, December 2002.