Автоматизированное тестирование безопасности программного обеспечения для разработчиков (4 частей серии)
В этой части вы найдете реальный опыт в автоматизированном тестировании безопасности, так как у нас есть его на Казачья лаборатория . Как компания Security Solutions, мы принимаем эти открытия и «исцеленные раны» как очень ценные 🔐
Часть 4.
Как мы тестируем
Проблемы постоянного тестирования безопасности
Важность тестовой среды
Суммируя вещи вверх
💡 Как мы тестируем
На Казачьи лаборатории , Работая над созданием продуктов безопасности себя, мы осуществляем автоматизированное тестирование безопасности, где мы можем, используя как готовые сторонние испытания, так и наши собственные индивидуальные решения.
Например, мы используем автоматическое тестирование Темис , мультиплатформальная библиотека криптографических услуг, которая является основой многих наших продуктов. Во время разработки мы проверяем каждый PR с Circleci , Битрейз и Действия GitHub , который запускает набор тестов на всей базе кода на 13 языках.
📎 В этом случае каждый PR проверен: ⚙️ Clang-Tidy Как литровой и статический инструмент анализа для диагностики и исправления общих ошибок и ошибок, ⚙️. Асан, Мемсан и убэн В качестве инструментов динамического анализа для обнаружения повреждения памяти, утечки памяти, использование неинициализированной памяти и неопределенное поведение — все, как известно, является источником наиболее катастрофических ошибок, ⚙️. Valgrind В качестве инструмента динамического анализа, образуя другую защиту от утечек памяти и проблем управления памятью, ⚙️. Американская нечеткая Lop Будучи незнечником, чтобы осуществлять необычные кодовые пути и вызвать странное поведение, где вы меньше всего этого ожидаете, ⚙️ Несколько специфичных криптографии тесты (например, Nist статистические тесты и тесты на совместимость), чтобы убедиться, что никакие ошибки в криптографических зависимостях и генерации случайных чисел не могут закройте в эту точную сборку.
Мы используем инструменты, такие как Asan и Valgrind для тестирования самого ядра библиотеки темы, написанные в C. Но поскольку также есть ряд обертков, написанных на других популярных языках, мы используем стандартные средства для них означает для них стандартные языки.
Например, код ржавчины проверяется Clippy , GO Code Vetted by Ряд линталей И, конечно же, каждая языковая обертка имеет обширный тестовый набор, который часто больше, чем код, который он проверяет. Тестирование мобильных обертков для iOS и Android имеет свои собственные трудности: эмулятор Android нуждается в 5-10 минутах только для запуска, а тестирование IOS требует использования MacOS.
Вы можете перейти в крипто-специфические тесты и подход к запуску всего этого в Circleci, размещенном в Репозиторий Themis GitHub Отказ
🔎 ⇪⇪⇪ Секретаризм-сгенерированное изображение темитирующих этапов тестирования: установка, запущенные тесты для каждого языка, проходные тесты безопасности, несутки, здание и установка пакетов RPM/DEB.
💡Чальгеры непрерывного тестирования безопасности
Проработавшись над продуктами, которые проходили обширные испытания на безопасность на протяжении многих лет, мы видим, как часто люди получают неудобные с помощью дополнительной испытательной инфраструктуры для обеспечения безопасности.
Мы все еще сильные верующие, что, хотя для того, чтобы гарантировать, что безопасность кода всегда приносит удобства для использования юзабилити, оно того стоит.
Обратная сторона?
Тесты безопасности не являются вашими обычными модулями или функциональными тестами, они занимают больше времени, иногда они занимают значительное время, чтобы накапливать данные. В зависимости от типа и критичности развития, вы можете быть соблазнены запустить их параллельно и не блокировать на главный тестовый трубопровод. Но это лень в худшем случае, потому что, когда вы (наконец) серьезно относитесь к безопасности, вы должны запустить их только как блокирующие тесты.
Например, когда мы добавили новую парольную интервалу API в Themis, это замедлилось полную комплект по тестируемой единице на более чем в минуту, потому что функции деривации ключей на основе переводов на основе переводов целенаправленно медленные по соображениям безопасности. Мы даже добавили тест, чтобы API достаточно медленно.
Медленнее процесс тестирования иногда приводит к обнаружению сбоев зависимости и уязвимостей, а не напрямую связанных с вашим кодом. Например, мы должны были бороться с непрозрачным изменением поведения компилятора в отношении внешних зависимостей (C Imports в Go, который значительно изменился от GO 1.3, чтобы пройти 1,6), что могло бы проявить серьезную проблему безопасности, если Тестирование и бенчмаркинг Не включал тесты громкости на входе. Разве мы не проверили это заранее, это будет тикающая временная бомба, хотя хочется, как известно, является чрезвычайно безопасным языком, когда речь идет о памяти, и такие вопросы никогда не должны были возникнуть.
💡 Распрессование тестовой среды
Важным аспектом автоматизированного тестирования является двигатель, который выполняет тесты. Как мы упоминали, мы используем несколько услуг CI для наших зрелых продуктов для обеспечения широкого покрытия платформ.
Матрица тестирования с различными оразнями разных версий с разнообразными насадочными инструментами может раскрывать проблемы, которые поверхностные только в определенной среде. Это особенно важно на мобильных платформах, таких как Android и iOS, так как у вас меньше контроля над пользовательской средой.
При использовании общественных услуг CI отлично подходит для публичных репозиториев со стабильными продуктами, это может не быть наиболее эффективным инструментом для сложных продуктов в активных исследованиях и разработках (например, постоянный горячий беспорядок), где тестовые союзы развиваются с продуктом и тестовыми сценариями меняются в течение ночи.
Хотите узнать больше о поддержании и тестировании криптографических библиотек? Проверьте видео или Слайды От разговора Анастасия Войтова «Поддержание криптографической библиотеки на 12 языков». ⇩⇩⇩ Для этого внутренне мы используем Buildbot Структура непрерывной интеграции, которая обеспечивает очень высокую гибкость сценариев: блокировка, не блокировка, контейнеры, типы развертываний, типы артефактов, собранных — все чрезвычайно настраивается (и очень трудоемки). В то время как регулярные тесты могут быть записаны, чтобы соответствовать системе, иногда с участием сторонних приборов для тестирования свойств безопасности требует сложных интеграционных сценариев, и иметь гибкую структуру CI, не оставляю камнями.
Тестирование безопасности не является полностью автоматизированным Edvivor
Точно так же кодируют отзывы в традиционном разработке программного обеспечения, Наличие человеческого глаза на изменения кода — это должен : Некоторые поведения просто не могут быть обнаружены автоматически. Наличие третьей сторонней рассмотрения крупного выпуска — важнейшая практика безопасности. Но тестирование безопасности может определить как регрессии, так и очевидные недостатки, и рассматривая инциденты и недостатки безопасности, которые оказались в результате бедствия Это еще то, что может начать делать то, что многие разработчики могли начать делать.
Суммируя вещи
Для большей части нашей карьеры проблемы безопасности являются первыми, которые приходят на ум, когда мы разработаем и проверим программное обеспечение. Который является своего рода обратно по сравнению с сообществом, связанным с неинтезобетом, который сосредоточен на доставке быстрого (всегда), последовательного (иногда) и надежного (редко).
С новостями о еще другом нарушении, Максиму « все будет сломано » «Кольца как истинные, как и раньше, без шансов на изменение к лучшему в обозримом будущем из-за оскорбительной небрежности повсеместно практикуют безопасность. И помимо юзабилити компромиссов и простые небрежности, это всегда вопрос знания того, как и что следует проверить.
Ну, теперь у вас есть несколько контрольных точек. Мы надеемся, что это было полезно для вас. Если вам нужна дополнительная поддержка по этим и другим инженерии безопасности данных или конфиденциальных вопросах управления рисками данных, просмотрите наши продукты и публикации и не стесняйтесь отказаться от нас на консультацию.
☛ Если вы хотите добавить что-то о процессах в автоматизированном тестировании безопасности или иметь историю, чтобы поделиться — мы хотели бы услышать от вас! Обратитесь к нам через info@cossacklabs.com или @ acoschacklabs .
Автоматизированное тестирование безопасности программного обеспечения для разработчиков (4 частей серии)
Оригинал: «https://dev.to/cossacklabs/automated-software-security-testing-for-devs-part-4-18eh»