Архів для категорії 'Статті'

XSS атаки через заголовок User-Agent

22:49 04.06.2011

HTTP заголовок User-Agent часто використовується різними веб додатками і системами (для різних цілей), тому можливість підробки даного заголовка дозволяє проводити атаки. Це можуть бути як spoofing-атаки (причому як проти веб додатків, так і веб додатки можуть використовувати цей заголовок з метою клоакінга), так і XSS атаки. Раніше я вже розповідав про можливість атак через підробку User-Agent в статті Обхід систем для пошуку вірусів на веб сайтах, а зараз розповім про Cross-Site Scripting атаки через заголовок User-Agent.

Враховуючи, що заголовок User-Agent часто використовується різними веб додатками, які виводять значення цього заголовка на веб сторінку, і при цьому розробники часто забувають про його фільтрацію, то це дозволяє проводити XSS атак на дані веб додатки. Бувають як reflected XSS, так і persistent XSS уразливості, що пов’язані з User-Agent.

Проведення XSS атак через User-Agent.

Існують наступні методи проведення XSS атак через User-Agent:

1. Через Flash.

2. Через підробку User-Agent при persistent XSS уразливостях.

3. Через JavaScript.

4. Через ActiveX.

5. Через підробку User-Agent в браузері вірусами.

6. Через проксі, що підроблює User-Agent.

Атака через Flash.

Одним з найлегших методів проведення XSS атак, зокрема на reflected XSS уразливості, є використання Flash. Коли створюється спеціальний swf-файл, що відправляє запит до цільового сайта, при цьому вказуючи в заголовку User-Agent атакуючий XSS код.

Дані атаки спрацюють лише в старих версіях флеш-плагіна - в Flash Player 9.0.16 і попередніх версіях. Починаючи з версії 9.0.28 використання заголовку User-Agent заборонене.

Як я зазначив в статті Відправка серверних заголовків в Flash, у флеш-плагіні 10.0.22.87 і наступних версіях всього заборонено 47 серверних заголовків. Більш детально про XSS атаки через заголовки в флеш ви можете прочитати в даній статті.

Відправка довільних заголовків через Flash.

Хоча Adobe заборонила відправляти деякі заголовки через флеш (на даний момент це 47 серверних заголовків, як я зазначив вище), але всі інші заголовки дозволені. Тобто через Flash можна відправляти довільні заголовки (окрім заборонених), як з числа відомих заголовків, що є стандартизованими, так і будь-які інші.

Тобто, якщо якийсь веб додаток використовує нестандартний заголовок, або заголовки з нових стандартів, то можна буде провести атаку на цей веб додаток. Як і у випадку використання стандартних заголовків з числа незаборонених у флеші (наприклад заголовки Accept і Accept-Language дозволені). А окрім User-Agent веб додатки працюють і з багатьма іншими заголовками, що дозволяє проводити XSS атаки на них.

Атака через підробку User-Agent при persistent XSS уразливостях.

При наявності persistent XSS уразливостей (зокрема в зовнішніх веб додатках), можна підробити User-Agent і провести XSS атаку на вразливий веб додаток.

Це робиться шляхом створення експлоіту чи використання існуючого програмного забезпечення, що вміє посилати довільні заголовки. Для того, щоб відправити запит з User-Agent з атакуючим XSS кодом.

Атака через JavaScript.

Серед сучасних браузерів є такі, що дозволяють змінювати User-Agent через JavaScript. В даному випадку відбувається постійна зміна User-Agent, а не при одному запиті, як це має місце у випадку атаки через флеш.

Зокрема така можливість є в браузерах від Mozilla (в браузерах на движку Gecko), як в старій Mozilla, так і в нових Firefox, в тому числі в Firefox 3.х і 4. З JS кодом для зміни User-Agent в браузері ви можете ознайомитися в мене на сайті.

Даний код я зробив ще в 2003 році. Він змінює значення параметра general.useragent.override. Дана атака спрацює лише локально, але не онлайн. Тобто потрібно змусити користувача зберегти html-сторінку на свій комп’ютер і відкрити її локально (або підсунути її йому різними шляхами для локального відкриття). Про подібні атаки на браузери я вже писав, тому це цілком реально.

