Pull to refresh

Comments 58

Реитерация Browser Helper Objects, похоже. Как таковой уязвимости тут нет, но есть вектор закрепления в системе.
поскольку для проведения атаки зломышленнику нужен доступ к компьютеру жертвы и при ее осуществлении не происходит превышения прав доступа

Это странный ответ, если задача изначально стояла не допустить изменения в определённой папке любыми недоверенными программами. Вымогатели и так запускаются на компьютере пользователя и могут зашифровать его данные без повышения прав доступа.
Вымогатели и так запускаются на компьютере пользователя и могут зашифровать его данные без повышения прав доступа.

Ответ МС верный и тут нету противоречия. Защита состоит в контроле доступа не доверенного ПО.
Приведенный пример — использование доверенного ПО для совершения действий
Когда я из Firefox/Excel попробовал сохранить файл в папку под «Controlled Folder Access» — получил отказ доступа, не смотря на то, что я локальный Администратор. Когда поместил Firefox/Excel в доверенные — все сохранилось без проблем.
Статью-то хоть читали? Доступ он получил через внедрение своей библиотеки в проводник, который имеет доступ к защищённым папкам из коробки, ему не нужны дополнительные разрешения. Другими словами проводник после внедрения библиотеки должен был стать недоверенным приложением, а вместо этого у него остался доступ к защищённым папкам, что сводит на нет этот механизм защиты. Ничего не исправлять в таком случае — решение неадекватное.
Тут может помочь отсутствие прав на исполнение, либо srp/applocker. Но из «коробки» везде, где разрешена запись обычным пользователям, разрешено исполнение. Зачем, например, выполнение в документах или «appdata» — непонятно.
В этой статье обсуждается совсем другой механизм, который должен защитить документы пользователя без SRP. Конечно, правильная настройка дополнительных механизмов и прав доступа решит проблему для опытных пользователей, но ведь они этой новой фишкой хотели уберечь от шифровальщиков неопытных и без сложных настроек.
Зачем, например, выполнение в документах или «appdata» — непонятно.

Пример: C:\Users\\AppData\Local\Google\Chrome\Application\chrome.exe
А зачем туда ставить chrome? Он прекрасно ставится в каталог для ПО(например, «Program files») и сам при этом нормально обновляется.
Не знаю как сейчас, но раньше веб-установщик автоматом ставил хром в тут папку. И изменить это нельзя было.
Вы по моему ничего не поняли. Тут задача другая. Дана защищенная папка. Доступ на запись в файл в ней должны иметь только N программ, добавленных в белый список (условно, explorer и word). Другие программы не имеют доступа на запись.

Исследователи нашли способ обхода: внедрить dll в программу из белого списка путем добавления ключа в реестр (на что у недоверенной программы есть права). Так как explorer — доверенная программа — загружает в себя dll, указанные в реестре.

— Вообще, система защиты в традиционных десктопных ОС (win/linux) устаревшая на десятилетия. Она защищает пользователей и их файлы друг от друга. Этобыло актуально в эпоху мейнфреймов, это актуально на виртуальном хостинге. Но в десктопной ОС обычно только 1 пользователь и защита не имеет смысла. То есть линукс на десктопе — это серверная ОС для хостинга, в которую костылями вшит графический интерфейс.

Гении из Гугла придумали гораздо более умную систему разделения прав в Андроид. Там они запускают каждую программу под отдельным пользователем, и она не может испортить чужие файлы. Плюс, можно урезать полномочия, отрубая даже выход в Интернет. Идеально! Мерзкий скайп не может стырить ваши браузерные куки для целей аналитики! Калькулятор не может сливать информацию в Интернет.

Винда видимо из-за legacy софта такое сделать не может и вынуждена изобретать костылищи — UAC, защита системных файлов от перезаписи, теперь вот еще это. Уязвимость — результат такого подхода.
Что я не понял? Как защититься от шифровальщиков? Белый список ПО тут рулит — если запускаются строго определенное ПО(DLL туда же относятся + скрипты). Как это реализовать на винде: ACL, srp, applocker. Если нужно обезопасить от записи один каталог, то можно просто повысить ей обязательный уровень целостности.

