Seguran¸a Inform´tica c a

2010-11

2o Gui˜o: Seguran¸a em sistemas operativos Linux a c
V 1.0

1

Introdu¸˜o ca

Com este trabalho pretende-se estudar os mecanismos de seguran¸a elemenc tares em sistemas operativos Linux. Neste trabalho dever´ apenas ser usada a a m´quinas virtual Linux. a

2

Login (entrada no sistema)

Para entrar no sistema ´ primeiro preciso fazer login. Para isso carregue e simultaneamente nas teclas Ctl+Alt+F1 para mudar para uma consola de comandos e fa¸a login com as credenciais (nome e senha) que o sistema j´ c a reconhece: aluno + naomelembro Como resultado de um processo de login correcto ´ criada uma sess˜o, e a que consiste na execu¸˜o de um interpretador de comandos (shell na termica nologia Linux).

3

Identidade

Execute o comando id Este comando indica a identidade subjacente a quem est´ a executar o ina terpretador de comandos. Analise os dados apresentados. Execute o comando cat /etc/passwd Este comando apresenta o conte´do do ficheiro que possui as identidades inu dividuais reconhecidas pelo sistema operativo. Verifique no conte´do apreu sentado a presen¸a dos utilizadores “root” e “aluno”. c Execute o comando cat /etc/group

1

