terça-feira, 23 de outubro de 2018

Como está o suporte ao Linux do Ghost

Creating ext4 filesystem

A partir da suíte Ghost Solution Suite 3.0, suporte ao Linux foi melhorado. Binários ELF x86-32 passaram ser distribuídos e suporte ao EXT4 foi adicionado. Contudo, há limitações.

- Apenas EXT2/3/4 são suportados sem recorrer à opção -ia, que faz ineficiente cópia bit-a-bit.

- Versão 12.0.0.10517+ é requerida para sistemas EXT4 com recurso 64bit ativo.

- EXT4 com recurso metadata_csum não é suportado até a versão 12.0.0.10618 (última enquanto escrevo). Passou a ser usado por padrão a partir da versão 1.44 da suíte e2fsprogs (Debian e derivados adotaram a mudança na 1.43). É possível editar o arquivo /etc/mke2fs.conf antes de iniciar o instalador para reverter:

--- /etc/mke2fs.conf 2018-03-24 19:13:28.000000000 +0000
+++ /etc/mke2fs.conf 2018-10-14 11:20:19.918861668 +0000
@@ -11,7 +11,7 @@
   features = has_journal
  }
  ext4 = {
-  features = has_journal,extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize
+  features = has_journal,extent,huge_file,flex_bg,uninit_bg,64bit,dir_nlink,extra_isize
   inode_size = 256
  }
  small = {

- Em instalações BIOS/CSM, o modo de clonagem de disco não está preservando o código de boot do GRUB corretamente (mesmo com a opção -ib) — funcionava no tempo do GRUB Legacy. Em instalações UEFI, falha com erro misterioso ao tentar acessar a partição ESP.

Funciona bem o modo de clonagem de partição (pcreate, prestore). Esse modo requer que o particionamento esteja previamente presente e que o bootloader seja reinstalado após a restauração. Ou seja, nada diferente do FSArchiver, que é muito mais completo. O Ghost seria vantajoso caso o modo de clonagem de disco funcionasse, pois particionaria automaticamente e entregaria o sistema inicializável no final sem passos adicionais.

sábado, 6 de outubro de 2018

Estou Zen

Para constar nos registros do blog, agora estou Zen:

Dell Inspiron 5675

Manual: inspiron-5675-gaming-desktop_owners-manual_en-us.pdf

Configuração simples com AMD Ryzen 5 1400, Radeon RX 560.

quarta-feira, 25 de julho de 2018

Particionamento MBR no openSUSE Leap 15.0

openSUSE Leap 15.0+ cria por padrão particionamento GPT mesmo ao inicializar via BIOS. Para usar MBR, recorra ao particionador avançado, clique em "Avançado..." e depois em "Criar nova tabela de partição". Selecione então "MS-DOS (estilo clássico)". Daí para frente, crie as partições a gosto.


quarta-feira, 11 de julho de 2018

FSArchiver 0.8.5 suporta melhor sistemas EXT

Fiz algumas melhorias no suporte aos sistemas de arquivos EXT nesta versão.

- UUID é definido pelo mke2fs no momento da formatação se o programa não for pré-histórico (1.41.4+).

- Quando uma imagem contendo outro sistema de arquivos é convertida para EXT2/3/4, ext_attr é habilitado e inodes de 256 bytes são usados[1] e, para EXT4, além de extent, que é mandatório, huge_file, flex_bg, uninit_bg, dir_nlink e extra_isize são habilitados. É o conjunto de recursos base da suíte e2fsprogs 1.41, que manteve-se na série 1.42 em dispositivos menores que 16 TiB. 64bit não é habilitado incondicionalmente[2] como na versão 1.43, nem metadata_csum como na 1.44.

- No upgrade de EXT2 para EXT3, tamanho original do inode é mantido. Assim, imagens de distribuições muito velhas, que usem EXT2 com inodes de 128 bytes, têm mais chance de serem transplantadas com sucesso para EXT3.

- Upgrade de EXT2 revisão 0 para EXT3/4 funciona. Apenas para exatidão do código mesmo, pois tais sistemas têm mais de vinte anos.

Com essas mudanças, a opção mkfs=ext4 do argumento restfs é usável. O sistema EXT4 terá as características mínimas necessárias.


[1] Padrão desde o mke2fs 1.40.5 (27 de janeiro de 2008).
[2] O programa habilitará, contudo, caso detecte dispositivo ≥ 16 TiB.

domingo, 24 de junho de 2018

Squid + ssl-bump e as hierarquias tupiniquins

Antes de assinar páginas com seu certificado, quando bump é feito (não aplica-se a splice[1]), o Squid validará o certificado do servidor web. Em caso de falha, retornará uma página de erro ao cliente — a menos que liberemos com sslproxy_cert_error, que é perigoso.


Precisamos instalar as autoridades certificadoras raiz brasileiras na máquina onde o Squid roda.

Fedora/RHEL e derivados[2]:

# wget http://acraiz.icpbrasil.gov.br/credenciadas/RAIZ/ICP-Brasilv2.crt -O /etc/pki/ca-trust/source/anchors/ICP-Brasilv2.pem
# wget http://acraiz.icpbrasil.gov.br/credenciadas/RAIZ/ICP-Brasilv5.crt -O /etc/pki/ca-trust/source/anchors/ICP-Brasilv5.pem
# update-ca-trust
# systemctl reload squid.service

(enquanto escrevo, V2 e V5 estão em uso)

Ao servirem páginas assinadas por certificados intermediários (a maioria), servidores web bem configurados entregam a cadeia necessária, que é usada pelo Squid 4+. Para os raros casos de servidores que não o façam, dá para especificar manualmente com:

sslproxy_foreign_intermediate_certs /caminho/cadeia.pem

Relacionado:
Modos de funcionamento do Squid


[1] Tráfego passa sem modificações pelo proxy. As CAs devem ser instaladas nos clientes.
[2] Features/SharedSystemCertificates.

quinta-feira, 21 de junho de 2018

Modos de funcionamento do Squid

Considerando forward proxies, temos:

Não transparente

http_port 3128

Modo tradicional. Os clientes precisam ser configurados para usarem o proxy. NAT não é requerida no servidor — é desaconselhável inclusive[1]. Tráfego HTTP é filtrado e cacheado. Tráfego HTTPS é tunelado sem modificações; portanto, não é cacheado. Domínios HTTPS podem ser filtrados; URLs HTTPS (que incluem a parte interna dos endereços) não são visíveis, pois, após a conexão TLS[2] ser estabelecida, o proxy nada mais sabe a respeito.

Transparente HTTP

# sysctl -w net.ipv4.ip_forward=1
# iptables -t mangle -A PREROUTING -i int_interna -p tcp -m tcp --dport 3129 -j DROP
# iptables -t nat -A PREROUTING -i int_interna -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
# iptables -t nat -A POSTROUTING -o int_externa -j MASQUERADE

http_port 3128
http_port 3129 intercept

Dispensa configuração nos clientes. NAT é requerida. Tráfego da porta 80, proveniente da rede interna, é redirecionado para o próprio servidor, sendo interceptado pelo Squid. Tráfego HTTP é filtrado e cacheado. Tráfego HTTPS é tunelado e domínios e URLs HTTPS não podem ser filtrados — mesmo que o usuário tente acessar sem https://, HSTS[3], cada vez mais popular, efetivamente impede qualquer tipo de controle.

Transparente HTTP + HTTPS

# sysctl -w net.ipv4.ip_forward=1
# iptables -t mangle -A PREROUTING -i int_interna -p tcp -m tcp --dport 3129:3130 -j DROP
# iptables -t nat -A PREROUTING -i int_interna -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
# iptables -t nat -A PREROUTING -i int_interna -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130
# iptables -t nat -A POSTROUTING -o int_externa -j MASQUERADE

http_port 3128 ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
http_port 3129 intercept
https_port 3130 intercept ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
acl etapa1 at_step SslBump1
ssl_bump peek etapa1
ssl_bump bump all

Mais problemático de todos. Dispensa configuração nos clientes. NAT é requerida. Squid 4+ altamente recomendável[4]. A parte HTTP continua como antes. Contudo, com ssl-bump, o Squid torna-se MITM[5]: estabelece a conexão com o servidor HTTPS (via TLS como de costume), inspeciona o que está sendo acessado e por fim assina o site novamente com um certificado próprio[6], gerado sob medida para aquele domínio e entrega-o ao cliente. Pelo fato de decriptar a conexão TLS, é possível filtrar URLs, bem como armazenar os dados transferidos no cache.

Tais vantagens não vêm sem contraindicações: não funciona em todos os sites, requer a autoridade certificadora (CA) instalada nos clientes e levanta uma grande questão de privacidade. Afinal, você está xeretando dentro de conexões que eram para ser privativas. E a segurança da chave privada passa a ser sua responsabilidade!

Para tentar lidar com a quebradeira, dá para recorrer a listas de domínios que devem (ou não) sofrer bump[7]. Algo a destacar é que as ACLs ssl::server_name e ssl::server_name_regex devem ser usadas nesse processo.

Lista negra:

http_port 3128 ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
http_port 3129 intercept
https_port 3130 intercept ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
acl sem_bump ssl::server_name_regex -i bradesco
acl etapa1 at_step SslBump1
ssl_bump peek etapa1
ssl_bump splice sem_bump
ssl_bump bump all

Configuração menos encrenqueira:

http_port 3128 ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
http_port 3129 intercept
https_port 3130 intercept ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
acl etapa1 at_step SslBump1
ssl_bump peek etapa1
ssl_bump splice all

splice all não faz bump (nada de cache). peek etapa1 dá acesso a SNI[8], que torna as ACLs dstdomain e dstdom_regex funcionais. Nos clientes, a CA serve apenas para exibir a página de erro do Squid. Ou seja, não é estritamente requerida.

Note que é possível manter o proxy normal, sem ssl-bump, na porta 3128:

http_port 3128
http_port 3129 intercept
https_port 3130 intercept ssl-bump tls-cert=/caminho/ca.pem tls-key=/caminho/ca.key
...

É uma saída para situações em que ssl-bump é problemático: configure manualmente no navegador para evitá-lo.

Fique de olho na lista de discussão squid-users e pendure uma ferradura na parede se for usar o recurso.

No modo transparente, é importante bloquear[9] acessos vindos da rede interna às portas 3129 e 3130, caso o usuário invente de configurar manualmente. Se chegarem ao Squid, serão bloqueados e cache.log será inundado com avisos Host header forgery detected.

Na minha opinião, o modo tradicional, não transparente, sem ssl-bump, é a melhor escolha, pois permite filtrar domínios e não abre a Caixa de Pandora que é mexer com TLS. Além de possibilitar uso de autenticação, recurso do contrário perdido. Dependendo do ambiente, autoconfiguração ajuda, principalmente com clientes Windows.

Com a indústria descontinuando HTTP, cada vez menos coisa é cacheada com HTTPS, mas pelo menos controle sobre o que é acessado continua viável.

Relacionado:
Squid + ssl-bump e as hierarquias tupiniquins


[1] Servidor DNS local é necessário nesse caso.
[2] Transport Layer Security.
[3] HTTP Strict Transport Security.
[4] Precisa ser compilado com --with-openssl. A partir da versão 4.0.24, GnuTLS é suportado também (--with-gnutls), porém é considerado experimental.
[5] Man-in-the-middle attack.
[6] Intercept HTTPS CONNECT messages with SSL-Bump.
[7] Feature: SslBump Peek and Splice.
[8] Server Name Indication.
[9] Os comandos iptables deste post são mínimos, apenas para fazer o Squid funcionar. Em produção, proteção de um firewall é recomendada.

segunda-feira, 2 de abril de 2018

Usando o MemTest86 em UEFI

Um dos primeiros posts deste blog foi sobre como usar o Memtest86+.

Desde lá, a PassMark comprou o projeto original (sem o +) e voltou a desenvolvê-lo exclusivamente para UEFI (atual versão 7.x). A antiga versão 4.x (BIOS-only) foi descontinuada. O fork Memtest86+ também parece ter sido abandonado.

É disponibilizado um programa para criar pendrive booteável, mas, para quem apenas quer a versão UEFI, é exagero. Visto que o firmware sabe ler FAT e FAT32, basta copiarmos a pasta EFI da imagem ISO. Funciona com Secure Boot.

Changelog aqui.


terça-feira, 27 de fevereiro de 2018

Windows 10 1709 e compartilhamentos sem autenticação

Foram notícia, quando a versão 1709 saiu, as mudanças feitas pela Microsoft no servidor e cliente SMB:

SMBv1 is not installed by default in Windows 10 Fall Creators Update and Windows Server, version 1709

SMBv1 (Windows XP/Server 2003 e anteriores) foi aposentado. Com exceção de certos NAS rodando versões caducas do Samba, SMBv1 não faz mais falta.

Outra mudança mais sutil deu as caras nas versões Server, Enterprise e Education:

Guest access in SMB2 disabled by default in Windows 10 Fall Creators Update and Windows Server 2016 version 1709

Acesso a compartilhamentos sem autenticação, através da conta Convidado, são bloqueados. Tais compartilhamentos são habilitados, no Windows, selecionando "Desativar compartilhamento protegido por senha" em "Central de Rede e Compartilhamento → Alterar as configurações de compartilhamento avançadas", ou ao usar map to guest = Bad User no Samba.


Mesmo não sendo boa prática, é algo comum em pequenas redes.

Para voltar a acessá-los:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"AllowInsecureGuestAuth"=dword:00000001

Ou via GPO:

Configuração do Computador → Modelos Administrativos → Rede → Estação de trabalho do LANMAN
    Habilitar logons de convidados não seguros (Habilitado)

sexta-feira, 9 de fevereiro de 2018

VLC 3.0.0

Depois que o MPC-HC foi descontinuado, precisava substituí-lo. Usar software abandonado traz riscos, pois falhas de segurança não são corrigidas.

VLC é o candidato ao posto. Infelizmente, a versão 2.2.8 não está em bom estado no Windows. Decodificação via GPU não funciona e, mesmo ao usar a CPU, o desempenho é ruim. Alguns vídeos que tocam perfeitamente no MPC-HC engasgam no VLC.

Partes importantes do programa foram reescritas na recém lançada versão 3.0.0, resolvendo vários bugs. Passou a ser meu novo tocador de vídeos no Windows (no Linux o é faz tempo).

Lista de mudanças: NEWS.

quarta-feira, 31 de janeiro de 2018

Como evitar que o Windows 10 apague o cache de miniaturas

Depois que o Windows 10 atualizou para a versão 1709, codinome Redstone 3, vulgo Fall Creators Update, o cache de miniaturas do Windows Explorer passou a ser apagado automaticamente no mínimo uma vez por dia. Horrível, pois, ao acessar pastas com muitas imagens e vídeos, as miniaturas são recriadas, tornando a navegação lenta e a busca difícil.

Não tenho ideia da motivação por trás desse comportamento. Ou se é apenas bug. No Microsoft Community, achei esta dica:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache]
"Autorun"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache]
"Autorun"=dword:00000000

