Атаки через буфер обміну

22:43 30.09.2011

Розповім вам про атаки через буфер обміну (attacks via clipboard). Концепція яких в мене виникла вже багато років тому, після того як я стикнувся з XSS, що вимагала вставки даних з буферу. І наведу вам методику проведення таких атак через JS і Flash.

Раніше я вже писав про Cross-Site Scripting уразливості в формах, де я розповідав про XSS атаки на форми, як reflected XSS, так і persistent XSS. Подібні уразливості я знаходив на багатьох сайтах і в багатьох веб додатках в 2007-2011 роках. Але окрім них, ще бувають strictly social XSS в формах, коли потрібно змусити жертву скопіювати в буфер обміну спеціальний код і вставити його з буфера для проведення атаки - такі уразливості я знаходив ще в 2006 році. Про що я писав в статті Міжмовний XSS - Cross-Language Scripting. І використання даної методики дозволить вирішити першу частину задачі - копіювання коду в буфер, а далі залишиться лише змусити жертву вставити з буфера для проведення атаки.

Існує можливість в браузері заносити дані в буфер обміну. Зокрема, це можна зробити через JavaScript та Flash. Зчитувати з буфера обміну не можна (це зроблено з метою безпеки), зате можна заносити дані в буфер (бо в цьому розробники не вбачають небезпеки). Що може бути використано для атаки.

Використовуючи функцію копіювання в буфер обміну можна проводити різні атаки, зокрема Cross-Site Scripting і Cross-Application Scripting, а також спам, фішинг і malware атаки. Наприклад, для проведення XSS атаки коли треба вставити код з буфера обміну в текстове поле. Або CAS коли якийсь додаток має переповнення буфера в якомусь полі (при вставці даних в це поле), і можна занести в браузері в буфер необхідний код, після вставки якого з буферу в поле відбудеться DoS чи Code Execution атака. Або можна заносити шкідливі програми (зокрема exe-файли) для викачування в качалки, що моніторять буфер обміну. І якщо в них задане автоматичне викачування файлів, то дане шкідливе ПЗ буде викачане автоматично (Automatic File Download).

Також можна занести в буфер обміну URL довільного сайта - з метою спаму, фішинга чи розповсюдження malware. Наприклад, деякі сайти автоматично копіюють адресу поточної сторінки сайта - для зручності відвідувачів. Щоб людина вставляючи з буфера адресу в браузер, випадково вставила не ту адресу, яку вона раніше скопіювала, а ту, яку їй підсунули, щоб вона перейшла на вказаний сайт. Який може бути як рекламним, так і фішинг ресурсом, або сайтом зі шкідливим кодом. Це кліпбоардний фішинг / кліпбоардний спам (clipboard phishing / clipboard spamming) і дані атаки можуть бути більш ефективними ніж атаки через закладки та стартову сторінку (про які я писав в статтях Темна сторона закладок та Темний дім в 2009 році).

При використанні JavaScript можна копіювати лише в IE. При використанні Flash - в будь-якому браузері з флеш-плагіном. Можливість працювати з буфером обміну з’явилася в Flash 7 (ActionScript 1) і була оновлена в Flash 10 (ActionScript 3), тому для атаки потрібно, щоб у користувача була відповідна версія флеш-плагіна (в залежності від використаного коду).

Для надійності варто використовувати AS1 (при копіюванні текстових даних), щоб код спрацював в користувачів як нових, так і старих версій флеш-плагіна (а також тих, хто буде запускати swf-файл в стаціонарному флеш-плеєрі). А також атака через флеш спрацює, коли у користувача вимкнутий JavaScript (що дозволить обійти відповідний захист, наприклад, NoScript чи тимчасове вимкнення JS). З іншої сторони, враховуючи, що після появи в 2008 році заяв про можливість підсовувати шкідливі лінки користувачам та виявлення флеш-банерів, що проводили подібні атаки, Adobe внесла зміни в флеш плеєр починаючи з версії 10.0, тому для атаки в браузері потрібна взаємодія з користувачем (при цьому при запуску флешки в стаціонарному флеш плеєрі атака автоматично спрацює в усіх флеш плеєрах версії 7.0 і вище).

