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

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

Как видите, имея права администратора, можно делать с компьютером практически что угодно.
На то он и администратор. Можно и руткит в прошивку мат.платы засадить.

В Linux вот год назад задумались над тем, что неплохо было бы root-а сделать менее всемогущим.

нюанс — в зависимости от настроек, регион ME может быть недоступен для чтения
Зависит от того, насколько сильно вендор решил положить болт на рекомендации Intel. Привет MSI и Gigabyte у которых все регионы открыты на чтение и запись.

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

И снова передаю привет Gigabyte, которая на недешевой мат.плате за 12к специально убрала (пункт есть, но принудительно скрыт) из настроек прошивки управление подсветкой, чтобы вынудить пользователя установить для этого софт в систему.

На удивление кривые прошивки у этого вендора…
Именно так, но я сталкивался с мнением, что воздействие с правами админа ограничивается софтом. Хотел продемонстрировать именно «железную» сторону.
НЛО прилетело и опубликовало эту надпись здесь
Можно и руткит в прошивку мат.платы засадить.
А есть какой-то способ защититься от этого?
Современные ноутбуки с правильно настроенным Boot Guard защищены от этого (в теории).
Вот только с более-менее правильной настройкой Boot Guard-а идут всякие бизнес-серии, а не игровые acer/msi и т.п., но тут надо спросить у тех, кто регулярно это мониторит.
Так на игровых намеренно разрешена модификация — мало ли что геймеры хотят себе настроить / переделать / разогнать.
Разгон и настройка на Boot Guard не влияют. Модификация — только в формате ноутбуков с заменяемой видеокартой, а таких не сказать, что очень много на рынке есть. Но и в таком случае BG надо хотя бы настроить, а не оставлять в factory состоянии, когда продвинутый идиот сможет туда свои ключи закинуть.
Внимательно следить за тем, кто запрашивает повышение прав, не одобрять запросы без явной необходимости.

Выбирать вендоров, которые уделяют должное внимание безопасности (Dell, HP, Apple).

К сожалению, интернет, наоборот, пестрит советами «как отключить UAC». В итоге, все приложения работают с максимальными правами, берём какой-нибудь Flash Programming Tool и пишем что хотим, куда хотим. Удобно — да. Безопасно — нет.
Проекты OpenRGB и liquidctl не поддерживают данную материнскую плату? Мне они заменили всю проприетарщину вполне успешно.
малварщики по всему миру используют это для создания вирусни
Лично не встречал вирусни, подписанной таким способом, но давным-давно как-то ради интереса подписал заведомо известный всем Conficker/Kido и посмотрел на реакцию антивирусов. Panda Antivirus, помню, этот тест провалил — добавление такой вот просроченно-отозванной подписи моментально сняло детект.
Это может быть по совсем иной причине — например для детекта используется хэш файла. Или последние 0x200 байт. Надо исследования проводить чтобы понять в чем именно причина…
Думаю, там проще
I've noticed during testing against Anti-Virus over the years that each is different and each prioritize PE signatures differently, whether the signature is valid or not. There are some Anti-Virus vendors that give priority to certain certificate authorities without checking that the signature is actually valid, and there are those that just check to see that the certTable is populated with some value. It's a mess.
Большая работа проделана! :-) Странно, что авторы драйверов не ограничивают тех, кто может с драйвером работать. По логике вещей надо бы проверять что вызывающий процесс подписан своей валидной подписью или что-то в том же духе

Ну ввобше да. Драйвер должен проверять подпись процессамэ который его загружает. И многие так уже делают. Была вирусня с подписанным драйвером от какой то софтины prcissmonitor или processhacer2 неипомню уже. Но драйвер там вообще ни чего не проверял. Еще и bof иам был вроде..

И чем бы это помогло? Допустим мы делаем в драйвере А проверку того, что его юзает подписанная валидной подписью программа Б. Мелваря запускает программу Б, инжектит в неё свою дллку, запускает поток и лезет к драйверу. Драйвер проверяет подпись того, кто к нему стучится (программы Б) — всё ок!

