Как стать автором
Обновить

Комментарии 92

НЛО прилетело и опубликовало эту надпись здесь
Вот буквально спрашивал в комментах к прошлой статье — забанили ли?
В итоге меня забанили Valve на H1 — я не могу участвовать в их программе по отклонению уязвимостей (остальной H1 мне доступен).

Получил ответ =) Класс, что сказать, отличный подход. В следующий раз продайте на черном рынке найденный у них баг, желательно подешевле, чтобы как можно больше блекхетов заюзали баг и поюзали их. Раз по-человечески не реагируют.
Я не согласен с походом Valve, но и использвания блекхатами тоже не одобряю. Я надеюсь, что они просто одумаются и нормально пофиксят.

А не проще подложить какую-нибудь неявно используемую библиотеку, например xinput?

Проще, но сервис копирует именно steamservice.dll, а не что-то еще и на имя нельзя повлиять.
уязвимость может работать без физического доступа взломщика к компьютеру и системному реестру?
Без проблем может, к примеру я создаю якобы суперпупер полезную программу которой не требуются права админа и при попытке её запуска она рестартует сервис стима и выполняет нужный ей код с правами системы…
Я может невнимательно читал, но зачем переделывать симлинки и пихать настоящую библиотеку в разные папки, если можно просто поймать шестой оплок? Или нельзя?

Чтобы Steam проснулся — нужно снять оплок. Но в таком случае можно уже не успеть поставить следующий. Значит, надо ставить второй оплок перед снятием первого. А для этого нужны два разных файла, иначе (тут я уже гадаю) либо второй оплок не встанет, либо Steam не проснётся.

Примерно так и есть. Надо успеть пропустить пять обращений перед шестым. Чтобы сделать это гарантированно — мы ловим все шесть по-очереди через оплоки.
После загрузки сервис Стима все же понимает, что ему подсунули липу, и завершает работу, поэтому полезная нагрузка из моей dll не успела выполниться.

Пришлось немного пореверсить, и оказалось, что сервис после загрузки dll проверяет существование функций

Больше похоже, что сервис просто получает из библиотеки эти две функции и выполняет их. То есть цели "проверить что не подсунули липу" не было, просто без этих функций работать нечему.

В общем, да. Просто он завершается сразу по обнаружению отсутствия функций, поэтому это идёт как одна из проверок dll.
Пока Valve делает покерфейс, что я могу сделать для защиты компов детей от этой уязвимости?
Используются ограниченные учетки на виндовс 7 и 8.

Удалить Steam, больше ничего в такой ситуации не сделать.


Ну или смириться с тем, что учётки детей на самом деле не ограниченные, а немножко системные...

Удалить Steam
Я не хочу массовых домашних волнений и несанкционированных митингов.

Тогда просто внесите стим в реестр запрещенных к запуску у вас на компьютере программ :)

НЛО прилетело и опубликовало эту надпись здесь

Можно попробовать настроить те самые права доступа к папке bin вроде. Убрать права на запись у не-админов. И в реестре то самое.


Следует отметить, что именно "убрать права", а не "запретить", потому что Админ наследуется от простого юзера, а у запрета приоритет выше.

А Steam не восстановит ли права обратно?

Восстановит однозначно. Вопрос когда. Если при запуске той же dll с привилегиями, то смысла нет. А если при своем обновлении, когда я ему даю права через UAC, то норм. Обновился и потом снова поправить права.
При запуске Стима предложит восстановить права на папку, вроде даже с последующим запросом UAC.
И если отказаться, то не запускается?
Можно нажать Ignore и сам клиент продолжит работать.
Убрать — это свойства папки — безопасность — дополнительно — далее удаляем строчку с соответствующим пользователем (группой)?
Да. Но именно убрать галочку с «разрешить», а не поставить на «запретить».
Поясните, плз, разницу. Выше Вы написали, что у запрета приоритет выше, тогда почему не воспользоваться?

Потому что запрет получится всем пользователям, включая администраторов.

Админ наследуется от Юзера. То есть если запретить что-то Юзеру, ты запрещаешь и Админу. И даже если отдельно разрешить это админу — не сработает, потому что у запрета приоритет выше.

Вот так я реализовал READONLY для не-администраторов
image

Спасибо, понял. Жаль ничего не могу, кроме спасибо :)

Еще конечно остается вопрос, почему админ наследует права от юзера, но я готов принять на веру сумрачный гений от мелкомягких.
почему админ наследует права от юзера

Потому что он является пользователем компьютера же.