Але в деяких користувачів може бути відсутній чи тимчасово вимкнутий флеш плагін, тому для більш надійної атаки варто використовувати комбінований метод JS + Flash (тобто поєднати обидва методи атаки). Флеш дозволяє провести атаку кросбраузерно і в різних ОС, зате JS дозволяє провести атаку на користувачів, хоча й тільки Internet Explorer, в яких немає флеш плагіна (або використовується стара версія), а також він не має обмежень на запис до буферу (які з’явилися в Flash 10.0). Тому варто об’єднати сильні сторони обох методів.

Приклад JS коду для IE:

<script>window.clipboardData.setData('text','XSS');</script>

Приклад AS1 коду:

System.setClipboard("XSS");

Приклад AS3 коду:

import flash.desktop.ClipboardFormats;
Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, "XSS");

Також можна в JS і AS зробити циклічне копіювання в буфер (наприклад, кожної хвилини). Що дозволить провести постійну (persistent) атаку через буфер обміну, коли користувачу увесь час, доки відкрита сторінка з атакуючим кодом, буде підсовуватися в буфер необхідний код.

При цьому слід зазначити, що починаючи з Flash 10.0 Адоб обмежила функціонал роботи з буфером обміну, що існував до цього (для покращення безпеки після появи в 2008 році вірусних флешек, що проводили атаки через буфер). І тепер необхідна взаємодія з користувачем, тобто необхідно, щоб користувач зробив дії мишею чи клавіатурою. Але при атаці на користувачів нових версій флеш плеєра (флеш плагіна) це можна обійти за допомогою Clickjacking, зокрема можна використати флешку ZeroClipboard (або зробити аналогічний алгоритм, без використання JS, а лише AS) в парі з Clickjacking. Або з MouseOverJacking. Наявність цієї можливості демонструє, що виправлення Adobe для роботи з буфером у Флеш 10 обходиться і дана атака все ще можлива.

В тіло даної сторінки включений JS-код (з вищенаведеним кодом для IE), що заніс в ваш буфер рядок “XSS”. А також була включена флешка, що призначена для флеш плеєра 9 та попередніх версій (але в 2023 році я прибрав swf файл). Що ви самі можете перевірити ;-) .


