All Projects → roddhjav → apparmor.d

roddhjav / apparmor.d

Licence: GPL-2.0 license
Full set of AppArmor profiles (~ 1400 profiles)

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
Dockerfile
14818 projects
Makefile
30231 projects

Projects that are alternatives of or similar to apparmor.d

sandboxing
Scripts, files and tools related to sandboxing
Stars: ✭ 26 (-18.75%)
Mutual labels:  apparmor, apparmor-profiles
Zephyrus
Auditing & Hardening script for Kubernetes
Stars: ✭ 45 (+40.63%)
Mutual labels:  hardening
Bunkerized Nginx
🛡️ Make your web services secure by default !
Stars: ✭ 2,361 (+7278.13%)
Mutual labels:  hardening
apparmor
Development repository for the apparmor cookbook
Stars: ✭ 13 (-59.37%)
Mutual labels:  apparmor
Ansible Nginx Hardening
This Ansible role provides secure nginx configurations.
Stars: ✭ 180 (+462.5%)
Mutual labels:  hardening
chef-apache-hardening
dev-sec.io/
Stars: ✭ 24 (-25%)
Mutual labels:  hardening
Windows Baseline
DevSec Windows Baseline - InSpec Profile
Stars: ✭ 160 (+400%)
Mutual labels:  hardening
cloudrasp-log4j2
一个针对防御 log4j2 CVE-2021-44228 漏洞的 RASP 工具。 A Runtime Application Self-Protection module specifically designed for log4j2 RCE (CVE-2021-44228) defense.
Stars: ✭ 105 (+228.13%)
Mutual labels:  hardening
chef-postgres-hardening
This chef cookbook provides security configuration for PostgreSQL.
Stars: ✭ 26 (-18.75%)
Mutual labels:  hardening
prowler
Prowler is an Open Source Security tool for AWS, Azure and GCP to perform Cloud Security best practices assessments, audits, incident response, compliance, continuous monitoring, hardening and forensics readiness. It contains hundreds of controls covering CIS, PCI-DSS, ISO27001, GDPR, HIPAA, FFIEC, SOC2, AWS FTR, ENS and custom security frameworks.
Stars: ✭ 8,046 (+25043.75%)
Mutual labels:  hardening
Puppet Os Hardening
This puppet module provides numerous security-related configurations, providing all-round base protection.
Stars: ✭ 234 (+631.25%)
Mutual labels:  hardening
Blue Team
Blue Team Scripts
Stars: ✭ 190 (+493.75%)
Mutual labels:  hardening
metabadger
Prevent SSRF attacks on AWS EC2 via automated upgrades to the more secure Instance Metadata Service v2 (IMDSv2).
Stars: ✭ 123 (+284.38%)
Mutual labels:  hardening
Ansible Collection Hardening
This Ansible collection provides battle tested hardening for Linux, SSH, nginx, MySQL
Stars: ✭ 2,543 (+7846.88%)
Mutual labels:  hardening
postgres-baseline
DevSec PostgreSQL Baseline - InSpec Profile
Stars: ✭ 47 (+46.88%)
Mutual labels:  hardening
Systemd Service Hardening
Basic guide to harden systemd services
Stars: ✭ 165 (+415.63%)
Mutual labels:  hardening
Ssh Baseline
DevSec SSH Baseline - InSpec Profile
Stars: ✭ 192 (+500%)
Mutual labels:  hardening
cis benchmarks audit
Simple command line tool to check for compliance against CIS Benchmarks
Stars: ✭ 182 (+468.75%)
Mutual labels:  hardening
nim-contra
Lightweight Self-Documenting Design by Contract Programming and Security Hardened mode.
Stars: ✭ 46 (+43.75%)
Mutual labels:  hardening
first-steps-and-hardening-in-ubuntu-server-and-docker
First Steps in Ubuntu (Server) / Hardening and Config With Docker
Stars: ✭ 28 (-12.5%)
Mutual labels:  hardening