Но в десктопной ОС обычно только 1 пользователь и защита не имеет смысла.

Как минимум 2:root/admin(в винде еще system и trustedinstaller) и обычный user(+ пользователи, например, для Steam, visual studio, torrent клиента). Если вы сидите из-под админа, то это ваши проблемы.

Гении из Гугла придумали гораздо более умную систему разделения прав в Андроид. Там они запускают каждую программу под отдельным пользователем, и она не может испортить чужие файлы. Плюс, можно урезать полномочия, отрубая даже выход в Интернет. Идеально! Мерзкий скайп не может стырить ваши браузерные куки для целей аналитики! Калькулятор не может сливать информацию в Интернет.

Это также возможно под виндой — свой пользователь на каждую программу — ограничивай как хочешь доступ к данным, сеть и инет — белый список в FIREWALL. Проблема только в том, что это все надо делать руками, но это работает. Почему MS не сделает для обычных пользователей удобный инструмент — я не знаю.

> Как минимум 2:root/admin(в винде еще system и trustedinstaller) и обычный user(+ пользователи, например, для Steam, visual studio, torrent клиента). Если вы сидите из-под админа, то это ваши проблемы.

У меня в Андроиде нет окна логина, тем более для рута. Пользователь один. Что касается домашнего ПК, там тоже пользователь один, просто есть 2 роли — «юзер» и «админ». Это именно роли, а не разные люди. И это доставляет неудобства — если в роли админа создать текстовый документ в папке пользователя, то пользователем его не открыть.

> Это также возможно под виндой — свой пользователь на каждую программу

Это будет коряво и неудобно. Пример: проблемы с правами доступа к файлам. Одна программа не сможет прочитать записанный другой программой файл (файл скачан браузером и надо его открыть гимпом от другого пользователя). При этом одна программа может, как я понимаю, перехватывать нажатия клавиш в другой программе, установив какой-нибудь глобальный хук. С привилегиями еще сложнее — надо вручную настраивать фаерволл, а разграничить доступ к USB устройствам без сторонних программ нельзя. В то время как в Андроиде это все есть и работает из коробки.

Ну и для запуска программ от разных пользователей в винде, как я помню, надо либо вписать их пароль в ярлык запуска, либо вводить руками каждый раз. Впрочем, если ярлык доступен только админу, то это не беда, но все равно, коряво.
В Макоси те же проблемы только...Apple их решает лучше.
Тут и намного более жесткое внедрение цифровых подписей (причем и компонентов программ тоже). По умолчанию программа без подписи (хотя бы Developer ID) не запустится без явных действий пользователя. К некоторым API (iCloud тот же) неподписанного коду доступа нет.
И блокировка возможности случайно загрузить неподписанный код потому что приложение 'просто запустили' а не ставили (гуглим App Translocation).
И System Integrity Protection который просто не дает лезть в системные каталоги в том числе и все тут (отключаемый, в том числе — выборочно, но отключаемый прямой командой из Recovery, при этом особо нужды у пользователя отключать нет)
Проблема с подписями в том, что их может выдавать только Эппл и пользоваться этим в своих интересах:

— банить неугодные программы вроде popcorn time
— требовать продавать программу через Эппл с отчислением 30% прибыли
— запрещать или ограничивать свободный софт (лицензионными требованиями, противоречащими свободной лицензии)

Ну и ручные проверки не идеальны и могут что-то просмотреть. Сами понимаете, нетрудно написать программу, которая активирует вредоносные функции только в определенный день по сигналу.

Потому подход Гугла, который (в общем) не требует единого центра доверия, мне нравится. Хотя он больше подходит для «продвинутых» пользователей, которые способны оценить список разрешений, отключить то, что не нужно. «Чайнику» конечно удобнее, когда за него кто-то проверит программу и ее разрешения, пусть даже это и ухудшает экосистему и снижает выбор.

> И System Integrity Protection

