Como Assinar Um Driver Não Assinado No Windows 10 x64

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1de 20

Como assinar um driver não assinado para x64

Windows 10, 8.1 ou 7 com um certificado auto-


assinado
Por padrão, todas as versões do Windows de 64 bits, a partir do Windows 7, proíbem a instalação de drivers
de dispositivos que não estejam assinados com uma assinatura digital válida. Os drivers não assinados são
bloqueados pelo sistema operacional. A assinatura digital garante (até certo ponto) que o driver foi liberado
por um determinado desenvolvedor ou fornecedor, e seu código não foi modificado depois que foi assinado.

No Windows 10, 8.1 e 7 de 64 bits (x64), há várias maneiras de desativar a verificação de assinatura de
driver para os drivers não assinados: usando uma diretiva de grupo ou um modo de inicialização de teste.
Hoje mostraremos como assinar qualquer driver não assinado para a versão de 64 bits do Windows 10
ou do Windows 7 .

Suponha que você tenha um determinado driver de dispositivo não assinado (sem assinatura digital) para o
Windows 10 x64 ou o Windows 7 x64. Neste exemplo, é o driver da placa gráfica antiga. O arquivo com
drivers para sua versão do Windows foi baixado do site do fornecedor (consegui encontrar a versão do
driver de vídeo para o Windows Vista x64) e seu conteúdo foi extraído para c: \ tools \ drv1 \. Vamos tentar
instalar o driver adicionando-o ao repositório de drivers do Windows com uma ferramenta pnputil padrão:
Pnputil –ac:\tools\drv1\xg20gr.inf

Nota Este comando e todos os próximos devem ser executados no prompt de comando como administrador.

Durante a instalação do driver, o Windows 7 exibe um aviso de que o sistema não pode verificar a assinatura
digital deste driver:

Windows can't verify the publisher of this driver software.

No Windows 10, esse aviso não aparece, mas um aviso é exibido no console:

Processing inf: xg20gr.inf


Adding the driver package failed: The third-party INF does not contain digital
signature information.
Se você clicar com o botão direito no arquivo do driver inf e selecionar Instalar ao instalar um driver do
Gerenciador de arquivos, receberá um erro:

The third-party INF does not contain digital signature information.

Vamos tentar assinar este driver com um certificado autoassinado.

Conteúdo:

 Ferramentas para assinar drivers


 Criar um certificado autoassinado e uma chave privada
 Criando um arquivo de catálogo (CAT) para o pacote de driver
 Assinando o driver usando certificado autoassinado
 Instalando o certificado autoassinado
 Instalação do driver assinado com o certificado autoassinado

Ferramentas para assinar drivers


Para gerar uma assinatura e assinar o driver, você precisa baixar e instalar as seguintes ferramentas de
desenvolvimento de aplicativos do Windows (com as configurações padrão):

 Windows SDK (ou Microsoft Visual Studio 2005 ou posterior) para sua versão do Windows. Esses
pacotes incluem as ferramentas de assinatura do Windows SDK para Desktop, que incluem o
utilitário necessário - signtool.exe ;
 Kit de driver do Windows 7.1.0 .

Dica No Windows 10, você pode usar as versões mais recentes do Windows SDK e do Windows Driver Kit.
Antes de instalar essas ferramentas, verifique se o .NET Framework 4 está instalado no seu computador.

Criar um certificado autoassinado e uma chave privada


Crie uma pasta C: \ DriverCert na raiz da unidade do sistema.

Abra o prompt de comando e vá para o seguinte diretório:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin

Crie um certificado autoassinado e uma chave privada, que é emitida, por exemplo, para a empresa
WinOSHub:

makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub"


C:\DriverCert\myDrivers.cer

Durante a criação do certificado, a ferramenta solicitará que você especifique uma senha para a chave, seja
ela P @ ss0wrd .

Crie uma chave pública para um certificado de publicador (PKSC) que criamos anteriormente:

cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc

Combine a chave pública (.spc) e a chave privada (.pvk) em um único arquivo de certificado com o formato
Personal Information Exchange (.pfx):

pvk2pfx -pvk C:\DriverCert\Drivers.pvk -pi P@ss0wrd -spc C:\DriverCert\Drivers.spc -pfx


C:\DriverCert\Drivers.pfx -po P@ss0wrd

Dica Você pode criar um certificado de assinatura de código autoassinado sem usar ferramentas de terceiros
usando o cmdlet do PowerShell 5.0 - New-SelfSifgnedCertificate :
$cert = New-SelfSignedCertificate -Subject "Woshub” -Type CodeSigningCert -
CertStoreLocation cert:\LocalMachine\My

Então você precisa exportar este certificado para o arquivo pfx com a senha:

$CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force –AsPlainText


Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password
$CertPassword

