Комментарии 90
Как видите, имея права администратора, можно делать с компьютером практически что угодно.На то он и администратор. Можно и руткит в прошивку мат.платы засадить.
В Linux вот год назад задумались над тем, что неплохо было бы root-а сделать менее всемогущим.
нюанс — в зависимости от настроек, регион ME может быть недоступен для чтенияЗависит от того, насколько сильно вендор решил положить болт на рекомендации Intel. Привет MSI и Gigabyte у которых все регионы открыты на чтение и запись.
Представьте, что висящая в фоне софтина, красиво моргающая светодиодиками на матплате, открывает доступ ко всей вашей системе.
И снова передаю привет Gigabyte, которая на недешевой мат.плате за 12к специально убрала (пункт есть, но принудительно скрыт) из настроек прошивки управление подсветкой, чтобы вынудить пользователя установить для этого софт в систему.
На удивление кривые прошивки у этого вендора…
Можно и руткит в прошивку мат.платы засадить.
А есть какой-то способ защититься от этого?
Выбирать вендоров, которые уделяют должное внимание безопасности (Dell, HP, Apple).
К сожалению, интернет, наоборот, пестрит советами «как отключить UAC». В итоге, все приложения работают с максимальными правами, берём какой-нибудь Flash Programming Tool и пишем что хотим, куда хотим. Удобно — да. Безопасно — нет.
малварщики по всему миру используют это для создания вирусниЛично не встречал вирусни, подписанной таким способом, но давным-давно как-то ради интереса подписал заведомо известный всем Conficker/Kido и посмотрел на реакцию антивирусов. Panda Antivirus, помню, этот тест провалил — добавление такой вот просроченно-отозванной подписи моментально сняло детект.
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 иам был вроде..
Более того, тут нам даже никакое асиметричное шифрование не поможет, поскольку ключ для него в любом случае придётся вшить либо в драйвер, либо в программу — а значит его всегда можно будет достать.
будем ли мы заморачиваться на анализ всех возможных способов инжектинга и модификации кода?
Похорошему это должны делать разработчики DDK. Можно усложнить взлом, но совсем предотвратить пока невозможно.
Я бы сделал какой-нибудь подписанный канал для вызова функций драйвера. То есть параметры вызова должны подписываться, а драйвер должен проверять валидность подписи и только после этого исполнять функцию.
Да хоть даже CSM взять. 2020 год заканчивается, а его всё ещё не могут закопать. И попробуй это сделай, какой вой поднимется — «аааа, это сговор, чтобы меня любимого согнать с моей семёрочки на десятку, уууущемляют».
вой поднимется — «аааа, это сговор, чтобы меня любимого согнать с моей семёрочки на десятку, уууущемляют».Есть куча промышленных систем, расчитанных на работу 10+ лет. И их полно на семёрке. А ещё полно банкоматов с XP ;)
- При создании службы драйвера указывать путь к файлу (nullptr) необязательно при следующих условиях:
- Путь %SYSTEMROOT%\System32\drivers
- Имя файла драйвера (без расширения .sys) соответствует имени службы (менеджер служб развернет его в %SYSTEMROOT%\System32\drivers\<SERVICE_NAME>.sys)
Есть еще условия, но они не для случая из статьи. -
Alloc/free физической памяти
Точно физической? Не виртуальной? - Способы найти открытые дескрипторы есть через NtQuerySystemInformation (через SystemHandleInformation или SystemObjectInformation), но они имеют некоторые неприятные недостатки.
При создании службы драйвера указывать путь к файлу (nullptr) необязательноНе знал, спасибо!
Точно физической? Не виртуальной?Блока непрерывной некешируемой памяти (MmAllocateContiguousMemorySpecifyCache), с возвратом как виртуального, так и физического адреса. По факту дальше работа с этим блоком ведётся через функции чтения/записи физической памяти. Виртуальную можно и из Ring 3 выделить, тут чуть другой случай.
Способы найти открытые дескрипторы есть через NtQuerySystemInformationСмотрел Sysinternals Handle, там вроде оно применялось, перебирает все процессы и все хэндлы в них, посчитал, что это как-то чересчур
У 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..
Как можно хранить свои банковские данные в винде впринципе?
А вот интересно, как всякие анти-чит программы типа EAC к таким криво подписанным драйверам относятся?
Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?
Всё верно, нет НИ ОДНОГО вендора, который бы своевременно закрывал подобные дыры или отзывал сертификаты. Всем абсолютно насрать.
А какой-нибудь Асус вообще превратит все свои драйверы в тыкву, если пофиксит большинство подобных решёт отзывом сертификатов.
На определённых ресурсах базы исчисляются гигабайтами подобных драйверов, подписанных полностью валидной подписью и отлично справляющихся со своими непредусмотренными задачами.
Античиты давно уже на вендоров не надеются, а пилят свои способы защиты.
Кстати, сами античиты — тот ещё рассадник дырявых god-mode API. Вышеупомянутый Black Desert — отличный пример того, как достаточно длительное время школьники хакали игру встроенным в неё же античитом :D
Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?Вот именно, что нет, я на последней обновлённой, с интернетом проверял. В этом и суть.
Хаки с подписью китайскими отозванными сертификатами будут работать ведь только на какой-то неапдейченой винде без доступа в Интернет?Всё работает на полностью обновлённой Windows 10 2004 и Windows 8.1, без перевода даты, без очистки хранилища отозванных сертификатов, с интернетом. В свойствах файла написано, что сертификат отозван, но всё работает идеально.
А год назад не работало. У одного из промежуточных сертификатов истёк срок действия. Я полагаю, это вызвало в Windows срабатывания какой-то ошибки, которая ведёт к успешной валидации сертификата в ядре.
Зачем же тогда на ru-board писали в инструкции о необходимости перевода даты на время установки сертификата, а также об очистке хранилища отозванных сертификатов, в середине 2017 года?
https://forum.ru-board.com/topic.cgi?forum=55&bm=1&topic=13065#1
Могу ошибаться, конечно, но я устраивал эксперименты в 2017-2018 годах, и оно не работало просто так, как работает сейчас.
Тут интереснее то, что (хоть даже и с разовым переводом даты на время установки и отключением интернета), вообще можно установить и в дальнейшем уже без всяких манипуляций использовать драйвер, подписанный отозванной и просроченной подписью. На мой взгляд, такого не должно быть в принципе (а уж нужно ли там при установке отключать разово интернет или нет — это мелочи). Т.е. система должна таскать с собой списки отозванных сертификатов и локально при каждом запуске драйвера проверять, не отозван ли сертификат. Иначе, это не защита, а фикция (проверяем только при установке, да ещё и онлайн).
Кэш отозванных сертификатов, кстати, я никогда не очищал.
и времена WindowsXP, где подпись драйверов не была обязательной и каждый второй из них падал с «синим экраном»
Эм… вы ОЧЕНЬ сильно преувеличиваете. Или, возможно, вы не так выразились или я не так понял. Имею большой опыт эксплуатации парка машин с XP с постоянной сменой оборудования и драйверов, на многих система стояла больше 10 лет (особенности производства). BSOD'ы были, конечно, но не так чтобы прям вот очень часто, я бы даже сказал, довольно редко. Да и дома у меня файловым сервером сейчас трудится старичок 2005 года сборки на Pentium 4 и с XP, с 2005 по 2011 бывший основным рабочим и игровым компьютером и переживший кучу апгрейдов, смен драйверов, тестов самописных драйверов и прочего, так я там BSOD видел раза 3 за 5 лет (система не переустанавливалась в этот период).
Чтение CPUIDЭто вроде всегда и так доступно из ring 3.
У меня сейчас под рукой нет истёкшего сертификата, но я что, могу просто отмотать часы назад и подписать исполняемый файл или библиотеку истёкшим сертификатом вот так вот просто? Мне всегда казалось, что оно на timestamp.verisign.com/scripts/timestamp.dll лезет за временной меткой.
но я что, могу просто отмотать часы назад и подписать исполняемый файл или библиотеку истёкшим сертификатом вот так вот просто?Конкретно в этом случае сама программа для подписи проверяет время жизни сертификата, и не даёт подписать файл без перевода времени. Она не добавляет timestamp от центра сертификации в подпись.
Рабочую подпись без костылей можно сделать с помощью osslsigncode.
Но см. habr.com/ru/post/527006/#comment_22283138
2) HookSigntool позволяет использовать свой сервер для создания метки времени
Также я слышал про то, что каким-то образом умельцы отключают Intel Management Engine(которые вроде как вообще -3), и аналогичное железо у AMD, это как-то связано с возможностью работы с -1 и -2 уровнями?
умельцы отключают Intel Management EngineОбрезают прошивку Management Engine, оставляя только секции кода, необходимого для инициализации железа (совсем без ME вы не сможете стартануть).
Очередной раз понимаешь, что лучшая винда — виртуальная винда!
githacks.org/xerox/vdm
Целый фреймворк эксплуатации подобных драйверов, выставляющих в IoControl системные функции в обход проверок безопасности. Коллекция впечатляет, а самое страшное — коллекция далеко неполная.
exelab что-то прилёг
Мда, вот это решето. Самое печальное, что в остальных ОС ситуация скорее всего не лучше.
Windows: достучаться до железа