SecGroup

Segurança, Tecnologia, Programação, Cracking e Download’s.

[Patcheando]WebCopier

Escrito por unn4m3D_BR em Maio 11, 2008

Hi .. !

E ae moçada .. nossa gente, sofri com nags mais acho que agora ..
to pegando a manha delas .. ;)

Aqui um tutozinho de como retirar a nag desse softzinho ..
muito útil na hora de baixar sites inteiros .. ;D

Video:
-Link: http://www.box.net/shared/ntw5cci4go

Software:
-Link:
http://baixaki.ig.com.br/download/WebCopier.htm

Espero que gostem ..

bjxx ..

Enviado em Engenharia Reversa | Nenhum comentário »

Colt7r: Despedida

Escrito por colt7r em Março 30, 2008

A hora da despedida é sempre ruim. Por um ano, desde a criação do nick ‘Colt7r’ até hoje, enfrentei muita coisa por aqui.
Agradeço a aqueles que me ajudaram, desde abril de 2007 até hoje. Me lembro de cada momento como se fosse hoje. Não cresci nessa ‘carreira’ sem esforço, troquei finais de semana, madrugadas de sono pela busca de conhecimento. Os meus melhores amigos, posso dizer assim, conheci no IRC, desde a Virtualife, LCIRC, Freenode, CrewChat, Fullnetwork, até a rede atual, a ChatBR. Naturalmente, com a criação de amizades, cria-se inimizades também. Me despeço dos amigos do site ForceHacker.com (claro, o forum foi essencial na minha ‘formação’), com um forte abraço e sorrisos, finalmente, poderei deixa-los em paz (acho que não né?). A razão dessa despedida? Escolhas. A vida escolar requer tempo, dedicação e sacrifício. Quando você decide algo, você procura preencher os requisitos. Essa despedida é apenas um sacrifício de muitos que irão por vir. Agradeço
ao pessoal do #PuCorp, #Red Eye, #ir4dex, #Collaps3 pela companhia durante todo esse tempo. Não irei citar nomes para não cometer injustiças. Enfrentem os seus medos que a felicidade será uma consequência.
SLuG: Continue sendo a pessoa dedicada que você é, com isso terá um futuro promissor.
LEVIATHAN: Hmm, o Black Metaller 666 From Tha Hell que muito me apoiou nas horas de dificuldade.
mVk: Nunca consegui escrever o seu nick todo, M4v3ricK, acho que é isso, obrigado pela oportunidade
de entrar no Red Eye.
Zakix: Seu gringo fdp, não vou escrever nada pra você sabe porque? Você não vai entender mesmo!
bluckbuobleoo (dudu): O único Playboy que eu considero, felicidades.
an0mix: Baiano comedor de vatapá, sai da frente desse pc e vai catar mulher.
Quel_: Algum dia você virá pra Fortaleza (realizar seu sonho) e ficar na pousada do tio Colt7r (minha casa)
_Caahhh_: Obrigado por estar comigo altas horas da madruga, bons tempos né.
_sp4rk/VonNaturAustreve: Outro BM666FTH (ver LEVIADÃO, ops Leviathan) muito gente boa, não se decide quanto ao nick.
fvox: Emo desgraçado.
Ap0c4lips3: O pop do IRC.
ANAL_Inv4der: Negro Presidiário, espero que saia logo da cadeia do DEIC.
n00F: Paraíba maconheiro, saia logo da prisão, ok?
kkavit: Outro negro presidiário, acho que não sai tão cedo.
Aos outros, espero que não fiquem com raiva, são muitas pessoas para lembrar (verdade :)
Hasta la vitória, Siempre, amigos.

Colt7r.

Enviado em Outros | 13 Comentários »

Segurança no Slackware

Escrito por th1nk3r em Março 29, 2008

 

Segurança no slackware

By Cláudio Borges aka but3k4



Segurança

Segurança é algo que todo admin deveria ter como prioridade. Falhas podem existir em todo sistema, já que os mesmos são feitos por programadores e esses programadores são humanos e humanos são falíveis.

Muitos pensam que por estar usando linux ou bsd, estão seguros. A segurança é feita pelo administrador. Lógico que existem sistemas cujas instalações default os torna mais vulneráveis que outros.

Definir uma boa política de segurança para seus servidores nunca é demais. Por exemplo: Saber quem terá acesso físico a eles, quais usuários terão ou não login, definição de senhas e backup são alguns ítens que devem constar na política de segurança.

Colocar uma senha na BIOS da máquina é primordial, assim caso alguém consiga acesso físico ao servidor e inicializar por um live-cd por exemplo, não conseguirá alterar a ordem de boot que foi estabelecida.

Demonstraremos no decorrer deste artigo como deixar seu servidor slackware um pouco mais seguro.

particionamento

Definir um correto sistema de partições, além de ser esteticamente melhor, traz uma série de benefícios, dentre eles: Poder definir o que pode ou não ser feito em cada partição, dizer quanto de espaço cada uma poderá ter, dentre outras coisas.

opções

Algumas opções para usar no fstab.

nosuid

Caso algum arquivo tenha o bit suid (set-user-identifier) ou sgid (set-group-identifier), o mesmo será tratado como um arquivo normal.

noexec

Não aceita a execução direta de binários.

nodev

Não interpreta caracteres ou dispositivos especiais.

dicas para um bom particionamento

Algumas dicas para um particionamento inteligente:

  • Antes de particionar, ter em mente qual a finalidade da máquina. Se for um servidor de emails, a partição onde vão ficar os emails tem que ser separada. Se for um servidor web, definir a partição dos vhosts (geralmente usa-se o /home para isso). E daí por diante. Vamos falar de algumas delas:
  • /boot - Caso você crie uma partição /boot (depende muito do administrador), monte-a com ro,nosuid,noexec,nodev. Pois esta partição só será lida na hora do boot.
  • /tmp - Extremamente necessária, pois é aqui e no /var/tmp onde muitos exploits gostam de ser compilados. use nosuid,noexec,nodev.
  • /home - Caso vá utilizar muito espaço no seu /home, coloque-o em uma partição separada. As opções definidas aqui dependem muito para o quê a máquina será usada. Boas opções são nodev,nosuid,noexec.
  • /usr - Como o diretório /usr é onde são instalado os programas, essa partição sofrerá muita leitura e quase nada de gravação, salvo atualizações, compilação de kernel ou se você instala programas no /usr/local. Use ro,nodev quando for montar essa partição.
  • /var - O diretório /var sofre muita gravação e deixá-lo em uma partição separada não é nada mal. Boas opções são nodev,nosuid.

exemplo de fstab

  #device         mount point     fs              fs options                      dump    fsck  /dev/sda1       swap            swap            defaults                        0       0/dev/sda2       /               ext3            defaults                        1       1

/dev/sda3       /tmp            ext3            defaults,nosuid,noexec,nodev    1       2

/dev/sda5       /usr            ext3            defaults,ro,nodev               1       2

/dev/sda6       /var            ext3            defaults,nodev                  1       2

/dev/cdrom      /mnt/cdrom      auto            noauto,owner,ro,nosuid,nodev    0       0

devpts          /dev/pts        devpts          gid=5,mode=620                  0       0

proc            /proc           proc            defaults                        0       0

Repare que o /usr está com as opções ro,nodev, então caso seja necessário deixá-la em rw, use o comando:

  mount -o remount,rw /usr

Após fazer as alterações que você deseja, volte-a para ro,nodev:

  mount -o remount,ro,nodev /usr

Não esqueça de remover o /var/tmp e fazer um link do /tmp para ele.

senhas

Definir uma boa senha nem sempre é uma tarefa fácil. Uma boa idéia (não é a caninha 51) é usar caracteres especiais tais como !,@,#,$,% misturados com letras maiúsculas, minúsculas e números. Assim mesmo que seja uma palavra fácil, ela se torna bem difícil de adivinhar.

Como exemplo, vamos usar as palavras “slackware linux”. Parece ser uma senha simples mas se usarmos números e caracteres especiais.

  $L@ckW@r3 L!nUx

Para alterar o tamanho de senhas exigido pelo comando password, altere o arquivo “/etc/login.defs” e modifique a linha “PASS_MIN_LEN”, trocando o valor de 5 para 8.

instalação do so

A segurança de um sistema começa na instalação. Não que determinado programa não possa ser feito depois, mas por que instalando somente o necessário (principalmente na parte de serviços de rede), pode lhe poupar muitas dores de cabeça.

As vezes são instados programas desnecessários, por que não sabemos quais são todas as depências de determinado programa. Ou muitas vezes a instalação é feita porque talvez irá ser usado no futuro.

Lembre-se, caso seja necessário instalar algo depois, não faça instalação full em servidores. Em servidores de produção não é aconselhável deixar instalado gcc, make e etc. Se precisar compilar alguma coisa no futuro, instale-os, compile o que você quer e remova-os depois.

Procure fazer instalações usando o modo expert, pois você terá um melhor controle do que está sendo instalado, já que os pacotes serão escolhidos individualmente.

serviços desnecessários

Desabilitar ou remover serviços desnecessários é outra coisa que deve ser feita. Por exemplo: um servidor web não precisa de servidor X (salvo raras exceções).

Se você não vai usar inetd para que vai instalar ele? As vezes determinadas coisas não se pode desinstalar, como por exemplo o ntpd. Este pacote tem o binário do ntpdate, usado para sincronização de horário, então querendo ou não você terá que ter o server instalado, mesmo que use somente o client.

