Seguraça extrema com LIDS

Este artigo nos introduz ao LIDS (Linux Intrusion Detection System), um sistema robusto que aplicado como patch no kernel nos oferece recursos extremos de configurações de segurança do sistema operacional.

[ Hits: 52.645 ]

Por: Anderson L Tamborim em 21/02/2004 | Blog: http://y2h4ck.wordpress.com


Conhecendo o LIDS



3.1 - /sbin/lidsadm & /sbin/lidsconf


O lidsadm é um software que usaremos para administrar nosso LIDS. Vamos dar uma analisada básica nele:

# lidsadm -h
lidsadm version 0.4.1 for LIDS project
       Huagang Xie <xie@gnuchina.org>
       Philippe Biondi <pbi@cartel-info.fr>

Usage: lidsadm -[S|I] -- [+|-][LIDS_FLAG] [...]
       lidsadm -V
       lidsadm -h

Commands:
       -S  To submit a password to switch some protections
       -I  To switch some protections without submitting 
           password (sealing time)
       -V  To view current LIDS state (caps/flags)
       -v  To show the version
       -h  To list this help 

Available capabilities:
           CAP_CHOWN chown(2)/chgrp(2)
    CAP_DAC_OVERRIDE DAC access
 CAP_DAC_READ_SEARCH DAC read
          CAP_FOWNER owner ID not equal user ID
          CAP_FSETID effective user ID not equal owner ID
            CAP_KILL real/effective ID not equal process ID
          CAP_SETGID set*gid(2)
          CAP_SETUID set*uid(2)
         CAP_SETPCAP transfer capability
 CAP_LINUX_IMMUTABLE immutable and append file attributes
CAP_NET_BIND_SERVICE binding to ports below 1024
   CAP_NET_BROADCAST broadcasting/listening to multicast
       CAP_NET_ADMIN interface/firewall/routing changes
         CAP_NET_RAW raw sockets
        CAP_IPC_LOCK locking of shared memory segments
       CAP_IPC_OWNER IPC ownership checks
      CAP_SYS_MODULE insertion and removal of kernel modules
       CAP_SYS_RAWIO ioperm(2)/iopl(2) access
      CAP_SYS_CHROOT chroot(2)
      CAP_SYS_PTRACE ptrace(2)
       CAP_SYS_PACCT configuration of process accounting
       CAP_SYS_ADMIN tons of admin stuff
        CAP_SYS_BOOT reboot(2)
        CAP_SYS_NICE nice(2)
    CAP_SYS_RESOURCE setting resource limits
        CAP_SYS_TIME setting system time
  CAP_SYS_TTY_CONFIG tty configuration
           CAP_MKNOD mknod operation
           CAP_LEASE taking leases on files
          CAP_HIDDEN hidden process
  CAP_KILL_PROTECTED kill protected programs
       CAP_PROTECTED Protect the process from signals

Available flags:
         LIDS de-/activate LIDS locally (the shell & childs)
         LIDS_GLOBAL de-/activate LIDS entirely
         RELOAD_CONF reload config. file and inode/dev of 
                     protected programs


Temos a lista de todos os "capabilities".

Com o lidsconf faremos as configurações do LIDS no nosso sistema, ou seja, o que iremos bloquear e o que iremos liberar. O lidsconf na sua instalação gera uma configuração padrão que podemos analizar assim:

# lidsconf -h
lidsconf version 0.4.1 for the LIDS project
       Huagang Xie <xie@gnuchina.org>
       Philippe Biondi <philippe.biondi@webmotion.net>

Usage: lidsconf -A [-s subject] -o object [-d] [-t from-to] 
                [-i level] -j ACTION
       lidsconf -D [-s file] [-o file] 
       lidsconf -Z
       lidsconf -U
       lidsconf -L [-e]
       lidsconf -P
       lidsconf -v
       lidsconf -[h|H]

Commands:
    -A,--add To add an entry
    -D,--delete      To delete an entry
    -Z,--zero        To delete all entries 
    -U,--update      To update dev/inode numbers
    -L,--list        To list all entries 
    -P,--passwd      To encrypt a password with RipeMD-160
    -v,--version     To show the version
    -h,--help        To list this help 
    -H,--morehelp    To list this help with CAP/SOCKET name

subject: -s,--subject subj
       can be any program, must be a file
object: -o,--object [obj]
       can be a file, directory or Capability, Socket Name
ACTION: -j,--jump
       DENY     deny access
       READONLY read only
       APPEND   append only
       WRITE    writable
       GRANT    grant capability to subject
       IGNORE   ignore any permissions set on this object
       DISABLE  disable some extersion feature
OPTION:
      -d,--domain       The object is an EXEC Domain
      -i,--inheritance Inheritance level
      -t,--time Time dependency
      -e,--extended     Extended list


Os comandos principais que usaremos serão:
  • lidsconf -L: lista as configurações atuais.
  • lidsconf -Z: zera as configurações.
  • lidsconf -U: Atualiza as configurações, sempre deve-se atualizar quando se acrescenta uma nova regra.