u a e opcionalmente. e ca su) sudo adduser <nome> Ao executar este comando ter´ que introduzir a senha do utilizador que a o est´ a executar.Este comando apresenta o conte´do do ficheiro que possui as identidades de u grupos reconhecidas pelo sistema operativo. A consola gr´fica ´ obtida com Alt+F7 e. n˜o ir´ conseuir e ca a a que o mesmdo seja executado. Introduza os elementos pedidos pelo comando para acrescentar o novo utilizador ao sistema. que permite alterar os privil´gios de execu¸˜o para os de um administrador (super-user. Entre no sistema usando a identidade e a senha do utilizador que criou no passo anterior. sudo. Para a mudar de uma consola gr´fica para outra qualquer usa-se Ctl+Alt+Fx. recebendo uma mensagem de erro. uma segunda consola gr´fica. ca Execute o comando cat /etc/group e procure a informa¸˜o que introduziu respeitante ao novo utilizador. ca 5 Mudan¸a de utilizador c Mude para outra consola. Execute o comando cat /etc/passwd e procure a informa¸˜o que introduziu respeitante ao novo utilizador. normalmente inactiva. Execute o comando id 1 Para mudar entre consolas de texto apenas ´ necess´rio as duas teclas. Alt e Fx. Verifique no conte´do apresenu tado a presen¸a do utilizador “aluno” em diversos grupos e confronte o que c observa com o resultado apresentado pelo comando id. 4 Gest˜o de utilizadores a Execute o comando adduser <nome> para acrescentar o utilizador nome ` lista dos reconhecidos pelo sistema. a Como este comando requer privil´gios de administra¸˜o. onde e a x representa o n´mero da consola (de 1 a 6). com Alt+F8. ca Execute o comando finger <nome> e verifique a informa¸˜o que introduziu respeitante ao novo utilizador. para verificar que ´ mesmo esse utilizador que o est´ a a e a requerer. carregando simultaneamente nas teclas Alt+F2 (consola 2)1 . a 2 . Execute o mesmo comando precedendo-o de outro.

quem requer este comando precisa de a e introduzir a sua senha para verificar a sua identidade. A este utilizador nada ´ negado. o a A lista de sudoers e das limita¸˜es de seguran¸a aplic´veis a cada um deles co c a est´ indicada no ficheiro /etc/sudoers. Observe e interprete o resultado. Observe e interprete o resultado. a Execute o comando sudo id e verifique o resultado obtido. Obtenha ca o PID (Process ID) do interpretador de comandos do utilizador “aluno” e use-o para terminar o seu interpretador de comandos. Repita o comando anterior usando o PID do interpretador de comandos do utilizador actual da consola 2. 7 Utilizador root O utilizador root ´ o super-user do Linux. e e tudo ´ permitido.1 Comando sudo O comando sudo <comando> permite executar o comando indicado como parˆmetro com a identidade de root. O seu ID ´ e e e 0 (por defini¸˜o). Repita o comando anterior usando a op¸˜o -9: ca kill -9 <PID> Observe o resultado e explique o que aconteceu.para verificar a identidade do utilizador que est´ a executar o interpretador a de comandos. ca 7. a Volte ` consola 1 com as teclas Alt+F1. Execute novamente comando sudo id 3 . Para isso dever´ ser a usado o comando kill <PID> onde PID representa o identificador antes obtido. 6 Interac¸˜o entre processos ca Na consola 2 execute o commando ps -au para listar todos os processos em execu¸˜o nas consolas no sistema. Ele ´ o administrador omnipotente do Linux. O comando sudo s´ est´ autorizado aos utilizadores chamados sudoers. Para que este aumento de privil´gios a e seja autorizado a quem n˜o ´ root.

como o ls que usou anteriormente. u 7. Mude para a consola 2. o qual n˜o pode ser alterado livremente por qualquer utilizaa dor. Se a protec¸˜o associada a um comando possuir este bit activo. Este comando ca e permite mudar o UID de um processo para o UID 0 (root). Use o a u comando sudo para ultrapassar a limita¸˜o encontrada. Este comando ir´ alterar o conte´do de um ficheiro protegido onde a u est˜o guardadas informa¸˜es sobre as senhas dos utilizadores reconhecidos a co pelo sistema. o que constitui uma opera¸˜o privilegiada (eleva¸˜o de privil´gios). ca ca e A maneira como se lida com este dilema no Linux ´ com o mecanismo e de Set-UID.2 Mecanismo de Set-UID Certos comandos podem ser executados por qualquer utilizador mas realizam ac¸˜es que s´ est˜o reservadas para administradores. fa¸a login. e execute o c comando ps -au 2 Eventualmente tal poder´ ter acontecido na primeira vez que executou este comando. fazendo ls -la /bin/ls Compare as protec¸˜es indicadas e observe as diferen¸as. a 4 . Outro exemplo de comando que precisa de fazer ac¸˜es privilegiadas co mas sob invoca¸˜o de utilizador qualquer ´ o comando sudo. Um exemplo de co o a tais comandos ´ o passwd. liste as protec¸˜es de um comando ca co banal. Observe e interprete ca o conte´do do ficheiro. ca ent˜o o UID do processo onde o comando ser´ executado ser´ o UID do a a a ficheiro com o programa do comando. co c Execute o comando passwd na consola corrente (1). a a Explique a l´gica deste comportamento ` luz da defini¸˜o de pol´ o a ca ıticas de seguran¸a. que permite alterar a senha de um determinado e utente. usando c ca ls -la /usr/bin/sudo Para esabelecer um termo de compara¸˜o. Observe a protec¸˜o do comando passwd usando o comando ca ls -la /usr/bin/passwd Fa¸a o mesmo em rela¸˜o ao comando sudo. c Execute o comando cat /etc/sudoers e verifique que n˜o consegue observar o conte´do do ficheiro indicado.e verifique que j´ n˜o precisou de introduzir a senha do utilizador corrente2 . em vez do UID do utilizador que invocou o comando.

o grupo seu dono (identificado por um GID) e os demais. Escreva o conte´do do e u ficheiro (n˜o edite!) e termine com Ctr-D (c´digo Unix de fim de ficheiro). e ca alterados ou executados (rwx). ca Crie um ficheiro na directoria corrente atrav´s do comando e cat > <nome> onde <nome> ´ o nome do ficheiro que quer criar. n˜o ca e a mais nem menos: o utilizador seu dono (identificado por um UID). co A protec¸˜o de um ficheiro ´ indicada para 3 entidades distintas. 8 Protec¸˜o de ficheiros ca Os ficheiros tˆm uma protec¸˜o base que permite indicar se podem ser lidos. a o Vamos assumir que o ficheiro se chama “tralha”. o grupo seu dono. Explique porquˆ.1 Perten¸a e protec¸oes c c˜ Verifique a protec¸˜o do ficheiro “tralha” com o comando ca ls -la ou ls -la tralha Verifique quem ´ o utilizador seu dono. 8. e quais as proe tec¸˜es do ficheiro para estas duas entidades e para os demais. Volte ` consola 1 e termine o comando em curso.Verifique qual ´ o User ID (UID) dos processos associados ao TTY tty1 e (consola 1). alterando ou n˜o a a a senha do utilizador corrente. co 8. e Reponha o direito de leitura do utilizador dono do ficheiro “tralha” usando o comando 5 .2 Efeito da protec¸˜o de leitura ca Observe o conte´do do ficheiro com o comando u cat tralha Remova o direito de leitura do utilizador dono do ficheiro “tralha” usando o comando chmod u-r tralha Liste novamente o conte´do do ficheiro com o comando u cat tralha e verifique a impossibilidade de o fazer. O comando ls -la permite observar a protec¸˜o de um dado ficheiro. a Interprete os resultados. Este ultimo s´ tem interesse para ficheiros ´ o que possuam comandos (ou aplica¸˜es). os quais dever˜o estar a executar os comandos bash e passwd.

Explique porquˆ. Liste u a o conte´do do ficheiro com o comando u cat tralha Remova o direito de escrita do utilizador dono do ficheiro “tralha” usando o comando chmod u-w tralha Acrescente novamente conte´do ao ficheiro “tralha” com o comando u cat >> tralha e verifique a impossibilidade de o fazer. e Reponha o direito de escrita do utilizador dono do ficheiro “tralha” usando o comando chmod u+w tralha 8./myls -la Verifique a impossibilidade de o fazer. e Reponha o direito de execu¸˜o do utilizador dono do ficheiro “myls” ca usando o comando chmod u+x myls 6 . Execute o comando myls fazendo o . Explique porquˆ.4 Efeito da protec¸˜o de execu¸˜o ca ca Acrescente conte´do ao ficheiro “tralha” com o comando u cat >> tralha Copie o comando ls para a directoria corrente usando o comando cp /bin/ls myls A c´pia passou a chamar-se “myls”.3 Efeito da protec¸˜o de escrita ca Acrescente conte´do ao ficheiro “tralha” com o comando u cat >> tralha Escreva o conte´do extra do ficheiro (n˜o edite!) e termine com Ctr-D.chmod u+r tralha 8./myls -la Verifique o que resultado ´ igual ao que acontece com o comando ls. e Remova o direito de execu¸˜o do utilizador dono do ficheiro “myls” ca usando o comando chmod u-x myls Execute novamente o comando myls fazendo .

done rm files Criada a hierarquia reduzida abaixo da directoria newroot. /bin/bash Ap´s a execu¸˜o deste comando. e n˜o toda a hierarquia c a a a que come¸a na raiz real do sistema de ficheiros. i <= NF. bin e lib. i++) print $i}’ | grep ^/ | sort | uniq | sed -e s#^/## > files for i in ‘cat files‘. N˜o ser´ poss´ a a ıvel. a a cd /tmp mkdir newroot cd newroot mkdir bin mkdir lib cp /bin/bash /bin/ls /bin/mkdir /usr/bin/vi bin ldd bin/* | awk ’{for (i = 1. do mkdir -p ‘dirname $i‘. ls. mkdir. vamos criar uma pequena hierarquia de ficheiros com duas subdirectorias. c Na experiˆncia seguinte vai-se criar um ambiente de execu¸˜o de coe ca mandos onde apenas existir˜o os comandos bash. A primeira ter´ os comandos acima indicados. ca Para isso.e execute-o novamente. que ver´ como raiz. cp /$i $i. a aplica¸˜o s´ “ver´” uma hierarquia de ficheiros que ca o a come¸ar´ numa dada directoria. ca ca O comando chroot (change root) permite confinar a vis˜o que uma a aplica¸˜o possui do sistema de ficheiros. verifica-se que o interpretador de o ca comandos est´ a trabalhar num ambiente confinado. com o vi. Este comando altera a noc¸˜o ca ca que a aplica¸˜o (o seu processo) ter´ da directoria raiz (root) do sistema ca a de ficheiros. os limites do que a aplica¸˜o pode fazer no sistema. Assim. por exemplo. ou alterar ficheiros existentes. e vi. apagar ficheiros ou alterar a sua localiza¸˜o. Cona finar significa limitar de alguma forma mais agressiva a sua liberdade de actua¸˜o. podemos listar o seu conte´do com u ls -lR Agora vamos executar o comando bash que est´ na directoria bin a indicando-lhe como directoria raiz a directoria actual (/tmp/newroot): sudo chroot . Neste a ambiente ser´ poss´ listar os ficheiros existentes com o ls. 9 Confinamento Por vezes interessa confinar o ˆmbito da actividade de um programa. com um sistema de a 7 . a a segunda ter´ as bibliotecas dinˆmicas que os mesmos usam. criar directorias a ıvel com o mkdir e criar novos ficheiros.

