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

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

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

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

SUID

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

Arquivos com SUID: -rwsr-xr-x

SGID

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

Exemplo de exploit escrito em C

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

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

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


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


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

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

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

Executando o comando acima no gentoo retorna a seguinte lista.


#  less suidfiles.txt

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

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

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

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

Referências:
http://tldp.org/HOWTO/Security-HOWTO/file-security.html
http://www.gentoo.org/doc/pt_br/security/security-handbook.xml?part=1&chap=6
http://www.homepage.montana.edu/~unixuser/051602/SUID.html
http://www.hoobie.net/security/exploits/index.html

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

6 Responses to “Segurança Linux Dicas básicas – Permissão Arquivos – parte 1”

  1. via Rec6 disse:

    Seu servidor é seguro ?…

    Neste post mostro que às vezes esquecemos de conceitos básicos de segurança. Confira ! …

  2. Oi Marlon, legais os artigos.
    Para que o exemplo em C funcione, poderia:

    1) Corrigir os includes, que ficaram apagados?
    2) Explicar que o root precisa antes setar SUID e SGID para o executável funcionar como esperado?

    Fiquei na dúvida também :)

    Coloca uns exemplos em python ai também.

    Falou!
    Rogério Schneider

  3. marlon petry disse:

    Opa Rogério

    É um grande prazer receber um comentário do amigo.

    Foi corrigir os includes e informar que o root precisar setar o código compilado com o atributo SUID.

    Vou colocar um chat em python em breve

    Valeu Muito Obrigado

  4. E ai!
    Voltei a esse tópico novamente!
    Agora ele ficou certinho, valeu.
    Que tal colocares também algo sobre preload? Isso é interessante, como forma de explorar acesso em Linux.
    Cara, eu não recebo e-mail quando tu responde ao comment, pq será?

    Att,
    Rogério Schneider

  5. Marlon Petry disse:

    Rogério

    Antes os comentários do blog não enviavam email, agora com o novo layout coloquei essa característica.

    Seus comentários são sempre bem vindos, irei pesquisar sobre preload no momento desconheço.

    Atenciosamente,
    Marlon

Leave a Reply