apparmor.d

Full set of AppArmor profiles

Warning: This project is still in early development. Help is very welcome see CONTRIBUTING.md

Description

A set of over 1400 AppArmor profiles which aims is to confine most of Linux base applications and processes.

Goals & Purpose

  • Support all distributions that support AppArmor:
    • Currenlty: Archlinux, Debian 11 and the last Ubuntu LTS.
    • Not (yet) tested on openSUSE
  • Target both desktop and server,
  • Confine all root processes. Eg: all systemd tools, bluetooth, dbus, polkit, NetworkManager, OpenVPN, GDM, rtkit, colord...
  • Confine all Desktop environments:
    • Currently only Gnome, see apparmor.d/groups/gnome
  • Confine all user services: Eg: Pipewire, Gvfsd, dbus, xdg, xwayland...
  • Confine some "special" user applications: web browser, file browser...
  • Should not break a normal usage of the confined software.
  • Fully tested (Work in progress),

This project is based on the excellent work from Morfikov and aims to extend it to more Linux distributions and desktop environements.

Concepts

There are over 50000 Linux packages and even more applications. It is simply not possible to write an AppArmor profile for all of them. Therefore a question arises: What to confine and why?

We take inspiration from the Android/ChromeOS Security Model and we apply it to the Linux world. Modern linux security implementation usually consider a core base image with a carefully set of selected applications. Everything else should be sandboxed. Therefore, this project tries to confine all the core applications you will usually find in a Linux system: all systemd services, xwayland, network, bluetooth, your desktop environment... Non-core user applications are out of scope as they should be sandboxed using a dedicated tool (minijail, bubblewrap...).

This is fundamentally different from how AppArmor is used on Linux server as it is common to only confine the applications that face the internet and/or the users.

Installation

Warning: In order to not break your system, the default package configuration install all profiles in complain mode. They can be enforced later. See Enforce Mode

Requirements

  • An apparmor based linux distribution.
  • Base profiles and abstractions shipped with AppArmor are supposed to be installed.
  • Go (build dependency only)
  • rsync (build dependency only)

Archlinux

apparmor.d-git is available in the Arch User Repository:

git clone https://aur.archlinux.org/apparmor.d-git.git
cd apparmor.d-git
makepkg -s
sudo pacman -U apparmor.d-*.pkg.tar.zst \
  --overwrite etc/apparmor.d/tunables/global \
  --overwrite etc/apparmor.d/tunables/xdg-user-dirs \
  --overwrite etc/apparmor.d/abstractions/trash

Note: The overwrite options are only required on the first install. You can use yay or your preferred AUR install method to update it.

The PKGBUILD included in this repository is intended for development only.

Debian / Ubuntu

Build using standard Debian package build tools:

sudo apt install apparmor-profiles build-essential config-package-dev debhelper golang-go rsync git
git clone https://github.com/roddhjav/apparmor.d.git
cd apparmor.d
dpkg-buildpackage -b -d --no-sign
sudo dpkg -i ../apparmor.d_*_all.deb

Partial install

For test purpose, you can install a specific profile with the following commands. The tool will also install required abstractions and tunables:

sudo ./pick <profiles-name>

Usage

Enabled profiles

Once installed and with the rules enabled, you can ensure the rules are loaded with sudo aa-satus, it should give something like:

apparmor module is loaded.
1137 profiles are loaded.
794 profiles are in enforce mode.
   ...
343 profiles are in complain mode.
   ...
0 profiles are in kill mode.
0 profiles are in unconfined mode.
130 processes have profiles defined.
108 processes are in enforce mode.
   ...
22 processes are in complain mode.
   ...
0 processes are unconfined but have a profile defined.
0 processes are in mixed mode.
0 processes are in kill mode.

You can also list the current processes alongside with their security profile with ps auxZ. Most of the process should then be confined.

AppArmor Log

The provided command aa-log allow you review AppArmor generated messages in a colorful way:

$ aa-log
   ...

