quarta-feira, 8 de fevereiro de 2012

Automatizando a execução do Autopsy com o chkconfig

O Autopsy é uma interface gráfica para as ferramentas do The Sleuth Kit. Para ter acesso à interface é preciso iniciar o Autopsy, assim seus scripts geram as páginas da interface, que serão acessadas através de um navegador Web.

A linha de comando para iniciar o Autopsy é simples, pelo prompt do terminal podemos executar:

# autopsy -d /evidencia &

Entretanto, cada vez que o sistema for reiniciado, é preciso executar novamente este comando. Claro que é possível adicionar esta linha de comando no arquivo "/etc/rc.d/rc.local", contudo, esta não é a forma mais elegante para automatizar a execução do Autopsy, principalmente em uma distribuição Fedora.

O Fedora utiliza o comando "chkconfig" para automatizar a execução dos serviços. O chkconfig trabalha com scripts para controlar os serviços. O chkconfig controla quais serviços serão iniciados durante a inicialização da máquina. Cada serviço possui um script e para adequar o Autopsy ao comando chkconfig, é preciso criar o script. A seguir o conteúdo do script para o Autopsy (salve-o com o nome "autopsy"):

-----------------------corte aqui-----------------------
#!/bin/sh
#
# chkconfig: 2345 90 10
# description: Autopsy is a web interface for The Sleuth Kit
#

# Source function library.
. /etc/init.d/functions

[ -x /usr/bin/autopsy ]  || exit 1

RETVAL=0

start(){
    if [ ! -f /var/lock/subsys/autopsy ]; then
    echo -n $"Starting autopsy daemon: "
    daemon autopsy -d /evidencia &
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/autopsy
    return $RETVAL
    else
        echo $"Autopsy is already running."
    fi

}

stop(){
    if [ -f /var/lock/subsys/autopsy ]; then
    echo -n $"Stopping autopsy daemon: "
    killproc autopsy
    RETVAL=$?
    rm -f /var/lock/subsys/autopsy
    return $RETVAL
    else
        echo $"Autopsy is not running."
    fi
}

