Штирлиц-Режим и новый Ослик

29 Квітня 2010

Колись давненько я писав маленький пост про IE8 і приватність. Згодом на основі нього вийшла статтейка в Хакері


Штирлиц-Режим и новый Ослик

Исследования приватного режима Internet Explorer 8

Отгадайте старую, но вечную загадку: "Штука, а в ней дыра, а в дыре дыра, а в дыре еще одна дыра"... Конечно же, вы абсолютно правы - это Internet Explorer. И сегодня мы в этом убедимся.

Я обожаю MicroSoft - честное слово пионера. Всегда юзал винду, и сейчас даже лицензию купил на семерку. Но у меня сложилось такое чувство, что умные люди в Майкрософте пишут Windows, а кого Бог немножко обделил - тот отправляется писать "самый крутой" браузер, такой, что даже круче чем Игорь Крутой. Они уже этот IE пишут 15 лет, а как было фигней, так ею и осталось. Мы пропустим исследования динозавров IE 6 и 7 - там и без нас ребята постоянно находят баги. А посмотрим на "венец совершенства" на славный Internet Explorer 8. Хватит лирики, вперед к исследованию!

Ода преумному SmartScreen

Довелось мне по роду своей милицейской деятельности исследовать SmartScreen - это система в Internet Exlorer, которая должна защищать нас от "злых" мошенников со сплойтами на сайте. SmartScreen при открытии любой странички посылает запрос к майкрософту на адрес urs.microsoft.com приблизительно такого содержания: POST /urs.asmx?MSPRU-Client-Key=l7m7EvM2K/IVNQCBF7AVPg%3d%3d&MSPRU-Patented-Lock=XdXWSI8WgDg%3d HTTP/1.1 Host: urs.microsoft.com http://tutamc.com {B3BB5BBA-E7D5-40AB-A041-A5B1C0B26C8F} 7.0.6004.6 7.00.5824.16386 7.0.6000.16386 6.0.6000.0.0 en-us

В сим запросе IE отсылает URL адрес сайта, а также несколько непонятных цифр и хешей, и само собой немного инфы о нас, такой как IP-адрес. А в ответ узнает "хороший" сайт или "плохой". Только за эту систему блэклистов построенную на онлайн-запросах я не юзаю данный браузер, как и другие с аналогичной системой. Не очень то приятно, что кто-то может по IP-адресу узнать историю моих посещений. Конечно, мы можем отключить данный функционал в настройках браузера, но тогда останемся полностью беззащитными, посему у нас есть небольшой выбор: либо палиться где мы бываем, либо быть в опасности, либо сменить браузер.

"Условия использования", которые идут с SmartScreen, заверяют что полученная инфа не будет использоваться и все это абсолютно анонимно. Нам бы теоретически следовало поверить в это :), да после эксперимента оказалось, что это немножко не правда, но пока опустим данный факт, оставим его для будущих статей.

Еще аналогичный метод проверки URLов на блэки использует последняя Opera. Нормальная же система, это когда браузер скачивает базу блэков на локальный комп и там уже все URLы тестирует - такое есть в браузерах Chrome и FireFox. Еще одним нововведением в IE 8 стал Штирлиц-режим (InPrivate Browsing), при использовании которого теоретически ничего на компе не должно сохранятся. И мне захотелось исследовать, как эти две системы работают совместно. Когда перешел в Штирлиц-Режим, зашел на сайт что находиться в блэке и у меня сразу IE показал красное окошко, тоесть в Штирлиц-режиме SmartScreen работает как и обычно, и соответственно майкрософт знает где мы ходим. Ну окей, поставим в уме еще один минус и продолжим.

Для детального исследования навесил на IE снифер для мониторинга запросов. Открыл сайт - запрос идет на urs.microsoft.com. Теперь закрыл браузер, и потом снова открыл тот сайт... запрос не идет. Значит результат закешировался. Правильное решения с одной стороны. И тут проскакивает мысль... а работает ли кеширования в Штирлиц-режиме. Помню дрожащими руками(от волнения, не от похмелья) проверял это и при первом открытии сайта запрос есть, а при втором... wait for it... нет! Тоесть в Штирлиц-режиме кеширования работает. Пробую закрыть браузер и открыть заново - и все еще немного надеюсь что кеш очиститься. Но, нет. Он остается. Тоесть после того как ты будешь ходить в Штирлиц-режиме по сайтах, теоретически завтра придут "К"ашники и по кешу узнают, что именно ты был вчера на сайте похеканого банка.

Пруф в студию

А что если я ошибаюсь? Клеветать не красиво. Посему нам нужны доказательства. И лучшим доказательством будет прога, что сможет показать список сайтов, где юзер похаживал даже в Штирлиц-режиме.

Самый идеальный вариант, найти кеш, и в нем посмотреть URLы. Чтобы его найти натравил файловый анализатор на IE, и после просмотра логов нашел такой интересненький файлик C:\Documents and Settings\admin\Local Settings\Temporary Internet Files\AntiPhishing\2CEDBFBC-DBA8-43AA-B1FD-CC8E6316E3E2.dat (адрес в XP). После удаления которого оказалось, что IE делает повторный запрос, тоесть как-то обновляется кеш. Но к сожалению это не он, поскольку файл не изменяется по размеру и по содержанию. Найти настоящий кеш мне не удалось. Но был бы я не хакер, если бы не нашел обходного варианта. Ведь помнишь мою статью о нестандартном использовании Socks-сервера, следуя этому принципу можно написать прокси-сервер, что будет смотреть пошел запрос на urs.microsoft.com, или нет. Если запрос был, значить на сайте юзер еще не заходил, а вот если запроса нет, то юзер раньше был на сим сайте, и проверка сайта на блэках взялась с кеша!

