2

Segurança pessoal no Linux

É comum falarem de OWASP Top 10 e assuntos derivados para ensinar como proteger aplicações web. Mas não adianta de nada proteger a aplicação se os desenvolvedores da aplicação estão inseguros.

Eu diria que o mínimo que é esperado para desenvolver um sistema seguro, é primeiro os desenvolvedores estarem seguros. Se os devs estão vulneráveis, vai tudo barranco abaixo.

Nesse post eu vou ensinar quem usa Linux a se proteger imaginando que a ameaça seja um APT (Advanced Persistent Threat). Isso é "over" para 99% dos casos, mas hoje em dia se você não é paranóico o louco é você.

Enfim, bora lá botar o OPSEC em dia. o/

Superfície de ataque

Tira da cabeça que o único risco que você está correndo é "baixar malware" ou "phishing". Não é simples assim.

Todo software que você usa que se conecta com algum serviço na internet e obtém dados que pode ser controlados por um terceiro (a ameaça), é uma superfície de ataque ao seu sistema. Isso vale para o seu navegador, jogos multiplayers, clientes do Slack, Discord, Spotify etc.

É simples avaliar:

  1. Se conecta com a internet?
  2. Obtém e trata dados que outro usuário pode controlar?

Se a resposta for "sim" para as duas perguntas, é uma superfície de ataque.

Ainda não acabou. Qualquer software que você use para abrir um arquivo que veio da internet, também é uma superfície de ataque. Isso vale para, por exemplo, um visualizador de PDFs.

Ainda não acabou. Também é uma superfície de ataque softwares (incluindo jogos) que se atualizem automaticamente. Pois nem todo desenvolvedor faz um trabalho decente e acaba implementando um sistema de atualização automático que não verifica a procedência do patch baixado e simplesmente aplica a atualização. Permitindo assim que um MITM execute código na sua máquina.

Calma, não acabou. Também é superfície de ataque qualquer serviço que rode na sua máquina que abra um socket de rede. Ele pode ser atacado por outras máquinas conectadas na mesma rede que a sua. E não, evitar se conectar em WiFi público não é o suficiente.

Também é superfície de ataque extensões que você usa no seu editor de código (como VSCode), dependências do seu projeto e qualquer outro meio que exista de executar código de terceiros na sua máquina.

O que você deve aprender

First things, first. É essencial que você aprenda como as coisas funcionam por debaixo dos panos no seu sistema para ser capaz de protegê-lo. Então aprenda sobre redes, serviços, hardware, sistemas operacionais etc.

Também aprenda a consertar seu próprio computador. Você não pode confiar em um técnico qualquer, ele pode adulterar o hardware ou o firmware do seu PC.

Quebrou? Conserta você. Não sabe consertar? Taca fogo e compra um novo. Não tem dinheiro pra isso? Se fodeu.

Dicas de proteção

Enfim, vamos logo para as dicas de como se proteger porque é para isso que você está aqui. As dicas são focadas em usuários de Linux, mas muitas são genéricas e podem ser aplicadas em outros sistemas operacionais.

Se você usa Windows, a melhor dica de segurança que eu posso lhe dar é parar de usar Windows. Se não quer usar Linux então usa MacOS, FreeBSD ou qualquer outro sistema operacional de verdade.

1. Criptografia de disco

Se você instalou seu sistema em um disco não encriptado, já começou errado. Qualquer um com acesso físico ao seu PC pode obter seus dados, códigos fonte, possivelmente senhas etc. Além de poder adulterar seu sistema instalando um rootkit nele. Não tem limites. A pessoa pode fazer literalmente o que ela quiser e não há senha que impeça.

Então pega a ISO da tua distro, reinstala e dessa vez usa o LUKS. E com uma senha segura, pelo menos uns 20 caracteres de comprimento. Assegure-se que a swap esteja em unidade encriptada também, já que ela pode conter dados sensíveis.

2. Pendrive com live CD

Sempre tenha de prontidão um pendrive com um Linux bootável em live CD, ele vai ser seu "porto seguro" caso você acredite que seu sistema esteja comprometido. Se for o caso, você desliga o PC na ignorância (segura o botão ou puxa da tomada), boota o Linux no seu pendrive e faz o que achar melhor (formata, verifica o sistema. Sei lá).

Certifique-se de não manter esse pendrive plugado por aí. Ele é sua última esperança.

Sugiro dar uma olhada no Ventoy. Pesquisa aí no Google para descobrir o que é.

3. Firewall

Usa nftables aí, irmão. Você sabe o que é um firewall, não vou perder tempo explicando.

4. Sandboxing

Você já aprendeu a analisar quais softwares são superfície de ataque no seu sistema. Agora isole eles como se fossem prisioneiros.

