*99823*

Современные информационные технологии.

Информационная безопасность.

Гусєв. М.А

Національний Авіаційний Університет, Україна

Підробка заголовків HTTP запиту з допомогою Flash ActionScript

Вступ

Flash Player - популярне доповнення до браузера від компанії Adobe. У цій статті розглядаються Flash 10-ї і 11-ї версії, які встановлені більш ніж на 94% робочих станцій, що мають вихід до Інтернету (згідно з опитуванням NPD Online Survey в квітні 2011 року). Flash анімація поставляється у вигляді файлів SWF (ShockWave File). Adobe також розробив мову ActionScript, що нагадує Javascript, яка використовується всередині Flash роликів.

 ActionScript дозволяє посилати довільні HTTP запити до довільних сайтів через Web браузер, що програє флеш-ролик. У результаті можна сформувати запит до сайту, який не можна виконати через звичайний Javascript код. Також у запиті можна задати довільні HTTP заголовки в вихідному HTTP запиті.

Надсилаємо довільний HTTP заголовок через Flash:

Наступний синтаксис в ActionScript 2.0 дозволяє послати GET запит (у нашому прикладі на сайт http://www.vuln.site/some/page.cgi?p1=v1&p2=v2) з довільним HTTP заголовком (Foo: Bar).

var req:LoadVars=new LoadVars();

req.addRequestHeader("Foo","Bar");

req.send("http://www.vuln.site/some/page.cgi?p1=v1&p2=v2", "_blank","GET");

Схожий синтаксис використовується для відправки POST запитів (з тим же самим заголовком, з тілом запиту a = b & c = d):

var req:LoadVars=new LoadVars();

req.addRequestHeader("Foo","Bar");

req.decode("a=b&c=d");

req.send("http://www.vuln.site/some/page.cgi?p1=v1&p2=v2",

         "_blank","POST");

Запит надсилається з браузера, що виконує Flash об'єкт. Будь-які куки, які зазвичай відправляє браузер, будуть також надіслані в цьому випадку. Посилається також User-Agent браузера і всі стандартні заголовки браузера. Також підтримуються HTTPS-запити.

Ці приклади перевірені і працюють з Microsoft IE 8.0, Microsoft IE 9.0 і FireFox 9.0.1, зі встановленими Flash 11.1.102.55 плагінами.

В IE також існує можливість переписати "нормальні" заголовки браузера, додаючи addRequestHeader з новим значенням заголовка, в т.ч. заголовки Referrer і User-Agent. У FireFox 9.0.1, при використанні addRequestHeader (), заголовки будуть додані до HTTP запиту.

  // Один User-Agent в IE 8.0, 2 User-Agent в FF 9.0.1

  req.addRequestHeader("User-Agent","Hacker/1.0");

  // Один User-Agent в IE 8.0, 2 User-Agent в FF 9.0.1

  req.addRequestHeader("Referer","http://somewhere/");

В IE, також можна переписати деякі чутливі заголовки, (наприклад Host і Content-Length), додаючи двокрапку до імені заголовка:

         req.addRequestHeader("Host:","foobar.site");

Вплив на безпеку:

Здатність атакуючого змусити браузер жертви послати довільні HTTP запити до довільних сайтів з довільними HTTP заголовками впливає на наше розуміння безпеки Web додатків - як на оцінку пов'язаних з безпекою явищ, так і на обгрунтованість деяких механізмів безпеки.

Важливо зрозуміти, що цей тип нападу по суті не є звичайною XSS атакою, так як не впливає на міжсайтового довіру всередині Flash об'єкту, або на довіру між Flash об'єктом та впровадженої HTML сторінкою. Напад лише грунтується на можливості послати запити з Flash об'єкта до довільного URL з довільними HTTP заголовками. Така можливість сама по собі є проблемою, тому що дозволяє атакуючому посилати посилання (до HTML сторінці впровадженої в FLASH об'єкті, або безпосередньо до Flash об'єкту, розташованого на Web сайті атакуючого), яка виконає флеш об'єкт в браузері жертви. Цей Flash об'єкт пошле HTTP запит (з HTTP заголовками на вибір атакуючого) до цільового Web сайту, і це, в свою чергу, поставить під загрозу безпеку браузер жертви.

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

Приклад - "Expect" заголовок:

Раніше була виявлена ??уразливість в Apache 1.3.34, 2.0.57 і 2.2.1, що дозволяє впровадити HTML дані (включаючи довільний Javascript код) через Expect заголовок. Однак виробник порахував, що уразливість неможливо поексплуатувати, бо не існує способу змусити браузер послати змінений Expect заголовок до цільового Web сайту. Однак, використовуючи Flash об'єкт, атакуючий може змусити браузер послати такий запит, змусивши жертву кликнути на посилання http://www.evil.site/attack.swf. Цей URL містить FLASH об'єкт, який запустить наступний ActionScript код:

  var req:LoadVars=new LoadVars();

  req.addRequestHeader("Expect", "<script>alert('gotcha!')</script>");

  req.send("http://www.target.site/","_blank","GET");

Цей ActionScript пошле запит з браузера жертви до цільового Web сайту (www.target.site) з Expect заголовком, що містить довільний HTML (Javascript) код. Якщо цільовий Web сайт працює на вразливою версією Apache, то в результаті буде можливо здійснити атаку міжсайтового скриптинга. XSS атака можлива проти Apache 1.3.34, 2.0.57 і 2.2.1, якщо браузер клієнта IE або Firefox і підтримує Flash 10 / 11 +). У разі Apache 2.0/2.2, XSS відповідь буде повернуто тільки після закінчення часу очікування (звичайно кілька хвилин). Уразливість усунуто в останніх версіях Apache - 1.3.35, 2.0.58 і 2.2.2 відповідно).

Висновок   

Погана ідея довіряти заголовкам HTTP запиту, які надіслані браузером. Фактично можна підмінити будь заголовок, якщо клієнта можна змусити запустити спеціально оброблений Flash ролик, і це можливо на понад 80% комп'ютерів, підключених до Інтернет.

Література

1.     Колин М. ActionScript 3.0 для Flash. Подробное руководство. – СПб.:Питер, 2008. – 994 с.

2.     Джои Л., Деррон Ш., Кейт П. ActionScript 3.0. Сборник рецептов. – СПб.:ПитерКнига, 2010. – 606 с.