Atualizações

Atualizações são outra parte importante. NUNCA esqueça de atualizar seu servidor. Bugs de segurança sempre aparecem e não adianta nada você ter um servidor bem configurado se o mesmo não é atualizado.

Lilo

Lilo significa “Linux Loader” e como todos sabem, ele é o boot loader padrão do slackware. Na sua configuração padrão, o lilo permite a qualquer um que tenha acesso ao console entrar e alterar a senha de root.

opções

Imagine que o usuário tenha acesso ao console e digite na tela de boot do lilo “<Nome da imagem> init=/bin/sh rw”. Com isso o sistema irá inicializar e chegará no prompt sem senha e o pior, com acesso total ao sistema. Com isso, basta o usuário digitar “mount -o remount,rw /”, que todo o acesso ao servidor estará disponível para ele, sem excessões.

Para não permitir que isso aconteça, vamos fazer algumas modificações no “/etc/lilo.conf”.

timeout

Essa opção informa ao lilo quantos mili-segundos ele tem que aguardar para iniciar a imagem definida na opção Default. O valor default é 1200 mili-segundos.

password

A linha password, diz ao lilo para que seja solicitada uma senha toda vez que for acessada determinada imagem. Essa opção pode ser definida abaixo da entrada “image” ou no caso de outros sistemas operacionais, na entrada “other”, ou então pode ser definida globalmente, para todas as imagens.

Obs: Caso você use esta opção nas configurações globais e não use a opção restricted, será solitada senha toda vez que você tentar acessar alguma imagem no boot.

restricted

Com esta opção o password só é solicitado se você for iniciar imagens especificando parâmetros em linha de comando, como por exemplo iniciar o sistema em single-user: “<Nome da imagem> init=/bin/sh rw”.

exemplo de lilo.conf

  # Start LILO global section  boot = /dev/sdamessage = /boot/boot_message.txt

prompt

timeout = 1200

password = lerolero

restricted

# Override dangerous defaults that rewrite the partition table:

change-rules

reset

# VESA framebuffer console @ 800x600x64k

vga = normal

# End LILO global section

# Windows bootable partition config begins

other = /dev/sda1

label = Windows

table = /dev/sda

# Windows bootable partition config ends

# Linux bootable partition config begins

image = /boot/vmlinuz

root = /dev/sda3

label = Linux

read-only

# Linux bootable partition config ends

Como a senha fica em texto plano, a melhor coisa a se fazer é mudar a permissão do lilo.conf para que somente o root possa ler, para isso digite:

  chmod 0600 /etc/lilo.conf

Obs: Não esqueça de executar o comando lilo para que ele possa ler novamente as configurações do /etc/lilo.conf.

Grub

Grub significa “Grand Unified Bootloader” e é uma alternativa ao lilo. Ele é padrão na maioria das distribuições linux e foi adicionado a árvore /extra do slackware à partir da versão 10.1.

O Grub tem algumas opções muito úteis, como por exemplo, poder editar as opções do menu, ler arquivos do sistema ex: cat /etc/passwd. Por esta e outras razões é necessário restringir a interação do usuário com o “/boot/grub/menu.lst”.

opções

A configuração é similar ao lilo, seu arquivo de configuração é o /boot/grub/menu.lst. Edite-o e adicione as seguintes linhas:

timeout

Similiar à opção do lilo, só que o valor é definido em segundos.

password

Similar à opção do lilo, com exceção de que aqui podemos usar senhas encriptadas com md5, para isso usaremos o grub-md5-crypt.

Quando esta opção é definida, toda a interação do usuário com o menu é desativada e caso queira modificar alguma opção ou ter acesso a linha de comando do grub, pressione a tecla “p” e informe a senha.

  root@gandalf:~# grub-md5-crypt  Password:Retype password:

$1$lxEV8$2BgcGNPoWG/kbVvu4Z/Jh0

Agora iremos adicionar as linhas no menu.lst:

  password --md5 $1$lxEV8$2BgcGNPoWG/kbVvu4Z/Jh0

O parâmetro –md5 foi adicionado para informar que usaremos senha encriptada.

Exemplo de menu.lst

Aqui veremos um exemplo do /boot/grub/menu.lst:

  # GRUB configuration file '/boot/grub/menu.lst'.  ## The backup copy of the MBR for drive '/dev/sda' is

# here '/boot/grub/mbr.sda.3626'.  You can restore it like this.

# dd if=mbr.sda.3626 of=/dev/sda bs=512 count=1

#

# Start GRUB global section

timeout 30

# Default boot image

default 1

# Password for interative control

password --md5 $1$K9BV8$OQouIFhGvigDxM0r7nxzh1

# End GRUB global section

# Other bootable partition config begins

title Windows XP

rootnoverify (hd0,0)

makeactive

chainloader +1

# Other bootable partition config ends

# Linux bootable partition config begins

title Slackware 12.0

root (hd0,2)

kernel /boot/vmlinuz root=/dev/sda3 ro vga=788

# Linux bootable partition config ends

restringindo o acesso do usuário root

Usar senhas compartilhadas não é uma boa idéia, pois caso alguém logue via console e faça alguma coisa errada você não irá saber quem foi o responsável por tal erro. Então vamos seguir alguns passos para não permitir o login de root.

/etc/security

Este arquivo é o responsável por dizer em quais terminais o usuário root poderá conectar, já que queremos bloquear o login de root, iremos comentar todas as linhas deste arquivo.

/etc/suauth

Como o próprio nome sugere, este arquivo é referenciado quando o comando su é chamado. Caso este arquivo exista ele é lido e as regras que estão definidas nele são executadas, caso o arquivo não exista ou o login não case com nenhuma regra, o comando su é executado normalmente, ou seja, é solicitada a senha de root.

Imagine o seguinte cenário: Você não quer instalar sudo no seu servidor, todos sabem que com o sudo, você pode definir usuários ou grupos que podem executar determinados comandos, se o usuário ou grupo irá precisar de senha ou não para usar estes comandos e assim vai.

A sintaxe usada no suauth é:

  <usuário de destino>:<usuário de origem>:<ação a ser tomada>

Os valores que podem ser usandos em “<usuários de destino>” ou “<usuários de origem>”, podem ser um único nome ou uma lista separada por vírgula, ou usar a palavra ALL para todos ou a palavra GROUP seguida do grupo para especificar qual grupo você quer fornecer ou tirar o acesso.

Se você usar a palavra GROUP ou ALL, você pode utilizar o EXCEPT para fazer negações.

Em “<ação a ser tomada>”, você pode usar 3 opções que são elas:

  • DENY - Nega o <usuário de origem> se tornar o <usuário de destino>.
  • OWNPASS - Permite que o <usuário de origem> se torne o <usuário de destino> digitando a sua senha.
  • NOPASS - Permite que o <usuário de origem> se torne o <usuário de destino> sem digitar senha.

Um bom exemplo do uso desde arquivo é permitir que somente um determinado usuário possa usar o comando su para se tornar qualquer usuário e negar que os outros usuários utilizem-no. Ex:

  ALL: but3k4 :OWNPASS  ALL: ALL EXCEPT but3k4 :DENY

Veja a resposta do comando su caso eu queria me tornar root ou qualquer outro usuário:

  but3k4@sharingan:~$ su - root  Please enter your OWN password as authentication.(Enter your own password.)

Password:

root@sharingan:~#

Agora a resposta para o usuário groo ao usar o mesmo comando:

  groo@sharingan:~$ su - root  Access to su to that account DENIED.You are not authorized to su root

groo@sharingan:~$

groo@sharingan:~$ su - but3k4

Access to su to that account DENIED.

You are not authorized to su but3k4

groo@sharingan:~$

Não esqueça de se criar este arquivo antes de rodar o script security-slackware.sh, mudar a permissão para que somente o root possa ler este arquivo:

  chmod 0600 /etc/suauth

Caso queira ver mais algumas opções utilize o comando man suauth.

/etc/login.access

Este arquivo é responsável por definir quem terá ou não permissão de fazer login. Por default qualquer usuário do sistema pode fazer login. A sintaxe dele é:

  <permissão> : <usuários> : <origem do login>

Vamos agora a descrição de cada campo:

  • <permissão> - É definida com “+” ou “-” e são respectivamente acesso e bloqueio.
  • <usuários> - Aqui é definido quais usuários ou grupos terão acesso. Caso for colocar mais de um usuário, utilize espacos em vez de vírgula. Usando a palavra ALL você define todo tipo de acesso e EXCEPT quer dizer excessão.
  • <origem do login> - Aqui você diz se o usuário terá acesso total, ou se terá acesso somente a um determinado tty ou se será local e assim por diante. Vamos a um exemplo para dizer que somente o meu usuário terá acesso total ao sistema, todos os outros serão bloqueados.
  -:ALL EXCEPT but3k4:ALL

O -:ALL diz que todos os usuários serão bloqueados com excessão do usuário but3k4 que terá acesso total, ou seja posso conectar de qualquer tty, console e etc.

/etc/login.defs

Este arquivo tem algumas configurações interessantes, dentre elas:

  • FAIL_DELAY - Diz quantos segundos o usuário tem que aguardar antes de tentar outro login. O valor default é 3, altere-o para 10.
  • LOG_UNKFAIL_ENAB - Grava o nome de usuários usados em tentativas de login. Ela vem por default no, mude o valor para yes.
  • LOG_OK_LOGINS - Esta opção é para gravar também os logins que foram bem sucedidos. É recomendável alterar para yes.

