Драйвера, подписанные Microsoft, можно устанавливать и без разрешения владельца ноутбука, достаточно сертификата Microsoft (Источник: xkcd.com)
В прошлом году корпорация Microsoft объявила о том, что с выходом Windows 10 все новые драйвера режима ядра будет необходимо подтверждать в Windows Hardware Developer Center, для получения цифровой подписи Microsoft. Из-за ряда проблем это нововведение не вступило в силу, оставшись лишь уведомлением.
Теперь компания решила реализовать это изменение. Начиная с версии 1607 операционной системы Windows 10, ОС не будет загружать новые драйверы режима ядра, не подписанные в Windows Hardware Developer Center. Речь идет только о чистых установках операционной системы, а не об апгрейдах прежних версий Windows OS на Windows 10. В этом случае версию 1607 не затрагивают изменения в политиках.
Корпорация утверждает, что изменения требуются для того, чтобы сделать Windows более безопасной операционной системой. По мнению Microsoft, при введении режима загрузки только подписанных драйверов ядра риск компометации системы зловредным ПО значительно снижается.
Если вы разработчик драйверов, то для подписания своего драйвера необходимо выполнить следующие действия:
1. Убедиться в том, что вы отправили драйвер Microsoft через Windows Hardware Developer Center.
2. Начать процесс сертификации драйвера по процедуре Extended Validation (EV) Code Signing Certificate. Все драйверы, которые планируется загрузить для проверки, должны быть подписаны сертификатом EV.
Microsoft опубликовала и ряд ответов на дополнительные вопросы, которые могут возникнуть у разработчика или пользователя.
Один из вопросов касается исключений и драйверов с кросс-сертификатами:
- Как и говорилось выше, изменения в политике подписания драйверов касаются только чистых установок Windows 10, а не обновлений с предыдущих версий ОС. В последнем случае валидны и кросс-сертификаты драйверов;
- ПК с отключенным режимом Secure Boot также будут пропускать установку таких драйверов;
- Драйвера, получившие кросс-сертификат до 29 июля 2015 года, остаются валдиными.
Что касается иных версий Windows, то изменения актуальны только для Windows 10 версии 1607. При этом загрузить драйвер на Windows Hardware Developer Center можно будет только при наличии EV сертификата.
В любом случае, теперь, если разработчик решил проверить работу драйвера на тестовой машине, ему придется выключать режим Secure Boot и подписывать сертификат самостоятельно, устанавливая драйвер при помощи соответствующего инструмента.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (102)
Fox_exe
01.08.2016 15:24+5Вот теперь я точно не буду обновлять Windows — 99% драйверов в моей системе точно никогда не получат подпись — просто потому, что это драйвера для крайне специфичных девайсов, которые уже давно не поддерживаются производителем, а альтернативы неадекватно дорого, если вообще есть…
MaximChistov
01.08.2016 15:29+1для обновления нету такого ограничения, в статье об этом написано…
Evengard
01.08.2016 15:34+2Интересно, если для обновления нет такого, то скорее всего это некий флаг, хранящийся скорее всего в реестре. Что помешает инсталляшкам при установке просто сбрасывать его?
Nexen2
01.08.2016 15:36+1Что помешает МС запретить его менять? Другое дело, что может появится некое стороннее ПО от третьих лиц, благодаря которому это станет возможным.
Evengard
07.08.2016 01:53Помешать врядли удастся. psexec достаточно забандлить, и можно выполнять команды от имени SYSTEM (благо для инсталляции драйверов всё равно нужны права админа, а для psexec этого вполне достаточно для получения прав SYSTEM). Вы думаете, что и от SYSTEM заблокируют изменение флага? Как, интересно? От SYSTEM-а можно и права доступа переписывать как душе удобно.
VladimirAndreev
01.08.2016 15:35+1не факт, что в версии 1608 это не будет неизменным.
asvishnyakov
01.08.2016 18:33Версии вида 1511 и 1607 означают год и месяц выпуска Windows 10, а следовательно версии 1608 не может быть в принципе. Если уж влезаете в подобную тему, то потрудитесь хотя бы изучить вопрос.
induction
01.08.2016 21:25+2Т.е. августа в этом году не будет?
BaLeFullPlayEr
01.08.2016 23:11Т.е. 1511 и 1607 это месяца подписания сборок и в 1608 точно не будет таковой, следующая будет примерно 17(03-05)
dartraiden
01.08.2016 16:05Не проще ли не включать SecureBoot?
ПК с отключенным режимом Secure Boot также будут пропускать установку таких драйверов;
whiplash
01.08.2016 15:38+4Пока ребята выпускают в продуктив ТАКИЕ дыры, эта ОС не станет безопасной)
Новый метод обхода UAC в Windows 10 позволяет подключить вредоносную DLL-библиотеку
http://www.securitylab.ru/news/483201.phpwhiplash
01.08.2016 18:39+2И это мы даже копаем неглубоко, взять тот же PowerWare через макросы MS Office и дальше в powershell.
Ну как можно при запрещенном явно ps.exe все равно запускать его через cmd.exe
— У нас дыра в безопасности!
— Ну хоть что-то у нас в безопасности!!! ©
NeoCode
01.08.2016 15:39+4Чем больше читаю новостей про эту десятку, тем чаще в голове возникает мысль «какое счастье что в мире есть линукс!»
Goodkat
01.08.2016 15:54+3Линукс есть и в Десятке :)
lieff
01.08.2016 16:11А гуи в нем работает? Когда последний раз проверял, убунту на нем пускали как консольный сервер, к которому подсоединялись через VNC. Я такое уже давно делал через XMing, пока это для консольных утилит, не более.
dartraiden
01.08.2016 16:13lieff
01.08.2016 16:25Да да, это оно и есть. Mesa и графический стек линукса тут не работает, запускается X сервер в софтварном режиме и VNC клиент.
Точно такая же схема как тут http://www.straightrunning.com/XmingNotes/
Помоему уже даже xming не нужен, порт уже добавлен в cygwin.
Laney1
01.08.2016 16:33+7вообще-то в ядре линукса есть аналогичный флаг, запрещающий загружать неподписанные модули при включенном Secure Boot. И например, в Ubuntu 16.04 он установлен
tyderh
02.08.2016 11:17Вот только с линуксом 1) практически все драйвера идут вместе с ядром 2) всякие принтеры работают в юзерспейсе через libusb 3) остальные ядерные модули тоже поставляются через штатный репозиторий. Проблемы подписать практически все нужное нет.
А венда — венда.Laney1
02.08.2016 12:25например, драйвер моего wifi-адаптера (Mediatek) — не идет. И в репах его нет. Или еще один пример, Intel Media SDK. А если я сам захочу написать какой-нибудь модуль, что кстати не сложно? То, что вы не сталкивались с такими кейсами, не означает что они редко встречаются.
Проблемы подписать практически все нужное нет
примерно такая же процедура как в винде.
lieff
02.08.2016 13:07+1Вообще то, для Secure Boot это должно быть не опцией, и убунта тут непричем.
Первая попавшаяся ссылка из гугла: http://www.securitylab.ru/blog/personal/Ennormoz/19457.php
То есть ключи дефолтные там уже прошиты должны быть в железе, обычно только от мс. В биосе так же обычно есть возможность добавить другие ключи.
Подозреваю опция убунты, это способ обхода через выбитый у мс подписанный загрузчик, когда то видел такие новости.
Так что это как раз винда палки в колеса вставляет.
arheops
02.08.2016 12:33У линукса есть fuse. И все нестандартное(да и много чего стандартного) работает через него.
CaptainFlint
02.08.2016 13:28+1В линуксе можно установить или собрать неподписанное ядро, и оно загрузится в Secure Boot, просто граб закроет доверенную сессию. И все модули можно будет грузить, как обычно. А Windows такой возможности не предоставляет (точнее, предоставляет, но с отключением части функций и показом водяного знака).
lieff
01.08.2016 16:10+2А возможность отключить проверку сетрификатов при загрузке остается?
Пользователям конечно без подписи уже давно не отшипишь, но хоть для отладочных целей.
Увы теперь даже такие элементарные вещи:
Аналог strace — нужен драйвер.
Песочница для произвольного кода — нужен драйвер.
А в самом дравере надо как-то обходить PatchGuard или как там сейчас это делается.
А ведь я помню еще времена когда strace под виндой был и работал.
А теперь, разве что drmemory с динамической ретрансляцией кода остался, и то сейчас пробую drstrace.exe — крашится.
Увы, увы, увы.
dartraiden
01.08.2016 16:17+5В полупривате, кстати, гуляет один интересный набор из отозванного китайского сертификата и программы, позволяющей подписать им драйвер. Так вот, подписанный этим способом драйвер загружается на данный момент в любых 64-разрядных Windows со всеми включёнными защитами. Несмотря на то, что сертификат давно протух и отозван.
dartraiden
01.08.2016 16:23+1Возможно (это уже мои домыслы), недоработка Windows, которую использует эта программа (потому что никак не должен признаваться валидным файл, подписанный просроченным и отозванным сертификатом), настолько фундаментальна, что проще запретить загрузку непроверенных Microsoft-ом драйверов, чем исправлять её.
Ещё разок о масштабах проблемы: можно взять сколь угодно вредоносный драйвер, подписать его практически общедоступной утилитой и Windows, не пикнув, загрузит его.
wOvAN
01.08.2016 16:17+4С выходом 10-ки и правда все чаще задумываюсь о миграции на Linux.
Второй Apple мне не нужен.VioletGiraffe
01.08.2016 16:27+2Ну кто-то же должен писать нормальный софт под Линукс. Как напишете пакет софта для повседневных бытовых задач, от которого не хочется плеваться — позовите ;)
lieff
01.08.2016 16:41+3Когда говорят про повседневные бытовые задачи — у меня на уме 2 вещи: Libre Office и Steam.
И то и другое есть, Libre Office я использую уже давно и на винде, (уф, про таблицы на VB можно забыть).
Если же говорить про программерские задачи, аналога strace на винде не подскажите?
Вот игры это да, их меньше. Мне лично не хватает Far Manager и ААА игр.
Хотя игр все больше, по поводу игр рекомендую https://www.gamingonlinux.com/index.php?module=calendar
А вам конкретно чего не хватает?VioletGiraffe
01.08.2016 16:45+4Удобного файлового менеджера нет (Krusader — почти, но иногда бесит невозможность выполнить элементарные действия).
Удобного аудиоплеера с медиабиблиотекой нет (3 года назад не было, когда я последний раз искал, если быть точным). Спасал АИМП под Wine, но работал он не без глюков.
Нормальной IDE для разработки на С++ не было! Не знаю, что там сейчас CLion может, а вот Qt Creator регулярно использую. Там отличный редактор, но как доходит до отладки — можно сразу вешаться.
Ну и для игр однозначно нужна Винда, если хочешь следить за новинками и играть во всё.VioletGiraffe
01.08.2016 16:54+1И вообще, мне не нравится программировать под Линукс. Не спрашивайте, почему, это просто размытое собирательное ощущение от 5 лет попыток, конкретные примеры уже забылись. Если нужно запрограммировать что-то системное, то на Винде я уверен, что найду решение либо в MSDN, либо на StackOverflow, и оно будет работать. На Линуксе — как повезёт. Из свежего — нужно сделать file system watcher, и в Линукс-версии своего приложения я пока что эту затею бросил. На Винде это делается достаточно легко за 1.5 часа с отладкой и многопоточностью.
lieff
01.08.2016 17:10+1О, мониторить ФС это легко. Я делал и на винде (ReadDirectoryChangesW) и на линуксе http://man7.org/linux/man-pages/man7/fanotify.7.html или http://man7.org/linux/man-pages/man7/inotify.7.html
Увы я сталкивался и с противоположным, делал я веб сервер, получилось 60k rps против 120k rps линух. Делал песочницу для него, на линуксе сделал через ptrace (Можно SeLinux), на винде начал через драйвер и потом забросил.
pfemidi
01.08.2016 18:25+2И вообще, мне не нравится программировать под Линукс.
Коллега!
Если не требуется использование каких-нибудь фич, присутствующих только в линуксе, а дело ограничивается только POSIX/Qt/Stl, без всяких /dev, /proc и подобного, то я всегда пишу/отлаживаю/добиваюсь работоспособности в Win7, а после уже просто перекомпилирую готовый код под Linux. А всё потому, что под Linux нет ни вменяемых редакторов (типа Microsoft Visual Studio), ни что самое ужасное — нет отладчиков. Извините, но gdb это не отладчик, это насмешка какая-то и самобичевание. Я честно пытался к нему привыкнуть, 15 лет я время от времени повторяю эти попытки, ПЯТНАДЦАТЬ ЛЕТ!!! Но тщетно. Я не могу не уважать себя до такой степени, чтобы начать пользоваться gdb.VioletGiraffe
01.08.2016 18:38+1Коллега, на 100% согласен. Сам пришёл к такому же сценарию работы.
Не знаю, в GDB ли проблема, или в обёртках над ним, но ни одного нормально работающего GUI для отладки через GDB я ещё не видел :(
CaptainFlint
01.08.2016 19:13QtCreator вполне пристоен, и может использоваться для не-Qt-проектов. До Студии, конечно, не дотянет, но пользоваться можно.
VioletGiraffe
01.08.2016 19:16+1Им и пользуюсь, но с отладкой там туго. Она есть, но всё время хромает и спотыкается.
Uint32
01.08.2016 19:42+2Не знаю, у меня все совершенно ок под gdb + qtcreator. ЧЯНД?
VioletGiraffe
01.08.2016 19:44А если в вектор заглянуть? А если в нём ещё и лежит что-то посложнее, чем int?
lieff
01.08.2016 20:38Для кастомных типов я смог решить эту проблему с помощью debug helpers
http://plohrmann.blogspot.ru/2013/10/writing-debug-visualizers-for-gdb.html
Для стандартных типов QT/C++ в последних QTCreator проблем быть не должно, хотя помнится там был нюанс с опцией «Load system GDB pretty printers».VioletGiraffe
01.08.2016 21:05Он у меня на всех машинах (не меньше трёх) систематически глючит и вообще отказывается показывать переменные. Либо показывает только адрес переменной в памяти, а значения нет.
lieff
01.08.2016 21:18А версию из репозиттария используете или отсюда? https://www.qt.io/ru/download-open-source/
В репах уж больно старое.VioletGiraffe
01.08.2016 21:55Последнюю через Qt Maintenance Tool. Я не настоящий Линукс-разработчик, сборкой из репозиториев не развлекаюсь :) Либо инсталлятор, либо apt-get.
Uint32
02.08.2016 01:35Куда угодно. Питоновские хелперы цепляются к gdb запросто. (Посмотрите, как устроены хелперы для классов Qt).
Сперва тоже неоднозначно относился, к тому, как работает gdb, потом разобрался и все стало вполне юзабельно.
Хожу по ядру linux из-под qtcreator — очень удобно.
Сожалею, но более комментировать не буду — ограничение на 1 коммент в час.
pfemidi
01.08.2016 20:05+1Я это уже проходил, неоднократно. QtCreator в качестве отладчика, i.e. в качестве фронтенда для всё того же пресловутого gdb, можно только демонстрировать на ютубе в видеороликах «Каким НЕ ДОЛЖЕН БЫТЬ отладчик». Извините, ничего личного. Идеал для меня это OllyDbg для системной отладки/реверсинга и встроенный отладчик в Microsoft Visual Studio для отладки своих програм. В Linux, увы, недоступно ни то, ни другое. Поэтому приходится держать VirtualBox с Windows Seven исключительно для девелопинга, всё остальное я прекрасно и в Linux делаю, но вот программы писать — только Windows.
Kobalt_x
02.08.2016 13:47У gdb в отличие от его виндовых товарищей cdb/ntsd расширяемость гораздо выше. Плюс отсутствие наркоманского синтаксиса и прочих причуд встроенного макроязыка. Единственный плюс этой пары — возможность по символам скачать исходники автоматом.
pfemidi
02.08.2016 14:23На вкус и цвет. По мне так это в gdb самый натуральный наркоманский синтаксис да и сам gdb предназначен для использования исключительно в период ломки чтобы сравнить и понять что ломка это ещё не самое плохое что может быть. Так что повторюсь, на вкус и цвет.
lieff
01.08.2016 16:59С аудио пеерами никогда проблем не знал, неужто ни один не приглянулся? http://www.tecmint.com/best-linux-audio-music-players/
По всему остальному согласен. Far и под wine приспособил, следующий наиболее подходящий — Double Commander, отладка в Qt Creator тоже менее удобна, в определенной степени я пробелмы решил, но из коробки ситуация хуже.
Uint32
01.08.2016 18:03>Удобного файлового менеджера нет
Вот замечательный http://silk.apana.org.au/fc2development.html
Meklon
01.08.2016 19:35+1Мне Clementine нравится как плеер. Заодно без iTunes легко заливает музыку из своих файлов на iPod. Коллеге понадобилось вдруг.
VioletGiraffe
01.08.2016 19:50Неплохой, но что-то мне в нём не понравилось (смотрел года два назад). Скорее всего, что-то у него с lossless-форматами не срослось. Возможно, .cue плохо парсил.
KorDen32
02.08.2016 16:30С Lossless и вариациями .cue я до сих пор не могу найти альтернативны всеядному аимпу даже на винде, который парсит всякие вариации на тему «в cue указано wav/flac, а по факту flac/ape» и другую экзотику, которую может выдать EAC с некоторыми дисками. Как-то пытался пересесть на фубар (тут еще сыграла роль нативной передачи PCM и DSD на ЦАП, аимп не умеет мешать скажем 44,1 и 96, чтобы на каждом файле менялась выдаваемая частота дискретизации) — но увы, некоторые .cue он не читал, потом на Clementine (привлекла хорошая библиотека, плюс кросплатформенность с планами по переходу на Linux) — аналогично :(
VioletGiraffe
02.08.2016 16:38О да, вот эти корявые .cue выводят из себя. Спасибо, в 99% случаев АИМПу всё-таки удаётся догадаться, что там должно было быть :)
А насколько проще было бы, если бы правилами популярных торрент-трекеров были запрещены раздачи с неправильными .cue…
Kobalt_x
02.08.2016 09:38+1Если же говорить про программерские задачи, аналога strace на винде не подскажите?
procmon.exelieff
02.08.2016 14:11Пользуюсь им, хорошая утилита, но это не вывод вызова всех ядерных функций.
Вывод аналога strace должен показать вызовы всех syscalls из SDT. Вот примерно такой вывод должен быть:
http://drmemory.org/docs/page_drstrace.html
drstrace единственная извесная мне оставшаяся альтернатива, однако она использует ретрансляцию кода и рабоатет это весьма медленно, перехват не гарантирован, если ретранслятор немного запутать. Ну и попросту оно начало крашиться.
Вообще подобные утилиты уже давно выходят из строя с завидной регулярностью.CaptainFlint
02.08.2016 14:29Существует API Monitor, но я его серьёзно не исследовал.
lieff
02.08.2016 14:42Я исследовал. Он хукает Ntdll.dll, вобщем работает, но при остановке монитора подопытный процесс крашится.
Проблема в том, что то что я мониторю, вызывает syscalls напрямую, минуя обертки Nt*.
strace мониторит именно что syscalls, нужно тоже самое в винде.
grechnik
02.08.2016 21:34Есть ограниченное логирование всех системных вызовов штатными средствами: флаг
EVENT_TRACE_FLAG_SYSTEMCALL
в https://msdn.microsoft.com/en-us/library/windows/desktop/aa363784(v=vs.85).aspx. «Ограниченное» значит «только адреса вызываемых функций и возвращаемые значения, без аргументов».
В сыром виде выглядит примерно так:
Конкретно это — выдача[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30 [2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF96000127A6C [2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = NTSTATUS= 50 [2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039F3090 [2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [Thread] Context Switch from 4836. to 0. [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND) [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039C6430 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND) [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A7190 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF80003990C40 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039C6430 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND) [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039ACAD0 [0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0x8000001a(STATUS_NO_MORE_ENTRIES)
tracelog -start -eflag 1 0x90
&& [пауза] &&tracelog -stop
&&tracefmt -tmf system.tmf LogFile.Etl
в формате[CPU]PID.TID::time event
. PID/TID, впрочем, придётся отслеживать руками по событиям Context Switch.lieff
02.08.2016 22:55+1Да, плюсы этого метода — он не требует драйвера, не поломается в ближайшем будующем.
Минусы — это скорее аналог dtrace на маке\фре (где проблема strace тоже полноценно не решается).
Принципиальное отличие — мы обрабатываем буффер эвентов уже после того как все произошло, когда strace останавливает тред, делает анализ, продолжает тред.
При этом strace может корректно вынуть все параметры, а вот информации из эвента не достаточно что в ETW что в dtrace.
Можно пытаться вынуть инфу со стека, надеясь что он еще не испорчен, вот так я пытался протрейсить все exec() с параметром бинари под маком:
Тык#!/usr/sbin/dtrace -C -s #pragma D option quiet proc:::exec-success { printf("\nEXECNAME: %s\n", execname); this->isx64=(curproc->p_flag & P_LP64)!=0; #define SELECT_64_86(x64, x86) (this->isx64 ? (x64) : (x86)) #define GET_POINTER(base, offset) (user_addr_t)SELECT_64_86(*(uint64_t*)((base)+sizeof(uint64_t)*(offset)), *(uint32_t*)((base)+sizeof(uint32_t)*(offset))) this->ptrsize=SELECT_64_86(sizeof(uint64_t),sizeof(uint32_t)); this->argc=curproc->p_argc; this->isClean=SELECT_64_86(1, (curproc->p_dtrace_argv==(uregs[R_SP],sizeof(uint32_t),sizeof(uint32_t)))); this->argv=(uint64_t)copyin(curproc->p_dtrace_argv,this->ptrsize*this->argc); /* printf("%s with args:%d (%p, %p)\n",execname, this->argc, curproc->pdtraceargv, uregs\[R_SP\]); */ printf("EXEC: %s ", (0 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,0)) : ""); printf("%s ", (1 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,1)) : ""); printf("%s ", (2 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,2)) : ""); printf("%s ", (3 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,3)) : ""); printf("%s ", (4 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,4)) : ""); printf("%s ", (5 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,5)) : ""); printf("%s ", (6 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,6)) : ""); printf("%s ", (7 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,7)) : ""); printf("%s ", (8 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,8)) : ""); printf("%s ", (9 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,9)) : ""); printf("\n"); #undef GET_POINTER #undef SELECT_64_86 }
vlivyur
02.08.2016 09:39Браузеров и VLC (SMPlayer по вкусу) под Linux уже давно наделали. Это для повседневностей.
Diaskhan
01.08.2016 16:36-2А потом за каждое подписывание драйвера по 5 баксов, нормально так, по еврейски....
planarik
01.08.2016 18:33+4Это не только усложнит процедуру, но и еще может отрицательно повлиять на безопасность. Простой пример — в драйвере сетевой карты обнаруживается критическая уязвимость, позволяющая запускать произвольный код специально созданным пакетом. Сколько времени пройдет, прежде чем пользователи смогут получить обновление драйвера с заплаткой при такой схеме?
creker
02.08.2016 01:42+3Не сильно больше, чем без этой схемы. Что изменилось для больших компаний? Ровным счетом ничего. Они точно так же будут долго писать заплатку и в этом времени несколько дней на сертификацию затеряются напрочь. Это при том, что для получения этого драйвера, пользователю, либо надо идти самостоятельно на сайт производителя, что никто не делает, честно говоря. Либо ждать появления драйвера в windows update, куда, внезапно, попадают только WHQL драйвера, а это и так означает проверку и подпись.
Что до самой процедуры, то давно пора было. Включить все проверки по-умолчанию и лишь оставить возможность отключения вручную. Secure Boot до самых драйверов. Кому сильно надо, тот secure boot отключит и будет работать с неизвестными железками дальше.navion
02.08.2016 11:08+1Как быть с 0day в драйверах антивирусов и другого софта?
creker
02.08.2016 15:10Я все еще не вижу проблемы. Сделают заплатку, подпишут, выпустят. Для рядового пользователя ничего не изменилось и этих изменений он не заметит. Разработчики драйверов всего лишь будут проходить небольшой этап перед релизом. Собственно, крупные разработчики и так свое подписывали. Что драйвера, что бинарники.
navion
02.08.2016 22:58Тогда к чему это всё?
qw1
03.08.2016 00:49Ключи не смогут украсть или подписывать ими драйвера, не одобренные напрямую MS.
Например, есть ключ для подписи драйверов у ReactOS, им подписывали драйвер утилиты Process Hacker.
Теперь не будет такой возможности.CaptainFlint
03.08.2016 15:09Никакого одобрения там нет. Подписывание происходит в течение нескольких минут, поэтому очевидно, что там не человек проверяет, а работает некий скрипт, который всё подписывает автоматом.
Максимум, там может присутствовать какая-нибудь проверка по чёрному списку, но если у MS были бы претензии к конкретным драйверам, они бы первым делом заблокировали сертификаты, которыми эти драйверы подписывались.
CaptainFlint
02.08.2016 13:33несколько дней на сертификацию затеряются напрочь
Нужна не сертификация, а просто идентификационная подпись от Microsoft, она получается почти автоматом в течение 5–10 минут, никакой сертификации не требуется.creker
02.08.2016 15:13Вроде же на самом сайте написано, что EV требует не просто подписи, а именно сертификации и прохождения на ряд требований.
CaptainFlint
02.08.2016 15:50+1На каком именно сайте?
Подозреваю, вы просто путаете процедуру получения собственно EV-сертификата и процедуру подписывания драйверов. Для получения сертификата, действительно, надо соответствовать определённым, довольно жёстким требованиям, они будут тщательно проверяться поставщиком сертификата (DigiCert, Symantec и т. п.), у разных поставщиков требования разные, но обычно это наличие юр. лица, всякие финансовые и отчётные документы, наличие регистрации в DUNS и тому подобная бюрократия.
После того, как токен с сертификатом получен, на его использование не накладывается никаких ограничений (не считая очевидных, типа подписывания и распространения малвари, за такое сертификат могут отозвать).
При наличии токена процедура подписывания драйвера для Windows 10 выглядит так:
1. Скомпилировать драйвер.
2. Подписать его каким-нибудь сертификатом компании (можно EV, можно обычным; говорят также, что можно вообще не подписывать, но это я пока не проверял).
3. Запаковать драйвер или комплект драйверов с INF-файлами в CAB-архив.
4. Подписать этот CAB своим EV-сертификатом (вот здесь это точно обязательно).
5. Если ещё не делали, зарегистрировать компанию на портале sysdev и привязать там свой EV-сертификат.
6. Открыть форму отправки файла на подпись Windows 10, загрузить CAB-архив.
7. Дождаться, пока автоматическая система обработает архив, подпишет файлы, сгенерирует и подпишет файлы каталогов и выдаст ссылку на итоговый архив.
8. Скачать архив, распаковать. Всё, у вас драйверы, подписанные ключом Microsoft для использования в Windows 10.
Кроме этого, существуют ещё отдельные сценарии получения HLK-подписи (необходимой для драйверов в Windows Server 2016) и/или WHQL, но с этими двумя зверьками я пока не смог разобраться, даже не уверен, одна это вещь или две разных. В любом случае, для этого типа подписи надо в дополнение к вышеописанному проходить специальный набор тестов, и вот там всё уже гораздо сложнее. Но для простого обеспечения работоспособности драйвера в Win10 это не является необходимым требованием.
CaptainFlint
01.08.2016 19:162. Начать процесс сертификации драйвера по процедуре Extended Validation (EV) Code Signing Certificate. Все драйверы, которые планируется загрузить для проверки, должны быть подписаны сертификатом EV.
1. Не «начать процесс сертификации», а отправить драйвер на подписывание. Это разные процедуры.
2. EV-сертификатом надо подписывать не сами драйверы, а CAB-архив, в который они упаковываются для отправки на подпись.
psyriccio
01.08.2016 21:25На работе и дома ArchLinux, на всех компьютерах. Навязывать или советовать не берусь, но и жаловаться мне не на что ))) А почитаешь, что про ubuntu, что про windows — так убеждаешься в правильности выбора лишний раз.
geekmetwice
02.08.2016 00:32Имея узкие потребности (или непритязательный характер), можно сидеть хоть в DOS. Увы, чем дольше работаешь с компом, тем шире круг задач и разбаловавшись простотой GUI, уже не полезешь кодировать фильм с 50 аргументами командной строки.
Хотя… чего все так кудахчут с этой десяткой? Поставь Win7 и живи счастливо!lieff
02.08.2016 00:58Ну вроде как многие так и делают, Win7 до сих пор самая популярная. Но это можно лишь временно, придет время, поддержка закончится, перестанут приходить секурити обновления, куда-то деваться придется.
creker
02.08.2016 01:47Семерка быстро сдает позиции и в том же стиме уже довольно сильно отстает от 10, которая занимает первое место. И данная новость ровным счетом никак и ничем не отпугивает. Наоборот, такое решение можно только приветствовать.
geekmetwice
02.08.2016 03:41та… эти обновления! Немного толку, если ДО СИХ ПОР венда дырява для любой опытной команды хацкеров. Куда важнее, если не будет дров! Но тут уже производителям думать — гадить себе в продажи «ущемлением» семёрки или дружно с M$ (за откаты, конечно) тянуть всех в десятое измерение.
qw1
03.08.2016 00:52+1Наоборот — старая железка не работает на десятке. Хочешь Win10 — купи новую железку. Пиаришь Win10 — растут продажи.
geekmetwice
03.08.2016 17:41Хм… вы сами свою логику понимаете?
Есть громадная база юзеров на старом железе и семёркой. Производители принтеров, хардов, клавиатур, моников — им всем пофиг десятка — им важны ВСЕ юзеры, с которыми совместимо их железо. Зачем делать 10-only решение, когда можно охватить практически весь рынок??qw1
03.08.2016 22:38Вот есть у меня принтер, работающий под Win7. MS месяц назад обновила мне Win7 до 10 и я не заметил, что принтер отвалился.
Если бы драйвера были под все ОСи, я бы скачал новый драйвер и всё. А так, мне надо покупать новый принтер (откатить Win назад — не вариант, по разным причинам)
vlivyur
04.08.2016 13:15Им не пофиг. Под одну систему (с вариациями) поддерживать дрова или под две (хотя до конца гарантии Win7 ещё как бы будет поддерживаться). Хард и клава скорее всего работать будут. Принтер (особенно если софтовый) — лотерея.
geekmetwice
04.08.2016 23:05Проблема в том, что намного дешевле держать даже полудохлый, но «семёрочный» драйвер (охватывая миллионы юзеров-покупателей), чем сидеть с одним «десятым» и молиться, чтобы юзер не запросил семёрковые дрова.
Плюс, сама десятка — без году неделя, сравните это с годами семёрки и сколько «специалистов по программированию дров» она наплодила!
Элементарная экономика: чем шире охват аудитории, тем выше вероятность, что твой товар купят. Это в России ввиду полной «бесплатности» венды люди меняют её как перчатки. Буржуи, купив семёрку, тысячу раз дёрнут производителя «а у вас для 7-ки дрова есть?».
Ну и плюс очевидный фэйл винды-10 — железоклепатели не могут этого не видеть, поэтому я за семёрку спокоен.creker
04.08.2016 23:24+2Семерка стремительно теряет рынок, потому спокойствия тут не получится, а в игровом секторе она уже уступила лидерство. И РФ здесь не при чем.
geekmetwice
05.08.2016 20:04> Семерка стремительно теряет рынок
Правда? Это вам в отделе маркетинга MS рассказали? :) А я как ни посмотрю, народ ставит 10-ку, плюётся, сносит, ставит заново 7 и продолжает жить дальше. Это не говоря про ЛИЧНОЕ высказывание какой-то шишки из MS про «не очень впечатляющие» продажи десятки. Хотите поспорить с MS?
psyriccio
04.08.2016 18:00Потребности более чем широкие, что касается меня. Зачем 50 аргументов, когда есть куча gui-морд для ffmpeg? Так вам простоту GUI или широкий круг решаемых задач? Это часто вещи противоположные.
merlin-vrn
02.08.2016 08:43Вот буквально чуть менее недели назад столкнулся с ситуацией «под (актуальную) винду работоспособных дров нет, завели под (актуальный) линукс» (принтер Epson L100). А с нововведениями ситуация с драйверами в винде ещё сильнее ухудшится, что бы там ни говорили.
Например, вот что будет с паравиртуальными драйверами KVM от проекта Fedora?navion
02.08.2016 11:23Red Hat их давно подписал и кросс-сертификат Verisign действует до 2020 года. Но даже без него с KVM [пока] проблем не будет из-за отсутствия поддержки Secure Boot — он пока есть только в Hyper-V и должен появиться в ESXi 6.5.
navion
02.08.2016 11:28+1Нашел отличный FAQ по подписыванию бинарников в Windows:
Practical Windows Code and Driver Signinglieff
02.08.2016 13:42«If you are new to the industry and want to start making USB devices, the vendor ID from the USB-IF will cost you $5000 and the code signing certificate will probably cost a few hundred dollars per year.»
Нормально так, для независимых разработчиков самое то)navion
02.08.2016 13:51Про USB есть другой FAQ: производители чипов бесплатно дают клиентам PID под своим VID и есть диапазон от Lakeview Research.
merlin-vrn
02.08.2016 14:47Да ладно, я вот https://github.com/obdev/v-usb/blob/master/usbdrv/USB-IDs-for-free.txt использовал (конечно, когда игрался с V-USB).
VioletGiraffe
Это ж сколько ценного старого (или просто опенсорсного) софта перестанет работать…
dartraiden
На устройствах Microsoft Surface, где SecureBoot неотключаем.
На практически всех десктопных и мобильных платах он может быть выключен пользователем, которому нужен «ценный старый (или просто опенсорсный) софт».
Laney1
на Surface Pro Secure Boot прекрасно отключается. Не отключается только на тех, которые на армах, но про них уже все давно забыли.
SergiusTheBest