Более того, тут нам даже никакое асиметричное шифрование не поможет, поскольку ключ для него в любом случае придётся вшить либо в драйвер, либо в программу — а значит его всегда можно будет достать.
Драйвер радостно может проверять что куда инжектится, загружается и так далее
Наверняка может. И, возможно, эти техники реализованы в каких-нибудь там антивирусах. Но если мы пишем драйвер какой-нибудь моргалки светодиодами — будем ли мы заморачиваться на анализ всех возможных способов инжектинга и модификации кода? Нет, не будем.
Тогда вполне логично ожидать что те же самые АВ начнут детектить эти драйвера как потенциально опасное ПО после того, как они будут замечены в реальных атаках.
С чего бы? Они же сами по себе не являются вредоносным кодом. Если в реальной атаке, например, будет использована команда «dir» — так её что, тоже надо детектить? Брешь в системе — это одно, а тот, кто использует эту брешь — это другое.
Это потенциально опасное ПО, как всякие там продукты nirsoft
Всё вокруг — потенциально опасное ПО. В Windows баги десятками находят, апдейты офиса каждые 2 недели приходят, Хром вон кучу денег платит за найденные секьюрити-баги. Что ж это всё теперь — банить?
Хром и винда хотя бы обновления получают. Авторы драйверов, подозреваю, не раз получали сообщения о том что надо бы как-то ограничивать тех, кто может с ними работать. Не приняли меры — их проблемы.
будем ли мы заморачиваться на анализ всех возможных способов инжектинга и модификации кода?


Похорошему это должны делать разработчики DDK. Можно усложнить взлом, но совсем предотвратить пока невозможно.

Я бы сделал какой-нибудь подписанный канал для вызова функций драйвера. То есть параметры вызова должны подписываться, а драйвер должен проверять валидность подписи и только после этого исполнять функцию.
Ну так а где хранить ключи для подписи? Код приложения в user-space полностью доступен атакующему, код драйвера — тоже (это же просто исполняемый файл на диске, прочитать его всегда можно).
Надо драйвера писать нормально, а не по принципу «Ну нам надо по памяти лазать и в порты писать, добавлю ка я в экспорт функции outw и mmap». Драйвер видеокарты должен лезть только в те ресурсы, которые использует видеокарта, а к ресурсам, которые нужны для её первоначальной настройки (да хоть 0xCF8 порты и компания), он не должен давать доступа по интерфейсам, которые доступны вне пространства ядра.
Надо, но если майкрософт вдруг решит НЕ пропускать драйвера, написанные не достаточно безопасно — мы с удивлением обнаружим, что 90% привычных железок (и куча просто програм) вдруг перестали работать. Чего только стоит подзабытая история с выходом Windows Vista, где Microsoft сделала безопасным графический стек для того чтобы драйвера видюх не валили винду с синим экраном — и это отложило поддержку висты производителями видеокарт НА ГОДЫ. Я своими глазами видел коробки видеокарт, которые наперёд маркетологами были маркированы лейбой «поддерживает Windows Vista», а потом поверх этой маркировкой были наклеены отдельные лейбы где было написано «сорри, поторопились, не поддерживает».
Обратная совместимость она такая.

Да хоть даже CSM взять. 2020 год заканчивается, а его всё ещё не могут закопать. И попробуй это сделай, какой вой поднимется — «аааа, это сговор, чтобы меня любимого согнать с моей семёрочки на десятку, уууущемляют».
Да блин, на новом железе установка семёрки превращается в установку XP на железо 2015 года — поставить то поставишь, а потом надо проявить мастерство гуглфу и найти какие-нибудь дрова, которые хоть как-то заработают. Да и пора уже стюардессу закопать наконец.
«А потом пилоты сказали „хватит разврата“ и выкопали стюардессу»?
Нет, это та стюардесса, которую уже один раз закопали и потом откопали.
вой поднимется — «аааа, это сговор, чтобы меня любимого согнать с моей семёрочки на десятку, уууущемляют».
Есть куча промышленных систем, расчитанных на работу 10+ лет. И их полно на семёрке. А ещё полно банкоматов с XP ;)
Несколько моментов:
  1. При создании службы драйвера указывать путь к файлу (nullptr) необязательно при следующих условиях:
    • Путь %SYSTEMROOT%\System32\drivers
    • Имя файла драйвера (без расширения .sys) соответствует имени службы (менеджер служб развернет его в %SYSTEMROOT%\System32\drivers\<SERVICE_NAME>.sys)

    Есть еще условия, но они не для случая из статьи.
  2. Alloc/free физической памяти
    Точно физической? Не виртуальной?
  3. Способы найти открытые дескрипторы есть через NtQuerySystemInformation (через SystemHandleInformation или SystemObjectInformation), но они имеют некоторые неприятные недостатки.