/etc/profile

Este arquivo contém todas as váriaveis e comandos que são executados toda vez que alguém loga no sistema. É aqui que é definido o PATH global dos usuários comuns e do usuário root, prompt dentre outras coisas. Você também pode ter um .bash_profile no homedir do seu usuário. Só não esqueça que o /etc/profile é lido antes do .bash_profile.

Para melhor um pouco a segurança vamos definir alguns parâmetros.

  • HISTFILE - Diz qual arquivo será usado para salvar os comandos digitados no shell. O valor default é ~/.bash_history.
  • HISTSIZE - Especifica o número de comandos que serão salvos no history. O valor default é 500.
  • HISTFILESIZE - A quantidade de linhas contidas no history. O valor default é 500.
  • HISTCONTROL - Aqui é possível usar 3 opções: ignorespace que é para ignorar comandos iniciados com espaços; ignoredups que é para ignorar um comando que foi digitamos mais de uma vez; ignoreboth que é a união das duas funcionalidades anteriores.
  • HISTIGNORE - Aqui você define os comandos que não quer que sejam salvos no history. Para colocar mais de um comando, separe-os por “:”.
  • TMOUT - Define o tempo de inatividade no console. O valor definido em segundos diz que se o usuário ficar inativo por este tempo, ele é desconectado automaticamente.
      HISTFILE=~/.bash_history  HISTSIZE=10000HISTFILESIZE=10000
    
    HISTCONTROL="ignoredups"
    
    TMOUT=1800
    
    readonly HISTSIZE
    
    readonly HISTFILESIZE
    
    readonly HISTCONTROL
    
    readonly HISTIGNORE
    
    readonly TMOUT
    
    export HISTFILE HISTSIZE HISTFILESIZE HISTCONTROL TMOUT

Além dessas opções acima vamos usar o comando ulimit para proteger nosso sistema contra fork bomb. Este comando aceita você parametrizar várias coisas mas no momento precisamos limitar o número máximo de processos por usuário e também o número máximo de arquivos que podem ser abertos. Creio que para a maioria dos casos, 300 processos por usuário e 100 arquivos que podem ser abertos é suficiente.

  if [ "$UID" != "0" ]; then  	ulimit -u 300ulimit -n 100

fi

A opção -u 300, limita a quantidade de processos para todos os usuários com exceção do root. E a opção -n 100 limita a quantidade de arquivos que podem ser abertos.

Se quer descobrir o que é fork bomb, digite no seu terminal:

  :(){ :|:& };:

Existem muito mais opções, que podem ser incorparadas ao seu /etc/profile. Digite man bash e divirta-se.

permissões de arquivos, programas e diretórios

Permissões de arquivos e programas é algo que temos que ter um cuidado especial. Scripts ou arquivos com o bit SUID ou SGID ativo, podem fazer bons estragos, já que os mesmos são executados com os privilégios de quem é o dono ou grupo do dono e não de quem está executando. Caso queira ver quais arquivos tenham suid e gid ativo, use o seguinte comando:

  find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \;

Para remover o SUID ou SGID de algum arquivo, use o chmod:

  chmod u-s <arquivo ou programa>  chmod g-s <arquivo ou programa>

Obs: Muito cuidado com a remoção de permissões.

Além disso, programas com permissões de execução, podem ajudar um invasor a pegar informações do sistema.

Binários como gpasswd, mount e umount, fdisk e ifconfig dificilmente são usados por usuários comuns.

Arquivos como /etc/lilo.conf, /etc/suauth e arquivos de senhas ou configurações não precisam ser acessíveis por usuários comuns.

Existem diretórios que só precisam ser acessíveis para o usuário root, exemplo deles: /etc/rc.d, /etc/ssh, /boot.

Diretórios que precisam ter permissão de escrita para todos são o /var/tmp, /tmp, /var/lock e /var/spool/mail. Para visualizar arquivos com este tipo de permissão, utilize:

  find / -type d -perm -2 -ls

Para você não ter que ficar procurando quais programas ou não devem ter a permissão alterada, utilize o script security-slackware.sh, ele executa as seguintes tarefas:

  • altera a permissão de diversos arquivos e os torna disponíveis apenas para o usuário root.
  • altera a permissão de diversos diretórios e os torna disponíveis apenas para o usuário root.
  • altera o /etc/inittab e comenta a linha referente ao ctrl + alt + del, assim usuários acostumados com o windows não irão reiniciar o sistema sem querer.
  • altera o /etc/passwd e retira o shell dos usuários operator, gdm, mysql e qualquer usuário que não tenha shell.

Para executá-lo, siga os seguintes passos:

  mount -o remount,rw /usr (caso seu usr esteja em uma partição separada como read-only)  wget www.linuxti.pro.br/scripts/security-slackware.shchmod +x security-slackware.sh./security-slackware.sh

O arquivo de log com as permissões do binários antes da alteração é o /var/log/security-slackware.log.

Usar acls posix também é uma boa. Acls posix são o meio de atribuir mais de um dono/grupo para um arquivo ou diretório, procure no google por acls posix que você irá encontrar vários links sobre o assunto.

Outros programas interessantes são o chattr/lsattr, que são respecitivamente o comando que muda os atributos e o que lista estes atributos. Opções interessantes são:

  • i - O ‘i’ é de imutável, ou seja um arquivo que tenha este atributo não poderá ser renomeado, nem excluído e muito menos modificado.
  • a - O ‘a’ é de incremental. Este atributo tem quase as duas primeiras regras do ‘i’ que é não deixar o arquivo/diretório ser renomeado nem excluído, mas deixa ser adicionado conteúdo nele.

Existem alguns arquivos que podemos colocar como imutáveis. Ex: /etc/fstab, /etc/lilo.conf, /etc/services e etc.

SSH

O OpenSSH apareceu pela primeira vez no OpenBSD 2.6 e sua primeira versão foi desenvolvida em Outubro de 1999. Ele é derivado da última versão livre do ssh (versao 1.2.12), desenvolvido por Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt and Dug Song removeram muitos bugs e adicionaram novas features.

Por ser o meio de conexão mais usado entre sistemas Unix/Linux, muitas vezes o administrador não se preocupa em tomar alguns cuidados achando que o serviço por si só é 100% seguro. Em ambiente web não existe nada 100% seguro. aceita-se a afirmação de que um sistema 100% seguro é aquele que se encontra desligado.

opções

Port

Define qual a porta que o sshd ira usar. O valor default é 22, portanto recomenda-se mudar este valor. Use de preferência alguma porta acima de 1024 que não conste no nmap-services (vide /usr/share/nmap/nmap-services).

Protocol

Define qual versão do protocolo será usado, por default ele usa os 2 protocolos, retire o 1 deixando apenas o 2.

ListenAddress

Especifica o endereço ip que o sshd ira ouvir. Você pode especificar múltiplos endereços, separando-os por espacos ou deixar o valor default que é 0.0.0.0, para ouvir qualquer endereço ip.

LoginGraceTime

Por default o sshd espera 2 minutos para você digitar seu usuário e senha, após este tempo ele finaliza a conexão. Creio que 60 segundos são mais que suficientes para você digitar os seus dados. Então mude o valor para 1m e descomente a linha.

PermitRootLogin

Troque o valor para “no”, assim o usuario root não irá fazer conexões ssh. Esta opção é praticamente obrigatória.

StrictModes

Por default são verificadas as permissões dos arquivos e diretório do usuário antes de fazer o login.

MaxAuthTries

Especifica o número máximo de tentativas de autenticação permitidas por conexão. O valor default é 6, então diminua para 2 ou 3.

PubkeyAuthentication

Por default é permitida a autenticação por chave pública.

PasswordAuthentication

Por default é ativada a autenticação por senha (imagina se não fosse), vamos mudar o valor para “no” e descomentar a linha, pois iremos usar chaves de autentição.

PermitEmptyPasswords

Como o próprio nome já diz permite o uso de senhas em branco. O valor default eh “no”, portanto NUNCA habilite esta opção.

AllowTcpForwarding

Por default é permitido fazer tunel tcp, caso não use, mude o valor para “no”.

MaxStartups

Especifica o número máximo de conexões simultâneas não autenticadas. O valor default é 10, conexões adicionais serão dropadas.

Você tambem pode especificar valores aleatórios usando “start:rate:full”, ex: 5:80:10, isso quer dizer que após 5 conexões não autenticadas o servidor ssh irá recusar (80%) “rate/100″ e a probabilidade aumenta linearmente e todas as conexões são recusadas se as tentativas de conexão chegarem ao limite de 10.

Banner

Especifica um banner no ssh, caso queria personalizar um, basta criar um arquivo .txt e especificar o caminho dele aqui, ex: Banner /etc/ssh/banner.txt.

AllowUsers, AllowGroups, DenyUsers, DenyGroups

São respectivamente os Usuarios que tem permissão de se conectar, os grupos que tem permissão de conectar, usuários que não tem permissão de conectar e grupos que não tem permissão de conectar. Sobre grupos ou usuários que podem conectar fica a seu critério, segue abaixo o meu exemplo de uso:

  AllowUsers but3k4 groo slump  DenyGroups root bin daemon sys adm

