Upload
-
View
182
Download
3
Embed Size (px)
Citation preview
Ксения Дмитриева
HTML5: Взлом и защита
Немного о себе
• Консультант по безопасности программного обеспечения
• 4 года опыта в области безопасности ПО (AppSec)
04/13/2023 11:33 AM 2
• Магистр компьютерных наук, George Washington University, США
• Хобби – бальные танцы
HTML5 – в стадии разработки
• Cross-origin Resource Sharing (CORS)
• Cross-document Messaging
• Хранение данных оффлайн
• IFRAME Sandboxing
• Управление историей браузера
• Геолокация
• и т. д.
04/13/2023 11:33 AM 3
Хакеры не спят
04/13/2023 11:33 AM 4
CORS
04/13/2023 11:33 AM 5
Настраиваем CORS правильно
Настравиваем хэддер Access-Control-Allow-Origin:
• Не используем метасимвол *
• Следуем принципу минимальной привилегии
• Настраиваем окружение PROD отдельно от TEST
Настройка сервера:
• IIS7 – web.config
• Apache – mod_headers
04/13/2023 11:33 AM 6
OPTIONS /usermail HTTP/1.1
Origin: mail.example.com
Content-Type: text/html
HTTP/1.0 200 OK
Access-Control-Allow-Origin: http://www.example.com Access-Control-Allow-Origin: https://login.example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-Prototype-Version, X-Requested-With, Content-Type, Accept
Access-Control-Max-Age: 86400
Content-Type: text/html; charset=US-ASCII
Connection: keep-alive
Content-Length: 0
Header set Access-Control-Allow-Origin http://www.example.com, https://login.example.com
Web Messaging API
• КТО может отправлять сообщения?
• Frames, iframes, parent window
• КАК отсылаются сообщения?
• postMessage(message, target)
• window.addEventListener
• ЧТО отправляется в сообщении?
• Текст
• Источник/Origin
• Отправитель/Source
04/13/2023 11:33 AM 7
Атака
Атака
Взлом функциональности Web Messaging
Демо
04/13/2023 11:33 AM 8
Как безопасно использовать Web Messaging?
• Валидировать источник/origin
• Валидировать данные (на стороне клиента)
window.addEventListener("message", receiveMessage, false);
…
function receiveMessage(event){
…
if (event.origin !== "http://www.example.com")
return;
if (!validateEmail(event.data))
return;
div.getElementById('user_email_address').textContent = event.data;
…}
if (event.origin !== "http://www.example.com")
if (!validateEmail(event.data))
04/13/2023 11:33 AM
<iframe src="http://www.untrustedpartyiframe.com"> </iframe>
Аттрибут sandbox
Same Origin Policy
Набор ограничений для встроенного iframe:
• "" (нет доверия)
• allow-same-origin
• allow-top-navigation
• allow-forms
• allow-scripts
04/13/2023 11:33 AM 10
<iframe src="http://www.untrustedpartyiframe.com" sandbox="allow-same-origin"> </iframe><iframe src="http://www.untrustedpartyiframe.com" sandbox=""> </iframe>
Sandboxing против Clickjacking
Код для frame-busting:
WebBanking.html
04/13/2023 11:33 AM 11
Отключение кода frame-busting:
AttackerPage.html
<script> if(top != self) { top.location = self.location; }</script>
<iframe src="http://bank.com/WebBanking.html" sandbox=""> </iframe>
Взлом защиты от clickjacking
Демо
04/13/2023 11:33 AM 12