Archives for maio, 2008

Tutorial write a multithread chat in Python – update

Posted on mai 30, 2008 under Python | Comments are off

This is my first post in English, sorry any is grammatical errors !!!

My intention is write a little tutorial in Python showing how to make an oriented objects chat server using sockets and threads.

A skeleton of the chat server is basically given by the following loop:

  1. Wait for client connection
  2. After the client to be connected start a thread to each new client
  3. Get the user name and nickname
  4. Entry in a loop to read the socket if exists new messages send all clients except client who generated the message

Read the rest of this entry »

Removendo vírus por NFS

Posted on mai 28, 2008 under Segurança | 2 Comentários

Os vírus estão cada vez mais inteligentes, ele se disfarçam de arquivos que o usuário usa seguidamente como por exemplo: relatório.doc.exe. Os usuários atucanados de serviço acabam clicando e contaminado cada vez mais a máquina. Se os arquivos contaminados tiverem os mesmos nomes de arquivos protegidos do windows, não será possível removê-los, como por exemplo o arquivo c:\windows\system\scanreg.exe.

Uma solução boa que encontrei para resolver este problema é escanear a máquina infectada (windows), através do linux, o qual possui um excelente antivírus o CLAMAV, que também possui uma versão para windows o CLAWIN. Este antivírus é muito eficiente e remove até adwares.

Nesse pequeno tutorial mostrarei como escanear uma maquina windows infectada com vírus através do linux com o NFS(Network FileSystem).

O primeiro passo é iniciar a máquina windows com um cd do Kurumin 2007, eu prefiro utilizar como opção de boot knoppix 2, a qual inicia em modo texto, tornando mais rápido a inicialização.

Após inicializado o devemos desmontar o /dev/hda1 mas antes a swap deve ser desabilitada com o comando abaixo:

 swapoff -a
 umount /dev/hda1

Se a partição do windows for fat32, deve ser montada com o seguinte comando:


mount /dev/hda1 /mnt/hda1 -oumask=0,dmask=0

Com umask=0 e dmask=0 todos os usuários tem permissão de leitura e escrita.

Se a partição for ntfs


ntfs-3g -oumask=0,silent,locale=pt_BR.iso88591 /dev/hda1 /mnt/hda1

Agora devemos configurar o nfs informando o diretório que será exportado e o ip da máquina que pode montar remotamente este diretório.

vim /etc/exports
#diretório ipremoto(opções)
#exemplo
#exporta o diretório /mnt/hda1 para toda a rede 192.168.1.0 com permissão de leitura e escrita
/mnt/hda1 192.168.1.*(rw)

Após o exports configurado podemos iniciar o servidor nfs


nfs-server-ativar

Esta máquina pega o ip através de dhcp então devemos descobrir o ip que a maquina recebeu com o comando:


ifconfig eth0

Neste exemplo o ip é 192.168.1.200, iremos utiliza-lo para montar o diretório.

Agora o nfs estará exportando o diretório /mnt/hda1 devemos montá-lo na máquina que possui o clamav instalado e atualizado.

Opto por esta solução devido a minha maquina estar sempre com o clamav atualizado não utilizando os recursos da rede para baixar atualizações.

Caso você não possui o clamav instalado mostro um exemplo de como instalar no gentoo:


emerge -av clamav

Atualizar o antivirus


freshclam

Na máquina com o clamav devemos rodar os seguintes comandos:

mkdir /mnt/tmp
mount 192.168.1.200:/mnt/hda1 /mnt/tmp

Você também pode usar sshfs para montar o diretório remoto conforme mostrado neste post Montando SSHFS

Passar o antivírus em modo recursivo, informar quando encontrar um vírus e removê-lo

clamscan -ri --remove --unzip=/usr/bin/unzip /mnt/temp

Estou usando esta solução quando o antivírus instalado na maquina não resolve o problema, o clamav encontra e remove uma grande quantidade de vírus, sendo uma ótima solução de antivírus gratuito.

