Литмир - Электронная Библиотека
A
A

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

Джим Манико, основатель и преподаватель по написанию безопасного кода в школе Manicode Security

Введение

Почему именно безопасность приложений? Зачем нужна эта книга? Почему безопасность важна? Почему данная тема вызывает большие трудности?

Если вы взяли в руки эту книгу, то, вероятно, уже знаете ответ на эти вопросы. Вы видели газетные заголовки о фирмах, которые были «хакнуты»: данные, в том числе личного характера, – украдены, компании и жизни – разрушены. Однако вы, возможно, не знаете, что причиной нарушения безопасности данных номер один является небезопасное программное обеспечение, из-за которого происходит от 26 до 40 % случаев утечек и краж (Verizon Breach Report, 2019)[1]. Однако если посмотреть на бюджеты большинства компаний, то сумма, выделяемая на защиту их программного обеспечения, обычно составляет очень малую часть.

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

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

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

Это одна часть проблемы.

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

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

Последняя часть проблемы заключается в том, что обеспечить безопасность приложений довольно сложно. В отличие от безопасности инфраструктуры, где все версии Microsoft Windows Server 2008 R2 PS2 абсолютно одинаковы, каждая часть пользовательского программного обеспечения – уникальная снежинка. При строительстве деревянной террасы на заднем дворе вы идете в хозяйственный магазин, чтобы купить древесину размером два на четыре дюйма длиной восемь футов. В какой бы магазин вы ни пошли, древесина будет везде одинаковой, а значит, вы можете делать предположения и расчеты без существенных рисков. С программным обеспечением так не получится. Никогда нельзя делать никаких предположений, нужно проверять каждый факт. Следовательно, запоминание методом «грубой силы», автоматизированные инструменты и другие универсальные решения работают редко, что делает обеспечение безопасности приложений очень сложной задачей.

Сдвиг влево

Если посмотреть на жизненный цикл разработки системы (англ. System Development Life Cycle, SDLС) на рис. В.1, можно увидеть, что все этапы сменяют друг друга слева направо. Требования предшествуют проектированию, за которым идет кодирование. Независимо от того, используете ли вы Agile, Waterfall, DevOps или любую другую методологию разработки программного обеспечения, всегда нужно узнать, какое ПО вы создаете (требования), составить план (проектирование), разработать его (кодирование), проверить, что оно выполняет все необходимые функции и ничего больше (тестирование), затем выпустить готовое ПО и поддерживать его работу (релиз).

Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков - i_001.png

Рис. В.1. Жизненный цикл разработки системы

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

Позвольте мне объяснить мою мысль по-другому. Представьте, что Алиса и Боб строят дом. Они копили на него годами, и вот подрядчики завершают работу: клеят обои и прикручивают ручки на шкафчики. Вдруг Алиса поворачивается к Бобу и говорит: «Дорогой, у нас двое детей, а ванная комната только одна! Как мы станем делить ее?» Если сказать подрядчикам прекратить работу, дом не будет закончен вовремя. Если попросить пристроить вторую ванную комнату, где она должна находиться? Сколько это будет стоить? Обнаружение проблемы на столь поздней стадии проекта может привести к катастрофе. Однако если бы Алиса и Боб узнали о ней на этапе разработки требований или на этапе проектирования, то можно было бы легко добавить больше ванных комнат за очень небольшие деньги. То же самое справедливо и для решения проблем безопасности.

Именно здесь вступает в игру «сдвиг влево»: чем раньше вы начнете заниматься обеспечением безопасности во время проекта по разработке программного обеспечения, тем лучше будут результаты. Стрелки на рис. В.2 показывают последовательность действий по обеспечению безопасности, которые следует начинать как можно раньше в проекте. Позже мы обсудим, что это за действия.

Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков - i_002.png

Рис. В.2. Сдвиг влево

О книге

Эта книга научит вас основам безопасности приложений (сокращенно AppSec, от англ. Application Security), то есть тому, как создавать безопасное программное обеспечение. Она предназначена для разработчиков, специалистов по информационной безопасности, желающих узнать больше о безопасности программного обеспечения, и всех, кто хочет работать в этой области (которая включает в себя тестирование на проникновение, также известное как «этический взлом»).

Если вы разработчик, ваша работа заключается в создании наиболее безопасного программного обеспечения, которое вы способны сделать. Вашу ответственность здесь нельзя недооценивать. На каждого инженера безопасности в этой области приходятся сотни программистов, и без вас им не справиться. Эта книга – первый шаг на правильном пути: после ее прочтения вы будете иметь достаточно знаний для создания безопасного программного обеспечения, а также знать, где искать ответы в случаях, вызывающих затруднения.

вернуться

1

Отчет о нарушениях данных за 2016, 2017, 2018 годы.

2
{"b":"834884","o":1}