restart(){
    if [ -f /var/lock/subsys/autopsy ]; then
    stop
    start
    else
        echo $"Autopsy is not running."
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status autopsy
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        RETVAL=1
esac

exit $RETVAL
--------------------------------------------------------

Para adicionar o script e ativar o controle do serviço pelo gerenciamento do chkconfig, primeiro é preciso colocar o script no diretório "/etc/rc.d/init.d/" e então executar no prompt do terminal o comando "chkconfig --add nome_do_serviço":

# chkconfig --add autopsy

A partir deste ponto basta executar o comando "chkconfig nome_do_serviço on" para que a devida ligação simbólica seja criada nos diretórios "/etc/rc.d/rcN.d/", especificados no cabeçalho do script:

# chkconfig autopsy on

Com a execução do comando "chkconfig nome_do_serviço off" estas ligações são removidas. Do mesmo modo, pode-se remover o controle do serviço pelo gerenciamento do chkconfig executando o comando "chkconfig --del nome_do_serviço":

# chkconfig autopsy off
# chkconfig --del autopsy

Com a execução do comando "chkconfig autopsy on", o serviço do Autopsy será executado automaticamente na próxima inicialização do sistema. A execução imediata do serviço pode ser feita com a chamada do próprio script pela linha de comando, em algo como "/etc/rc.d/init.d/nome_do_serviço start":

# /etc/rc.d/init.d/autopsy start

Ou também utilizando o comando "service", em algo como "service nome_do_serviço start":

# service autopsy start

Lembrando que estas formas só funcionam para a seção atual, não mantendo para a próxima inicialização da máquina.

Estes scripts usualmente atendem aos argumentos "start", "stop", "status" e "restart", do mesmo modo os comandos que controlam os serviços. O argumento "stop" para o serviço, o argumento "status" mostra a situação atual do serviço e o argumento "restart" reinicia o serviço.

Mesmo para a execução manual do Autopsy, é muito mais elegante realizar através do script em "/etc/rc.d/init.d/". Saiba mais sobre "Configurando Serviços no Linux" em http://dan-scientia.blogspot.com/2009/09/configurando-servicos-no-linux.html e sobre "Computação forense com o Sleuth Kit e Autopsy" em http://dan-scientia.blogspot.com/2010/10/computacao-forense-com-o-sleuth-kit-e.html

sexta-feira, 3 de fevereiro de 2012

Descobrindo senhas no Linux com o John the Ripper

O programa John the Ripper (http://www.openwall.com/john/) é capaz de quebrar senhas de usuários em diversos sistemas operacionais, incluindo Unix, Linux, Windows e DOS. Seu propósito inicial é detectar senhas fracas, para que o administrador do sistema solicite ao usuário que altere sua senha. O John the Ripper é capaz de identificar o algoritmo utilizado para gerar os hashes das senhas.

Um sistema Linux tradicional armazena as senhas das contas dos usuários no arquivo /etc/passwd. As distribuições modernas utilizam o arquivo /etc/shadow para armazenar as senhas. Desta forma, primeiramente é necessário combinar o /etc/passwd e o /etc/shadow em um único arquivo para que o programa john reconheça o conteúdo. Use uma linha de comando semelhante a apresentada a seguir:

# unshadow /etc/passwd /etc/shadow > senhas.txt

Neste primeiro momento é necessário acessar como root para ter permissão de leitura nos arquivos em /etc/. Se preferir, copie os arquivos /etc/passwd e /etc/shadow para um diretório de usuário e execute o comando unshadow por este usuário nas cópias do passwd e shadow:

$ unshadow passwd shadow > senhas.txt

Agora podemos executar o programa john neste arquivo combinado de senhas, para que o programa quebre as senhas encontradas:

$ john senhas.txt

Pode ser interessante, para não perder tempo, especificar determinado usuário para quebrar a senha. Há algumas formas para fazer isto, com a opção --users, especificando o nome do usuário, o número UID, ou excluindo os outros usuários. As três linhas abaixo são exemplos para cada uma das formas:

$ john --users=convidado senhas.txt
$ john --users=503 senhas.txt
$ john --users=-root,joao,pedro senhas.txt

Quando o programa john está em execução, ele não exibe as tentativas de quebra, mas uma linha de palpites pode ser exibida pressionando a tecla Espaço. Esta linha possui informações como tempo gasto, caracteres por segundo, tentativas de senhas etc. Para abortar pressione Ctrl+C.

Ao encontrar a senha, ela é exibida junto com o nome do usuário. As senhas quebradas serão armazenadas no arquivo ~/.john/john.pot, para consultas posteriores, com o comando:

$ john --show senhas.txt

Veja um exemplo completo de comando e resposta do programa john (a senha da conta convidado é 123):

$ john --users=convidado senhas.txt
Loaded 1 password hash (generic crypt(3) [?/64])
123              (convidado)
guesses: 1  time: 0:00:00:05 100% (2)  c/s: 146  trying: 12345 - missy

A senha 123 é muito simples e rápida de se quebrar. Entretanto, senhas com oito ou mais caracteres alfanuméricos, armazenadas com a função crypt(), podem demorar um bocado para serem quebradas.

Por exemplo, sem contar caracteres especiais e maiúsculas, pode-se usar as 26 letras e os 10 números para compor um dígito da senha. Uma senha com 8 dígitos pode ser formada de 36 elevado à 8 arranjos diferentes, ou seja, 2,82e+12 arranjos. Isto é relativamente imenso. Se um computador pudesse processar 10 milhões de senhas por segundo, apenas comparando o hash, a quebra desta senha por força-bruta poderia levar até 78 horas. É tempo razoável mas possível.

Com a necessidade de usar a função crypt(), o desempenho no número de senhas por segundo cai bastante. Pois felizmente, as distribuições Linux adicionam um "salt", forçando o uso da função crypt(), para dificultar a quebra por força-bruta com Hash Tables.

O modo de uso do programa john, apresentado neste artigo, não utiliza Hash Tables. Os arranjos são gerados e calculados com a função crypt() em cada tentativa. Isto atrasa bastante o processo.

O programa John the Ripper utiliza alguns modos para otimizar a quebra da senha e possui algumas opções para sua linha de comando. Consulte a documentação, normalmente localizada em /usr/share/doc/john-x.x.x/, para saber mais.

quarta-feira, 1 de fevereiro de 2012

Problema de Lógica: A equipe do hospital

"A equipe do hospital consiste de 16 médicos e enfermeiros, incluindo eu. Os seguintes fatos se aplicam aos membros da equipe. Me incluindo ou não, nenhuma diferença faz. A equipe consiste de:

1. Mais enfermeiros do que médicos.
2. Mais médicos homens do que enfermeiros homens.
3. Mais enfermeiros homens do que enfermeiras mulheres.
4. Pelo menos uma médica mulher."

Qual é o sexo e a ocupação de quem está falando?





RESPOSTA





Pelos fatos 1 e 4, e do fato de que há 16 médicos e enfermeiros, existem nove ou mais enfermeiros e seis ou menos médicos homens. Assim, pelo fato 2, o número de enfermeiros homens precisa ser menor do que seis.

Pelo fato 3, o número de enfermeiras mulheres precisa ser menor que o número de enfermeiros homens. Assim, precisa ter mais de quatro enfermeiros homens.

Já que deve ter menos de seis e mais de quatro enfermeiros homens, é preciso ter exatamente cinco enfermeiros homens.

Assim, precisa ter não mais que nove enfermeiros, consistindo de cinco homens e quatro mulheres, e precisa ter não menos do que seis médicos homens. Então, precisa ter somente uma médica mulher para chegar ao total de 16.

Se um médico homem não está incluído, o fato 2 é uma contradição. Se um enfermeiro homem não está incluída, o fato 3 é uma contradição. Se uma médica mulher não está incluída, o fato 4 é uma contradição. Se uma enfermeira mulher não está incluída, nenhum fato se contradiz. Então, quem está falando é uma mulher e é uma enfermeira.

terça-feira, 31 de janeiro de 2012

Posição atual da Estação Espacial Internacional

A Estação Espacial Internacional (ISS) viaja em uma velocidade média de 27,7 mil quilômetros por hora, realizando 15,7 órbitas por dia, numa altitude entre 278 km e 460 km. A estação leva até 6 minutos para cruzar o céu de um observador terrestre.

A ISS é o maior e mais brilhante objeto feito pelo homem em órbita, apresenta uma magnitude que varia de acordo com a distância à terra e com o reflexo da luz solar. Algumas estimativas apontam para um brilho de magnitude até -8, com a luz do Sol brilhando diretamente pelos painéis solares.

O site AstroViewer (http://www.astroviewer.com/), além de conter um mapa interativo do céu noturno, possui uma página que mostra a posição atual da ISS (http://iss.astroviewer.net/) e seu caminho sobre a superfície terrestre, com atualizações a cada segundo.

Neste site, também é possível especificar a localização do observador terrestre, e assim, obter uma lista das oportunidades de observação da ISS, com data, hora, duração, magnitude e direção. Tudo muito bem ilustrado através de um mapa da localização e com o caminho da ISS.

Ah! Ainda é possível gerar um código HTML para incorporar o mapa em sua página.

A observação da Estação Espacial Internacional depende de alguns fatores como altura em relação ao horizonte, reflexão da luz solar e céu noturno. As melhores condições de observação ocorrem antes do nascer do Sol e depois do pôr do Sol.



segunda-feira, 30 de janeiro de 2012

Brincadeira de adivinhar um número na calculadora

Algumas calculadoras, mesmo as simples, possuem uma funcionalidade na tecla = (igual), talvez associada à função de repetição ou função de cálculo contínuo, que quando pressionada, após a exibição do resultado de um cálculo, repete a última operação.

Para testar se a calculadora possui esta funcionalidade, por exemplo, tecle 1 + 1 e tecle = repetidamente. Se o resultado receber incrementos de 1 a cada pressionamento da tecla = então a calculadora possui esta funcionalidade.

Nestas calculadoras é possível fazer uma brincadeira de adivinhação de um número. Uma pessoa programa a calculadora, escolhendo um número de quantos dígitos desejar e passa a calculadora para outra pessoa, a qual irá descobrir o número digitando seus palpites.

Para programar a calculadora nesta brincadeira, entre com um número de quantos dígitos preferir. Um bom tamanho é um número de quatro dígitos. Divida este número por ele mesmo e tecle =. O resultado será obviamente 1. Pronto, a calculadora está programada. Não tecle mais nada e passe a calculadora para a outra pessoa.

Exemplo, sequência de teclas para programar o número 3647:

3 6 4 7 : 3 6 4 7 =

Para realizar as tentativas a pessoa deve digitar os números e teclando = após cada palpite. Se o palpite for menor que o número correto, o resultado será menor que 1 (zero vírgula alguma coisa). Se o palpite for maior que o número correto, o resultado será maior que 1 (um vírgula alguma coisa). Quando acertar o número, o resultado será exatamente 1.

Exemplo, adivinhando o número acima:

[Palpite 1] 5 5 5 5 = (a calculadora retorna 1,5232 - o palpite é maior)
[Palpite 2] 3 3 3 3 = (a calculadora retorna 0,9139 - o palpite é menor)
[Palpite 3] 3 6 4 7 = (a calculadora retorna 1 - o palpite está certo)

A brincadeira se desenvolve nestas tentativas, digitando um número e teclando =, para que o resultado se aproxime de 1. Quanto maior o número de dígitos, maior a dificuldade. Pode-se informar ao adivinhante quantos dígitos tem o número, ou não.

Ainda não encontrei uma documentação que explique esta funcionalidade das calculadoras, não é exatamente a função de cálculo contínuo pois esta função aproveita o resultado na operação seguinte. Nas tentativas, quando digita-se o palpite e a tecla =, o resultado das operações é o palpite dividido pelo número certo.

Infelizmente não é toda calculadora que aceita esta brincadeira. Nas mais simplezinhas costuma funcionar. Numa científica, toda poderosa, provavelmente não. Em uma com RPN, acredito que não.

Vantagens e desvantagens entre Desktop e Laptop

Um dilema bastante comum para quem vai comprar um computador é a escolha entre um desktop e um laptop (notebook). Principalmente quando pretende ter apenas um computador.

Um computador para uso pessoal deve atender o propósito mais geral possível. Os usos mais comuns são: acesso à Internet, editores de textos e planilhas, jogos, imagens, vídeos e músicas. Uns usuários fazem mais uma coisa, outros não e por aí vai.

Para uso profissional a existência de um pré-requisito ajuda na definição do modelo. Um desenhista da Pixar necessitará de uma placa de vídeo super potente. Um executivo que viaja pelas filiais pode necessitar de transporte. A escolha fica mais fácil assim.

Enumerei, talvez algumas, das vantagens e desvantagens de se ter um desktop e um notebook. Possivelmente terão outras. Praticamente, nesta minha análise, a vantagem de um é a desvantagem do outro e vice-versa. Veja:

Desktop

Vantagens:

1) Processamento maior - Tanto a unidade central de processamento como o processador gráfico e demais chipsets serão versões completas, com desempenho total.
2) Tela do monitor maior - Os monitores para desktop podem ser maiores nas polegadas e também com maior número de pixels.
3) Maior espaço em HD - Um gabinete pode comportar mais de um disco rígido e eles podem ser de 3,5", o que permite modelos com grande capacidade (2 TB).
4) Teclado mais confortável - Os teclados para desktop são grandes, com teclas maiores e com melhor ergonomia.
5) Menor risco de roubo - Como não será transportado com frequência e por ser maior e mais pesado, dificulta o roubo.
6) Manutenção mais fácil - É mais fácil abrir e trocar um componente. O custo das peças são menores também.
7) Upgrade mais fácil - Os diversos componentes podem ser independentes e assim podem ser trocados separadamente. Por exemplo, trocar uma placa de vídeo por uma melhor.
8) Preço mais barato - Por um mesmo preço pode-se obter um desktop mais potente e com maior capacidade, ou, com as mesmas características de hardware, um desktop custa menos.
9) Mais resistente - Os gabinetes são mais robustos, como também as peças internas.

