RestricoesDeSeguranca - UFSC/moodle-provas-livecd-provas GitHub Wiki

Restrições de Segurança do LiveCD

Firewall IPv4 e IPv6

As regras básicas do firewall são instaladas pelo pacote moodle-provas no diretório /etc/iptables, há um arquivo para cada versão do protocolo IP: rules.v4 e rules.v6. O carregamento das regras é feito pelo script iptables-persistent, instalado em /etc/init.d/iptables-persistent.

Os objetivos das regras básicas são os seguintes:

  • Bloquear qualquer tipo de acesso a servidores externos.
  • Permitir a sincronização de data e horário com qualquer servidor NTP na porta 123.
  • Permitir consultas a servidores DNS.
  • Permitir acesso a servidores NFS caso o sistema seja iniciado via boot remoto.
  • Permitir acesso via SSH caso um usuário administrativo seja ativado na geração do LiveCD (somente para fins de diagnóstico).
  • Registrar em arquivos de log todos os pacotes negados na entrada e na saída.

Além das regras básicas instaladas pelo pacote moodle-provas, há também as regras de acesso a HTTP e HTTPS, elas são adicionadas na inicialização do sistema pelo script /opt/provas/start_user_apps.sh , baseado nos dados configurados no arquivo global de configuração. Os objetivos principais dessas regras adicionais são:

  • Permitir acesso ao servidor do Moodle Provas na porta 80 (HTTP) e 443 (HTTPS).
  • Permitir acesso ao servidor de autenticação via CAS na porta 443 (HTTPS).

OBSERVAÇÕES:

  • O endereço IP do servidor do Moodle Provas é obtido através do nome do host, definido no arquivo de configuração /opt/provas/moodle_provas.conf.
  • O endereço IP do servidor de autenticação CAS também é obtido através do nome do host, definido no arquivo de configuração /opt/provas/moodle_provas.conf.
  • A configuração dos arquivos de log do firewall é definida pelo arquivo de configuração /etc/rsyslog.d/21-firewall.conf, instalado pelo pacote moodle-provas.
  • O arquivo /opt/provas/moodle_provas.conf é instalado pelo pacote moodle-provas-config.

Teclas de atalho bloqueadas

SysRq

Combinações de teclas que envolvem a tecla SysRq são interpretadas diretamente pelo kernel Linux e permitem ao usuário executar alguns comandos de baixo nível, essa tecla é útil para finalizar o Xorg quando ele congela e para reiniciar o computador sem corromper o sistemas de arquivos, mas no LiveCD nada disso é necessário, portanto ela deve ser desativada. Mais detalhes sobre esta tecla em Magic SysRq Key.

A tecla SysRq é desativada pelo sysctl através do arquivo /etc/sysctl.d/10-moodle-provas.conf, que é instalado pelo pacote moodle-provas.

Ctrl+Alt+Fn

Esta combinação de teclas permite alternar do ambiente gráfico para os consoles em modo texto, Fn é uma das teclas de funções, que geralmente vão de F1 até F12.

Ela é desativada pela diretiva Option DontVTSwitch "true" no arquivo de configuração /usr/share/X11/xorg.conf.d/60-moodle-provas.conf instalado pelo pacote moodle-provas.

OBS: No modo multiterminal essa opção foi adicionada ao arquivo /opt/provas/multiseat/templates/xorg-seat#.conf.tpl, que é utilizado para gerar os arquivos de configuração do Xorg de cada seat. Neste modo, o arquivo /usr/share/X11/xorg.conf.d/60-moodle-provas.conf é desativado para evitar conflito nas configurações.

Ctrl+Alt+Backspace

Esta combinação de teclas permite ao usuário encerrar o Xorg, nas versões atuais do Xorg por padrão ela já é desativada, mas por precaução ela é desativada explicitamente nas configurações do LiveCD.

Ela é desativada pela diretiva Option "DontZap" "true" no arquivo de configuração /usr/share/X11/xorg.conf.d/60-moodle-provas.conf instalado pelo pacote moodle-provas.

OBS: No modo multiterminal essa opção foi adicionada ao arquivo /opt/provas/multiseat/templates/xorg-seat#.conf.tpl, que é utilizado para gerar os arquivos de configuração do Xorg de cada seat. Neste modo, o arquivo /usr/share/X11/xorg.conf.d/60-moodle-provas.conf é desativado para evitar conflito nas configurações.

Bloqueio de alguns comandos executáveis

