Dan Scientia: Julho 2010
Postado por Daniel Madeira às 18:28 0 comentários Links para esta postagem
Um DVD virgem, no modelo mais comum encontrado no mercado, informa em sua embalagem uma capacidade máxima de 4,7 GB. Entretanto, os fabricantes de DVD adotam o Sistema Internacional de Unidades (SI) para indicar a capacidade.
No SI os prefixos dos valores indicam a multiplicação por potências de base dez, assim 1 KB = 1000 Bytes, 1 MB = 1000 KB e 1 GB = 1000 MB. A informação de 4,7 GB no DVD equivale à 4700000000 Bytes, seguindo o Sistema Internacional de Unidades.
Como na computação os prefixos são binários, indicando a multiplicação por potências de base dois, torna-se necessário um ajuste no valor da capacidade máxima. Na computação 1 KB = 1024 Bytes, 1 MB = 1024 KB e 1 GB = 1024 MB, então a capacidade de 4700000000 Bytes será:
4700000000 Bytes / 1024 = 4589843 KB
4589843 KB / 1024 = 4482 MB
4482 MB / 1024 = 4,38 GB
A capacidade de uma mídia DVD, informado em sua embalagem como 4,7 GB, possui realmente 4,38 GB. O mesmo cálculo deve ser feito para DVD de dupla camada, que em sua embalagem é informado 8,54 GB e na realidade possui 7,95 GB. Não é o fabricante que nos engana mas utiliza outra unidade de medida.
A capacidade pode apresentar diferenças sutis dentre diversos softwares, e as diferentes tecnologias de mídias DVD, como DVD-R, DVD+R, DVD-RW e DVD+RW também possuem capacidades ligeiramente diferentes.
Postado por Daniel Madeira às 13:40 0 comentários Links para esta postagem
Marcadores: capacidade, dvd, real
O CERT (http://www.cert.org/) é uma organização fundada pelo Departamento de Defesa dos Estados Unidos, juntamente com algumas outras agências federais civis. O CERT dedica-se em garantir treinamentos adequados sobre tecnologias usadas para conter ataques em sistemas de rede, limitar os danos e assegurar a continuidade dos serviços críticos.
O CERT mantém em seu website um repositório de softwares para uso em computação forense. O repositório contém pacotes prontos para ser instalados em uma distro Linux, contudo, atualmente só a distribuição Fedora é suportada.
Excelentes ferramentas estão disponibilizadas, entre elas o Sleuthkit/Autopsy, o dcfldd, o Volatility, o Glimpse etc. Confira nestes endereços:
http://www.cert.org/forensics/repository/
http://www.cert.org/forensics/repository/fedora/
Postado por Daniel Madeira às 17:40 0 comentários Links para esta postagem
Marcadores: forense, linux, repositório, software
Como criar imagens de partições e montá-las separadamente
Um arquivo imagem de um disco rígido ou de uma partição pode ser criado utilizando a ferramenta dd. O dd é um comando usado para copiar de um arquivo ou dispositivo sendo a entrada, para um arquivo ou dispositivo sendo a saída, gerando uma simples imagem idêntica. O dd cria uma cópia exata do arquivo ou dispositivo, incluindo o slack space dos arquivos e o espaço não alocado. Não é somente uma cópia lógica da estrutura de arquivos. O dd não adiciona informações extras em sua saída, é apenas uma cópia do fluxo de bits do início ao fim.
Para fazer uma imagem de um dispositivo de armazenamento para um arquivo, a sintaxe da linha do comando dd é semelhante ao apresentado abaixo:
# dd if=/def/sdf of=arquivoimagem.dd
No exemplo acima o operador "if" recebe o dispositivo de entrada e o operador "of" indica o arquivo de saída. Este comando serve para copiar um disquete, um pendrive, um DVD e até um disco rígido inteiro, claro que respeitando o caminho para o respectivo dispositivo. Opcionalmente pode-se acrescentar um controle para que o processo de cópia não seja interrompido caso encontre algum erro na leitura. A linha de comando ficaria assim:
# dd if=/def/sdf of=arquivoimagem.dd conv=noerror,sync
O arquivo imagem gerado, se for de um dispositivo de armazenamento com uma estrutura simples, isto é, com uma partição apenas, como é o caso de disquetes, pendrives ou DVDs, pode ser facilmente montado para acesso ao seu conteúdo. O comando para isso é semelhante ao comando como se fosse montar o próprio dispositivo, apenas acrescido de algumas opções para usar uma interface de loop:
# mount -t vfat -o ro,loop arquivoimagem.dd /mnt/pendrive
A opção "loop" indica que será utilizado um dispositivo de loop para montar o sistema de arquivos contido no arquivo imagem. O kernel das distros Linux costumam já vir com suporte para dispositivos de loop. A opção "ro" é porque o conteúdo do arquivo imagem é só para leitura.
Para desmontar, o comando é o padrão:
Para imagens de discos rígidos a situação é um pouco diferente. Um disco rígido possui diversos componentes que são um setor de boot, uma tabela de partição e uma ou várias partições. A imagem deste tipo de dispositivo também possui todos estes componentes, lembre-se, é uma cópia idêntica.
O comando de montagem não é capaz de encontrar o sistema de arquivos em uma imagem de disco rígido porque não é capaz de reconhecer a tabela de partição.
Quando a imagem é de um disco rígido que contém somente uma partição, o comando de montagem pode receber uma opção que direciona ao início da partição, pulando o setor de boot. Normalmente cada setor do disco contém 512 bytes e os primeiros 63 setores são para as informações da MBR etc., isto equivale a 32256 bytes do início até a partição. O comando de montagem para um caso deste tipo é como o exemplo abaixo:
# mount -t vfat -o ro,loop,offset=32256 arquivoimagem.dd /mnt/hd
Com o seguinte comando podemos confirmar estes valores de tamanho de setor etc:
# fdisk -lu arquivoimagem.dd
Mas é possível criar uma imagem somente da partição, que deste modo a imagem poderá ser facilmente montada como um dispositivo de loop. O comando para criar a imagem de uma partição é:
# dd if=/dev/sda1 of=imagemparticao1.dd
As partições podem ser listadas pelo comando:
Quando a imagem é de um disco rígido que contém mais de uma partição, podemos separar a imagem em partes onde cada parte vai se referir a uma única partição. Podemos utilizar para isso a mesma ferramenta dd. Cada partição estará em um arquivo imagem exclusivo e esta imagem poderá ser montada diretamente como um dispositivo de loop.
Primeiramente é preciso confirmar as posições de início e fim de cada partição. Utiliza-se para isso a ferramenta sfdisk em uma linha de comando semelhante a:
A saída deste comando é como as linhas a seguir:
Disk imagem.dd: cannot get geometry
Device  Boot    Start       End    #sectors     Id     System
imagem.dd1             57     10259       10203     83     Linux
imagem.dd2          10260    112859      102600     83     Linux
imagem.dd3         112860    178694       65835     82     Linux swap / Solaris
imagem.dd4         178695    675449      496755     83     Linux
As informações que interessam são a do início (Start) e número de setores (#sectors) para cada uma das partições. Estes valores serão utilizados nas opções "skip" e "count" do comando dd. A opção "skip" faz com que o dd pule alguns setores do início da entrada e a opção "count" faz com que o dd copie somente alguns blocos de entrada. Um exemplo de linha de comando, com o aviso de conclusão, para extrair a segunda partição do exemplo acima é apresentado abaixo:
# dd if=imagem.dd of=imagemparticao2.dd bs=512 skip=10260 count=102600
102600+0 records in
102600+0 records out
Para extrair cada uma das partições existentes no arquivo imagem é necessário executar o mesmo comando, apenas alterando os valores para "skip" e "count". Examinando este comando mais a fundo, o arquivo de entrada é o arquivo imagem de todo o disco rígido (imagem.dd), a saída é a criação de um outro arquivo imagem. O tamanho do bloco é o tamanho do setor (512 bytes), conforme mostrado pelo comando sfdisk, e cada pedaço diskdump precisa iniciar onde a partição inicia e terminar no final da partição.
Esta imagem de somente uma partição pode ser montada para leitura utilizando o mesmo comando para montar dispositivos de loop. Um exemplo de comando é o abaixo:
# mount -t ext2 -o ro,loop imagemparticao2.dd /mnt/part2/
Se for preciso, é possível descobrir qual o sistema de arquivos da partição contida na imagem. A ferramenta file, que mostra o tipo do arquivo, pode ajudar nesta informação. Um exemplo de linha de comando com sua mensagem de saída é:
# file imagemparticao2.dd
imagemparticao2.dd: Linux rev 1.0 ext2 filesystem data (mounted or unclean)
A imagem gerada pela ferramenta dd é uma réplica fiel da sua origem. Muitas ferramentas disponíveis para o sistema Linux são capazes de trabalhar com uma imagem da mesma forma que com o dispositivo original, principalmente as ferramentas forenses.
Postado por Daniel Madeira às 16:43 0 comentários Links para esta postagem
Marcadores: criar, dd, imagem, montar, partição
Você possui dez caixas vazias e deve distribuir nessas caixas 1000 moedas de tal forma que, quando solicitado, você possa retornar um número qualquer de moedas sem retirá-las das caixas. Cada caixa comporta pelo menos 1000 moedas e os valores solicitados serão todos maiores que zero.
O propósito deste problema é formar uma distribuição de moedas que permita retornar qualquer número decimal de 1 até 1000. Qualquer número poderá ser formado somando as quantidades de moedas de determinadas caixas, utilizando uma, algumas ou todas as caixas. Isto é possível se distribuir as moedas seguindo a sequencia das potências de 2. Qualquer número decimal pode ser representado no sistema de representação binário, de base 2, pois é justamente este sistema que é utilizado nos computadores. Então, se distribuir as moedas nas dez caixas colocando em cada caixa as respectivas quantidades de 1, 2, 4, 8, 16, 32, 64, 128, 256 e 489, este problema será resolvido. Observação, 489 não é o próximo valor da sequencia mas é o restante das moedas.
Postado por Daniel Madeira às 12:43 0 comentários Links para esta postagem
Marcadores: caixas, lógica, moedas, número, problema
As contas do usuário servem a diversos objetivos nos sistemas operacionais. Em primeiro lugar, elas fornecem ao sistema uma maneira de distinguir as pessoas diferentes que o usam, por razões de identificação e segurança. Cada usuário tem uma conta pessoal com um nome do usuário separado e senha. Os usuários podem definir as permissões em seus arquivos, permitindo ou restringindo o acesso de outros usuários à eles. Cada arquivo do sistema pertence a um determinado usuário que pode definir permissões para este arquivo. As contas do usuário são usadas para identificar o acesso ao sistema, apenas as pessoas com contas podem acessar a máquina. As contas também são usadas para identificar os usuários e manter registros do sistema.
Basicamente, existem dois tipos de contas. A conta do usuário comum, que utiliza o sistema e suas ferramentas, e a conta do administrador do sistema ou superusuário, que utiliza o sistema pela conta de root, onde é possível realizar as configurações do sistema.
Por não possuir restrições de segurança, a conta de root só deve ser usada para manutenções no sistema e de preferência o menor tempo possível. Para evitar permissões desnecessárias no sistema deve-se usar uma conta normal de usuário em operações comuns. Se um arquivo for executado pelo usuário root e este contiver comandos ou códigos que causem danos ao sistema, estes danos poderão ser irreparáveis.
Os usuários podem ser organizados em grupos. Os grupos de usuários são uma maneira conveniente de organizar logicamente os conjuntos de contas do usuário e permitir aos usuários compartilharem arquivos dentro do seu grupo. Isso é útil para garantir privacidade e segurança dos dados. Cada usuário possui um grupo padrão, principal, e pode pertencer a grupos suplementares.
É interessante observar que alguns grupos e usuários são criados como padrão do sistema. Uma das primeiras contas existentes no Linux é a conta de superusuário, cuja senha é digitada durante a instalação. A maioria das distribuições permite também que outras contas comuns sejam criadas durante o seu processo de instalação. Estas contas são geralmente usadas pelos daemons do sistema, que tem que acessar os arquivos no sistema através de um determinado ID diferente de root ou de uma das contas pessoais dos usuários.
Como administrador do sistema, é sua função criar e gerenciar as contas para todos os usuários em sua máquina. É uma tarefa simples e independente, na maioria dos casos, mas é importante compreender como funciona.
Toda conta no sistema tem uma entrada no arquivo /etc/passwd. Este arquivo contém entradas, uma linha por usuário, que especificam diversos atributos para cada conta. Cada entrada neste arquivo tem o mesmo formato, com campos separados por um "dois pontos":
O nome_do_usuário é uma string de caracteres exclusiva, identificando a conta. Para as contas pessoais, este é o nome com o qual o usuário se conecta. A senha é uma representação criptografada da senha do usuário. Se neste campo houver um asterisco (*), a conta está desativada, se houver uma exclamação (!), a senha está bloqueada, e se estiver vazia o usuário não possui uma senha definida. UID e GID é a representação numérica da identificação do usuário e do seu grupo padrão. O sistema gerencia os usuários e grupos com estes números, a representação no nome em caracteres alfabéticos é apenas para facilitar o uso humano do sistema. O próximo campo pode conter informações diversas sobre o usuário, como nome real, endereço etc., historicamente chamado de "gecos". O campo seguinte contém o caminho para o diretório pessoal do usuário (home) e o último contém o caminho para o arquivo executável do programa do shell.
As distribuições atuais utilizam ainda uma ferramenta de proteção de senha, o shadow, para ocultar a representação criptografada das senhas dos usuários no arquivo /etc/passwd, substituindo por um x, e então armazenando-a no arquivo /etc/shadow, que não possui permissão de leitura aos usuários comuns.
Os grupos existentes estão no arquivo /etc/group. A maioria dos grupos que estão presentes neste arquivo servem para o controle do sistema, e somente o superusuário pode modificar suas permissões e incluir ou retirar usuários destes grupos. Este arquivo também contém entradas, uma linha por grupo, com campos separados por um "dois pontos":
nome_do_grupo:senha:GID:lista,de,usuários
O formato da linha é semelhante as linhas do arquivo /etc/passwd, mas o último campo serve para conter uma lista com os nomes dos usuários que pertencem ao grupo, separados por vírgulas. Se um usuário pertencer a mais de um grupo, seu nome aparecerá em cada linha dos respectivos grupos.
Cada usuário ou grupo existente no sistema deve possuir uma ID exclusiva para sua identificação. São números inteiros e positivos. O administrador do sistema, que utiliza a conta root, possui o número zero em seu UID. As distribuições geralmente adotam números a partir de 500 para identificar os usuários pessoais, abaixo disso ficam os usuários virtuais dos daemons.
Existem várias formas de criar e manter usuários em um sistema. É importante lembrar sempre de que, para executar estas tarefas, você deve estar acessando o sistema como superusuário. Será mostrado como executar estas tarefas através da linha de comando em um prompt do shell.
Criar uma conta de usuário requer diversas etapas. Basicamente é acrescentar uma entrada no arquivo /etc/group para criar um grupo padrão para o usuário, acrescentar uma entrada no arquivo /etc/passwd para criar a conta do usuário, criar o diretório pessoal do usuário, definir os arquivos de configuração padrão (o diretório /etc/skel serve para isso) e atribuir as devidas permissões nos arquivos pessoais para o novo usuário. Após estas etapas, se desejar, basta definir a senha pessoal ao novo usuário. Felizmente, o administrador não tem que executar estas etapas manualmente pois os sistemas Linux incluem alguns programas para fazer isto.
Os programas nativos do sistema Linux são: useradd, userdel, usermod, groupadd, groupdel, groupmod e passwd. Alguns deles podem utilizar definições padrões, especificadas nos arquivos /etc/login.defs ou /etc/default/useradd, quando é omitida determinadas opções em sua linha de comando.
Algumas distribuições Linux incluem também um script chamado adduser que atua como uma interface interativa para o programa useradd, facilitando a tarefa pois evita uma linha de comando cheia de opções e parâmetros. As distros que possuem este script é a Slackware e a Debian/Ubuntu. As distros RedHat/CentOS/Fedora possuem apenas uma ligação de adduser para useradd e a distro openSUSE não possui o adduser.
O programa useradd cria um novo usuário ou atualiza as informações do usuário. Possui várias opções para a linha de comando explicadas uma a uma em sua página manual. Basicamente um exemplo de comando para criar um usuário é:
# useradd -m -U fulano
A opção -m cria o diretório pessoal, se não existir, copiando o conteúdo do diretório esqueleto (/etc/skel). A opção -U cria um grupo com o mesmo nome do usuário e o adiciona à ele, tornando o seu grupo padrão.
O programa userdel remove uma conta de usuário do sistema. Apenas uma opção é segura para aplicar, a opção -r, que remove junto o diretório pessoal do usuário. Um exemplo de comando é:
# userdel -r fulano
O programa passwd atualiza a autenticação do usuário, ou seja, a senha do usuário. Cada usuário pode utilizar este comando para alterar sua própria senha e o administrador pode alterar a senha de qualquer usuário, como no exemplo abaixo:
Os programas groupadd e groupdel, respectivamente, cria e remove um grupo. Suas linhas de comando são basicamente o executável do programa seguido do nome do grupo, bem simples.
O programa usermod tem muitas opções, da mesma forma como os outros, explicadas uma a uma em suas páginas manuais. Casos de uso bastante úteis deste programa são adicionar ou retirar um usuário de grupos suplementares. O comando a seguir adiciona o usuário ao grupo suplementar "aluno":
# usermod -a -G aluno fulano
Para remover o usuário de um grupo basta redefinir os grupos suplementares do usuário, omitindo o grupo do qual será excluído. Os comandos id ou groups podem ser úteis para mostrar os grupos que o usuário pertence:
# id -nG fulano
# groups fulano
A saída do comando acima é uma lista com todos os grupos o qual o usuário pertence. Para remover o usuário de um grupo basta omitir o nome do grupo da linha de comando. Um exemplo de comando é o seguinte:
# usermod -G users,cdrom,games fulano
Os arquivos /etc/login.defs e /etc/default/useradd contém os valores padrão para algumas das opções disponíveis nestes programas. Por exemplo a variável CREATE_HOME declarada no arquivo /etc/login.defs pode receber o valor "yes", o que automatiza a criação do diretório pessoal do usuário e desta forma não necessita a opção -m no comando useradd.
Modificar os atributos das contas de usuários e grupos é geralmente uma simples questão de editar o /etc/passwd e o /etc/group. O sistema fornece comandos como o usermod e o groupmod para fazer exatamente isto, mas pode ser mais fácil editar os arquivos manualmente, na maioria das vezes. Para editar estes arquivos é interessante utilizar os comandos vipw e vigr pois fornecem uma sessão do editor vi protegida por um controle de trava nos arquivos (lock).
Como o sistema provavelmente utiliza o shadow para proteger as senhas então é preciso sincronizar as linhas entre os arquivos /etc/passwd e /etc/group com os arquivos /etc/shadow e /etc/gshadow. Os comandos pwck e grpck servem para verificar a integridade dentre estes arquivos.
Os números para UID e GID devem ser, em essência, únicos para cada conta de usuário ou grupo. Estes programas são capazes de tratar os números ativos e atribuir valores em sequência para as novas entradas. Em uma edição manual o administrador deve tomar este cuidado com atenção.
Consulte as páginas manuais destes programas para mais informações.
Postado por Daniel Madeira às 10:50 0 comentários Links para esta postagem
Marcadores: administração, conta, criar, grupo, linux, modificar, remover, usuário
A Terra possui dois movimentos principais, a rotação e a translação. A Lua possui muitos movimentos, mas os principais são a rotação, a revolução e a translação. Todos estes movimentos giratórios acontecem em um mesmo sentido mas ao redor de eixos distintos e em inclinações diferentes.
A rotação da Terra é o movimento giratório que a Terra realiza ao redor do seu eixo, no sentido anti-horário, para um referencial observando o planeta do espaço sideral sobre o polo norte. A rotação em torno do seu eixo é responsável pelo ciclo dia e noite. O período de rotação completo, ou seja, o giro de 360 graus, é de 23 horas, 56 minutos e 4,098903691 segundos. Por causa da simultaneidade com o movimento orbital, o tempo de rotação é de 24 horas.
O eixo da Terra possui uma inclinação em relação à perpendicular ao plano definido em sua órbita. Sua inclinação é de 23 graus, 26 minutos e 21,4119 segundos e é este ângulo que define as linhas dos trópicos, pela incidência perpendicular dos raios solares nos solstícios. As estações climáticas são causadas por esta inclinação do eixo de rotação da Terra e são assinaladas oficialmente nos dias dos solstícios e nos dias dos equinócios.
Na astronomia, o solstício é o momento em que o Sol, durante seu movimento aparente na esfera celeste, atinge a maior declinação em latitude, medida a partir da linha do equador. O equinócio é um dos dois momentos em que o Sol em sua órbita aparente cruza o plano do equador celeste.
O solstício, quando ocorre no verão significa que a duração do dia é a mais longa do ano. Analogamente, quando ocorre no inverno, significa que a duração da noite é a mais longa do ano. A palavra equinócio vem do Latim, aequus (igual) e nox (noite), e significa "noites iguais", ocasiões em que o dia e a noite duram o mesmo tempo.
Como os eventos ocorrem em uma simetria inversa, nos hemisférios norte e sul, as estações climáticas também ocorrem simetricamente invertidas.
A translação é o movimento da Terra em sua órbita elíptica em torno do Sol, em um plano a 7,155 graus em relação ao plano equatorial do Sol, com uma excentricidade orbital de 0,01671123. O plano da órbita da Terra ao redor do Sol é denominado eclíptica. A posição mais próxima ao Sol, o periélio, acontece próximo do dia 3 de Janeiro e o ponto mais distante, o afélio, próximo do dia 4 de Julho. A distância entre a Terra e o Sol no periélio é de aproximadamente 147,1 milhões de quilômetros e no afélio é de aproximadamente 152,1 milhões de quilômetros.
O sentido da translação da Terra também é anti-horário, para um observador no polo norte celeste. Esse movimento é feito em uma velocidade de 29,78 quilômetros por segundo, com o período orbital de 365,256363004 dias.
O movimento de translação da Lua é o que faz em torno do Sol acompanhando a Terra. Sua duração é o de um ano, portanto aproximadamente 365 dias. A rotação da Lua é o movimento que ela faz em torno do seu próprio eixo, que está à 6,687 graus da linha perpendicular ao seu plano orbital, e com uma velocidade equatorial de 4,627 metros por segundo. No entanto o eixo de rotação da Lua não é fixo em relação as estrelas, desta forma o ângulo entre a eclíptica, o plano da órbita da Terra ao redor do Sol, e o equador lunar é sempre 1,5424 graus. A revolução é o elíptico que ela faz ao redor da Terra, com uma velocidade de 1,022 quilômetros por segundo e uma excentricidade orbital de 0,0549. Todos os movimentos da Lua estão em um mesmo sentido, em um giro anti-horário para um observador no polo norte celeste.
Os movimentos de rotação e revolução (período sideral) da Lua tem a mesma duração, um período de 27 dias, 7 horas e 43,1 minutos. Devido à igualdade nas durações desses dois movimentos a Lua nos mostra sempre a mesma face. Entretanto, como a Terra está se movendo simultaneamente ao redor do Sol, o período de revolução da Lua é levemente mais longo, entre duas aparições da mesma fase da Lua à Terra, com 29 dias, 12 horas, 44 minutos e 2,9 segundos. É o chamado período sinódico.
Como a órbita da Lua também é elíptica, a distância da Lua à Terra varia ao longo do período da revolução, o que faz com que seu tamanho aparente mude de um ciclo para outro. A distância média da Lua à Terra é de 384,399 quilômetros. Com sua maior distância, o apogeu, sendo 405,696 quilômetros e sua menor distância, o perigeu, sendo 363,104 quilômetros.
O plano da órbita da Lua em torno da Terra está inclinada 5,145 graus em relação ao plano da órbita da Terra em torno do Sol e entre 18,29 e 28,58 graus em relação ao plano do equador terrestre. Esta inclinação do plano da órbita lunar aliada à inclinação do eixo de rotação lunar faz com que a área da superfície visível seja quase 3/5 da superfície lunar total.
A ilustração abaixo mostra os sentidos dos movimentos da Terra e da Lua. A a Terra posicionada nos momentos de solstícios e equinócios, com as datas para o hemisfério sul. As figuras estão fora de escala e as excentricidades orbitais não estão representadas.