Mostrando postagens com marcador computação. Mostrar todas as postagens
Mostrando postagens com marcador computação. Mostrar todas as postagens

quarta-feira, 31 de outubro de 2012

Redes Neurais Artificiais

As redes neurais artificiais (RNA) são, como seu nome indica, redes computacionais que simulam, a grosso modo, a rede de células nervosas (neurônios) de um sistema nervoso central biológico, seja humano ou animal. Esta simulação é basicamente uma simulação célula por célula, isto é, neurônio por neurônio (GRAUPE, 2007).

O primeiro interesse em redes neurais emergiu após a introdução simplificada de neurônios por McCulloch e Pitts em 1943. Estes neurônios foram apresentados como modelos de neurônios biológicos e como componentes conceituais para circuitos que podiam realizar tarefas computacionais (KROSE & SMAGT, 1996).

As redes neurais artificiais (RNA) podem ser caracterizadas como um modelo computacional, com propriedades particulares incluindo a habilidade de se adaptar e aprender, organizar dados agrupando-os e operações baseadas em processamento paralelo (KROSE & SMAGT, 1996).


Fundamentos Matemáticos

Muitos esforços foram feitos no intuito de se modelar os neurônios biológicos, entretanto, o que se conseguiu até hoje foi uma aproximação elementar. A fórmula abaixo representa um neurônio artificial (ZURADA, 1992; VIEIRA & ROISENBERG, 2004):

neti = Σ uj wij

Neste modelo proposto, o neurônio artificial possui entradas uj que recebem as saídas de outros neurônios. Estas entradas são ponderadas pelos pesos wij, que são inspirados na força da conexão sináptica, da conexão sináptica do neurônio i para o neurônio j. Assim tem-se o chamado net do neurônio, que é o somatório de todas as entradas multiplicadas pelos seus respectivos pesos (VIEIRA & ROISENBERG, 2004).


Modelos de Aprendizagem

Uma rede neural artificial tem dois elementos básicos: a arquitetura e o algoritmo de aprendizagem. Esta divisão surge porque a rede necessita ser treinada. O conhecimento sobre o problema está armazenado dentro dos exemplos disponíveis na rede (RAUBER, 1997).

A composição da rede é feita pelos neurônios. O tipo de processamento de um único neurônio é a combinação linear das entradas com os pesos seguida pela passagem da combinação linear por uma função de ativação. A natureza do problema a ser resolvido define restrições em relação aos tipos de redes e algoritmos de aprendizagem possíveis (RAUBER, 1997).

Uma principal distinção em relação ao paradigma de aprendizagem são a aprendizagem supervisionada e aprendizagem não-supervisionada. Na aprendizagem supervisionada cada exemplo de treino está acompanhado por um valor que é o valor desejado. Quando não se sabe os atributos estatísticos relevantes das correlações entre os exemplos de treinos, sendo esta a tarefa de aprendizagem, temos a aprendizagem não-supervisionada (RAUBER, 1997).


Tipos de Redes Neurais Artificiais

Um sistema dinâmico complexo é uma rede de sistemas interconectados. Este sistema complexo pode ser representado por um grafo direcionado, ou dígrafo, onde os vértices representam os componentes, e seguem os conceitos da Teoria dos Grafos. Uma rede neural artificial (RNA) é um sistema dinâmico complexo representado por um grafo em que cada vértice é um neurônio artificial (BARRETO, 2002).

Os tipos de redes neurais artificiais são definidas através de escolhas dos conjuntos e funções envolvidas na definição de redes neurais como sistemas dinâmicos. Tendo assim uma rede neural contínua no tempo, discreta no tempo e invariante no tempo (BARRETO, 2002).

Uma rede neural contínua no tempo é uma rede neural definida em um subconjunto contínuo do eixo do tempo T = R. Uma rede neural discreta no tempo é uma rede neural definida em um subconjunto discreto do eixo do tempo T = Z. E uma rede neural invariante no tempo é uma rede neural em que a função de transição depende de um único elemento de T e a função de saída é independente de T (BARRETO, 2002).

Sobre a forma de como os neurônios se interligam, as redes neurais artificiais podem ser diretas ou recorrentes, onde a principal diferença é que nas redes diretas os neurônios não recebem retroalimentação em suas entradas, ou seja, o grafo não tem ciclos, e nas redes recorrentes existe pelo menos um ciclo de retroalimentação, onde algum neurônio fornece o seu sinal de saída para a entrada de outro neurônio (VIEIRA & ROISENBERG, 2004; ROJAS, 1996).