Это именно костыль, скорее всего из-за того, что есть легаси софт, который привык туда лазать и не хочется его ломать. По идее тут разделения прав должно быть достаточно.
Может.
Но сейчас — не особо пользуется.
Программы с Developer ID-сертификатом НЕ продаются через стор и могут делать все что угодно (правда 99 баксов в год с разработчика это не отменяет). И разумеется их никто не проверяет. А вот знать кто лез к тому же iCloud или хотя откуда вообще приложение — уже важно (у MS ж тоже подписи есть но заплати за сертификат отдельно, сначала найди кому при этом, и никаких почти особых попыток убедить пользователей что надо обращать внимание)

У гугла — мобильная платформа. macOS — десктопная. Более менее совместимая и более менее нормально работающая. И весьма удобная.
Да — на Линуксе можно собрать аналог. Себе. И настраивать.
Да, в Макоси все это пока отключается.

SIP насколько я понимаю — как раз таки ломает некоторые legacy-приложения. Он даже часть штатного продвинутого функционала ломает (потому что отрубает DTrace). Как я понимаю цель — именно быть уверенным что «за» юзера не разрешили что не надо (пусть и убеждением кликать Next->Next->Next)(c загрузкой драйверов кстати похожая ситуация).

Потому что есть особо умный софт вроде Chrome который (в не-Enterprise-варианте установки) ставится в appdata. Потому что так удобнее автообновление сделать.
Почему тогда chrome enterprise ставиться в «Program files» и автообновление работает? В чем смысл ставить в appdata?

Хитрый план в том, чтобы в домене с дефолтными политиками бесправный юзер без ведома админа накатил себе хром, амиго, и еще парочку софтин

Тогда еще больше непонятно, почему ms по дефолту не отберет права на выполнение в таких каталогах, если нормальный софт туда все равно ставить не нужно.
Очевидно, чтобы ненормальный софт тоже работал — репутация универсальной системы многого стоит.

Огромное количество legacy начиная от vb6, которое должно работать у корпоративных пользователей. Во времена висты итак проблем с запуском софта хватало, такая мера бы убила новую систему.
Как следствие пограничного решения с вистой, у конечных пользователей появилась куча софта в профилях и на данный момент запретить по дефолту всем — еще большая потеря репутации

Для начала надо предоставить всем желающим кнопку «сделать так, чтоб работало» в новых изменившихся условиях. Эту кнопку они делают уже 10 лет. Вот буквально вчера вышла очередная попытка .

Они делают новые пакеты приложений, чтоб они были изолированные и не писали куда попало в системе (даже если думают, что пишут). Например те же записи в реестр идут в отдельный локальный куст реестра и не влияют на основной реестр (защита в том числе и от атаки из статьи)
Половина инсталляторов сначала распаковывается в каталог %temp% а потом продолжает установку оттуда. А каталог темп по умолчанию в пользовательской appdata.
Разработка софта, visual studio по умолчанию создаёт проекты в моих документах и соответственно оттуда запускает исполняемые файлы.
Далее, постепенно выпиливаемый кейс, скачать реферат.doc.exe легальную программу в папку загрузки и запустить ее, или с рабочего стола.
И вот таких вариантов тысячи.
Попробуйте себе сами через security policies запретить запуск исполняемых файлов из каталога %userprofile% много нового узнаете.
Это в корпоративной среде можно в раз и выключить пользователям запуск из собственного каталога, а потом начинаются мучения, то банк-клиент, то контур-экстерн, то очень-важная-программа.ехе А они сейчас начали обновляться так же как хром, что-то тихо сами себе скачали, а потом пытаются запустить и обновить сертификаты центробанка, а криворукий админ все сломал-уволить-его-немедленно.
Попробуйте себе сами через security policies запретить запуск исполняемых файлов из каталога %userprofile% много нового узнаете.


У меня все запрещено: и на работе, и дома.

Разработка софта, visual studio по умолчанию создаёт проекты в моих документах и соответственно оттуда запускает исполняемые файлы.


Поменять путь? У меня VS работает от своего пользователя.

Половина инсталляторов сначала распаковывается в каталог %temp% а потом продолжает установку оттуда. А каталог темп по умолчанию в пользовательской appdata.