Criando as chaves:

  ssh-keygen -b 2048 -t rsa  cd ~/.sshmv id_rsa.pub authorized_keys  scp authorized_keys <usuário>@<ip do servidor>:~/.ssh/

Para conectar é só usar:

  ssh <usuário>@<ip do servidor>

Exemplo de sshd_config

Segue abaixo um exemplo de sshd_config:

  # $OpenBSD: sshd_config,v 1.74 2006/07/19 13:07:10 dtucker Exp $  Port 14035  Protocol 2ListenAddress 0.0.0.0

SyslogFacility AUTH

LogLevel INFO

LoginGraceTime 1m

PermitRootLogin no

StrictModes yes

MaxAuthTries 4

RSAAuthentication no

PubkeyAuthentication yes

PasswordAuthentication no

PermitEmptyPasswords no

AllowTcpForwarding no

GatewayPorts no

X11Forwarding no

PrintMotd yes

PrintLastLog yes

TCPKeepAlive yes

UseLogin no

UsePrivilegeSeparation yes

PermitUserEnvironment no

MaxStartups 03:80:05

PermitTunnel no

Banner /etc/ssh/banner.txt

Subsystem	sftp	/usr/libexec/sftp-server

AllowUsers but3k4 groo slump

DenyGroups root bin daemon sys adm

Bloqueando conexões com o iptables

Você pode criar algumas regras de iptables para bloquear conexões ssh no seu servidor, segue abaixo um exemplo de regra:

  iptables -N SSH-WHITELIST  iptables -A SSH-WHITELIST -s <whitelisted ip> -m recent --remove --name SSH -j ACCEPTiptables -A INPUT -p tcp --dport <ssh port> -m state --state NEW -j SSH-WHITELIST  iptables -A INPUT -p tcp --dport <ssh port> -m state --state NEW -m recent --set --name SSH

iptables -A INPUT -p tcp --dport <ssh port> -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH \

-j LOG --log-prefix "SSH many connections "

iptables -A INPUT -p tcp --dport <ssh port> -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Existem outras alternativas além dessas regras de iptables, tais como denyhosts, fail2ban, ssdfilter, ssh blocker, port knocking e etc.

PHP

O PHP sucede de um produto mais antigo, chamado PHP/FI que foi criado por Rasmus Lerdorf em 1995, inicialmente como simples scripts Perl como estatísticas de acesso para seu currículo online. Ele nomeou esta série de script de ‘Personal Home Page Tools’. Como mais funcionalidades foram requeridas, Rasmus escreveu uma implementação C muito maior, que era capaz de comunicar-se com base de dados, e possibilitava à usuários desenvolver simples aplicativos dinâmicos para Web.

Em Novembro de 1997 foi lançada a versao 2.0 do PHP/FI que rapidamente foi substituído pelos alphas do PHP 3.0.

A versão 3.0 foi criado por Andi Gutmans e Zeev Suraski em 1997 e oficialmente lançada em Junho de 1998 e é a primeira versão que mais se assemelha ao PHP que nós conhecemos hoje.

Toda a nova versão da linguagem foi realizada sob um novo nome, que removeu a impressão do limitado uso pessoal que o PHP/FI 2.0 prendeu. Ela foi nomeada simplesmente ‘PHP’, com o significado que é um acrônimo - PHP: Hypertext Preprocessor.

Depois disso foi lançada a versao 4 em 19 de Julho de 1999 e irá ser descontinuada em 31 de Dezembro de 2007 conforme anuncio do site www.php.net.

A atual versao é a 5.2.4 e esta teve sua primeira versão lançada em 29 de Junho de 2003.

segurança

Eu particularmente discordo totalmente quando dizem que o php nao é seguro, digo isso pelos seguintes fatores:

  • Por se tratar de uma linguagem simples e de fácil aprendizado, muitas pessoas começaram a programar sem se preocupar com a qualidade do que estava sendo desenvolvido e isso resultou em programas funcionais com baixa qualidade e com o mínimo de segurança possível.
  • Programas inseguros podem ser feitos em qualquer linguagem.
  • A correta parametrização do php.ini, bem como todo o ambiente envolvido (sistema operacional, servidor web e a aplicação que esta sendo desenvolvida).
  • Muita features da linguagem que “ajudam” a vida do programador, mas diminuem consideravelmente a segurança.

opções

register_globals

Habilita ou não o uso de variáveis globais. Esta opção vem desabilitada por default desde a versão 4.2.0 e a partir da versão 6 ela será excluída (coisa que acho uma excelente idéia). Então continue a deixá-la desabilitada.

Habilitando o register_globals, o PHP transforma as variáveis EGPCS em globais, isso faz com que seja possível usar variáveis sem saber de sua origem e variáveis internas que são definidas no script se misturam com os dados enviados pelos usuários.

Agora para exemplificar o mal costume dos programadores em usarem register_globals habilitado, imagine o seguinte código:

  if ($auth)     echo "Usuário autorizado...";else

echo "Usuário sem autorização!";

Como desprezamos a origem da variável $auth, ela pode ser facilmente burlada. Supondo que o nome da página é login.php, eu poderia usar http://www.site.com.br?login.php?auth=1, e estaria autorizado a acessar a página normalmente. Agora veja o mesmo exemplo verificando a origem dos dados:

  if ($_SESSION['auth'])     echo “Usuário autorizado, pode continuar”;else

echo “Usuário sem autenticação!”;

Portanto se eu agora quizer tentar burlar o sistema usando a mesma url anterior, o PHP não irá confundir pois estou dizendo que auth faz parte do array $_SESSION e o auth=1 informado na url, faz parte do array $_GET.

Vale lembrar que a diretiva register_globals não é insegura, o uso incorreto dela é que é, portanto TODO código PHP funciona com register_globals desabilitado.

expose_php

Esta opção acrescenta uma assinatura no header do seu servidor web informando que o PHP está instalado, além de exibir informações detalhadas quando você executa um phpinfo(). Isto não causa problemas de segurança, mas torna possível determinar se você usa PHP em seu servidor. Por default esta opção vem habilitada.

Exemplo de um scan com expose_php habilitado:

  root@gandalf:/tmp# nmap -sV localhost -p 80  Starting Nmap 4.20 ( http://insecure.org ) at 2007-09-11 22:14 BRT  Interesting ports on localhost (127.0.0.1):PORT   STATE SERVICE VERSION

80/tcp open  http    Apache httpd 2.2.4 ((Unix) DAV/2 PHP/5.2.3)

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .

Nmap finished: 1 IP address (1 host up) scanned in 6.093 seconds

Agora o mesmo scan com expose_php desabilitada:

  root@gandalf:/tmp# nmap -sV localhost -p 80  Starting Nmap 4.20 ( http://insecure.org ) at 2007-09-11 22:14 BRT  Interesting ports on localhost (127.0.0.1):PORT   STATE SERVICE VERSION

80/tcp open  http    Apache httpd 2.2.4 ((Unix) DAV/2)

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .

Nmap finished: 1 IP address (1 host up) scanned in 6.056 seconds

open_basedir

Limita a árvore de diretórios que o PHP usa para verificar quais arquivos ele pode abrir ou não. Essa opção por default está vazia, ou seja, permite que qualquer arquivo seja aberto independente do diretório. Com isso você pode usar funções como a fopen por exemplo para ler conteúdo de arquivos fora da árvore de sua aplicação. Ex: o arquivo /etc/passwd.

Agora habilitando o path absoluto que sua aplicação irá trabalhar, o PHP irá se recusar a abrir arquivos fora daquele path. Para habilitar o open_basedir, imaginemos que nossa aplicação está no diretório /var/www/htdocs, portanto queremos que o PHP trabalhe com todos os arquivos que estão definidos no path /var/www/, para isso usaremos:

  open_basedir = '/var/www/';

Repare que coloquei o “/” no final, isso quer dizer que estou informando o diretório específico, caso não seja informado o “/” no final, você tanto poderá abrir /var/www, como /var/www1 ou /var/wwwroot. Isso acontece por que a restrição imposta com open_basedir é na verdade um prefixo, e não um nome de diretório.

Vale lembrar que todos os links simbólicos são resolvidos, então não é possível evitar essa restrição com um symlink.

safe_mode

O safe_mode é uma tentativa de melhorar a segurança de sites que utilizam PHP. Esta opção gerou uma grande polêmica entre os usuários e desenvolvedores.

Com o safe_mode habilitado, algumas funcionalidades são restritas e outras desabilitadas. Para saber a lista completa do que funciona ou não com safe_mode habilitado, consulte: http://www.php.net/manual/en/features.safe-mode.functions.php.

Vamos ver de algumas funções muito usadas por programadores e que se não forem usadas com cuidado, podem comprometer todo o sistema.

  • operador backtick - Backtick é o uso de (“) para chamar comandos do sistema (usado também em bash). Ele é desabilitado no safe_mode.
  • shell_exec - Função similar ao operador backtick. Também é desabilitada no safe_mode.
  • system - Esta função é usada também para executar comandos de sistema. Sua funcionalidade com safe_mode habilitado, depende da correta parametrização da linha “safe_mode_exec_dir”.

safe_mode_exec_dir

Se o PHP for usado em safe_mode, algumas funções como a system(), que executam programas do sistema se recusam a executar programas que não estão no diretório atual. Você deve usar / como separador diretório em todos os ambientes.

