Розповім вам про атаки через буфер обміну (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 файл). Що ви самі можете перевірити .