terça-feira, 8 de setembro de 2009

0day no IIS FTP - Microsoft Windows




No último dia 31/08/09 o hacker conhecido como Kingcope, divulgou no site milw0rm um exploit 0day que explora vulnerabilidades no serviço IIS FTP do windows server.
De acordo com a Microsoft as versões afetadas vão desde windows 2000 até 2008, passando por XP e Vista. Até o presente momento não existe correção para esta falha, porém a microsoft "recomenda" alguns "workarounds"(vulgo GATO):
1º Tire o serviço do ar se não utiliza-lo x);
2º Remova a permissão de escrita no diretório do FTP para usuários anônimos;
3º Não permita acesso de usuários anônimos (detalhe, por default o serviço permite);
4º Modifique as permissões do drive NTFS para não permitir a criação de diretórios;

Um vídeo exemplificando o ataque pode ser visto no link abaixo:
http://www.offensive-security.com/videos/microsoft-ftp-server-remote-exploit/msftp.html

Nos próximos posts, irei descrever como uma técnica(Single Packet Authorization) pode ser útil para que o ataque por um exploit 0day não tenha sucesso!!! =D

Links:

http://www.milw0rm.com/exploits/9559
http://www.microsoft.com/technet/security/advisory/975191.mspx
http://isc.sans.org/diary.html?storyid=7063

sexta-feira, 4 de setembro de 2009

Criando um Repositório CentOS




- Requisitos

* Apache (httpd)
* Rsync (rsync)
* Createrepo (createrepo)
* Espaço em disco (80GB)

- Configurando o Repositório
- Criação dos diretórios

Para cada versão do CentOS, um diretório será criado para servir de repositório. Obedecendo a seguinte lógica:

* /var/www/html/centos/VERSÃO/{os,updates}/{i386,x86_64}

Onde:

* VERSÃO → corresponde a versão do CentOS (4.4, 5, 5.2,…)
* os → corresponde ao diretório para onde serão copiados todos os CDs/DVDs da versão correspondente (diretório base)
* updates → corresponde ao diretório para onde serão sincronizados todas as atualizações do CentOS
* i386 → arquitetura 32 bits
* x86_64 → arquitetura 64 bits

Exemplos:

32 bits:

* mkdir /var/www/html/centos/5/os/i386
* mkdir /var/www/html/centos/5/updates/i386

64 bits:

* mkdir /var/www/html/centos/5/os/x86_64
* mkdir /var/www/html/centos/5/updates/x86_64

- Criando o repositório Base

O repositório base, localizado dentro do diretório “os”, é o local onde serão copiados os CDs/DVDs da versão correspondente. Por exemplo, na versão 5:

* cp -R /CDROM /var/www/html/centos/5/os/i386/

Após a criação do repositório base, devemos executar o comando createrepo que cria informações de repositório para oferecer suporte a novas versões do yum (e possivelmente para repositórios de outros programas clientes). O comando createrepo armazena estes dados numa pasta chamada repodata.

* createrepo /var/www/html/centos/5/os/i386/

- Sincronizando o Repositório

A sincronização do repositório, deve ser feita com algum Mirror oficial do CentOS, garantindo assim uma fonte confiável. Os mirrors disponíveis podem ser localizados neste link:

* http://www.centos.org/modules/tinycontent/index.php?id=30

Escolha um mirror que tenha um servidor rsync para a sincronização (ex.:kernel.org , stanford.edu,…). Após escolher, sincronize com o comando abaixo:

* rsync -avrt rsync://mirrors.kernel.org/centos/5/updates/i386/ /var/www/html/centos/5/updates/i386/

Obs1: Este passo, quando feito pela 1º vez tende a demorar bastante, visto que o rsync vai sincronizar seu servidor atual (vazio) com a base atualizada, tendo que fazer o download de todos os pacotes. Da 2º vez em diante, o rsync faz a adição/remoção apenas das diferenças, o que tende a ser muito mais rápido

Obs2: É recomendável colocar o comando descrito acima no crontab, para que em um intervalo de tempo programável ele seja executado.

Obs3: Certifique-se que a porta 22, que é utilizada pelo rsync, está aberta no firewall. Caso contrário a sincronização irá falhar.

Após este passo, o seu servidor de repositório CentOS já está em funcionamento.
Configurando o Cliente

A configuração do cliente se dá através da edição de um arquivo. Edite o arquivo CentOS-Base.repo e coloque apenas o conteúdo abaixo:

[base]

name=CentOS-$releasever - Base

baseurl=http://IP_DO_SERVIDOR/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

##############################################################

[update]

name=CentOS-$releasever - Updates

baseurl=http://IP_DO_SERVIDOR/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

- Informações Úteis

http://www.centos.org/modules/tinycontent/index.php?id=30

http://mirror-status.centos.org/

