terça-feira, 29 de março de 2016

O Linux é mais seguro do que o Windows?

Acho graça quando vejo a reação dos usuários Windows às notícias de descobertas de vulnerabilidades no Linux. Só faltam soltar foguete: “Estão vendo? O Linux não é mais seguro do que o Windows, não! O Linux só não tem mais vírus porque quase ninguém usa!”, e assim por diante, você conhece a toada.

Essa reação só é compreensível porque, quando o usuário Linux diz “mais seguro”, o usuário Windows ouve “invulnerável”. Ora, em nenhum idioma do mundo a palavra “seguro” é sinônimo de “inexpugnável”, “invencível” ou “impenetrável”, o que já nos faz desconfiar de algum bug (Microsoft KB 896588546710235) no sistema auditivo do interlocutor!

Ora, é evidente que o Linux, tal como o Windows, não é um sistema a prova de usuários descuidados. Sim, é verdade que há muitas vulnerabilidades, tanto no próprio Linux quanto nos softwares que rodam sobre ele. O Linux também não protegerá seu computador adequadamente se você for preguiçoso e não atualizá-lo nunca − conheço administradores de servidores web que estão há mais de 5 anos sem sequer atualizar a versão do Wordpress!

Segurança é um assunto complexo e multifacetado. Para ter uma ideia geral sobre os diversos aspectos do problema e, de quebra, aprender como aumentar a segurança de um sistema Debian/Linux, confira este excelente guia oficial de segurança da distribuição Debian.

Do minha parte, na condição de simples usuário, experiente mas não profissional, quando digo que “o Linux é mais seguro do que o Windows” estou dizendo apenas o seguinte:
  1. O Linux permite um controle muito mais completo sobre as opções de segurança do sistema;
  2. No Linux, se você quiser, sempre saberá o que cada programa está fazendo e por quê;
  3. O Linux oferece uma imensa variedade de configurações e aplicativos de segurança para os mais diferentes cenários e necessidades;
  4. O Linux permite que o usuário e o administrador tome “decisões bem-informadas”, após adequada reflexão sobre os riscos que deseja evitar e os benefícios que deseja obter.
É muito raro que, no Linux, até mesmo um usuário pouco experiente tome uma decisão errada impulsivamente, como é de praxe no Windows, pois o sistema impõe freios que obrigam à reflexão.

É claro que, quando as pessoas não querem refletir, fazem besteira mesmo, como provam os inúmeros problemas que ocorrem entre os usuários de dispositivos Android. Como você sabe, o Android é baseado em Linux, mas oferece ao usuário uma experiência semelhante ao do Windows, no sentido de que estimula o comportamento impulsivo. O Android, tal como o Windows, não é exatamente um sistema operacional, mas uma espécie de “shopping center” digital que oferece ilimitadas possibilidades de gastar dinheiro baixando aplicativos “bonitinhos”, “divertidos”, “cool” ou seja qual for a gíria da moda. É evidente que esse usuário impulsivo e ansioso por fazer parte da festa não terá a paciência necessária para refletir sobre as consequências do que está fazendo, arriscando-se a cair em todo tipo de armadilhas e trapaças.

Assim, o Linux é “mais seguro” do que o Windows apenas para um usuário interessado, atento, estudioso e desconfiado. Se o usuário de um dispositivo Linux tiver um perfil idêntico ao de um usuário médio do Windows, isto é, aquele pessoal que “sai clicando” em tudo sem pensar no que está fazendo, o Linux resultará tão “inseguro” quanto o próprio Windows − ou, até mais, se você considerar que existem mil maneiras de obter acesso “root” aos dispositivos Android, pois o usuário “root” é aquele que pode fazer literalmente qualquer coisa num computador, inclusive destruir todo o sistema!

Perfil do Apparmor para o leitor de feeds Liferea

