domingo, outubro 29, 2006

Usando FreeBSD Mtree para garantir integridade em Sistema de Arquivos UFS

Uma funcionabilidade muito interessante em sistemas
FreeBSD é a possibilidade de garantir a integridade
do sistema de arquivos usando a ferramenta nativa Mtree.

Mtree assemelha-se muito com o AIDE um ferramente de HIDS,
porem com algumas funcionabilidade que fazem dessa ferramente
muito superior, tais como:

* a possibilidade de remover do FS arquivos que diferem da BASE
* modificar o sistema checado para condizer com a BASE.
* e estar integrado com o base do sistema.

Para demostrar a facilidade de uso dessa ferramenta,
criei um cenario semelhante a de um ISP.

Estudo de Caso,

Um ISP gostaria de checar a integridade
do DOCROOT do seu Apache e ser alertado sobre a
modificação de qualquer pagina.

[ricardo@myfreebsd:~/mtree] # ls -la
total 17472
drwxr-xr-x 2 ricardo ricardo 1024 20 Out 18:25 .
drwxr-xr-x 73 ricardo ricardo 8704 20 Out 18:44 ..
-rw-r--r-- 1 ricardo ricardo 428 20 Out 18:11 index-1.html
-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-10.html
-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-11.html
-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-12.html
-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-13.html
-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-14.html
-rw-r--r-- 1 ricardo ricardo 17793024 20 Out 18:11 index.html

Inicialmente é necessario criar um arquivo base, contendo o espelho desse diretorio.

[ricardo@myfreebsd:~/mtree] # sudo mtree -K sha256digest -K md5digest -c -i > /tmp/test.mtree

Através da opção -K passamos para o mtree que ele deve armazenar hash's sha256 e md5,

# user: ricardo
# machine: myfreebsd.homeunix.org
# tree: /usr/home/ricardo/mtree
# date: Fri Oct 20 18:25:51 2006
# .
/set type=file uid=1001 gid=1001 mode=0644 nlink=1 flags=none
. type=dir mode=0755 nlink=2 size=1024 time=1161375918.0
index-1.html size=428 time=1161375116.0 md5digest=d15ded2370152f66015edc42c94e6449 \ sha256digest=cbf51d23a785b70c61ccf498e34c56d66a3a7dfde096345fc31d32b259b07a0a

O Mtree armazena de forma recursiva todas as informações do FS,
e tambem o nome do usuario responsável pela criação do banco.

Comparando o sistema com a base do mtree,

[ricardo@myfreebsd :~/mtree] # sudo mtree -rU -f /tmp/test.mtree -p /home/ricardo/mtree

Como podemos ver o mtree não retorna nenhuma mensagem quando o sistema esta integro.

[ricardo@myfreebsd:~/mtree] # :>! index.html
[ricardo@myfreebsd:~/mtree] # sudo mtree -rU -f /tmp/test.mtree -p /home/ricardo/mtree
index.html changed
size expected 17793024 found 0
modification time expected Fri Oct 20 18:11:55 2006 found Fri Oct 20 19:01:28 2006 modified
MD5 expected c34a71a77aabc62af1ba11e03091097a found d41d8cd98f00b204e9800998ecf8427e
SHA-256 expected 383fbbfc967dad99a4cd7983ac9c01a8fb5c2ab341156917d3405db82317c8c1 found e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Ja quanto algum arquivo é truncado ele alerta mandado a resposta direto para o stdout,
que muito facilmente pode ser mandada por email.

[ricardo@myfreebsd:~/mtree] # sudo chown nobody:nobody index-12.html
[ricardo@myfreebsd:~/mtree] # sudo mtree -rU -f /tmp/test.mtree -p /home/ricardo/mtree
index-12.html changed
user expected 1001 found 65534 modified
gid expected 1001 found 65534 modified
index.html changed
size expected 17793024 found 0
MD5 expected c34a71a77aabc62af1ba11e03091097a found d41d8cd98f00b204e9800998ecf8427e
SHA-256 expected 383fbbfc967dad99a4cd7983ac9c01a8fb5c2ab341156917d3405db82317c8c1 found e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Agora quando modificamos o owner de um determinado arquivo, ele notifica
que o arquivo index-12.html foi alterado e caso a opção -U esteja presente
o mtree restaura o owner.

[ricardo@myfreebsd :~/mtree] # ls -la index-12.html

-rw-r--r-- 1 ricardo ricardo 429 20 Out 18:11 index-12.html

A opção -r se presente remove qualquer arquivo que não tenha sido previamente incluido na base.

[ricardo@myfreebsd:~/mtree] # touch TROJAN
[ricardo@myfreebsd:~/mtree] # sudo mtree -rU -f /tmp/test.mtree -p /home/ricardo/mtree
. changed
modification time expected Fri Oct 20 18:25:18 2006 found Fri Oct 20 19:08:05 2006 modified
TROJAN extra, removed
index.html changed
size expected 17793024 found 0
MD5 expected c34a71a77aabc62af1ba11e03091097a found d41d8cd98f00b204e9800998ecf8427e
SHA-256 expected 383fbbfc967dad99a4cd7983ac9c01a8fb5c2ab341156917d3405db82317c8c1 found e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

A ferramenta mtree é muito util, porem alguns pontos precisam ser
trabalhados para montar um infraestrutura mais segura, são eles:

* é preciso desenvolver uma metodologia de armazenamento seguro dos arquivos mtree.
* é preciso assinar digitalmente os arquivos.
* é necessario recriar a base a cada modificação.
* para análises futuras é preciso preservar os arquivos que divergem da base.

Qualquer duvida estou disponivel por email.