Nota Embora o certificado tenha um período de validade limitado, a expiração do certificado CodeSigning
significa que você não pode criar novas assinaturas. A validade do driver já assinado por este certificado é
ilimitada (ou as assinaturas antigas são válidas durante o registro de data e hora especificado).

Criando um arquivo de catálogo (CAT) para o pacote de driver


Crie o diretório C: \ DriverCert \ xg20 e copie todos os arquivos da pasta na qual o driver do arquivo foi
originalmente extraído (c: \ tools \ drv1 \). Certifique-se de que existem arquivos com as extensões .sys e .inf
entre esses arquivos (no nosso caso, eles são xg20grp.sys e xg20gr.inf).

Vá para o diretório:

cd C:\WinDDK\7600.16385.1\bin\selfsign

Gere um arquivo CAT (contém informações sobre todos os arquivos no pacote do driver) na base do arquivo
INF. Na base de um arquivo inf usando a ferramenta inf2cat.exe (incluída no Windows Driver Kit - WDK),
gere um arquivo cat para sua plataforma (ele contém informações sobre todos os arquivos no pacote do
driver):

inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose


Para certificar-se de que o procedimento estava correto, verifique se o arquivo de log contém as mensagens:

Teste de sinalização completo .

Geração de catálogo completa .


Nota No meu caso, o comando Inf2Cat.exe retornou um erro:

Signability test failed.


Errors:
22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS)
in \hdx861a.inf

Para corrigir o erro, localize a linha com DriverVer = na seção [Version] e substitua-a por:

DriverVer=05/01/2009,9.9.9.9

Após o comando ser executado, o arquivo xg20gr.cat deve ser atualizado no diretório dos drivers.
Assinando o driver usando certificado autoassinado
Vá para a seguinte pasta:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin

Assine o conjunto de arquivos do driver com o certificado que você criou anteriormente usando Globalsign
como um serviço de registro de data e hora. O seguinte comando assinará o arquivo CAT com uma
assinatura digital usando um certificado armazenado em um arquivo PFX, protegido por uma senha:

signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t


http://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat

Se o arquivo for assinado com sucesso, a seguinte mensagem deverá aparecer:


Successfully signed: C:\DriverCert\xg\xg20gr.cat
Number of files successfully Signed: 1

Dica A assinatura digital do driver está contida no arquivo .cat mencionado no arquivo .inf. Você pode
verificar a assinatura digital do driver no arquivo cat usando o seguinte comando:

SignTool verify /v /pa c:\DriverCert\xg\xg20gr.cat


Ou nas propriedades do arquivo na guia Assinaturas Digitais:

O arquivo CAT contém assinaturas digitais (impressões digitais) de todos os arquivos que estão no diretório
do driver (arquivos listados no arquivo INF na seção CopyFiles). Se algum desses arquivos tiver sido
alterado, a soma de verificação dos arquivos não corresponderá aos dados no arquivo CAT e, como
resultado, a instalação desse driver falhará.

Instalando o certificado autoassinado


Como o certificado que criamos é autoassinado, por padrão, o sistema não confia nele. Adicione seu
certificado ao armazenamento de certificados do computador local. Você pode fazer isso usando os
seguintes comandos:

certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine ROOT


certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine TRUSTEDPUBLISHER

Ou faça isso com o assistente de importação de certificados gráficos (você precisa colocar o certificado nos
repositórios de Fornecedores Confiáveis e Autoridades de Certificação Raiz Confiáveis da máquina
local). Em um domínio, você pode distribuir esse certificado para o computador cliente usando a Diretiva de
Grupo .
Nota Você pode verificar se o certificado que criamos está na lista de certificados confiáveis abrindo o snap-
in de gerenciamento de certificados (certmgr.msc) e certificando-se de que nosso certificado (emitido para
nossa empresa) esteja nos armazenamentos correspondentes.

Dica Quando você verifica o armazenamento de certificados com o utilitário Sigcheck , esse certificado será
exibido como não confiável, porque não está listado na lista de certificados raiz da Microsoft (essa lista
precisa ser atualizada periodicamente).
Instalação do driver assinado com o certificado autoassinado
Tente instalar o driver que assinamos novamente usando o comando:

Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf

Agora você não verá o aviso sobre a assinatura digital ausente do driver.

Successfully installed the driver on a device on the system.


Driver package added successfully.

O seguinte aviso aparece no Windows 7 x64: Você gostaria de instalar o software do dispositivo? No
Windows 10 x64 1803, essa janela pop-up não aparece. Ao clicar em " Instalar ", você instala o driver no
sistema.