Подразумевается что администратор это пользователь имеющий большие права.
А не что пользователь это урезанный администратор.
Запретить запуск приложений из не доверенных папок + запретить запись в доверенные папки учёткам детей. Если код не сможет запустится — он не сможет поднять привилегии (а если сможет — то у вас и без поднятия привилегий будет достаточно проблем).
Я этого осознанно не делаю. Ну зашифруется все, до чего сможет дотянуться с этими правами. Это комп дитятки и папка на НАСе. Ну и что? Ребенок потеряет сейвы игр (подозреваю, что не все) и какую-то еще несданную домашку. Зато будет урок.
Прощу прощения у комментатора, чей комментарий я случайно отклонил. У него был вопрос зачем столько файлов в жонглировании.
b4 — папка с нагрузкой, без этого файла нельзя
b2 и b3 — нужны для тасовки между оплоками.
b1 — нужен поскольку Steam первый раз открывает файл эксклюзивно и на этот файл больше нельзя поставить оплок, а, значит, он не будет участвовать в жонглировании.
Спасибо за разъяснение
Боже, да кому какое дело до поднятия привилегий на десктопной машине? Если злоумышленник может запустить произвольный код на моей машине — я уже в жопе, не важно с привилегиями или нет. Это примерно из той же области что висячий замок на холодильнике, чтобы злоумышленник не смог похитить мои помидоры. Valve порой творит полную херню, но в данном случае я целиком на их стороне — плевать на такую уязвимость.

Вы, наверное, сидите под админом с выключенным UAC? Тогда для вас это и правда ни разу не уязвимость.


Но ведь не все так поступают. А Steam, выходит, одним своим существованием перечеркивает последние 13 лет улучшения безопасности windows.

Даже если сидеть не под админом и со включенным UAC — запуск произвольного кода может натворить достаточно неприятностей, потому что ко всем пользовательским данным есть доступ без повышения привилегий. Или вы искренне считаете что на компьютере без стима можно запускать что угодно и вы будете в полной безопасности? Тогда вас может однажды ждать большой (но не очень приятный) сюрприз… Надеюсь вы хотя бы бэкапы делаете.
На десктопе — только как защита от не-злонамеренного дурака, чтобы пользователь или криво написанный софт случайно не поломал всю систему.
На сервере — ещё и для защиты от несанкционированного доступа пользователей к системе и данным других пользователей. В принципе, то же верно для общественного компьютера.
В первом случае поднятие привилегий неважно — хотя бы потому, что пользователь может сам нажать подтверждение на поднятие привилегий, и никто ему не помешает сделать эту глупость.
Во втором случае — это действительно серьёзная уязвимость. Но благо на серверах стим не запускают. Хотя вот пока всё это писал, понял, что эта уязвимость таки будет существенной в одном случае — для авторизованных компьютерных клубов, предоставляющих доступ к играм стим на повременной основе за деньги. С другой стороны, если в этих клубах не настроен запрет запуска посторонних запускаемых файлов — они сами себе злобные буратины. Да и не знаю если честно, есть ли ещё такие клубы…
С другой стороны, если в этих клубах не настроен запрет запуска посторонних запускаемых файлов — они сами себе злобные буратины.

А такой запрет и не получится сделать: папка стима же полна автоматически обновляющихся исполнимых файлов, как там отловить посторонние?

И что? То, что стим может туда писать — не значит что и пользователь должен иметь такую возможность.

Так ведь права писать туда есть именно что у любого пользователя. Собственно, на этом эффекте обсуждаемый эксплойт и работает.

Права писать туда можно поменять. И если это не домашний ПК, а ПК в клубе — НУЖНО поменять. И эксплоит работает не на этом эффекте. В описанном эксплоите предполагается что злоумышленник может запустить произвольный код на ПК, и с помощью обмана сервиса Steam поднять себе привелегии до суперпользователя. Но сама по себе эта уязвимость НЕ ДАЁТ никаких дополнительных возможностей по запуску произвольного кода. Смогли запустить код = стали админом. Не смогли запустить код = пошли плакать в уголке. Так вот, речь о том, что в клубе, вообще говоря, должны быть приняты меры, чтобы пользователь НЕ МОГ запустить произвольный код. Да, этот эксплоит действительно может попортить жизнь владельцам клубов, потому что они могли закономерно не принимать таких мер, рассчитывая на то, что UAC защитит их проблем, а никаких персональных данных на их ПК нет, и можно позволить пользователям запускать любой код. Если в добавок к этому перезагружать ПК перед каждым новым пользователем — проблем не будет. С этим эксплоитом — да, владельцы клубов с такой политикой могут получить определённые проблемы. Но, в общем-то, только они.
По вашему UAC нельзя обойти?
github.com/hfiref0x/UACME

Все эти способы уже исправлены.

Мой там под номером 32 и он не исправлен. Как и пачка других.

И правда… Но я все равно не считаю это поводом увеличивать число способов обхода.

