Modificando dados gravados no disco pelo sistema de arquivos Ext4

9

Estou trabalhando no projeto acadêmico, parte da qual está aplicando criptografia transparente (AES-CTR) aos arquivos Ext4 selecionados armazenados no disco (eu já posso marcá-los como criptografados usando o novo ioctl etc.).

Para fazer isso, preciso encontrar o melhor local para chamar meu algoritmo nos dados, enquanto ele é lido ou gravado de / para o dispositivo. Devido à grande quantidade de recursos (como journal, inlines, o-direct, extensões) fornecidos pelo sistema de arquivos, eu estou lutando há alguns dias para encontrar a solução adequada - eu preciso operar com os dados brutos, como é armazenado em os blocos de dados.

Eu tinha poucas ideias em mente, uma era ligar em algum lugar no caminho de chamada de sys_read(...) e sys_write(...) , mais precisamente ext4_file_write(...) e generic_file_aio_read(...) - mas isso não funcionaria com mmap e provavelmente não é o caminho a percorrer. Outra abordagem seria fazê-lo através de ext4_writepages(...) e ext4_readpages(...) (e seu retorno de chamada, como é assíncrono), quando as páginas de memória são gravadas no disco.

Porque não é uma versão de produção, apenas uma prova de conceito - eu posso desligar alguns recursos do Ext4 para simplificar a tarefa. Ao usar o algoritmo, eu preciso ser capaz de acessar os xargs do inode (onde o ID da chave é armazenado), e também estar ciente do número do bloco para gerar o vetor inicial usado na criptografia [en / de]. Você tem alguma idéia e / ou sugestão sobre esse assunto?

    
por Tomek Falkiewicz 07.07.2014 в 22:48
fonte

2 respostas

3

Existem muitas alternativas para projetar a solução para isso.

Uma maneira seria usar Wrapfs (um sistema de arquivos empilhável) que o ajudará a interceptar a chamada do VFS para o sistema de arquivos físico subjacente . Você pode optar por adicionar seu gancho antes ou depois da chamada do sistema de arquivos subjacente ser chamada.

Os benefícios de se fazer isso seria. 1. Seu código pode funcionar perfeitamente com qualquer sistema de arquivos físico. 2. Você não precisa alterar / modificar o código original do sistema de arquivos. 3. Você terá um módulo completamente diferente.

Assim, a hierarquia de chamadas seria semelhante a Aplicação < = > VFS < = > Wrapfs < = > FS Físico (ext3 / ext4 / etc)

    
por Mavla 14.07.2014 / 11:23
fonte
0
O FUSE ( Filesystems in userspace ) é uma boa alternativa porque é mais fácil de implementar no espaço do usuário do que no espaço do kernel. Você tem um amplo conjunto de idiomas para escolher. Essa abordagem será muito mais fácil.

    
por ArekBulski 28.10.2015 / 05:54
fonte