http://yum.baseurl.org/

http://createrepo.baseurl.org/

terça-feira, 14 de julho de 2009

Criptografia Quântica




Este foi um dos temas que estava na minha lista de possíveis temas para a monografia da pós em segurança da informação. Apesar de não ter sido escolhido, devido a falta de documentação, vale a pena um post no blog sobre o futuro da criptografia e de toda a computação.
A criptografia clássica, baseada na matemática, utiliza a fatoração de números primos para a construção dos seus problemas. Sabe­-se que todo e qualquer problema baseado na criptografia clássica é vulnerável a um tipo de ataque, a força bruta. No entanto, pode acontecer o seguinte: os recursos gastos para a resolução de um problema, podem ser maiores do que a informação ali contida. Isto acontece devido ao poder computacional atual, que não consegue em tempo hábil resolver tais problemas.
Com o advento da computação quântica, os sistemas criptográficos baseados na criptografia clássica estão prestes a se tornarem obsoletos. Isto deve­-se ao altissímo poder computacional dos computadores quânticos, que conseguirão resolver problemas matemáticos em um intervalo de tempo muito curto. Além disso, uma linha de pesquisa conhecida como criptografia quântica, está sendo considerada como a criptografia inquebrável, até mesmo pelos computadores quânticos.
A criptografia quântica, que tem seus princípios básicos na mecânica quântica, é uma linha de estudo que visa aperfeiçoar a criptografia clássica atual, utilizando a natureza quântica dos fótons para a distribuição segura de chaves em um meio inseguro (Internet).

quarta-feira, 1 de julho de 2009

FISL 10



Indiscutivelmente o melhor evento de Software Livre do Brasil. O FISL (Fórum Internacional de Software Livre) esse ano esteve na sua 10º edição, e essa foi minha segunda participação. Pra quem nunca foi, fica o convite para o próximo ano =D

sexta-feira, 19 de junho de 2009

Single Packet Authorization - III ENSOL

Gostaria de agradecer a todos que compareceram na palestra que aconteceu hoje pela manhã no III ENSOL.




O vídeo da palestra está hospedado no seguinte link:
http://www.flavioribeiro.com/SPA/SinglePacketAutorization.avi

Valeu ai smurf pela hospedagem =D

quarta-feira, 15 de abril de 2009

Como adicionar um storage externo e compartilhado em máquinas virtuais no VMWare ESXi

Este post serve para aqueles que estão utilizando o VMWare ESXi, e necessitam que suas máquinas virtuais tenham acesso a storages externos(Sun, HP, FreeNAS,...) e compartilhados. Antes de configurar o acesso é necessário configurar toda a estrutura necessária para que o hipervisor tenha acesso ao storage, como por exemplo:
- instalar a interface HBA no Hipervisor
- Conectar a Fibra na interface HBA e no Storage
- Criar e configurar o acesso dessa HBA as LUNs no storage
Feito isso, podemos partir para a configuração nas máquinas virtuais.
Depois de quebrar muito a cabeça, pude verificar que o processo é muito simples. Nas configurações da máquina virtual que terá acesso ao storage, você deve adicionar um novo controlador SCSI e marcá-lo como físico, como a imagem abaixo.

Feito isso, crie um novo disco, setando a LUN do storage que você deseja, e coloque como controlador SCSI o criado no passo anterior.

sexta-feira, 3 de abril de 2009

Integrando o Samba com o LDAP


Faz um tempo que estou com este post guardado, e agora resolvi colocar aqui pra esclarecer melhor as dúvidas sobre a integração do Samba com o LDAP. Não porque seja difícil e trabalhoso, mas sim por falta de organização da minha parte =D.


Um dos principais problemas que os administradores de rede (Linux) enfretam, é ter que gerenciar todas as informações (login e password) relativas a usuários de uma
maneira descentralizada, por exemplo: um novo usuário chega na sua empresa e então começa a peregrinação dos admininstradores, tendo que percorrer todos os serviços(mail, proxy, domínio,...) que serão alocados para este usuário e criar contas separadamente para cada serviço.
Derivando do X.500, o LDAP (Lightweight Directory Access Protocol) surge como uma alternativa para o problema citado no exemplo acima. Existem diversas aplicações para o LDAP, dentre as mais conhecidas estão o OpenLDAP e o Active Directory.

Criei um cenário, que está exemplificado na figura abaixo:




Neste cenário utilizei um servidor Debian lenny, com o OpenLDAP instalado, além do phpLDAPadmin, que é uma interface WEB de gerenciamento para a base LDAP. No lado cliente utilizei um Windows 2000 professional, que irá acessar os compartilhamentos concedidos pelo Samba.

Os pacotes instalados (via apt-get) no servidor foram:

    • slapd
    • lpad-util
    • libdb4.3
    • libdb4.3-dev
    • libdb4.3-util
    • phpldapadmin
    • samba
    • smbldap-tools
    • smbclient
    • smbfs


