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

С чего начать?

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

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

Специалист в области безопасности приложений может использовать полученные знания для повторной оценки своей текущей программы безопасности. Каковы ее цели? Они достигаются? Какие новые виды деятельности или инструменты можно добавить в программу? Измерения проводятся регулярно? Если нет, то уже сейчас следует вносить соответствующие изменения. Кроме того, чемпионы по безопасности компании, вероятно, оценят те знания, которыми вы с ними поделитесь.

Если вы надеетесь работать в сфере безопасности приложений, данная книга – первый шаг на этом пути. Чтобы помочь людям понять, какая позиция в нашей сфере интересна им больше всего, и рассказать о соответствующих ей требованиях, я создала постоянный цикл прямых трансляций, проходящих каждый четверг в 18:00 по тихоокеанскому времени на YouTube, под названием «We Hack Purple: Поиск своего места в области информационной безопасности». Все ролики сохраняются на YouTube-канале We Hack Purple. Каждый из них посвящен отдельной позиции. В видео различные специалисты в IТ-области рассказывают о специфике той или иной работы, требуемом образовании и первых шагах.

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

Откуда брать помощь?

В области информационной безопасности есть несколько вариантов действий на тот случай, если вы зашли в тупик.

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

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

Третий шаг – еще больше расширить круг поиска, обратившись к сообществу. Опубликуйте вопрос в Twitter с хештегом #askinfosec или разместите сообщение на LinkedIn, отметив в нем близких друзей. Обратитесь к OWASP, We Hack Purple, DevOpsDays и другим сообществам, которые проводят онлайн-собрания и другие мероприятия по обучению и общению.

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

Заключение

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

Мы, сотрудники службы безопасности, зависим от всех и каждого из вас. Не подведите нас.

Приложение

Ответы

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

Подписывайтесь на рассылку новостей SheHacksPurple, чтобы получать приглашения на обсуждения, которые будут проходить в прямом эфире на сайте newsletter.shehackspurple.ca, а также на YouTube-канал SheHacksPurple, чтобы получить доступ к их записям: youtube.com/shehackspurple.

Глава 1. Основы безопасности

1. Боб установил в настройках Wi-Fi на своем кардиостимуляторе запрет на передачу имени своего Wi-Fi. Как называется эта стратегия обеспечения безопасности?

Безопасность через неясность.

2. Назовите пример значения, которое может быть жестко закодировано, и объясните почему. (Почему программист сделал бы это?)

В свое время, будучи разработчиком, автор книги использовала жестко закодированные строки подключения для dev-, QA- и prod-сред, которые могла переключать при тестировании. Она тогда и понятия не имела, какие проблемы с безопасностью вызвала этим.

3. Является ли капча удобной мерой безопасности? Почему?

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

4. Приведите один пример хорошей реализации удобства и безопасности.

Менеджер паролей 1Password можно использовать в качестве многофакторного аутентификатора. Он генерирует код, который нужно ввести для входа в учетную запись сайта в качестве второго фактора. Как только пользователь вводит свое имя пользователя и пароль, менеджер паролей автоматически копирует сгенерированный код в буфер обмена, который сразу можно вставить в нужное поле. После успешного входа код в буфере обмена будет заменен тем, что было там до него, на случай, если вам это понадобится. Вот пример одновременного обеспечения удобства и безопасности. Использование менеджера паролей делает многофакторную аутентификацию менее трудоемкой, более приятной и менее подверженной ошибкам (и, по мнению автора, справляется с этим довольно успешно). Данное решение обеспечивает высокий уровень безопасности, но в то же время оно очень простое для реализации пользователями.

5. Необходимо ли подтверждать данные, полученные при использовании параметров URL? Почему?