Согласен.
AppLocker/SRP тоже перестаёт работать благодаря Steam, а эксплоит в браузере сразу знает куда писать нагрузку.

Хммм, а в steam on linux данная уязвимость присутствует?

Что-то не могу сообразить, от какого юзера под виндой запускается стимсервис
Сейчас посмотрел — бинарника с названием steamservice я вообще не вижу
Для проверки даже запустил игру и посмотрел дерево
Первый скрин с фильтром по имени, второй — без


Немного скринов


При чём тут вообще игра? Steam Client Service — это на винде служба, значит на линуксе это должен быть демон.

Разве демон не будет висеть в процессах?

Не обязательно. Он же может по запросу стартовать. Например, при установке или обновлении игры.

Попробовал установить игру, ничего похожего не появилось. Хотя может я что-то неправильно делаю, но ни во время загрузки, ни сразу после нее, ни при первом запуске ничего не появилось

> значит на линуксе это должен быть демон.
В линукс версии нет никаких демонов или сервисов. Клиент на 100% работает от имени пользователя. Все файлы клиента хранятся в папке пользователя.

В линуксе стим по-моему работает чисто в userspace и рута никогда не дёргает.

«Пока гром не грянет мужик не перекрестится». Ой чувствую проучат steam за такое отношение к созданию проблем. Мы уже тут две уязвимости имеем, а они говорят что их нет.
Повышение прав вредоносного ПО через определенную уязвимость есть вторая стадия его жизни. Даже при условии что проникновение в систему не возможно в принципе, нельзя оставлять возможность неконтролируемого повышения прав.
Это нас так в колледже учили. У них походу этому вообще не учат. «Ребят, к нам голодный тигр бежит! Может пристрелим его, пока он нас не сожрал? ЧТО?! ВАМ ЛЕНЬ РУЖЬЕ ЗАРЯДИТЬ?!»
Они видать ещё не попадали под такую ситуацию, при которой из-за их уязвимости производились крупные преступления. Но как говорится — всё бывает в первый раз.

Я поражён таким отношением Valve как к критическим уязвимостям, так и к пользователям, их нашедшим. На вашем месте я бы продублировал бы английский вариант этой статьи на Reddit. В последнее время компании чаще начинают чесаться только после ажиотажа на подобных ресурсах, а не на профильных.

+1 к статье на Реддите.

Когда Valve решила дропнуть поддержку Ubuntu вместо того, чтобы наконец сделать 64-битный стим, я сильно озадачился. Но после этой новости я просто охренел.

не поверите но стиму 64 битным стать не сложно, но при этом превратятся в «тыкву» все 32 битные игры. А пользователи купившие эти игры после такого в восторг не придут.
  1. Кто мешает сделать клиент 64бит, но написать 32бит либы для совместимости? Не слишком просто, но в теории вполне решаемо.
  2. Нет стима — 100% игр из него "тыквы". Так лучше? Что делать тем, кому хватит и 64бит игр?
потому что в самой системе должна быть собрана glibc с поддержкой 32 бит, а это уже без поддержки системой ничем не заменить. Поэтому если вдруг убунта выкинет поддержку 32 битного софта полностью то и стим обломится, а вместе с ним и 32 битные игры…
Нет стима — 100% игр из него "тыквы". Так лучше? Что делать тем, кому хватит и 64бит игр?

Убунта собиралась, но одумалась: https://ubuntu.com/blog/statement-on-32-bit-i386-packages-for-ubuntu-19-10-and-20-04-lts. Как я понял, часть либ оставят, но остальные и приложения выкинут + доступны полноценные окружения в Snap'ах.
Кстати, а много ли 32бит игр под линукс в стиме и почему? Он (linux) вроде всегда целился на 64бит в основном.


P.S.: в своё время мучался с постоянными крашами одной 32bit игры. Перепробовал всё, даже поставил (на соседний диск) SteamOS. В результате так ничего и не добился, пришлось забить. Это к тому, что 32бит игры и так не сахар нынче в линуксе.

На мой взгляд — тепличный путь эксплуатации уязвимости, требующий действий от пользователя, а не на уровне — открыл веб-страницу через браузер стима, получил тыкву. А тут надо ставить чей-то софт, а это значит, что софт должен быть сомнительный. Действия Valve это, впрочем, не оправдывает, но по существу это не критическая уязвимость. Юзер точно так же может поставить рандомную инди-игру от Васяна, которая при установке запросит права админа, или даже без них, а потом сольёт кучу данных налево, или ещё что натворит, и никакой стим для этого ей не понадобится.

Кроме того, в Стиме же куча игр, созданных в эпоху 2000/XP, которые не в курсе про всякие UAC/MAC и т.п., соответственно, они чаще всего на этапе установки начинают требовать админские привилегии сразу. И они же вроде как через Стим получают нужные им привилегии, не спрашивая юзера. Стим не этот механизм использует для раздачи привилегий играм из каталога?

