2013-05-04 01 Ксения Дмитриева. HTML5, Взлом и защита.
1.
2. Немного о себе
• Консультант по безопасности
программного обеспечения
• 4 года опыта в области
безопасности ПО (AppSec)
5/13/2013 9:16 AM 2
• Магистр компьютерных
наук, George Washington
University, США
• Хобби – бальные танцы
3. HTML5 – в стадии разработки
• Cross-origin Resource
Sharing (CORS)
• Cross-document Messaging
• Хранение данных оффлайн
• IFRAME Sandboxing
• Управление историей
браузера
• Геолокация
• и т. д.
5/13/2013 9:16 AM 3
6. Настраиваем CORS правильно
Настравиваем хэддер
Access-Control-Allow-Origin:
• Не используем метасимвол *
• Следуем принципу минимальной
привилегии
• Настраиваем окружение PROD
отдельно от TEST
Настройка сервера:
• IIS7 – web.config
• Apache – mod_headers
5/13/2013 9:16 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
7. Web Messaging API
• КТО может отправлять сообщения?
• Frames, iframes, parent window
• КАК отсылаются сообщения?
• postMessage(message, target)
• window.addEventListener
• ЧТО отправляется в сообщении?
• Текст
• Источник/Origin
• Отправитель/Source
5/13/2013 9:16 AM 7
Атака
Атака
9. Как безопасно использовать 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))
5/13/2013 9:16 AM
10. <iframe src="http://www.untrustedpartyiframe.com"> </iframe>
Аттрибут sandbox
Same Origin Policy
Набор ограничений для встроенного iframe:
• "" (нет доверия)
• allow-same-origin
• allow-top-navigation
• allow-forms
• allow-scripts
5/13/2013 9:16 AM 10
<iframe src="http://www.untrustedpartyiframe.com"
sandbox="allow-same-origin"> </iframe>
<iframe src="http://www.untrustedpartyiframe.com" sandbox="">
</iframe>
11. Sandboxing против Clickjacking
Код для frame-busting:
WebBanking.html
5/13/2013 9:16 AM 11
Отключение кода
frame-busting:
AttackerPage.html
<script>
if(top != self) {
top.location = self.location;
}
</script>
<iframe src="http://bank.com/WebBanking.html" sandbox=""> </iframe>