No Linux existem umas paradinhas chamadas namespaces e seccomp que pesquisando no Google você vai descobrir o que é. Para resumir, são recursos do próprio kernel que permitem fazer um sandboxing bastante seguro de processos.

Use e abuse de Firejail e/ou um Docker ou Podman da vida para isolar toda superfície de ataque que você conseguir. Remova toda capabilitity que for possível remover. Remova acesso à rede se o software não precisa (como visualizador de PDFs). Enfim, capa o desgraçado do processo. Deixa ele de castigo. :D

Mas com ciência de que isso não é 100% seguro. Ainda existe a possibilidade de um código malicioso explorar uma vulnerabilidade no kernel para fazer um sandbox escape (SBX).

Aproveitando o assunto, atualize seu kernel...

5. VM e MicroVM

Sandboxing é bom, principalmente para máquinas mais modestas. Mas se quiser um bom nível de segurança, o lance é usar máquinas virtuais. Você pode usar Qemu para criar e gerenciar máquinas virtuais para diversos usos, como: navegador, VSCode etc. e isolar processos importantes, que podem ser superfície de ataque, cada um em sua VM.

Rodar VM é pesado, então para conseguir melhor performance use Qemu com KVM ao invés de um Virtualbox da vida. O ChatGPT vai te ensinar a configurar para obter melhor performance.

Se quiser fazer ainda melhor, você pode rodar MicroVMs. Que são como VMs normais só que capada de recursos, fazendo com que elas fiquem muito mais leves e com uma superfície de ataque muito menor para um VM escape. Veja sobre o smol machines e o Firecracker (da AWS).

6. Proteger portas USB

Você pode configurar udev rules para bloquear todo dispositivo USB conectado no seu PC por padrão e apenas permitir dispositivos em uma whitelist, que seriam os dispositivos que você usa (seu mouse, pendrive etc.)

Desse jeito, qualquer dispositivo USB inserido na máquina que não esteja na whitelist, vai ser rejeitado.

Isso te protege contra ataques com dispositivos BadUSB.

7. Kernel hardening

Se você pesquisar no Google por "Linux kernel harderning" vai encontrar várias dicas de configuração. Não vou repetir o que se acha fácil no Google, mas vou dar umas dicas extras.

Veja o projeto Linux Kernel Runtime Guard (LKRG) e aprenda a configurar SELinux e/ou AppArmor.

Também considere que você pode compilar o kernel por você próprio e habilitar somente os recursos do kernel que você realmente precisa. Isso diminui a superfície de ataque para explorar uma vulnerabilidade no kernel.

8. Rede local

Você precisa se preocupar em proteger a rede da sua casa, escritório ou onde quer que você conecte seu computador.

Senhas podem ser quebradas. Roteadores podem ter falhas de segurança que, inclusive, podem ser exploradas remotamente (por alguém que não está na sua rede).

Usar WPA2 e evitar se conectar em WiFi público não é o suficiente. Seja paranoico com isso. Não esquece que seu roteador é só mais um alvo de ataque, não é um deus invencível.

9. Ambiente host isolado

Se você tiver hardware bom o suficiente para isso, o melhor que você pode fazer para ter um sistema seguro é manter o sistema operacional host instalado na sua máquina totalmente isolado e só usar o PC normalmente de dentro de máquinas virtuais.

Desse jeito, em qualquer caso de comprometimento do sistema, somente uma máquina virtual é comprometida e não o seu sistema real.

O Qubes OS é um sistema operacional que faz isso por padrão.

Conclusão

Esquece esse negócio de número de malwares ou sei lá o quê. Segurança é mais complexo do que isso. E aceita que Linux é mais seguro que Windows. :D

Carregando publicação patrocinada...
1

Muito massa os tópicos que apresentou, só achei engraçado você trazer vários pontos necessários para tornar o Linux mais seguro e no final colocar "E aceita que Linux é mais seguro que Windows" kkkkkkkkkkkkkkk.
Tenho uma dúvida bem leiga: rodar várias dessas camadas de segurança/bloqueio não deixa a operação nominal do pc mais lenta (perceptível)? Lógico que toda segurança é pouca, mas no dia a dia, caso tenham vários processos rodando para manter todos esses fatores, não causa perda de performance no S.O?
Vou salvar o post para aplicar algumas dessas seguranças no meu pc, vlw!

1

No geral, a única coisa que vai causar impacto significativo na performance vai ser usar VM. Se você seguir todas as outras dicas e não usar VM, você não vai notar nenhuma perda de performance.

Sandbox no Linux é muito performático porque o core é implementado no próprio kernel. O mesmo pode ser dito sobre o firewall.

Agora, a perda de usabilidade vai ser notavelmente grande em algumas das dicas. O PC vai ficar mais chato/complicado de usar. 🫡