Embora eu goste imensamente do leitor de feeds padrão do KDE, o Akregator, e até já tenha publicado aqui um perfil do apparmor para ele, o fato de que ele compartilha as configurações de rede do sistema com o Konqueror cria um problema incontornável quando se quer acessar os feeds através de um proxy como o Tor, Privoxy ou Jondo sem provocar mudanças em outras áreas do sistema, como o download de atualizações ou, até mesmo, a navegação não-privativa através dos navegadores Chromium ou Google Chrome. Assim, decidi adotar o leitor de feeds do GNOME, o Liferea, pois ele permite uma configuração de rede/proxy independente do restante do sistema e funciona (quase) tão bem quanto o Akregator no ambiente KDE.

O Liferea estava funcionando muito bem na sandbox Firejail, mas decidi "apertar" um pouco mais a configuração de segurança criando um perfil do apparmor para o Liferea que compartilho abaixo, sempre lembrando que não garanto que vá funcionar no seu sistema!

Observação: todo o conteúdo deste ponto em diante foi atualizado no dia 11/08/2018. Incluí, no perfil, alguns números com observações em destaque sob fundo amarelo, por exemplo "#2". Lembre-se de deletar essas observações antes de salvar o arquivo do apparmor em que testará este código.

ADVERTÊNCIA: o perfil abaixo está funcionando perfeitamente em meu computador com Debian 9.5 / Kernel: Linux 4.9.0-7-amd64 (x86_64) e Liferea 1.12-rc3 e ambiente desktop LXDE 9, MAS NÃO OFERECO NENHUMA GARANTIA DE QUE VÁ FUNCIONAR EM SEU COMPUTADOR. Caso deseje testar o perfil abaixo, faça-o por sua conta e risco, de preferência, tomando todas as precauções necessárias, inclusive backups de todos os arquivos relevantes.

nome do arquivo: usr.bin.liferea

# Last Modified: Sat Jul 14 17:42:29 2018
#include <tunables/global>