Софт ставится через админа, для админа нет ограничений, ограничения для обычных пользователей. Просто из-под админа не надо сидеть.

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


srp и applocker поддерживают правила по сертификатам. Но да, говнософта очень много. Нужен централизованный updater.
Если заморочиться то так оно и есть.

С оговоркой — софт ставится от админа. Плюс есть куча вещей, не работающих полноценно без прав админа — например активация по кнопке в discord и ему подобном софте, а обновляется он часто, раз в несколько дней. Решение для работоспособности только одно — запускать такой софт тоже от админа. Отсюда в массовом сознании у населения появляется рефлекс давать доступ вообще всему что попросит — будь то инсталлятор, нажми ОК в UAC, либо хочешь чтобы уже установленная прога полноценно работала нажми точно такой же ОК.

Какие у вас есть легкодоступные идеи? Чтобы было легко запустить от админа часто обновляемый софт, но не было так же легко случайно запустить от админа кривой инсталлятор.
Это отстойный софт, если ему нужны повышенные права для постоянной работы. От админа я предложил запускать только установщики, а для обновления(особенно, если несколько раз в день) разработчикам надо было написать сервис. Если этого нет, то придется делать свой каталог для подобного ПО и разрешать по сертификатам через srp/applocker.

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

Можно посмотреть сертификат(кому и кем выдан, винда недоверенные выделяет другим цветом(видимо специально для простых пользователей)), если не подписан, то сразу в топку.

Похоже ms просто ждет, когда win32 вымрет и заменит все modern-ом. И еще там, что радует, не пройдут любители читать и писать файлы в ui-потоке.
Вот, например, один случай меня просто выморозил.
Какая-то программа для отправки отчетности в ПФР, поставилась в program files x86, при запуске требует прав админа. Думаю не вопрос, стандартным движением разрешаю всем права на запись в каталог программы — все равно требует прав. Жалкие попытки поиграться с режимом совместимости — без результата. Сзади дышит толпа директоров и бухгалтеров — нам же нужно отправить отчетность вчера, почему так долго, на старом компьютере все работало. И легким движением руки учетка бухгалтера становится локальным админом. (с)
Нужно брать редактор ресурсов и вырезать из программы манифест. Пока в манифесте прописано «запускать от админа», никакие права и режимы совместимости не помогут.

Кстати, вырезание манифеста заодно включает виртуализацию Program Files: программ будет думать что пишет в свою папку, а на самом деле будет писать в профиль пользователя.
Ковыряние с манифестом — это было бы следующее действие админа. Но пыхтящие зрители за спиной как всегда испортили представление.
Софт ставится через админа, для админа нет ограничений, ограничения для обычных пользователей.

Я вас огорчу господа, но софт в винде ставится не от Админа :) В MS не идиоты сидят. Инсталятор запускается от Aдмина & Secure Desktop и происходит его «распаковка». Но сама процедура, происходит под системной учетной записью LocalService (не помню нюансы), в которой вы ничего не знаете о пользователе, который запустил инсталятор, равно как и доступа к его документам. Только если вы перед этим не передадите SID логина который запусил инсталятор, что позволит, в лучшем, случаем распотрошить реестр руками и узнать какие-то пути.
Опять же это относится к MS MSI сервисам. Что делают «самопальные инсталяторы» — для меня загадка.
Другими словами проводник после внедрения библиотеки должен был стать недоверенным приложением,

А это исходя из какой логики? Загручик отработал корректно? Информация о процессе есть? маркеры безопастности корректны? механизмы .LOCAL-перенаправление DLL или Fusion (SxS) корректны и они системные? Манифест приложения есть и он корректен? Какие претензии если сделано согласно спецификации?
но ведь они этой новой фишкой хотели уберечь от шифровальщиков неопытных и без сложных настроек

