Perfis do Apparmor para diversos aplicativos
Autor: Alexei Gonçalves de Oliveira | Publicado: 2016-02-21T21:08:00-03:00

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 &lt;tunables/global&gt;
# 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.
#
# ------------------------------------------------------------------&nbsp;
/usr/lib/iceweasel/iceweasel {
&nbsp;
  #include &lt;abstractions/audio&gt;
  #include &lt;abstractions/cups-client&gt;
  #include &lt;abstractions/dbus-session&gt;
  #include &lt;abstractions/gnome&gt;
  #include &lt;abstractions/ibus&gt;
  #include &lt;abstractions/kde&gt;
  #include &lt;abstractions/nameservice&gt;
  #include &lt;abstractions/totem&gt;

  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,
&nbsp;
  @{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, 
&nbsp;
# Digite abaixo o endereço do cache do perfil do navegador
&nbsp;/home/*/.cache/mozilla/iceweasel/PERFILDONAVEGADOR/** rw,


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

# Digite abaixo o endereço do perfil do navegador
 &nbsp;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,
&nbsp;
# 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 &lt;tunables/global&gt;

/usr/lib/icedove/icedove {
  #include &lt;abstractions/audio&gt;
  #include &lt;abstractions/base&gt;
  #include &lt;abstractions/bash&gt;
  #include &lt;abstractions/fonts&gt;
  #include &lt;abstractions/freedesktop.org&gt;
  #include &lt;abstractions/gnome&gt;
  #include &lt;abstractions/kde&gt;
  #include &lt;abstractions/totem&gt;
  #include &lt;abstractions/user-download&gt;
  #include &lt;abstractions/user-tmp&gt;

  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,&nbsp;
 &nbsp;@{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 &lt;tunables/global&gt;
/usr/bin/skype {
 #include &lt;abstractions/base&gt;
  #include &lt;abstractions/user-tmp&gt;
  #include &lt;abstractions/audio&gt;
  #include &lt;abstractions/nameservice&gt;
  #include &lt;abstractions/ssl_certs&gt;
  #include &lt;abstractions/fonts&gt;
  #include &lt;abstractions/ibus&gt;
  #include &lt;abstractions/dbus&gt;
  #include &lt;abstractions/dbus-session&gt;
  #include &lt;abstractions/X&gt;
  #include &lt;abstractions/freedesktop.org&gt;
  #include &lt;abstractions/gnome&gt;
  #include &lt;abstractions/kde&gt;

  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 &lt;tunables/global&gt;
/usr/bin/owncloud {
  #include &lt;abstractions/base&gt;
  #include &lt;abstractions/kde&gt;
  #include &lt;abstractions/ssl_certs&gt;
  #include &lt;abstractions/totem&gt;
  #include &lt;abstractions/ubuntu-browsers.d/plugins-common&gt;

  /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,
 &nbsp;
  /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 &lt;tunables/global&gt;

/usr/bin/filezilla {
  #include &lt;abstractions/base&gt;
  #include &lt;abstractions/totem&gt;
  #include &lt;abstractions/ubuntu-browsers.d/plugins-common&gt;

  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 &lt;tunables/global&gt;

/usr/bin/fzsftp {
  #include &lt;abstractions/base&gt;

  /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,&nbsp;
&nbsp;
}
&nbsp;
&nbsp;

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 &lt;tunables/global&gt;

/usr/bin/phatch {
  #include &lt;abstractions/base&gt;
  #include &lt;abstractions/kde&gt;
  #include &lt;abstractions/python&gt;
  #include &lt;abstractions/totem&gt;
  #include &lt;abstractions/ubuntu-browsers.d/plugins-common&gt;

  /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 &lt;tunables/global&gt;

/usr/bin/transmission-qt {

  #include &lt;abstractions/base&gt;
  #include &lt;abstractions/kde&gt;
  #include &lt;abstractions/gnome&gt;
  #include &lt;abstractions/user-download&gt;

/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,

}