Esta diretiva especifica um diretório onde os scripts podem ser carregados. O PHP não irá executar um script se ele não estiver neste diretório.

disable_functions

Esta diretiva permite que você desabilite funções que não quer usar. Ela recebe uma lista de nomes de funções separadas por vírgula. Funções interessante para desabilitar: phpinfo, php_uname, get_current_user, openlog, ini_restore, symlink, passthru, system.

Obs: disable_functions não é afetada pela diretiva Safe Mode.

allow_url_fopen

Esta opção ativa o o uso de url como arquivos locais. São disponibilizados por padrão wrappers para acesso de arquivos remotos utilizando os protocolos FTP ou HTTP, e algumas estensões como a zlib podem registar wrappers adicionais. Em outras palavras, desativa a inclusão de scripts externos ao servidor local.

allow_url_include

Esta função permite o uso de uma url com as seguintes funções include(), include_once(), require(), require_once().

Obs: Esta definição requer que allow_url_fopen esteja on

error_reporting

Esta opção habilita o nível de erros que é exibido. É extremamente recomendável habilitar E_ALL tanto para ambiente de desenvolvimento como ambiente de produção.

display_errors

Determina quando os erros devem ser mostrados como parte da saída ou não.

Enquanto estiver desenvolvendo uma aplicação a exibição de erros é necessária para mostrar onde está determinado erro, com isso torna-se mais fácil encontrar possíveis problemas. Agora em ambiente de produção jamais deixe-a habilitada, pois informações importantes podem ser passadas ao usuário sem que você perceba.

log_errors

Define se os erros serão gravados em um arquivo pré-definido, ou se serão gravados no log de erros do apache.

error_log

Define o nome do arquivo onde os erros serão logados. Você pode definir um arquivo em especial ex: /var/log/httpd/php-errors.log”, ou definir o valor especial syslog para os erros serem enviados para o log do sistema.

Suhosin

Suhosin é um avançado sistema de proteção para instalações PHP. Ele foi desenvolvido para proteger servidores e usuários de falhas conhecidas e desconhecidas em aplicações PHP.

Ele é divido em 2 partes que podem ser instalação tanto em conjunto como separadas: A primeira parte é um pequeno patch instalado diretamente no núcleo do php que implementa um proteção de baixo nível contra bufferoverflows. A segunda parte é uma extensão que implementa várias outras funcionalidades.

Para saber mais consulte o site do projeto http://www.hardened-php.net/suhosin.

Apache

O Apache (Apache server) é o servidor web mais usado. Foi criado em 1995 por Rob McCool. Atualmente está na versão 2.2.6.

Para evitar alguns problemas vamos parametrizar algumas coisas:

  • ServerTokens - Esta opção controla o cabeçalho da resposta que é emitida aos clientes, inclui uma descrição genérica do sistema operacional do servidor bem como as informações sobre módulos compilados. Ela não vem setada no httpd.conf e seu valor default é “Full”. Adicione a seguinte entrada no seu /etc/httpd.conf:
      ServerTokens Prod
  • ServerSignature - permite a configuração do rodapé em documentos gerado pelo servidor (listagem de diretórios, mensagem de erros). Por default seu valor é off.
  • Timeout - O número de segundos antes de receber e enviar um time out. O valor default é 300 segundos, ou seja 5 minutos. É interessante diminuir este valor, para que caso o servidor tenha muitos acessos ou tentativas de negação de serviço, a conexão irá ser finalizada mais rapidamente.
  • MaxClients - Limita o número de clientes que podem conectar simultaneamente. Se este limite é sempre atingido, os clientes ficarão aguardando alguma conexão ser liberada para se conectarem. Esta opção tem a intenção principal de ser um freio para manter um servidor em execução com uma performance aceitável. Em ataques de negação de serviço, aumentar este valor pode ser muito interessante, poderá suportar mais conexões, de acordo com os requerimentos de construção e carga calculada no servidor.

Também procure na documentação quais módulos você realmente necessita, desabilitando os outros.

Existem muitas outras opções, consulte a documentação do apache para maiores detalhes: http://httpd.apache.org/docs/2.2/

BIND

Quando se fala em dns o nome que se tornou padrão de mercado é o BIND (Berkeley Internet Name Domain). Ele é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix.

As versões antigas do bind (4 e 8) tinham uma série de vulnerabilidades de segurança e, por isso, o seu uso é hoje fortemente desencorajado. Uma das motivações para reescrever o BIND, e lançar o BIND 9, foi disponibilizar um sistema mais seguro. Para a versão 9, o BIND foi praticamente reescrito. Ele passou a suportar, dentre outras funcionalidades, a extensão DNSSEC e os protocolos TSIG e IPv6.

Um dns bem configurado impede que usuários maliciosos descubram informações importantes de sua rede, como nome de host, endereços ips, além de demonstrar que a pessoa ou equipe de cuida desde serviço, se preocupa com as informações que estão contidas nele.

Para melhorar a segurança deste serviço, precisamos fazer algumas modificações, vamos falar de algumas:

  • version - Esconder a versão do bind é muito útil, assim ninguém ficará sabendo qual versão você está usando.
  • allow-transfer - Usada para definir os IPs dos servidores autorizados a fazer transferência de zona. Essa linha tem que ser adicionada em TODOS os seus servidores dns, de modo que somente os servidores slaves tenho acesso a essa opção.
  • allow-recursion - Usada para definir quais os endereços autorizados a realizarem consulta recursiva, em outras palavras, diz quem pode usar ou não seu servidor para resolver nomes.
  • listen-on - define qual endereço IP e porta irá ouvir as requisições.

Exemplo da entrada options de um /etc/named.conf:

  options {  	directory "/var/named";version "not available";

allow-recursion { 10.1.0.0/16; 10.3.0.0/16; };

allow-transfer { 10.3.1.20; 10.3.1.30; 10.3.1.40; 10.3.1.50; };

listen-on { 127.0.0.1; 10.3.1.20; };

};