Desvantagens:

1) Não é portátil - Não dá para transportar facilmente.
2) Bateria inexistente - Só funciona conectado à rede elétrica e necessita de um nobreak para que não desligue caso a energia da rede seja interrompida.
3) Consome mais energia - O hardware não é otimizado para poupar energia e os componentes necessitam de uma fonte potente.
4) Ocupa mais espaço - Monitor, gabinete, teclado, mouse, caixas de som, não é qualquer mesa que comporta tudo isso.
5) Pesado - Só o monitor já pode pesar mais que um notebook e o gabinete é o item mais pesado.
6) Mais cabos - Para ligar todas as peças usam-se diversos cabos, tudo espalhado.
7) Tudo separado - O monitor é uma peça à parte, o gabinete outra, mais teclado, mais mouse, mais caixas de som. Por exemplo, se for embalar para transporte é preciso cuidar de cada item separadamente.


Notebook

Vantagens:

1) Portátil - Pequeno, leve, é fácil transportar, pode caber até em uma pasta ou bolsa.
2) Bateria - Já vem com bateria por padrão, e assim, além de permitir o uso fora da rede elétrica, serve como um nobreak caso a energia da rede seja interrompida.
3) Consome menos energia - Funciona com uma fonte pequena e econômica, todo o hardware é otimizado para poupar energia.
4) Ocupa menos espaço - Com dimensões reduzidas, cabe em uma mesa pequena, pode ser guardado em um pequeno espaço.
5) Leve - Podendo pesar apenas 1 kg ou 2 kg, pode-se até usar no colo.
6) Menos cabos - Se usar na rede elétrica, um cabo basta, e usando na bateria pode ser completamente "wireless".
7) Tudo em um - Em uma mesma peça tem-se monitor, CPU, teclado, touchpad, caixas de som, webcam etc.

