Эта статья была написана Марином Алькарасом для блога Wootric и опубликована 9 февраля 2017 г.

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

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

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

Проверка безопасности OWASP ZAP

<span class="s1"><span class="Apple-converted-space"> </span>Example of the alerts we got from ZAP</span>

Мы проверили безопасность с помощью OWASP ZAP. ZAP эффективен при обнаружении уязвимостей при использовании в качестве прокси. Его также можно интегрировать в ваши тесты CI, чтобы контролировать вашу безопасность.

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

Соответствие политике безопасности контента

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

Недавно маяк был модернизирован, чтобы соответствовать современным методам JavaScript — бесконечная гонка. Одной из наших целей было сделать маяк совместимым с CSP (Content Security Policy).

Это было сложно реализовать, потому что мы использовали теги script, чтобы заставить наш маяк работать — CSP отговаривает вас от этого (см. unsafe-inline). Мы смогли преодолеть это ограничение и другие ограничения (unsafe-eval) и сделать наш маяк совместимым с CSP.

Для этого мы радикально изменили архитектуру маяка. Он стал JavaScript-приложением на базе AMD.

Гибкость RequireJS позволила нам собрать и предоставить весь необходимый код, не нарушая никаких правил CSP. Мы также реализовали функции, полученные из сторонних библиотек.

Хорошим примером является наш модуль аналитики в нашем маяке, взгляните:

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

Кроме того, благодаря этому обновлению мы уменьшили поверхность атаки для уязвимостей XSS и SQL-инъекция.

Mozilla поддерживает отличное руководство по CSP, оно заслуживает внимания, если вы хотите лучше понять CSP. Проверь.

Применять более строгие заголовки HTTP

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

Если вы используете приложение Rails, я настоятельно рекомендую установить гем Secure Headers, созданный Twitter. Благодаря этому мы смогли включить действительные заголовки CSP, HTTP Strict Transport Security, X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, X-Download-Options и Clear-Site-Data. один драгоценный камень.

Так как secure_headers реализует railtie, вам не нужно добавлять какой-либо код, новые заголовки будут вставлены как промежуточное ПО.

Дополнительные меры

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

Используйте менеджер паролей

<span class="s1"> It's ok to not know the "magic word"</span>

Доверьтесь менеджеру паролей и придерживайтесь его.

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

2Факторная аутентификация во всем

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

Держите коды восстановления вашей учетной записи в порядке

<span class="s1"><i><span class="Apple-converted-space"> You can kiss the codes but please, don't mail them.</span></i></span>

Итак, у вас включен 2Factor; но что, если вы потеряете свой телефон? Восстановление всех ваших учетных данных через службу поддержки может занять несколько дней, и вы можете навсегда заблокировать доступ к некоторым из них. Распечатайте коды безопасности и храните их в надежном месте.

Включите VPN, если вы находитесь в общедоступной сети

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

Аудит безопасности

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

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

Ваше здоровье!

Марин Алькарас Кордова.

Следуй за мной: @marinftw

Первоначально опубликовано на https://engineering.wootric.com 9 февраля 2017 г.