За последние годы мечты фантастов XX века стали реальностью: смартфоны, видеозвонки, виртуальная реальность и, наконец, Интернет вещей. К сожалению, у прогресса всегда есть темная сторона. Я думаю, ни для кого не секрет, что такие компании как Sony, Yahoo, Adobe, Target и многие другие столкнулись с проблемами безопасности в последние годы. Количество скомпрометированных систем растет день ото дня.
Node.js - это одна из самых быстрорастущих экосистем разработки приложений на рынке, которая постепенно перестает быть инструментом для разработки стартапов и проникает в корпоративный сектор. Вы уверены, что ваше приложение, разработанное на базе MEAN-стека, безопасно? В своем докладе я хотел бы рассмотреть данный вопрос. Мы поговорим о криптографии, аутентификации, авторизации, уязвимостях web-приложений, построенных на базе Node.js. К концу доклада вы получите пошаговое руководство, как уменьшить вероятность взлома вашего проекта.
10. Известные уязвимости в компонентах
• https://nodesecurity.io/
• https://snyk.io/
• http://cve.mitre.org/
• https://nvd.nist.gov/
• https://www.exploit-db.com/
• https://www.cvedetails.com/
11. Как выбирать npm-пакеты?
• Популярность
• Автор
• Активность на GitHub
• Статические анализаторы? Юнит-тесты?
• Базы данных уязвимостей
• Списки рассылки, Slack
18. Отсутствие контроля прав доступа
• Security through obscurity
• Проверка прав доступа в UI
• Нет проверки прав во вспомогательных служебных запросах
19. Что делать?
• Бить по рукам
• Контроль доступа на всех уровнях приложения
• Authorization middleware
• Тестирование и сode review
22. Что делать c перехватом трафика?
• Всегда используйте TLS
• HTTP/2 и TLS 1.2
• Используйте TLS 1.1 и TLS 1.2
• Защищенный контент доступен только через TLS-соединения
• HTTP-контент на TLS-страницах
• Атрибут Secure у cookie
23. Криптография в Node.js и браузерах
• crypto
• sjcl (Stanford)
• crypto-js
• node-forge
• Web Cryptography API
• PolyCrypt
34. Аутентификация и управление сеансами
• Анализ сообщений об ошибках аутентификации
• Подбор паролей
• Проблемы с сессиями пользователей
35. Аутентификация
• Не изобретайте велосипед
• Аутентификация только через TLS
• Политика паролей
• «Безопасные» сообщения об ошибках
• Двухфакторная аутентификация
• CAPTCHA
• Блокировка аккаунтов
• Восстановление паролей
https://www.riskiq.com/blog/labs/magecart-keylogger-injection/ (Magento, OpenCart и Powerfront)
https://www.pluginvulnerabilities.com/blog/ + https://www.pluginvulnerabilities.com/2016/10/14/arbitrary-file-upload-vulnerability-in-wp-marketplace/
http://dyn.com/blog/dyn-statement-on-10212016-ddos-attack/
Weaknesses have been identified with earlier SSL protocols, including SSLv2 and SSLv3, hence SSL versions 1, 2, and 3 should not longer be used.
As of February 2014, contemporary browsers (Chrome v20+, Firefox v27+, IE v8+, Opera v10+, and Safari v5+)support TLS 1.1 and TLS 1.2
TLS 1.0 is still widely used as the 'best' protocol by a lot of browsers that are not patched to the very latest version. It suffers from CBC Chaining attacks and Padding Oracle attacks. TLSv1.0 should only be used after risk analysis and acceptance. PCI DSS 3.1 prohibits use of TLS 1.0 after June 30, 2016.
Although the standard itself does not require usage of encryption,[24] most client implementations (Firefox,[25] Chrome, Safari, Opera, IE, Edge) have stated that they will only support HTTP/2 over TLS, which makes encryption de facto mandatory.
Rule - Do Not Provide Non-TLS Pages for Secure Content
Rule - Do Not Mix TLS and Non-TLS Content
Rule - Use "Secure" Cookie Flag
June 2016. Hackers Leak 36 million+ MongoDB Accounts - https://www.hackread.com/hacker-leaks-36-million-mongodb-accounts/
July 2015. 600TB MongoDB Database 'accidentally' exposed on the Internet - http://thehackernews.com/2015/07/MongoDB-Database-hacking-tool.html
Управление конфигурациями, аудит
Clickjacking, JSON hijacking, x-powered-by, X-XSS-Protection, etc.
HTTP parameter pollution attack
Cross Origin Resource Sharing
Do not send passwords to users. Use temporary links to reset passwords.
OpenSSL/Node.js crypto package
ALWAYS hash on the server
Use secure hash functions, e.g. SHA256
Use long salt generated by Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)
Slow hash functions (PBKDF2, scrypt, bcrypt). Bcrypt is the best.
Use keyed hashes (HMAC)