Esta é uma restrição que não é eficaz sozinha, pois ela é baseada na remoção da permissão de execução para os usuários que não são o proprietário ou não estão no grupo proprietário do executável. Ela não é eficaz sozinha, pois o usuário poderia copiar o programa para seu HOME e utilizando o chmod dar permissão de execução a ele (Os comandos chmod e chown não devem ser desativados, sob pena de quebrar algum script de inicialização da sessão do usuário), por isso deve-se Remover a permissão de execução dos diretórios /home e /tmp também.

Os comandos bloqueados são adicionados à variável blocked_commands utilizando o caminho completo do executável e separados por um espaço em branco, esta variável está disponível no arquivo de configuração config/livecd_provas.conf, ela é utilizada no final da geração do LiveCD para remover a permissão de execução dos comandos listados.

Bloqueio de arquivos contra alteração

Não é viável deixar o HOME do usuário em modo somente leitura, pois alguns processos e os scripts de inicialização da sessão precisam gravar arquivos lá, e também não é eficaz apenas mudar o proprietário e o grupo proprietário de um arquivo, pois o usuário pode sobrescrever esses dados, já que o proprietário do HOME é ele próprio.

A única forma encontrada de proteger um diretório e seu conteúdo contra alterações no LiveCD foi montando o diretório em modo somente leitura, isso é possível utilizando o parâmetro --bind do comando mount e em seguida utilizando a opção remount,ro, estas ações são executadas pelo script /opt/provas/start_user_apps.sh, instalado pelo pacote moodle-provas.

Este recurso é utilizado apenas para proteger o arquivo de configuração da interface do navegador Firefox, arquivo userChrome.css.

Diretório /tmp independente para cada usuário

Esta é uma restrição adicionada especialmente para o modo multiterminal, mas que estará ativa mesmo em modo mono terminal. Ela faz com que um diretório /tmp seja montado para cada usuário que inicia uma sessão, proporcionando o isolamento deste diretório quando há mais de um usuário no sistema, desta forma os usuários do multiterminal não podem compartilhar arquivos entre si através do /tmp.

Esta funcionalidade é ativada da seguinte forma (tudo isso é instalado e executado pelo pacote moodle-provas):

  1. Adicionar a seguinte linha ao arquivo /etc/pam.d/common-session, após a linha session optional pam_umask.so.
session required  pam_namespace.so
  1. Criar o arquivo /etc/security/namespace.d/moodle-provas.conf com o seguinte conteúdo:
/tmp        /tmp/tmp-users/         level   root,provas
/var/tmp    /var/tmp/tmp-users/     level   root,provas
/dev/shm    /dev/shm/tmp-users/     level   root,provas

OBS: Os usuários listados na última coluna, são os usuários para os quais este recurso não será ativado ao iniciar uma sessão.

  1. Criar os diretórios listados na segunda coluna do arquivo criado no passo 2 com a permissão 000.
mkdir -pm 000 /tmp/tmp-users/
mkdir -pm 000 /var/tmp/tmp-users/
mkdir -pm 000 /dev/shm/tmp-users/

Remover a permissão de execução dos diretórios /home e /tmp

Remover a permissão de um diretório é possível se ele for montado como uma partição, adicionando o parâmetro noexec para o comando mount. Esta restrição é necessária no /home e /tmp, pois como existem comandos que foram bloqueados apenas removendo a permissão de execução, os usuários poderiam copiar o executável e adicionar a permissão de execução com o comando chmod, montando as partições com a opção noexec isso não será possível.

Adicionalmente pode-se bloquear binários com bit suid (opção nosuid) e bloquear dispositivos especiais (opção nodev).

Esta restrição é aplicada pelo pacote moodle-provas, através de um patch para o script do Casper responsável por gerar o arquivo /etc/fstab no boot, o patch altera o arquivo /usr/share/initramfs-tools/scripts/casper-bottom/12fstab, adicionando os parâmetros restritivos ao /tmp e adicionando a linha do /home com os mesmos parâmetros, ficando desta forma:

tmpfs /tmp tmpfs nosuid,nodev,noexec 0 0
tmpfs /home tmpfs nosuid,nodev,noexec 0 0

OBS: A opção noexec inibe a execução de arquivos somente na partição especificada, scripts que são executados com arquivos binários de outras partições que não possuem o parâmetro noexec, funcionarão, por exemplo um shell script chamado meu-script.sh gravado no HOME do usuário iniciado desta forma: $ bash meu-script.sh , será executado sem problemas.

Referências

Referências de configuração do Xorg.conf

Referências de configuração do /tmp independente para cada usuário

⚠️ **GitHub.com Fallback** ⚠️