Mostrando postagens com marcador ssh. Mostrar todas as postagens
Mostrando postagens com marcador ssh. Mostrar todas as postagens

domingo, 12 de agosto de 2012

Aquisição de dados através da rede

Na computação forense, a aquisição de dados é a cópia dos dados armazenados em um dispositivo que está sendo examinado. Esta cópia pode ser física, onde se realiza uma clonagem fiel de toda a unidade de armazenamento, gerando um arquivo imagem, ou pode ser lógica, onde se realiza a cópia arquivo por arquivo de toda a unidade de armazenamento.

Sempre, a cópia é realizada à uma outra unidade de armazenamento para que o examinador possa trabalhar sem prejudicar a evidência. Esta conduta serve para garantir o conteúdo da prova.

Em situações adversas, o examinador poderá encontrar uma máquina onde não se é possível retirar o disco rígido, seja por razões judiciais ou pela tecnologia aplicada no hardware, por exemplo, a tecnologia RAID. Nestes casos, será necessário iniciar esta máquina com algum sistema forense e assim realizar a aquisição dos dados para uma unidade de armazenamento externa. A distribuição DEFT Linux LiveCD (http://www.deftlinux.net/) pode ser usada para isso.

Se o examinador possui um dispositivo de armazenamento externo, poderá copiar os dados pela própria máquina suspeita. Se possui um computador portátil, poderá estabelecer uma rede entre as máquinas e realizar a aquisição pela rede. É neste segundo cenário que este artigo se aplica, em uma rede cabeada, para uma cópia física de todo o dispositivo. Será utilizado o DEFT Linux na máquina suspeita e um notebook com a distro Fedora. Conecte um cabo crossover entre as placas de rede.

Primeiramente vamos preparar o terreno, configurando a rede com IP estático no Fedora e no DEFT. Digamos que o Fedora, que está no computador portátil do examinador, esteja usando o NetworkManager para gerenciar a rede. Vamos desativá-lo para usar neste processo de coleta o serviço de rede tradicional do Linux.

Execute o script do NetworkManager com o parâmetro "stop":

# /etc/init.d/NetworkManager stop

Em seguida edite o arquivo de configuração do dispositivo de rede:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Usando este conteúdo na configuração (adapte se necessário):

DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

Inicie o serviço de rede:

# /etc/init.d/network start

O comando 'ifconfig' nos mostra se a rede está ativa corretamente. No exemplo a interface "eth0". Ainda no Fedora, é necessário liberar uma porta no firewall. Edite o arquivo de configuração do iptables, adicionando a linha para a porta 2222 e reinicie o serviço iptables:

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

# /etc/init.d/iptables restart

Com o DEFT operando na máquina suspeita, precisa-se também configurar uma rede com IP estático. O DEFT Linux é compatível com a distro Debian, possui uma ligeira diferença na configuração em relação ao Fedora. Edite o arquivo de configuração da interface de rede, usando o conteúdo abaixo e reinicie o serviço de rede:

# vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.11
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

# /etc/init.d/networking restart

Mais uma vez, o comando 'ifconfig' nos mostra se a rede está ativa corretamente. Os endereços IPs escolhidos nas duas configurações serão usados nos exemplos dos comandos de aquisição. A máquina com Fedora recebeu o IP 192.168.1.10 e a máquina suspeita, rodando o com DEFT, recebeu o IP 192.168.1.11.

Existem duas ferramentas para estabelecer uma conexão de rede e assim transferir dados: nc e ssh.

A ferramenta 'nc' (netcat) é capaz de abrir uma conexão TCP, enviar pacotes UDP e ouvir em uma porta arbitrária. Esta ferramenta será executada nos dois computadores que irão "conversar" pela rede.

Sinopse:

nc [opção]... [endereço] [porta]

Primeiramente, executa-se o 'nc' na máquina que vai receber, no nosso caso, no Fedora. Escolha uma das linhas de comandos abaixo, de acordo com a ferramenta "diskdump" de sua preferência:

$ nc -l 2222 | bunzip2 | dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dc3dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dcfldd of=Tempo/sda.dd

A opção -l define que o 'nc' vai ficar "ouvindo" pela porta 2222.

Depois, executar o 'nc' na máquina que vai enviar, no nosso caso, no DEFT. Use a respectiva linha de comando de acordo com a ferramenta "diskdump" usada acima:

# dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dc3dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dcfldd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222

O comando 'nc' vai enviar o fluxo de dados para o endereço e porta especificado.


Outro procedimento é utilizar a ferramenta 'ssh', para enviar o fluxo de dados à um arquivo em uma máquina remota. Considerando que o servidor sshd esteja em execução no computador portátil, com o Fedora, execute na máquina suspeita, com o DEFT, o comando para enviar o arquivo imagem. Escolha uma das linhas de comandos:

# dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dc3dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dcfldd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2

Neste procedimento não é necessário executar qualquer comando na máquina que vai receber os dados, no nosso caso o notebook com Fedora, apenas o servidor sshd deve estar ativo e utilize uma conta de usuário do sistema Fedora. Será solicitada a senha deste usuário.


Como visto, é relativamente simples a aquisição de dados pela rede. Muitas vezes até compensa em relação a desmontar a máquina suspeita para a retirada do disco rígido. Os computadores portáteis costumam dar trabalho desta desmontagem. O único inconveniente pode ser a velocidade de transmissão, de acordo com a tecnologia da rede, pois uma rede de 100 Mbits a velocidade máxima teórica é 12,5 MB/s.

quinta-feira, 26 de agosto de 2010

Execução de aplicações gráficas remotas pelo redirecionamento do X11 com o SSH

O protocolo SSH possui a habilidade de redirecionar seguramente aplicações gráficas, do ambiente X Window, para uma conexão SSH criptografada. Assim, a aplicação gráfica é executada na máquina remota e sua janela é exibida na máquina local, em um tráfego de rede protegido.

Se a máquina remota possui o sistema Linux, que é o se será abordado neste artigo, a implementação do "X11 Forwarding" torna-se simples e os clientes poderão ser tanto sistemas Linux como Windows.

Para isto poder acontecer são necessários alguns pré-requisitos. Primeiro, na máquina remota o servidor X deve estar em estado de execução. Segundo, o sistema da máquina remota precisa estar configurado para permitir o acesso por SSH. E finalmente, o servidor SSH (SSHd) da máquina remota e o cliente SSH da máquina local precisam estar configurados para permitir o X11 Forwarding.

O primeiro e o segundo pré-requisitos não serão abordados neste artigo, vamos partir do terceiro.

A configuração do servidor SSH se faz pelo arquivo "/etc/ssh/sshd_config". Neste arquivo encontram-se duas linhas que devem ter seus argumentos como mostrado abaixo, para ativar o redirecionamento do X11:

X11Forwarding yes
X11DisplayOffset 10

O parâmetro "X11Forwarding" marcado com "yes" especifica que o redirecionamento do X11 está permitido. O parâmetro "X11DisplayOffset" especifica o primeiro valor disponível para redirecionamento do X11 pelo servidor SSH, prevenindo que o SSHd interfira nos servidores X11 reais. O padrão é 10.

Basta reiniciar o serviço do SSHd para concluir esta parte da configuração da máquina remota. Agora vamos para o cliente, que é a máquina local onde irá receber as janelas das aplicações gráficas.

Em um cliente com sistema Linux, existem algumas formas de ativar o X11 Forwarding em uma sessão SSH. Uma é editar o arquivo de configuração "/etc/ssh/ssh_config" e alterar duas linhas para "ForwardX11 yes" e "ForwardX11Trusted yes". Esta forma ativa o recurso permanentemente para todos os usuários que forem utilizar o SSH. Uma outra forma é diretamente na linha de comando do SSH, com os parâmetros -X ou -Y. O parâmetro -X equivale ao "ForwardX11 yes" e o parâmetro -Y ao "ForwardX11Trusted yes".

Temos então duas classes de clientes, com o redirecionamento não-confiável do X11 e com o redirecionamento confiável do X11, respectivamente -X e -Y. O redirecionamento confiável do X11 significa que o cliente confia no servidor X, no qual está conectando pelo SSH, e que então neste servidor X não há qualquer programa malicioso como keylogger, screenshot ou algo que vá espionar sua conexão. O redirecionamento não-confiável do X11 significa uma conexão para um sistema desconhecido ou inseguro. Este tipo de conexão gera um cookie com o xauth e utiliza uma extensão de segurança para limitar o acesso. Algumas aplicações podem não funcionar neste modo não-confiável por causa destas limitações na segurança.

Assim, em um cliente com sistema Linux devemos executar o cliente SSH para abrir um terminal do sistema remoto e qualquer aplicação gráfica que for executada por este terminal será aberta na área de trabalho do cliente, que é a máquina local. Segue um exemplo de linha de comando para o SSH:

$ ssh -CY -c blowfish 192.168.1.102

Outros parâmetros podem ser utilizados na linha de comando do SSH, de acordo com a necessidade ou preferência. Por exemplo o parâmetro -C ativa a compactação de dados na transferência pela rede, o parâmetro -c especifica a cifra de criptografia. Este assunto sai do escopo deste artigo, é só um lembrete.

Em um cliente com sistema MS Windows são necessários um servidor X, para receber as janelas das aplicações remotas, e um cliente SSH, para estabelecer a conexão segura com o servidor remoto.

Um servidor X para Windows compatível com o X11 é o Xming (http://www.straightrunning.com/XmingNotes/). Sem entrar em muitos detalhes, pois o procedimento é fácil, instale e execute o Xming. Seu ícone aparecerá na barra de tarefas. Posicionando o cursor sobre seu ícone, o software mostra o endereço do servidor X no cliente Windows, algo como "Xming Server:0.0".

O PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) é uma implementação gratuita de um cliente SSH para Windows. Não requer instalação, basta executá-lo para abrir sua janela de configuração. Na janela de configuração do PuTTY, na categoria "Session" escreva o nome da máquina ou o IP em "Host Name (or IP address)" e a porta se for o caso. Na categoria "Connection/SSH/X11" marque a quadrícula "Enable X11 forwarding" e em "X display location" escreva sem as aspas "localhost:0.0", que é o endereço do servidor X instalado no cliente Windows. Concluída esta configuração, basta clicar no botão "Open" para o PuTTY abrir a janela do terminal remoto. Qualquer aplicação gráfica que for executada por este terminal será aberta na área de trabalho do cliente Windows.

Como visto, pela ferramenta SSH é possível não só executar aplicações em modo texto como também aplicações gráficas. A administração de sistemas remotos torna-se bastante completa com este recurso a mais. Consulte as documentações das ferramentas citadas neste artigo para mais informações.

quinta-feira, 5 de agosto de 2010

Copiando arquivos pela rede em modo texto

Em sistemas Linux podemos copiar arquivos entre máquinas de uma rede utilizando uma ferramenta do pacote OpenSSH. O OpenSSH é uma versão gratuita das ferramentas de conectividade SSH. O OpenSSH codifica todo o tráfego para eliminar qualquer ataque de escuta ou rapto de conexão. A suíte OpenSSH traz soluções que substituem o rlogin, telnet, ftp e o rcp.

A ferramenta para cópia remota e segura de arquivos é o scp (secure copy). O scp copia arquivos entre máquinas em uma rede usando a mesma autenticação e segurança da ferramenta ssh. São permitidas cópias entre uma máquina local e uma remota ou entre duas máquinas remotas. Para que o scp funcione é necessário que a máquina remota tenha o servidor sshd ativo.

A sintaxe básica e resumida do comando está na linha abaixo:

scp [-Cr] [-P porta] [[usuario@]host1:]arquivo1 ... [[usuario@]host2:]arquivo2

Um exemplo é:

scp joao@192.168.0.105:/home/joao/arquivo.ext /home/maria/

O comando acima copia o arquivo.ext da máquina remota no endereço 192.168.0.105, usando a conta do usuário joao, para a máquina local, de onde está sendo executado o comando. Se a conta do usuário joao tiver uma senha então será solicitada para autorizar a cópia.

Existem diversas opções para a linha de comando, citei apenas a "-C" que ativa a compactação para a transferência, a "-r" que copia recursivamente um diretório e "-P porta" para caso a porta não seja a padrão. A página manual traz uma descrição de todas as opções.

A velocidade da cópia obviamente depende da estrutura da rede. Em uma rede de 100 Mbits a velocidade máxima teórica é 12,5 MB/s.

Mais informações em: http://www.openssh.org/