В состав Windows входит утилита certutil, которая предназначена для различных криптографических операций. У нее столько опций, что можно сравнить ее со швейцарским ножом! Я покажу три любопытные команды и подкину дополнительный материал.
Получение контрольной суммы файла
Алгортим хэша чувствителен к регистру: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512.
certutil -hashfile C:\temp\file.txt SHA1 SHA1 hash of C:\temp\file.txt: 3603da7069c7676140d511f4a7574dec8f342518
Преобразование кодов ошибок в текстовое сообщение
В документации Microsoft опубликованы коды ошибок Win32 и значения NTSTATUS, но утилита всегда под рукой.
certutil -error 0x00000005 0x5 (WIN32: 5 ERROR_ACCESS_DENIED) -- 5 (5) Error message text: Access is denied.
Загрузка файлов
certutil -urlcache -f -split https://live.sysinternals.com/PsExec64.exe
Упс, это тот редкий случай, когда защитник Windows блокирует работу утилиты, входящей в состав Windows :)
Злоумышленники любят использовать встроенные функции ОС для загрузки необходимых файлов на скомпрометированную систему. В данном случае угроза квалифицируется как Trojan:Win32/Ceprolad.A. Но пока есть обходной путь:
certutil -VerifyCTL -f -split https://live.sysinternals.com/PsExec64.exe CertUtil: -verifyCTL command FAILED: 0x8009310b (ASN: 267 CRYPT_E_ASN1_BADTAG) CertUtil: ASN1 bad tag value met.
Ошибку можно проигнорировать. Файл скачивается с именем вида fb0a150601470195c47b4e8d87fcb3f50292beb2.bin
.
Бонус: читайте серию статей про утилиту в блоге Вадимса Поданса. Из них я узнал, например, про недокументированный ключ -uSAGE
, показывающий больше параметров, чем -?
(стандартная справка).
Lecron
Сборник рецептов как не надо делать. Казалось бы, где загрузка файлов и коды ошибок ОС и где криптография. А регистрозависимый uSAGE, вообще вне категорий.
Хотелось бы узнать историю создания этого модуля. Как это было….
Vadim Sterkin
Загрузка файлов — побочный эффект функции проверки списка доверенных сертификатов verifyCTL.
Зависимость от регистра мне тоже непонятна, сам наступал на грабли sha1.
Коды ошибок — хороший вопрос ;)
Lecron
Предлагаю поменять порядок команд
certutil -VerifyCTL -f -split
для лучшей консистентности с другими примерами.
Vadim Sterkin
Согласен
Vadims Podāns
По поводу кодов ошибок, предлагаю своё видение зачем их приделали цертутилу. Корни этого растут очень давно, с Windows 2000 точно.
Дело в том, что криптография у Microsoft практически целиком и полностью сделана на COM интерфейсах (OLE). Были функции Win32 API, которые могли транслировать ошибку, но никто этот код не запилил в COM интерфейс и чтобы этот COM поставлялся с самой ОС. Поэтому команда CryptoAPI написала свой COM интерфейс c методом: ICertRequest::GetLastStatus (https://docs.microsoft.com/en-us/windows/desktop/api/certcli/nf-certcli-icertrequest-getlaststatus). Этот метод использовался для трансляции ошибок связанных с certificate enrollment. А при наличии готового API, уже решили прикрутить дополнительный ключ к цертутилу.
Бонус: в отличии от стандартных API трансляции кодов ошибок Win32, цертутил ещё может транслировать ошибки с некоторых дополнительных библиотек. Например, умеет транслировать ошибки специфичные для сетевого клиента, которые описаны в wininet.dll.
Lecron
Еще одна несуразность.
Утилита не показывает различий между командами -hashfile, -urlcache и их специфичными параметрами типа -f -split. Всё на один вид. Причем в хелпе по «-команда -?», рекомендуют вначале указывать параметры, а только затем команду «CertUtil [Параметры] -команда».
Dmitry
Про загрузку файлов.
Можно ли задать путь скачивания?
Vadim Sterkin
Виталий
Эх, были времена, когда я при помощи похожей утилиты certmgr подписывал модифицированные файлы Windows, и, при добавлении сертификата в нужное хранилище, винда считала файл своим и защищала правленый файл так же. как родной. Плюс не нужно было снимать защиту с него, плюс можно было подписать драйвер и ставить его без предупреждения. А сейчас…