Управление уязвимостями на практике

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

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

Разработка с учетом требований безопасности включает в себя множество тактик, таких как шифрование данных в движении (например, HTTPS / TLS), а также данных в состоянии покоя (например, шифрование файлов и баз данных), избегание известных уязвимых функций, таких как печально известная функция Javascript eval(), и обеспечение того, чтобы приложения включить надежные протоколы аутентификации пользователей.

Однако на предупреждения системы безопасности часто не обращают внимания. В последние месяцы и NPM, и GitHub вложили значительные средства в анализ проекта и создание предупреждений при обнаружении уязвимостей. Разработчики слишком часто рассматривают это как шум, а не как возможность исправить известные проблемы с безопасностью.

GitHub

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

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

В этом случае уязвимость существует в merge пакете, это риск высокой степени серьезности, она была обнаружена в этом проекте 15 дней назад и была обнаружена с помощью анализа файла package-lock.json.

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

Чтобы получить более подробную информацию о пакете, нажмите «График зависимостей», чтобы отобразить ссылку на пакет, содержащий уязвимость. На этом экране, щелкнув имя пакета, вы перейдете в репозиторий пакетов.

Однако на самом деле вам нужно знать, как устранить уязвимость. Чтобы получить эту информацию, щелкните раскрывающийся список с номером версии рядом с «Известной уязвимостью безопасности». В раскрывающемся списке «Обнаружена известная уязвимость» указано, как именно исправить проблему. В этом случае обновление пакета merge с 1.2.0 до 1.2.1.

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

Если вам интересно узнать больше о конкретной уязвимости, вы можете использовать номер Common Vulnerabilities and Exposures (CVE), чтобы получить более подробную информацию. CVE - это список однозначно идентифицированных и публично известных уязвимостей.

Щелкните номер CVE в раскрывающемся списке, чтобы отобразить запись об уязвимости на сайте Национального института стандартов и технологий (NIST). Этот сайт содержит описание уязвимости, когда она была опубликована, и ссылки на другие сайты, содержащие еще более подробную информацию. Эта информация важна для того, чтобы узнать не только о том, что уязвимо, но и о том, как можно использовать эту уязвимость.

НПМ

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

Возможно, вы заметили сообщения, подобные приведенному ниже, при установке пакетов с помощью NPM,

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

URL-адрес «Дополнительная информация» представляет собой ссылку на авторитетный веб-сайт, содержащий подробную информацию об уязвимости. Открытие окна браузера с использованием этого URL-адреса дает обзор уязвимости, ее историю, уязвимые версии пакета и ссылку на дополнительную информацию.

Одна вещь, которая отличает NPM от GitHub, - это команда npm audit fix, которая предназначена для фактического решения проблемы. Это то, что GitHub не может сделать автоматически, поскольку он всего лишь хост для репозитория проекта.

В этом случае запуск npm audit fix решил проблему, и последующее тестирование приложения показало, что никаких серьезных побочных эффектов не было.

Заключение

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

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

Будьте вовлечены, будьте активны и защищайте своих пользователей.

Что такое Чингу?

Присоединяйтесь к нам на Chingu.io, чтобы выйти из Учебного чистилища, присоединившись к одной из наших удаленных проектных групп Voyage, чтобы создавать приложения, совершенствовать жесткие навыки и изучать новые мягкие навыки. Мы помогаем разработчикам преодолеть разрыв между тем, чему они научились, и навыками, которые ищут работодатели.