Miroslav Kungurov 29 января 2021

🕸 Из джунов в мидлы: зачем фронтенд-разработчику информационная безопасность?

Совместно с Яндекс.Практикумом рассказываем о популярных уязвимостях во фронтенде, о которых должен знать мидл или тот, кто хочет им стать. Также: лекции, курсы, XSS- SQL-сканеры и awesome-списки.

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

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

1. SQL-инъекция

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

Рис. 1. <a href="https://xkcd.ru/327/" target="_blank" rel="noopener noreferrer nofollow">Мамины эксплойты</a>: о пользе экранирования символов
Рис. 1. Мамины эксплойты: о пользе экранирования символов

Для защиты необходимы следующие действия:

  • проверка и фильтрация вводимых пользователем данных;
  • экранирование символов;
  • использование параметризованных запросов.

Что нужно знать: основные команды и устройство баз данных.

Кейсы

  • Утечка OAuth-токенов GitHub и GitLab через SQL-инъекцию.
  • Данные более 8 млн пользователей Freepik были похищены с помощью SQL-инъекции.
  • Ботнет Vollgar заражает до 3000 БД в день.
  • Хакеры атаковали веб-интерфейс устройств Grandstream с помощью SQL-инъекции, чтобы использовать их для DDOS-атак.
  • Фото Скарлетт Йоханссон использовалось для атаки на серверы с СУБД PostgreSQL. Хакеры создали ботнет из 700 тыс. серверов для майнинга криптовалюты.
  • Малварь «PLEASE_READ_ME» атаковал 85 000 MySQL-серверов и украл четверть миллиона баз данных.

2. XML-инъекция

Для передачи данных между браузером и сервером приложения могут использовать расширяемый язык разметки XML. Считывающий документ XML-парсер может иметь потенциально опасные и уязвимые функции, на которые нацелена инъекция. В результате злоумышленник получает чувствительную информацию и удаленно выполняет код. Таким способом, например, можно проводить DOS- и XSS-атаки, а также подделывать запросы со стороны сервера (SSRF).

Рис. 2. Схема XML-атаки (XML External Entitiy Attack): 1) хакер сканирует сайт и проводит XML-атаку, 2) XML-процессор анализирует разметку, 3) внедрение вредоносного кода, 4) обработка XML-запроса, 5) хакер получает информацию.
Рис. 2. Схема XML-атаки (XML External Entitiy Attack): 1) хакер сканирует сайт и проводит XML-атаку, 2) XML-процессор анализирует разметку, 3) внедрение вредоносного кода, 4) обработка XML-запроса, 5) хакер получает информацию.

Для защиты необходимо:

  • использовать последние версии XML-парсеров и отключить в них уязвимые функции.
  • внедрить проверку и фильтрацию поступающих XML-документов.
  • вместо XML использовать JSON.

Что нужно знать: XML.

Кейсы

  • Через XML-RPC хакеры внедряли вредоносный код на сайты Wordpress, который атакует другие сайты по словарю.
  • Этичный хакер заработал 9 тыс. долларов, после успешной XML-атаки на Uber.
  • Глобальный сбой в работе Blu-ray плееров Samsung вследствие XML-атаки.

3. Атака XSS

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

Рис. 3. Схема XSS-атаки: 1) хакер проводит XSS-инъекцию, 2) скрипт запускается каждый раз при открытии пользователю, 3) информация передается хакеру
Рис. 3. Схема XSS-атаки: 1) хакер проводит XSS-инъекцию, 2) скрипт запускается каждый раз при открытии пользователю, 3) информация передается хакеру

Для защиты необходимо:

  • не давать возможность пользователям вставлять теги, стили;
  • экранировать символы, которые пользователи вводят в формы, заменяя их на HTML-мнемоники. Пример замены: > вместо &gt;
  • санитайзить код (js-xss, DOMPurify, sanitize-html);
  • использовать Content-Security-Policy, который описывает правила загрузки данных на странице;
  • использовать динамический (zaproxy.org) и статистический анализ кода (eslint.org);
  • пользоваться инструментом Snyk для поиска уязвимости в модулях.

Что нужно знать: HTML и JS.

Кейсы

  • С 29 по 31 мая 2020 года был зарегистрирован всплеск XSS-атак на сайты Wordpress: было проведено 130 млн атак.
  • Хакерская группа получила данные кредитных карт, эксплуатируя уязвимость в платежных формах на веб-сайте авиакомпании British Airways.
  • Фейсбук заплатил 25 тыс. долларов за найденную XSS-уязвимость.
  • Четырнадцатилетний белый хакер заработал 25 тыс. долларов за найденную уязвимость в Spark AR Studio.

4. Слабая аутентификация

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

Рис. 4. Схема атаки «Человек посередине»
Рис. 4. Схема атаки «Человек посередине»

Брутфорс – метод перебора всех возможных сочетаний символов для получения пароля. Если количество неудачных попыток входа не ограничено, то пароль можно подобрать брутфорсом. Чтобы ускорить процесс, используются словари с готовыми хэшами, данные утечек и атаки по маске (подробнее читайте в нашей статье).

Рис. 5. Схема атаки методом грубой силы (брутфорсом)
Рис. 5. Схема атаки методом грубой силы (брутфорсом)

Как защититься:

  • периодически инвалидировать сессии;
  • не передавать данные в открытом виде;
  • включить проверку на слабый пароль;
  • ограничить неудачное количество попыток входа;
  • подключить многофакторную аутентификацию.

