За последние несколько лет в области безопасности приложений был достигнут значительный прогресс. Многие факторы заставляют организации заботиться о безопасности своего программного обеспечения: рост числа инцидентов, произошедших в результате использования небезопасного программного обеспечения; увеличение количества нормативных актов, которые предписывают компаниям заботиться об информационной безопасности, а также растущая зависимость от интернет-ориентированного программного обеспечения.
Организации любого размера и в любом секторе бизнеса и государственного управления сталкивались с утечками данных и связанными с ними потерями. Однако увеличение количества инцидентов в области информационной безопасности также способствует повышению осведомленности, которая помогает организациям и их разработчикам создавать более безопасное программное обеспечение.
Вот где Алиса и Боб вступают в игру.
В книге Тани тема безопасности приложений излагается в ясной и лаконичной форме, что позволяет применять полученные знания сразу, по мере прочтения. Главы изобилуют рассказами об Алисе и Бобе и о том, как принимаемые нами решения по безопасности влияют на жизни реальных людей. Книга начинается с объяснения важности этой темы, а затем излагаются все основные понятия безопасности, о которых мы все, кажется, откуда-то знаем, но никогда до конца не уверены в своих знаниях.
Для всего, начиная с требований безопасности для веб-приложений и заканчивая принципами проектирования безопасности, руководствами по написанию безопасного кода и распространенными «подводными камнями», в этой книге подобрано большое количество историй, примеров с Алисой или Бобом и схем. В ней также рассказывается о тестировании и развертывании программного обеспечения. Однако эта книга определенно не о «хакерстве». Она о том, как обеспечить прочность, надежность и безопасность приложений. В ней описывается, как создать безопасную программу, как обезопасить современные технологии и системы, какие привычки помогут разработчикам (или кому угодно) защитить себя и свои системы, и даже приводится план обучения в конце! Данную книгу, наполненную советами, хитростями и даже шутками, нельзя назвать обычным учебником.
Я надеюсь, она вам понравится так же, как и мне, и вы присоединитесь к нам с Таней в борьбе за правое дело создания безопасного программного обеспечения.
Джим Манико, основатель и преподаватель по написанию безопасного кода в школе Manicode Security
Почему именно безопасность приложений? Зачем нужна эта книга? Почему безопасность важна? Почему данная тема вызывает большие трудности?
Если вы взяли в руки эту книгу, то, вероятно, уже знаете ответ на эти вопросы. Вы видели газетные заголовки о фирмах, которые были «хакнуты»: данные, в том числе личного характера, – украдены, компании и жизни – разрушены. Однако вы, возможно, не знаете, что причиной нарушения безопасности данных номер один является небезопасное программное обеспечение, из-за которого происходит от 26 до 40 % случаев утечек и краж (Verizon Breach Report, 2019). Однако если посмотреть на бюджеты большинства компаний, то сумма, выделяемая на защиту их программного обеспечения, обычно составляет очень малую часть.
Большинство организаций на данный момент обладают высоким уровнем защиты сетевого периметра (с помощью брандмауэров), безопасности предприятия (блокирование вредоносных программ и запрет прав администратора для большинства пользователей) и физической безопасности (пропуск на вход и выход из безопасных зон). Тем не менее создание безопасного программного обеспечения все еще остается труднодостижимой целью для большинства организаций. Почему?
Прямо сейчас университеты и колледжи обучают программированию, но не учат тому, как обеспечить безопасность написанного кода, и даже основам информационной безопасности. Большинство программ послешкольного образования, в которых рассматриваются вопросы безопасности, лишь едва касаются защиты приложений, концентрируясь вместо этого на идентификации, сетевой безопасности и инфраструктуре.
Представьте, что кто-то учился на электрика, но так и не узнал о технике безопасности. Дома периодически бы загорались из-за того, что электрики не знали, как обеспечить безопасность выполняемой ими работы. Позволять студентам, изучающим инженерные науки и информатику, получить высшее образование с недостаточной подготовкой в области безопасности не менее опасно, поскольку они создают программное обеспечение для кардиостимуляторов, для защиты государственной тайны и многого другого, от чего зависит наше общество.
Это одна часть проблемы.
Другая ее часть заключается в том, что обучение (на английском языке) обычно стоит больших денег, что делает его недоступным для многих людей. Также не существует четкого карьерного пути или учебной программы, позволяющей человеку стать разработчиком безопасного кода, архитектором информационной безопасности, специалистом по реагированию на инциденты или инженером по безопасности приложений. Большинство людей в конечном итоге проходят обучение на рабочем месте, а это означает, что каждый из нас имеет совершенно разные представления о том, какие действия необходимо осуществлять, и получает разные результаты.
Следует также учесть, что преступления, совершенные в интернете, приносят большую выгоду, а поскольку провести атрибуцию (выявить того, кто совершил преступление) очень сложно, существует огромное количество угроз для любого интернет-приложения. Чем ценнее система или данные в ней, тем большему числу угроз она подвергается.
Последняя часть проблемы заключается в том, что обеспечить безопасность приложений довольно сложно. В отличие от безопасности инфраструктуры, где все версии Microsoft Windows Server 2008 R2 PS2 абсолютно одинаковы, каждая часть пользовательского программного обеспечения – уникальная снежинка. При строительстве деревянной террасы на заднем дворе вы идете в хозяйственный магазин, чтобы купить древесину размером два на четыре дюйма длиной восемь футов. В какой бы магазин вы ни пошли, древесина будет везде одинаковой, а значит, вы можете делать предположения и расчеты без существенных рисков. С программным обеспечением так не получится. Никогда нельзя делать никаких предположений, нужно проверять каждый факт. Следовательно, запоминание методом «грубой силы», автоматизированные инструменты и другие универсальные решения работают редко, что делает обеспечение безопасности приложений очень сложной задачей.