Obrigado a todos por terem vindo, hoje falaremos sobre a criptografia total do disco rígido (FDE), que não é tão segura quanto você pensa. Levante as mãos, que criptografam o disco rígido do seu computador. Incrível! Bem, então seja bem-vindo à DefCon!

Parece que 90% de vocês usam software de código aberto para criptografar sua unidade para poder auditá-la. Agora deixe aqueles que desligam o computador se o deixarem sem vigilância levantarem as mãos. Penso em cerca de 20% dos presentes. Diga-me, quem deixa o computador sem vigilância por várias horas, importa se está ligado ou desligado? Considere-me fazendo essas perguntas, apenas certifique-se de que você não é zumbi e não está dormindo. Eu acho que quase todo mundo teve que deixar o computador por pelo menos alguns minutos.
Então, por que criptografamos nossos computadores? É difícil encontrar alguém que faça essa pergunta, então eu acho que é realmente importante formular a motivação para ações específicas no campo da segurança. Se não fizermos isso, não conseguiremos entender como organizar este trabalho.
Há muita documentação para o software de criptografia de disco que descreve o que o software faz, quais algoritmos ele usa, quais senhas e assim por diante, mas não há quase nenhum lugar para dizer por que isso é feito.
Portanto, criptografamos nosso computador porque queremos controlar nossos dados, queremos garantir sua confidencialidade e que ninguém pode roubá-los ou alterá-los sem nosso conhecimento. Queremos decidir por nós mesmos o que fazer com nossos dados e controlar o que acontece com ele.
Há situações em que você simplesmente deve garantir a confidencialidade dos dados, por exemplo, se você é um advogado ou médico com informações confidenciais do cliente. O mesmo se aplica à documentação financeira e contábil. As empresas são obrigadas a informar os clientes sobre o vazamento dessas informações, por exemplo, se alguém deixou um laptop desprotegido em um carro roubado e agora essas informações confidenciais podem estar disponíveis gratuitamente na Internet.
Além disso, é necessário controlar o acesso físico ao computador e garantir sua proteção contra impactos físicos, porque o FDE não ajudará se alguém assumir o controle físico do computador.
Se queremos garantir a segurança da rede, precisamos controlar o acesso ao computador do usuário final. Não conseguiremos construir uma Internet segura sem garantir a segurança de cada usuário final.

Então, descobrimos os aspectos teóricos da necessidade de criptografia de disco. Sabemos como gerar números aleatórios para garantir a segurança das chaves, como controlar os modos de criptografia de bloco usados para criptografar completamente uma unidade, como herdar com segurança uma chave para senhas, para que possamos assumir que a "missão está concluída", como disse o presidente Bush, em a bordo de um porta-aviões. Mas você sabe que não é assim, e ainda temos muito o que fazer para concluí-lo.
Mesmo que você tenha criptografia perfeita e saiba que é quase impossível decifrar, em qualquer caso, ela deve ser implementada em um computador real, onde você não tem análogos de "caixas pretas" confiáveis. Um invasor não precisa atacar a criptografia se estiver tentando quebrar a criptografia de disco completo. Para fazer isso, ele só precisa atacar o próprio computador ou de alguma forma induzir o usuário a convencê-lo a fornecer uma senha ou usar o keylogger keylogger, etc.
O uso real da criptografia não corresponde ao modelo de segurança do FDE. Se você olhar para o software projetado para criptografia de disco completo, poderá ver que seus criadores prestaram muita atenção aos aspectos teóricos da criptografia. Citarei um trecho da documentação técnica do site TrueCrypt: "Nosso programa não protegerá nenhum dado no computador se o invasor tiver acesso físico ao computador antes do lançamento ou durante a operação do TrueCrypt".

