quarta-feira, 24 de fevereiro de 2016

Carta aberta ao serviço CloudFlare

Se você costuma usar o Tor Browser Bundle para navegação web anônima e segura, certamente já se deparou mais de uma vez com uma tela do serviço CloudFlare exigindo a solução de um desafio CAPTCHA para acessar a página solicitada - veja um exemplo na figura a seguir.
Tela de alerta do CloudFlare obstruindo a navegação dos usuários do Tor Browser Bundle.



Como a popularização do serviço gratuito do CloudFlare, a presença da tela de alerta do CloudFlare obstruindo a navegação no Tor Browser Bundle se torna cada vez mais comum já que, ao que parece, o comportamento default do CloudFlare tem sido bloquear indiscriminadamente os usuários da rede Tor. Esse fato me motivou a enviar a seguinte mensagem ao suporte do CloudFlare:

"Eu uso o Tor Browser Bundle para navegação privada e, durante a maior parte do tempo, tenho tropeçado em uma página do CloudFlare que me exige a solução de um desafio CAPTCHA. Para começar, é um exagero impor um desafio captcha a um usuário legítimo da rede Tor que não esteja engajado em comportamento abusivo, apenas visitando páginas web. Mas eu não me importava muito com isso até que vocês decidiram adotar esses desafios que me pedem para "Selecionar imagens com sinais de trânsito", já que, com muita frequência, são impossíveis de resolver (confira um exemplo na imagem abaixo), já que, mesmo quando não há bugs de exibição, eles usam fragmentos de imagens com baixíssima resolução, que não me permitem distinguir, por exemplo, um "lago" de um "rio".

Um exemplo de desafio CAPTCHA impossível de resolver.
Mas até mesmo isso não é o suficiente, de modo que vocês decidiram irritar definitivamente todos os usuários Tor ao exigir "múltiplas respostas corretas"!

Isso é uma estupidez e um insulto. Eu não estou engajado em comportamento abusivo, eu apenas quero navegar na web com privacidade e segurança.
Assim, peço, encarecidamente:

(1) Não adotem o bloqueio ao Tor como condição default nos sites protegidos pelo Cloudflare.
(2) Usem o CAPTCHA tradicional em vez dessas imagens ridículas e inusáveis.
(3) Não exijam desafios CAPTCHA de solução impossível de pessoas que desligam o javascript no navegador. Não há NADA de abusivo ou suspeito no ato de desativar o javascript, de modo que os usuários não deveriam ser punidos por adotar esse comportamento de navegação.

As políticas que você adotam atualmente não me afetam somente como usuário, mas também como webmaster e editor. SIM, eu quero que o CloudFlare proteja meu site de comportamentos abusivos, mas NÃO, eu NÃO QUERO que o CloudFlare espante os meus leitores e visitantes que decidiram usar Tor e NoScript enquanto visitam meus sites.

Eu confio que CloudFlare recuperará o bom-senso e reverterá esse comportamento indesejado".

domingo, 21 de fevereiro de 2016

Perfis do Apparmor para diversos aplicativos

Entre os mil motivos para apreciar o trabalho com o Linux, talvez um dos mais importantes, para mim, seja a ampla disponibilidade de ferramentas confiáveis para a gestão da segurança do sistema. Esse leque de opções capacita o administrador, após um razoável período de avaliação e testes, a adotar um pacote de soluções de segurança sob medida para suas necessidades, mantendo o computador praticamente imune até mesmo a ataques com alto nível de engenhosidade.

O Apparmor é uma dessas ferramentas, pela qual fiquei encantado. Basicamente, o que o Apparmor faz é restringir o acesso dos aplicativos a áreas e funções críticas de seu computador. Essa restrição é feita no nível do kernel, o nível mais básico do sistema operacional, de modo que o aplicativo fica imunizado contra ataques. Mesmo que um hipotético vírus ou técnica maliciosa consiga alterar o código do programa para obrigá-lo desempenhar uma função estranha à sua finalidade original, o sistema operacional turbinado pelo Apparmor impedirá o aplicativo infectado de fazer qualquer coisa não prevista em suas funções normais. O Apparmor funciona, portanto, como uma espécie de "lista branca", que proíbe tudo o que não for explicitamente autorizado.

