TL;DR: Ao contrário da crença popular, todo sistema é vulnerável a falhas de segurança.
A frase acima pode te deixar paranoico, mas infelizmente nenhum sistema é completamente seguro, e para entender isso é necessário entender o que são programas de computador e definir o que é segurança.
Todo programa (ou software) é um aglomerado de instruções, códigos com algum propósito. Vamos usar um exemplo de um simples player de música, que também é um programa, escrito usando uma linguagem de programação e compilado para que esta "linguagem humana" se transforme em "linguagem de máquina". Como todo player de música, uma de suas funções é reproduzir um arquivo. Mas e se nesta instrução fosse possível injetar códigos externos a partir de um arquivo de música?
De início pode parecer um pouco confuso e até mesmo irracional, por que alguém tentaria injetar um código num player de música? E é justamente ai onde começam os problemas, as chamadas vulnerabilidades.
As vulnerabilidades em sistemas computacionais consistem em permitir, de forma não intencional, que um agente externo injete ou modifique instruções em seu código, a fim de ganhar o controle ou descobrir informações específicas. Quando um software apresenta estas características de forma intencional, é chamado de backdoor (porta dos fundos).
Desta forma, podemos definir que segurança é apenas um fator psicológico, algo que está além do nosso controle, pois nem sempre podemos impedir determinados ataques.
Se nenhum sistema operacional está livre de vulnerabilidades e nem mesmo hardwares estão, então porque dizem tanto que o Linux não pega vírus e é mais seguro? A resposta pode não ser tão simples assim.
Vírus versus vulnerabilidade
Existem diversas diferenças entre vírus e vulnerabilidades, ambos os termos não podem nem ser comparados diretamente. Por definição, um vírus é um programa que tem a capacidade de copiar a si mesmo e de infectar outros programas, da mesma forma que um vírus (agente biológico) e que tende a explorar vulnerabilidades de um sistemas. Um programa pode possuir uma vulnerabilidade, porém isso não o torna um vírus.
Agent Smith (The Matrix, 1999), um exemplo de vírus de fácil compreensão
Devido as diferenças na arquitetura dos sistemas operacionais baseados em UNIX, um vírus tem poucas chances de se auto copiar igual quando executado em um sistema Windows. Isso se dá devido ao sistema de permissões do Linux ser mais restritivo do que o do Windows, o que garante uma segurança maior.
Desta forma, mesmo que você esteja executando um serviço que "escuta" uma porta, e este serviço possua uma vulnerabilidade conhecida, o dano causado à um sistema UNIX se restringirá à apenas a conta do usuário que estava executando, que em grande parte das vezes, costuma ser um usuário específico para um serviço, e não o seu próprio usuário.
No entanto, ao executar um script malicioso no Linux usando a conta do superusuário, os efeitos seriam os mesmos que quando executado no Windows, pois não haveria um mecanismo de proteção que prevenisse o acesso a dados do sistema ou de outros processos.
O Windows em suas versões mais recentes também adotou um sistema de proteção (chamado de UAC), porém de forma menos rígida. Embora o Linux possua esta enorme vantagem em relação ao Windows, nenhum dos sistemas está imune as vulnerabilidades, e essa proteção também pode ser abusada, são os casos de ataques de "escalação de privilégios", onde uma vulnerabilidade (geralmente no Kernel), possibilita que usuários normais consigam acesso de superusuário do sistema.
Não vamos entrar em detalhes sobre os tipos de vulnerabilidades, pois este é um conteúdo para outro artigo.
Quando o usuário é o culpado
Obviamente existem inúmeros engenheiros de software trabalhando (mesmo em softwares livres) para deixar os sistemas computacionais mais seguros, corrigindo vulnerabilidades e vasculhando por possíveis pontos de falha ainda não descobertos, no entanto, do outro lado temos os usuários destes sistemas, que grande parte das vezes possuem toda a culpa.
No Windows é comum encontrarmos arquivos contaminados com vírus, "músicas" com extensões ".exe" ou até mesmo arquivos legítimos que possuem códigos injetados para causar algum dano quando executado por alguma aplicação. Grande parte das vezes estes arquivos são obtidos de fontes não seguras, mais especificamente de sites de pirataria.
Já no Linux, temos os "PPAs" (personal package archives), que são repositórios que contém os pacotes de instalação para uma distribuição Linux e o "copia e cola". O problema com os PPAs está na utilização de forma irracional deles. Qualquer um pode criar um PPA, subir algum pacote modificado e "infectar" um sistema inteiro através de uma instalação de um "simples pacote". É muito comum vermos sites na internet recomendando o uso de diversos PPAs para instalarem pacotes sem antes verificarem sua origem ou quem é o responsável por eles.
O problema com o "copia e cola" é justamente o mesmo que os PPAs, os usuários, por não verificarem o que estão executando, podem estar instalando softwares maliciosos em suas distribuições, sem se darem conta.
"É muito pouco provável que um sistema GNU/Linux configurado por um novato completo seja mais seguro do que um sistema Windows configurado por um especialista altamente qualificado".
Jeffrey Orloff, Diretor de Tecnologia e Segurança da Informação, SafeWave, LLC, IBM.
Atualizações, a sua única defesa contra vulnerabilidades
A única forma de evitar ataques à vulnerabilidades, é manter seu sistema atualizado. Quando você não atualiza seu sistema, você continua com softwares mais antigos, que podem possuir vulnerabilidades que já foram corrigidas nas versões mais novas. Ao manter estes softwares antigos, você poderá estar dando uma brecha para que alguém possa ataca-lo.
Já os antivírus funcionam de forma diferente, estes são programas que vasculham o código de "programa por programa" e "arquivo por arquivo", em busca de códigos maliciosos que possam trazer dano à um sistema. Os antivírus detectam os vírus através de suas "assinaturas digitais", trechos de códigos identificados previamente como nocivos, e é por isso que manter um software antivírus atualizado é essencial para o seu funcionamento.
Embora existam antivírus para Linux, estes costumam analisar pastas compartilhadas com usuários Windows, para garantir a segurança destes usuários e não do próprio sistema.
Perguntas frequentes
- Linux pega vírus?
Conforme foi explicado acima, um vírus é um software que se auto copia e isso só seria possível no Linux, caso fosse executado pelo superusuário ou através de uma vulnerabilidade de escalação de privilégios. Dizer que Linux é 100% seguro e que não pega vírus é uma afirmação falsa. - É possível "pegar vírus" sem executar um arquivo?
Sim; Existem vários programas que executam em segundo plano e estes podem conter vulnerabilidades, que podem ser exploradas por outros computadores em sua rede ou através da internet. - Preciso de um software antivírus?
Um software antivírus não irá lhe proteger de todas vulnerabilidades, mas pode ajudar detectando arquivos maliciosos. Se você sabe o que está fazendo, dificilmente precisará de um antivírus, em qualquer sistema. - Ainda assim, o Linux é mais seguro que o Windows?
Sim; Devido ao seu código fonte aberto (o que possibilita que mais pessoas vejam seu código) e ao seu sistema de permissões mais rígido. - Por que não existem tantos "vírus" para Linux?
Dois fatores; Um é o motivo do Linux não ter tantos usuários domésticos e o outro é o fato do sistema de permissões ser mais rígido. No entanto, servidores são frequentemente alvos de outros tipos de ataques.
Portanto, independente de utilizar Windows ou Linux, mantenha seu sistema atualizado e evite ao máximo a instalação de softwares desconhecidos.