Заменить данные в параметрах URL со стороны пользователя легче легкого, поэтому им нельзя доверять. Если пользователь заходит на сайт без HTTPS, используя сеть кафе, злоумышленнику не составит труда изменить параметры посредством MITM-атаки (Man-In-The-Middle или Manipulator-In-The-Middle). Существует множество ситуаций, способных привести к злонамеренным или даже случайным изменениям входных данных, которые могут представлять опасность для приложения. Необходимо всегда проверять все вводимые пользователем данные.

6. Если сотрудник узнает коммерческую тайну, а затем продаст ее конкуренту, какую часть (или какие части) триады CIA он нарушит?

Конфиденциальность, так как сотрудник наверняка нарушил условия найма, изложенные в подписанных им документах о неразглашении, а также, скорее всего, закон.

7. Вы купили смарт-холодильник и подсоединили его к домашней сети. К нему подключился злоумышленник и в настройках повысил температуру, в результате чего ваше молоко испортилось. Какую часть (или какие части) триады CIA он нарушил?

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

8. Если кто-то взломает ваш умный термостат и отключит отопление, какая часть или какие части триады CIA будут нарушены?

Доступность, потому что в результате взлома вы лишились доступа к теплу. Надеюсь, вы живете не в Оттаве, а если и живете там, то у вас сейчас не февраль!

9. Считается ли инсайдерской угрозой добавленная программистом «пасхалка» (дополнительный код, выполняющий незарегистрированные функции, в качестве «сюрприза» для пользователей, о котором неизвестно руководству и команде безопасности)? Почему?

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

10. Какие меры предосторожности можно предпринять при подключении к общественному Wi-Fi, чтобы обеспечить «глубокую защиту»?

Можно обеспечить посещение веб-сайтов только через HTTPS для шифрования трафика. Можно использовать VPN (виртуальную частную сеть), которая создает «туннель» либо к безопасной сети, либо к рабочей сети (как правило). Можно установить на свой компьютер антивирус или антивирусное ПО. Можно просто использовать сотовую связь, если есть подозрение, что сеть, к которой будет проведено подключение, особенно опасна (например, если пользователь находится в одном из кафе Лас-Вегаса во время проведения Def Con).

11. Если вы живете в квартире с несколькими соседями и у каждого из вас есть ключ от двери, считается ли ключ «фактором аутентификации»?

Нет. Ключ идентифицирует каждого из хозяев ключей как того, кто живет в квартире, но не различает их. Аутентификация должна идентифицировать личность, а не члена группы.

Глава 2. Требования безопасности

1. Назовите два дополнительных возможных требования безопасности для веб-приложения (не упомянутых в списке).

1. Пользователь не может сбросить пароль более одного раза в 24 часа.

2. Каждый API должен подключаться через специально выделенную сервисную учетную запись, которая не предназначена для повсеместного использования.

2. Назовите два дополнительных возможных требования безопасности для операционной системы автомобиля.

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

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

3. Назовите два дополнительных возможных требования безопасности для «умного тостера».

1. Температура тостера не может превышать X градусов. Если температура вышла за пределы разрешенного значения, должно быть выдано предупреждение и приостановлена работа тостера.

2. Чтобы установить в режиме управления тостером такие температурные параметры, которые превышают рекомендованные производителем, требуется пройти второй фактор аутентификации.

4. Назовите два дополнительных возможных требования безопасности для приложения, работающего с кредитными картами.

1. Приложение соответствует стандарту PCI (стандарту безопасности индустрии платежных карт).

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

5. Какое требование безопасности является наиболее важным для вас или вашей организации? Почему?

Я бы выбрала «Не доверяйте никому: проверяйте (а в особых обстоятельствах санируйте) все данные, даже из вашей собственной базы данных». Я твердо убеждена, что, если бы каждое приложение выполняло строгую проверку ввода, это сразу заметно повысило бы уровень безопасности интернета.

6. Если бы вам нужно было убрать одно из упомянутых в этой главе требований из проекта веб-приложения, какое бы это было требование? Почему?

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