Como quase tudo no Linux, as "listas brancas" dos aplicativos são salvas sob a forma de pequenos arquivos de texto. Esses arquivos, chamados "perfis", são salvos, em meu sistema Debian Jessie, na pasta /etc/apparmor.d/.

A redação de um guia completo de instalação, configuração, criação e manutenção de perfis do Apparmor ultrapassaria muito o tempo que tenho disponível para a redação deste blog, bem como minha competência técnica, já que não sou profissional de TI e o assunto é bastante complexo. Entretanto, decidi publicar aqui alguns dos perfis do Apparmor que eu mesmo criei, na esperança de que possam ser úteis a quem estiver estudando o assunto.

Se você for profissional de TI e tiver críticas ou correções a fazer, peço que fique à vontade para registrá-las na área de comentários. Esclareço também que, embora todos os softwares confinados por esses perfis em "enforce mode", nas versões especificadas, estejam funcionando perfeitamente em minha máquina, um sistema Debian Linux Jessie 8.3, versão do kernel 3.16.0-4-amd64, não ofereço nenhuma garantia de que vão funcionar em sua máquina, nem que serão eficientes formas de segurança contra este ou aquele tipo de ataque. Experimente-os por sua conta e risco!

Perfil Apparmor para o navegador web Debian Iceweasel 38.6.1

nome do arquivo: usr.lib.iceweasel.iceweasel

