Diário Qubes OS 03 - Yubikey e VM Windows

Publicado em 2017-07-07

Esse é o terceiro post de uma série analisando o Qubes OS. Comece pelo primeiro post.


Após os testes iniciais com o fone de ouvido USB, o próximo teste com um dispositivo mais exótico foi com a Yubikey Fido U2F.

Fido U2F Yubikey

A Yubikey é um token USB (uma espécie de pendrive bem fininho) que serve como fator de autenticação secundário para sites como o Facebook e o Gmail. O modelo mais barato de Yubikey utiliza um protocolo chamado U2F para autenticação.

De forma bem simplificada, o token guarda chaves privadas em um espaço de armazenagem interno seguro e quando um usuário tenta logar em um site onde o seu token foi vinculado, ele é validado pelo servidor antes de permitir o acesso.

O Qubes OS oferece documentação sobre o uso de uma Yubikey tradicional para login no sistema (algo que ainda não fiz, mas parece interessante) mas não existe documentação sobre o uso de uma chave do tipo U2F para logins em sites.

Depois de várias tentativas fracassadas (incluindo tentar usar o pacote ykpers e fazer o indicado neste bugreport) finalmente descobri a solução para uma AppVM suportar o token: instalar o pacote u2f-hidraw-policy na TemplateVM correspondente as AppVMs onde o token será usado. Basicamente:

user@fedora-23$ sudo dnf install u2f-hidraw-policy

Para verificar se o token foi reconhecido, após conectá-lo no computador, no DOM0 ele deve ser exibido pelo comando qvm-usb, e a após atribuí-lo a uma AppVM, um dispositivo chamado /dev/hidraw0 deve existir na VM (dica: leia hidraw como “hid raw” e não como “hi draw” e não se confunda 😉 )

Para utilizar a Yubikey rapidamente, basta inserir o token em uma das portas USB do PC e utilizar o script escrito no post anterior para habilitar o USB passthrough para a AppVM desejada:

[matheus@dom0 ~]$ ./usb_to_vm.sh web-pessoal Yubico

Para verificar o funcionamento em um site, utilize o site de testes U2F da Yubico. Caso o led do token se acenda, significa que o navegador detectou a presença do mesmo e vai utilizá-lo para validação do login.

Detalhe: até a publicação desse artigo o Firefox ainda não suporta o protocolo U2F (veja o bug report) então para logins em serviços que utilizam o U2F é necessário o Chrome/Chromium.

Windows no Qubes OS

Aqui começam alguns dos pequenos empecilhos de uso do Qubes. A documentação sobre a instalação e uso do Windows no Qubes é extensa (instalação, instalação das tools) porém ela apresenta deficiências.

Windows 7 HVM rodando no Qubes

Primeira dificuldade: Windows 10 não é suportado pelo Qubes 3.2 (issue no Github), então a única possibilidade real é usar o Windows 7.

Porém, para instalação dele no Qubes 3.2 a documentação está errada (ou pelo menos incompleta). Veja esse issue no Github.

Para instalar no Windows 7 no Qubes 3.2 é necessário seguir os passos listados na primeira mensagem desse issue, reproduzido aqui para posteridade:

  1. Create a new Windows HVM with qvm-create --hvm --label green win7
  2. Start it with an install ISO as described in the documentation
  • The VM will be stuck at the glowing logo: kill it with qubes VM manager
  • Copy the configuration file: cp /var/lib/qubes/appvms/win7/win7.conf /tmp
  • Edit the file, substituting the video driver from ‘xen’ to ‘cirrus’:
  • Start the VM using the modified config file: qvm-start win7 --custom-config=/tmp/win7.conf
  • Install windows note Windows will reboot a few times: make sure to start the VM with the --custom-config argument every time
  • When windows is successfully installed, disable driver signing with bcedit (see install docs)
  • Start the VM, but use the Qubes Tools option: qvm-start win7 --install-windows-tools
  • The VM will get stuck at the glowing logo: kill it with Qubes VM manager
  • Copy the config file: cp /var/lib/qubes/appvms/win7/win7.conf /tmp
  • Edit the file, replacing ‘xen’ with ‘cirrus’ like at step 5 (note: this file will not have the windows ISO as cdrom but the Qubes Tools ISO instead)
  • Start the VM using the modified config file: qvm-start win7 --custom-config=/tmp/win7.conf
  • Install Qubes tools, making sure to reboot with the --custom-config
  • When the Qubes tools are installed, try booting the VM with its own config file: qvm-start win7

Não é muito óbvio, mas a origem do problema é o suporte ao driver de vídeo “xen” durante a instalação do sistema; é necessário utilizar o driver “cirrus”, daí para realizar a instalação (depois disso o driver original pode ser usado sem problemas).

Uma outra dificuldade com VMs Windows no Qubes é que ela ainda não suporta o USB Passthrough, então não é possível utilizar dispositivos usb na VM a não ser atribuindo o controller USB inteiro para ela (mas nesse caso será necessário desligar a VM sys-usb antes).

Não fiz um teste completo de compatibilidade de todos os softwares que posso querer usar (até porque estou migrando tudo o que for possível para Linux), mas pelo menos a primeira vista parece bom o suficiente.


Esse foi o terceiro post em uma série sobre o Qubes OS. No próximo post devo falar sobre uma técnica para gravar screencasts e fazer compartilhamento de desktop no Qubes.

Se você quer ver mais conteúdo técnico, assine meu feed RSS, minha newsletter, ou meu facebook.