Глава 3. Безопасность при проектировании ПО

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

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

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

C. Если данные хранятся в базе данных.

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

Во всех перечисленных случаях.

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

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

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

Лучшим способом обеспечить сохранность секретов (учетных данных, паролей, хешей, строк подключения и т. д.) и безопасный доступ к ним является использование хранилища секретов.

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

Учетные данные (имя пользователя и пароль), строки подключения, пароли, хеши.

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

1. Люди пытаются войти в систему под чужим именем путем перебора учетных данных.

Вероятность: высокая.

Степень опасности: высокая.

Меры по снижению серьезности риска: блокировка доступа после 10 попыток входа.

2. Атаки с подстановкой учетных данных (украденных или взломанных).

Вероятность: высокая.

Степень опасности: критическая.

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

3. Пользователи пытаются создать состояние гонки в целях своего денежного обогащения.

Вероятность: низкая.

Степень опасности: средняя.

Смягчение последствий: тщательное тестирование на предмет наличия состояния гонки и реализация блокировки остатка на счете при переводе денежных средств.

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

1. Сбой операционной системы автомобиля, в результате чего владелец не может им воспользоваться. Угроза доступности.

Вероятность: низкая.

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

2. Операционная система автомобиля заражена вирусом или вредоносным ПО.

Вероятность: низкая.

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

3. Кража GPS и других данных автомобиля. Угроза конфиденциальности.

Вероятность: низкая.

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

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

1. Авторизация.

2. Аутентификация.

3. Контроль доступа.

4. Передача анти-CSRF-токенов.

5. Функции валидации ввода.

Глава 4. Безопасность кода ПО

1. Когда следует использовать собственную идентификацию в сети (пользовательскую учетную запись), а когда – служебную учетную запись? Приведите два примера для каждого из вариантов и объясните их.

Пользовательская учетная запись предназначена для:

1) чтения личной электронной почты;

2) доступа к файлам компании и входа в системы в качестве сотрудника.

Служебная учетная запись предназначена для:

1) доступа к базе данных через веб-приложение;

2) доступа к онлайн-хранилищу через API.

2. Объясните возможные причины, по которым языки C и C++ все еще широко используются в индустрии разработки, когда существует Rust (язык, безопасный для памяти). Постарайтесь дать два или более примера, опишите соответствующие ситуации.

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

2. Найти программистов, пишущих на Rust, может быть сложнее, чем тех, кто пишет на C/C++.

3. Не все слышали о Rust и его преимуществах.

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

3. Какой ваш любимый язык программирования или платформа? Почему?

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

4. Какой язык программирования или платформа, по вашему мнению, являются наиболее безопасными? Почему?

По моему мнению, это. Net, потому что 1) я работала в Microsoft и знаю из первых рук, насколько серьезно эта компания относится к обеспечению безопасности; 2) его сопровождением занимается целая компания (а не отдельные люди на добровольных началах), следовательно, ему уделяется больше времени и внимания и он никогда не будет «заброшен», а также 3) он проприетарный, то есть никто, кроме сотрудников Microsoft, не может работать над ним, в отличие от платформ с открытым исходным кодом. К тому же каждый сотрудник проверяется на благонадежность, а также регулярно проходит тренинги по этике и безопасности, что гарантирует наибольшую надежность. Люди, работающие над проектами с открытым исходным кодом, редко подвергаются такой тщательной проверке, прежде чем получают доступ к коду.

Тем не менее существует множество хороших продуктов с открытым исходным кодом, которые можно использовать.

5. Почему необходимо обеспечивать защиту сессии пользователей?

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

6. Что может сделать злоумышленник, если ему удастся завладеть чужой пользовательской сессией во время входа в систему интернет-банкинга?

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

7. Как бы вы объяснили коллеге, не имеющему технических знаний, разницу между аутентификацией и авторизацией?

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