10 відповідей на “Атаки через буфер обміну”

  1. MustLive каже:

    You can read this article on English in The Web Security Mailing List: Attacks via forms and clipboard.

  2. Дмитро каже:

    Чи не краще було б працювати пану над розробкою безпечних веб броузерів, ніж складати незламні сайти. Дмитро вважає, не всі сайти можна захистити, а страждає як завжди споживач. Окрім того, хакери можуть створювати свої сайти, влаштовувати код на інші сайти за домовленістю з обізленими на життя людьми, співпрацювати з ними, що вони й роблять.
    ?

  3. Дмитро каже:

    Для прикладу, можна було б створити набір заборонених команд (атак, перенаправлень, перехвачених команд з перенаправлення) які інфікують комп’ютер (document.cookie, document.write і що з цього слідує, аналізувати на ходу коди .swf, .jpeg тощо вбудованих файлів і блокувати їх.

  4. MustLive каже:

    Дмитро, в тебе в корені невірна думка.

    Захистити від атак через сайти лише одними “безпечними браузерами” неможливо. Як ти можеш побачити з усіх тих дірок, що знаходять в самих браузерах - вони є одними з найдірявіших програмних продуктів (це стосується як браузерів, так і плагінів до них). І ситуація з роками тільки погіршується. Поширення шкідливого коду через сайти в першу чергу направлене саме на уразливості в браузерах та їхніх плагінах, а це одна з найголовніших проблем безпеки в Інтернеті.

    Про цю проблему я писав в своєму тестуванні систем пошуку вірусів на веб сайтах, в своїй доповіді на конференції в 2011 році та в статті в журналі Системний адміністратор. Тобто навіть не діряві сайти (якщо через дірки на них було розміщено malware, бо деякий відсоток таких випадків відбувається через розміщення коду самими власниками сайтів) є причиною цих атак, а саме діряві браузери. Раз браузери є вразливими, то для них розробляються експлоіти і розміщуються на сайтах (будь то взломані, “партнерські” чи сайти зловмисників), для атаки на користувачів. Тобто “безпечними браузерами”, які самі є небезпечними, не можна заміняти безпеку сайтів і серверів в Інтернеті.

    Звичайно безпеку самих браузерів також треба піднімати. Але вони апріорі не захистять від всіх атак в Інтернеті. Та й не тільки споживач страждає (відвідувач сайтів) - існує багато уразливостей і атак, від яких страждають власники веб сайтів і серверів. В тому числі є такі атаки, що направлені одночасно на власників та користувачів сайтів (й часто наносять набагато більшу шкоду саме власнику ресурсу).

    Окрім того, що самі браузери не є і не можуть бути панацеєю, так ще й розробники браузерів починають вводити деякі зайві секюріті фішки - замість власників сайтів. Мовляв “ми їм допоможемо”, раз власники сайтів лінуються самі виправляти, то ми зробимо секюріті фішку за них (в першу чергу йдеться про захист від XSS). Що, по-перше, додає лише обмежений захист від конкретного класу уразливостей, і частина з атак на цей клас дірок все ще працює (про що часто забувають власники сайтів та веб розробники), по-друге, працює лише в деяких браузерах (інші браузери не захистять), а по-трете, це ще більше залінює власників сайтів та веб розробників, які ще дужче забивають на безпеку сайтів. І так за цим не слідкують, а після появи подібної фішки в браузері, вони чим дужче на неї посилаються і ще більше забивають на безпеку власних сайтів.

    можна було б створити набір заборонених команд

    У своїх вищезгаданих статтях та доповіді, я вже писав про такі системи, в тому числі вбудовані в браузери захисти від інфікованих сайтів. Включаючи мою систему Web Virus Detection System, яка розроблювалася для допомоги власникам сайтів та Інтернет-користувачам в боротьбі зі шкідливим кодом на веб сайтах. Тому і я, й розробники браузерів працюємо в цьому напрямку. Але окрім цього потрібно постійно піднімати безпеку сайтів в Інтернеті.

  5. Дмитро каже:

    Вибачте за емаіл. Задовбали мене спамери, чесно!
    Спасибі за об’ємну відповідь! Я Вам довіряю як інтернет споживач. Ви серйозна людина! Серйозно й чесно поставились до діла.

  6. Дмитро каже:

    До речі, а де Ви взяли цю каптчу, якщо не секрет?

  7. Дмитро каже:

    Я планую використовувати маф каптчу (1 + 2=), але вона мабудь легко підбірається.

  8. MustLive каже:

    Нічого, Дмитро. Використовуйте той емайл, який вам зручніше.

    Завжди будь ласка. Звертайтеся при потребі, зокрема з приводу аудиту безпеки та інших секюріті послуг.

    До речі, а де Ви взяли цю каптчу, якщо не секрет?

    Це Anti Spam Image плагін для WordPress. Про уразливість в цій капчі я писав в 2007 році, під час мого Місяця багів в Капчах (цю дірку я виправив у версії, що використовую на своєму сайті).

    Стосовно математичних капч, то в своєму проекті MoBiC я писав про уразливості в різних математичних капчах, як то в Math Comment Spam Protection (з сайта tehposse.org) та на сайті thepoorhouse.org.uk. Такі капчі легше обходяться (якщо вони текстові), порівняно з іншими. Але будь-яку капчу треба перевіряти на предмет уразливостей, що дозволяють її обійти.

  9. Дмитро каже:

    А що більш уразливе: javascript чи php? Чи не має значення, головне, щоб було server-side?

  10. MustLive каже:

    Дмитро, уразливості є в будь-яких додатках на будь-яких мовах програмування. При цьому дірки трапляються і в самих мовах (я маю на увазі інтерпретатори цих мов). Тому немає значення на чому написана програма, дірки можуть бути всюди і всі програми потрібно перевіряти - проводити аудит безпеки.

    При цьому напряму порівнювати JS і PHP (або Perl чи іншу серверну мову програмування) не можна - бо це client-side і server-side веб додатки. Але уразливості трапляються в обох типах веб додатків і всі вони несуть ту чи іншу небезпеку. Атаки можна проводити і через client-side уразливості.