Desvantagens:

1) Processamento limitado - Os processadores são otimizados para consumir pouca energia e com isso possuem um desempenho reduzido.
2) Tela do monitor menor - As telas estão limitadas à largura do notebook e ainda costumam ter um número de pixels menor.
3) Menos espaço em HD - Além de ter espaço para somente um disco rígido em seu interior, é utilizado um modelo de menor dimensão (2,5"), que consequentemente, possui menor capacidade.
4) Teclado reduzido - Os teclados estão limitados à largura do notebook e geralmente possuem teclas compactas e em menor número (aproveita-se muitas funções numa mesma tecla).
5) Risco de roubo - Por ser fácil de esconder, carregar e estar sujeito a um passeio pela rua, o risco de um assalto é maior.
6) Manutenção complicada - A abertura e desmontagem é complicada e delicada. Os componentes estão agregados uns aos outros, geralmente, se for trocar tem que trocar tudo.
7) Upgrade limitado - Não é qualquer componente que pode ser trocado. Geralmente somente o processador, memória e disco rígido permite troca.
8) Preço mais caro - Por ser um hardware mais refinado, seu custo é maior.
9) Frágil - As peças internas são mais delicadas e a carcaça mais fina e leve, um pequeno impacto pode ser fatal.


Alguns perfis de usuários tornam mais fácil a escolha. Quem dá preferência aos jogos, escolha o desktop, sua capacidade gráfica será necessária para suportar as animações. Os jogos pesados, especialmente os atuais, não funcionarão nos notebooks. O desktop também será necessário para quem precisa ter muito espaço em disco. Os HDs de notebooks não irão suportar mais de 1 Terabyte, pelo menos na tecnologia atual.