З іншої сторони, можна використати Cross Context Scripting (Cross-zone scripting) уразливості в браузерах на движку Gecko, для того щоб віддалено виконати код в локальному контексті й провести зміну User-Agent в браузері. Додам, що при цій зміні в старих Mozilla 1.7.х і попередніх версіях не виникало жодних повідомлень, тому атаку можна було провести приховано, а в Firefox 3.х вже виникає повідомлення (але якщо поставити відповідних чекбокс, то воно більше виникати не буде). Але це не є проблемою, тому що користувача можна обманним чином змусити натиснути Allow, та й багато користувачів взагалі автоматично натиснуть Allow в даному повідомленні.

Атака через ActiveX.

В Internet Explorer і в браузерах на движку IE можна через ActiveX компонент (так само як і в Flash ActiveX компоненті) підмінити заголовок User-Agent. Так само можуть додаватися будь-які інші серверні заголовки. Тому зловмисні компоненти в IE можуть проводити такі атаки.

Атака через підробку User-Agent в браузері вірусами.

Віруси, що потрапили на комп’ютер користувача, можуть змінювати User-Agent в одному або всіх браузерах, що він використовує. В даному випадку відбувається постійна зміна User-Agent, а не при одному запиті, як це має місце у випадку атаки через флеш. Так само можуть додаватися будь-які інші серверні заголовки.

Можливі різні варіанти зміни User-Agent шкідливим програмним забезпеченням. В браузерах Mozilla і Firefox вірус може додати необхідне значення User-Agent в файл prefs.js в папці з профілем користувача. Це також може зробити зловмисник при тимчасовому доступі до комп’ютера користувача.

В файл prefs.js додається (або замінюється існуючий) рядок:

user_pref("general.useragent.override", "XSS payload");

Для атаки на всі браузери можна або інфікувати exe-файли (або dll-файли) браузерів, щоб додати в них функцію, яка задає фіксоване значення User-Agent (що важче), або додати плагін/доповнення до браузеру, що робить дану операцію (що легше). Дана атака також може бути проведена через плагіни/доповнення, які скачуються користувачем з Інтернету - це можуть бути підставні плагіни, які або нічого не роблять (при цьому змінюючи User-Agent), або навіть мають якийсь публічний функціонал (при цьому приховано змінюючи User-Agent), або ж це можуть бути легальні плагіни, в яких є подібний прихований функціонал (що був зроблений автором плагіна, або зловмисником, який включив такий код в плагін).

Атака через проксі, що підроблює User-Agent.

У випадку атаки через проксі, у всіх запитах з браузера проксі може підміняти User-Agent, щоб задати заголовок з атакуючим XSS кодом. Атака буде тривати доти, доки користувач буде використовувати даний проксі (лише у випадку атаки на Ad Muncher відбудеться постійна зміна User-Agent). Так само можуть додаватися будь-які інші серверні заголовки.

Дана атака може відбуватися наступним чином:

а) На комп’ютері користувача встановлена програма, що працює як проксі. Наприклад, така як Ad Muncher (про різні універсальні XSS в якому я писав торік), що вміє підроблювати значення User-Agent. Вірус на комп’ютері користувача, або зловмисник при тимчасовому доступі до його комп’ютера, може змінити налаштування Ad Muncher, щоб задати необхідне значення User-Agent.

б) Користувач задав для свого браузера проксі - це може бути публічний анонімний проксі, що контролюється зловмисником, або користувача обманним шляхом заставили встановити необхідний проксі, чи це зробив вірус, змінивши налаштування браузера. І цей проксі підмінює значення User-Agent.

До речі, при атаці через JavaScript (або вірусами) також можна змінити налаштування проксі в браузері. Зокрема в браузерах на движку Gecko потрібно вказати параметри network.proxy.http, network.proxy.http_port і задати network.proxy.type = 1. Таким чином можна об’єднати атаки 3 і 6 або 5 і 6.

в) Деякі Інтернет провайдери в реальному часі вносять зміни в запити/відповіді, що йдуть від/до користувача. І зловмисний провайдер (або взломаний провайдер) може підмінити значення User-Agent.

г) При MITM атаці, наприклад, при використанні WiFi, також можуть підмінити значення User-Agent.

Заключення.

З вищенаведеного видно, що існує чимало методів підробки User-Agent, зокрема для проведення XSS атак. Тому веб розробникам потрібно завжди слідкувати за безпекою власних додатків. Щоб не допускати Cross-Site Scripting уразливостей, в тому числі при роботі з заголовком User-Agent.