Redes Auto-organizáveis

A Teoria de Ressonância Adaptativa (ART) foi originada para o propósito de desenvolver redes neurais artificiais onde as maneiras de performance, especialidade de reconhecimento de padrão ou tarefas de classificação, fossem próximas de uma rede neural biológica. Desta forma, as redes ART não precisam de aprendizados mas de funções não-supervisionadas em redes auto-organizáveis (GRAUPE, 2007).

As redes ART consistem em duas camadas, sendo a camada de comparação e a camada de reconhecimento, as quais são interconectadas. A camada de reconhecimento serve como uma camada de classificação (GRAUPE, 2007).

As redes treinadas sem um aprendizado usualmente aprendem pela comparação de critérios explícitos. Estas redes podem produzir uma saída onde diz o quão familiar é com o padrão presente. Estes tipos de redes podem adaptar-se durante o processo denominado auto-organização (ZURADA, 1992).


Redes Construtivas

Uma rede construtiva é composta de métodos que começam com uma arquitetura mínima de rede e adicionam neurônios até que uma solução adequada seja encontrada. A determinação da arquitetura de rede inicial nestes métodos é imediata (CASTRO et al., 1999).

Os algoritmos construtivos resultam em um menor esforço computacional. Redes com dimensões reduzidas efetuam os passos forward e backward, necessários no processo de treinamento, com menor esforço computacional e podem ser descritas utilizando um conjunto menor de parâmetros. O papel de cada neurônio torna-se mais evidente (CASTRO et al., 1999).


Algoritmos de Redes Neurais

Um importante aspecto em redes neurais é a definição das conexões entre os elementos e a definição dos pesos associados a estas conexões. A informação armazenada e a computação realizada por uma determinada rede neural são definidas mais pela topologia de conexões e pelos pesos atribuídos que propriamente pelos elementos individualmente (HERNANDEZ, 2005).

Estas conexões entre os neurônios artificiais de uma rede são normalmente programáveis, onde existe algum mecanismo de aprendizado, através do qual a rede incorpora experiência a partir de exemplos que lhe são apresentados. Isto é interessante para a solução de problemas cuja especificação não é suficientemente estruturada, o que dificulta a sua representação em uma forma algorítmica (HERNANDEZ, 2005).

Diversos métodos de aprendizado foram desenvolvidos, sendo que os algoritmos de aprendizado supervisionado possuem o mais fácil entendimento. Neste tipo de aprendizado, as informações são apresentadas à rede sob a forma de padrões de entrada e dos resultados correspondentes desejados, conhecidos previamente. O algoritmo verifica as saídas geradas, para os padrões de entrada dos exemplos de treinamento, e as compara com as saídas desejadas, orientando assim o ajuste nas conexões sinápticas de forma a minimizar a diferença entre saída desejada e saída oferecida pela rede (HERNANDEZ, 2005).

O ajuste sináptico procura corrigir os pesos de modo que se produza a saída desejada diante da respectiva entrada, representando assim o aprendizado, em cada neurônio, do fato apresentado. Desta forma, pode-se dizer que ao final do processo de aprendizado, o conhecimento dos neurônios da rede neural reside nos pesos sinápticos (HERNANDEZ, 2005).


Aplicações de Redes Neurais

Atualmente as aplicações das redes neurais artificiais estão invadindo todos os domínios, desde as primeiras que realizavam reconhecimento de padrões até distribuição de energia elétrica, mercado de capitais, aplicações navais e sistemas especialistas (BARRETO, 2002).

O reconhecimento de padrões é uma das primeiras aplicações de redes neurais. O reconhecimento de padrões tenta imitar as capacidades cognitivas dos seres vivos, incluindo reconhecimento de rosto, cheiro, caligrafia, caracteres etc. Isto pode ser atribuído a um sistema bastante desenvolvido de reconhecimento de padrões (ZURADA, 1992; BARRETO, 2002).

Uma aplicação de redes neurais artificiais à séries temporais bastante útil é a previsão de mercado de capitais. Uma rede é treinada com valores de uma série temporal que ocorreram em um determinado intervalo de tempo e com saída como sendo um valor futuro da série (BARRETO, 2002).

As redes neurais podem ser aplicadas na solução de problemas de controle robótico, com funções especializadas em movimentos robóticos. Estes modelos de redes neurais são desenvolvidas para solucionar problemas da cinemática de robôs, na geometria dos movimentos dos manipuladores dos membros robóticos (ZURADA, 1992).

