Какие проблемы возникнут у вашей компании, если ее взломают и украдут персональные данные или коммерческие секреты? Как создатели технологий, разработчики несут ответственность перед пользователями и работодателем. Одной из областей этой ответственности является обеспечение безопасности.
За джунами присматривают: их код проходит аудит, и только потом его пускают в продакшн. За мидлами нет жесткого контроля, поэтому качество и безопасность кода – их ответственность. В подготовленной совместно с Яндекс.Практикумом статье мы рассмотрим основные виды уязвимостей и расскажем об инструментах для аудита безопасности сайта.
1. SQL-инъекция
С помощью SQL-инъекции проводится атака на работающие с базами данных приложения. Ее целью является выполнение запроса на удаление, обновление или добавление записи, а также получение доступа к скрытым данным или нарушение логики работы приложения.
Для защиты необходимы следующие действия:
- проверка и фильтрация вводимых пользователем данных;
- экранирование символов;
- использование параметризованных запросов.
Что нужно знать: основные команды и устройство баз данных.
Кейсы
- Утечка 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).
Для защиты необходимо:
- использовать последние версии XML-парсеров и отключить в них уязвимые функции.
- внедрить проверку и фильтрацию поступающих XML-документов.
- вместо XML использовать JSON.
Что нужно знать: XML.
Кейсы
- Через XML-RPC хакеры внедряли вредоносный код на сайты Wordpress, который атакует другие сайты по словарю.
- Этичный хакер заработал 9 тыс. долларов, после успешной XML-атаки на Uber.
- Глобальный сбой в работе Blu-ray плееров Samsung вследствие XML-атаки.
3. Атака XSS
C помощью межсайтового скриптинга (XSS) хакер внедряет в страницу код, который выполняется на компьютере клиента при открытии страницы. Можно вставить баннер со своей рекламой, подменить содержимое страницы, майнить криптовалюту, получить локальные данные, аварийно завершить работу браузера, совершить переадресацию или сделать скриншот текущей страницы.
Для защиты необходимо:
- не давать возможность пользователям вставлять теги, стили;
- экранировать символы, которые пользователи вводят в формы, заменяя их на HTML-мнемоники. Пример замены: > вместо >
- санитайзить код (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. Слабая аутентификация
Непродуманный механизм аутентификации клиента дает возможность перехватить или подобрать логин/пароль к веб-приложению с помощью брутфорса и атаки «Человек посередине». В этом случае хакер крадет сессию пользователя и с ее помощью выдает себя за него.
Брутфорс – метод перебора всех возможных сочетаний символов для получения пароля. Если количество неудачных попыток входа не ограничено, то пароль можно подобрать брутфорсом. Чтобы ускорить процесс, используются словари с готовыми хэшами, данные утечек и атаки по маске (подробнее читайте в нашей статье).
Как защититься:
- периодически инвалидировать сессии;
- не передавать данные в открытом виде;
- включить проверку на слабый пароль;
- ограничить неудачное количество попыток входа;
- подключить многофакторную аутентификацию.
Что нужно знать: механизмы аутентификации.
Кейсы
- С помощью брутфорс-атаки на WordPress-сайты более 7 тыс. онлайн-магазинов были подменены на мошеннические.
- Злоумышленники обошли многофакторную аутентификацию SolarWinds и внедрили вредоносное ПО в обновления их клиентов.
- Небольшая утечка данных компании AdGuard после брутфорса.
- Авиакомпания Cathay Pacific была оштрафована на 630 тыс. долларов правительством Великобритании из-за слабых механизмов защиты, которые привели к успешной брутфорс-атаке.
5. CSRF
Межсайтовая подделка запроса (CSRF) позволяет выполнить действие, передав в запросе определенные параметры. Например, пользователю приходит письмо с ссылкой на сайте, где тот авторизован. После перехода по ней выполняется заданный злоумышленником запрос.
Как защититься:
- использовать токены в клиентских запросах.
Что нужно знать: требуется уметь «солить» пароли.
Кейсы
- Серверы сети ресторанов Subway взломали и отправили пользователям на электронную почту письма с вредоносными ссылками.
- В феврале 2016 года австрийская аэрокосмическая компания FACC AG потеряла 42 млн долларов из-за фишинга.
- Злоумышленники получили 500 ГБ незашифрованных файлов производителя ароматизаторов Symrise, используя фишинговые письма.
- Хакеры украли данные 65 тыс. пользователей с сайта японского разработчика игра Koei Tecmo.
- Баг-хантер получил 3 тыс. долларов за найденную уязвимость на сайте отзывов Glassdoor.
Приложения всех компаний уязвимы вне зависимости от количества сотрудников и их профессионализма. Всегда сохраняется ненулевая вероятность, что веб-приложение могут взломать. Чтобы снизить риски нужно заниматься образованием и хорошо знать свой инструмент. Для этого мы составили список курсов и лекций по ИБ, SQL и фронтенду.
Лекции по ИБ во фронтенде
- безопасность: уязвимости вашего приложения – Алексей Богачук рассказывает о XSS-атаках и почему фреймворки не спасают;
- безопасность веб-приложений – лекция об угрозах из списка OWASP Top 10.
Курсы по ИБ во фронтенде
Курсы по информационной безопасности для фронтенда в основном на английском языке и платные.
На английском:
- веб-приложения: безопасность для новичков – введение в десять наиболее распространенных угроз по версии OWASP за полтора часа;
- безопасность в Angular – создание безопасных приложений на основе лучших практик OWASP и обеспечение безопасности веб-сервера на Node.js;
- этичный хакинг и пентестинг веб-приложений – практические методы взлома и их не устаревающие принципы;
- OWASP: основы информационной безопасности – в этом курсе дается базовый обзор угроз из списка OWASP;
- продвинутый хакинг и защита веб-приложений – узнаете, как тестировать веб-инфраструктуру, используя различные векторы атак в реальном времени;
- курс по SQL-инъекциям – поймете разницу между разными вариантами SQL-атаки: Union Based, Boolean Based, Error Based и Time Based SQL-инъекции;
- курс по межсайтовому скриптингу (XSS) – курс знакомит с XSS, его производными и объясняет, как эксплуатировать XSS в старых и современных веб-приложениях;
- хакинг и пентестинг веб-приложений с нуля – научитесь собирать информацию о цели атаки, обнаруживать и эксплуатировать уязвимости.
На русском:
- этичный Веб хакинг для начинающих – основы SQL, различные методы тестирования, установка бэкдора, использование программ Burp Suite, ZAP Proxy, SQLMap.
Курсы по SQL
На английском:
- гайд по SQL для новичков – узнаете что такое CRUD, агрегация, вложенные запросы и многое другое;
- MySQL с нуля – трехчасовой курс по основам MySQL, 77 тыс. лайков и 700 дизлайков;
- введение в базы данных и SQL-запросы – курс познакомит с синтаксисом SQL и даст представление о концепции баз данных. Опыт программирования не требуется.
На русском:
- начальный курс SQL – лекции и практические задания от преподавателя с 15-летним стажем в анализе данных с помощью SQL-запросов;
- базы данных SQLite. Знакомство с библиотекой SQLite – познакомитесь с работой реляционных баз данных и языком запросов SQL;
- Уроки SQL для начинающих: часть 1, 2, 3, 4, 5, 6, 7, 8 – научитесь создавать БД, работать с таблицами, создавать индексы и узнаете как использовать псевдонимы для выборки данных.
SQL-инъекции
Сканеры SQL-инъекций
XSS
- Cross-Site Scripting – Google;
- шпаргалка по XSS и безопасности HTML 5 ;
- awesome-список по XSS;
- туториал по XSS;
- примеры скриптов для XSS-инъекции;
- еще коллекция скриптов для 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-фреймворков. Если вы хотите наработать необходимый багаж без отрыва от производства, стоит обратить внимание на продвинутый курс Яндекс.Практикум. Он рассчитан на начинающих фронтендеров и бэкендеров, которые собираются стать фуллстак-разработчиками. С помощью опытных преподавателей студенты детально разберутся в устройстве современных фреймворков.
Комментарии