Se, por algum motivo, o driver não estiver instalado, o log detalhado de instalação do driver estará contido
no arquivo C: \ Windows \ inf \ setupapi.dev.log . Este arquivo de log permite que você obtenha mais
informações sobre os erros de instalação do driver. Na maioria dos casos, há um erro “Validação de
assinatura com falha no pacote do driver” - muito provavelmente, isso significa que o certificado do driver
não foi adicionado ao armazenamento de certificados confiáveis.
Se a instalação do driver foi bem-sucedida, o arquivo setupapi.dev.log deverá conter as seguintes linhas:

>>> [Device Install (DiInstallDriver) -


C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf]
>>> Section start 2018/07/22 23:32:57.015
cmd: Pnputil -i -ac:\DriverCert\xg\xg20gr.inf
ndv: Flags: 0x00000000
ndv: INF path:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf
inf: {SetupCopyOEMInf:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf} 13:23:37.046
inf: Copy style: 0x00000000
inf: Driver Store Path:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf
inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf
inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077
<<< Section end 2018/07/22 13:23:37.155
<<< [Exit status: SUCCESS]

Como você pode ver, para instalar o driver auto-assinado, nem precisávamos desativar a verificação de
assinatura digital dos drivers com os comandos bcdedit.exe:

bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS


bcdedit.exe /set testsigning ON

How to Sign an Unsigned Driver for x64 Windows


10, 8.1 or 7 with a Self-signed Certificate
By default, all 64-bit Windows versions, starting from Windows 7, prohibit to install devices drivers that are
not signed with a valid digital signature. Unsigned drivers are blocked by the operating system. The digital
signature guarantees (to some extent) that the driver has been released by a certain developer or vendor, and
its code hasn’t been modified after it was signed.

In 64-bit (x64) Windows 10, 8.1 and 7 there are several ways to disable driver signature verification for the
unsigned drivers: using a group policy or a test boot mode. Today we’ll show how to sign any unsigned
driver for the 64-bit version of Windows 10 or Windows 7.

Suppose you have a certain unsigned device driver (without digital signature) for Windows 10 x64 or
Windows 7 x64. In this example, it is the driver for quite old graphics card. The archive with drivers for
your Windows version has been downloaded from the vendor’s website (I was able to find the video driver
version for Windows Vista x64) and its contents has been extracted to c:\tools\drv1\. Let’s try to install the
driver by adding it to Windows driver store with a standard pnputil tool:
Pnputil –a c:\tools\drv1\xg20gr.inf

Note. This command and all the next ones must be run in the command prompt as administrator.
During driver installation, Windows 7 displays a warning that the system can’t verify the digital signature of
this driver:

Windows can’t verify the publisher of this driver software.

In Windows 10 this warning doesn’t appear, but a warning appears in the console:

Processing inf: xg20gr.inf


Adding the driver package failed: The third-party INF does not contain digital
signature information.

If you right click on the inf driver file and select Install when installing a driver from File Explorer, you
receive an error:

The third-party INF does not contain digital signature information.


Let’s try to sign this driver with a self-signed certificate.

Contents:

 Tools for Signing Drivers


 Create a Self-Signed Certificate and Private Key
 Creating a Catalog File (CAT) for Driver Package
 Signing the Driver Using Self-signed Certificate
 Installing the Self-Signed Certificate
 Installation of the Driver Signed with the Self-signed Certificate

Tools for Signing Drivers


To generate a signature and sign the driver, you need to download and install the following Windows
application development tools (with the default settings):

 Windows SDK (or Microsoft Visual Studio 2005 or later) for your version of Windows. These
packages include Windows SDK Signing tools for Desktop, which includes the necessary utility –
signtool.exe;
 Windows Driver Kit 7.1.0.

Tip. In Windows 10 you can use the newer versions of Windows SDK and Windows Driver Kit. Before
installing these tools, make sure that the .NET Framework 4 is installed on your computer.

Create a Self-Signed Certificate and Private Key


Create a C:\DriverCert folder in the root of the system drive.

Open the command prompt and go to the following directory:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin

Create a self-signed certificate and private key, that is issued, for example, for the company WinOSHub:

makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub"


C:\DriverCert\myDrivers.cer

During the creation of the certificate, the tool will prompt you to specify a password for the key, let it be
P@ss0wrd.
Create a public key for a publisher certificate (PKSC) we have created earlier:

cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc

Combine the public key (.spc) and the private key (.pvk) in a single certificate file with format Personal
Information Exchange (.pfx):

pvk2pfx -pvk C:\DriverCert\Drivers.pvk -pi P@ss0wrd -spc C:\DriverCert\Drivers.spc -pfx


C:\DriverCert\Drivers.pfx -po P@ss0wrd

Tip. You can create a self-signed Code Signing certificate without using third-party tools by using the
PowerShell 5.0 cmdlet – New-SelfSifgnedCertificate:

$cert = New-SelfSignedCertificate -Subject "Woshub” -Type CodeSigningCert -


CertStoreLocation cert:\LocalMachine\My