aa-log can optionally be given a profile name as argument to only show the log for a given profile:

$ aa-log dnsmasq
DENIED  dnsmasq open /proc/sys/kernel/osrelease comm=dnsmasq requested_mask=r denied_mask=r
DENIED  dnsmasq open /proc/1/environ comm=dnsmasq requested_mask=r denied_mask=r
DENIED  dnsmasq open /proc/cmdline comm=dnsmasq requested_mask=r denied_mask=r

Personalisation

AppArmor configuration

As they are a lot of rules, it is recommended to enable caching AppArmor profiles. In /etc/apparmor/parser.conf, uncomment write-cache and Optimize=compress-fast. See Speed up AppArmor Start on the Arch Wiki for more information.

Personal directories

The profiles heavily use the XDG directory variables defined in /etc/apparmor.d/tunables/xdg-user-dirs. You can personalise these values with by creating a file such as /etc/apparmor.d/tunables/xdg-user-dirs.d/perso with (for example) the following content:

@{XDG_VIDEOS_DIR}+="Films"
@{XDG_MUSIC_DIR}+="Musique"
@{XDG_PICTURES_DIR}+="Images"
@{XDG_BOOKS_DIR}+="BD" "Comics"
@{XDG_PROJECTS_DIR}+="Git" "Papers"

Local profiles

You can extend a profile with your own rules by creating a file in the /etc/apparmor.d/local/ directory. For example, to extend the gnome-shell profile, create a file /etc/apparmor.d/local/gnome-shell and add your rules. Then, reload the apparmor rules with sudo systemctl restart apparmor.

Enfore Mode

The default package configuration installs all profile in complain mode. Once you tested them and it works fine, you can easily switch to enforce mode. To do this, edit PKGBUILD on Archlinux or debian/rules on Debian and remove the --complain option to the configure script. Then build the package as usual:

-  ./configure --complain
+  ./configure

Do not worry, the profiles that are not considered stable are kept in complain mode. They can be tracked in the dists/flags directory.

Troubleshooting

AppArmor messages

Ensure that auditd is installed and running on your system in order to read AppArmor log from /var/log/audit/audit.log. Then you can see the log with aa-log

System Recovery

Issue in some core profiles like the systemd suite, or the desktop environment can fully break your system. This should not happen a lot, but if it does here is the process to recover your system on Archlinux:

  1. Boot from a Archlinux live USB
  2. If you root partition is encryped, decrypt it: cryptsetup open /dev/<your-disk-id> vg0
  3. Mount your root partition: mount /dev/<your-plain-disk-id> /mnt
  4. Chroot into your system: arch-chroot /mnt
  5. Check the AppArmor messages to see what profile is faulty: aa-log
  6. Temporarily fix the issue with either:
    • When only one profile is faultly, remove it: rm /etc/apparmor.d/<profile-name>
    • Otherwise, you can also remove the package: pacman -R apparmor.d
    • Alternativelly, you may temporarily disable apparmor as it will allow you to boot and studdy the log: systemctl disable apparmor
  7. Exit, umount, and reboot:
    exit
    umount -R /mnt
    reboot
  8. Create an issue and report the output of aa-log

Tests

A full test suite to ensure compatibility across distributions and softwares is still a work in progress.

Here is an overview of the current CI jobs:

On Gitlab CI

  • Package build for all supported distribution
  • Profiles preprocessing verification for all supported distribution
  • Go based command linting and unit tests

On Github Action

  • Integration test on the ubuntu-latest VM: run a simple list of tasks with all the rules enabled and ensure no new issue has been raised. Github Action is used as it offers a direct access to a VM with AppArmor included.

Contribution

Feedbacks, contributors, pull requests are all very welcome. Please read the CONTRIBUTING.md file for more details on the contribution process.

License

This program is based on Mikhail Morfikov's apparmor profiles project and thus has the same license (GPL2).

Copyright (C)  Alexandre PUJOL & Mikhail Morfikov

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].