В этой главе мы рассмотрим часто встречающиеся подводные камни, о которых еще не рассказывалось в предыдущих главах. Я убеждена в том, что учиться защищать программное обеспечение путем запоминания множества типов уязвимостей или статистики утечки данных – не самое эффективное использование времени. Лучше направить силы на обучение защите от всех проблем.
В главах 1–4 мы уже разобрались в различных средствах защиты, и все же нескольким отдельным ситуациям стоит уделить особое внимание. Речь пойдет о распространенных и вредоносных уязвимостях, специфические средства защиты против которых мы еще не изучали.
Открытый проект обеспечения безопасности веб-приложений, более известный как OWASP (от англ. Open Web Application Security Project), – это глобальное сообщество, оказывающее помощь всем желающим в создании более безопасного программного обеспечения. Официальным сайтом сообщества является OWASP.org. В 300 открытых отделениях по всему миру ежемесячно проходят бесплатные мероприятия по обучению защите приложений и другим полезным темам. Ежегодно OWASP организовывает несколько международных и региональных конференций, уникальные обучающие курсы по углубленной тематике, саммиты по проектам. Благодаря активистам сообщества было разработано более 100 проектов с открытым исходным кодом, которые помогают продвигать индустрию безопасности приложений. Они же стали создателями самого используемого прокси-сервера для веб-приложений и сканера безопасности Zed Attack Proxy, а также ряда других инструментов и документов, в том числе собственных бесплатных книг. OWASP – открытое сообщество, к которому может присоединиться любой желающий. Несмотря на весь упомянутый здесь поразительный вклад в индустрию, наибольшую известность ему принес проект OWASP Топ-10.
OWASP Топ-10 представляет собой список десяти наиболее критических уязвимостей веб-приложений, который обновляется каждые несколько лет. В нем подробно описывается каждая уязвимость, связанные с ней риски и способы ее устранения. Он не позиционируется как какой-то стандарт и окончательный перечень всех уязвимостей веб-приложений. Топ-10 был создан командой добровольцев на основе их профессионального опыта и данных, предоставленных всей индустрией, для поиска наиболее опасных и наиболее распространенных уязвимостей веб-приложений. Это очень полезный документ для начинающего тестировщика на проникновение (так как он часто будет находить эти проблемы), для программиста (чтобы научиться защищаться от этих уязвимостей). Он также может помочь повысить осведомленность об обеспечении безопасности веб-приложений на работе. OWASP Топ-10 весьма информативен. Одни уязвимости можно найти с помощью автоматизированных инструментов, а для других требуется человек. Некоторые из пунктов списка представляют собой конкретную проблему (например, XSS), в то время как другие являются скорее системной проблемой или проблемой проектирования (например, «недостаточное или неправильное протоколирование»).
ВНИМАНИЕ. Несмотря на то что OWASP Топ-10 – очень полезный инструмент для изучения, его никогда не следует использовать в качестве контрольного списка для обеспечения безопасности приложения. Конечно, у приложений не должно быть ни одной из этих проблем, но гораздо важнее сосредоточиться на хорошей общей стратегии защиты, а не стремиться только к защите от конкретных проблем или проверке на них. Другой проект, OWASP Proactive Controls, перечисляет средства контроля, используемые для защиты от вошедших в Топ-10 уязвимостей, и многое другое. OWASP Proactive Controls – это отличный ресурс от OWASP для того, чтобы начать изучение стратегий защиты безопасности приложений.
Поскольку OWASP Топ-10 представляет собой список наиболее опасных и наиболее распространенных уязвимостей, а цель данной книги – помощь в обучении тому, как создавать безопасное программное обеспечение, мы рассмотрим этот топ лишь вкратце. После перечисления мы остановимся на трех пунктах списка, которые еще не были рассмотрены в книге, а также затронем дополнительные уязвимости, не вошедшие в Топ-10.
СОВЕТ. Существует огромное количество уязвимостей, которые не входят во всемирно известный список OWASP Топ-10. Не останавливайтесь на достигнутом. Это только начало пути.
Вот список версии 2017 года с моим кратким пояснением каждого пункта: owasp.org/www-project-top-ten/OWASP_Top_Ten_2017.
Далее следуют конкретные меры защиты от распространенных уязвимостей, которые еще не были упомянуты в этой книге, а именно:
• CSRF;
• SSRF;
• десереализация;
• состояние гонки.
Ранее в книге мы вкратце рассказали о межсайтовой подделке запроса (CSRF), ласково называемой «си сёрф», однако данная проблема важна и, к сожалению, все еще довольно распространена, поэтому необходимо рассмотреть ее более подробно. CSRF недавно была исключена из Топ-10 после того, как непосредственно в новые версии нескольких программных фреймворков была встроены автоматические средства защиты от нее. IТ-индустрия скорректировала некоторые фреймворки, чтобы помочь устранить эту уязвимость.
СОВЕТ. Встраивание средств защиты непосредственно в код фреймворка – это самый лучший способ борьбы с небезопасным программным обеспечением. Разработчикам и так приходится балансировать между довольно большим количеством ответственности и знаний для того, чтобы хорошо выполнять свою работу, поэтому чем больше мы берем на себя, тем лучше будут результаты.
В отличие от XSS, CSRF обманом заставляет пользователя перейти по ссылке, которая выполняет запрос либо действия атакующего, направленные против веб-приложения. При этом против приложения используется его собственный код, а не код злоумышленника. Данная атака называется серфингом, потому что злоумышленник использует учетные данные жертвы.
Тем не менее иногда CSRF путают с межсайтовым скриптингом (XSS), потому что в обоих названиях присутствует слово «межсайтовый». Для полного понимания обсудим различия и сходства двух атак.
При XSS-атаке злоумышленник обманом заставляет веб-приложение выполнить свой код в браузере пользователя (на стороне клиента). Атака проводится только в JavaScript и может быть отражена от веб-сервера, сохранена или отражена от объектной модели документа (DOM) либо сохранена в вашей базе данных.
СОВЕТ. Межсайтовый скриптинг на основе DOM означает, что уязвимость находится в коде на стороне клиента, а не на сервере. Тестирование и организацию защиты от нее провести сложнее.
Хотя цели CSRF и XSS-атак схожи (переход приложения под контроль злоумышленника), для осуществления CSRF-атаки используются функции самого приложения. Несмотря на слово «межсайтовый» в обоих названиях, эти два вида атаки совершенно не связаны между собой. Блок-схема CSRF-атаки изображена на рис. 5.1.
Рис. 5.1. Блок-схема CSRF-атаки
ПРИМЕЧАНИЕ. Если говорить в общем, то при CSRF-атаке злоумышленник захватывает активную сессию пользователя и затем выполняет вредоносное действие.
В главе 2 мы рассказали историю о том, как Алиса заходила на свой любимый сайт одежды, и обратили внимание на то, что бывает множество ситуаций, когда пользователи подолгу не выходят из своих учетных записей (в течение нескольких часов, дней или даже месяцев). Именно этим и пытается воспользоваться атакующий с помощью CSRF. В разделе «Управление сессиями» главы 4 шла речь о восстановлении сессии, однако пользователи обычно делают все, что им заблагорассудится, в то время как мы незаметно обновляем или уничтожаем сессии, чтобы обеспечить их безопасность при использовании наших приложений в интернете.
В случае CSRF-атаки злоумышленник обманом заставляет пользователя перейти по ссылке, содержащей атаку, либо атака находится внутри вредоносного сайта. В ее процессе происходят попытки выполнить действие против веб-приложения без ведома или разрешения пользователя. Если пользователь уже вошел в учетную запись на зараженном сайте (как когда Алиса покупала одежду в интернете), а этот сайт уязвим к подобным атакам, то транзакция выполняется (как правило, речь идет о краже).
Для защиты от данного типа атак многие современные платформы (Java, Net, Ruby on Rails) осуществляют автоматическую передачу токена, в то время как другие предлагают эту функцию отдельно, и разработчику необходимо указать ее использование. Получить подробную информацию о ее реализации можно в памятке OWASP на данную тему.
Однако помимо токенов существуют и другие возможности защиты. Подходит все, что возвращает пользователя в исходное состояние и гарантирует его информированность о происходящем. Повторный вход в систему или ввод капчи являются наиболее часто используемыми вариантами.
Второй уровень защиты от данного типа атак заключается в том, чтобы перед выполнением действия убедиться, что заголовок referrer принадлежит требуемому сайту, а не другому сайту или электронной почте. Рекомендуется использовать оба способа защиты.
ВНИМАНИЕ. Некоторые считают, что заголовок referrer легко подделать. Это правда, но только если злоумышленник получил доступ к серверу, создал на нем запрос, а затем отправил поддельный запрос из приложения. Данная ситуация является уже не CSRF-атакой, а гораздо более серьезной проблемой. Заголовок referrer не может быть подделан с помощью одного только JavaScript (что было бы необходимо для выполнения CSRF-атаки), и поэтому проверка URL-адреса ссылки является хорошим вторым уровнем защиты.
УСПЕХ В ОТРАСЛИ
OWASP Топ-10 действительно добился успеха в борьбе с CSRF, повысив осведомленность людей. В период с 2013 по 2017 год количество случаев использования этой уязвимости значительно сократилось (источник: OWASP Топ-10 2017 года), и в большинство современных платформ теперь включены соответствующие функции защиты от нее. Я признательна сообществу OWASP за все, что оно делает для нашей индустрии и всего мира.