Até agora resolveu!

terça-feira, 30 de janeiro de 2018

Usando o sfdisk

Os programas cfdisk, fdisk e sfdisk, da suíte util-linux, voltaram a ser desenvolvidos de uns anos para cá. São particionadores modernos, que levam em conta a topologia do disco ao alinhar as partições e suportam GPT.

Me concentrarei no sfdisk, a ferramenta scriptável. Existem duas formas de fornecer-lhe entrada.

Esta é mais simples:

início tamanho tipo booteável

Os campos são separados por espaços, vírgulas ou ponto e vírgulas (uso vírgulas). Ao ser omitido, o programa adota um valor padrão para cada campo:

início:    primeiro setor livre
tamanho:   máximo disponível
tipo:      partição Linux, 0x83 (MBR/MS-DOS), 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (GPT)
           (ver sfdisk(8) para outros tipos)
booteável: desabilitado (MBR/MS-DOS apenas)

Ao criar mais de uma partição, cada uma é representada por uma linha. Exemplo:

,50G,L,*
,,L

Primeira linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor disponível, que, num disco limpo, considerando o alinhamento, equivale ao setor 2048.
- tamanho: 50 GiB (pode ser arredondado devido ao alinhamento).
- tipo: L é um atalho para partição Linux.
- booteável: * significa habilitado (vazio ou - significa desabilitado).

