- Короткий огляд
- 1 STEAM
- 2 браузерних протокол Steam
- 2.1 Стратегія 1: веб-браузери
- 2.2 Стратегія 2: альтернативи
- 3 Уразливості
- 3.1 Команди браузерного протоколу Steam
- 3.2 Параметри командного рядка браузерного протоколу Steam для запуску ігор
- 3.2.1 Експлуатація ігор 1: движок SOURCE
- 3.2.2 Експлуатація ігор 2: движок UNREAL
- 3.2.3 Експлуатація ігор 3: APB RELOADED
- 3.2.4 Експлуатація ігор 4: MICROVOLTS
- 3.3 Демонстрація
- 4 Можливі виправлення і обхідні шляхи
- 4.1 На стороні користувача
- 4.2 На стороні Steam
- 4.3 З боку ігр
- 5 Висновок
Наша взаимовыгодная связь https://banwar.org/
Небезпечність браузерного протоколу Steam (віддалена експлуатація локальних багів)
В даному документі ми розкриємо і продемонструємо новий цікавий спосіб перетворення локальних багів і можливостей в віддалено експлуатовані уразливості, заснований на використанні добре відомої платформи Steam як вектор атаки на віддалені системи
Автори: Luigi Auriemma і Donato Ferrante
Короткий огляд
В даному документі ми розкриємо і продемонструємо новий цікавий спосіб перетворення локальних багів і можливостей в віддалено експлуатовані уразливості, заснований на використанні добре відомої платформи Steam в якості вектора атаки на віддалені системи.
1 STEAM
Цитата з Вікіпедії: "Steam - платформа для цифрової дистрибуції, технічних засобів захисту авторських прав, багатокористувацьких ігор і обміну інформацією, розроблена Valve Corporation". Через Steam користувачі можуть купувати ігри, завантажувати демонстраційні версії і безкоштовні ігри, шукати мережеві матчі, обмінюватися інформацією з іншими користувачами, ділитися статистикою і так далі. Steam - платформа цифрової дистрибуції з найбільшою кількістю користувачів (близько 50 мільйонів), яка підтримує кілька платформ: Windows, MacOS, PS3, мобільні пристрої і Linux.
2 браузерних протокол Steam
Steam, як і інше програмне забезпечення, використовує свій власний обробник URL, щоб інтегрувати в свою платформу заснований на веб-технологіях функціонал. URL-схема steam: // використовується для:
- Установки і видалення ігор
- Резервування, перевірки і дефрагментації ігрових файлів
- З'єднання з ігровими серверами запуску ігор
- Виходу на різні сторінки і розділи, де можна купити або активувати гри, завантажити утиліти, ознайомитися з новинами, подивитися профілі користувачів і т. Д.
Браузерні протокол Steam включає в себе кілька команд, більшість з яких перераховано на сайті Valve разом з неоновленими списком ігор , Які використовують Steam в якості платформи. Даний список команд не є вичерпною довідкою по всім командам, доступним в браузерному протоколі Steam, оскільки деякі команди на сайті Valve документовані лише частково або зовсім не задокументовані.
У наступних розділах ми збираємося розглянути те, як Steam URL обробляються браузером і іншим ПО, щоб як слід зрозуміти можливі способи запуску віддалених атак через такі URL. На малюнку 1 дан огляд одного з можливих сценаріїв атак.
Малюнок 1. Дистанційна експлуатація команд протоколу Steam: огляд
2.1 Стратегія 1: веб-браузери
Спочатку ми перевірили, як найбільш відомі браузери ведуть себе при обробці зовнішніх (і не виконує жодних самими браузерами) протоколів URL (тобто, rtsp: //, mms: //, steam: // і т. Д.).
Згідно з результатами з таблиці 1, всі ті браузери, які запускають зовнішні обробники URL безпосередньо, без попереджень, і ті, які засновані на движку Mozilla (на кшталт Firefox і Seamonkey), є чудовим вектором для здійснення дзвінків браузерного протоколу Steam. Крім того, для браузерів на зразок Internet Explorer і Opera все ще можливо запобігти відображення шкідливої частини URL в попереджуючому повідомленні шляхом вставки декількох прогалин між steam: // і власне URL.
Internet Explorer Відображається попередження, що включає URL, а в разі IE9 можливе додаткове попередження ( "захищений режим") без будь-яких подробиць Firefox URL не відображається, тільки запит підтвердження (без попереджень) Chrome Попередження з докладним описом URL і викликається програмою Opera Попередження, що включає тільки 40 символів URL Safari Безпосереднє виконання без попереджень Webkit Безпосереднє виконання без попереджень MaxThon Безпосереднє виконання без попереджень Avant Безпосереднє виконання без п редупрежденій Lunascape Безпосереднє виконання без попереджень SeaMonkey Див. Firefox PaleMoon Див. Firefox SRWare Iron Див. Chrome
Таблиця 1: поведінка різних браузерів при запуску обробника протоколу Steam
2.2 Стратегія 2: альтернативи
Крім веб-браузерів існують і інші програми, які можна використовувати для здійснення дзвінків до зовнішніх обробникам протоколів. Більшість з них (але не всі) засновані на використанні браузера за замовчуванням.
Ось деякі програми (протестовані в ході нашого дослідження), які не показують жодних попереджень при виконанні викликів зовнішнього протоколу URL.
- Steam browser (свій веб-браузер Steam)
- Вбудований браузер RealPlayer
- Інші програми, які можуть обробляти html-сторінки
На нашу думку, Steam browser є вкрай цікаву альтернативу звичайним браузерам, проте має наступні обмеження:
- Веб-сайти, які можна відвідувати через Steam browser, в основному обмежені доменами, що належать Valve, наприклад, steampowered.com і steamcommunity.com.
- Valve запобігає ін'єкції в протоколі steam: // шляхом виконання кількох перевірок над посиланнями, наданими користувачами.
- Посилання на зовнішні сайти перенаправляються викликами steam: // openurl / website, які виконуються засобами браузера за замовчуванням, а не браузера Steam.
Для повноти варто згадати, що веб-браузер, який використовується в ігровому оверлей-інтерфейсі Steam, діє інакше і дозволяє повністю іноріровать всі сайти, за винятком посилань steam: //, так що даний різновид браузера не може бути використана як вектор атаки. А ми хочемо мати можливість відкривати посилання, які не призначені для відкриття в браузері Steam.
Якщо ви знайомі з Steam, ви знаєте, що кожен користувач платформи має сторінку персонального профілю, яка може включати в себе інформацію, зображення і відеоролики. У той час як зображення, надані користувачами, завантажуються на сервера Steam, відеоролики представляють собою лише посилання на ролики YouTube. Якщо користувач спробує подивитися відеоролик, прикріплений до якого-небудь профілю, він отримає сторінку, яка містить тільки відео з YouTube без коментарів або опису. Але якщо користувач клацне на заголовку відеоролика (наприклад, щоб залишити коментарі), відкриється нове вікно з усіма подробицями, що стосуються даного ролика, включаючи коментарі і опис. Так що, зловмисник може залишати посилання на зовнішні хости, які віддалено викликають команди Steam, шляхом використання звичайних steam: // URL. Відповідно до своєї стратегії браузер Steam буде виконувати виклики обробника протоколу без будь-яких попереджень. На малюнку 2 даний підхід резюмирован графічно.
Малюнок 2: дистанційна експлуатація через браузер Steam і перенаправлення на YouTube.
3 Уразливості
На даний момент ми вже знаємо переваги і недоліки різних способів запуску steam: // URL, тому ми можемо почати досліджувати деякі уразливості і те, що ми можемо отримати, експлуатуючи їх. У наступних розділах будуть описані деякі нові уразливості, які ми виявили в ході нашого дослідження. Відзначимо, що всі вони можуть експлуатуватися віддалено, використовуючи в якості тригера браузерні протокол Steam.
3.1 Команди браузерного протоколу Steam
Команда retailinstall є недокументованою можливістю (НЕ багом) браузерного протоколу Steam, яка дозволяє установку і відновлення резервних копій з локальної директорії. Один з її параметрів - шлях, який використовується для завдання локальної директорії, проте, ця директорія цілком може бути мережевий папкою, розташованої на віддалений хост. Коли Steam запускає команду retailinstall, він перевіряє і завантажує два файли: splash.tga (заставка) і sku.sis (установник). Користувач бачить заставку відразу після запуску даної команди (рис. 3).
Малюнок 3: Steam завантажує spash.tga під час виконання команди retailinstall
Функція Steam, відповідальна за обробку заставок, містить уразливість переповнення цілочисельного значення при обробці неправильно сформованих TGA-файлів. Проблема полягає в функції LoadTGA бібліотеки vgui2_s.dll, яка завантажує файли TGA в пам'ять (рис. 4). В результаті відбувається переповнення буфера в купі, яке дозволяє виконання шкідливого коду в рамках процесу Steam.
Малюнок 4: асемблерний код, відповідний уразливості до целочисленному переповнення в функції LoadTGA.
3.2 Параметри командного рядка браузерного протоколу Steam для запуску ігор
В Steam можна запускати встановлені гри, використовуючи одну з наступних команд steam: //
- run
- rungameid
- runsafe
- rungame
Як і більшість програм, ігри, доступні для платформи Steam, приймають аргументи командного рядка. Steam дозволяє вам передавати ігор аргументи, однак не існує офіційної документації по стратегії передачі аргументів. Виняток становить команда -applaunch, яка не може вважатися універсальним і «тихим» способом через різних методів кодування URL, що застосовуються веб-браузерами.
Перераховані чотири команди, які можна використовувати для запуску ігор, здебільшого недокументованих, проте ось як виглядають формати цих команд:
- steam: // run / id / language / url_encoded_parameters
- steam: // rungameid / id / language_bug / url_encoded_parameters
- steam: // runsafe / id
- steam: // rungame / id / lobby_id / parameters
Для віддалених середовищ підходять тільки команди run і rungameid, які беруть аргумент url_encoded_parameters - рядок, закодовану в форматі URL і передану функції Q_URLDecode, яка зберігає результат декодування в буфер розміром 128 байт. Функція Q_URLDecode дозволяє вам використовувати будь-які символи, а також демонструє, що існують команди, які використовуються віддалено через браузер. Обмеження розміру параметрів 128 символами не впливає на експлуатацію будь-яких з наведених нижче вразливостей, оскільки, якщо нам знадобиться більше місця, ми можемо просто використовувати JavaScript для з'єднання фрагментів команд.
3.2.1 Експлуатація ігор 1: движок SOURCE
Як перший приклад експлуатації ігор через Steam ми вибрали ігровий движок, яким користується найбільше число гравців: Source .
Ось найбільш відомі ігри, засновані на даному движку: Half-Life 2, Counter-Strike: Source, Half-Life: Source, Day of Defeat: Source, Team Fortress 2, Portal 2, Left 4 Dead 2, Dota 2, Alien Swarm , SiN Episodes, Dark Messiah of Might and Magic, The Ship, Zombie Panic! Source, Age of Chivalry, Synergy, DIPRIP, Eternal Silence, Pirates Vikings & Knights II, Dystopia, Insurgency, Nuclear Dawn і Smashball.
Більшість з цих ігор розуміють базові команди движка Source, які ми використовуємо для створення файлів зі спеціальним вмістом в довільних локаціях. Для експлуатування даного движка ми вибрали наступні опції командного рядка:
- + Con_log fi le, дозволяє визначити файл, в який буде записано вміст консолі (не може перебувати у віддаленій папці Windows)
- + Echo, використовується для приміщення в файл журналу наданих даних
- + Quit, (необов'язкова) закриває гру
- -hijack, (необов'язкова) корисна в разі, коли користувач вже запустив екземпляр гри, і ми хочемо послати йому додаткові команди, які обмежені 128 байтами через функції Q_URLDecode
Для експлуатації даного бага ми створюємо в папці автозапуску облікового запису користувача файл з розширенням .bat, який буде запускати наші команди, впроваджені через опцію + echo, при наступному вході користувача в систему. Існує також цікавий сценарій атаки на виділені сервери, який полягає у вказівці файлу motd.txt гри в якості файлу журналу і запуску команди cvarlist, яка вивантажить всі змінні гри в даний файл, який бачимо для будь-якого гравця, що підключається до сервера. Team Fortress 2 - одна з найбільш популярних ігор, заснованих на даному движку. Вона до того ж є безкоштовною.
3.2.2 Експлуатація ігор 2: движок UNREAL
Малюнок 5: дистанційна експлуатація движка Unreal через Steam
Для ігор, заснованих на движку Unreal ми вибрали таку вразливість, яка має місце при отримання контенту з віддалених комп'ютерів (по протоколу WebDAV або із загальної папки SMB), який ми можемо завантажити, використовуючи наступні параметри командного рядка:
steam: // run / ID / server nnHOSTnevil.upk -silent
Насправді цей движок має безліч вразливостей до целочисленному переповнення (можливо скоро ми їх задокументуємо), які дозволяють виконання шкідливого коду.
Повний список параметрів командного рядка движка Unreal доступний онлайн .
3.2.3 Експлуатація ігор 3: APB RELOADED
All Points Bulletin - добре відома масова розрахована на багато користувачів онлайн-гра (MMOG), яка має регульований можливість автоматічечского поновлення. В даному випадку ми встановили через командний рядок довільний сервер оновлень і експлуатуємо вразливість виходу за межі директорії для перезапису або створення файлу з бажаним контентом в потрібному місці.
Платформа Steam включає безліч безкоштовних MMO-ігор на зразок APB, так що кількість їх користувачів велике, і більшість з цих ігор можуть експлуатуватися подібним чином. Крім того, більшість цих ігор використовують механізми запобігання ігрового шахрайства (anti-cheating) і, тому, вимагають запуску з правами адміністратора (ми знаходимося в ігровому світі, в якому є безліч людей, що не володіють знаннями про безпеку, але володіють такими правами), що дозволяє скомпрометувати систему цілком.
3.2.4 Експлуатація ігор 4: MICROVOLTS
MicroVolts - ще один приклад відомої MMO-гри, експлуатованої через автообновление за допомогою іншої уразливості виходу за межі директорії.
3.3 Демонстрація
Запрошуємо відвідати канал vimeo.com/revuln для перегляду демонстраційного відео , Що ілюструє всі проблеми, порушені в даному документі.
4 Можливі виправлення і обхідні шляхи
В даному розділі ми пропонуємо деякі рішення, що дозволяють уникнути проблем, знайдених нами в результаті нашого дослідження, або, хоча б, зменшити їх вплив.
4.1 На стороні користувача
Проблема може бути обмежена шляхом відключення обробника URL-схеми steam: // або використання браузера, який не дозволяє прямого запуску браузерного протоколу Steam.
4.2 На стороні Steam
Рішенням може стати заборона передачі аргументів командного рядка стороннім програмам і недокументованих команд із зовнішніх і недовірених джерел на кшталт Internet.
4.3 З боку ігр
Головна проблема браузерного протоколу Steam в тому, що він дозволяє зловживати локальними можливостями ігор (наприклад, використанням журнальних файлів), так що розробники в даній ситуації не можуть нічого вдіяти, за винятком спроб зменшити можливі проблеми шляхом:
- Адаптації методів безпечного програмування до коду, не пов'язаного з мережевим взаємодією
- Використання перевірки сертифікатів при автоматичному застосуванні латочок
5 Висновок
В даному документі ми довели, що поточна реалізація механізму обробки браузерного протоколу Steam є відмінним вектором атаки, який дозволяє атакуючим експлуатувати локальні проблеми віддалено. В якості підтвердження ефективності даного нового вектора атаки ми описали п'ять нових віддалено експлуатованих вразливостей, включаючи одну в самій платформі Steam і дві в широко використовуваних ігрових движках (Source і Unreal). Через великий аудиторії (більше 50 мільйонів чоловік) і підтримки різних платформ, включаючи Windows, MacOs і Linux і кількості зусиль, необхідних для експлуатації багів через команди браузерного протоколу Steam, Steam може розглядатися в якості високоефективного вектора атаки.