Também não se esqueça de:

  • configurar zonas reversas para seus servidores (principalmente servidores de email) e caso você não tenha autoridade para fazer isso, entre em contato com sua operadora.
  • configurar corretamente o contato que consta no seu dns. Muitos não sabem mas cada domínio registrado em um servidor DNS possui na entrada SOA (Start of Authority) o parâmetro que informa o email do responsável pelo domínio ex:
      @       IN      SOA     dns1.ung.br.    suporte.ung.br. (

    Repare a parte suporte.ung.br, ela é o email do responsável pelo dns. Procure estudar um pouco sobre views e acls, que lhe darão um melhor controle. E para verificar se o seu dns está configurado corretamente ou não, consulte sites como:

  • http://www.dnsreport.com
  • http://www.checkdns.net

cuidado com os logs

Os logs são de extrema importância para a administração de um sistema. NUNCA deixe de verificá-los, nem mesmo de salvá-los em lugar seguro pois um dia eles podem salvar sua vida.

Umas das coisas que um invasor faz é não querer que descubram o que ele fez ou de onde veio, para isso ele tenta esconder seus vestígios. O melhor meio para fazer isso é apagando os logs. Agora se você tem um servidor de logs, mesmo ele apagando os logs locais, os mesmos estão sendo gravados em outra máquina da rede.

O gerenciador de logs do slackware é o syslogd. Ele que controla o que será e onde serão gravados estes dados.

Configurar um servidor de logs é uma tarefa bem simples, basta apenas alterar o arquivo /etc/rc.d/rc.syslog e na linha “/usr/sbin/syslogd” colocar um -r na frente. Nas máquinas clientes é só alterar o /etc/syslog.conf e colocar no final do arquivo a linha:

  *.*							@<ip do servidor de logs>

Não esqueça, se usar firewall na máquina de logs, liberar a porta 514/udp para conexões. Mesma coisa para as clientes.

grsecurity

Grsecurity é um patch para kernels 2.4 e 2.6 que foi desenvolvido com o intúito de aumentar a segurança. Ele começou a ser desenvolvido em fevereiro de 2001 e teve sua primeira versão para o kernel 2.4.1. É baseado no OpenWall e atualmente sua versão stable é para o kernel 2.6.19.2.

Ele possui vários tipos de recursos como:

  • ACLs.
  • Proteção contra buffer-overflow.
  • Auditoria.
  • Suporte a sysctl.
  • Proteção no uso chroot.
  • Negar escrita no /dev/kmem, /dev/mem.
  • Restrições ao /proc e dmesg.
  • Esconder processos do kernel.

Para utilizar o sistema de ACLs, utiliza-se o software gradm, o mesmo faz um total controle do que pode ou não ser utilizado, além de ter um sistema de aprendizagem, no qual ele fica apenas monitorando o que determinado serviço utiliza e com isso pode criar configurações baseadas no que foi monitorado.

As novas versões do grsecurity contam com o PAX. PAX é um completo sistema de proteção a memória. Sua idéia principal é proteger o sistema contra técnicas usadas para ler e gravar em determinados segmentos de memória. Para tal tarefa é utilizada técnicas como a ASLR (Address Space Layout Randomization).

Para saber mais visite: http://www.grsecurity.net.

Outros projetos:

firewalls

Ter um firewall bem configurado é tarefa fundamental quando se fala em segurança. Seu uso restringe o acesso externo aos servidores ou redes que você deseja proteger. Atualmente existem vários tipos de firewalls. No mundo linux, para construir firewalls, usamos o iptables. Ele é um filtro de pacotes muito eficiente e não deixa a desejar em nada quando comparado com outras ferramentas. No seu site oficial (http://www.netfilter.org), traz TODA a documentação necessária para você aprender como utilizá-lo.

Um firewall não pode ser sua única defesa e seu uso não garante que sua rede esteja segura contra invasões.

Os firewall são divididos basicamente em duas categorias:

  • stateless - Que são filtros de pacotes estáticos.
  • stateful - Filtros de pacotes dinâmicos.

A grande diferença entre eles é o modo como as decisões são tomadas. Filtros stateless apenas permitem liberar e bloquear pacotes, sendo que precisa ser informado explícitamente o que você deseja fazer. Por outro lado filtros stateful verificam e mantêm o estado das conexôes, verificando cada pacote contido na conexão de modo que possa prever por exemplo se o pacotes que está sendo trasmitido faz parte de uma conexão estabelecida ou não.

Falando em firewalls, algumas dicas para a criação de suas regras de iptables:

  • Use políticas DROP.
  • Estude cuidadosamente o que irá trafegar pelo seu firewall.
  • Firewalls foram feitos para analisar pacotes não conteúdo.
  • Teste todas as suas regras antes de por em produção.

Leia sempre a documentação sobre iptables (http://www.netfilter.org/documentation/index.html), ela traz todo o conteúdo necessário para se construir um bom script de firewall e alem de ser divida em partes como: Networking Concepts, Packet Filtering, Nat e Netfilter Extensions. Também tem vários exemplos de scripts que podem ser aproveitados.

ids

IDS significa (Intrusion Detection System) e é usado para detectar tentativas de invasão. OS IDS podem tanto alertar sobre eventuais ataques como tomar as devidas providências bloqueando-o. Ele pode ser usado para analistar e tomar decisões em relação a tentativa de scans, que é a verificação de quais serviços rodam em seu sistema e ataques de negação de serviço (DOS - Deny of Service), que é a tentativa de sobrecarregar um determinado serviço enviados mais requisições do ele pode suportar.

Podemos dividir os IDS em duas categorias:

  • NIDS (Network Intrusion Detection System) - Sistema usado para detectar o tráfego de rede de modo que verifique se os pacotes que estão trafegando e assim possa tomar decisões sobre o que deve ou não ser feito em caso de detecção de tráfego malicioso. O mais conhecido no mundo open source é o snort.
  • HIDS (Host Intrusion Detection System) - Este tipo de sistema é instalado para monitorar arquivos e logs, verificando a integridade dos mesmos.. Um exemplo deste tipo de sistema é o ossec-hids (http://www.ossec.net).

Para saber como configurar o snort ou o ossec-hids, existem vários tutoriais na net, utilize o google e seja feliz.

Verificação de vulnerabilidades

Existem várias ferramentas que fazem este papel, dentre elas podemos citar:

  • Nmap - O nmap é uma ferramenta para exploração de rede e auditoria de segurança.
  • Nessus - Uma outra ferramente de exploração de vulnerabilidade. Possui vários plugins e é composta de cliente com GUI e o servidor.
  • Nikto - É um scanner de servidores web. Também possui vários plugins e verifica mais de 3300 potenciais arquivos perigosos. Verifa CGI versão do servidor e várias outras coisas. Seus plugins e sua base de dados também pode ser atualizada e faz testes que nem sempre são pegos por IDS.

Teste pesquisar um pouco mais sobre eles para ajudar na detecção de falhas de sua rede ou servidores.

backup

Backup é de extrema importância para qualquer sistema. Sem eles, muitos dados são praticamente impossíveis de serem recuperados e com isso informações importantes podem ser perdida.

Quando for se fazer um backup, pense em três coisas: dados, arquivos de configuração e logs.

Mantendo-se atualizado

Para manter-se atualizado, consulte sites relacionados ao assunto, alguns exemplos são:

Assine a lista de segurança do slackware, enviando um email com o subject “slackware-security” para “majordomo@slackware.com“.

Acesse o site http://www.rnp.br/cais/, assine a lista e marque os temas que lhe interessam, assim você irá receber vários emails sobre incidentes de segurança.

Leia sempre a documentação dos programas, elas geralmente são ricas em informações.

E por último não sendo o menos importante, visite o google, ele é seu melhor amigo.

Referências

Agradecimentos

Enviado em Dicas, Linux, Segurança | Tagged: , , , , , | 1 Comentário »

Dominando o Vim

Escrito por VonNaturAustreVe em Março 27, 2008

Dominando o vim

O Vim (Vi Improved) é uma versão mais poderosa e maior em termos de espaço em disco e requisitos de memória do editor de texto vi. Essa versão é mantida como software livre, e acompanha a maioria das distribuições Linux. Está disponível também para variantes *NIX, Windows, Amiga, OS/2 e Macintosh. O Vim foi criado por Bram Moolenaar.

O vim trabalha de duas formas(ou modos) de uso o modo de edição e o modo de comando.

Modo de Edição

No modo de edição, você pode digitar a vontade como se fosse um editor de textos comum. Esse modo é iniciado no editor - a partir do shell digitando-se vi entra-se no editor - através de um dos seguintes comandos:

Comandos básicos:

 

  • a : insere texto depois do cursor atual

  • i : insere texto a partir do cursor atual

  • I : insere texto no início da linha

  • A : insere texto no final da linha

  • s : substitui texto no cursor atual

  • S : substitui texto depois do cursor atual

  • o : abre uma linha abaixo do cursor atual

Modo de Comando

No modo de comando, você pode executar comandos ;-) . O modo de comando começa quando se aperta a tecla ESC. Alguns desses comandos são: substituição, inserção e procura de texto, gravação e abertura de arquivos entre outros, além de recorte, cópia e colagem de texto.

Os comandos mais usados são:

  • /Expressão : Procura Expressão (que pode ser qualquer palavra) no texto

  • n : Procura próxima ocorrência de Expressão no texto

  • N : Procura ocorrência anterior de Expressão no texto

  • yy : Copia linha atual do texto para memória

  • p : Cola conteúdo da memória no texto

  • dd : Apaga linha atual (e coloca na memória)

  • n comando : Um número n (1, 2, …) seguido de qualquer comando executa o comando n vezes

  • u : Desfaz última ação executada

  • . : Refaz última ação executada

  • :n : Pula para linha de número n

  • :w : Salva o arquivo atual

  • :wq : Salva o arquivo atual e sai do Vi

  • :x : Salva o arquivo atual e sai do Vi (equivalente) a :wq

  • :q : Sai do Vi

  • :q! : Sai do Vi , independe de salvar o conteúdo atual

  • :w arquivo : Salva o arquivo atual com o nome arquivo

Mais dicas sobre o Vim

Executando scripts

A primeira coisa a ser aprendida é a execução de scripts no Vim. Para chamar um arquivo.vim basta indicá-lo, usando o comando (dentro do vim):

:so nomeDoScript.vim

Neste caso, estou assumindo que o arquivo está no diretório esperado (o diretório onde você está no momento em que chamou o vim). Caso não esteja, o caminho relativo (~/meuDir/nomeDoScript.vim) ou absoluto (/home/fulano/meuDir/nomeDoScript.vim) deve ser indicado.

Criptografando textos

 

No vim é possível criptografar seus textos muito facilmente e com segurança razoável, basta chamar o vim com o parâmetro “-x“, exemplo:

$ vim -x arquivo.txt

O vim vai lhe pedir a senha e a confirmação da senha, edite o arquivo e salve normalmente. Depois, para abrir, faça-o normalmente como por exemplo:

$ vim arquivo.txt

Aqui o vim vai lhe pedir a senha para abrir o arquivo, caso abra tudo doidão, não se assuste, é porque você digitou a senha errada, saia e tente novamente.

Usando o GnuPG dentro do vim

Vamos ver como integrar o GnuPG (GNU Privacy Guard –> versão “open” do PGP - Pretty Good Privacy) direto no vim sem precisar de arquivos intermediarios para isso, de uma forma bem simples e rapida.

Constitui-se basicamente em 2 partes - um conjunto de macros para assinar/verificar/”desassinar” um texto e um script do vim para gerenciar arquivos criptografados (arquivo.gpg).

Adicione as seguintes macros no seu ~/.vimrc:

# ~/.vimrc … seus outros comandos ….
command! GS :%! gpg –clearsign
command! GU :%! gpg –no-verbose 2>/dev/null
command! GV :w !gpg –verify –no-verbose #
Note o espaco em :w <ESPACO> !gpg ….. ; é importante para o # funcionamento correto do comando :)

O comando :%! no vim faz com que a mensagem passe por um filtro externo e volte para o texto. Assim, o gnupg vai assinar o texto e devolver pro vim (você vai ter que digitar sua pass-phrase para que o gnupg assine a mensagem). O :w !comando faz um “pipe” do texto atual para o comando especificado. ATENCAO: se você não colocar o espaco, o vim vai salvar o arquivo com o nome do comando. Lendo a documentação do vim, é alguma compatibilidade obscura com o vi antigo e/ou o modo Ex, ou algum Hocus Pocus similar.

Basta apertar ESC no vim e digitar :GS para assinar o texto, :GV para verificar uma assinatura e :GU para limpar a assinatura.

Criptografando textos

Vamos precisar de um plugin do vim para fazer isso. Plugins nada mais são que coleções de macros e scripts pro vim que serao automagicamente acionados em algum evento.

O script/plugin pode ser obtido direto do site do vim: http://www.vim.org/scripts/script.php?script_id=661

Basta salva-lo no diretório ~/.vim/plugin/ com o nome gnupg.vim.

Agora abra um arquivo com extensao .gpg. O plugin automaticamente entra em ação na hora de salvar este arquivo, perguntando para quais usuários/chaves se quer criptografar o email. Pode-se criptografar de maneira que n chaves privadas consigam abrir o arquivo, basta ir adicionando nomes/emails/ids de chaves na hora de salvar (o plugin pede essas informações).

Fontes e Referencias:

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1694

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=151

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=447

http://pt.wikipedia.org/wiki/Vim

http://www.unitednerds.org/thefallen/docs/index.php?area=Vim&tuto=gpg

http://brlinux.linuxsecurity.com.br/artigos/vim_intro.htm

 

Enviado em Dicas, Linux, Open Source, Unix | Tagged: , , , , | Nenhum comentário »

Slackware 12.1 RC1 a caminho

Escrito por VonNaturAustreVe em Março 27, 2008

Slackware 12.1 RC1 a caminho

“Slackware 12.1 Release Candidate 1 a caminho, conforme anuncia o Changelog do slackware-current: “Wed Mar 19 19:34:38 CDT 2008: Is this Slackware 12.1 RC 1 yet? It has to be close.” - ou seja: está próximo. Nós entusiastas do Slackware vamos aguardar.”

Referencia

Fonte

[]’s

Enviado em Linux, Noticias, Segurança | Tagged: , , , | Nenhum comentário »

Migrando do ipchains para o iptables

Escrito por colt7r em Março 27, 2008

Aceitando ou negando pacotes

Para bloquear pacotes em uma porta

Se no ipchains você fazia:

# ipchains -A INPUT -i eth1 -p tcp -s 0/0 -d 200.219.228.90 25 -j DENY

no iptables você faz:

# iptables -A INPUT -i eth1 -p tcp -d 200.219.228.90 –dport 25 -j DROP

note que o INPUT é maiúsculo, o mesmo exemplo se aplica para outras portas

# iptables -A INPUT -i eth1 -p tcp -d 200.219.228.90 –dport 110 -j DROP
# iptables -A INPUT -i eth1 -p tcp -d 200.219.228.90 –dport pop3 -j DROP

Para aceitar pacotes em uma determinada porta

Se no ipchains você fazia:

# ipchains -A INPUT -i eth1 -p tcp -s 0/0 -d 200.219.228.90 25 -j ACCEPT

no iptables você faz:

# iptables -A INPUT -i eth1 -p tcp -d 200.219.228.90 –dport 25 -j ACCEPT

Bloqueando/Aceitando um intervalo de portas

Ipchains:

# ipchains -A INPUT - i eth1 -s 0/0 -d 200.219.228.90 0:1024 -p tcp -j DENY

iptables:

# iptables -A INPUT -i eth1 -p tcp -d 200.219.228.90 –dport 0:1024 -j DROP

O mesmo estilo se aplica a pacotes udp e para a regra ACCEPT.

Nota: Quando você utiliza uma regra automaticamente o Linux inclui o módulo para você, caso o mesmo não ocorra automaticamente você pode tentar incluí-los manualmente com o comando:

# modprobe ip_tables
# modprobe iptable_nat
# modprobe iptable_filter

Estes são os módulos básicos. O iptables foi desenvolvido em módulos para facilitar a adição de novas funcionalidades.

Mascarando uma conexão

Se no ipchains você fazia:

# ipchains -A forward -s 192.168.0.0/24 -d 0/0 -j MASQ

no iptables você faz:

# iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to 200.219.228.90

onde 200.219.228.90 é o endereço IP de sua placa de rede conectado a internet.

Note que há muitas outras maneiras se se utilizar o mascaramento de IP, está é apenas uma maneira básica. Eu poderia simplesmente mascarar os pacotes direcionados para a porta 80 enquanto que as outras portas não seriam mascaradas, exemplo:

# iptables -t nat -A POSTROUTING -o eth1 –dport 80 -j SNAT –to 200.219.228.90

No iptables foi adicionado uma tabela nat e uma chain POSTROUTING para cuidar da parte do mascaramento de IP, note que a chain POSTROUTING requer um parâmetro -o e não -i como o utilizado no ipchains.

Redirecionado pacotes

Uma das coisas que eu não conseguia fazer funcionar corretamente no ipchains era o redirecionamento de pacotes udp e tcp, com os pacotes tcp. Consegui resolver o problema utilizando um programa chamado redir.

# redir –lport=80 –cport 80 –laddr=200.219.228.90 –caddr=192.168.0.1

Este comando redireciona os pacotes que entram pela porta 80 para um servidor na rede interna de ip 192.168.0.1 também pela porta 80.

No iptables este redirecionamento funcionou sem a necessidade de se instalar nenhum pacote adicional.

# iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.0.1

Caso você queria redirecionar para outra porta no servidor

# iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.0.1:180

Estes são apenas comandos básicos para operação do iptables, sugiro para uma melhor compreensão do mesmo uma consulta à página www.iptables.org, lá se encontra um tutorial completo sobre a utilização desta poderosa ferramenta.

Fonte: Viva o Linux (por Wanderson Berbert)

Enviado em Firewall, Linux, Redes, Segurança, Unix | Nenhum comentário »

Utilizando o Alien

Escrito por colt7r em Março 27, 2008

O Alien é um programa usado para converter o formato de pacotes, ou seja, podemos converter um pacote .rpm em .deb ou tgz.

Opções de uso:
–to deb (converte para .deb)
–to tgz (converte para .tgz)
–to rpm (converte pra .rpm)

Ex:
# alien –to deb awn.rpm
Converto o pacote awn.rpm para .deb.
# alien –to tgz amule.deb
Converto para tgz o pacote amule.deb.

Fonte: Viva o Linux

Enviado em Dicas, Linux, Unix | Nenhum comentário »

Melhorando o desempenho do firefox

Escrito por VonNaturAustreVe em Março 25, 2008

Melhorando o desempenho do firefox

Nesse tutorial eu pretendo explicar como melhorar o desempenho do firefox apenas alterando suas configurações, sem precisar de mais nada. O foco é no Linux, mas funciona em qualquer plataforma, e já foi comprovada eficiencia também no Windows de acordo com meu amigo de Budega Véia NaNoCoDe (óia o jabá ).
Antes de mais nada, devo dizer que a referência é este artigo do site Computer World que está todo em Inglês. Eu apenas irei dar uma resumida nele, traduzir o mais importante e recomendar os melhores valores.
Também lembre-se que nem todas as configurações são existentes no navegador, e algumas devem ser criadas.
Antes de tudo, faça um backup das suas configurações do firefox, pois podem ocorrer algumas coisas bizarras ou não, nunca se sabe. Para fazer o backup basta copiar a pasta .mozilla/firefox/ na sua pasta pessoal (home) e caso precise usá-lo, apague a pasta existente no home e cole a pasta copiada anteriormente. Eu avisei hein.

Os títulos têm cores diferentes:
Verde: Nem sempre pode ser percebido
Amarelo: Melhora um pouco
Vermelho: Melhora muito!

Instruções

Para acessar as configurações, digite

about:config

na barra de endereços do firefox, que deve abrir uma area de configuração cheia de valores e nomes estranhos.
Para encontrar as chaves a serem editadas, basta colar o nome delas na barra de pesquisa.
Abaixo das descrições tem os valores que devem ser editados. Caso o valor não exista, você deve dar um clique com o botão direito na parte das configurações e selecionar “new” e definir o tipo (q eh explicitado nas descrições).

Então, lá vamos nós.

Iniciar a renderização das páginas mais rapidamente


O firefox por padrão espera 0.25 segundos para começar a renderizar as páginas. Porém pode-se tirar este tempo de espera, com isso as páginas começam a ser exibidas no exato momento em que o firefox recebe as informações.
Nome: nglayout.initialpaint.delay
Status: user set
Type: interger
Value: 0 (valor opcional, você pode tentar outros valores) (padrão se não especificado: 25000, 0.25 segundos)

Configurando o número de vezes em que a pagina é renderizada na tela


Esse é um dos valores que mais comem memória no firefox a partir da versão 2.0. Isso porque para ter um bom desempenho com ajax, as páginas devem ser renderizadas na tela diversas vezes, porém quando este valor é um pouco acima do “normal’, o navegador exige mais recursos do sistema. Aumentando este valor que representa o intervalo entre as atualizações, consegue aumentar drasticamente o desempenho do navegador no geral, e reduzir o consumo de memória.
Nome: content.notify.interval
Status: user set
Type: interger
Value: 2000000 (valor opcional, você pode tentar outros valores) (padrão se não especificado: 120000, 0.12 segundos)

Caso você crie esta variável ou ela já esteja presente, certifique-se que este valor também esteja presente:

Nome: content.notify.ontimer
Status: user set
Type: boolean
Value: true

Configurando o intervalo de verificação de eventos do usuário enquanto carrega uma página


Quando uma página está carregando, o firefox verifica de tempos em tempos se nenhum evento está ocorrendo, como por exeplo se o usuário não está rolando a página. Este intervalo pode ser diminuido, as páginas levarão mais tempo para carregar e o navegador responderá melhor enquanto carregando. Caso aumente este valor, as páginas carregarão um pouco mais rápido, mas durante este tempo o navegador não irá responder com precisão.
Nome: content.switch.threshold
Status: user set
Type: interger
Value: 10000 (valor opcional, você pode tentar outros valores) (valor baixo, irá carregar mais rápido, porém com suas consequencias)

Caso você crie esta variável ou ela já esteja presente, certifique-se que estes valores também estejam presentes:

Nome: content.notify.ontimer
Status: user set
Type: boolean
Value: true

Nome: content.interrupt.parsing
Status: user set
Type: boolean
Value: true

Nome: content.max.tokenizing.time
Status: user set
Type: integer
Value: 30000000 (opcional, este valor deve ser alto)

Nome: content.switch.threshold
Status: user set
Type: integer
Value: 10000 (opcional, deve ser um valor baixo)

Configurando os botões para fechar as abas


Por padrão no firefox 2, todas as abas tem um botão de fechar próprio. Isso come memória pra caramba, principalmente quando se abre 321658 abas ao mesmo tempo. Você tem alguma opções para lidar com isso: Remover completamente todos os botões de fechar e usar o CTRL+F4 para fechar as abas (opção 2), mostrar o botão de fechar apenas na aba atual (opção 0) ou exibir o botão de fechar ao final da barra com as abas no estilo das versões antigas do firefox (opção 3, estéticamente desagradável). A mudança é super perceptível, principalmente quando aternando as abas.
Nome: browser.tabs.closeButtons
Status: user set
Type: interger
Value: 2 (valor opcional, você pode tentar outros valores citados acima) (valor padrão: 1) (valores opcionais: 0, 1, 2, 3)

Abrir a pesquisa do google em outra aba automaticamente


Ótima para os preguiçosos do fórum. Se a sua desculpa antes de vir postar coisas óbvias no fórum era a “trabalheira” de ter que abrir uma nova aba e digitar na pesquisa do google o que você queria, agora não tem mais desculpa. Com esta opção, toda vez que for feita uma pesquisa usando a ferramenta de pesquisa do firefox que fica ao lado da barra de endereços, a pesquisa será feita automaticamente em outra aba, sem alterar o conteudo da aba atual.
Nome: browser.search.openintab
Status: user set
Type: boolean
Value: true

Determinar quantas abas podem ser exibidas de uma vez na tela


Pode fazer alguma diferença no desempenho, com essa opção você pode determinar quantas abas podem aparecer ao mesmo tempo na barra antes de aparecer a setinha de scroll no final da barra. Para isso, deve ser determinada a largura mínima aceita para as abas.
Nome: browser.tabs.tabMinWidth
Status: user set
Type: integer
Value: 250 (valor opcional, varia de acordo com a resolução que você usa, a 640×480 estou usando 200)

Você também pode alterar a largura mínima que uma aba deve ter para exibir o botão de fechar nela. Serve apenas se você está exibindo os botões de fechar em todas as abas.
Nome: browser.tabs.tabMinWidth
Status: user set
Type: integer
Value: 140 (valor opcional, só é necessário modificar caso esteja exibindo os botoes de fechar em todas as abas)

Reduzir tamanho do cache na memória


Essa dica torna o firefox muito (muito mesmo) mais leve que por padrão. Normalmente, o firefox guarda um cache em memória para acessar mais rapidamente arquivos estão sendo frequentemente requisitados por certos sites que está visitando. Estes arquivos podem ser por exemplo as imagens do layout aqui do fórum ou nossos avatares.
O problema é que este cache consome memoria ram, e pode gerar aquele consuno excessivo que geralmente se noticia no Windows (mais de 100 mb consumidos apenas pelo firefox com uma ou duas abas abertas). Portanto, é necessário desativar este cache para reduzir o consumo de memória. Isto pode prejudicar um pouco o desempenho na navegação (principalmente em conexao discada), pois certos arquivos deverão ser baixados novamente a cada página que se visita, mas que o consumo de memória diminui, isso sim, e como.
Nome: browser.cache.memory.enable
Status: user set
Type: boolean
Value: false

Ao invés de desativar, você também pode criar o seguinte valor para determinar o tamanho deste cache:
Nome: browser.cache.memory.capacity
Status: user set
Type: integer
Value: -1 (valor opcional, com “-1″ o firefox determina o tamanho do cache de acordo com a quantidade de memória física disponível)

Reduzir tamanho do cache na memória para o recurso de avançar/voltar


Mais uma dica quente. O firefox tem um cache separado para guardar as páginas do recurso de avançar/voltar. Este cache é de em média, 4mb POR PÁGINA, é claro que isso varia de acordo com a página. (não sei se este dado confere, peguei do site de referencia )
Por padrão, este ache é determinado de acordo com a memória física disponível, o que pode consumir um bucado de memória, principalmente se você tiver bastante memória no pc e boa parte estiver livre. Você pode diminuir este cache ou desativar.
Nome: browser.sessionhistory.max_total_viewers
Status: user set
Type: integer
Value: 0 (valor opcional, desativa o cache completamente)

Existem outras dicas no site que são mais relacionadas ao desempenho da conexão por exemplo, mas eu preferi me focar no consumo de recursos do navegador. Caso você saiba um pouco de Inglês vale a pena dar uma visitada no site.

Eu recomendo também baixar o Swiftfox, que é uma “distribuição” binária do firefox compilada e optimizada para diversos processadores diferentes. A diferença não chega a ser gritante, mas aqui por exemplo faz alguma diferença.
O importante é saber qual o seu processador e quais as flags de optimização que ele aceita, para então determinar qual a versão que deve ser baixada.

Espero que gostem, fiz tudo aqui e o navegador tá voando.

Autor: CidoLoco

Recomendado:Blog do CidoLoco

Extraido do forum slackbr

[]’s

Enviado em Dicas, Firefox, Outros, Redes | Tagged: , , , | 1 Comentário »

O que você vai ser quando crescer?

Escrito por VonNaturAustreVe em Março 25, 2008

Hi,all

Esse é um artigo excelente,gostei muito de ler ele,recomendo a leitura para todos que estão entrando no ramo da TI.

O que você vai ser quando crescer?

Introdução

Sei que você deve estar cansado de ouvir dicas das mais variadas e dos maiores gurus de RH do planeta sobre como conduzir sua carreira e pensa que este é mais um artigo que possui a mesma abordagem. Antes que pare a leitura, deixe-me explicar no que ele é diferente. Não sou guru de nada, não estou vendendo nada, não estou lhe dando fórmulas milagrosas, não estou dizendo que você vai ficar rico, não estou “faturando em cima” e tampouco afirmando que minha experiência serve para você. Somente gostaria de responder à algumas pessoas que, devido a artigos anteriores, enviaram-me longas mensagens com um ponto recorrente que posso resumir em uma pequena frase que é “o que fazer de minha vida”. Então ele é uma resposta à estas perguntas e também algumas dicas para os profissionais (ou futuros profissionais) da área de tecnologia.

Competição acirrada, menos postos de trabalho, maior facilidade para obtenção de conhecimento e automação de funções são algumas das variáveis que hoje fazem parte da equação de escolha duma carreira. Mas além destas variáveis também é possível citar o anseio manipulado das pessoas visando o consumismo, o status, o sucesso. A preocupação em obter este “sucesso” ou status desvirtua a tal ponto que esquecemos os caminhos que devem ser traçados para ao menos obter-se tranqüilidade na vida ou até mesmo este tão falado sucesso.

E o que tem a ver esta ladainha com a tecnologia? Se você está correndo atrás do sucesso e não sabe por onde, tem muito a ver.

O mundo tecnológico é aquele que hoje mais se aproxima da realidade de mercado e ao mesmo tempo o que mais se distancia desta. É daqueles que mais exige do profissional em todos os sentidos, sendo muitas vezes o algoz da destruição de lares, mas também é aquele que oferece a maior quantidade de oportunidades ou o já comentado sucesso para pessoas de todos os níveis. Se compararmos o mundo da tecnologia com o mundo da bola, vemos mais profissionais bem sucedidos e mais bem pagos no primeiro que no segundo. Claro que “ronaldinhos”, “kakás” e “pelés” são poucos, tais como são os “ellisons”, “gates” e “jobs”, mas isso não serve de parâmetro para a comparação. Costumo dizer que estes “seres” são iluminados de alguma forma, o que não está ao alcance da grande maioria (meu inclusive).

Mas o mundo da bola também nos oferece uma visão interessante sobre carreira e sucesso. Além do dom que alguns possuem, a lapidação de um craque com sucesso passa por duas fases distintas: a primeira que é o desejo de ser craque e a segunda o trabalho para ser craque. Estes são os pontos mais importantes e aqueles que a maioria das pessoas não consegue enxergar quando falamos de carreira na área tecnológica. Esquecemos que temos que desejar ser craques na tecnologia e temos também que trabalhar para sermos craques. Não é somente talento que tira um menino pobre dos campos de pelada, mas muito trabalho duro e o mesmo paralelo está na tecnologia.

O desejo de ser craque (ou “sou apaixonado por redes mas amo programação”)

Um pensamento no mínimo dúbio pois são áreas tão diferentes quanto é o futebol e o rugby (aquele futebol estranho com bola oval). Não é porque ambos tem traves e chuta-se uma bola que são iguais. Da mesma forma, não é porque redes e programação estão relacionadas com computador