Segunda linha:
- início: vazio (nada antes da vírgula), corresponde ao primeiro setor após a partição anterior de 50 GiB (pode ser arredondado devido ao alinhamento).
- tamanho: vazio (nada entre as vírgulas), máximo disponível.
- tipo: L é um atalho para partição Linux.
- booteável: vazio (desabilitado).

Especificar tipo L é opcional, visto que é o padrão. Contudo, coloco mesmo assim para ajudar na organização.

MBR e GPT

Tipo de particionamento é especificado através da opção --label, cujos valores possíveis são dos, gpt, sun e sgi (os dois últimos não têm utilidade em PCs).

Voltando ao exemplo, podemos simplesmente enviar as linhas via STDIN:

# echo -e ',50G,L,*\n,,L' | sfdisk --label=dos /dev/sdx

# echo -e ',512M,U\n,,L' | sfdisk --label=gpt /dev/sdx

(U é EFI System Partition)

Colisões

Como discutido em Assinaturas, temos opções para evitar colisões de assinaturas: --wipe para o disco inteiro e --wipe-partitions para partições.

Para passar o rodo num disco já particionado e recomeçar do zero:

# echo -e ',50G,L,*\n,,L' | sfdisk --wipe=always --wipe-partitions=always --label=dos /dev/sdx