Comente!!Incentivem !!!

Deletando arquivos para sempre

Posted on mai 25, 2008 under Dicas Linux, Segurança | 5 Comentários

Deletar um arquivo com o comando rm, não apaga ele definitivamente do hd,pendrive ou diskette. O comando rm não é suficiente para deletar arquivos com conteúdos confidenciais pois o arquivo deletado pode ser recuperado com ferramentas de recuperação de dados.

Para deletar completamente o arquivo use bcwipe. Este comando sobrescreve repetidamente com padrões especiais o arquivo que será deletado. No modo normal, 35 passadas são usadas sendo 8 randômicas.

Exemplos de uso:

Remover a pasta src de modo recursivo

 bcwipe -rvf /src

Apagar o HD inteiro com 7-passadas do padrão DOD

bcwipe -bvmd /dev/hda

Neste post é mostrado como usar o bcwipe no linux, mas esta ferramenta também existe para windows.

Montando SSH com SSHFS

Posted on mai 23, 2008 under Dicas Linux, Segurança | 2 Comentários

Olá Pessoal.

Seguidamente nas servidores onde presto suporte é necessário transferir arquivos entre a minha máquina e o servidor. Até então utilizava o comando scp para transferir arquivos o qual funciona super bem mas as vezes demora um pouco para elaborar o comando, informar senha, …

Então descobri o SSHFS(Secure Shell FileSystem), implemetado em FUSE(Filesystem in Userspace). Com o sshfs pode montar um diretório remoto, e trabalhar neste diretório de forma transparente.

Requisitos para Instalação no Cliente:

No gentoo
Instalar o fuse:

 emerge sys-fs/fuse

Instalando o ssh-fuse:

emerge sys-fs/sshfs-fuse

Carregando o módulo:

modprobe fuse

Montando o diretório remoto através de SSH em um ponto de montagem local:

sshfs usuárioremoto@hostremoto:/caminho/para/diretorio_remoto pontodeMontagem_local

ou

# sshfs usuárioremoto@hostremoto:/caminho/para/diretorio_remoto pontodeMontagem_local
 -o allow_other

Para permitir que outros usuários tenham acesso.

Para Desmontar:

fusermount -u pontodeMontagem_local

Tenho usado este recurso a bastante tempo, o melhor é que a transferência de arquivos com SSHFS
é segura.

Buraco negro na Internet ?

Posted on mai 23, 2008 under Novidades | 2 Comentários

Você já precisou acessar seu página favorita e ela estava fora do ar, ou o servidor estava em manutenção. Contudo a causa pode algo mais misterioso. Vem acontecendo a algum tempo um efeito semelhante a um buraco negro na internet e está sendo pesquisado pela universidade de washington através de um projeto chamado de Hubble que teve seu inicio em 17 de setembro de 2007, operando continuamente desde então. Até o momento já encontrou 986,194 buracos negros.

Este fenômeno ocorre da seguinte forma: Num determinado momento, uma porção do tráfego Internet, acaba caindo em “buracos negros”. Há situações em que existem caminhos para o destino, mas as mensagens – um pedido para visitar um site na Web, ou envio de e-mail – se perdem pelo caminho. O projeto Hubble monitora e mostra um mapa com os buracos negros e o tempo de duração. O mapa pode ser acessado aqui.

Fonte:http://www.dailytech.com

Segurança Linux Dicas básicas – Permissão Arquivos – parte 1

Posted on mai 18, 2008 under C, Dicas Linux, Segurança | 6 Comentários

Tenho a intenção de fazer uma série de artigos sobre dicas básicas de segurança em Linux. Muitas coisas passam despercebidas, às vezes nos preocupamos com as regras do firewall, os serviços que estão rodando mas nos esquecemos do básico.

Você já deve ter ouvido falar sobre SUID (Set User ID) Bit), SGID (Set Group ID). Mas qual a função destes atributos especiais ?