При создании службы драйвера указывать путь к файлу (nullptr) необязательно
Не знал, спасибо!
Точно физической? Не виртуальной?
Блока непрерывной некешируемой памяти (MmAllocateContiguousMemorySpecifyCache), с возвратом как виртуального, так и физического адреса. По факту дальше работа с этим блоком ведётся через функции чтения/записи физической памяти. Виртуальную можно и из Ring 3 выделить, тут чуть другой случай.
Способы найти открытые дескрипторы есть через NtQuerySystemInformation
Смотрел Sysinternals Handle, там вроде оно применялось, перебирает все процессы и все хэндлы в них, посчитал, что это как-то чересчур
Этот момент (с перебором и отображением хендлов в свой процесс), как раз, не очень сложный. А вот решения проблемы, если среди этих всех хендлов проскочит блокирующий pipe, в user-mode не существует. При попытке получить его символическое имя (в user-mode) поток заблокируется в ожидании данных в этом pipe и сбросить его не получится даже через TerminateThread. Ну а процесс останется висеть до ближайшей перезагрузки. Поэтому различные UnBlock, ProcessHacker и, да, ProcessExplorer, используют драйвер уровня ядра, где получают имя через ObQueryNameString (пример).

У SystemObjectInformation другой недостаток: должен быть включен глобальный FLG_ENABLE_HANDLE_TYPE_TAGGING, и тогда можно будет из тегов вытянуть имя файла (так работает, к примеру, openfiles.exe).

В целом соглашусь, что без уровня ядра найти референсы на драйвер изящным способом невозможно. А вот в Linux, кстати, можно даже в командной строке обычным поиском в /proc/{pid}/fd/

Спасибо. Ещё одна причина для того чтобы игрушки ставить в виртуализированной винде. Как можно хранить свои банковские данные в системе где каждая вторая игра хочет установить свой системный драйвер?!
Но чтобы настолько наплевательски относится к пользователю как со стороны микрософт, так и ASRock и других… Они превысили мои самые смелые ожидания.

Эм, Может лучше банковские данные в виртуализованную винду засунуть? Мне кажется, так оно надежнее.
Так ведь хостовая винда имеет доступ ко всей физической памяти, а виртуализированная — только к своей

У меня ещё лучше — host Linux/vfio, винда с GPU в виртуальной машине. 95% нативной производительности в играх. Минимум софта на хосте.

А можно подробнее, что за виртуализация и какой образ винды для нее?

На русском не видел информации. На английском можно начать с https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
Образ винды качать с микрософта по кличевым словам windows 10 iso, типа:
https://www.microsoft.com/en-au/software-download/windows10ISO

qemu/kvm + vfio лучшее решение ever, сам использую.
На хосте боевая система на ядре linux, на виртуалке с проброшенной второй видюхой винда (нужна для связки осёл+dotnet (спасибо HP))
при помощи synergy вторая система (неважно виртуалка или железка) работает так словно это второй монитор к основной системе, одна клавомышь, общий буфер обмена…
удобно до жути, хотя если видюшка от зелёных (именно geforce, с quadro нет проблем) приходится немного пожонглировать костылями при первоначальной настройке.
плюс virtio диск и сетёвка снимают часть нагрузки с хоста.


бонусом с хоста помониторил трафик от виртуалки обратил внимание на пару вещей и теперь винду стараюсь вообще не включать без надобности.


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

Поддерживаю. Хост — Linux, клиенты — windows, haiku. qemu/kvm + vfio Производительность на уровне нативной работы.
Такое же решение (с VM) упоминается в тесте одного из российских вендоров безопасности (non-Negative Technologies)

Как можно хранить свои банковские данные в винде впринципе?

Хм. Есть программулинка «ArtMoney», которая заточена на то, чтобы в играх ставить бесконечные жизни и прочее. Она тоже просто тупо в память напрямую пишет.

Там виртуальная память определённого процесса, а не физическая.

А вот интересно, как всякие анти-чит программы типа EAC к таким криво подписанным драйверам относятся?

