Вместо того, чтобы напрямую атаковать криптографию, злоумышленники крадут ключи, выполняют атаки типа «man-in-the-middle» или крадут текстовые данные с сервера, находясь в пути или с клиента пользователя (браузера). Обычно требуется провести атаку вручную. За последние несколько лет это была самая распрастраненная атака. Главный недостаток — нешифрованные конфиденциальные данные. Уязвимость ставит под угрозу все данные, которые должны были быть защищены. Как правило, эта информация включает в себя данные конфиденциальной личной информации (медицинские записи, учетные данные, личные данные и кредитные карты, которые часто требуют защиты, как это определено законами или нормативными актами).
Является ли приложение уязвимым?
Первым делом необходимо определить потребности защиты данных в пути и в состоянии покоя. Например, пароли, номера кредитных карт, медицинские карты, личная информация и коммерческая тайна требуют дополнительной защиты, особенно, если эти данные подпадают под действие законов о конфиденциальности, например, общего регламента ЕС о защите данных (GDPR), или нормативных актов (защиты финансовых данных, PCI DSS). Для всех таких данных:
- Передаются ли какие-либо данные в виде открытого текста? Касается протоколов HTTP, SMTP, FTP. Внешний трафик особенно опасен. Проверьте весь внутренний трафик, например, между балансировщиками нагрузки, веб-серверами или внутренними системами;
- Используются ли какие-либо старые или слабые криптографические алгоритмы по умолчанию или в более старом коде?;
- Используются ли крипто-ключи по умолчанию, генерируются или повторно используются слабые крипто-ключи или отсутствует правильное управление ключами или ротация?;
- Не применяется ли шифровани, например, отсутствуют какие-либо директивы или заголовки безопасности агента пользователя (браузера);
- Агент пользователя (например, почтовый клиент) не проверяет, является ли полученный сертификат сервера действиетльным;
Как предотвратить
- Классифицируйте данные, обработанные, сохраненные или переданные приложением. Определите данные, которые являются конфиденциальными в соответствии с законами о конфиденциальности, нормативными требованиями или потребностями бизнеса;
- Примените средства управления согласно классификации;
- Не храните конфиденциальные данные без необходимости. Откажитесь от него как можно скорее или используйте токены, совместимые с PCI DSS. Данные, которые не могут быть сохранены, не могут быть украдены;
- Обязательно шифруйте все конфиденциальные данные в состоянии покоя;
- Убедитесь в наличии современных и надежных стандартных алгоритмов, протоколов и ключей. Используйте правильное управление ключами. Обновляйте криптобиблиотеки;
- Шифруйте все передаваемые данные с помощью безопасных протоколов, таких как TLS, с шифрами и секретностью (PFS). Обеспечьте шифрованеи с использованием директив (HSTS: HTTP Strict Transport Security).
- Отключите кэширование для ответа, где содержатся конфиденциальные данные.
- Храните пароли, используя мощные адаптивные и соленые функции хеширования с рабочим коэффициентом (фактором задержки), такие как Argon2, scrypt, bcrypt, pbkdf2.
- Самостоятельно проверьте эффективность конфигурации и настроек.
Примеры сценариев атаки:
- Приложение шифрует номера кредитных карт в базе данных, используя автоматическое шифрование базы данных. Тем не менее, эти данные автоматически расшифровываются при получении, что позволяет недостатку SQL — инъекции получить номера кредитных карт в виде открытого текста;
- Сайт не использует и не применяет TLS для всех границ или поддерживает слабое шифрование. Злоумышленник отслеживает сетевой трафик (например, в небезопасной сети), понижает количество соединение с HTTPS до HTTP, перехватывает запросы и захватывает cookie-файл сеанса пользователя. Затем злоумышленник воспроизводит этот файл cookie и захватывает сеанс пользователя. Вместо вышеперечисленного они могут изменить все передаваемые данные, например, получателя денежного перевода;
- База данных паролей использует простые хеши для хранения пароелй всех пользователей. Ошибка загрузки файла позволяет злоумышленнику получить базу данных паролей. Простые хеши могут быть взломаны графическими процессорами (GPU) достаточно быстро;
Полезные ссылки:
- https://www.owasp.org/index.php/XSS(CrossSiteScripting)PreventionCheatSheet
- https://www.owasp.org/index.php/XSSFilterEvasionCheatSheet
- http://wpl.codeplex.com/
- https://github.com/yahoo/serialize-javascript
- https://www.owasp.org/index.php/OWASPJavaEncoderProject#tab=UsetheJavaEncoder_Project
- http://msdn.microsoft.com/en-us/library/ms972969.aspx#securitybarriers_topic6
- https://www.owasp.org/index.php/TransportLayerProtectionCheatSheet