SUID

Quando executamos um programa o sistema operacional aloca recursos baseado no usuário que está executando o processo. Quando o SUID bit, é setado por exemplo para o usuário “root” o sistema irá permitir que um usuário comum execute funções não autorizadas. Muitos buffer overflow exploits são o resultado de programas SUID.

Arquivos com SUID: -rwsr-xr-x

SGID

Este atributo define as permissões para o grupo, funciona do mesmo modo que o SUID, mas a diferença é que as permissões tem efeito em diretórios. Então todos os arquivos e programas que estão dentro do diretório, quando executados ou editados por um usuário comum o sistema irá executar ou editar como se fosse o dono do arquivo.

Exemplo de exploit escrito em C

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

int main()
{
setgid(0); setuid(0);
execl("/bin/sh","sh",0);
}

Com este código acima com SUID habilitado é possível conseguir acesso de root.


root@localhost ~ # gcc -o exploit exploit.c
root@localhost ~ # chown root exploit
root@localhost ~ # chmod u+s exploit
root@localhost ~ # exit
marlon@localhost ~ $ ./exploit
sh-3.2# id
uid=0(root) gid=0(root) grupos=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
sh-3.2#


!!! Não me responsabilizo por uso indevido deste código, a divulgação é somente para conhecimento e prevenção!!!

Com o comando abaixo todos os programas com SUID e SGID são escritos no arquivo suidfile.txt

# /usr/bin/find / -type f \( -perm -004000 -o -perm -002000 \)  -exec ls -lg {} \; 2>/dev/null >suidfiles.txt

Executando o comando acima no gentoo retorna a seguinte lista.


#  less suidfiles.txt

/bin/su
/bin/ping
/bin/mount
/bin/umount
/var/qmail/bin/qmail-queue
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/crontab
/usr/bin/chage
/usr/bin/expiry
/usr/bin/sperl5.6.1
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/suidperl
/usr/lib/misc/pt_chown
/usr/sbin/unix_chkpwd
/usr/sbin/traceroute
/usr/sbin/pwdb_chkpwd

Para remover o SUID executa-se o comando chmod -s em cada arquivo.

Eu removi quase todos deixando somente o necessário: su, gpasswd, qmail-queue, unix_chkpwd, pwdb_chkpwd.

Se estiver usando X, a lista com certeza será maior pois necessita de acesso mais elevado.

Referências:

http://tldp.org/HOWTO/Security-HOWTO/file-security.html

http://www.gentoo.org/doc/pt_br/security/security-handbook.xml?part=1&chap=6

http://www.homepage.montana.edu/~unixuser/051602/SUID.html

http://www.hoobie.net/security/exploits/index.html

Comentem, Incentivem !!!!!!!!!

Transfêrencia de arquivos pela porta Serial em C

Posted on mai 17, 2008 under C | 4 Comentários

Desenvolvi um protocolo de transferência de arquivos em C linux, utilizando a porta serial. Este protocolo tem as seguintes características:

  • Cabeçalhos de Controle
  • Controle de Següência;
  • Controle de CRC 16 Bits;
  • Caso o pacote chegue no receptor com erro de CRC é solicitado o reenvio do pacote;
  • Mostra um barra de progresso sobre a transferência de arquivo.

Para compilar:

gcc -o protocol protocol-1.2.5.c

Executar transmissor:

./protocol -d /dev/ttyS0 -t

No receptor

./protocol -d /dev/ttyS0 -r

protocol-15>>>Código Fonte<<

Desenvolvido por:
Marlon Petry
Gerson Tomas Schmitt

HeapSort C

Posted on mai 17, 2008 under C | No Comment

Implementação do algortimo Heapsort, mostrando o pior caso, melhor caso e caso médio e o número de trocas.

heapdebug2

Tutorial Postfix Iniciante