Como posso setar uma nova password:

# lidsconf -P
MAKE PASSWD
enter new password:
reenter new password:
wrote password to /etc/lids/lids.pw

A senha ficará escrita nesse arquivo com criptografia de 185 bits.

3.2 - Como dizer ao LIDS para recarregar minha configuração?


Bom, para que isso ocorra você deve ter selecionado esses esquemas no seu menuconfig:

[*] Allow switching LIDS protections  
     (3)  Number of attempts to submit password  
     (30) Time to wait after a fail (seconds)  
[ ] Allow remote users to switch LIDS protections  
[ ] Allow any program to switch LIDS protections  
[*] Allow reloading config. file <-----------


# lidsadm -S -- +RELOAD_CONF

Isso irá recarregar o seu LIDS com as novas configurações sem precisar reiniciar o kernel.

3.3 - Socorro meu sistema esta totalmente bloqueado


Bom, se isso acontecer você deverá bootar seu linux pelo kernel antigo (sem LIDS) e retirar todos os atributos de configurações existentes para deixar tudo zerado:

# /sbin/lidsconf -Z
# /sbin/lidsconf -U


Porque rebootar por outro kernel?
Por que provavelmente você não conseguirá acessar as configurações do LIDS pelo kernel rodando ele. Ele estará bloqueado por padrão.

3.4 - Sem rebootar a máquina como posso desabilitar o LIDS?


Para conseguir essa façanha, utilize este comando:

# lidsadm -S -- -LIDS_GLOBAL

Agora você terá o LIDS desabilitado e seu sistema estará totalmente desprotegido por ele, caso queira ligá-lo novamente utilize:

# lidsadm -S -- +LIDS_GLOBAL

3.4 - Como ver o status do meu LIDS?


O comando abaixo nos trará uma saída com as funções que estão em uso pelo kernel:

# lidsadm -V
VIEW
                     CAP_CHOWN 0
              CAP_DAC_OVERRIDE 0
           CAP_DAC_READ_SEARCH 0
                    CAP_FOWNER 0
                    CAP_FSETID 0
                      CAP_KILL 0
                    CAP_SETGID 0
                    CAP_SETUID 0
                   CAP_SETPCAP 0
           CAP_LINUX_IMMUTABLE 0
          CAP_NET_BIND_SERVICE 0
             CAP_NET_BROADCAST 0
                 CAP_NET_ADMIN 0
                   CAP_NET_RAW 0
                  CAP_IPC_LOCK 0
                 CAP_IPC_OWNER 0
                CAP_SYS_MODULE 0
                 CAP_SYS_RAWIO 0
                CAP_SYS_CHROOT 0
                CAP_SYS_PTRACE 0
                 CAP_SYS_PACCT 0
                 CAP_SYS_ADMIN 0
                  CAP_SYS_BOOT 1
                  CAP_SYS_NICE 0
              CAP_SYS_RESOURCE 1
                  CAP_SYS_TIME 0
            CAP_SYS_TTY_CONFIG 0
                     CAP_MKNOD 0
                     CAP_LEASE 0
                    CAP_HIDDEN 1
            CAP_KILL_PROTECTED 0
                 CAP_PROTECTED 0
                          LIDS 0
                   LIDS_GLOBAL 1
                   RELOAD_CONF 0


Página anterior     Próxima página

Páginas do artigo
   1. Introdução ao LIDS
   2. Instalando o LIDS
   3. Conhecendo o LIDS
   4. Configurando o LIDS
   5. Configurações básicas para o sistema
   6. Considerações finais
Outros artigos deste autor

SECtool - Análise Local para Linux

OpenVZ: Virtualização para servidores Linux

Análise Passiva: Analisando seu tráfego de maneira segura

PHLAK :: [P]rofessional [H]acker's [L]inux [A]ssault [K]it

Análise passiva (parte 2)

Leitura recomendada

Implementando segurança no SSH

John The Ripper - Teste de Quebra de Senhas

Recuperar a senha de root iniciando através do init=/bin/bash e alterando o arquivo /etc/shadow

Administrando Linux via web (parte 1)

Como saber se houve uma invasão

  
Comentários
[1] Comentário enviado por fabio em 21/02/2004 - 12:34h

Já cansei de ouvir falar sobre LIDS, mas como nunca dei a devida atenção para segurança, nunca tinha procurado saber do que se tratava. Lendo esse artigo agora posso afirmar, essa é uma ferramenta fantástica. Parabéns!

[2] Comentário enviado por viniciusr em 22/02/2004 - 00:44h

parabens spawn... D:
meu maninho :X
root (un)security comming...

[3] Comentário enviado por Copyleft em 22/02/2004 - 13:07h