Após a instalação, edite o arquivo /etc/ldap/slapd.confda sequinte maneira:

#Arquivos Schema

include /etc/ldap/schema/core.schema

include /etc/ldap/schema/cosine.schema

include /etc/ldap/schema/nis.schema

include /etc/ldap/schema/inetorgperson.schema

include /etc/ldap/schema/samba.schema #obtido junto ao tarball do samba

#Parâmetros de log

loglevel 0

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd/slapd.args

# Where the dynamically loaded modules are stored

modulepath /usr/lib/ldap

moduleload back_bdb

#Parâmetros do Banco de Dados

database bdb

sizelimit 500

tool-threads 1

backend bdb

checkpoint 512 30

#Raiz da Arvore

suffix "dc=empresa,dc=com"

#Administrador do domínio

rootdn "cn=administrador,dc=empresa,dc=com"

rootpw "senha123"

Após a configuração do slapd.conf vamos criar os arquivos ldifs, que é um modelo de arquivo para a inserção de dados na árvore de diretório. Neste exemplo iremos criar 3 arquivos:

  • Domínio
  • Equipes
  • Usuários

- dominio.ldif:

dn: dc=empresa,dc=com

objectClass: top

objectClass: dcObject

objectClass: organization

dc: empresa

o: empresa

- equipe.ldif:

dn: ou=atendimento,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: atendimento

dn: ou=redes,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: redes

dn: ou=seguranca,dc=empresa,dc=empresa

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: seguranca

dn: ou=bd,dc=empresa,dc=com

objectClass: top

objectClass: organizationalunit

objectClass: dcObject

dc: empresa

ou: bd

- usuarios.ldif:

dn: uid=joao,ou=atendimento,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: joao

sn: Carneiro

mail: joao@empresa.com

telephonenumber: 3157-4403

uid: joao

userPassword: senha123

dn: uid=andre,ou=redes,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: andre

sn: Silva

mail: andre@empresa.com

telephonenumber: 3467-9251

uid: andre

userPassword: senha123

dn: uid=maria,ou=seguranca,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: maria

sn: Villas

mail: maria@empresa.com

telephonenumber: 3512-0245

uid: maria

userPassword: senha123

dn: uid=marcos,ou=bd,dc=empresa,dc=com

objectClass: top

objectClass: person

objectClass: inetorgperson

cn: marcos

sn: Nobrega

mail: marcos@empresa.com

telephonenumber: 3234-7640

uid: marcos

userPassword: senha123

Após criar os arquivos, o próximo passo é adicionar a base LDAP. Adicione os arquivos com os seguintes comandos:

# ldapadd -f dominio.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

# ldapadd -f equipes.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

#ldapadd -f usuarios.ldif -x -D cn=administrador,dc=suporte,dc=gti -W

obs: Parâmentros

  • -f : indica qual arquivo será incluído no diretório
  • -x : informa que irá utilizar autenticação simples
  • -D : informa o dn
  • -W : invoca um prompt pedindo a digitação da senha

Para visualizar a árvore criada, utilize o phpldapadmin. Para isso digite: http://ipdoservidorldap/phpldapadmin .

O Próximo passo é configurar o samba, para integrar-se ao LDAP. Edite o arquivo smb.conf, e deixe como abaixo:

[global]

workgroup = ldap

security = user

encrypt passwords = yes

#Configuração para a integração com o LDAP

ldap admin dn="cn=administrador,dc=empresa,dc=com"

passdb backend = ldapsam:ldap://127.0.0.1/

ldap suffix = "dc=suporte,dc=gti"

ldap ssl = off

[compart]

comment = Compartilhamento na máquina ldap/samba

writeable = yes

path = /arquivos

public = yes

browseable = yes

Feito isso, devemos configurar o cliente Windows seguindo os passos abaixo:

  • Colocar a máquina Windows 2000 no mesmo grupo de trabalho do samba (variável workgroup)
  • Criar os usuários no servidor debian(comando adduser).

Obs: este passo só será necessário porque o samba necessita de contas criadas no servidor.

  • Remova o arquivo do samba “secrets.tdb”
  • Digite o comando:

# smbpasswd -w (senha do admin-ldap)

  • Coloque os usuário criados no samba (passo anterior) com o comando

# smbpasswd -a usuario (a partir deste momento os usuários serão inseridos no LDAP)

  • Reinicie o samba:

# /etc/init.d/samba restart

  • Na máquina windows faça:

iniciar(botao direito) → explorar → meus locais de rede → computadores próximos a mim → escolha o servidor samba.

  • Informe um usuário/senha criado anteriormente no servidor samba.

Obs: Configure as permissões para os usuários acessarem os compartilhamentos criados.