Експлоіт для Firefox 3.6

22:41 03.06.2011

Продовжуючи розпочату традицію, після попереднього відео про експлоіт для Firefox 3.5, пропоную нове відео на веб секюріті тематику. Цього разу відео про eксплоіт для Firefox 3.6. Рекомендую подивитися всім хто цікавиться цією темою.

Exploit Firefox 3.6

В даному відео ролику демонструється використання експлоіта для уразливості в Firefox 3.6, свіжій версії Firefox на момент запису відео. Експлоіт дозволяє проводити віддалене виконання коду в даному браузері.

Атака відбувається при відвідуванні веб сторінки зі шкідливим кодом (що експлуатує дану уразливість). Рекомендую подивитися дане відео для розуміння векторів атак на Mozilla Firefox.

Відправка серверних заголовків у Flash

22:46 02.06.2011

Можливість відправки серверних заголовків, що наявна в Flash, є важливою в контексті веб безпеки. Тому що для браузерів існують флеш плагіни, якими користуються майже 100% користивувачів Інтернет (різними версіями флеш плагіна). І дану можливість можна використати для атак на сайти і веб додатки, зокрема для проведення spoofing та XSS атак.

Для відправки довільних серверних заголовків потрібно використовувати відповідні методи, зокрема метод addRequestHeader класів LoadVars та XML, що з’явилися в AS1 у Flash 6. А починаючи з AS3 для цього потрібно використовувати властивість URLRequest.requestHeaders.

При цьому зазначу, що в мене відправка заголовків працює лише в IE6 та IE7 (і так само вона має працювати в IE8 та IE9), але не в інших браузерах. Що раніше у Flash плеері 8 і 9, що зараз у Flash плеері 10.

Компанія Adobe вже багато років як намагається обмежити даний функціонал - з метою безпеки - щоб його не можна було використати для атаки (але так чи інакше його все рівно з року в рік використовують для цих цілей). Для обмеження Adobe використала два підходи: чорний список (blacklist) заголовків, які не можна використовувати (і він збільшується з роками), та запровадження правила для міждоменної політики. В даному випадку необхідно в міждоменній політиці задавати дозвіл іншим сайтам на відправку заголовків даному сайту (це стосується лише міждоменних запитів і в рамках одного домена обмежень немає).

Більш детально про те, які заголовки були заборонені в яких версіях флеш плеєра, ви можете дізнатися на сторінці ActionScript error when an HTTP send action contains certain headers (Flash Player).

На даний час для версій Flash Player 10.0.22.87 і вище заборонена відправка наступних заголовків: Accept-Charset, Accept-Encoding, Age, Allow, Allowed, CONNECT, Connection, Content-Length, Content-Location, Content-Range, Cookie, DELETE, Date, ETag, Expect, GET, HEAD, Host, Keep-Alive, Last-Modified, Location, Max-Forwards, OPTIONS, ORIGIN, POST, PUT, Proxy-Authenticate, Proxy-Authorization, Proxy-Connection, Public, Range, Referer, Request-Range, Retry-After, Server, TE, TRACE, Trailer, Transfer-Encoding, URI, Upgrade, User-Agent, Vary, Via, WWW-Authenticate, Warning, x-flash-version.

Але при цьому всі інші серверні заголовки дозволені. Що дозволяє відправляти довільні заголовки (окрім вищезгаданих), серед яких можуть бути й такі, які використовується на різних веб сайтах. І це може бути використано для проведення spoofing та XSS атак на дані сайті.

Цікаве чтиво на тему web security

22:41 01.06.2011

Продовжуючи традицію, пропоную вашій увазі цікаві секюріті статті. Щоб ви поповнювали свої знання з веб безпеки.

Добірка цікавого чтива на тему безпеки, в тому числі web security (статті з Вікіпедії):

Методи боротьби з DoS/DDoS атаками

22:44 27.05.2011

В статті Устоять любой ценой: методы борьбы с DoS/DDoS-атаками розповідається про DoS і DDoS атаки. Та про методи протидії даним атакам, зокрема на системах Linux та Unix.

