Reviravolta Digital

Reviravolta Digital

proteger-linux

É fácil ter uma falsa sensação de segurança, pensar que outro sistema operativo pode ser mais direccionado do que o Linux, mas há sempre riscos e vulnerabilidades para todos os tipos de dispositivos Linux. Mantenha-se atento, independentemente do seu sistema operativo.

Irei editar esta página à medida que vou encontrar novas formas de proteger o computador como uma forma de apontamentos.

USBGuard

Para diversão e segurança (e também um pouco de paranoia minha), pensei que seria boa idea fazer uma lista branca dos meus dispositivos USB de confiança e bloquear os outros todos.

Primeiro executas $ ln -s /dev/null /etc/systemd/system/usbguard.service de modo a fazeres unmask para que possamos trabalhar. E agora vamos instalar: $ pacman -S usbguard ou usando o pacote usbguard-git do AUR.

Configurar o USBGuard

A primeira coisa a fazer é criar uma política inicial que cria uma lista branca de todos os nossos dispositivos USB. Agora é uma boa altura para ligar dispositivos que tende a utilizar com frequência e em que já confia. É claro que podes fazer uma lista branca de dispositivos em qualquer altura.

$ usbguard generate-policy

O comando acima mostrará a lista dos seus dispositivos actualmente ligados com uma palavra-chave allow no início. Vamos guardar isto no ficheiro de configuração do USBGuard:

$ usbguard generate-policy > /etc/usbguard/rules.conf

E agora já é seguro desmascarar, iniciar e activar o daemon do USBGuard:

$ systemctl unmask usbguard.service
$ systemctl start usbguard.service
$ systemctl enable usbguard.service

Permitir dispositivos

Agora vamos supor que queres realmente desbloquear um dispositivo, porque ele veio de um amigo que confias. Primeiro executamos $ usbguard list-devices, mas aqui mostra todos incluindo os autorizados vamos por um filtro $ usbguard list-devices | grep block, deverás ver algo do tipo:

13: block id 0xxx:0xxx serial <...>

O comando que executamos acima também continha o número de identificação. Com isso podemos permitir esse dispositivo: $ usbguard allow-device 13.

Adicionar dispositivos à lista branca

A utilização do allow-device não faz uma lista branca do dispositivo para sempre. Digamos que compraste um disco externo novo e queres o adicionar a lista dos dispositivos permitidos. O USBGuard tem um comando chamado append-rule. Só precisas de colar toda a linha do dispositivo começando com a palavra-chave allow.

Insere o dispositivo e ver o registo do USBGuard:

$ usbguard list-devices | grep block

Deves ver algo do estilo:

21: block id 0xxx:0xxx serial <...>

Copias a linha toda começando por id e depois utilizá-la mas prefixando-a com a palavra-chave allow (atenção às aspas simples utilizadas para embrulhar toda a regra):

$ usbguard append-rule 'allow id 0xxx:0xxx serial <...>'

SSH

Essencialmente, é acesso remoto ao terminal dos teus dispositivos.

Se isto estiver activado e não o utilizas, é melhor então desactivá-lo.

$ systemctl disable sshd

e para que não seja ativo sem permissão ou por engano podemos mascarar o serviço:

$ systemctl mask sshd

Caso o utilizes:

Vais precisar de abrir configuração do servidor SSH que se encontra em /etc/ssh/sshd_config com sudo usando o teu editor preferido.

Primeiro que tudo é gerar um par de chaves SSH que consiste de uma chave pública e uma chave privada. A chave privada reside no teu sistema anfitrião enquanto a chave pública é então copiada para o servidor remoto.

Uma vez que a chave pública esteja copiada com sucesso, podes agora entrar sem problemas no servidor remoto sem ter de fornecer uma palavra-passe.

1). E agora passamos para o seguinte passo e primeiro passo, desativar entradas usando palavra-passe, isso pode ser ativado trocando o yes para no na diretiva PasswordAuthentication.