/usr/bin/liferea {
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/homedirs> # 1
  #include <abstractions/totem>

  /dev/shm/* rw,
  /etc/fonts/** r,
  /etc/gai.conf r,
  /etc/host.conf r,
  /etc/hosts r,
  /etc/nsswitch.conf r,
  /etc/resolv.conf r,
  /etc/services r,
  /etc/ssl/certs/ca-certificates.crt r,
  /etc/udev/udev.conf r,
  /home/*/.Xauthority r,
  /home/*/.cache/gstreamer-1.0/* rw,
  /home/*/.cache/gtk-3.0/ rw,
  /home/*/.cache/gtk-3.0/** r,
  /home/*/.cache/gtk-3.0/compose/ rw,
  /home/*/.cache/liferea/** rw,
  /home/*/.cache/webkitgtk/ w,
  /home/*/.cache/webkitgtk/* rw,
  /home/*/.config/dconf/user r,
  /home/*/.config/liferea/* rw,
  /home/*/.local/share/gsettings-data-convert r,
  /home/*/.local/share/icons/ r,
  /home/*/.local/share/icons/**/ r,
  /home/*/.local/share/liferea/ r,
  /home/*/.local/share/liferea/* rwk,
  /home/*/.local/share/mime/aliases r,
  /home/*/.local/share/mime/generic-icons r,
  /home/*/.local/share/mime/globs2 r,
  /home/*/.local/share/mime/icons r,
  /home/*/.local/share/mime/magic r,
  /home/*/.local/share/mime/mime.cache r,
  /home/*/.local/share/mime/subclasses r,
  /home/*/.local/share/webkitgtk/localstorage/ r,
  /home/*/.local/share/webkitgtk/localstorage/* rwk,
  /home/alexei/.local/share/liferea/* rw,
  /lib/x86_64-linux-gnu/ld-*.so mr,
  /opt/google/chrome/google-chrome Px,
  /proc/*/fd/ r,
  /proc/*/mounts r,
  /proc/*/status r,
  /run/connman/resolv.conf r,
  /run/user/1000/dconf/user rw,
  /sys/devices/** r,
  /usr/bin/gsettings-data-convert Px,
  /usr/bin/liferea mr,
  /usr/bin/uget-gtk Px, # 2
  /usr/lib/firefox-esr/firefox-esr Px, # 3
  /usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner rix,
  /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitNetworkProcess Px,
  /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess Px,
  /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitWebProcess Px,
  /usr/share/fontconfig/** r,
  /usr/share/fonts/** r,
  /usr/share/icons/** r,
  /usr/share/javascript/mathjax/fonts/** r,
  /usr/share/liferea/** r,
  /usr/share/poppler/cMap/*/ r,
  /var/cache/fontconfig/* r,
  /var/lib/menu-xdg/applications/mimeinfo.cache r,
  /var/tmp/* rw,
  /{usr/,}lib{,32,64}/** mr,

}

Observações:

#1 Arquivo de abstrações personalizado com autorizações automáticas para certos subdiretórios de /home/ que não oferecem risco de segurança. Sugiro que você experimente criar suas próprias abstrações, usando uma das opções default do apparmor como modelo.
#2 Só é possível fazer downloads no navegador do Liferea usando um gerenciador de downloads. Uso o uget, mas você deve sentir-se livre para usar ou testar outras opções, não esquecendo de autorizá-las neste perfil.
#3 O Firefox-esr é meu navegador default mas, caso vocẽ defina outra opção nas configurações do Liferea, deve lembrar-se de autorizá-lo no perfil do Apparmor.

sexta-feira, 11 de março de 2016

Perfil do Apparmor para o leitor de feeds Akregator (KDE)

Caso você queira saber o que é o Apparmor, o que é um perfil do Apparmor e o que, afinal, significa o "código maluco" das linhas a seguir, leia o artigo "Perfis do Apparmor para diversos aplicativos". Caso você saiba do que se trata, repito aqui a advertência daquele post: o perfil abaixo está funcionando perfeitamente em meu computador com Debian 8.3 e Akregator 4.14.2 MAS NÃO OFERECO NENHUMA GARANTIA DE QUE VÁ FUNCIONAR EM SEU COMPUTADOR. Caso deseje testar o perfil abaixo, faça-o por sua conta e risco, de preferência, tomando todas as precauções necessárias, inclusive backups de todos os arquivos relevantes.

Arquivo /etc/apparmor.d/usr.bin.akregator


# Last Modified: Fri Mar 11 07:33:52 2016
#include <tunables/global>

/usr/bin/akregator {
  #include <abstractions/base>
  #include <abstractions/totem>
  #include <abstractions/ubuntu-browsers.d/plugins-common>

  /home/*/.Xauthority r,
  /home/*/.config/Trolltech.conf rk,
  /home/*/.config/fontconfig/fonts.conf r,
  /home/*/.fontconfig/* r,
  /home/*/.fonts/** r,
  /home/*/.java/deployment/config.cache r,
  /home/*/.kde/share/apps/akregator/** rw,
  /home/*/.kde/share/apps/khtml/* r,
  /home/*/.kde/share/config/akregatorrc r,
  /home/*/.kde/share/config/gwenviewrc r,
  /home/*/.kde/share/config/kcmnspluginrc r,
  /home/*/.kde/share/config/kcookiejarrc r,
  /home/*/.kde/share/config/kdebugrc r,
  /home/*/.kde/share/config/kdeglobals rk,
  /home/*/.kde/share/config/khtmlrc r,
  /home/*/.kde/share/config/kio_httprc r,
  /home/*/.kde/share/config/kioslaverc r,
  /home/*/.kde/share/config/konquerorrc r,
  /home/*/.kde/share/config/ktimezonedrc r,
  /home/*/.kde/share/config/kwalletrc r,
  /home/*/.kde/share/config/oxygenrc r,
  /home/*/.local/share/mime/aliases r,
  /home/*/.local/share/mime/globs2 r,
  /home/*/.local/share/mime/magic r,
  /home/*/.local/share/mime/version r,
  /proc/*/cmdline r,
  /tmp/** rwlk,
  /usr/bin/akregator mr,
  /var/cache/nscd/hosts r,
  /var/tmp/** rwlk,

}