Зависит от кривости рук разработчика. Например, в Black Desert античит реагирует на FreePascal
Blizzard-овский Warden реагирует на запущенную IDA. Решил я как-то пореверсить совершенно сторонний бинарник, пока жду очередь в WoW… игра через небольшое время молча завершается.
У Black Desert вообще шаловливые ручки, почитав их ToS и посмотрев куда их бинарники тычатся удалил нафиг, вернул деньги и запросил удалить все данные, а то и за игру платишь и инфу им сливаешь, а в ToS кавардак т.к. по нему они инфу только для бесплатных игр могут собирать.
Относятся с неодобрением.

Вы проверяли? То, что тот же EAC не любит "test signing mode", это известно. но тут то ее нет?


P.S. Что-то самому рисковать своим аккаунтом в WarThunder не хочется...

Это всё не то чтобы вот прямо новость. Чтобы управлять железом — кто-то должен иметь право к нему лезть. И этот кто-то в сегодняшнем мире — корректно подписанный драйвер. И это ещё хорошо, потому что были у нас и времена WindowsXP, где подпись драйверов не была обязательной и каждый второй из них падал с «синим экраном» и времена Win3.1 где это могла сделать вообще любая программа, даже не драйвер. Сейчас-то, по крайней мере, драйвер надо подписать — уже много дураков и вирусописателей отсеивается.

Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?
НЛО прилетело и опубликовало эту надпись здесь
За что минусите этот комментарий?

Всё верно, нет НИ ОДНОГО вендора, который бы своевременно закрывал подобные дыры или отзывал сертификаты. Всем абсолютно насрать.
А какой-нибудь Асус вообще превратит все свои драйверы в тыкву, если пофиксит большинство подобных решёт отзывом сертификатов.

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

Античиты давно уже на вендоров не надеются, а пилят свои способы защиты.
Кстати, сами античиты — тот ещё рассадник дырявых god-mode API. Вышеупомянутый Black Desert — отличный пример того, как достаточно длительное время школьники хакали игру встроенным в неё же античитом :D
НЛО прилетело и опубликовало эту надпись здесь
Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?
Вот именно, что нет, я на последней обновлённой, с интернетом проверял. В этом и суть.
Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?
Всё работает на полностью обновлённой Windows 10 2004 и Windows 8.1, без перевода даты, без очистки хранилища отозванных сертификатов, с интернетом. В свойствах файла написано, что сертификат отозван, но всё работает идеально.

А год назад не работало. У одного из промежуточных сертификатов истёк срок действия. Я полагаю, это вызвало в Windows срабатывания какой-то ошибки, которая ведёт к успешной валидации сертификата в ядре.
Насчёт года не знаю, но это совершенно точно работало года 3 назад. Можно посмотреть на ru-board в варёзном топике Sandboxie. Пока программа не стала бесплатной, этим способом долгие годы подписывали её крякнутый драйвер.

Зачем же тогда на ru-board писали в инструкции о необходимости перевода даты на время установки сертификата, а также об очистке хранилища отозванных сертификатов, в середине 2017 года?
https://forum.ru-board.com/topic.cgi?forum=55&bm=1&topic=13065#1


Могу ошибаться, конечно, но я устраивал эксперименты в 2017-2018 годах, и оно не работало просто так, как работает сейчас.

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

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

Кэш отозванных сертификатов, кстати, я никогда не очищал.
НЛО прилетело и опубликовало эту надпись здесь
Можно же невалидный NTP сервер указать.
и времена WindowsXP, где подпись драйверов не была обязательной и каждый второй из них падал с «синим экраном»