В даній статті розглянуті наступні аспекти боротьби з DoS/DDoS атаками:

  • Анатомія DoS-атак.
  • Методи боротьби.
  • Боротьба з flood-атаками.
  • Універсальні поради.
  • Конкретні дії при DDoS-атаці.
  • Боротьба з DDoS у FreeBSD.
  • Накрупніші ботнети.
  • Та інша цікава інформація на дану тему.

Як я регулярно згадую в своїх щорічних підсумках хакерської активності в Уанеті, DDoS атаки щороку трапляються в Уанеті. Тому адмінам сайтів і веб серверів слід бути обізнаними в цьому питанні.

Експлоіт для Firefox 3.5

22:43 26.05.2011

Продовжуючи розпочату традицію, після попереднього відео про експлоіт для Internet Explorer 8, пропоную нове відео на веб секюріті тематику. Цього разу відео про eксплоіт для Firefox 3.5. Рекомендую подивитися всім хто цікавиться цією темою.

Firefox 3.5 exploit

В даному відео ролику демонструється використання експлоіта для уразливості в Firefox 3.5, останній версії Firefox на момент запису відео. Експлоіт дозволяє проводити віддалене виконання коду в даному браузері.

Атака відбувається при відвідуванні веб сторінки зі шкідливим кодом (що експлуатує дану уразливість). Рекомендую подивитися дане відео для розуміння векторів атак на Mozilla Firefox.

Цікавий метод проведення XSS атак в Firefox

23:58 23.05.2011

Ще з 2006 року мені відомо про один метод проведення XSS атак в Firefox, що дозволяє обходити деякі захисні фільтри. Це метод з використанням незакритого тега, про який я згадував стосовно різних сайтів і веб додатків, зокрема AltConstructor. Він працює лише в браузерах компанії Мозіла - в Mozilla, Firefox та інших браузерах на движку Gecko.

І от 18.03.2011, під час секюріті аудиту, я виявив інший просунутий метод проведення XSS атак, що є розширення вищезгаданого методу. Цей метод передбачає використання подвійного незакритого тега. Раніше мені здавалося, що спрацює лише один незакритий тег, але в березні я виявив, що і два і більше незакритих тегів спрацюють для проведення XSS атаки (а в деяких випадках необхідно використати як раз декілька тегів, зокрема коли треба вийти з одного тегу, щоб мати можливість виконати код).

XSS:

Атака виглядає наступним чином:

http://site/?p=%3C/title%20%3Cbody%20onload='alert(document.cookie)'

Даний метод (як і метод з одним незакритим тегом) працює в Mozilla 1.7.x, Firefox 3.0.19, 3.5.11, 3.6.8 (та попередніх версіях браузерів). Але не в Firefox 4.0b2, IE6, IE7, IE8, Chrome 1.0, Opera 10.62.

P.S.

Як я перевірив, в Firefox 3.5.19 та 3.6.28 дана атака також працює.

Убезпечення веб браузера

19:24 21.05.2011

В своїй презентації Securing Your Web Browser, Will Dormann і Jason Rafail розповідають про безпеку веб браузерів. Про функціонал браузерів та ризики з ним пов’язані, та як потрібно налаштовувати браузери для їх убезпечення від даних ризиків.

Експлоіт для Internet Explorer 8

19:04 12.05.2011

Продовжуючи розпочату традицію, після попереднього відео про захист від небезпечних сайтів, пропоную нове відео на веб секюріті тематику. Цього разу відео про eксплоіт для Internet Explorer 8. Рекомендую подивитися всім хто цікавиться цією темою.

Pwn2Own 2010 Windows 7 IE8 exploit

В даному відео ролику демонструється використання експлоіта для уразливості в IE8, що був показаний на Pwn2Own 2010. Експлоіт дозволяє проводити віддалене виконання коду в даному браузері (при цьому процес експлуатації показаний достатньо детально).

Атака відбувається при відвідуванні веб сторінки зі шкідливим кодом (що експлуатує дану уразливість). В результаті атаки на користувача IE8, зокрема у відео браузер запущений на Windows 7, нападник виконав довільний код (в даному випадку запустив calc.exe). Рекомендую подивитися дане відео для розуміння векторів атак на Internet Explorer.

Цікаве чтиво на тему web security

19:25 09.05.2011

Продовжуючи традицію, пропоную вашій увазі цікаві секюріті статті. Щоб ви поповнювали свої знання з веб безпеки.

Добірка цікавого чтива на тему безпеки, в тому числі web security (статті з Вікіпедії):