Em princípio, todo o modelo de segurança é assim: "se o nosso programa criptografar corretamente o disco e descriptografar o disco corretamente, nós fizemos o nosso trabalho". Peço desculpas pelo texto que é mostrado no próximo slide. Se for difícil ler, eu mesmo o farei. Estes são trechos da correspondência entre os desenvolvedores do TrueCrypt e a pesquisadora de segurança Joanna Rutkovskaya sobre os ataques do "limpador".
TrueCrypt: “Nunca consideramos a possibilidade de ataques de hardware, apenas assumimos o pior. Depois que o invasor "trabalhou" no seu computador, basta parar de usá-lo para armazenar informações confidenciais. O processador de criptografia TPM não pode impedir ataques de hardware, por exemplo, usando keyloggers.
Joanna Rutkovskaya perguntou-lhes: "Como posso determinar se um invasor" funcionou "ou não no seu computador, porque você não carrega um laptop o tempo todo com você?", Ao qual os desenvolvedores responderam: "Não nos importamos com o modo como o usuário garante a segurança. seu computador Por exemplo, um usuário pode usar uma trava ou colocar um laptop enquanto estiver fora de um armário ou cofre. ” Joanna respondeu-lhes muito corretamente: "Se vou usar uma fechadura ou um cofre, por que preciso da sua criptografia?"

Portanto, ignorar a possibilidade de um ataque desse tipo é uma farsa, não podemos fazer isso! Vivemos no mundo real onde esses sistemas existem com os quais interagimos e com os quais usamos. Não há como comparar 10 minutos de um ataque realizado apenas usando software, por exemplo, de uma unidade flash, com algo que você pode executar manipulando o sistema exclusivamente com hardware.
Portanto, não importa o que digam, a segurança física e a resiliência a ataques físicos dependem da FDE. Não importa o que você está desistindo de seu modelo de segurança e, pelo menos, se eles não querem assumir a responsabilidade, devem explicar de maneira muito clara e honesta ao usuário a facilidade com que a proteção que eles oferecem pode ser invadida.
O slide a seguir mostra o diagrama de inicialização abstrato do FDE, usado pela maioria dos computadores modernos.

Como sabemos, o carregador de inicialização é carregado a partir do SSD / HDD usando o BIOS e é copiado para a memória principal ao longo do caminho de transferência de dados Storage Controller - PCI Bus - Platform Controller Hub. O carregador de inicialização solicita ao usuário informações de autenticação, como senha ou chave de cartão inteligente. A senha passa do teclado para o processador, após o qual o gerenciador de inicialização assume o controle, enquanto os dois componentes - o SO e a chave - permanecem na memória para garantir a transparência do processo de criptografia e descriptografia do disco. Essa é uma visão idealizada do processo, sugerindo que ninguém tentará intervir de forma alguma. Eu acho que você está ciente de várias maneiras de invadir isso, então vamos listar coisas que podem dar errado se alguém tentar atacá-lo. Eu divido ataques em 3 níveis.
O primeiro é não invasivo, não requer a captura do seu computador, pois é realizado usando um pen drive com malware. Você não precisa "desmontar" o sistema se conseguir conectar facilmente qualquer componente de hardware como placa PCI, ExpressCard ou Thunderbolt - o mais recente adaptador da Apple que fornece acesso aberto ao barramento PCI.
Um ataque de segundo nível exigirá uma chave de fenda, pois talvez você precise remover temporariamente um componente do sistema para lidar com ele em seu próprio ambiente pequeno. O terceiro nível, ou "ataque de ferro de solda", é o mais difícil, aqui você adiciona ou modifica fisicamente os componentes do sistema, como chips, para tentar quebrá-los.
Um tipo de ataque de primeiro nível é um carregador de inicialização comprometido, também conhecido como ataque "evil maid", no qual você precisa executar algum código não criptografado como parte do processo de inicialização do sistema, algo que pode ser baixado usando suas informações pessoais para que acesse o restante dos dados criptografados no seu disco rígido. Existem várias maneiras diferentes de fazer isso. Você pode alterar fisicamente o gerenciador de inicialização no sistema de armazenamento. Você pode comprometer o BIOS ou carregar um BIOS mal-intencionado que controla o adaptador do teclado ou os procedimentos de leitura do disco e os modifica para que sejam resistentes à remoção do disco rígido. Mas, em qualquer caso, você pode modificar o sistema para que, quando o usuário digitar sua senha, ele grave no disco em formato não criptografado ou faça algo semelhante, não seja difícil para o hacker.
Você pode fazer algo semelhante no nível do sistema operacional. Isso é especialmente verdadeiro se você não usar a criptografia de disco completo, mas a criptografia de contêiner.