# Last Modified: Mon Feb 15 11:18:40 2016
#include <tunables/global>
# vim:syntax=apparmor
# ------------------------------------------------------------------
#
#    Copyright (C) 2009-2011 Canonical Ltd.
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#
# ------------------------------------------------------------------ 
/usr/lib/iceweasel/iceweasel {
 
  #include <abstractions/audio>
  #include <abstractions/cups-client>
  #include <abstractions/dbus-session>
  #include <abstractions/gnome>
  #include <abstractions/ibus>
  #include <abstractions/kde>
  #include <abstractions/nameservice>
  #include <abstractions/totem>

  network inet stream,
  network inet6 stream,

  deny /.suspended r,
  deny /boot/initrd.img* r,
  deny /boot/vmlinuz* r,
  deny /usr/bin/gconftool-2 x,
  deny /usr/lib/iceweasel/** w,
  deny /usr/lib/iceweasel/components/extensions/**/ w,
  deny /usr/lib/iceweasel/update.test w,
  deny /usr/lib/xulrunner-*/components/*.tmp w,
  deny /usr/lib/xulrunner-addons/extensions/**/ w,
  deny /usr/lib/{iceweasel,xulrunner}-addons/** w,
  deny /usr/share/mozilla/ w,
  deny /usr/share/mozilla/extensions/**/ w,
  deny /var/cache/fontconfig/ w,

  / r,
  /bin/which rix,
  /etc/fstab r,
  /etc/gre.d/* r,
  /etc/iceweasel*/** r,
  /etc/lsb-release r,
  /etc/mailcap r,
  /etc/mime.types r,
  /etc/mtab r,
  /etc/timezone r,
  /etc/wildmidi/wildmidi.cfg r,
  /etc/writable/timezone r,
  /etc/xul-ext/** r,
  /etc/xulrunner/** r,
  /proc/*/** r,
  /run/udev/** r,
  /sbin/killall5 rix,
  owner /tmp/** m,
  /tmp/.X[0-9]*-lock r,
  /usr/bin/basename rix,
  /usr/bin/dirname rix,
  /usr/bin/expr ix,
  /usr/bin/pwd rix,
  /usr/bin/tr rix,
  /usr/bin/dolphin rUx,
  /usr/lib/iceweasel/** rix,
  /usr/lib/xulrunner-*/plugin-container rix,
  /usr/{include,share,src}/** r,
  owner /var/tmp/** m,
 
  @{PROC}/@{pid}/cmdline r,
  owner @{PROC}/@{pid}/environ r,
  @{PROC}/@{pid}/mountinfo r,
  @{PROC}/@{pid}/net/if_inet6 r,
  @{PROC}/@{pid}/net/ipv6_route r,
  @{PROC}/@{pid}/stat r,
  @{PROC}/@{pid}/status r,
  owner @{PROC}/@{pid}/auxv r, 
 
# Digite abaixo o endereço do cache do perfil do navegador
 /home/*/.cache/mozilla/iceweasel/PERFILDONAVEGADOR/** rw,

  owner @{HOME}/ r,
  owner @{HOME}/.mozilla/**/extensions/** mrix,

# Digite abaixo o endereço do perfil do navegador
  owner @{HOME}/.mozilla/iceweasel/PERFILDONAVEGADOR/** rw,


  owner @{HOME}/.thumbnails/*/*.png r,
  owner @{HOME}/.{iceweasel,mozilla}/ rw,
  owner @{HOME}/.{iceweasel,mozilla}/** rw,
  owner @{HOME}/.{iceweasel,mozilla}/**/*.{db,parentlock,sqlite}* k,
  owner @{HOME}/.{iceweasel,mozilla}/**/plugins/** mr,
  owner @{HOME}/.{iceweasel,mozilla}/plugins/** mr,
 
# Inclua na lista abaixo as pastas para onde faz downloads ou de onde faz os uploads
owner @{HOME}/Desktop/ r, owner @{HOME}/Desktop/** rw, owner @{HOME}/Downloads/ r, owner @{HOME}/Downloads/** rw, owner @{HOME}/Public/ r, owner @{HOME}/Public/** rw,

}

Perfil Apparmor para o cliente de e-mail Debian Icedove 38.5.0 com cliente de agenda Iceowl, extensões "Provider for Google Calendar", Enigmail e TorBirdy

nome do arquivo: usr.lib.icedove.icedove



# Last Modified: Mon Feb 15 20:49:15 2016
#include <tunables/global>

/usr/lib/icedove/icedove {
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/bash>
  #include <abstractions/fonts>
  #include <abstractions/freedesktop.org>
  #include <abstractions/gnome>
  #include <abstractions/kde>
  #include <abstractions/totem>
  #include <abstractions/user-download>
  #include <abstractions/user-tmp>

  capability sys_ptrace,

  deny / r,
  deny /dev/vboxuser rw,
  deny /etc/fstab r,
  deny /etc/host.conf r,
  deny /etc/hosts r,
  deny /etc/machine-id r,
  deny /etc/nsswitch.conf r,
  deny /etc/passwd r,
  deny /sys/devices/system/cpu/ r,
  deny /sys/devices/system/cpu/present r,
  deny /var/lib/dbus/machine-id r,

  /bin/bash rix,
  /bin/cat rix,
  /bin/chmod rix,
  /bin/dash rix,
  /bin/grep rix,
  /bin/mknod rix,
  /bin/mktemp rix,
  /bin/ps rix,
  /bin/which rix,
 
  /dev/tty rw,
  /dev/xen/evtchn rw,
  /dev/xen/gntalloc rw,
  /dev/xen/xenbus rw,

  /etc/dpkg/dpkg.cfg r,
  /etc/icedove/pref/* r,
  /etc/iceweasel/pref/iceweasel.js r,
  /etc/iceweasel/searchplugins/** r,
  /etc/mailcap r,
  /etc/mime.types r,
  /etc/python*/sitecustomize.py r,
  /etc/xul-ext/** r,
  /etc/xul-ext/enigmail.js rix,
  /home/*/.config/dconf/user r,


# Digite abaixo o endereço do perfil de sua instalação do Icedove
  /home/*/PERFILDOICEDOVE/** mrwk,

  /run/udev/data/* r,
  /run/user/1000/dconf/ rwk,
  /run/user/1000/dconf/user rwk,
  /rw/config/gpg-split-domain r,
  /usr/bin/basename rix,
  /usr/bin/cut rix,
  /usr/bin/dpkg rix,
  /usr/bin/dpkg-query rix,
  /usr/bin/du rix,
  /usr/bin/gpg rix,
  /usr/bin/gpg-agent rix,
  /usr/bin/gpg-connect-agent rix,
  /usr/bin/gpg2 rix,
  /usr/bin/gpgconf rix,
  /usr/bin/grep rix,
  /usr/bin/kde4-config rix,
  /usr/bin/mkdir rix,
  /usr/bin/pinentry* rix,
  /usr/bin/qrexec-client-vm rix,
  /usr/bin/qubes-gpg-client rix,
  /usr/bin/qubes-gpg-client-wrapper rix,
  /usr/bin/qubesdb-cmd rix,
  /usr/bin/qvm-mru-entry rix,
  /usr/bin/qvm-open-in-dvm rix,
  /usr/bin/tail rix,
  /usr/bin/torbrowser Px,
  /usr/bin/torsocks rix,
  /usr/bin/update-desktop-database rix,
  /usr/bin/uwt rix,
  /usr/bin/zenity rix,
  /usr/lib/*-linux-gnu/** mr,
  /usr/lib/gnupg/* rix,
  /usr/lib/gnupg2/gpg2keys_hkp rix,
  /usr/lib/icedove/icedove mrix,
  /usr/lib/iceweasel/iceweasel rix,
  /usr/lib/pyshared/python*/** mr,
  /usr/lib/python*/dist-packages/** mr,
  /usr/lib/qubes-gpg-split/pipe-cat rix,
  /usr/lib/qubes/qfile-agent rix,
  /usr/lib/qubes/qopen-in-vm rix,
  /usr/lib/qubes/qvm-copy-to-vm rix,
  /usr/lib/qubes/qvm-copy-to-vm.* rix,
  /usr/local/lib/python*/dist-packages/** mr,
  /usr/share/applications/** rwk,
  /usr/share/pyshared/** mr,
  /var/cache/nscd/hosts r,
  /var/lib/dpkg/status r,
  /var/lib/dpkg/triggers/File r,
  /var/lib/dpkg/triggers/Unincorp r,

  @{HOME}/.Xauthority r,
  @{HOME}/.cache/ r,
  @{HOME}/.cache/** rwk,
  @{HOME}/.cache/icedove/ rwk,
  @{HOME}/.cache/icedove/** rw,
  @{HOME}/.config/oxygen-gtk/* rw,
  @{HOME}/.fontconfig/ rwk,
  @{HOME}/.gnupg/* rwlkcix,
  @{HOME}/.icedove/ rwk,
  @{HOME}/.icedove/** mrwk,
  @{HOME}/.kde/share/** rw,
  @{HOME}/.local/share/ r,
  @{HOME}/.local/share/applications/ rwk,
  @{HOME}/.local/share/applications/* rwk,
  @{HOME}/.local/share/mime/ rwk,
  @{HOME}/.local/share/mime/** rwk,
  @{HOME}/.mozilla/ rwk,
  @{HOME}/.mozilla/** rwk,
  @{HOME}/.thunderbird/ rwk,
  @{HOME}/.thunderbird/** mrwk, 
  @{PROC}/ r,
  @{PROC}/[0-9]*/cmdline r,
  @{PROC}/[0-9]*/fd/ r,
  @{PROC}/[0-9]*/maps r,
  @{PROC}/[0-9]*/mountinfo r,
  @{PROC}/[0-9]*/mounts r,
  @{PROC}/[0-9]*/stat r,
  @{PROC}/[0-9]*/status r,
  @{PROC}/[0-9]*/task/*/stat r,
  @{PROC}/sys/kernel/pid_max r,
  @{PROC}/tty/drivers r,
  @{PROC}/uptime r,
  @{PROC}/xen/privcmd rw,

}

Perfil Apparmor para o cliente VOIP Skype 4.3.0.37

nome do arquivo: usr.bin.skype


#include <tunables/global>
/usr/bin/skype {
 #include <abstractions/base>
  #include <abstractions/user-tmp>
  #include <abstractions/audio>
  #include <abstractions/nameservice>
  #include <abstractions/ssl_certs>
  #include <abstractions/fonts>
  #include <abstractions/ibus>
  #include <abstractions/dbus>
  #include <abstractions/dbus-session>
  #include <abstractions/X>
  #include <abstractions/freedesktop.org>
  #include <abstractions/gnome>
  #include <abstractions/kde>

  network,

  /usr/bin/skype mr,
  /opt/skype/skype pix,
  /opt/skype/** kmr,
  /usr/share/fonts/** m,
  @{PROC}/*/net/arp r,
  @{PROC}/*/cmdline r,
  @{PROC}/*/auxv r,
  @{PROC}/sys/kernel/ostype r,
  @{PROC}/sys/kernel/osrelease r,
  /usr/bin/xdg-open rUxmlk,
  /dev/ r,
  /dev/tty rw,
  /dev/snd/* mrw,
  /{dev,run}/shm/ r,
  /{dev,run}/shm/pulse-shm-* mrw,
  /etc/pulse/client.conf r,
  /dev/pts/* rw,
  /dev/video* mrw,

  @{HOME}/.cache/fontconfig/** lkmrw,
  @{HOME}/Downloads/* krw,
  @{HOME}/Downloads/ krw,
  /etc/xdg/Trolltech.conf rk,
  @{HOME}/.config/Trolltech.conf* rwk,

  /etc/xdg/sni-qt.conf r,
  /usr/share/locale-langpack/* mr,
  /usr/share/glib-2.0/schemas/gschemas.compiled rm,
  /usr/share/nvidia-331/** rm,
  /sys/devices/system/cpu/ r,
  /sys/devices/system/cpu/cpu0/cpufreq/* r,

  @{HOME}/.Skype/ krw,
  @{HOME}/.Skype/** krw,
  @{HOME}/.config/Skype/ krw,
  @{HOME}/.config/Skype/** krw,

  /usr/share/skype/** kmr,
  /usr/share/skype/sounds/*.wav kr,
  /etc/passwd mr,
  /usr/share/icons/** kr,
  /sys/class/power_supply/ r,

  @{PROC}/[0-9]*/status r,
  @{PROC}/[0-9]*/net/** r,
  @{PROC}/[0-9]*/task/ r,
  @{PROC}/[0-9]*/task/** r,

  /usr/bin/pavucontrol rmUx,

  deny @{HOME}/.mozilla/ r,
  audit deny @{PROC}/[0-9]*/fd/ r,
  audit deny /var/cache/fontconfig/ w,
  deny /sys/devices/** r,
  audit deny /etc/xdg/sni-qt.conf k,
} 

Perfil Apparmor para o cliente de armazenamento em nuvem Owncloud 2.1.1

nome do arquivo: usr.bin.owncloud

# Last Modified: Thu Feb 11 12:27:45 2016
#include <tunables/global>
/usr/bin/owncloud {
  #include <abstractions/base>
  #include <abstractions/kde>
  #include <abstractions/ssl_certs>
  #include <abstractions/totem>
  #include <abstractions/ubuntu-browsers.d/plugins-common>

  /etc/ownCloud/* r,
  /home/*/.Xauthority r,
  /home/*/.config/Trolltech.conf rk,
  /home/*/.config/fontconfig/* r,
  /home/*/.fontconfig/* r,
  /home/*/.kde/share/config/* r,
  /home/*/.kde/share/config/kdeglobals rk,
  /home/*/.local/share/data/ownCloud/* rwk,

# Digite abaixo o(s) endereço(s) da(s) pasta(s) compartilhadas
# através do Owncloud
  /home/*/PASTASCOMPARTILHADAS rwk,
  
  /proc/*/statm r,
  /run/user/1000/ownCloud/socket w,
  /tmp/* rwk,
  /usr/bin/lsb_release Ux,
  /usr/bin/owncloud mrix,
  /usr/share/icons/** rk,
  /var/cache/nscd/hosts r,
  /var/tmp/** rwlk,

}

Perfil Apparmor para o cliente de FTP Filezilla 3.9.0.5

nome do arquivo: usr.bin.filezilla

# Last Modified: Tue Feb  9 13:35:14 2016
#include <tunables/global>

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

  deny / r,
  deny /etc/phpmyadmin/phpmyadmin.desktop r,

  /home/*/.Xauthority r,
  /home/*/.config/fontconfig/* r,
  /home/*/.filezilla/* rwk,
  /home/*/.fontconfig/* r,
  /home/*/.kde/share/config/gtkrc-2.0 r,
  /home/*/.local/share/applications/* r,
  /home/*/.local/share/mime/* r,
  /home/*/.putty/randomseed r,
  /home/*/.putty/sshhostkeys r,
  
#Digite abaixo os endereços das pastas que usa para upload/download. Por exemplo:
  /home/*/Desktop/** rw,
  /home/*/Downloads/** rw,
  
  /tmp/** rwlk,
  /usr/bin/filezilla mr,
  /usr/bin/fzsftp rPx,
  /usr/bin/kate Px,
  /usr/bin/phatch Px,
  /var/cache/nscd/hosts r,
  /var/tmp/** rwlk,

} 

Perfil Apparmor para fzsftp (use junto com o perfil filezilla)

nome do arquivo: usr.bin.fzsftp

# Last Modified: Tue Feb  9 13:35:14 2016
#include <tunables/global>

/usr/bin/fzsftp {
  #include <abstractions/base>

  /home/*/.putty/randomseed r,
  /home/*/.putty/sshhostkeys r,
  /usr/bin/fzsftp mr,
  /var/cache/nscd/hosts r,

# Digite abaixo os endereços das pastas que usa para upload/download. Por exemplo:
  /home/*/Desktop/** rw,
  /home/*/Downloads/** rw,

 /tmp/** rwlk,
 /var/tmp/** rwlk, 
 
}
 
 

Perfil Apparmor para visualizador de imagens phatch 0.2.7 (use junto com o perfil filezilla)

nome do arquivo: usr.bin.phatch

# Last Modified: Tue Feb  9 13:35:15 2016
#include <tunables/global>

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

  /home/*/.Xauthority r,
  /home/*/.config/fontconfig/* r,
  /home/*/.config/user-dirs.dirs r,
  /home/*/.fontconfig/* r,
  /home/*/.kde/share/config/gtkrc-2.0 r,
  /home/*/.thumbnails/** w,
  /proc/*/mounts r,
  /proc/filesystems r,
  /proc/meminfo r,
  /tmp/** rwlk,
  /usr/bin/phatch r,
  /usr/bin/python2.7 rix,

}

Perfil Apparmor para cliente bittorrent Transmission-qt 2.84

nome do arquivo: usr.bin.transmission-qt

# Last Modified: Mon Jul 28 18:59:05 2014

#include <tunables/global>

/usr/bin/transmission-qt {

  #include <abstractions/base>
  #include <abstractions/kde>
  #include <abstractions/gnome>
  #include <abstractions/user-download>

/dev/dri/card0 rw,
/etc/drirc r,
/etc/fonts/** r,
/etc/gai.conf r,
/etc/host.conf r,
/etc/hosts r,
/etc/resolv.conf r,
/etc/ssl/certs/ r,
/etc/ssl/openssl.cnf r,
/etc/udev/udev.conf r,

/home/*/.Xauthority r,
/home/*/.cache/transmission/** rw,
/home/*/.config/fontconfig/fonts.conf r,
/home/*/.config/transmission/** rw,
/home/*/.config/user-dirs.dirs r,
/home/*/.fontconfig/** r,
/home/*/.fonts/** r,
/home/*/.kde/share/config/kdeglobals rk,
#Digite abaixo a(s) pasta(s) onde você deseja salvar os arquivos baixados
/home/*/PASTAONDESALVOARQUIVOS/** rw,

/proc/** r,
/run/udev/data/* r,
/sys/devices/** r,
/usr/lib/x86_64-linux-gnu/dri/i965_dri.so mr,
/usr/local/share/fonts/** r,
/usr/share/fontconfig/conf.avail/** r,
/usr/share/fonts/** r,
/usr/share/icons/hicolor/* rk,
/usr/share/icons/** rk,
/usr/share/javascript/mathjax/fonts/** r,
/usr/share/poppler/cMap/*/ r,
/usr/share/qt5/translations/qt_pt.qm r,
/var/cache/fontconfig/** r,
/var/cache/nscd/hosts r,
/var/cache/nscd/passwd r,

}