14 KiB
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品The PEASS Family
-
加入 💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm.
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
基本信息
AppArmor是一种内核增强技术,用于将程序限制在一组有限资源和每个程序配置文件中。配置文件可以允许网络访问、原始套接字访问以及在匹配路径上读取、写入或执行文件的权限。
它是一种强制访问控制(MAC),将访问控制属性与程序而不是用户绑定。
AppArmor通过加载到内核中的配置文件提供限制。
AppArmor配置文件可以处于以下两种模式之一:
- 强制模式:加载到强制模式的配置文件将导致执行配置文件中定义的策略,并报告策略违规尝试(通过syslog或auditd)。
- 投诉模式:投诉模式下的配置文件不会执行策略,而是报告策略违规尝试。
AppArmor与Linux上的其他一些MAC系统不同:它是基于路径的,允许混合使用强制模式和投诉模式配置文件,使用包含文件简化开发,并且比其他流行的MAC系统具有更低的入门门槛。
AppArmor的组成部分
- 内核模块:执行实际工作
- 策略:定义行为和限制
- 解析器:将策略加载到内核中
- 实用程序:与apparmor交互的用户模式程序
配置文件路径
AppArmor配置文件通常保存在_/etc/apparmor.d/_目录中
使用sudo aa-status
命令,您将能够列出受某个配置文件限制的二进制文件。如果您可以将每个列出的二进制文件的路径中的字符“/”更改为点,您将获得所提到文件夹中apparmor配置文件的名称。
例如,usr/bin/man_的apparmor配置文件将位于/etc/apparmor.d/usr.bin.man_中。
命令
aa-status #check the current status
aa-enforce #set profile to enforce mode (from disable or complain)
aa-complain #set profile to complain mode (from diable or enforcement)
apparmor_parser #to load/reload an altered policy
aa-genprof #generate a new profile
aa-logprof #used to change the policy when the binary/program is changed
aa-mergeprof #used to merge the policies
创建一个配置文件
- 为了指定受影响的可执行文件,可以使用绝对路径和通配符(用于文件匹配)来指定文件。
- 为了指示二进制文件对文件的访问权限,可以使用以下访问控制:
- r(读取)
- w(写入)
- m(内存映射为可执行文件)
- k(文件锁定)
- l(创建硬链接)
- ix(使用新程序执行另一个程序,继承策略)
- Px(在清理环境后,在另一个配置文件下执行)
- Cx(在清理环境后,在子配置文件下执行)
- Ux(在清理环境后,执行不受限制的程序)
- 变量可以在配置文件中定义,并且可以从配置文件外部进行操作。例如:@{PROC} 和 @{HOME}(在配置文件中添加 #include <tunables/global>)
- 拒绝规则支持覆盖允许规则。
aa-genprof
为了方便地开始创建一个配置文件,可以使用 apparmor。它可以检查二进制文件执行的操作,然后让您决定要允许还是拒绝哪些操作。
只需运行以下命令:
sudo aa-genprof /path/to/binary
然后,在另一个控制台上执行二进制文件通常会执行的所有操作:
/path/to/binary -a dosomething
然后,在第一个控制台中按下“s”,然后在记录的操作中指示您想要忽略、允许或其他操作。完成后按下“f”,新的配置文件将被创建在_/etc/apparmor.d/path.to.binary_中。
{% hint style="info" %} 使用箭头键可以选择您想要允许/拒绝/其他的内容 {% endhint %}
aa-easyprof
您还可以使用以下命令创建一个二进制文件的apparmor配置文件模板:
sudo aa-easyprof /path/to/binary
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/path/to/binary" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
{% hint style="info" %}
请注意,默认情况下,在创建的配置文件中,没有任何权限被允许,因此一切都被拒绝。您需要添加类似于 /etc/passwd r,
的行,以允许例如读取 /etc/passwd
的二进制文件。
{% endhint %}
然后,您可以使用以下命令强制执行新配置文件:
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
从日志中修改配置文件
以下工具将读取日志,并询问用户是否允许执行一些被检测到的禁止操作:
sudo aa-logprof
{% hint style="info" %} 使用箭头键可以选择您想要允许/拒绝/其他的内容 {% endhint %}
管理配置文件
To manage a profile, you can use the apparmor_parser
command. Here are some useful commands:
- To load a profile:
sudo apparmor_parser -r -W /path/to/profile
- To unload a profile:
sudo apparmor_parser -R /path/to/profile
- To check the status of a profile:
sudo apparmor_parser -Q /path/to/profile
You can also use the aa-status
command to view the status of all loaded profiles.
Enforcing and Complaining Modes
AppArmor profiles can be in two modes: enforcing and complaining.
- Enforcing mode: In this mode, AppArmor enforces the rules defined in the profile. If a process violates any of the rules, it will be blocked or restricted.
- Complaining mode: In this mode, AppArmor logs violations but does not enforce them. It is useful for testing and debugging profiles.
To change the mode of a profile, you can use the aa-enforce
and aa-complain
commands:
- To enforce a profile:
sudo aa-enforce /path/to/profile
- To set a profile to complain mode:
sudo aa-complain /path/to/profile
Editing a Profile
To edit a profile, you can use a text editor to modify the profile file located in /etc/apparmor.d/
. Make sure to follow the syntax and rules defined in the AppArmor documentation.
After making changes to a profile, you need to reload it using the apparmor_parser
command:
sudo apparmor_parser -r -W /path/to/profile
Creating a New Profile
To create a new profile, you can use the aa-genprof
command. This command will guide you through the process of creating a profile for a specific application.
sudo aa-genprof /path/to/application
Follow the prompts and provide the necessary information to generate the profile.
Conclusion
Managing and configuring AppArmor profiles is an essential part of securing a Linux system. By understanding how to manage, enforce, and edit profiles, you can effectively control the access and permissions of processes, reducing the risk of privilege escalation and unauthorized access.
#Main profile management commands
apparmor_parser -a /etc/apparmor.d/profile.name #Load a new profile in enforce mode
apparmor_parser -C /etc/apparmor.d/profile.name #Load a new profile in complain mode
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
日志
以下是来自可执行文件 service_bin
的 /var/log/audit/audit.log 中的 AUDIT 和 DENIED 日志示例:
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
您还可以使用以下方法获取此信息:
sudo aa-notify -s 1 -v
Profile: /bin/service_bin
Operation: open
Name: /etc/passwd
Denied: r
Logfile: /var/log/audit/audit.log
Profile: /bin/service_bin
Operation: open
Name: /etc/hosts
Denied: r
Logfile: /var/log/audit/audit.log
AppArmor denials: 2 (since Wed Jan 6 23:51:08 2021)
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
Docker中的Apparmor
注意,默认情况下加载了Docker的配置文件docker-profile:
sudo aa-status
apparmor module is loaded.
50 profiles are loaded.
13 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
docker-default
默认情况下,Apparmor docker-default配置文件是从https://github.com/moby/moby/tree/master/profiles/apparmor生成的。
docker-default配置文件摘要:
- 允许访问所有的网络
- 没有定义特权(但是,一些特权将来自于包含基本基础规则,即#include <abstractions/base>)
- 不允许写入任何**/proc**文件
- 其他/proc和/sys的子目录/文件被拒绝读取/写入/锁定/链接/执行访问
- 不允许挂载
- 只能在由相同的apparmor配置文件限制的进程上运行Ptrace
一旦你运行一个docker容器,你应该看到以下输出:
1 processes are in enforce mode.
docker-default (825)
请注意,默认情况下,apparmor甚至会阻止容器被授予的特权权限。例如,即使授予了SYS_ADMIN特权,它也可以阻止在/proc目录下写入的权限,因为默认的Docker apparmor配置文件拒绝了此访问权限:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat
sh: 1: cannot create /proc/stat: Permission denied
你需要禁用 apparmor来绕过其限制:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
请注意,默认情况下,AppArmor 也会禁止容器从内部挂载文件夹,即使具有 SYS_ADMIN 权限。
请注意,您可以向 Docker 容器添加/删除权限(这仍然受到像 AppArmor 和 Seccomp 这样的保护方法的限制):
--cap-add=SYS_ADMIN
_ 授予 _SYS_ADMIN
权限--cap-add=ALL
_ 授予 _所有权限--cap-drop=ALL --cap-add=SYS_PTRACE
_ _删除所有权限,仅授予SYS_PTRACE
权限
{% hint style="info" %} 通常,当您发现在docker容器内部有一个特权权限可用,但某些部分的利用无法正常工作时,这是因为 docker apparmor 阻止了它。 {% endhint %}
AppArmor Docker 逃逸
您可以使用以下命令找到正在运行容器的apparmor配置文件:
docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
"apparmor=lowpriv"
然后,您可以运行以下命令来查找正在使用的确切配置文件:
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
在奇怪的情况下,你可以修改apparmor docker配置文件并重新加载它。你可以移除限制并"绕过"它们。
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
-
你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品——The PEASS Family
-
加入 💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
-
通过向hacktricks仓库和hacktricks-cloud仓库提交PR来分享你的黑客技巧。