Quem usa apenas navegação na Internet, e-mails, comunicação instantânea, suíte para escritório, visualizar e editar fotos, e ouvir músicas, tanto faz desktop ou notebook. Quem precisa levar o computador de um lugar ao outro, quem viaja bastante e gosta de usar o próprio computador para as tarefas pessoais, é melhor um notebook.

O maior medo de quem tem um notebook é realmente o roubo. O proprietário de um deve ficar atento para não dar bobeira, principalmente na rua. O uso de criptografia no disco rígido é altamente recomendável, além de backups com maior frequência.

Quem se acostuma com um notebook dificilmente volta a ter um desktop. No geral é bem mais prático. O desktop é mais para quem joga, considerando os usuários domésticos.

As vantagens e desvantagens não se aplicam aos desktops do tipo All-in-One, pois eles podem possuir características semelhantes a de um notebook. Também não se aplicam aos netbooks, estes são equipamentos bem mais enxutos tornando impraticável a comparação com os desktops.

Espero não ter dificultado ainda mais a sua escolha!

quinta-feira, 26 de janeiro de 2012

Agilizando downloads pela linha de comando

Uma linha de comando executada em um prompt do shell pode agilizar muitos downloads, especialmente quando as URLs se diferem em valores sequenciais ou quando temos páginas com muitos links. Fica muito mais rápido todo o trabalho.