Что вектор атаки не учли — это конечно конфуз. А к системному механизму контроля доступа процесса к папке какая претензия, если процесс формируется с такими нюансами? Это уже вопрос к формированию процесса, которому доверяют или нет.
По документации, процесс формирутся в 37 операций, до передачи ему управления.
Безопасность процесса определяется не только кодом исполняемого файла. Внедрили в него вредоносную библиотеку и уже безопасный процесс выполняет команды злоумышленника. Это не обязательно делается указанным в статье способом, библиотеку можно подгрузить и добавлением в KnownDlls, и вообще без реестра, размещением с нужным именем в одной папке с исполняемым файлом, и другими способами. В SRP, например, учитываются такие события, там можно применять политику и к библиотекам. По-нормальному они должны признать это проблемой и устранять все векторы атак, как до сих пор делают это с UAC.
По-нормальному они должны признать это проблемой и устранять все векторы атак, как до сих пор делают это с UAC.

UAC работает похоже. Если в контексте Админа Нечто отформатирует винт — это будет только проблема пользователя, потому что он или отключил UAC или подтвердил, то он Админ, тем самым открыв доступ к функциям требущим SecureDesktop флага для исполнения. Не вижу разницы между подтверждением «доверия» через UAC для функции или внесения ПО в список «доверенного» для папки
О том и речь. Обратите внимание, сколько здесь незакрытых векторов (системы до «Fixed in») и львиная доля которых продолжает работать на поддерживаемых производителем системах. Но их хотя бы продолжают постепенно закрывать в самых новых системах.
В любом случае все упирается в человеческий фактор. Или ты подтверждаешь и принимаешь осознанное решение или нет.
В том что реализоало МС — большинство домашних хомячков скажет «нет», в среде корпоративной — админ все перекроет нафиг.
Стоит ли из-за десятка альтернативно-одаренных делать супер-наворочанное? MS потихоньку закручивает гаечки в безопастности — Edge уже исполняется внутри среды виртуализации Hyper-V, так, что оттуда фиг Copy-Paste сделаешь не включив разрешение предварительно в настройках, не говоря о том, что бы что-то сохранить на винте. Потиху вся безопастность MS под такую архитектуру перетекает, вместе с разнесением на разные кольца безопастного исполнения.
Запустить не подписанный код с неизвестного источника требущий серьезного доступа, даже если ты и локальный админ — сейчас тот еще квест. Дошло до того, что дома родители не могут пользовать Скайп. продукт MS в ОС от MS нельзя просто «обновить» пользователю и пользовать.
Внушает повод к оптимизму.
Оптимизьму? Оптимизьма хорошо.
У меня есть прикладная софтина, которой я хочу пользоваться. Официальная, подписанная. Но ходят слухи, будто она ворует пароли из Мозиллы. И вот как мне средствами Windows ограничить подозрительной, но нужной софтине, доступ к пользовательским файлам? Ну то, что в Linux одной командой bwrap делается?
Вторая проблема: другая софтина сохранила куда-то кривой конфиг, и теперь отказывается стартовать. Конфиг надо найти и удалить. Только хрен знает где он. Ни в AppData ни в KKEY_CURRENT_USER ничего с названием софтины нет. И как его теперь искать? Пробовал ProcessMonitor — так там 100500 обращений ко всему на свете, ибо софтина крупная.
И вот как мне средствами Windows ограничить подозрительной, но нужной софтине, доступ к пользовательским файлам?

Честно говоря, я бы такую софтину нафиг убрал. Если критично, запускал бы в песочнице из VM или или под отдельным логином через RunAs. AppLocker и Software Restriction Policies (SRP) — надо маны покурить детально. Windows Defender Application Control — в процессе развития.
Почитал про AppLocker. В принципе да, это то, что нужно. Но доступен только в Enterprise, даже не в Pro. То есть легально на домашний комп его не поставить даже за деньги. Прелесть.
UFO just landed and posted this here
UFO just landed and posted this here
запустить ее с низким уровнем целостности.
UFO just landed and posted this here
Разве это не вызовет UAC, а в случае отказа на повышение сбой программы?


А почему он должен его вызывать? Может я ошибаюсь, но если в манифесте нет требования запускать с повышенными правами(если нет манифеста(старое ПО), то если включено определение установщиков, тогда может появиться запрос на повышение прав), то uac сам не вызывается.

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


можно назначить уровень целостности, например, через icacls.