Na medicina, um sistema de redes neurais artificiais pode resolver o problema da ventilação mecanicamente assistida. A ventilação mecânica requer a avaliação da capacidade do paciente de continuar respirando sem auxílio. Retirar o auxílio prematuramente pode levar ao sofrimento do paciente, enquanto deixar tempo a mais representa gasto desnecessário do recurso. A observação por um médico pode ser menos confiável que um sistema de redes neurais (VIEIRA & ROISENBERG, 2004).


Solução de Problemas

A inteligência artificial serve para resolver problemas, imitando de uma certa forma a inteligência dos seres vivos. Um problema é o objeto matemático, consistindo de dois conjuntos não vazios, os dados e os resultados possíveis e de uma relação binária que caracteriza uma solução satisfatória (BARRETO, 2002).

Determinados problemas podem ter sua solução da forma de uma função, onde implementando esta função tem-se a solução do problema. Este fato leva à programação funcional e é a base da abordagem conexionista (BARRETO, 2002).

Um computador pode ser considerado como uma máquina de resolver problemas. Em um neurocomputador tem-se a rede de neurônios com entradas e saídas, um meio de fixar os pesos das conexões usando um algoritmo de aprendizagem e usar a rede já educada para resolver o problema com os dados a serem usados na entrada da rede (BARRETO, 2002). Um neurocomputador é um sistema computacional com uma arquitetura de hardware e software adequada para a execução de algoritmos presentes na base lógica das redes neurais (GALUSHKIN, 2007).


Pré-Processamento de Dados

Uma rede neural pode ser usada para mapear os dados crus de entrada diretamente para os valores finais requeridos, entretanto isto pode gerar resultados infelizes. Em muitas aplicações é necessário primeiro transformar os dados em algo novo antes de treinar a rede neural. Esta otimização dos dados é denominada pré-processamento e determina a performance do sistema final (BISHOP, 1995).

Pré-processamentos complexos podem envolver na redução da dimensão dos dados de entrada. Esta redução pode proporcionar uma melhoria na performance já que a informação tende a diminuir. É uma das mais importantes formas de pré-processamento (BISHOP, 1995).


Pós-Processamento de Dados

Similarmente, a saída da rede neural é frequentemente pós-processada para obtenção dos valores de saída requeridos. Da mesma forma, o pós-processamento consiste em transformações simples nos dados (BISHOP, 1995).

Em aplicações que envolvem aprendizado, cada novo dado necessita ser pré-processado antes de ser passado à rede neural. Se o pós-processamento está sendo utilizado, então os dados alvos precisam ser transformados usando o inverso do pós-processamento para gerar os valores de saída corretos. Quando os dados são processados por uma rede treinada, é necessário primeiro passá-los pelo estágio de pré-processamento, seguido pela rede e finalmente pela transformação pós-processada (BISHOP, 1995).


Conclusão

O campo de aplicação das RNAs é amplamente vasto e suas aplicações vem acontecendo há muito tempo. As redes neurais artificiais são um assunto bem antigo e, ao mesmo tempo, bastante novo. Há décadas elas são estudadas e até hoje elas são um desafio para a humanidade. Diversos profissionais estão sendo atraídos pelas aplicações das RNAs.

As redes neurais artificiais possuem uma grande vantagem como algoritmos de resolução de problemas pois possuem a capacidade de adaptar-se e aprender para buscar a melhor solução. Elas também podem imitar a capacidade cognitiva do ser humano, desempenhando um papel importante no reconhecimento de dados.

Pode-se concluir que um sistema de inteligência artificial deve incorporar uma rede neural artificial para que se aproxime do intelecto humano. A robótica faz e fará grande uso das RNAs. O futuro da tecnologia e da computação com certeza está relacionado ao sucesso das redes neurais artificiais.

REFERÊNCIAS

BARRETO, J.M. Introdução às Redes Neurais Artificiais, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2002.

BISHOP, C.M. Neural Networks for Pattern Recognition, Clarendon Press, Oxford, 1995.

CASTRO, L.N.; IYODA, E.M.; PINHEIRO, E.; ZUBEN, F.V. Redes Neurais Construtivas: Uma Abordagem Comparativa, IV Congresso Brasileiro de Redes Neurais, 1999.

GALUSHKIN, A.I Neural Networks Theory, Springer, 2007.