Cria novo rótulo (nova tabela de partições), apagando todas eventuais assinaturas presentes.

Ambas passaram a funcionar sem bugs a partir da versão 2.30 da suíte util-linux.

Udev

Ao usar --wipe=always, existe uma grande probabilidade do udevd interferir no processo. O sfdisk apaga a assinatura de disco existente antes de continuar. Isso gera um uevent — o disco deixou de ser particionado momentaneamente —, que dispara processamento do udevd, com finalidade de atualizar suas propriedades. O sfdisk pode falhar em informar ao kernel quando o novo particionamento for completado se o udevd ainda estiver mantendo o dispositivo aberto.

Existe uma API que suprime o processamento de uevents enquanto uma trava exclusiva for mantida no dispositivo.

# echo -e ',50G,L,*\n,,L' | flock /dev/sdx sfdisk --wipe=always --wipe-partitions=always --label=dos /dev/sdx
# udevadm settle

A invocação de flock garante que o comando não falhará. Caso o udevd esteja trabalhando no dispositivo, flock aguarda. E, quando sfdisk finaliza, a trava é removida e o processamento de uevents recomeça.

Por fim, chamamos udevadm settle depois do particionamento. Assim, garantimos que a fila de eventos do udevd estará vazia quando passarmos para os próximos comandos do script. Os dispositivos das partições (/dev/sdx1, /dev/sdx2, etc) estarão prontos, livres de quaisquer assinaturas anteriores, para serem formatados com seu sistema de arquivos preferido.