8. Должны ли руководители высшего звена иметь особые привилегии в сети и других компьютерных системах? Если да, то почему? Если нет, то почему? Какие права вы бы им предоставили?

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

9. Должны ли администраторы сетевой системы иметь особые привилегии в сети и других компьютерных системах? Если да, то почему? Если нет, то почему? Какие права вы бы им предоставили?

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

10. Должны ли сотрудники техподдержки иметь особые привилегии в сети и других компьютерных системах? Если да, то почему? Если нет, то почему? Какие права вы бы им предоставили?

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

11. Ваш начальник говорит, что регистрация и мониторинг будут стоить слишком дорого. Как вы объясните их ценность и важность с точки зрения обеспечения безопасности? Изложите свои доводы в одном абзаце. Не забудьте убедиться в том, что описываете возможные риски для бизнеса понятным для начальника языком (это умный, но не слишком технически подкованный человек). Если вы сформулируете свои мысли чересчур сложно, то не убедите начальника и провалите задание.



Уважаемый______(начальник)!

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



С уважением,

специалист по безопасности.

Глава 5. Часто встречающиеся подводные камни

1. Кто-то из вашей проектной команды хочет принимать сериализованные объекты из ненадежного источника. Вы знаете, что это плохая идея. Как можно эффективно объяснить риск коллеге? Запишите ответ. Объяснение должно быть убедительным и понятным.



Уважаемый______ (сотрудник)!

Я просматривал ваш проектный документ и заметил, что вы собираетесь принимать сериализованные объекты из публичного источника. Это вызвало у меня беспокойство с точки зрения безопасности. Обычно, принимая данные или что-либо еще из публичного источника, мы проверяем и сканируем их, то есть относимся к ним как к особо опасным, пока не доказано обратное. Перед проверкой сериализованных объектов нужно провести их десериализацию, и есть большая вероятность, что какой-нибудь из них содержит в себе атаку, которая может попасть прямо в нашу сеть. Небезопасная десериализация настолько страшна, что включена в список OWASP Топ-10, поэтому относиться к ней нужно крайне серьезно. Мы можем встретиться, чтобы вместе подобрать менее рискованный способ получить нужные вам данные? Я уверен, что мы сумеем найти компромисс, который устроит нас обоих.



С уважением,

специалист по безопасности.



2. OWASP Топ-10 является стандартом обеспечения безопасности: да или нет?

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

3. Назовите три пункта из OWASP Топ-10, которые были упомянуты в книге до главы 5.

Межсайтовый скриптинг, инъекционные атаки и регистрация. (Их больше трех.)

4. Применима ли уязвимость XXE к JSON? Применима ли она к YAML? Если да, почему? Если нет, то почему?

Нет, она применима только к XML. JSON, YAML и даже мой любимый. Net подвержены такой уязвимости, как десериализация.

5. Назовите пример ситуации (не обязательно связанный с компьютером), когда возникает состояние гонки.

В компании Starbucks в рамках программы Bug Bounty выявили классический случай «состояния гонки». Исследователь безопасности Егор Хомаков мог получить неограниченное количество кофе высшего сорта, практически одновременно выполнив несколько переводов с одной подарочной карты на другую. Остаток на счете не «заморозился», поэтому при параллельной проверке баланса оказалось, что деньги с первой карты еще не были сняты. Этот дефект позволил осуществить множество переводов между подарочными картами, несмотря на нулевой баланс на первой карте.

6. Почему мы откатываем незавершенные транзакции? Почему это важно? Приведите пример негативных последствий отказа от отката.

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

Глава 6. Тестирование и развертывание

1. Если бы вы могли выбрать только один вид тестирования для своего приложения, какой бы вы выбрали и почему?

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

2. Как вы думаете, какой вид тестирования будет самым быстрым? Почему?

Модульное тестирование, так как обычно оно автоматизировано и выполняется быстро.

3. Как вы думаете, какой вид тестирования будет самым медленным? Почему?

