Безопасность Node.js / Илья Вербицкий (Независимый...

44
Безопасность Node.js Илья Вербицкий

Transcript of Безопасность Node.js / Илья Вербицкий (Независимый...

Page 1: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Безопасность Node.jsИлья Вербицкий

Page 2: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Вместо предисловия• Кто украл мою кредитную карту?• Безопасен ли мой блог?• Кто «сломал» Интернет?

Page 3: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Основные проблемы безопасности• Пользователи• Разработчики

Page 4: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Сколько стоит «баг»?

Сбор требований

Дизайн Разработка Тестирование Релиз Нас взломали!!!

Page 5: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

OWASP Top 10• Текущая версия - 2013• NSA, CERT, PCI Council, SEI, SANS, NIST, EU Regulations• 2003, 2004, 2007, 2010• Следующая версия - 2016

Page 6: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

10

Page 7: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Непроверенные перенаправления

app.get("/login", function (req, res, next) { return res.redirect(req.query.url);});

http://site.com/login?url=/admin

http://site.com/login?url=http://google.com

Page 8: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Не используйте перенаправления и переходы• Переходы не зависят от входных параметров• Проверяйте входные параметры• valid-url

Page 9: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

9

Page 10: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Известные уязвимости в компонентах• https://nodesecurity.io/• https://snyk.io/• http://cve.mitre.org/ • https://nvd.nist.gov/ • https://www.exploit-db.com/• https://www.cvedetails.com/

Page 11: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Как выбирать npm-пакеты?• Популярность• Автор• Активность на GitHub• Статические анализаторы? Юнит-тесты?• Базы данных уязвимостей• Списки рассылки, Slack

Page 12: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Как это автоматизировать?• nsp• snyk• Retire.js• JSPrime• ESLint with ScanJS rules• rokki• Veracode

Page 13: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Web Application Firewall• ModSecurity• IronBee• NAXSI• Shadow Daemon• Cloudflare WAF• AWS WAF

Page 14: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

8

Page 15: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Подделка межсайтовых запросов (CSRF)

GoodSite.com

Attacker.com

Page 16: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• csurf

var csrf = require('csurf');

app.use(csrf({ cookie: true }));

app.get('/form', function(req, res) {res.render('send', { csrfToken: req.csrfToken() })

})

Page 17: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

7

Page 18: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Отсутствие контроля прав доступа• Security through obscurity• Проверка прав доступа в UI• Нет проверки прав во вспомогательных служебных запросах

Page 19: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Бить по рукам• Контроль доступа на всех уровнях приложения• Authorization middleware• Тестирование и сode review

Page 20: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

6

Page 21: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Утечка уязвимых данных• Перехват трафика• Проблемы с шифрованием данных

Page 22: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать c перехватом трафика?• Всегда используйте TLS• HTTP/2 и TLS 1.2• Используйте TLS 1.1 и TLS 1.2• Защищенный контент доступен только через TLS-соединения• HTTP-контент на TLS-страницах• Атрибут Secure у cookie

Page 23: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Криптография в Node.js и браузерах• crypto• sjcl (Stanford)• crypto-js• node-forge• Web Cryptography API• PolyCrypt

Page 24: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

5

Page 25: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Небезопасная конфигурация• Настройки/пароли по умолчанию• Слишком много прав• Утечка информации о настройках сервера• DoS• Clickjacking• JSON Hijacking

Page 26: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Ansible, Chef, Puppet• helmet• hpp• cors• node-ipgeoblock• express-limiter• safe-regex

Page 27: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

4

Page 28: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Прямые ссылки на объектыvar messageId = req.params.messageId;messagesDAO.getById(userId, function(error, message) { return res.render(“message", message);});

http://site.com/view-message?messageId=1

Page 29: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Бить по рукам• Использовать сессии• Контроль доступа на всех уровнях приложения• Тестирование и code review

Page 30: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

3

Page 31: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

XSS• Непостоянные• Постоянные• XSS в DOM-модели

Page 32: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Валидация• xss-filters• secure-filters• xss• validator-js

• HTTP-куки• helmet-csp (Content Security Policy)

Page 33: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

2

Page 34: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Аутентификация и управление сеансами• Анализ сообщений об ошибках аутентификации• Подбор паролей• Проблемы с сессиями пользователей

Page 35: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Аутентификация• Не изобретайте велосипед• Аутентификация только через TLS• Политика паролей• «Безопасные» сообщения об ошибках• Двухфакторная аутентификация• CAPTCHA• Блокировка аккаунтов• Восстановление паролей

Page 36: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Готовые решения• passport• passport-2fa-totp• notp• basic-auth• recaptcha2

Page 37: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Сессии пользователей• Идентификатор сессии в URL• HTTP-куки• Только TLS• Таймаут• Выход из системы• Закрытие браузера

Page 38: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Безопасное хранение паролей• Не забудьте про salt• SHA-256, SHA-512• PBKDF2, bcrypt, scrypt• HMAC

Page 39: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

1

Page 40: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Внедрение кода• SQL-инъекции• NoSQL-инъекции• Выполнение произвольного кода• Выполнение произвольных команд• Чтение/запись произвольных файлов• ORM-инъекции• XML-инъекции• XPath-инъекции

Page 41: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

JavaScript-инъекцииvar preTax = eval(req.query.preTax);

http://site.com/calculate?preTax=process.exit(1)

Page 42: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Что делать?• Валидация• Параметризированные запросы• eval(), setTimeout(), setInterval(), Function()• Регулярные выражения• Тестирование и code review

Page 43: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

JavaScript шагает по планете• Front-end: Angular, React, ваш любимый фреймворк• Back-end: Node.js• Desktop: Electron, NW.js• Mobile: PhoneGap, React Native• IoT, Robotics: Cylon.js, Johnny-Five, Tessel 2

Page 44: Безопасность Node.js / Илья Вербицкий (Независимый консультант)

Вопросы?