segunda-feira, 29 de janeiro de 2018

Sem antivírus? Windows Update ficará empacado

Quem não usa antivírus precisa adicionar esta chave no registro, pois do contrário o Windows Update não baixará as atualizações KB4056892 (Windows 10 1709), KB4056891 (Windows 10 1703), KB4056890 (Windows 10 1607), KB4056898 (Windows 8.1) e KB4056897 (Windows 7):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat]
"cadca5fe-87d3-4b96-b7fb-a231484277cc"=dword:00000000

Mitigam as falhas de segurança Meltdown (Intel) e Spectre (variante 1; Intel e AMD). Já a variante 2 da Spectre (Intel e AMD) só com atualização de BIOS/UEFI ou recompilação dos programas por um compilador que implemente retpolines.

domingo, 21 de janeiro de 2018

Série Divergente


Atenção! Contém spoilers!

Terminei de ler os três livros da série: Divergente, Insurgente e Convergente. Legais, apesar dos constantes questionamentos amorosos de Tris cansarem, principalmente no primeiro.

Daí fui assistir aos filmes... que decepção.

Em Divergente, até que o roteiro ficou mais ou menos dentro da história. O final, quando Quatro comanda a simulação de ataque, é modificado, porém dá para engolir com boa vontade.

Em Insurgente, começa a invencionice. Partes que me irritaram: o interrogatório de Tris e Quatro na sede da Franqueza, o esfaqueamento de Eric por Tris, suprimido do filme, a rendição espontânea de Tris à Erudição, sua quase execução e o assassinato de Jeanine.