Эта уязвимость вполне себе может быть частью чего-то большего. Через одну дыру проникли в систему с правами пользователя, а потом воспользовались этой дырой, чтобы повысить себе привилегии. Действий от пользователя в итоге не требуется.

Более того, в 99% случаев так и происходит, вплоть до того что одной уязвимостью получают доступ к сетевому протоколу, второй уязвимостью подменяют трафик, третьей уязвимостью сохраняют код на пк, четвёртой его выполняют, пятой поднимают ему права, шестой маскируют этот код и так далее.
«Шведских» уязвимостей вида всё в одном практически не бывает (ну если разработчики не совсем конченые...).
И я не устану повторять — если через какую-то дыру к вам в систему проникли — вы уже в жопе, и не важно, смог зловред повысить привилегии или нет.

Да вообще-то важно. Ок, с юзерскими привилегиями он, возможно, зашифрует вам файлы. Неприятно, но есть восстановление системы, есть антивирус, который по поведению такое на раз два вычисляет. Если же у него есть системные права, то антивирь он вырубит и зашифрует не только юзерские файлы, но и вообще всю систему вместе с теневыми копиями.


Да, и это если речь идёт про одно пользователя. У меня на домашнем компьютере, к примеру, кроме моего пользователя есть ещё пользователь жены. Если она подцепит что-то юзермодное, то мои файлы при этом не пострадают. А если малварь сможет повысить привилегии, то см. выше.

Если у вас теневые копии вместо полноценных бекапов — то вам не вирусов надо бояться…
А если есть бекапы — то и систему переставить не проблема. Будем запускать всё подряд, неважно откуда? Ну ок…
И да, антивирусы это фигня, ни разу не видел чтобы эвристика кого-то защитила. Ну, то есть, наверное она таки защищает кого-то когда-то, но процент этих случаев так мал что и упоминания не стоит.

Я не говорил, что теневые копии вместо бекапов. Они их отлично дополняют — восстановиться проще, делаются постоянно.
При чём тут "запускать всё подряд, не важно откуда"? Я вроде выше написал как раз о том, что пострадать от такой уязвимости можно и без ошибки пользователя. Да и "проверенные" источники софта тоже иногда подводят.
На счёт антивирусов — ну раз вы говорите, что фигня и даже статистика с процентами у вас есть, значит так оно и есть. Пойду удалю.

Я антивирус удалил уже лет ~15 назад (или 20? надо было засечь...), пока ни одного заражения (да, я примерно раз в год проверяюсь антивирусом с livecd). Учитывая состояние здоровья — у меня есть все шансы до первого заражения банально не дожить. Но нет, других следовать моему примеру не призываю — потому что люди-то бывают разные…
У меня тоже нет антивируса. Но это не значит что меня не могли взломать, например, через js/firefox, апдейт игры в стиме или дыре в моей любимой IDE при проверке апдейтов (как я это проверю, даже при наличии квалификации?) или что-то еще на выборке в миллионы людей. Особенно если я каким-то образом попал под прицел профессиональных хакеров (счет в банке например большой).

Они там совсем на солнышке перегрелись?
Автор, подскажите, что Вам в тоге по поводу бана сказали? Совсем обезумели.

Я нарушил правила (публично раскрыл уязвимость) — меня забанили. Я не имею претензий на этот счет.
НЛО прилетело и опубликовало эту надпись здесь
Хорошо, пусть будет «публично раскрыл репорт». Это не меняет сути.
Я не согласен с общей политикой Valve, но это не отменяет того, что я нарушил правила.
НЛО прилетело и опубликовало эту надпись здесь

Согласен с ораторов выше — Какую ещё уязвимость, если они её такой не признали?
Т.е. погодите-ка, в проошлый раз, что Вы опубликовали репорт — это они погрозили пальчиком ай-яй-яй, А сейчас сразу перманентно??
Ну абсурд же… с их стороны.

НЛО прилетело и опубликовало эту надпись здесь

Тогда это тем более странно, он же им писал, что вот так и так… в общем, это наглядно показывает отношение разработчиков и в частности Вальве к исследователям.
После такого начинаешь задумываться, а не продать ли мне на чёрном рынке найденное...

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Да. Подождем патча основного клиента. В прошлый раз двух попыток исправления не хватило.
Обновил статью новостями.
1) Основной клиент получил обновление с исправлениями.
2) Меня разбанили на H1 и выплатили награду.
1) Радует всё что хорошо кончается
2) Грустно что для «хорошего» конца нужна мировая шумиха…
Зарегистрируйтесь на Хабре , чтобы оставить комментарий