GRAUPE, D. Principles of Artificial Neural Networks, Advanced Series on Circuits and Systems – Vol. 6, World Scientific Publishing, 2nd Edition, 2007.

HERNANDEZ, E.D.M. Inteligência Computacional e Redes Neurais em Engenharia Elétrica, Departamento de Engenharia de Sistemas Eletrônicos, Universidade de São Paulo, 2005.

KROSE, B.; SMAGT, P. An introduction to Neural Networks, University of Amsterdam, 8th Edition, 1996.

RAUBER, T.W. Redes Neurais Artificiais, Encontro Regional de Informática, Sociedade Brasileira de Computação, 1997.

ROJAS, R. Neural Networks A Systematic Introduction, Springer, 1996.

VIEIRA, R.C.; ROISENBERG, M. Redes neurais artificiais: Um breve tutorial, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2004.

ZURADA, J.M. Introduction to Artificial Neural Systems, West Publishing Company, 1992.

quinta-feira, 3 de maio de 2012

Extração de dados com o foremost e scalpel

Na computação forense, o procedimento de extração de dados, é uma etapa importante para o sucesso da perícia computacional. Um dado pode não estar mais alocado no sistema de arquivos, o que facilitaria a recuperação, mas pode estar ainda existente na superfície do disco.

A ferramenta foremost é um recuperador de arquivos usando uma base de dados com definições de cabeçalho, rodapé e estrutura dos dados de tipos de arquivos conhecidos. O foremost é independente de sistema de arquivos e pode recuperar dados de partições FAT, NTFS, ext2/3 ou RAW, tanto no acesso direto ao dispositivo como em imagem RAW.

A sinopse da linha de comando é:

foremost [opção]... [-o diretório] [-t tipo] [-i entrada]

Como principais opções, existem:

-d       Ativa a detecção indireta de blocos, recomendado para
         sistemas de arquivos Unix.
-i       Dispositivo ou imagem de entrada.
-o dir   Diretório onde serão gravados os arquivos recuperados.
-v       Ativa o modo verboso.

A opção -t especifica os tipos de arquivos que serão recuperados:

jpg    Suporte para os formatos JFIF, Exif e implementações de
       câmeras digitais modernas.
bmp    Suporte para o formato BMP do Windows.
exe    Suporte para arquivos executáveis do Windows, inclui DLLs.
mpg    Suporte para a maioria dos arquivos MPEG.
riff   Recupera arquivos AVI e RIFF pois possuem mesmo formato.
wmv    Recupera arquivos WMV e WMA pois possuem formatos similares.
ole    Esta opção recupera qualquer arquivo que use a estrutura OLE.
       Inclui PowerPoint, Word, Excel, Access, e StarWriter.
zip    Recupera ZIP e JAR pois possuem formatos similares.
       Inclui arquivos produzidos pelo OpenOffice pois são arquivos
       XML zipados. Arquivos do Office 2007 também são XML.
all    Utiliza todos os tipos de arquivos pré-definidos.
       Padrão se a opção -t não for usada.

E também: gif, png, avi, mp4, wav, mov, pdf, rar e htm

Caso um formato de arquivo não seja suportado internamente pelo foremost, seu tipo pode ser definido no arquivo de configuração '/etc/foremost.conf'. Este arquivo contém instruções para definição dos novos formatos.

Os arquivos recuperados serão gravados em subdiretórios de acordo com o seu tipo. Se não for usada a opção -o, será criado um diretório padrão.

Exemplos de uso do foremost:

# foremost -t jpg -i image.dd -o ~/recuperados

# foremost -t all -i /dev/sda3 -o ~/recuperados

# foremost -t gif,pdf -i image.dd

# foremost -vd -t ole,jpeg -i image.dd

# foremost image.dd


De forma semelhante, a ferramenta Scalpel é um recuperador de arquivos usando uma base de dados com definições de cabeçalho e rodapé de tipos de arquivos conhecidos. O Scalpel é independente de sistema de arquivos e pode recuperar dados de partições FAT, NTFS, ext2/3 ou RAW, tanto em dispositivos como em imagens RAW. O Scalpel é resultado de uma completa reedição da ferramenta foremost v0.69.

Antes de utilizar o Scalpel é necessário configurá-lo pelo arquivo '/etc/scalpel.conf', descomentando as linhas que definem os tipos de arquivos que serão recuperados. Também há instruções neste arquivo. Para recuperar os arquivos de uma partição, use um comando semelhante a:

# scalpel /dev/sda3 -o ~/recuperados