Мир, труд, май и Python!

Писать с нуля прокси-сервер не сложно, но лень же. Посему взял для нашего эксперимента TinyHTTPProxy написанный конечно же на Python'e. В нем есть функция do_CONNECT, которая обрабатывает HTTPS запросы. Учитывая что если заставить IE использовать наш прокси, то эта функция будет вызываться каждый раз при запросе urs.microsoft.com. Чтобы другим программам эту информацию передать можно б использовать мютексы, базу данных или еще что-то, но мы пойдем легким и заюзаем файлы как влаги. Если файл есть - запрос к майкрософту был, файла нету - значить и запроса небыло. def do_CONNECT(self): open('d:\\test.txt', 'w+').close() #... А теперь напишем скрипт, что будет открывать в IE сайты, и проверят есть ли наш файл-флаг test.txt. Если файла нету, то выведем сообщения о том что юзер раньше был на нем. Вот такой код у нас: urls = ( 'http://not_porn1.com/', 'http://super_puper_porn1.com/', ) for url in urls: time.sleep(1) try: os.remove('d:\\test.txt') except: pass test_url(url) if not os.path.exists('d:\\test.txt'): print "U were on this site: %s"%url Осталось лишь написать функцию test_url, которая непосредственно запустит IE с нашим URL. Знаешь, открывать другие приложение кажется просто, и я думал раньше что Python даже без дополнительных либ сможет запустить IE, но натолкнулся на маленькую "фичу" - если я запускаю IE(или любую другую программу), то скрипт не завершиться пока IE не закрыть. Поэтому для запуска лучше использовать модуль pywinauto(http://pywinauto.openqa.org/), который использует WinAPI. Получим код запуска IE такой: prog_ie = r"C:\Program Files\Internet Explorer\iexplore.exe" application.Application.start("%s %s"%(prog_ie,url.decode('utf-8'))) А закрывать браузер также будем через WinAPI, для чего подойдут маленькие функции: import win32gui import win32con def window_enumeration_handler_ie(hwnd, resultList): if string.find(win32gui.GetWindowText(hwnd),"Internet Explorer") != -1: resultList.append(hwnd) else: None def close_program_ie(): ie_windows = [] win32gui.EnumWindows(window_enumeration_handler_ie, ie_windows) for i in ie_windows: win32gui.SendMessage(i,win32con.WM_CLOSE,0,0)

Функция window_enumeration_handler_ie получает хендл окна и проверяет title, если это заголовок IE, то этот хендл добавляется к списку. Данная функция используется в функции close_program_ie, которая через WinAPI EnumWindows перебирает все окна и возвращает список окон IE. Дальше всем этим окнам посылаем сообщение WM_CLOSE, что аналогично нажатию юзера на кнопке "закрыть окно".

Собрав все в кучу получим нужную нам test_url: import win32gui import win32con from pywinauto import application def test_url(url): prog_ie = r"C:\Program Files\Internet Explorer\iexplore.exe" application.Application.start("%s %s"%(prog_ie,url.decode('utf-8'))) time.sleep(5) close_program_ie() time.sleep(2) Полностью готовый скрипт прокси-сервера и сам тестирующий скрипт лежит на диске. Плюс для тебя снял видео, где сможешь увидеть их работу.

Я же еще долго продолжал тестировать свой IE, и с каждым разом все больше огорчался. Оказалось, что при использовании встроенной функции "Очистить историю" - кеш не удаляется. А также у меня получилось пару раз, что нажав в IE "Reset IE", он долго что-то делал с винчестером, но этот кеш все равно не удалил. Может конечно это лишь неправильное совпадение звезд на небе было, а IE белый одуванчик. Все может быть... Я еще верю в чудеса )

Парочка плюсов

Ну на последок нужно же сказать хоть один плюс... и это самое сложное ). Я после долгих сысканий нашел даже не один, а два плюса. Первый что эта системы от майкрософта достаточно неплохо работает, и часто очень оперативно добавляет "плохие" домена в блэклисты. Хотя для "больших" ребят, это не проблема. У них все автоматизировано, и я встречал TDSки которые через внешние сервисы проверяють на блэки, и автоматически балансируют трафик на чистые домена.

А второй плюс, если у вас очень и очень плохой интернет, с малой скоростью и который постоянно обрывается, то в таком случае IE лучше работает, чем другие браузеры.

Много конечно еще неисследованного осталось вне статьи, так что работы еще хватит всем в данном направлении ).

PS 1: Я привык называть режим InPrivate Browsing - Порно-режим, но мне сказали что это слишком пошло, пришлось изменить на Штирлиц-режим.
PS 2: Ув. Билл Гейтс, за пару акций майкрософта в следующей статье могу вместо IE везде писать FF :)

 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com