23.09.2015

7 советов по повышению безопасности приложений

image

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

Автор: Sharon Solomon (@checkmarx)

Огромный рост числа киберпреступлений заставляет компании тщательнее подходить к вопросам безопасности и разрабатывать новые техники, повышающие защищенность приложений. Подобное происходит потому, что традиционные методы, например, ручное тестирование или WAF’ы (Web Application Firewall; межсетевой экран для веб-приложений) часто не спасают от становящихся все более изощренными хакерских атак.

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

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

Наиболее эффективный способ повысить безопасность разработок – внедрить так называемый жизненный цикл разработки программного обеспечения (Software Development Life Cycle; SDLC). Сей процесс разделяет цикл разработки на отдельные стадии, в каждой из которых предусмотрен аудит безопасности. Автоматизация тестирования, в конечном счете, позволит обнаружить уязвимости на более ранних стадиях.

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

  • Анализ подразумевает создание и внедрение общей стратегии процесса разработки, включая системный анализ, добавление новых функций и доработки по мере развития самого процесса. Сведения, полученные по результатам аудита безопасности, также принимаются во внимание, после чего, при необходимости, пересматриваются ориентиры.
  • Проектирование подразумевает подготовку к проектированию программного обеспечения на основе требований, полученных по результатам предыдущей стадии.
  • Реализация подразумевает написание кода приложения. Эта стадия наиболее длинная и сложная во всем цикле.
  • Тестирование подразумевает выполнение большинства процедур, отвечающих за контроль качества. Сюда же входит тестирование безопасности программного обеспечения. Настоятельно рекомендуется внедрять меры безопасности во все стадии жизненного цикла. Только тогда станет возможным создать наиболее защищенное приложение.
  • Внедрение подразумевает использование готового программного обеспечения в боевых условиях.
  • Поддержка подразумевает устранение уязвимостей, проблем, возникающих во время эксплуатации приложения, а также настройку и добавление новых функций на основе пожеланий клиентов. В идеале весь этот процесс проходит с использованием специальных методологий (Agile/DevOps).

sdlc

Рисунок 1: Наглядная схема процесса разработки безопасных приложений

2. Автоматизация процедур, связанных с безопасностью

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

В приложении Static Code Analysis (SCA) реализованы специальные сканеры кода, которые могут быть интегрированы во все стадии жизненного цикла. Кроме того, присутствуют легковесные плагины, которые можно легко внедрить в вашу любимую среду разработки.

Другие преимущества, которые дает внедрение автоматического тестирования кода:

  • Присутствует большая база уязвимых участков кода.
  • Нет необходимости в сканировании неизмененного кода (идеально для CICD, Agile и DevOps).
  • Совместимость с большим количеством языков программирования и фреймворков.
  • Детектирование ошибок в коде (например, переполнение буфера), мертвого кода и других брешей.
  • Автоматическая генерация отчетов в формате PDF/XML, которые можно использовать для последующего и более детального анализа.

3. Останавливайте сборку, если обнаружены угрозы среднего и высокого уровней

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

4. Не забывайте о входных данных со стороны пользователей. Используйте WAF

В большинстве современных веб- и мобильных приложениях происходит взаимодействие с пользователями, которые обычно вводят какие-либо сведения в своих браузерах. Это дает хакерам большие возможности для обхода защиты приложений. Наиболее популярные методы атак, используемых злоумышленниками: SQL- и LDAP- инъекции и межсайтовы скриптинг (XSS).

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

WAF – эффективный способ для обнаружения вредоносных пользовательских данных и мониторинга входящего и исходящего трафика (по заданным критериям) на серверах и в базах данных.

5. Убедитесь в том, что приложение совместимо с современными стандартами безопасности

Существует два стандарта безопасности, признанных всеми компаниями вне зависимости от сферы деятельности, с которыми, по возможности, должно быть совместимо программное обеспечение. OWASP Top-10 и SANS 25 – исчерпывающие списки уязвимостей, создаваемые некоммерческими организациями. Свежая информация добавляется ведущими экспертами по безопасности со всего мира.

Другие стандарты, имеющие отношение к определенной индустрии:

  • PCI DSS – для компаний, которые обрабатывают, хранят и передают информацию о кредитных картах.
  • HIPPA – для поставщиков медицинских услуг.
  • MISRA – набор стандартов для языка С.
  • BSIMM – фреймворк, помогающий оценить уровень безопасности приложения.

6. Перед использованием тщательно анализируйте сторонние компоненты с открытым исходным кодом

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

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

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

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

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

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