O coment´rio faz com que a linha deixe de estar activa. a distribui¸˜o de Linux que se est´ a usar n˜o verifica se as a ca a a senhas escolhidas pelos utentes s˜o ou n˜o fracas. ´ como se n˜o existisse. Uma senha fraca ´ uma a a e senha que pode ser descoberta com um ataque de pesquisa “inteligente”.d/common-password cont´m os procedimentos comuns e aos processos de altera¸˜o de senhas. designada por PAM (Pluggable Authentication Modules).ficheiros reduzido: ls -l / Pode verificar que apenas consegue executar os comandos anteriormente copiados e mais nenhuns.1 Altera¸˜o das pol´ ca ıticas de seguran¸a via PAM: detec¸˜o c ca de senhas fracas O ficheiro /etc/pam. e altere o ıcio valor do parˆmetro minlen da primeira para 10. onde s˜o feitas tentativas com um conjunto de senhas prov´veis (dicion´rio a a a de senhas). Para alterar esta pol´ ıtica pode-se alterar a forma como s˜o controlaa dos os procedimentos de altera¸˜o de uma senha. ca Para facilitar o processo que se segue passe a executar comandos como root. Uma senha fraca compromete a seguran¸a do sistema porque c permite que o seu dono seja facilmente personificado por terceiros. uma senha a 8 . a qual permite efectuar diversas opera¸˜es comco plementares ou alternativas relacionadas com os processos de autentica¸˜o ca de pessoas.so use_authtok nullok md5 Retire o cardinal do in´ dessas linhas. a e a Procure abaixo duas linhas com o seguinte conte´do: u # password required # password required pam_cracklib. atrav´s do comando e sudo bash 10. Esses procedimentos s˜o ca a controlados por uma arquitectura modular.so nullok obscure md5 Comente esta linha introduzindo um cardinal (#) no seu in´ ıcio. Desta forma. Edite esse ficheiro e procure uma linha ca com o seguinte conte´do: u password required pam_unix. tornando-as activas. Vamos ent˜o alterar o procedimento de altera¸˜o de uma senha a ca de modo a incluir a valida¸˜o da robustez da nova senha proposta.so retry=3 minlen=6 difork=3 pam_unix. 10 Pol´ ıtica de verifica¸˜o de senhas de login ca Por omiss˜o.

