Prévia do material em texto
Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística INE 5355 – Sistemas Operacionais INE 5412 – Sistemas Operacionais I Criptografia em Sistemas de Arquivos Carlos Eduardo de Campos Jucemar Luis Monteiro Rodrigo Valceli Raimundo Florianópolis, Novembro de 2008 Sumário 1 Introdução...........................................................................................................................3 2 Fairly Secure File System – FSFS......................................................................................4 3 TrueCrypt ............................................................................................................................8 3.1 INTRODUÇÃO ........................................................................................................................8 3.2 CRIAÇÃO DOS VOLUMES ...................................................................................................9 3.3 CRIPTOGRAFIA ....................................................................................................................10 3.4 PROBLEMAS DE SEGURANÇA .........................................................................................11 3.4.1 Swap e Hibernação ..........................................................................................................11 3.4.2 Journaling e Wear Leveling .............................................................................................12 3.5 CONSIDERAÇÕES ................................................................................................................13 4 Criptografia no NTFS........................................................................................................14 4.1 Componentes utilizados pelo EFS............................................................................................16 4.2 Como os arquivos são criptografados e descodificados...........................................................17 1 Introdução Os sistemas de arquivos com freqüência contêm informações extremamente valiosas para seus usuários. Proteger essas informações contra o uso nãoautorizado é, portanto, uma questão importante para todos os sistemas de arquivos. Este relatório aborda aspectos de funcionamento de alguns sistemas modernos de criptografia para sistemas de arquivos. 2 Fairly Secure File System – FSFS Autor do capítulo: Jucemar Luis Monteiro Existe diversos projetos de criptografia para sistemas unix que oferecem criptografia transparente para arquivos ou sistemas de arquivos, mas essas soluções tem alguns problemas: 1. Somente o dono dos dados tem acesso aos arquivos criptografados, caso ele queira compartilhar os dados, ele deverá fornecer a senha para descriptografar os arquivos. Nesse mecanismo todos que sabem a senha tem o mesmo status do dono dos arquivos. Há um grande risco caso algum usuário troque a senha, ele passará a ser o único dono dos arquivos, o que é inadmissível. 2. Quando o arquivo é descriptado, partes do arquivo podem ficar em locais desprotegidos (área de swap, arquivos temporários, etc). Para manter um alto nível de segurança em uma máquina é necessário criptografar todo o sistema de arquivos, mas há diretórios que são compartilhados por vários usuários, logo todos os usuários que utilizam esses diretórios devem saber a chave. O FSFS consiste de dois componentes principais: Um dispositivo de driver que opera no kernel, o bloco de dados criptografados antes de ser escrito no disco, e um programa setup no espaço do usuário que prove uma interface para o driver de encriptação. Ele é usado para comunicação com o kernel, incluindo a transmissão de chaves criptográficas, diferentes tags de acesso, criar novo arquivo criptografado e gerenciamento de acesso. A figura 1 mostra como chaves, senhas e outros valores são combinados. O driver de encriptação opera no nível mais baixo da pilha do sistema de arquivos e age como um driver de um dispositivo. Todos os dados que são enviados para esse bloco do dispositivo virtual são criptografados e passados para o hardware onde são armazenados. Quando o kernel requer um bloco de dados do dispositivo virtual, o driver pega um bloco encriptado do hardware, decriptografa ele e retorna os dados para o kernel. O driver de encriptação trabalha com blocos, ele não conhece arquivos, diretórios e como o sistema de arquivos implementa eles. Entretanto o FSFS pode somente operar sobre uma partição inteira, não sobre pastas ou arquivos individualmente, ele requer que o usuário conheça antes quanto espaço vai reservar para o sistema de arquivo criptografado. Assim pode haver algum espaço não usado ou espaço reservado é insuficiente. Esse sistema faz encriptação transparente para o resto do sistema operacional e algum sistema de arquivos pode ser usado para armazenar os dados. Nem o kernel, nem qualquer outra aplicação precisa ser modificada para fazer uso do driver de encriptação. Para implementar um sistema de arquivos com controle flexível de acesso e gerenciamento de acesso dos usuários aos dados, O FSFS usa várias chaves e senhas. Elas são usadas para autenticação, permissão e revogação de acesso para o usuário e proteção contra diferentes ataques. As chaves, senhas e configurações de dados são armazenados em vários locais do sistema. Os dados secretos em um arquivo são encriptados usando uma chave criptografica secreta (SEK). Somente o dono do arquivo encriptado sabe a chave. A SEK é gerada quando o dono dos arquivos cria uma nova partição de arquivos criptografada, ao mesmo tempo que a chave do dono(OK) e chave de acesso (PK) são geradas, ambas somente o dono sabe. O dono pode mais tarde usar a OK para provar que ele é realmente o dono dos arquivos. Os primeiros bytes do arquivos são usados como cabeçalho, onde as chaves e dados de configuração, como o nome do arquivo de criptografia, são armazenado. O cabeçalho contêm o SEK, o PK e a os valores da tabela de segurança de OK. Essas chaves são criptografadas usando Secret Shared Key (SSK). O arquivo pode ser lido somente pelo proprietário e o programa de setup, que executa com permissão de root. O SSK é dado a todos os usuários que tem permissão para acessar os arquivos criptografados. O usuário guarda o SSK no seu User Key File (UKF) e protege ele com um User Password (UP).Quando um usuário quer trabalhar com um dado criptografado, ele usa a SSK no FSFS. O driver então usa o SSK para descriptografar o cabeçalho do arquivo, receber o SEK e habilitar a decriptografia do arquivo para o usuário. Para dar a diferentes usuários diferentes tipos de acessos, o ID do usuário e níveis de acesso para cada usuário são armazenados em suas chaves de arquivos (UKF). Para proteger o ID e níveis de acesso, eles são criptografados usando a chave de permissão PK. Para acessar os dados secretos, um usuário deve entrar com ID/nível de acesso encriptado. O driver descriptografa esse par usando a PK armazenada no cabeçalho. Somente se o ID decriptografado é igual ao usuário, o acesso é permitido. Usuários não podem acessar o cabeçalho do arquivo e todo acesso aos arquivos encriptados é controlado por um driver de encriptação. Para fazer isso o driver intercepta todos as chamadas de sistema que podem iniciar ou transferir dados de ou para o dispositivo de bloco. A chamada original é trocada por um código que checa se uma partiçãoencriptada é invocada na chamada e se o dono do processo tem os níveis de privilégio suficiente. Se não um erro retorna, caso contrário, a chamada de sistema original é executada. O FSFS modifica as chamadas de sistema para open(), link(), del(), chmod() e chdir(). Essa modificação é feita com um modulo no kernel do linux que substitui a chamada original para o próprio código. O FSFS tem 5 direitos de acesso: ● Read: O usuário pode ler arquivos encriptados, navegar nas pastas e listar arquivos. ● Write: Os arquivos podem ser escritos, criados e deletados. ● Export: O direito de leitura não permite a cópia de dados de um local encriptado para outro local, possivelmente não encriptado. Sem a tag export o usuário pode somente ler arquivos do sistema criptografado e gravar nele, esse direito serve para o usuário ler um arquivo no sistema criptografado e poder gravá lo em outro local. ● Introduce: Depois de criar um novo sistema de arquivo encriptado, o dono e somente ele pode emitir chaves para outro usuário acessarem os dados. ● Admin: Esse direito em combinação com “introduce”, permite ao usuário emitir chaves contendo alguns direito (read,write,export,introduce), exceto “admin”. Esses direitos descritos são garantidos somente para processos da seção (ou grupo de processos) de que o usuário autentica no driver. Isso permite ao usuário trabalhar com programas que precisam acessar dados encriptados em um terminal sem ter que dar para cada processo individualmente direito de acesso. 3 TrueCrypt Autor do capítulo: Rodrigo Valceli Raimundo 3.1 INTRODUÇÃO O TrueCrypt é um software para criptografia de disco (e por consequencia de sistemas de arquivos) bastante popular, eficiente e seguro. Seu trabalho é realizado acima e abaixo do sistema de arquivos nativo do SO. Acima, porque o TrueCrypt funciona através da criação de discos virtuais que são hospedados por qualquer FS nativo. Abaixo, porque o TrueCrypt expõe essa imagem como um disco real, o qual o usuário pode usar para criar partições de seu FS preferido. Atuar nestas duas camadas permite ao TrueCrypt: ● prover um mecanismo transparente de criptografia já que as aplicações não precisam saber que estão em um volume criptografado ; ● estar presente nas principais plataformas (Linux, MacOS, Windows) e ser portável para virtualmente qualquer uma ; ● ser relocável, no sentido que o volume criptografado por ser transportado para qualquer outro sistema ; ● ser o único sistema de criptografia com "negação plausível", já que é possível esconder um volume dentro de outro . Entretanto com o TrueCrypt não é possível realizar algumas como: ● compartilhar arquivos criptografados num sistema multiusuário ● criptografar arquivos do mesmo volume com chaves/senhas distintas Estas duas últimas funções não fazem parte da filosofia ao qual o TrueCrypt se propõe. Abaixo, o esquema geral do TrueCrypt: 3.2 CRIAÇÃO DOS VOLUMES Um volume para o TC é geralmente um grande arquivo contido no FS hospedeiro, embora dependendo da plataforma ele seja capaz de operar em um nível mais baixo, independente de um FS. Durante o processo de criação de um volume o usuário precisa decidir qual será seu tamanho, o algoritmo de criptografia e de checksum, além de uma senha de segurança. Em seguida o TC cria o arquivo com o tamanho necessário e o preenche por completo com dados aleatórios, algo extremamente importante para garantir a segurança do conteúdo do volume e de prováveis volumes ocultos. Um par de chaves aleatórias é gerado e guardado de maneira criptografada no cabeçalho do volume utilizando a senha fornecida pelo usuário. Todo conteúdo do volume será acessado através dessas duas chaves e estas chaves só podem ser decodificadas com a senha estipulada. A criação de volumes ocultos é parecida, porém sua metodologia não é de todo o interesse para um trabalho sobre SO. 3.3 CRIPTOGRAFIA Como o TC é destinado a sistemas pessoais monousuário a "montagem" do volume pode se dar a qualquer momento, desde que requisitada pelo usuário. A senha é usada apenas uma vez e não fica armazenada na memória. As chaves, porém ficam e esse problema será abordado adiante. Todo algoritmo de criptografia exige um modo de operação. Tal modo é tão importante para a segurança dos dados quanto o próprio algoritmo, no TrueCrypt o único modo disponível é o XTS, junto com os algoritmos AES256, Twofish e Serpent. O modo XTS é o único modo de operação reconhecido pela IEEE (IEEE 1619) para criptografia de dispositivos de bloco. Usar o XTS é um compromisso entre permitir o acesso aleatório aos blocos, porém com propagação de ruído, ou seja é possível criptografar blocos com o mesmo conteúdo sem que o resultado final seja o mesmo, já que a posição que eles se encontram no disco é usada como ruído. Outro diferencial do TC é a criptografia em cascata que permite utilizar AES + Serpent e AES + Twofish + Serpent, um após o outro no processo de criptografia. O diagrama abaixo ajuda a entender um pouco melhor o esquema: 3.4 PROBLEMAS DE SEGURANÇA O TC é um sistema seguro, porém existem outros fatores que podem levar ao seu comprometimento e são nesses fatores que o SO mais impacta, vejamos eles: 3.4.1 Swap e Hibernação A memória swap é inimiga mortal da segurança de um computador. Caso um computador ou disco seja tomado por terceiros, a análise da memória swap pode revelar senhas, chaves e muitas outras informações importantes que estavam em memória principal e foram relocadas para memória secundária. Tal perigo é ainda pior quando se trata de hibernação, já que TODA a memória principal foi transferida para memória secundária. Um exemplo do problema: Um atacante consegue roubar um laptop contendo informações secretas criptografadas. O laptop possuia um arquivo/partição de hibernação. O atacante consegue obter a chave de decodificação da memória que ofi despejada o arquivo de hibernação e compromete o sistema. O recomendável para tais casos é desabilitar a hibernação e a memória swap, alguns sistemas como o OpenBSD criptografam a memória swap por padrão. 3.4.2 Journaling e Wear Leveling O recurso de journaling do sistema nativo pode ser perigoso para o TC, porém muito menos do que o problema com swap e hibernação citados anteriormente. Dificilmente conseguese comprometer o volume por causa do journal, no entando rastros das atividades do FS deixadas no journal podem revelar a um atacante que esteja em pose do volume criptografado informações como as regiões aonde os arquivos se encontram e quando eles forma acessados. O recurso de wear leveling presente principalmente nos dispositivos SSD implica em alguns problemas de segurança para o TC, isto porque ao reescrever um bloco lógico o mesmo não será remapeado ao bloco físico o qual estava anteriormente, deixam várias versões do mesmo bloco no dispositivo. Isto é especialmente perigoso quando se trata do cabeçalho do volume. Mesmo ao se trocar a senha de um volume, apenas o cabeçalho é modificado, qualquer versão anterior do cabeçalho com uma senha conhecida por um atacante pode ser usada para decifrar o volume inteiro. 3.5 CONSIDERAÇÕES Todas as capacidades técnicas e científicas para criptografia de sistemas de arquivos em nível de disco já estão disponíveise implementadas de maneira muito eficiente. Uma das deficiências dos esquemas atuais é o baixo acoplamento com o sistema como um todo. Ser uma extensão tem suas vantagens, porém uma ferramenta tão forte quanto o TC poderia ser acoplada de maneira muito mais sofisticada aos sistemas atuais, permitindo a interligação com subsistemas já existentes como o próprio subsistema de autenticação fornecido pelo SO. 4 Criptografia no NTFS Autor do capítulo: Carlos Eduardo de Campos 'O NTFS é um sistema de arquivos proprietário da Microsoft que usa uma arvoreB como estrutura de dados, sua primeira implementação veio no Windows NT, ou seja, antes mesmo do Windows 95. A idéia por traz deste sistemas de arquivo é o gerenciamento de múltiplos usuários. a Tabela de Arquivo Mestre (MFT). é o “coração” de um volume NTFS. Todos os dados de cada volume estarão contidos nela. Quando formatamos um disco para esse sistema, o programa de formatação cria um conjunto de arquivos de Metadados. Estes contêm informações sobre o sistema e sua estrutura ao longo de sua utilização. Nesse momento, também é criada a MTF. MFT MFT 2 Arquivo de LOG Arquivo de Volume Tabela de definição de atributo Diretório Principal Unidade de alocação BITMAP Arquivo de BOOT Arquivo de cluster defeituoso ... Arquivos de Usuário ... Esquema de implementação da Master File Table em volume NTFS. Cada campo contendo arquivos de Metadados, guarda informações importantes do sistema. Esses dados inicias, além de todos os arquivos de usuários que surgirão ao longo do tempo, estão distribuídos na MFT sob a forma de Registros de Arquivo. Essa forma de organização dita mais uma vantagem do NTFS. É que, o agrupamento dos dados em uma estrutura única em comum permite sua administração de forma centralizada. Assim sendo, implementandose um sistema de segurança à própria MFT (o que é feito), a confiabilidade no sistema e em seus componentes, em sua totalidade, já estará assegurada, visto que conseqüentemente eles também estarão protegidos por estarem contidos em tal estrutura. o Windows (NT/2000/XP) fornece proteção a diversos objetos do sistema dentre os quais podemos citar arquivos, diretórios, impressoras, entre outros. Tais objetos são protegidos através de Descritores de Segurança que controlam quem tem e que tipo de acesso a eles. No caso de arquivos de dados, tais descritores compõem um atributo a mais nos seus registros da MFT, o qual pode ser observado na estrutura de um registro de arquivo. Para fornecer proteção o SO observa o nome do usuário, usado para entrada no sistema, e o combina com o descritor de segurança de cada objeto. Quando na tentativa de acesso a algo no sistema, essa combinação dirá se o que se pretende manipular poderá ou não ser utilizado pelo usuário em questão No caso de criptografia, temos o recurso de Encriptação (EFS – Encription File System), que devido ao grande impacto que causou, quando no lançamento do Windows 2000, merece muita importância. Tal mecanismo permite que arquivos sejam criptografados e armazenados em volumes sob a administração do NTFS. O EFS se baseia em chaves privadas para transformar as informações em códigos que somente ele entende. Os usuários que tiverem o acesso, ou melhor dizendo, o direito a essas chaves, terão acesso livre aos dados. Do contrário, isso não será possível. Esse recurso acrescenta uma segurança ainda maior aos dados e veio compor mais uma interessante característica ao sistema de arquivos em questão. O Windows usa um Certificado Digital q é associado à conta do usuário, quando o usuário se loga, ele automaticamente carrega o certificado apropriado. A senha e username não tem nada com isso, o usuário teria que exportar o certificado para acessá lo em outro lugar ou exportálo antes de formatar e importado ele na sua nova conta após a reinstalação! O EFS usa por default o algoritmo DESX com chave de 128 bits, mas pode ser configurado pra usar o 3DES com chave de 168 bits ou AES com chave de 128, 192 e 256 bits. No default, usa o algoritmo DEX com 128 bits é uma chave grande o suficiente pra resistir a ataques de força bruta por um longo tempo. Componentes utilizados pelo EFS O EFS utiliza os seguintes componentes para desempenhar as suas funções: • EFS service: O serviço EFS se comunica com o dispositivo EFS através da porta local procedure call (LPC). O EFS service e a Microsoft Cryptographic Application Programming Interface (CryptoAPI) se comunicam, com o EFS service recebendo as chaves de encriptação dos arquivos da CryptoAPI. Ele usa essas chaves para gerar campos de dados descriptografados (DDFs) e campos de recuperação de dados (DRFs). A chave criptografica de arquivo (FEK) é utilizada para os dados dos arquivos. O EFS service passa a FEK, DRF, e DDF para o dispositivo EFS através do EFS File System RunTime Library (FSRTL). • EFS driver: O EFS driver requer FEK’s, DDF’s e DRF’s do EFS service. Ele então retransmite ao EFS FSRTL. • EFS File System RunTime Library (FSRTL): O EFS FSRTL existe no EFS driver, e opera com o EFS driver como um componente. Arquivos de controle de chamada do NTFS são utilizadas como mecanismo de comunicação entre os dois. O EFS FSRTL leva a cabo um conjunto de funções do sistema de arquivos que incluem criptografia, desencriptar, e recuperar dados quando o arquivo é lido a partir do disco ou escritas no disco. • Criptografia Microsoft Application Programming Interface (CryptoAPI): CryptoAPI é utilizada pelo EFS para funções criptográficas. CryptoAPI suporta criptografia, descriptografia, hashing, assinaturas digitais e verificação dos mesmos, chave de gestão, armazenamento seguro, e operações de chave estrangeira Como os arquivos são criptografados e descodificada Como mencionado anteriormente, o EFS utiliza chaves públicas e criptografia de chave simétrica para assegurar que o conteúdo das pastas e arquivos. Os algoritmos de criptografia utilizam chave pública assimétrica para criptogravar / descriptografar. O que isto significa é que as teclas utilizadas para encriptar e desencriptar os dados são diferentes, porque uma chave privada e uma chave pública é utilizada. A chave privada é mantida pelo proprietário da chave. A chave pública pode ser utilizada na rede. Quando os dados são criptografados, o EFS gera uma única FEK para criptografar o arquivo. De seguida, criptografa o FEK utilizando a chave pública do certificado do utilizador. O EFS usa o FEK para garantir que a criptografia ocorra rapidamente. A chave privada do utilizador é utilizada para descriptografar o FEK. O processo descrito a seguir ocorre quando um usuário criptografa um arquivo: • O arquivo é aberto pelo EFS service. • Os fluxos de dados do arquivo são copiados para um arquivo temporário de texto plano localizado no diretório temporário do sistema • EFS gera a única FEK. • A FEK é utilizada para criptografar o arquivo seja através DesX ou 3DES. • O DDF é criado. O DDF contem o FEK criptografado por meio da chave pública do usuário. • Quando um agente de recuperação é definido por meio de política de grupo, os campos da recuperação dos dados (DRFs) é criado. • Os dados criptografados, DDF, e DRF são armazenadas no arquivo. • O arquivo temporário de texto plano localizado no diretório temporário do sistema é apagado. O processo descrito a seguir ocorre quando um arquivo é descodificada: • NTFS identifica como sendo os arquivos criptografados e, em seguida, apresentar um requerimento para a decriptografia através do EFS driver. • O EFS driver obtém os DDF’s e envia para o EFS service. • O EFS service obtém a chave privada do utilizador. Ele usa essa chave para descriptografar a DDF. • Depois que o EFS service descodificou o DDF e obteve o FEK, ele o envia parao EFS driver. • O EFS driver utiliza o FEK recebido do EFS service para descriptografar os dados no arquivo. • O EFS driver passa os dados decodificados dados para NTFS. . Referencias: http://www.securityfocus.com/infocus/1673 http://www.techfaq.com/encryptingfilesystem.shtml MEIOS DE ARMAZENAMENTO, apostila de Marcos Cesar Kossoski (www.apostilando.com) http://www.guiadohardware.net/comunidade/descriptografararquivo/267315/ http://www.petri.co.il/how_does_efs_work.htm http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/cryptfs.mspx http://www.ntfs.com/internalsencryptedfiles.htm http://www.harddiskhome.com/portuguese/NTFS.html Sistemas Operacionais: projeto e implementação/ Andrew S. Tanenbaum e Albert S. Woodhull; tradução Edson Furmankiewicz – 2ª edição – Porto Alegre: Bookman, 2000. File System Encryption with Integred User Management, Stefan Ludwig – Coporate Technology – Siemens AG – Munich , Prof. Dr. Winfried Kalfa – Operating Systems Group – Chemnitz University of Technology. 1 Introdução 2 Fairly Secure File System – FSFS 3 TrueCrypt 3.1 INTRODUÇÃO 3.2 CRIAÇÃO DOS VOLUMES 3.3 CRIPTOGRAFIA 3.4 PROBLEMAS DE SEGURANÇA 3.4.1 Swap e Hibernação 3.4.2 Journaling e Wear Leveling 3.5 CONSIDERAÇÕES 4 Criptografia no NTFS Como os arquivos são criptografados e descodificada