Oi, muito bom o artigo, fiz tudo, estou apenas tendo algumas respostas diferentes em relacao as regras e duvidas (de lei:)).
/sbin/lidsconf -A -s /usr/local/apache/bin/httpd -o /etc/httpd -j READONLY
lidsconf: cannot find the object file
/sbin/lidsconf -A -o /etc/lilo.conf -j DENY
lidsconf: the type is less than default permssion, this rule is useless
Estes sao apenas alguns exemplos, na maioria esta funcionado, alguem sabe qual meu erro aqui, no FAQ do site parecem ser as mesmas...alguem sabe de outro local com algumas?
Estava lendo (um livro muito velho), nele recomenda-se deixar o
[ ] Security alert when execing unprotected programs before
sealing LIDS selecionado, qual valor vcs recomendam?
E a respeito do 30:CAP_INIT_KILL, melhor deixar + ou -?
Desde ja agradeco pela ajuda:)



[4] Comentário enviado por Copyleft em 22/02/2004 - 14:22h

Voltei, bom eu dei uma olha e vi que estas menssagens sao bugs...nao se deve usar o lidstools-0.5.1 e lidstools-0.5.2 com kernel 2.4.24, nesta ja aproveitei e instalei o kernel 2.6.2 com o lids-2.0.4pre1-2.6.2 e lidstools-0.4 (recomendado), pelo fato desta versao ter uns lances de bloquear worms em HTTP, FTP, POP3, mas ta em desenvolvimento...alguem aqui esta usando, caso esteja, ta dando muito pau?
Se colocar assim funciona:
lidsconf -A -o /etc/ipsec.secrets -j DENY
lidsconf -A -o /etc -j READONLY
Se inverter nao rola:
lidsconf -A -o /etc -j READONLY
lidsconf -A -o /etc/ipsec.secrets -j DENY
Tem este patch pra corrigir:
-------------------------------------------------------------
diff -u -r1.1.1.1 lidsconf.c
--- lidsconf.c 17 Feb 2004 06:20:27 -0000 1.1.1.1
+++ lidsconf.c 20 Feb 2004 05:29:07 -0000
@@ -802,7 +802,7 @@
exit_error(2,"you must define the default rules for object
files");
}
/* if current type have less persmission of defualt _rule */
- if( type < default_rule ) {
+ if( type < default_rule && !sys_cap ) {
exit_error(2,"the type is less than default permssion, this rule is
useless"); }
}
------------------------------------------------------------
Acho que devemos testar algumas coisas antes de publicarmos,principalmente o que envolve seguranca.
Em todo caso valeu pelo artigo publicado, desperto meu interesse nesta ferramenta, to gostando muito dela.
PS. To rodando no 2.6.2 e ta indo.

[5] Comentário enviado por y2h4ck em 23/02/2004 - 01:54h

CopyLeft se vc pudesse me adicionar em seu icq para conversarmos melhor sobre o LIDS... ficarei muito grato obrigado :)

[6] Comentário enviado por y2h4ck em 25/02/2004 - 17:41h

A proposito nao tive bug nenhum em minha instalacao creio que seria mais interessante reinstalar pq deve ter dado algum problema por ai ... aqui ele esta funcionando perfeitamente num servidor de missao critica com mais de 200 dias de Uptime ... portanto meu amigo ... antes de vc vir falar para mim testar algumas coisas ... acho melhor VC ver se esta fazendo a coisa direito ...
mas obrigado pelo post ate mais :)

[7] Comentário enviado por Copyleft em 26/02/2004 - 00:03h

Sem duvida nao eh aqui o erro, eh um bug, tanto que se vc perceber o patch foi escrito no dia idsconf.c 20 Feb 2004 05:29:07 , nao teria como ter sido eu que escrevi, sendo que instalei no dia 22, quem afirma que eh um bug eh o responsavel como segue:
It is a bug..try following patch


------------------------- cut here ---------------------------------------------------
diff -u -r1.1.1.1 lidsconf.c
--- lidsconf.c 17 Feb 2004 06:20:27 -0000 1.1.1.1
+++ lidsconf.c 20 Feb 2004 05:29:07 -0000
@@ -802,7 +802,7 @@
exit_error(2,"you must define the default rules for object
files");
}
/* if current type have less persmission of defualt _rule */
- if( type < default_rule ) {
+ if( type < default_rule && !sys_cap ) {
exit_error(2,"the type is less than default permssion, this rule is
useless"); }
}
---------------------- cut here -----------------------------------------------------------

The problem is, this checking should only performance on all the acl with a "SUBJECT", for
other acl without a "SUBJECT", you can do any thing you want..:-).

Thanks for reporting the bug! It will be release in next version.

Huagang

Desculpe se pareceu que quis desprestigiar seu trabalho, se vc diz que nao teve problemas acredito, nao uso icq por isso nao entrei em contato.

[8] Comentário enviado por removido em 15/12/2006 - 07:15h

Legal seu artigo, só não concordei com o título. O LIDS é uma ótima ferramenta que pode até fazer um sistema extremamente seguro, mas com as regras que você colocou no artigo, não achei o artigo corresponde com o título. Mas de qualquer modo parabéns por esse artigo e pelo seus artigos disponibilizados no site do LIDS. Principalmete pela tradução do artigo feito pelo criador do LIDS!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts