- PVSM.RU - https://www.pvsm.ru -
![]()
Предлагаем вашему вниманию Top 10 Proactive Controls for Software developers – 10 аспектов безопасности, на которых должны сосредоточиться разработчики ПО. Данная статья содержит список техник по обеспечению безопасности, обязательных для реализации при разработке каждого нового проекта.
Недостаточно защищенное ПО подрывает безопасность объектов критической инфраструктуры, относящихся, например, к здравоохранению, обороне, энергетике или финансам. Наша глобальная цифровая инфраструктура становится сложнее, количество взаимосвязей между ее компонентами увеличивается, поэтому важность обеспечения безопасности приложений возрастает экспоненциально. Больше нельзя оставлять без должного внимания относительно простые угрозы безопасности.
Open Web Application Security Project (OWASP) – открытый проект обеспечения безопасности web-приложений. Сообщество OWASP включает в себя корпорации, образовательные организации и частных лиц со всего мира. OWASP работает над созданием общедоступных статей, учебных пособий, документации, инструментов и технологий.
На проект OWASP ссылается множество стандартов, инструментов и организаций, включая MITRE, PCI DSS, DISA, FTC и множество других.
Проект «Проактивная защита: Топ-10 требований OWASP» аналогичен проекту OWASP Top-10 [1], но в нем акцент делается на методах и рекомендациях по защите от угроз, а не на самих угрозах. Каждый метод и рекомендация в данном документе связаны с одной или несколькими угрозами из списка OWASP Top-10.
Цель проекта «Проактивная защита: Топ-10 требований OWASP» – привлечение внимания к безопасности приложений путем рассмотрения наиболее важных аспектов ИБ, которые стоит учитывать разработчикам ПО. Мы призываем организации воспользоваться рекомендациями OWASP по проактивной защите и научить разработчиков обращать внимание на безопасность приложений, придавая значение ошибкам, имевшим место в других организациях. Надеемся, что рекомендации OWASP окажутся для вас полезными при создании безопасных приложений.
Документ предназначается прежде всего разработчикам. Однако он будет полезен и руководителям разработки, менеджерам продуктов, специалистам по обеспечению качества, руководителям проектов, а также остальным участникам процесса создания программного обеспечения.
Требования безопасности описывают функции, которые необходимо реализовать для обеспечения определенных параметров безопасности ПО. Они составляются на основе промышленных стандартов, действующих законов и данных об обнаруженных уязвимостях. В требованиях определяются функции, которые нужно разработать или доработать для решения конкретных проблем с безопасностью или устранения потенциальных угроз.
Стандарт подтверждения безопасности приложений OWASP (ASVS) [2] представляет собой каталог доступных требований безопасности и параметров проверки. OWASP ASVS может служить источником расширенных требований безопасности для команд разработчиков.
Требования безопасности объединены в категории на основе общих функций безопасности высшего порядка. Например, ASVS содержит следующие категории: аутентификация, контроль доступа, обработка и журналирование ошибок, а также веб-службы. Для каждой категории существует список параметров, которые рекомендуется проверять.
Процесс успешного применения требований безопасности включает в себя четыре этапа: поиск и выбор, документирование, реализация, подтверждение правильности реализации новых функций безопасности и функциональности приложения.
Безопасные библиотеки и фреймворки со встроенными функциями безопасности помогают разработчикам избежать появления уязвимостей на этапах разработки и реализации. Разработчики, создающие приложение с нуля, могут не иметь достаточных знаний, времени или средств для реализации или поддержания безопасности приложения. Использование безопасных фреймворков позволяет повысить уровень защищенности приложений.
При включении сторонних библиотек или фреймворков в свое ПО необходимо учитывать следующие рекомендации:
Данный раздел посвящен обеспечению безопасного доступа ко всем хранилищам данных, включая реляционные базы данных и базы данных NoSQL.
Одну из наиболее серьезных угроз безопасности приложения представляет внедрение SQL-кода. Этот вид атаки легко осуществим: SQL-код может быть внедрен, если недоверенные входные данные динамически добавляются в SQL-запросы, что обычно происходит путем их присоединения к основной строке. Эксплуатация данной уязвимости может привести к краже, удалению или изменению баз данных. Приложение также может быть использовано для выполнения вредоносных команд в системе, содержащей вашу базу данных, что позволит злоумышленнику закрепиться в сети.
Для предотвращения SQL-внедрений необходимо избегать интерпретации непроверенных входных данных в составе SQL-команд. Наилучшим решением будет использование метода «параметризации запросов». Этот метод необходимо применять к конструкциям SQL и OQL, а также хранимым процедурам.
Примеры параметризации запросов для ASP, ColdFusion, C#, Delphi, .NET, Go, Java, Perl, PHP, PL/SQL, PostgreSQL, Python, R, Ruby и Scheme можно найти на сайте http://bobby-tables.com [5] и в памятке OWASP по параметризации запросов [6].
Кодирование и экранирование являются методами защиты от внедрения кода. Кодирование, которое также называется «кодированием выходных данных», представляет собой преобразование специальных символов в эквивалентные, не опасные для интерпретатора, комбинации. Например, символ < преобразуется в сочетание < при его добавлении на HTML-страницу. Экранирование заключается в добавлении спецсимволов перед символами или строками для предотвращения их некорректной интерпретации, например, добавление символа перед " (двойными кавычками) позволяет интерпретировать их в качестве части текста, а не в качестве обозначения окончания строки.
Кодирование лучше всего применять непосредственно перед передачей данных интерпретатору. Если применить данный метод на слишком раннем этапе обработки запроса, то кодирование или экранирование может сказаться на использовании контента в других частях программы. Например, если перед сохранением в базе данных HTML-контент экранируется, а интерфейс автоматически экранирует эти данные еще раз, то содержимое не будет отображаться корректно из-за двойного экранирования.
Кодирование или экранирование может быть использовано для предотвращения других форм внедрений в контент. Например, можно нейтрализовывать некоторые специальные метасимволы при вводе данных для системных команд. Это называют «экранированием команд ОС», «экранированием shell» и т.п. Подобная защита может быть использована для предотвращения «внедрения команд».
Существуют и другие формы экранирования, которые могут быть использованы для предотвращения внедрений, например, экранирование атрибутов XML, защищающее от различных форм внедрений XML и XML-путей, а также экранирование уникальных имен LDAP, позволяющее предотвратить различные LDAP-внедрения.
Проверка входных данных является частью методики программирования, обеспечивающей попадание в компоненты программы только правильно отформатированных данных.
Приложение должно проверять данные на соответствие синтаксической и семантической норме (именно в этом порядке) перед их использованием (включая отображение пользователю).
Синтаксическая норма означает соответствие данных ожидаемой форме представления. Например, в приложении пользователь может указывать четырехзначный «идентификатор» для выполнения некоторых операций. Злоумышленник может ввести данные, позволяющие ему внедрить SQL-код, поэтому приложение должно проверять, что вводимые данные представляют собой именно цифры и именно в количестве четырех символов (помимо использования соответствующей параметризации запросов).
Семантическая норма означает использование только входных данных, не выходящих за рамки определенной функциональности и контекста. Например, при указании временных рамок дата начала должна предшествовать дате завершения.
Существует два основных подхода к проверке синтаксиса входных данных — проверка по черным и белым спискам.
Первый способ предназначен для поиска в данных «потенциально вредоносного» контента. Например, веб-приложение может блокировать входные данные, содержащие слово SCRIPT, с целью предотвращения межсайтового выполнения сценариев. Однако подобную меру защиты можно обойти, используя для тега script строчные буквы или комбинацию из строчных и прописных букв.
Второй способ предназначен для подтверждения соответствия данных требованиям набора «проверенных» правил. Например, проверка штата США по белому списку будет представлять собой поиск 2-буквенного кода в списке существующих штатов США.
При создании безопасного ПО как минимум рекомендуется использовать белые списки. Черные списки могут содержать ошибки, их можно обойти различными способами, да и сами по себе они могут представлять опасность. Несмотря на возможность обхода ограничений черных списков, они могут быть полезны в обнаружении очевидных атак. Таким образом, белые списки помогают ограничить возможность проведения атаки путем проверки соответствия данных синтаксической и семантической нормам, а черные списки помогают обнаружить и предотвратить очевидные атаки.
Для обеспечения безопасности проверку входных данных необходимо всегда проводить на стороне сервера. Проверки на стороне клиента могут быть полезны с точки зрения функциональности и безопасности, но зачастую их легко обойти. Таким образом, проверка на стороне сервера является более предпочтительной для обеспечения безопасности. Например, проверка JavaScript может предупредить пользователя о том, что поле должно содержать только цифры, а вот приложение на стороне сервера должно подтвердить, что вводимые данные представляют собой числа в допустимом диапазоне значений.
Цифровая идентификация — это уникальное представление пользователя (или любого другого объекта) при онлайн-транзакциях. Аутентификация — это процесс подтверждения того, что человек или сущность является тем, кем представляется. Управление сессиями — это процесс, с помощью которого сервер контролирует состояние аутентификации пользователя, чтобы он мог продолжать пользоваться системой без повторной аутентификации. Специальное издание NIST 800-63B [7]: Руководство по цифровой идентификации (Аутентификация и управление жизненным циклом) содержит подробные рекомендации по реализации требований к цифровой идентификации, аутентификации и управлению сессиями.
Контроль доступа (или авторизация) заключается в разрешении или запрещении специфических запросов, поступающих от пользователей, программ или процессов, а также предполагает выдачу и отзыв подобных привилегий.
Необходимо отметить, что авторизация (подтверждение права доступа к специальным функциям или ресурсам) не равняется аутентификации (подтверждению личности).
Контроль доступа обычно затрагивает многие аспекты работы ПО, в зависимости от сложности системы контроля доступа. Например, управление метаданными контроля доступа или кеширование для целей масштабируемости обычно являются дополнительными компонентами системы контроля доступа, которые необходимо создавать или обслуживать. Существует несколько разных подходов к контролю доступа:
Конфиденциальные данные, такие как пароли, номера кредитных карт, медицинские записи, персональные данные и коммерческие тайны требуют дополнительной защиты, особенно если на них распространяется действие закона о неприкосновенности данных, например, Общего регламента ЕС по защите данных (GDPR), или закона о защите финансовых данных, например, Стандарта безопасности данных в сфере платежных карт (PCI DSS).
Злоумышленники могут похитить данные из веб-приложений и веб-служб множеством разных способов. Например, атакующий может подключиться к общей беспроводной сети и просмотреть или похитить конфиденциальные данные других пользователей, если они передаются через небезопасное интернет-подключение. Также злоумышленник может использовать внедрение SQL-кода, чтобы похитить пароли и другие учетные данные из приложений, а затем выложить их в открытый доступ.
Необходимо классифицировать данные в вашей системе и определить, к какому уровню критичности относится каждый блок данных. Каждая категория данных затем может быть соотнесена с правилами защиты, определяемыми для каждого уровня критичности. Например, публичная маркетинговая информация, не являющаяся конфиденциальной, может быть отнесена к общедоступным данным, которые можно размещать на общедоступном сайте. Номера кредитных карт можно отнести к персональным данным пользователей, которые требуют шифрования при их хранении или передаче.
При передаче конфиденциальных данных через любую сеть необходимо применять сквозную защиту соединений (или шифрование). TLS безоговорочно является самым распространенным и поддерживаемым криптографическим протоколом, обеспечивающим безопасность соединений. Он используется во многих сферах (веб-приложения, веб-службы, мобильные приложения) для безопасной передачи данных по сети. Для обеспечения безопасности соединений TLS необходимо правильно настроить.
Основная польза от протокола TLS — это защита данных веб-приложений от несанкционированного доступа и изменений при их передаче между клиентами (веб-браузерами) и сервером веб-приложения, а также между сервером веб-приложения и внутренним сервером или другими, не относящимися к браузеру, компонентами организации.
Первое правило управления конфиденциальными данными — избегать хранения конфиденциальных данных, когда это возможно. Если сохранять конфиденциальные данные необходимо, то убедитесь в наличии у них криптографической защиты от несанкционированного доступа и изменений.
Криптография является одной из самых передовых областей информационной безопасности, ее понимание требует обширных знаний и опыта. Трудно выбрать какое-то одно единственное решение, поскольку существует множество разных подходов к шифрованию, и каждый из них имеет свои преимущества и недостатки, которые веб-архитекторы и веб-разработчики должны четко понимать. Более того, серьезное криптографическое исследование обычно основывается на высшей математике и теории чисел, что создает высокий входной порог.
Большинство разработчиков уже используют журналирование при отладке и диагностике. Также важно регистрировать события безопасности (данные, связанные с обеспечением безопасности) во время работы приложения. Мониторинг — это «живой» анализ приложения и журналов безопасности с помощью различных средств автоматизации. Такие же инструменты и шаблоны могут применяться к выполняемым операциям, отладке и обеспечению безопасности.
Журналы регистрации событий безопасности могут быть использованы для:
Ниже представлены рекомендации по реализации журналирования событий безопасности.
Используйте журналирование для определения активности, указывающей на вредоносный характер действий пользователя. Потенциально опасная активность, подлежащая регистрации:
Когда приложение обнаруживает подобную активность, оно должно как минимум зарегистрировать это событие и отметить его как опасное. В идеале приложение должно оказать противодействие атаке, например, путем аннулирования сессии пользователя и блокировки его учетной записи. Механизм противодействия позволяет программе реагировать на обнаруживаемые атаки в реальном времени.
Обработка исключений позволяет приложению реагировать на разные ошибки (например, сбой сети или подключения к базе данных) различными способами. Корректная обработка исключений и ошибок просто необходима для обеспечения надежности и безопасности вашего кода.
Ошибки и исключения обрабатываются на всех уровнях приложения, включая критическую бизнес-логику, функции безопасности и фреймворки.
Обработка ошибок также важна с точки зрения обнаружения атак. Некоторые атаки на приложения могут вызывать ошибки, позволяющие обнаружить атаку в процессе ее проведения.
Исследователи из Университета Торонто выяснили, что даже небольшая оплошность при обработке ошибок или их игнорирование может привести к критическим сбоям в работе распределенных систем [9].
Некорректная обработка ошибок может стать причиной различных уязвимостей.
Данный документ необходимо рассматривать как отправную точку, а не как исчерпывающий набор методов и практик. Мы еще раз хотим отметить, что представленные материалы предназначены для ознакомления с основами разработки безопасного программного обеспечения.
При создании программы обеспечения безопасности приложений рекомендуется выполнить следующие шаги:
Автор: Лука Сафонов
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/309151
Ссылки в тексте:
[1] OWASP Top-10: https://www.owasp.org/images/9/96/OWASP_Top_10-2017-ru.pdf
[2] Стандарт подтверждения безопасности приложений OWASP (ASVS): https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project
[3] Проверки зависимостей OWASP: https://www.owasp.org/index.php/OWASP_Dependency_Check
[4] Retire.JS: https://retirejs.github.io/retire.js/
[5] http://bobby-tables.com: http://bobby-tables.com/
[6] памятке OWASP по параметризации запросов: https://www.owasp.org/index.php/Query_Parameterization_Cheat_Sheet
[7] NIST 800-63B: https://pages.nist.gov/800-63-3/sp800-63b.html
[8] здесь: https://www.owasp.org/index.php/AppSensor_DetectionPoints
[9] критическим сбоям в работе распределенных систем: https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf
[10] централизованно: https://www.owasp.org/index.php/Error_Handling#Centralised_exception_handling_.28Struts_Example.29
[11] Топ-10 OWASP: https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
[12] Топ-10 OWASP (мобильные устройства): https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_10_Mobile_Risks
[13] Стандарта подтверждения безопасности мобильных приложений OWASP (MASVS): https://github.com/OWASP/owasp-masvs
[14] OWASP OpenSAMM: https://www.owasp.org/index.php/OWASP_SAMM_Project
[15] Полная версия : https://owasp-top-10-proactive-controls-2018.readthedocs.io/ru/latest/index.html
[16] оригинал: https://owasp-top-10-proactive-controls-2018.readthedocs.io/en/latest/index.html
[17] JZDLin: https://github.com/JZDLin
[18] Алексей Скачков: https://github.com/hamster4n
[19] Иван Кочуркин: https://github.com/KvanTTT
[20] Тарас Иващенко: https://www.owasp.org/index.php/User:Taras_Ivashchenko
[21] российского отделениия консорциума OWASP: https://www.owasp.org/index.php/Russia
[22] Источник: https://habr.com/ru/post/440202/?utm_source=habrahabr&utm_medium=rss&utm_campaign=440202
Нажмите здесь для печати.