Isso também pode acontecer quando o sistema é atacado por uma exploração, graças à qual o invasor obtém direitos de root e pode ler a chave na memória principal, esse é um método de ataque muito comum. Essa chave pode ser armazenada no disco rígido como texto sem formatação para uso posterior por um invasor ou enviada pela rede ao sistema de Comando e Controle.
Outra possibilidade é uma interceptação de teclado usando um keylogger, seja software, hardware ou algo exótico, como uma câmera com agulha ou, por exemplo, um microfone que grave sons que acompanham as teclas do usuário e tente descobrir o que é. chaves. É difícil impedir esse ataque, porque potencialmente inclui componentes que estão fora do sistema.

Também gostaria de mencionar ataques de recuperação de dados, mais conhecidos como ataques de inicialização a frio. Se, há cinco anos, você perguntasse a pessoas muito conhecedoras de computadores quais eram os recursos de segurança da memória principal, eles diriam que, quando a energia é desligada, os dados desaparecem muito rapidamente.
Mas em 2008, uma excelente pesquisa foi publicada por Princeton, que descobriu que, mesmo em temperatura ambiente, havia muito pouca perda de dados na memória RAM por vários segundos. E se você resfriar o módulo a temperaturas criogênicas, poderá obter alguns minutos, durante os quais ocorre apenas uma leve degradação dos dados na memória principal.

Portanto, se sua chave estiver na memória principal e alguém tiver removido os módulos do seu computador, eles poderão atacá-la descobrindo onde está a memória principal. Existem certos métodos para combater isso no nível do hardware, por exemplo, limpar à força o conteúdo da memória quando a energia é desligada ou reiniciada, mas isso não ajudará se alguém simplesmente retirar o módulo e o colocar em outro computador ou em uma parte dedicada do equipamento para extrair o conteúdo da memória.
Finalmente, existe a possibilidade de acesso direto à memória. Qualquer dispositivo PCI no seu computador tem a capacidade de ler e gravar o conteúdo de qualquer setor na memória principal no modo normal. Eles podem fazer qualquer coisa.

Isso foi desenvolvido mesmo quando os computadores eram muito mais lentos e não queríamos que o processador central "cuidasse" cada transferência de dados para o dispositivo da memória principal. Assim, os dispositivos obtêm acesso direto à memória, o processador pode fornecer instruções que eles simplesmente podem concluir, mas os dados permanecerão na memória sempre que você precisar.
Esse é o problema, porque os dispositivos PCI podem ser reprogramados. Muitas dessas coisas têm firmware gravável, que você pode simplesmente atualizar para algo hostil. E isso pode comprometer a segurança de todo o sistema operacional, pois permitirá qualquer forma de ataque, mesmo para modificar o próprio sistema operacional ou extrair a chave diretamente. Na computação forense, há equipamentos projetados para essas coisas no processo de investigação de crimes: eles conectam algo ao seu computador e retiram o conteúdo da memória. Você pode fazer isso usando FireWire, ExpressCard ou Thunderbolt ... De fato, todas essas são portas externas que fornecem acesso ao barramento do sistema interno.
Portanto, seria bom se não fosse possível armazenar a chave na RAM, porque meio que mostramos que a RAM não é muito confiável do ponto de vista da segurança. Existe algum armazenamento de chaves dedicado ou equipamento criptográfico especial? Sim existe. Você pode usar aceleradores criptográficos para o servidor da Web para processar mais transações SSL por segundo. Eles são resistentes a interferências não autorizadas. As autoridades de certificação da CA possuem itens que armazenam suas chaves ultrassecretas, mas não são realmente projetadas para operações de alto desempenho, como o uso de criptografia de disco. Então, existem outras opções?
Podemos usar o processador como uma espécie de módulo de criptografia de pseudo hardware? Podemos calcular algo como um algoritmo de codificação de bloco AES simétrico em uma CPU, usando apenas algo como registros de CPU em vez de RAM?

