Безопасность приложения ( англ. Application Security ) включает в себя меры, принимаемые для повышения безопасности приложения, часто путем обнаружения, исправления и предотвращения уязвимостей в безопасности. Для выявления уязвимостей на разных этапах жизненного цикла приложений, таких как проектирование, разработка, развертывание, обновление, обслуживание, используются различные методы. В основном в программах наблюдается рост количества разного рода дефектов и уязвимостей, которые со временем могут нанести существенный вред программному обеспечению.
Различные методы позволяют находить различные классы уязвимостей безопасности в приложении и наиболее эффективны на определенных этапах жизненного цикла программного обеспечения.
Правильное использование этих методов для обеспечения максимальной безопасности в течение всего жизненного цикла разработки программного обеспечения является задачей команды, занимающейся вопросами безопасности.
В соответствии с шаблонами и опытом, описываемыми в книге «Improving Web Application Security», ниже приведены классы распространенных угроз / атак безопасности приложений:
Категория | Угрозы / Атаки |
---|---|
Проверка Ввода | Переполнение буфера; межсайтовый скриптинг; внедрение SQL-кода; стандартизация (канонизация) |
Фальсификация программного обеспечения | Злоумышленник изменяет поведение приложения для выполнения несанкционированных действий, путем бинарного исправления, замены кода или его расширения |
Аутентификация | Прослушивание сети; атака «грубой силой»; перебор по словарю; воспроизведение файлов cookie; кража учетных данных |
Авторизация | Повышение привилегий; раскрытие конфиденциальных данных; подделка данных |
Управление конфигурацией | Несанкционированный доступ к интерфейсам администрирования; несанкционированный доступ к файлам настроек; поиск текстовых данных конфигурации; чрезмерно привилегированные процессы и службы |
Конфиденциальная информация | Доступ к чувствительному коду или данным в хранилище; подслушивание сети; внедрение вредоносного кода / данных |
Управление сеансом | Похищение сеанса; атака повторного воспроизведения; атака «человек посередине» |
Криптография | Генерация не криптографически стойких ключей или плохое управление ключами; слабое или нестандартное шифрование |
Манипуляция параметрами | Манипулирование строкой запроса, полем формы; манипуляции с файлами cookie; манипулирование заголовком HTTP |
Управление исключениями | Раскрытие информации; отказ в обслуживании (DoS) |
Аудит и вход в систему | Пользователь запрещает выполнение операции; злоумышленник использует приложение без следа; злоумышленник скрывает свои следы |
Сообщество OWASP опубликовало список 10 самых уязвимых мест веб-приложений и описывает лучшие методы обеспечения безопасности для организаций, стремясь создать открытые стандарты для отрасли.[1] Основные угрозы безопасности приложений по состоянию на 2017 год:[2]
Категория | Угрозы / Атаки |
---|---|
Внедрение | Внедрение SQL-кода; NoSQL; внедрение команд ОС; объектно-реляционное отображение (ORM); LDAP injection |
Взлом аутентификации | Атаки с использованием учетных данных (утечки / взломы баз данных); атака «грубой силой»; слабый пароль |
Воздействие на чувствительные данные | Слабая криптография; отсутствие шифрования |
Внешний объект XML | Атака внешнего объекта XML |
Взлом контроля доступа | Неправильная конфигурация CORS; принудительный просмотр; повышение привилегий |
Неправильная настройка безопасности | Неисправленные недостатки; невозможность установить значения параметров безопасности в настройках; устаревшее или уязвимое программное обеспечение |
Межсайтовый скриптинг (XSS) | Отражённые (Непостоянные); Хранимые (Постоянные); DOM-модели |
Небезопасная десериализация | Изменение объектов и структур данных; подделка данных |
Использование компонентов с известными уязвимостями | Устаревшее программное обеспечение; не обнаруженные уязвимости; неспособность исправить базовые фреймворки |
Недостаточное логирование и мониторинг | Неспособность зарегистрировать проверяемые события; невозможность генерировать понятные сообщения журнала: неуместные предупреждения; неспособность обнаружить или предупредить об активных атаках в режиме реального времени |
Ожидается, что в будущем доля мобильных устройств, предоставляющих функциональные возможности открытой платформы, будет продолжать расти. Открытость этих платформ дает значительные возможности для всех частей мобильной экосистемы, благодаря возможности гибкого предоставления программ и услуг - опций, которые могут быть установлены, удалены или обновленные множество раз согласно потребностям и требованиям пользователя. Однако с открытостью появляется и неограниченный доступ к мобильным ресурсам и API-интерфейсам приложениями неизвестного или ненадежного происхождения, что может привести к причинению вреда пользователю, устройству, сети или всего вместе взятого, если не используются соответствующие архитектуры безопасности и сетевые меры предосторожности. Безопасность приложения обеспечивается в той или иной форме на большинстве мобильных устройств с открытой ОС (Symbian OS,[3] Microsoft, BREW, и т.д.). В 2017 году Google расширил свою программу вознаграждений за найденные уязвимости, чтобы охватить уязвимости, обнаруженные в приложениях, разработанных третьими лицами и доступных через Google Play Store.[4] Промышленные группы также разработали рекомендации, включая Ассоциацию GSM и Open Mobile Terminal Platform (OMTP).[5]
Существует несколько стратегий повышения безопасности мобильных приложений:
Методы тестирования безопасности выявляют уязвимости или дыры в безопасности приложений. Эти уязвимости оставляют приложения открытыми для эксплойта. В идеале тестирование безопасности должно осуществляться на протяжении всего жизненного цикла разработки программного обеспечения, чтобы уязвимости можно было своевременно и тщательно устранять. К сожалению, тестирование часто проводится в конце цикла разработки. С ростом популярности DevOps и Continuous delivery (непрерывная доставка) как моделей разработки и развертывания программного обеспечения,[6] модели непрерывного обеспечения безопасности становятся все более популярными.[7]
Сканеры уязвимостей и, более конкретно, сканеры веб-приложений, также известные как инструменты тестирования на проникновение (например, инструменты этичного хакера), исторически использовались организациями и консультантами по безопасности для автоматизации тестирования безопасности запросов / ответов HTTP; тем не менее, это не заменяет необходимость фактической проверки исходного кода. Проверка исходного кода приложения может выполняться вручную или в автоматическом режиме. Учитывая общий размер отдельных программ (часто 500 000 строк кода или более), человек не может выполнить всесторонний анализ данных, необходимый для полной проверки всех возможных уязвимостей вручную. Для этого используются автоматизированные инструменты анализа исходного кода с последующей фильтрацией и анализом результатов.
Существует много разновидностей автоматизированных инструментов для выявления уязвимостей в приложениях. Некоторые из них требуют большого опыта проведения экспертизы безопасности, а другие предназначены для полностью автоматизированного использования. Результаты зависят от типов информации (исходные файлы, двоичные файлы, трафик HTTP, конфигурации, библиотеки, соединения), предоставленных анализатору, качества анализа и охваченных уязвимостей. Общие технологии, используемые для выявления уязвимостей приложений, включают в себя:
Статическое тестирование безопасности приложений (SAST) - это технология, которая часто используется в качестве инструмента анализа исходного кода. Метод анализирует исходный код на наличие уязвимостей перед запуском приложения. Этот метод дает меньше ложноположительных результатов, но для большинства реализаций требуются доступ к исходному коду приложения[8], экспертная конфигурация и большие вычислительные мощности.
Динамическое тестирование безопасности приложений (DAST) - это технология, которая способна находить видимые уязвимости путем подачи URL-адреса в автоматический сканер. Этот метод легко масштабируется, легко интегрируется и быстр. Недостатки DAST заключаются в необходимости экспертной конфигурации и высокой вероятности ложного срабатывания.[8]
Интерактивное тестирование безопасности приложений (IAST) - это решение, которое оценивает приложения изнутри, используя программные средства. Этот метод позволяет IAST использовать преимущества SAST и DAST, а также предоставляет доступ к коду, HTTP-трафику, информации о библиотеках, внутренних соединениях и информации о конфигурации.[9] Некоторые продукты IAST требуют, чтобы приложение подвергалось атаке, в то время как другие могут использоваться во время обычного тестирования качества.[10][11]
Развитие вредоносных программ, направленных на кибер-атаку клиентов компаний, ведущих свою коммерческую деятельность в сети Интернет, послужило стимулом к изменению требований к веб-приложениям, начиная с 2007 года. Предполагается, что значительное количество пользователей Интернета скомпрометированы вредоносным ПО и поэтому любые данные, отправленные с заражённых машин, могут быть вредоносными. В связи с этим, внедряется больше продвинутых систем защиты информации и блокировки атак именно на бекенде, чем на клиентской стороне, либо веб-сервере.[12] По состоянию на 2016 год, широкое применение находили технологии самозащиты ПО.[8][13] RASP внедряется совместно со средой выполнения, либо вживляется в неё, что позволяет обнаруживать и предотвращать хакерские атаки.[14][15]
Координационный центр CERT описывает скоординированное раскрытие уязвимостей - CVD (англ. Coordinated Vulnerability Disclosure) как «процесс уменьшения преимущества противника при уменьшении уязвимости информационной безопасности»..[16] CVD - это итеративный многоэтапный процесс, в котором участвуют несколько заинтересованных сторон (пользователи, поставщики программного обеспечения, специалисты по безопасности), которые должны работать вместе для устранения уязвимостей. Поскольку в процессах CVD участвуют несколько заинтересованных сторон, управление коммуникацией и устранение уязвимостей имеют решающее значение для успеха.
С эксплуатационной точки зрения многие инструменты и процессы могут помочь в CVD. К ним относятся системы отслеживания ошибок и программы Bug Bounty.