Тестирование на проникновение, потому что оно подразумевает тщательность проверки.

4. Какие типы уязвимостей вы бы искали при регрессионном тестировании? Назовите как минимум два типа и объясните свой выбор.

Инъекционные атаки, потому что они наиболее опасны, и XSS-атака – из-за ее распространенности.

5. Сеть вашей компании спроектирована с учетом принципа нулевого уровня доверия? Если вы не знаете ответа, ваше домашнее задание – выяснить это.

Только вы можете ответить на этот вопрос.

6. Поддерживает ли ваша компания использование конвейера CI/CD? Если вы не знаете ответа, ваше домашнее задание – выяснить это.

Только вы можете ответить на этот вопрос.

7. Следует ли в среде CI/CD применять инструмент статического тестирования безопасности приложений (SAST) и проводить полное сканирование всего кода при каждой новой сборке? Почему?

Нет! SAST работает очень медленно и дает много ложноположительных результатов. Его можно использовать одним из следующих способов: 1) запустить на совершенно новом коде или 2) запустить вне конвейера, самолично проанализировать результаты его работы, а затем поместить их в баг-трекер. Вместо SAST можно попробовать включить в свой конвейер сканирование на наличие секретов, SCA или пассивную проверку инструментом DAST.

8. Почему очень важно помещать все новые изменения в репозиторий кода?

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

9. Зачем мы тестируем точки интеграции между различными системами? Это лучше, чем полное тестирование каждой системы?

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

10. Почему мы тестируем базы данных, даже если они находятся в закрытом доступе?

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

11. Почему мы тестируем API, даже если они находятся в закрытом доступе? (Возможно, вопрос с подвохом.)

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

12. Когда имеет смысл проводить тестирование на проникновение, а не оценку безопасности системы? Поясните свой ответ.

При ограничении времени или хрупкости системы имеет смысл провести оценку безопасности. Если нужно получить полное подтверждение результатов или привлечь внимание руководства, то лучше выполнить тест на проникновение.

Глава 7. Программа безопасности

1. Назовите одну причину, по которой поддержание реестра приложений в актуальном состоянии важно для любой организации.

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

2. Приведите один пример предупреждения, которое может выдать ваше приложение. Какой тип поведения может вызвать такое предупреждение и почему его нужно расценивать как проблему?

Предупреждение о вызове API, содержащем тег <script>, должно расцениваться как проблема, связанная с обеспечением безопасности, поскольку оно говорит о попытках внедрения постороннего кода в систему.

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

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

4. Что выгоднее: купить инструмент RASP либо WAF (щит для приложения) или потратить эти деньги на обеспечение безопасности кода? Объясните свой выбор.

Обеспечение безопасности кода – это без исключений задача номер один, а WAF или RASP – только дополнительный уровень защиты.

5. Опишите тип инцидента безопасности, при котором понадобится помощь разработчика. Что требуется от разработчика в описанной ситуации?

Разработчик нужен в том случае, если приложение подверглось атаке SQL-инъекции. Он поможет исправить дефект, получить доступ к необходимым журналам и понять, что произошло.

6. Какой один инструмент вы дали бы в помощь своим разработчикам? Объясните свой выбор.

DAST, потому что он прост в использовании и находит все легкие для злоумышленника мишени. В частности, я бы выбрала OWASP Zap, потому что он бесплатный и является отличным инструментом.

7. Какой учебный ресурс вы предоставили бы в помощь своим разработчикам? Объясните свой выбор.

Я бы подарила им эту книгу!;-D

8. В чем разница между SAST и SCA?

SAST анализирует код, написанный командой компании, на предмет проблем безопасности. SCA рассматривает только сторонние компоненты (код, который был написан другими людьми).

9. В чем разница между SAST и DAST?

SAST – это статический анализ кода, а DAST – динамический анализ функционирующего приложения.

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

Только вы можете ответить на этот вопрос.