Что нужно знать: механизмы аутентификации.

Кейсы

  • С помощью брутфорс-атаки на WordPress-сайты более 7 тыс. онлайн-магазинов были подменены на мошеннические.
  • Злоумышленники обошли многофакторную аутентификацию SolarWinds и внедрили вредоносное ПО в обновления их клиентов.
  • Небольшая утечка данных компании AdGuard после брутфорса.
  • Авиакомпания Cathay Pacific была оштрафована на 630 тыс. долларов правительством Великобритании из-за слабых механизмов защиты, которые привели к успешной брутфорс-атаке.

5. CSRF

Межсайтовая подделка запроса (CSRF) позволяет выполнить действие, передав в запросе определенные параметры. Например, пользователю приходит письмо с ссылкой на сайте, где тот авторизован. После перехода по ней выполняется заданный злоумышленником запрос.

Рис. 6. Схема межсайтовой подделки запроса (CSRF): 1) хакер отправляет пользователю вредоносную ссылку, 2) пользователь переходит по ссылке и тем самым отправляет POST-запрос на сервер, 3) запрос выполняется от имени учетной записи пользователя
Рис. 6. Схема межсайтовой подделки запроса (CSRF): 1) хакер отправляет пользователю вредоносную ссылку, 2) пользователь переходит по ссылке и тем самым отправляет POST-запрос на сервер, 3) запрос выполняется от имени учетной записи пользователя

Как защититься:

  1. использовать токены в клиентских запросах.

Что нужно знать: требуется уметь «солить» пароли.

Кейсы

  • Серверы сети ресторанов Subway взломали и отправили пользователям на электронную почту письма с вредоносными ссылками.
  • В феврале 2016 года австрийская аэрокосмическая компания FACC AG потеряла 42 млн долларов из-за фишинга.
  • Злоумышленники получили 500 ГБ незашифрованных файлов производителя ароматизаторов Symrise, используя фишинговые письма.
  • Хакеры украли данные 65 тыс. пользователей с сайта японского разработчика игра Koei Tecmo.
  • Баг-хантер получил 3 тыс. долларов за найденную уязвимость на сайте отзывов Glassdoor.
Из отчета службы компьютерной безопасности Edgescan за 2020 год (.pdf) следует, что у 68% компаний не хватает сотрудников департамента ИБ. Они оценивают свой уровень защиты как «средний». Чаще всего встречаются SQL-инъекции (42%) и XSS-атаки (19%). Из двух миллионов просканированных веб-приложений 3.7% имеют уязвимость в базе данных. В небольших организациях – до 100 сотрудников – критических уязвимостей меньше (0.1% от общего числа), чем простых (95.9%). В больших организациях с более 10 000 сотрудников критических уязвимостей в десять раз больше.

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

Лекции по ИБ во фронтенде

Курсы по ИБ во фронтенде

Курсы по информационной безопасности для фронтенда в основном на английском языке и платные.

На английском:

На русском:

Курсы по SQL

На английском:

На русском:

  • начальный курс SQL – лекции и практические задания от преподавателя с 15-летним стажем в анализе данных с помощью SQL-запросов;
  • базы данных SQLite. Знакомство с библиотекой SQLite – познакомитесь с работой реляционных баз данных и языком запросов SQL;
  • Уроки SQL для начинающих: часть 1, 2, 3, 4, 5, 6, 7, 8 – научитесь создавать БД, работать с таблицами, создавать индексы и узнаете как использовать псевдонимы для выборки данных.

SQL-инъекции

Сканеры SQL-инъекций

XSS

XSS-сканеры

Awesome-списки и курсы по фронтенду

Уязвимости нулевого дня (англ. zero day) могут присутствовать во фреймворках, поэтому нужно тщательно их изучить.

  • Angular awesome-списки: 1, 2, 3;
  • React awesome-списки: 1, 2, 3;
  • Vue.js awesome-список: 1;
  • список Youtube-каналов по фронтенду на русском и английском языках;
  • Яндекс.Практикум – курс для продолжающих фронтенд-разработчиков. Погрузитесь в JS, TS, алгоритмы и React. Плюс проекты в портфолио;
  • FreeCodeCamp – онлайн-тренажеры по HTML, CSS, JS и React для начинающих;
  • бесплатный курс по веб-разработке – 13-часовой курс по веб-разработке от HTML, CSS, Bootstrap до PHP, JS, Node.js и Angular.

Итоги

В этой статье мы рассмотрели только самые популярные уязвимости: полный их список значительно шире. Если базовому кодингу можно научиться самому (много информации в свободном доступе), то материалов по ИБ во фронтенде значительно меньше. Чтобы перейти на средний уровень, джуну потребуются серьезные познания в области безопасности приложений и сопутствующие вещи: как минимум, основы SQL, очень хорошее понимание JavaScript и современных JS-фреймворков. Если вы хотите наработать необходимый багаж без отрыва от производства, стоит обратить внимание на продвинутый курс Яндекс.Практикум. Он рассчитан на начинающих фронтендеров и бэкендеров, которые собираются стать фуллстак-разработчиками. С помощью опытных преподавателей студенты детально разберутся в устройстве современных фреймворков.

МЕРОПРИЯТИЯ

Комментарии 0

ВАКАНСИИ

Golang Backend Developer
Казань, от 70000 RUB до 150000 RUB
Middle PHP Developer (Symfony)
от 1000 USD до 1300 USD
Программист Go
по итогам собеседования
Project manager
от 50000 RUB до 100000 RUB

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

BUG