Эм… вы ОЧЕНЬ сильно преувеличиваете. Или, возможно, вы не так выразились или я не так понял. Имею большой опыт эксплуатации парка машин с XP с постоянной сменой оборудования и драйверов, на многих система стояла больше 10 лет (особенности производства). BSOD'ы были, конечно, но не так чтобы прям вот очень часто, я бы даже сказал, довольно редко. Да и дома у меня файловым сервером сейчас трудится старичок 2005 года сборки на Pentium 4 и с XP, с 2005 по 2011 бывший основным рабочим и игровым компьютером и переживший кучу апгрейдов, смен драйверов, тестов самописных драйверов и прочего, так я там BSOD видел раза 3 за 5 лет (система не переустанавливалась в этот период).
брррр… сколько ж этот агрегат искричества сожрал впустую
Спасибо за статью! Я бы сказал в конце — бездумное использование черевато выходом из строй отдельных компонентов или всего компьютера целиком.
Ну не, чтобы что-то действительно сломать, как раз нужно подумать. А так — BSOD и перезагрузка.
Ну как — если есть доступ к биосам устройств, их наверно можно стереть, а это уже поломка. Было так один раз когда прошивал видеокарту под Windows. Исправить смог только подключив другую PCI видеокарту.
Так-то да, но чтобы перешить BIOS, нужно серьёзно вникнуть в даташиты и подумать. А бездумное использование в моём понимании это прочитать / записать случайные адреса, поиграться с MSR и CR, ну и так далее.
MSR достаточно чтобы спалить проц: достаточно его просто овервольтнуть
бездумное использование это вообще так себе идея
Мой опыт работы в техподдержке говорит о том что самые хитрые и вредоносные действия (о которых я и подумать не мог) совершает самый неопытный пользователь.
Чтение CPUID
Это вроде всегда и так доступно из ring 3.
Как и TSC, по крайней мере в ранних Windows 10 читался из ring 3.
TSC может запретить ОС, но по умолчанию разрешено, CPUID нельзя запретить (ну может только через виртуализацию, если заморочиться).
Меня вот что заинтересовало: на гитхабе в репозитории hzqst/FuckCertVerifyTimeValidity написано, что «project prevents the signtool from verifing cert time validity and let you sign your bin with outdated cert without changing system time manually».
У меня сейчас под рукой нет истёкшего сертификата, но я что, могу просто отмотать часы назад и подписать исполняемый файл или библиотеку истёкшим сертификатом вот так вот просто? Мне всегда казалось, что оно на timestamp.verisign.com/scripts/timestamp.dll лезет за временной меткой.
но я что, могу просто отмотать часы назад и подписать исполняемый файл или библиотеку истёкшим сертификатом вот так вот просто?
Конкретно в этом случае сама программа для подписи проверяет время жизни сертификата, и не даёт подписать файл без перевода времени. Она не добавляет timestamp от центра сертификации в подпись.

Рабочую подпись без костылей можно сделать с помощью osslsigncode.

Но см. habr.com/ru/post/527006/#comment_22283138
1) можно подписать без метки времени

2) HookSigntool позволяет использовать свой сервер для создания метки времени
А возможно ли, не прибегая к каким-то совсем извращенным(а если прибегая, то к каким?) методам заполучить доступ к функциям Ring -1 или даже -2?
Также я слышал про то, что каким-то образом умельцы отключают Intel Management Engine(которые вроде как вообще -3), и аналогичное железо у AMD, это как-то связано с возможностью работы с -1 и -2 уровнями?
НЛО прилетело и опубликовало эту надпись здесь
ME/PSP вы отключить полностью не сможете на современных платах(в случае свежих АМДшных Райзенов оно вообще настройку памяти выполняет), перевести ME в режим HAP (доверенная платформа от АНБ) — можно, оно тогда вроде как прекращает быть доступным из системы, но кто его в реальности знает, что оно до этого делает. С "-1" и "-2" уровнями это никак не связано. Про SMM(-2) — доступ возможен если либо есть дыры (к примеру обработчик SMM не осуществляет проверку входных данных), либо если IBV конкретно накосячил и не закрыл доступ в SMRAM(чего я давно не встречал). Про -1 — надо изучать гипервизор, который крутится на этом уровне, можете почитать материалы на тему «Escape from virtual machine»
умельцы отключают Intel Management Engine
Обрезают прошивку Management Engine, оставляя только секции кода, необходимого для инициализации железа (совсем без ME вы не сможете стартануть).
Спасибо!
Очередной раз понимаешь, что лучшая винда — виртуальная винда!
НЛО прилетело и опубликовало эту надпись здесь
Хотелось бы внести еще 5 копеек про подобную опасность драйверов.
githacks.org/xerox/vdm
Целый фреймворк эксплуатации подобных драйверов, выставляющих в IoControl системные функции в обход проверок безопасности. Коллекция впечатляет, а самое страшное — коллекция далеко неполная.

Мда, вот это решето. Самое печальное, что в остальных ОС ситуация скорее всего не лучше.

К слову, в Windows есть фича «Изоляция ядра», после которой часть драйверов перестаёт работать (RW Everything выдаёт ошибку, китайско-подписанный chipsec не запускается), но остальные драйвера (в том числе и рассмотренный в примере) продолжают функционировать.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории