13
Ксения Дмитриева HTML5: Взлом и защита

2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

  • Upload
    -

  • View
    182

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Ксения Дмитриева

HTML5: Взлом и защита

Page 2: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Немного о себе

• Консультант по безопасности программного обеспечения

• 4 года опыта в области безопасности ПО (AppSec)

04/13/2023 11:33 AM 2

• Магистр компьютерных наук, George Washington University, США

• Хобби – бальные танцы

Page 3: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

HTML5 – в стадии разработки

• Cross-origin Resource Sharing (CORS)

• Cross-document Messaging

• Хранение данных оффлайн

• IFRAME Sandboxing

• Управление историей браузера

• Геолокация

• и т. д.

04/13/2023 11:33 AM 3

Page 4: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Хакеры не спят

04/13/2023 11:33 AM 4

Page 5: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

CORS

04/13/2023 11:33 AM 5

Page 6: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Настраиваем 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

Page 7: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Web Messaging API

• КТО может отправлять сообщения?

• Frames, iframes, parent window

• КАК отсылаются сообщения?

• postMessage(message, target)

• window.addEventListener

• ЧТО отправляется в сообщении?

• Текст

• Источник/Origin

• Отправитель/Source

04/13/2023 11:33 AM 7

Атака

Атака

Page 8: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Взлом функциональности Web Messaging

Демо

04/13/2023 11:33 AM 8

Page 9: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Как безопасно использовать 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

Page 10: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

<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>

Page 11: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

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>

Page 12: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Взлом защиты от clickjacking

Демо

04/13/2023 11:33 AM 12

Page 13: 2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита

Email: [email protected]

Вопросы?

04/13/2023 11:33 AM 13