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

Сдвиг влево

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

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



Рис. 3.4. Сдвиг влево





Концепции проектирования безопасного ПО

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

Защита конфиденциальных данных

В главе 2 «Требования безопасности» мы уже определили, что все создаваемые, собираемые, сохраняемые и обрабатываемые приложением данные должны классифицироваться и маркироваться. Замечательно, а что теперь?

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

ПРИМЕЧАНИЕ. «Несекретные» – это не конфиденциальные по своей природе данные. «Общедоступные» данные могут быть опубликованы для общественности (им присвоен такой уровень чувствительности, согласно которому их могут увидеть все).

ВНИМАНИЕ. Если данные в приложении содержат государственную тайну, необходимо следовать правилам, установленным правительством, а не данному руководству.

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

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

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

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

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

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

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

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

По возможности следует установить оповещения об обнаружении утечки похожих на ваши данных в интернет. Вы же не хотите узнать такую информацию, прочитав газету, а хотите получить ее раньше, чем СМИ. Можно настроить такие оповещения вручную или воспользоваться услугами, предлагаемыми поставщиками систем безопасности. Будет полезно настроить оповещения в различных социальных сетях, поисковых системах и платформах обмена данными по ключевым словам (что приведет к ложным срабатываниям, поэтому будьте готовы к определенному «шуму»). Некоторые правительственные организации помогают компаниям – резидентам своих стран отследить утечки. Узнайте у своего правительства, какие виды услуг или помощи они могут предложить. В Канаде эта группа называется Канадский центр кибербезопасности (CCCS, англ. Canadian Center for Cyber Security) (cyber.gc.ca), ранее известный как Канадский центр реагирования на киберинциденты (CCIRC).

В других странах действуют:

• Люксембург: www.circl.lu ;

• Япония: www.jpcert.or.jp/english/at/2020.html ;

• Великобритания (Отчет об угрозах): www.ncsc.gov.uk ;

• Соединенные Штаты Америки: www.us-cert.gov/ncas/alerts ;

• Новая Зеландия (Оповещения): www.cert.govt.nz/it-specialists .

Узнать о предложениях вашего правительства можно с помощью местного центра реагирования на киберинциденты (CIRT, англ. Cyber Incident Response Team).

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

Назад: Глава 3. Безопасность при проектировании ПО
Дальше: «Никогда не доверяй, всегда проверяй» и «Предполагать взлом»