2). Trocar a porta padrão - sendo a mais óbvia a mudança. Muitos argumentam que isto é inútil, mas pelo menos vai dissuadir atacantes menos avançados. A porta padrão é 22 para todos. Altera a Port 22 para qualquer porta não utilizada. Se não tiveres a certeza de qual a porta ainda não foi utilizada, tenta 2222.

3). Desativar a ligação a contas que não têm palavra-passe, verifica se na configuração se tens a seguinte diretiva PermitEmptyPasswords e mudas para no.

4). Na configuração na parte que têm como título Authentication: vais por as estas diretivas da seguinte forma:

LoginGraceTime 600
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 10

Isto faz com que a pessoa tenha apenas 10 minutos para fazer um login sucessivo ou a ligação é fechada, terá 3 tentativas para acertar no método correto de login, só podem estar 10 sessões abertas ao mesmo tempo, o login por root é desativado e por fim, o StrictModes desactiva a utilização de autenticação de chaves públicas e privadas se os ficheiros necessários não forem devidamente protegidos.

5). Usar o protocolo de SSH 2 que pode ser feito inserindo a seguinte linha na configuração Protocol 2.

6). Deixar o teu PC sem vigilância durante longos períodos de tempo com uma ligação SSH inactiva pode representar um risco de segurança. Por isso vamos configurar um tempo de inactividade da ligação.

ClientAliveInterval 300
ClientAliveCountMax 0

Isto vai fazer com que o servidor verifique se existe atividade do cliente passado 5 minutos de inatividade.

7). Limitar o acesso para apenas algumas contas que podem entrar remotamente. Isso pode ser feito adicionando AllowUsers com os nomes de utilizadores que queres que tenham acesso separados por um espaço.

8). De forma opcional podes adicionar também TOTP (Time-Based One-Time Passwords) e ativar o login por palavra-passe para contas que tenham isto ativo. Instalas o seguinte pacote libpam-google-authenticator ou google-authenticator-libpam-git no AUR e configuras executando google-authenticator sem usar sudo na conta que queres ativar. Isto pode ser usado por exemplo para quando queres aceder remotamente e não tens a tua chave privada contigo sempre.

Quando tiveres configurado adicionas esta linha no fim auth required pam_google_authenticator.so e alteras as seguintes diretivas para yes: UsePAM e ChallengeResponseAuthentication.

9). Para mais segurança sugiro testar usando o SSHAudit e adicionar as recomendações de segurança em Guia da SSHAudit.

Fail2Ban

Isto é um serviço que dissuade os ataques por força bruta. Este programa digitaliza os registos e proibir temporariamente os IPs com base numa possível actividade maliciosa.

Para instalar o pacote do Fail2Ban executas: $ pacman -S fail2ban ou fail2ban-git usando o AUR.

Embora as configurações padrão do Fail2ban possam funcionar dependendo das necessidades do seu servidor, podes editar livremente o ficheiro de configuração Fail2Ban. Os ficheiros .conf são lidos primeiro, seguidos dos ficheiros .local, pelo que deverá fazer alterações aos ficheiros .local e deixar os ficheiros .conf intactos.

Para editar o ficheiro jail.conf copie-o para o jail.local usando o comando abaixo:

$ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Agora que copiaste, vais abrir com o teu editor preferido em sudo, encontras o local que começa por [sshd]. E adicionas enabled = true e editas conforme achas que ficará melhor.

Firewall de rede

Isto pode impedir a comunicação entre os spywares/trojans e os servidores deles, que de qualquer forma são raros no Linux, e também impedir as aplicações de recolher informações desnecessárias.

Opensnitch faz um trabalho excelente nisto, tem um GUI que te avisa sempre que uma aplicação quer utilizar a Internet.

Podes instalar usando o AUR opensnitch-git e assim que tiver instalado inicias o daemon $ sudo systemctl start opensnitchd.

Scanner de Malwares/Rootkits

Eu não diria que isto é realmente necessário, mas se tens a certeza ou pensas que tens um malware, então podes executar um scan instalando os seguintes softwares:

ClamAV que podes encontrar no AUR com o nome de clamav-git e o chkrootkit.

Sandboxing

Aqui vou sugerir o firejail que é o que eu uso também, começamos por instala-lo $ pacman -S install firejail ou firejail-git no AUR.

Como utilizar o Firejail

A utilização do Firejail é bastante simples. Digamos que queres abrir uma instância do Firefox. Então, voltas à janela do terminal e executas o comando: firejail firefox.

Poderás descobrir que não tens som das aplicações sandboxed com Firejail. Se esse for o caso, executa o comando: $ firecfg --fix-sound.

Se estiveres a utilizar o Firejail numa distribuição de ambiente de trabalho, vais querer integrá-la no ambiente de trabalho executando: $ firecfg e depois sais e voltas a entrar.

A advertência e o reparo

Um problema que poderás encontrar é que as aplicações sandboxed não terão acesso aos ficheiros e pastas do sistema. Por exemplo, digamos que executas o comando firejail firefox e depois tenta fazer upload de um ficheiro. O Firejail pode impedir isso. A forma de resolver isso é simples.

1). Abres terminal e executas o comando mkdir -p ~/.config/firejail. 2). Entra no directório recentemente criado com o comando cd ~/.config/firejail. 3). Copia o perfil padrão do Firejail para o directório onde te encontras com o comando cp /etc/firejail/firefox.profile ~/.config/firejail/. 4). Edita o perfil recém-criado para se adequar às tuas necessidades.

Digamos que precisa de fazer upload ficheiros que se encontram no directório ~/Documentos. Editas o ficheiro de perfil local do Firefox, e por baixo das linhas do noblacklist adicionas whitelist ${HOME}/Documentos, caso queiras que a aplicação possa apenas ler a pasta dos Documentos trocas o whitelist para read-only. E por fim, salvas o ficheiro.

Eliminação segura de ficheiros

Ao contrário da crença popular, apagar um ficheiro não o apaga de facto, realmente estás é à espera que esse mesmo seja substituído por um novo ficheiro, o que significa que pode ser facilmente recuperado. Embora a encriptação completa do disco resolva este problema (contra roubo), não impede que um malware recupere ficheiros confidenciais.

Instala o pacote do Secure Delete no AUR: secure-delete

Como usar

  • Apagar um ficheiro: srm /localização/do/ficheiro

  • Limpar o espaço livre (ou seja, apagar ficheiros normalmente apagados): sfill /

  • Limpar a memória swap: sswap /caminho/da/partição

Muito cuidado com este comando, certifica-te que estás a introduzir a partição swap correcta, Podes encontrar a tua partição ao fazeres cat /proc/swaps

Auditoria do sistema

Uma boa ferramenta de segurança e auditoria de sistemas, podes instala-la usado o AUR procurando por lynis-git

Outra boa ferramenta é o arch-audit-gtk que notifica-te sobre actualizações de segurança em falta, e pacotes vulneráveis. Com suporte para Tor para pedidos anonimos. Embora, esta farramenta já se encontra no lynis, instala apenas se quiseres ter uma aplicação de bandeja e notificações.

Backups

Não sei quantas preciso de dizer as pessoas, mas nunca deixa de me surpreender que as pessoas ficam surpresas que, se não fizerem cópias de segurança dos seus dados, estes desaparecerão, se a unidade sofrer uma pancada na cabeça ou se alguem por engano clicas em "apagar". Faz sempre uma cópia de segurança do teu sistema, mesmo que sejam apenas os ficheiros de configuração, poupas tempo e dinheiro no longo prazo.

Para backups locais num disco externo sugiro: $ pacman -S install rsync com rsync-time-backup ou com linux-timemachine-git no AUR.

Para backups num servidor remoto sugiro: $ pacman -S install borg ou borg-git no AUR.

Mas lembrem-se que, a segurança absoluta não existe. Tudo se resume ao teu Modelo de ameaça.