a a Mude novamente de consola. Mantenha a consola anterior para o root para poder corrigir algo de dr´stico que aconte¸a!. a c Altere a senha do utilizador corrente com o comando passwd Experimente dar uma senha nova com menos de 10 caracteres. etc. e que s´ se pode repetir uma senha ap´s ter alterado com sucesso e o o para trˆs outras senhas. o qual possui o valor 5. “exercices”. Para isso ´ preciso primeiro configurar o insa e talador de packages para ir procurar o m´dulo nos locais correctos. O que acontece ´ fruto da parametriza¸˜o extra e e ca 3 Pode ser verificado qual ´ atrav´s do comando ifconfig. ligue a m´quina Linux ` rede (usando NAT. ıcio c Feito isto. a a configure a placa de rede usando o comando dhclient ethX . Edite o o ficheiro /etc/apt/sources. por exemplo). Experimente tamb´m alterar a senha para uma quase igual. Verifique que por vezes o m´dulo de verifica¸˜o PAM n˜o permite a altera¸˜o o ca a ca da senha por considerar que a nova ´ demasiado f´cil de adivinhar (por ser e a demasiado curta ou demasiado f´cil de adivinhar com um dicion´rio de sea a nhas). e a e a Agora ´ preciso ir buscar o m´dulo PAM pam cracklib. e experimente alterar a senha alternando entre duas aceit´veis.so use_authtok nullok md5 e acrescente ` mesma o parˆmetro remember=2. Experimente depois com uma senha maior mas que seja um conjunto de uma ou mais palavras inglesas (“elephant”. e n˜o como c a root. Verifique que a alternˆncia a a ´ negada. “googlerules”.list e retire o coment´rio (retire o cardinal) a do in´ de todas as linhas que come¸am por #deb .so. “mypassword”. o qual n˜o e o a vem instalado por omiss˜o.).n˜o poder´ ter um comprimento inferior a 10 caracteres e ser´ validada a a a atrav´s de um dicion´rio se ´ ou n˜o robusta. A diferen¸a autorizada entre as senhas ´ controlada a c e pelo parˆmetro difok. e e 9 . onde o dever´ ser o n´mero que o sistema atribuiu ` interface de rede3 e a u a execute os comandos apt-get update e apt-get install libpam-cracklib Numa consola diferente fa¸a login como um utente comum. diferindo at´ e e um m´ximo de 5 letras. para a do utente normal. a Na consola onde est´ como root edite novamente ficheiro a /etc/pam/common-password e procure a linha password required pam_unix.

que se adicionou: o sistema passou a memorizar as duas ultimas senhas para ´ al´m da corrente. 10 . e impede que o utente reutilize com demasiada frequˆncia e e a mesma senha.