Nestas ferramentas, o processo pode ser demorado, dependendo do tamanho do HD e de quantos arquivos existem para serem recuperados. Os arquivos recuperados serão copiados para o diretório especificado pela opção -o, em subdiretórios de acordo com o tipo do arquivo.

O foremost e o Scalpel não estão interessados no sistema de arquivos contido na partição ou imagem. Estas ferramentas simplesmente esperam que os blocos de dados dos arquivos residam sequencialmente no disco ou imagem que está sob investigação.

Este processo é conhecido como extração de dados (data carving). "Carving" é um termo genérico para extração de arquivos em imagens RAW, baseado em características específicas do formato, presentes nos arquivos (dados estruturados). Alguns estudos indicam o foremost como mais confiável.

quinta-feira, 14 de abril de 2011

DFF - Sistema para forense digital

O DFF, Digital Forensics Framework (http://www.digital-forensic.org/), é um projeto dedicado para a forense digital.

O propósito deste sistema é oferecer um ambiente modular de forense digital para os profissionais de TI, com capacidade de realizar análises e de extrair dados suspeitos dos arquivos.

Estes arquivos podem vir de aquisição de dados de mídias digitais, como discos rígidos, memória RAM, dispositivos móveis ou pacotes capturados pela rede. Também podem vir de dados deletados que foram recuperados.

A informação é processada em um recipiente virtual de somente leitura, que preserva a integridade e autenticidade dos dados.

Principais características:

- Visualizadores de imagens, vídeos, textos, sistemas de arquivos.
- Análise de linha do tempo.
- Visualizador hexadecimal.
- Gerenciamento de volumes, partições.
- Manipulação de arquivos.
- Leitura de metadados, EXIF, estrutura de dados etc.
- Memória volátil: Windows XP (volatility).
- Sistemas de arquivos FAT 12/16/32, NTFS, EXTFS 2/3/4.
- Recuperação de dados, "file carving".
- Análise do registro do Windows.

O DFF é dividido em três camadas distintas de software, que comunicam entre si através de uma API modular:

- O núcleo.
- As interfaces de usuário.
- Os módulos.

A primeira camada é o núcleo da aplicação. É usado para carregar e executar os plugins.

A segunda camada é composta de plugins e módulos, invocados pelo núcleo. Cada um é designado para analisar tipos específicos de dados, como dados da RAM e sistemas de arquivos.

A terceira camada é composta da interface ao usuário. Esta camada é usada para selecionar a origem dos dados que serão analisados e visualizar os resultados das análises. As interfaces são a gráfica e o shell para linha de comando.


O DFF ainda é um projeto novo mas já está bastante funcional. Se o projeto crescer, novos módulos devem ser desenvolvidos e assim, o DFF oferecerá muitos recursos para a computação forense.

terça-feira, 25 de janeiro de 2011

Recuperando e organizando os arquivos pelos tipos

Com o propósito de recuperar todos os arquivos, alocados e não alocados, de um computador, a coleção The Sleuth Kit (TSK) traz em seu repertório forense a ferramenta denominada sorter.

O sorter é um script em Perl que analisa um sistema de arquivos para organizar os arquivos alocados e não alocados pelos seus tipos. Este script classifica os arquivos de uma imagem ou dispositivo de armazenamento em categorias, executando o comando "file" em cada arquivo e organizando os arquivos de acordo com regras pré-estabelecidas.

A ferramenta sorter trabalha utilizando outras ferramentas do TSK. Basicamente, o script executa a ferramenta "fls" para identificar os arquivos, cada arquivo identificado é visualizado com a ferramenta "icat", e a seguir, o comando "file" é executado para identificar o tipo do arquivo, baseado nas informações do cabeçalho. O sorter utiliza as regras definidas em seu arquivo de configuração, para classificar os arquivos, e também compara a extensão de cada arquivo, se houver, com a regra para seu tipo identificado.

Após toda esta varredura os arquivos são copiados, se a linha de comando conter o argumento -s, para um diretório no computador forense, fornecido com o argumento -d. Dentro deste diretório são criados subdiretórios nomeados de acordo com as categorias. Cada arquivo é renomeado usando o nome do sistema de arquivos, seguido do endereço e da extensão original.

Pode-se também gerar um índice em HTML, com o argumento -h, e os arquivos não identificados podem ser ignorados utilizando o argumento -U.

O sorter trabalha com imagens ou acessando diretamente o dispositivo de armazenamento. Existem outros argumentos para sua linha de comando, conforme sua página manual, mas uma linha de comando básica é exemplificada a seguir:

$ sorter -i raw -f fat32 -o 63 -d ~/data-sorter -s -h imagem.dd

Ou, acessando diretamente o dispositivo (geralmente necessita estar como superusuário):

# sorter -i raw -f fat32 -o 63 -d ~/data-sorter -s -h /dev/sdb

O argumento -i especifica o tipo onde o sistema de arquivos está localizado. O argumento -f especifica o tipo do sistema de arquivos. O argumento -o especifica o setor onde inicia o sistema de arquivos. O argumento -d, como já descrito, especifica para onde irão os arquivos e o argumento -s salva os arquivos no diretório.

Para os arquivos não alocados, o sorter recupera o que ainda estiver disponível, o que ainda não foi sobreposto. Se o arquivo foi sobreposto parcialmente, o sorter consegue recuperar parte do arquivo, resultando em um arquivo incompleto.

O resultado da ferramenta sorter pode ocupar bastante espaço em disco, às vezes mais do que o tamanho da unidade de armazenamento. Já vi um disco rígido de 40 GB retornar 60 GB de dados. Portanto, certifique-se de possuir espaço suficiente.

Esta ferramenta é muito utilizada na computação forense nos casos que necessitam uma recuperação de todos os arquivos, incluindo imagens, vídeos e documentos.

sábado, 15 de janeiro de 2011

Ferramentas de linha de comando do The Sleuth Kit

O The Sleuth Kit (TSK) é uma coleção de ferramentas de linha de comando para Unix que permite investigar um computador, isto é, trata-se de uma coleção de ferramentas forenses. O objetivo destas ferramentas é o acesso aos arquivos e aos sistemas de arquivos. O TSK suporta os sistemas de arquivos FAT, Ext2/3, NTFS, UFS, e ISO 9660.

Ao todo são 27 ferramentas que fornecem informações ou conteúdo de arquivos, unidades de dados, volumes, partições, sistemas de arquivos e metadados como Mac times e inode. Veja abaixo uma lista das ferramentas com uma breve descrição da respectiva funcionalidade:

blkcalc - Converte entre números de unidades não alocadas no disco e números de unidades regulares no disco.
blkcat - Mostra o conteúdo da unidade de dados do sistema de arquivos (blocos) em uma imagem de disco.
blkls - Lista as unidades de dados do sistema de arquivos (blocos).
blkstat - Mostra os detalhes de uma unidade de dados do sistema de arquivos (bloco ou setor).
ffind - Encontra o nome de um arquivo ou diretório pelo inode.
fls - Lista os nomes dos arquivos e diretórios de uma imagem de disco.
fsstat - Mostra os detalhes gerais de um sistema de arquivo.
hfind - Consulta um valor de Hash em uma base de dados de Hash.
icat - Retorna o conteúdo de um arquivo baseado no seu número inode.
ifind - Encontra a estrutura de metadados que foi alocada para uma unidade de disco ou nome de arquivo.
ils - Lista a informação do inode.
img_cat - Retorna o conteúdo de um arquivo imagem.
img_stat - Mostra os detalhes de um arquivo imagem.
istat - Mostra os detalhes de uma estrutura de metadados, isto é, inode.
jcat - Mostra o conteúdo de um bloco journal em um sistema de arquivos com journal.
jls - Lista o conteúdo de um sistema de arquivos com journal
mactime - Cria uma linha do tempo ASCII das atividades dos arquivos.
mmcat - Retorna o conteúdo de uma partição para a saída padrão.
mmls - Mostra o esboço da partição de um volume do sistema (tabela de partição).
mmstat - Mostra os detalhes sobre volumes do sistema (tabela de partição).
sigfind - Encontra a assinatura binária em um arquivo.
sorter - Classifica os arquivos de uma imagem em categorias baseadas nos tipos de arquivo.
srch_strings - Mostra os caracteres imprimíveis das strings de um arquivo.
tsk_comparedir - Compara o conteúdo de um diretório com o conteúdo de uma imagem ou dispositivo local.
tsk_gettimes - Coleta os MAC times de uma imagem de disco para um arquivo.
tsk_loaddb - Popula um banco de dados SQLite com os metadados de uma imagem de disco.
tsk_recover - Exporta os arquivos de uma imagem para um diretório local.

Com estas ferramentas podemos recuperar arquivos deletados, montar uma linha do tempo do uso dos arquivos, procurar por determinada string, entre outras coisas, tarefas corriqueiras na computação forense.

As ferramentas funcionam acessando o conteúdo tanto na forma de imagem como diretamente ao dispositivo. Mas lembre-se, é sempre recomendável criar a imagem da unidade de armazenamento para preservar a integridade da prova.

O TSK pode ser obtido pelo endereço www.sleuthkit.org. Algumas distribuições Linux fornecem seu pacote pelos repositórios oficiais de software.

Existe o Autopsy que é a interface gráfica para esta coleção (http://dan-scientia.blogspot.com/2010/10/computacao-forense-com-o-sleuth-kit-e.html), entretanto, é possível com apenas poucos comandos realizar algumas tarefas do Autopsy, e em alguns casos, até de forma mais agilizada. Mas isto fica para uma outra postagem.

segunda-feira, 18 de outubro de 2010

Computação forense com o Sleuth Kit e Autopsy

O The Sleuth Kit (TSK) e o Autopsy são ferramentas livres para investigação digital, isto é, forense digital, que podem ser executadas em sistemas Windows, Linux, BSD, OS X e Solaris. São ferramentas para serem usadas em análise de sistemas de arquivos NTFS, FAT, HFS+, Ext2, Ext3 e outros.

O The Sleuth Kit é um conjunto de ferramentas forenses para linha de comando e o Autopsy é uma interface gráfica para estas ferramentas do TSK. O acesso à interface do Autopsy se dá por um navegador Web, o Autopsy cria um servidor Web e seus scripts geram as páginas da interface.

A instalação em um sistema Linux é bastante simples. Algumas distros disponibilizam os pacotes compilados, em outras podemos instalar a partir dos pacotes fontes disponíveis em http://www.sleuthkit.org/. Os arquivos para baixar são sleuthkit-x.y.z.tar.gz e autopsy-x.yz.tar.gz.

Na instalação a partir dos pacotes fontes, o conteúdo do Sleuth Kit deve ser extraído para um diretório qualquer e dentro dele executar os comando padrões de compilação: ./configure, make, make install. Dependências extras poderão ser requeridas e se tudo der certo, já está pronto. O conteúdo do Autopsy deve ser extraído para um diretório definitivo e basta executar os comandos ./configure e make. Durante sua instalação o Autopsy pede que se determine um diretório base para onde serão armazenados os casos. Após a conclusão da instalação, o servidor Web do Autopsy precisa ser iniciado e no navegador digita-se o endereço "http://localhost:9999/autopsy".

A interface do Autopsy é composta por várias páginas, por estas páginas o investigador vai criar um caso, adicionar as peças que serão examinadas e por fim realizar os diversos exames disponíveis. A seguir um pequeno passo a passo de como inserir uma unidade de armazenamento para a análise forense:

Na página inicial, crie um novo caso e dê um nome à ele. Opcionalmente pode-se preencher com a descrição, nome dos investigadores etc.

Em seguida, adicione um computador ao caso. Opcionalmente preencha a descrição e outras informações que julgar necessárias.

Por fim, adicione uma imagem da unidade de armazenamento deste computador que será investigado. A imagem não é necessariamente um arquivo imagem criado com um disk dump, pode ser também o caminho para o dispositivo físico, caso a unidade esteja conectada diretamente na controladora de disco ou via adaptador USB.

Adicionando uma imagem no Autopsy

Com estes três passos concluídos podemos realizar a investigação forense na unidade de armazenamento. Basicamente temos a análise da unidade e a linha do tempo das atividades dos arquivos.

Página de análise de imagens adicionadas

As partições reconhecidas recebem as identificações com letras de unidade, como no Sistema Windows. Selecionando a letra da unidade de armazenamento e clicando no botão "Analyze" vamos para uma página onde temos diversas opções de análise:

O botão "File Analysis" abre um conjunto de páginas onde podemos navegar pelo sistema de arquivos, possibilitando ver o conteúdo dos arquivos alocados e não alocados.

Página de análise de arquivos

O botão "Keyword Search" abre a página com um mecanismo de busca de palavra chave para o espaço alocado e não alocado.

O botão "File Type" abre um conjunto de páginas que fornecem uma ferramenta de separação dos arquivos pelo tipo e com a possibilidade de extração e recuperação de todos os arquivos, alocados e não alocados, para o diretório base onde os casos são armazenados.

Retornando à página inicial de análise das imagens, temos o botão "File Activity Time Lines". Clicando neste botão, abre-se um conjunto de páginas que fornecem ferramentas para a criação e visualização de uma linha do tempo das atividades de acesso dos arquivos. A linha do tempo é criada a partir das informações dos metadados dos arquivos e pode conter inclusive arquivos não alocados que foram recuperados.

Página de visualização da linha do tempo

Esta é uma pequena descrição de algumas das ferramentas contidas na dupla Sleuth Kit e Autopsy. Tratam-se de dois excelentes conjuntos de softwares que atendem em quase todas as necessidades do investigador forense e pode-se considerar indispensável em um laboratório forense computacional.

terça-feira, 10 de agosto de 2010

Neologismo na computação

Chama-se de neologismo a criação de novas palavras na língua ou atribuição de novos sentidos a palavras já existentes. No mundo da computação o neologismo ocorre com uma grande frequência. Estas palavras surgem para suprir uma necessidade vocabular, que pode ser momentânea mas às vezes, quando muito utilizada, acaba se estabelecendo no idioma e se torna parte do léxico.

Como exemplos de neologismos na computação, temos: salvar, escanear, logar, deslogar, ripar, ressetar, rebootar etc. Geralmente são palavras da língua inglesa que são pronunciadas e escritas de uma forma aportuguesada.

Em muitos casos a expressão já possui uma tradução para a língua portuguesa e o uso destas palavras acaba sendo um erro. Por exemplo dizer "embedar" em vez de "incorporar", "downloadar" em vez de "baixar", "printar" em vez de "imprimir", "setar" em vez de "configurar" e "atachar" em vez de "anexar" passa a ser um atentado à língua portuguesa.

Embora existam palavras que estão incorporadas no léxico, algumas devem ser evitadas, são os casos de "customizar" pois deve ser usado "personalizar", "deletar" pois deve ser usado "apagar" e "estartar" pois deve ser usado "iniciar".

Atualmente a moda é dizer "googar" e "tuitar", são tecnologias na Internet com grande popularidade. Tudo quanto é novidade acaba formando um neologismo, isto é característica de uma língua viva. Há até um website norte-americano, o "Word Spy" (http://wordspy.com/), que mantém um guia para estas novas palavras.

sexta-feira, 5 de março de 2010

Informação para os geeks

Para os aficionados por tecnologia e computação existem diversos sites que trazem muitas informações e notícias sobre os assuntos do gênero. Acompanhe diariamente estes sites para manter-se atualizado:

The H: Security news and Open source developments (http://www.h-online.com/): É a edição inglesa do site alemão Heise Online (http://www.heise.de/). É um dos sites mais populares na Europa sobre o assunto de computação e TI, direcionado a reportagens sobre segurança e desenvolvimento de software livre.

Slashdot News for nerds, stuff that matters (http://slashdot.org/): Um site diversificado na área da computação, ciência e tecnologia, publicando histórias, reportagens etc.

Linux Journal The Original Magazine of the Linux Community (http://www.linuxjournal.com/): Uma das primeiras revistas sobre Linux, com conteúdo contendo tutoriais, projetos, exames de produtos, conselhos e opiniões de especialistas.

The Register: Sci/Tech News for the World (http://www.theregister.co.uk/): Notícias, histórias e reportagens sobre ciência e tecnologia.

The Geek Stuff (http://www.thegeekstuff.com/): Com postagens de guias, tutoriais, dicas, truques sobre Linux, bando de dados, segurança e web. Focado em artigos que possam ensinar ou ajudar a resolver um problema.

How-To Geek - Computer Help from your Friendly How-To Geek (http://www.howtogeek.com/): Um site com a intenção de ser o melhor em fonte de artigos do tipo "Como Fazer" sobre qualquer coisa na computação, com conteúdo fácil o bastante para os iniciantes mas também útil para os geeks em geral.

Chris Pirillo (http://chris.pirillo.com/): Este geek viciado por hardware e drogado por software é uma das personalidades mais famosas na Internet. É entusiasta e consultor de tecnologia, já publicou livros e já foi apresentador de TV. Em seu blog, ele cobre assuntos sobre hardware, software, tecnologia, eventos técnicos e muito mais.

ReadWriteWeb - Web Apps, Web Technology Trends, Social Networking and Social Media (http://www.readwriteweb.com/): Este blog é conhecido por oferecer alguns dos comentários mais criteriosos sobre as novidades diárias na indústria da Internet. É o número um no mundo em publicação de informação tecnológica.