Then you need to export this certificate to the pfx file with the password:

$CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force –AsPlainText


Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password
$CertPassword
Note. Although the certificate has a limited validity period, the expiration of the CodeSigning certificate
means that you can’t create new signatures. The validity of the driver already signed by this certificate is
unlimited (or old signatures are valid during the specified timestamp).

Creating a Catalog File (CAT) for Driver Package


Create the directory C:\DriverCert\xg20 and copy all files from the folder into which the driver from the
archive has been originally extracted (c:\tools\drv1\). Make sure that there are files with the extensions .sys
and .inf among these files (in our case, they are xg20grp.sys and xg20gr.inf).

Go to the directory:

cd C:\WinDDK\7600.16385.1\bin\selfsign

Generate a CAT file (contains information about all the files in the driver package) on the base of the INF
file. On the base of an inf file using the inf2cat.exe tool (included in the Windows Driver Kit – WDK)
generate a cat file for your platform (it contains information about all files in the driver package):

inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose

To make sure that the procedure was correct, check if the log file contains the messages:

Signability test complete.

and

Catalog generation complete.


Note. In my case the command Inf2Cat.exe returned an error:

Signability test failed.


Errors:
22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS)
in \hdx861a.inf

To fix the error, find the line with DriverVer = in the [Version] section and replace it with:

DriverVer=05/01/2009,9.9.9.9

After the command is executed, the xg20gr.cat file should be updated in the drivers’ directory.

Signing the Driver Using Self-signed Certificate


Go to the following folder:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin

Sign the set of the driver files with the certificate you have created earlier using Globalsign as a timestamp
service. The following command will sign the CAT file with a digital signature using with a certificate
stored in a PFX file, protected by a password:

signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t


http://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat

If the file is successfully signed, the following message should appear:


Successfully signed: C:\DriverCert\xg\xg20gr.cat
Number of files successfully Signed: 1

Tip. The digital signature of the driver is contained in the .cat file referenced in the .inf file. You can check
the digital signature of the driver in the cat file using the following command:

SignTool verify /v /pa c:\DriverCert\xg\xg20gr.cat


Or in the file properties on the Digital Signatures tab:
The CAT file contains digital signatures (thumbprints) of all the files that are in the driver directory (files
listed in the INF file in the CopyFiles section). If any of these files has been changed, the checksum of the
files will not match the data in the CAT file, and, as a result, the installation of such a driver will fail.

Installing the Self-Signed Certificate


Since the certificate we created is self-signed, by default the system doesn’t trust it. Add your certificate to
the local computer certificate store. You can do it using the following commands:

certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine ROOT


certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine TRUSTEDPUBLISHER

Or do it with the graphical certificate import wizard (you need to place the certificate in the Trusted
Publishers and Trusted Root Certification Authorities stores of the local machine). In a domain, you can
distribute this certificate to client computer using Group Policy.

Note. You can check if the certificate we created is in the list of trusted certificated by opening the
certificate management snap-in (certmgr.msc) and making sure that our certificate (issued for our company)
is in the corresponding stores.
Tip. When you check the certificate store with the Sigcheck utility, this certificate will be displayed as
untrusted, because it is not on the listed in the list of Microsoft root certificates (this list needs to be updated
periodically).

Installation of the Driver Signed with the Self-signed Certificate


Try to install the driver we have signed again using the command:

Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf

Now you won’t see the warning about the missing digital signature of the driver.

Successfully installed the driver on a device on the system.


Driver package added successfully.
The following warning appears in Windows 7 x64: Would you like to install this device software? In
Windows 10 x64 1803, this pop-up window doesn’t appear. By clicking «Install», you install the driver in
the system.

If for some reason the driver is not installed, the detailed driver installation log is contained in the file
C:\Windows\inf\setupapi.dev.log. This log file allows you to get more information about the driver
installation errors. In most cases, there is a “Driver package failed signature validation” error – most likely
this means that the driver certificate is not added to the trusted certificates store.

If the driver installation was successful, the setupapi.dev.log file should contain the following lines:

>>> [Device Install (DiInstallDriver) -


C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf]
>>> Section start 2018/07/22 23:32:57.015
cmd: Pnputil -i -a c:\DriverCert\xg\xg20gr.inf
ndv: Flags: 0x00000000
ndv: INF path:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf
inf: {SetupCopyOEMInf:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf} 13:23:37.046
inf: Copy style: 0x00000000
inf: Driver Store Path:
C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr
.inf
inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf
inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077
<<< Section end 2018/07/22 13:23:37.155
<<< [Exit status: SUCCESS]

As you can see, to install the self-signed driver we did not even have to disable the digital signature
verification of the drivers with the bcdedit.exe commands:

bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS


bcdedit.exe /set testsigning ON

Você também pode gostar