Его также можно устанавливать при программном запуске процесса (через CreateProcess).

До сих пор не понимаю, почему ms из «коробки» не реализует белый список ПО с удобным управлением(для home версий)? Тогда будет не нужна поделка(да еще и не работающая), описываемая в посте.
Главное что сама возможность есть для любых редакций, пусть и управляется не из коробки.
До сих пор не понимаю, почему ms из «коробки» не реализует белый список ПО с удобным управлением(для home версий)?


Потому что это не так просто, как кажется.
Если попробовать самому сделать это руками/скриптами/антивирусом, сразу будет понятен объём шишек, которые придётся набить в процессе:
— ПО вообще-то не статично, оно бывает, обновляется, а бывает и ставится новое. Между версиями набор файлов различается;
— Программа может состоять далеко не из одного exe-шника, взаимоедействие между которыми далеко не всегда очевидно;
— И ещё есть DLL-ки, которые могут лежать абсолютно не там, где стоит главная софтина, разделяться между несколькими exe-шками и вообще подгружаться чёрт знает откуда (на чём построены и легитимные приёмы, и не столь легитимные хаки игр, не говоря уже о совсем чёрных троянцах).
— Добавляют веселья разрабочтики, что норовят захапать побольше привелегий, как правило не сильно нужных (а потом мы удивляемся, зачем ей права админа), или в 2018 году пишут данные в подпапку программы в Program Files (Виста? 7? 8.1? 10? Не, не слышали).

Как это всё удобно и прозрачно завайт- (или заблэк-)листить, чтобы это не сломать?

Мне кажется, сами MS для того и продвигают свой магазин, чтобы похоронить легаси и сделать вменяемый контроль приложений возможным. Но это ещё не один год пройдёт.

А еще можно белый список подкорректировать
Если ПО установлено в каталоги, где запись обычным пользователям запрещена — их просто включить в список по пути.
Если нет, то по сертификатам. Если не подписано — все плохо, в srp есть правила по хешу, но это очень не удобно.
ПО которое пишет в «Program files» — адовое зло. Приходится создавать отдельных пользователей и настраивать кучу прав. Еще было ПО, которое писало временные файлы на «D:\» !!!..
По сертификатам умеет AppLocker, но его нет в домашних редакциях. Там и SRP не работает, но его хоть можно активировать редактированием реестра.
SRP вполне бы подошло и для домашних пользователей. Но вместо этого — не работающее «решение», а applocker даже на pro не работает.

Еще srp обходится с mshta, но права на его запуск можно просто у всех забрать.
S-Mode — и нельзя мимо стора приложения устанавливать. И реестр такие приложения не похачат.
я включал эту защиту. по умолчанию рабочий стол тоже защищается.
теперь каждый второй инсталлер не может мне сделать ярлык на рабочий стол.
и даже добавлять инталлер предварительно в список не помогает, тк первый инсталлер распаковывает (или скачивает) второй и тп.
в общем хорошо что есть, но плохо, что сделано так неудобно.
С кучей старых инсталляторов (колхозных с торрент-трекеров, просто перепакованных в несколько слоев) и будет неудобно. И бороться с Legacy иногда попросту невозможно.

Майкрософт для этого и вводит виндомагазин, осталось просто ждать пока в нём появится достаточное количество годного софта, а сервисы перейдут в онлайн. Если такой подход станет нормой, во что верится почему-то слабо, то контролировать софт станет проще и в какой-то момент Legacy можно будет просто отрубить на одном из новых релизов системы. Только произойти это может только разве что после выхода из строя оставшегося железа, поддерживающего версии системы без виндомагазина.

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

Согласен, но сейчас притензия именно к реализации. Если что-то блокируется, то об этом сообщается только в слепом уведомлении. В нем длинные пути обрезаются, часто даже понять нельзя что было заблокировано. Журнала блокировок тоже не нашел. В общем ощущение, что делали в попыхах.

в общем хорошо что есть, но плохо, что сделано так неудобно.

Вывод: пора отказываться от Windows и заниматься реальным импортозамещением.

Sign up to leave a comment.