Quatro, no interrogatório, é frio como de costume. Tris, naquela altura, não é mais tão sentimental. Sente-se angustiada por ter matado seu amigo Will. Remói-se em pensamentos quando lembra disso, mas não perde o controle. Resite ao soro da verdade e decide falar sobre o assunto por escolha. Entristecida, coloca para fora, mesmo sabendo que arruinará a amizade com sua melhor amiga Christina. Ao contrário da palhaçada do filme, onde Tris tem um ataque de choro.

A partir da rendição de Tris à Erudição, o filme esculhamba para valer. No livro, Tris — depois de salva por Peter —, traindo Quatro, tenta impedir que Tori, comandande da Audácia e líder da revolta junto com Evelyn e seu exército sem-facção, mate Jeanine, mas acaba não conseguindo. Terminada a revolta, Evelyn sobrepuja Tori e passa a comandar a cidade, acabando com as facções. Surgem os Leais, grupo revolucionário defensor das mesmas. Esse grupo começa o próximo livro, Convergente. Isso tudo está modificado ou inexistente no filme. E a tal da caixa com a mensagem de Edith Prior não existe no livro. Quatro, obrigando Caleb a ajudá-lo, acha a gravação no laboratório de Jeanine.

A série Divergente é uma ficção crível. Excetuando-se uma passagem que outra um pouco forçada, não há elementos futurísticos caricatos. No entanto, na adaptação para cinema de Convergente, fizeram uma baboseira realmente inviável, cuja fidelidade à história é zero. Para piorar, é um daqueles filmes que abusam de efeitos especiais, sem parar. Intragável. Nem mesmo a morte de Tris, a protagonista!, no final é seguida. A propósito, não gostei que Tris tenha morrido. :-(

Como sempre: prefira os livros.

segunda-feira, 8 de janeiro de 2018

PCID/INVPCID: fundamentais agora em hardware Intel

Para não comprometer demais o desempenho de programas que dependam muito de chamadas de sistema, os patches que mitigam a falha Meltdown têm requerimentos importantes, para os quais ninguém dava bola antes: PCID (Process-Context IDentifier) e a instrução INVPCID (INValidate Process-Context IDentifier).

PCID está presente desde os Intel Sandy Bridge, a segunda geração dos i3/i5/i7. INVPCID está presente desde os Haswell, a quarta geração.

Windows requer INVPCID para não precisar recorrer a flushes de TLB a cada interrupção ou troca de contexto. Linux requer pelo menos PCID.

No Linux, procure por pcid e invpcid na linha flags de /proc/cpuinfo (ou na saída de lscpu). No Windows, use o Coreinfo (asterisco ao lado de PCID e INVPCID).

Nota 1: PCIDs são suportados apenas em x86-64.
Nota 2: Processadores AMD não são afetados.