A Intel e a AMD adicionaram ótimas novas instruções aos processadores que executaram o AES; portanto, agora você pode executar operações primitivas de criptografia de bloco com apenas uma instrução simples de compilação. A questão é: podemos deixar nossa chave na memória ou podemos executar esse processo sem depender da memória principal? Os processadores x86 modernos têm um conjunto bastante grande de registros e, se algum de vocês realmente tentou adicionar todos os bits existentes, obtém cerca de 4 kilobytes. Assim, podemos realmente usar algumas CPUs para armazenar chaves e criar espaço para operações de criptografia.
Uma possibilidade é usar registros de hardware para depurar pontos de interrupção. Um processador Intel típico possui 4 desses registros e, em um sistema x64, cada um deles conterá um ponteiro de 64 bits. São 256 bits de espaço potencial em disco que a maioria das pessoas nunca utilizará. Obviamente, a vantagem de usar registradores de depuração é seu privilégio, porque somente o sistema operacional pode acessá-los. Há outras vantagens interessantes aqui, por exemplo, quando você desliga a energia do processador quando desliga o sistema ou entra no modo de suspensão, você realmente perde todo o conteúdo do registro, para não ter medo de uma "reinicialização a frio".
Um cara da Alemanha, Tilo Muller, implementou uma coisa semelhante chamada TRESOR para Linux em 2011. Ele testou o desempenho de um sistema assim e concluiu que ele não funciona mais devagar do que o cálculo regular da AES por software.
Que tal armazenar duas chaves de 128 bits em vez de uma chave? Isso nos levará a um espaço maior de cripto-módulo. Podemos armazenar uma chave mestra que nunca sai do processador durante a inicialização e, em seguida, carregar e descarregar as versões de chave necessárias para executar operações adicionais e resolver tarefas adicionais.
O problema é que podemos armazenar nosso código ou nossas chaves fora da memória principal, mas a CPU ainda processará o conteúdo da memória de qualquer maneira. Portanto, o uso de DMA, tecnologia de acesso direto à memória, ignorando o processador central ou outras manipulações, permite alterar o sistema operacional e salvar seu dump fora dos registros principais de memória ou, se métodos mais exóticos forem usados, fora dos registros de depuração.
Podemos fazer algo com um ângulo de ataque do DMA? Como se viu, sim, nós podemos. Recentemente, como parte de novas tecnologias para aumentar a virtualização de servidores, por motivos de desempenho, as pessoas gostam de poder conectar, por exemplo, um adaptador de rede a um servidor virtual, portanto, ele deve ser conectado através de um hipervisor.

A tecnologia IOMMU foi projetada de tal maneira que você pode isolar um dispositivo PCI em sua própria pequena partição de memória, de onde ele não pode ler e gravar arbitrariamente em qualquer lugar do sistema. Isso é ideal: podemos configurar permissões do IOMMU para proteger nosso sistema operacional ou o que usamos para processar chaves e protegê-las contra acesso aleatório.
Mais uma vez, nosso amigo da Alemanha, Tilo Muller, implementou uma versão do TRESOR em um visor de microbit chamado BitVisor, que faz isso. Isso permite que você execute um sistema operacional separado e acesse de forma transparente a criptografia de disco, e o melhor é que você não precisa se preocupar com isso ou saber nada sobre ele. , , IOMMU , - .

, , , , , . , – , .
, , . , RAM , , . , , , , SSH-, PGP-, « », .

: RAM? , , , , .

, , , – , ! 2010 RAM. — : “clear”, , , . 10-50 . , , , -, – 10% . , . , , ? , TPM , , , .
-, , . , , - CPU.
, . , , , . , , - . , ? , . ? , - , , , “ ” , .

, . , , . — Trusted Platform Module – , . , , , , TPM . , «» , . , , . , , .

? -. - , - «» , . , .
, – -, . , RSA/SHA1, , , - . - , . , .
23:10
DEFCON 21. , «» . Parte 2Obrigado por ficar conosco. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando a seus amigos, um
desconto de 30% para os usuários da Habr em um análogo exclusivo de servidores básicos que inventamos para você: Toda a verdade sobre o VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps da US $ 20 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 núcleos) 10 GB DDR4 240 GB SSD de 1 Gbps até a primavera, gratuitamente, ao pagar por meio ano, você pode fazer o pedido
aqui .
Dell R730xd 2 vezes mais barato? Somente nós temos
2 TVs Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 a partir de US $ 249 na Holanda e nos EUA! Leia sobre
Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?