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

  • Будь плохим парнем
  • Ошибка безопасности
  • Практикуйте программный минимализм

Небольшое изменение в мышлении может привести к кардинальным изменениям в безопасности. Давайте рассмотрим, как.

Давайте будем плохими парнями

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

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

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

Просматривая информацию, спросите: «Как я могу использовать эту информацию, чтобы получить доступ к более важной информации?» При рассмотрении пользовательской истории спросите: «Что произойдет, если я сделаю что-то неожиданное?»

Во всем направляйте своего внутреннего четырехлетнего ребенка. Нажмите все кнопки.

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

Ошибка безопасности

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

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

Разрешения

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

Автоматизация

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

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

Обработка исключений

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

Программный минимализм

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

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

Немногие отрасли, кроме технологий, производят столько аббревиатур. Такие философии, как «Не повторяйся» (DRY), «Будь проще, глупее» (KISS), «Вам это не понадобится» (YAGNI) и множество других методологий, основаны на одном очень простом принципе: минимализме. Это принцип, который гарантирует включение во все аспекты приложения.

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

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

Бонус: ваш личный Йода

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

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

Я надеюсь, что вы найдете эти системы мышления полезными! Если вы тоже заинтересуетесь, вы можете прочитать больше моих статей о кибербезопасности на Victoria.dev.