Posted on mai 17, 2008 under Tutoriais | No Comment

Este é um tutorial sobre postfix bem básico não implementamos verificação de spam, antivírus.

Não é aconselhável colocar um servidor no ar com estas configurações.

Postfix é um MTA(Mail Transfer Agent), sendo uma
alternativa ou sendmail, qmail e outros. Tem como vantagens
estabilidade, seguranca e fácil configuraçao

Neste tutorial mostraremos como compilar e configurar o servidor
de email Postfix, nas suas configurações básicas:

1) Passo realizar o download da ultima release estavel

wget ftp://ftp.pucpr.br/postfix/official/postfix-2.4.5.tar.gz

2) Após concluído o download devemos realizar um backup dos
arquivos de configuraçãoo do sendmail, se estiver instalado

mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF

mv /usr/bin/newaliases /usr/bin/newaliases.OFF

mv /usr/bin/mailq /usr/bin/mailq.OFF

chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF /usr/bin/mailq.OFF

3)Mover e descompactar os fontes


mv postfix-2.4.5.tar.gz /usr/src
cd /usr/src
tar -xzvf postfix-2.4.5.tar.gz

4)Como padrão no Linux sempre acompanha os fontes o arquivo
INSTALL que mostra detalhes da compilação do pacote

less INSTALL
make -f Makefile.init makefiles
make

Antes de executar o make install devemos criar o usuário postfix

Acrescentar a seguinte linha no passwd

vim /etc/passwd
postfix:*:12345:12345:postfix:/no/where:/no/shell

Acrescentar o grupo

#vim /etc/group
postfix:*:12345:
postdrop:*:54321:

6) Ao executar o make install será solicitado os caminhos do servidor de email neste caso usaremos os padrões do postfix

make install

install_root: [/]tempdir: o diretório de origem da instalação
config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newalises_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [/var/www/htdocs/postfix/]
manpage_directory: [/usr/local/man]

readme_directory: [/etc/postfix]

A partir daqui o postfix já esta compilado e instalado só falta configurar

vim  /etc/postfix/main.cf

myhostname = localhost
mydomain = localdomain.com.br
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain

#Parametro para configurar as redes que serao aceitas no servido de email
mynetworks = 127.0.0.0/8

#Configuração para restricao de envio de email

smtpd_recipient_restrictions = permit_mynetworks,check_client_access,hash:/etc/postfix/client_access
check_relay_domains
#Local de entrega dos emails
mail_spool_directory = /var/spool/mail

Após realizada as configurações podemos verificar se existe algum erro de configuração com o comando

postfix check

Não havendo erros podemos iniciar o servidor de email

postfix start

Para verificar o funcionamento podemos executar o comando

netstat -vantu

Este comando mostra todos as conexoes tcp e udp na maquina devemos procurar pela porta 25

Testando o servidor

telnet 127.0.0.1 25

helo  a resposta deve ser a seguinte 250 OK

mail from:
aresposta deve ser a seguinte 250 OK - mail from

rcpt to:
a resposta deve ser a seguinte 250 OK - Recipient

data
a resposta deve ser a seguinte 354 Send data. Finalizar com
.

quit

OK servidor testado, verifique se recebeu a mensagem

Outra forma de verificar o funcionamento é através do logs

tail -f /var/logs/mail/info

Compactando arquivos com C

Posted on mai 17, 2008 under C | No Comment

O Algortimo de Huffman tem a função de comprimir arquivos baseados em caracteres, a compressão é feita através de uma árvore binária onde são adicionados os caracteres encontrados no texto, o caracter que mais aparecer no texto recebe o menor código e o que aparecer menos vezes recebe o código maior. Os códigos atribuídos a cada caracter numca podem passar de 1 byte.

Em anexo um exemplo do algoritmo de Huffman utilizando uma árvore binária estática.

Desenvolvido em Linux, gcc. Dentro do arquivo mostra como compilar

huff_marlon