Книга: Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков
Назад: Защита исходного кода
Дальше: Пример 1

Упражнения

• Когда следует шифровать данные? Выберите все подходящие варианты.

– Когда один API отправляет данные другому API.

– Когда данные расположены на выключенной виртуальной машине.

– Когда данные хранятся в базе данных.

– При отправке данных с сервера в браузер.

• Какими способами можно обеспечить безопасность используемых компонентов от сторонних производителей? Как минимизировать риск в этой области?

• Где необходимо хранить секреты приложения? Каким образом приложение должно получать доступ к ним?

• Назовите три типа «секретов».

• С какими угрозами может столкнуться мобильное приложение банка? Назовите три угрозы и оцените вероятность их возникновения и степень опасности (низкая, средняя или высокая).

• Назовите три возможные угрозы для «умного» автомобиля. Оцените вероятность их возникновения (низкая, средняя или высокая) и уровень потенциального ущерба.

• Назовите пять различных типов функциональности для обеспечения безопасности, которые может предоставить современная платформа.

Глава 4

Безопасность кода ПО

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

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

Выбор используемой платформы и языка программирования

Довольно часто приходится работать в обстоятельствах, когда язык программирования и платформа уже выбраны за нас. Мы используем Dot Net Shop или Java Shop, и вряд ли в ближайшем будущем произойдут какие-нибудь радикальные изменения. Вместе с тем, возможно, у вас больше гибкости и влияния, чем вам кажется. Давайте посмотрим, что Алиса и Боб скажут по этому поводу.

Алиса не технарь, но она является руководителем высокого уровня. Когда ее IТ-отдел объявил о желании постепенно перевести все свои приложения с Java Struts на Spring Framework for Java, она сразу же спросила: «Почему? Сколько это будет стоить?» Управление компании заботится о конечном результате, но IТ-отдел был готов к подобным вопросам, ведь такую идею уже озвучили предыдущему руководителю, и он ее не принял, потому что не получил внятных ответов.

Руководитель IТ-отдела представил Алисе целую презентацию об окупаемости инвестиций (ROI, от англ. return on investment) в это решение и план безопасной миграции в течение 18 месяцев.

ПРИМЕЧАНИЕ. Struts и Spring – это две популярные платформы для языка программирования Java.

«Нулевым днем» называют найденную уязвимость в продукте или компоненте программного обеспечения, для которой в настоящее время нет доступного исправления от поставщика ПО.

Сначала IТ-менеджер рассказал, что в 2016 году в фреймворке Struts были обнаружены три серьезные уязвимости нулевого дня различного характера, которые очень дорого обошлись компании. Одна из них стала причиной крупного инцидента безопасности, который стоил более $250 000 и сильно ударил по репутации. Решение данной проблемы потребовало большого количества времени: в течение нескольких недель ресурсы проекта перенаправлялись на наведение порядка в системе. Инцидент негативно повлиял и на клиентов, которые почти на неделю остались без доступа к сайту, пока команда по ликвидации последствий оценивала ущерб. Две другие уязвимости Struts не привели к нарушению системы или какому-либо другому типу инцидента безопасности. Тем не менее расследование и создание новых пользовательских сигнатур для брандмауэра веб-приложения (Web Application Firewall, сокращенно – WAF) обошлись в круглую сумму, а работу над другими проектами снова пришлось отложить. Согласно подсчетам, только в 2016 году Struts принес компании убытки в размере не менее миллиона долларов и подорвал доверие клиентов к бренду. IТ-менеджер затруднился подсчитать стоимость репутационного ущерба.

Все три уязвимости были связаны именно с фреймворком Struts, а не с языком Java. После тщательного анализа других вариантов IТ-отдел решил, что Spring лучше функционирует, более безопасен и современен, чем Struts, поэтому перевести на него 100 % своих приложений будет выгодно с финансовой точки зрения.

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

План обойдется в $550 000, но, по оценкам, окупится в первый год после внедрения за счет снижения количества инцидентов и событий, связанных с безопасностью. Данный переход представляет собой отличную инвестицию, которая позволит значительно сократить технический долг.

Что Алиса могла ответить на все эти исследования и наглядные аргументы? Она одобрила проект сразу же.

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

Назад: Защита исходного кода
Дальше: Пример 1