Neste primeiro caso de exemplo, temos uma série de arquivos numerados (man01.pdf, man02.pdf ...) com um início de endereço comum. O uso de um simples laço de repetição executará o programa wget para cada arquivo:

for (( i=1; i<=9; i++ )) do wget http://manuais.com/pdf/man0$i.pdf; done

Já neste segundo exemplo, temos duas variações ocorrendo nos nomes dos arquivos, com letras e números (manBR01.pdf, manBR02.pdf, ..., manUS01.pdf, manUS02.pdf, ...). O uso de dois laços aninhados irão gerar todas as respectivas URLs dos arquivos:

for c in BR US ES; do for (( i=1; i<=6; i++ )) do wget http://manuais.com/pdf/man"$c"0"$i".pdf; done; done

Apesar de nos exemplos ocorrerem apenas variações nos nomes dos arquivos, elas podem ocorrer em qualquer parte da URL. Bastando somente posicionar a variável no endereço.

Neste terceiro e último exemplo, temos uma página fornecendo links de diversos arquivos, não necessariamente sequenciais, sendo formatada para que somente as URLs sirvam de parâmetro para o programa wget:

for x in $(lynx -dump http://manuais.com/ | awk '{print $2}' | grep .pdf); do wget $x; done

Entendendo melhor este último exemplo. A opção -dump do programa lynx formata a página para texto puro na saída padrão e gera no final uma relação dos links encontrados. Esta relação das referências é que será utilizada. A ferramenta awk filtra e exibe somente a segunda coluna do texto, e a ferramenta grep filtra e exibe somente as linhas contendo a string especificada. Todo resultado deste texto alimentará o laço.

Nestes exemplos, todos os arquivos baixados serão salvos no diretório corrente. Os comandos deverão ficar em uma única linha, estão quebrados pois são extensos para a página. Uma longa lista poderá correr em sua tela, serão execuções sequenciais do programa wget, um downloader não-interativo para rede.

É vantajoso usar uma linha de comando ao invés de ficar clicando repetidamente em uma página, por todos os links. O tempo economizado é grande, além do conforto. Se encontrar uma página com um certo padrão nos links, não hesite, use a linha de comando!