11. Есть ли препятствия, которые мешают начать первую программу безопасности на вашем текущем месте работы? Если да, то какие? А еще лучше попробуйте придумать, как их можно преодолеть.

Только вы можете ответить на этот вопрос.

Глава 8. Обеспечение безопасности современных систем и приложений

1. Что означает термин «разделяемая ответственность»?

Он означает, что часть ответственности за обеспечение работы облака лежит на клиенте, а часть – на облачном провайдере. Другими словами, речь о том, кто и что должен делать, чтобы предотвратить возникновение каких бы то ни было проблем.

2. В чем разница между инфраструктурой как услугой (IaaS) и платформой как услугой (PaaS)? Какую из них вам придется самостоятельно обновлять и поддерживать?

IaaS – это предоставляемая облачным провайдером виртуальная машина, поддержку работы и исправление ошибок которой осуществляет ее пользователь. PaaS – это предоставляемая облачным провайдером платформа, на которой размещается приложение пользователя и исправлением ошибок которой занимается сам провайдер.

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

Чаще всего онлайн-хранилище всегда «доступно» (CIA), так как размещено в интернете. Однако в случае неправильной настройки онлайн-хранилище проще обнаружить с целью взлома.

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

Риск состоит в том, что внешние ресурсы (например, сотрудники облачного провайдера) будут иметь доступ к находящимся в облаке системам и контроль над ними.

5. В чем разница между контейнером, виртуальной машиной и физическим сервером?

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

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

6. Назовите одно преимущество инфраструктуры как кода.

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

7. Назовите одно преимущество DevOps перед каскадной моделью жизненного цикла разработки системы.

В большинстве случаев выпуск небольших изменений позволяет очень быстро исправить дефект безопасности. Это победа!

8. Какой из современных вариантов инструментария показался вам наиболее интересным? Почему?

Только вы можете ответить на этот вопрос.

9. Какая из современных тактических мер по обеспечению безопасности показалась вам наиболее интересной? Почему?

Только вы можете ответить на этот вопрос.

10. Прочитав эту главу, скажите, чего, на ваш взгляд, не хватает вашей организации. Что и как можно улучшить?

Только вы можете ответить на этот вопрос.

Глава 9. Полезные привычки

1. Какие риски влечет за собой технический долг?

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

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

3. Если для используемого языка программирования выпущено 11 различных версий одной и той же платформы, появляется «нулевой день», и очень сложно понять, какая из этих версий имеет уязвимость.

2. Стоит ли публиковать частную информацию в социальных сетях, если она доступна только друзьям?

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

3. Почему пользователи редко включают многофакторную аутентификацию? С помощью каких трех способов можно повысить частоту ее применения?

Низкие показатели внедрения MFA объясняются тем, что она требует дополнительных действий, и человеческой ленью. Большинство людей не понимают масштабы защиты, предоставляемой MFA, и на какой риск они идут, выкладывая что-либо в интернете.

Уровень внедрения MFA можно повысить:

1) упростив ее реализацию;

2) сделав ее обязательной для использования на рабочем месте;

3) повысив осведомленность людей о ценности MFA и о том, как ее использовать.

4. Каким менеджером паролей вы пользуетесь? (Ответ «никаким» не принимается.)

Я использую 1Password, но лучше использовать любой менеджер паролей, чем никакой вовсе.

5. Какая политика безопасности в вашей компании затрудняет выполнение рабочих обязанностей? Обсуждали ли вы со службой безопасности ее обновление? Можно ли найти компромисс по этому вопросу?

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

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

Откат базы данных или приложения, тестирование планов обеспечения непрерывности бизнеса (BCP) или аварийного восстановления (DR).

Глава 10. Непрерывное обучение

На все вопросы из главы 10 необходимо ответить самостоятельно.

Удачи!
Назад: Как привлечь руководство к обеспечению безопасности?
Дальше: Примечания