从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert) ! 支持HackTricks的其他方式:
如果您想看到您的公司在HackTricks中做广告 或下载PDF格式的HackTricks ,请查看订阅计划 !
WhiteIntel 是一个由暗网 支持的搜索引擎,提供免费 功能,用于检查公司或其客户是否受到窃取恶意软件 的侵害。
WhiteIntel的主要目标是打击由窃取信息恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
基本信息
AppArmor是一个内核增强程序,旨在通过每个程序的配置文件限制程序可用的资源 ,有效地实现强制访问控制(MAC),将访问控制属性直接绑定到程序而不是用户。该系统通过在内核中加载配置文件 来运行,通常在启动时加载,这些配置文件指定程序可以访问的资源,如网络连接、原始套接字访问和文件权限。
AppArmor配置文件有两种操作模式:
强制模式 :该模式积极执行配置文件中定义的策略,阻止违反这些策略的操作,并记录任何试图违反这些策略的尝试,例如通过syslog或auditd等系统。
投诉模式 :与强制模式不同,投诉模式不会阻止违反配置文件策略的操作。相反,它将这些尝试记录为策略违规,而不强制执行限制。
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
创建一个配置文件
为了指定受影响的可执行文件,允许使用绝对路径和通配符 (用于文件通配)来指定文件。
为了指示二进制文件将对文件 具有的访问权限,可以使用以下访问控制 :
变量 可以在配置文件中定义,并可以从配置文件外部进行操作。例如:@{PROC} 和 @{HOME}(在配置文件中添加 #include <tunables/global>)
aa-genprof
为了轻松开始创建一个配置文件,apparmor 可以帮助您。可以让apparmor 检查二进制文件执行的操作,然后让您决定要允许还是拒绝哪些操作 。
只需要运行:
复制 sudo aa-genprof /path/to/binary
然后,在另一个控制台执行二进制文件通常会执行的所有操作:
复制 /path/to/binary -a dosomething
然后,在第一个控制台中按下 "s ",然后在记录的操作中指示您想要忽略、允许或其他操作。完成后按下 "f ",新配置文件将被创建在 /etc/apparmor.d/path.to.binary
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
}
请注意,默认情况下,在创建的配置文件中,什么都不允许,因此一切都被拒绝。您需要添加类似 /etc/passwd r,
这样的行来允许二进制文件读取 /etc/passwd
。
然后,您可以使用以下命令强制执行 新配置文件:
复制 sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
从日志修改配置文件
以下工具将读取日志,并询问用户是否允许一些检测到的禁止操作:
使用箭头键可以选择您想要允许/拒绝/其他操作的内容
管理配置文件
复制 #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 profile 是从 https://github.com/moby/moby/tree/master/profiles/apparmor 生成的。
docker-default profile 摘要 :
没有定义任何权限 (但是,一些权限将来自于包含基本基础规则,即 #include <abstractions/base>)
其他 /proc 和 /sys 的子目录 /文件 被拒绝 读取/写入/锁定/链接/执行访问
Ptrace 只能在受相同 apparmor profile 限制 的进程上运行
一旦您运行一个 docker 容器 ,您应该看到以下输出:
复制 1 processes are in enforce mode.
docker-default (825)
请注意,apparmor 默认会阻止容器被授予的 capabilities 权限 。例如,即使授予了 SYS_ADMIN capability,它也可以阻止在 /proc 目录内写入的权限 ,因为默认情况下 docker apparmor profile 拒绝了这种访问:
复制 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-drop=ALL --cap-add=SYS_PTRACE
撤销所有权限,仅给予SYS_PTRACE
权限
通常,当您发现 在docker 容器内部 有特权权限 可用,但某些利用 的部分无法正常工作 时,这可能是因为docker的apparmor在阻止 它。
示例
(示例来自这里 )
为了说明AppArmor的功能,我创建了一个名为“mydocker”的新Docker配置文件,并添加了以下行:
复制 deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
要激活配置文件,我们需要执行以下操作:
复制 sudo apparmor_parser -r -W mydocker
要列出配置文件,我们可以执行以下命令。下面的命令正在列出我的新AppArmor配置文件。
复制 $ sudo apparmor_status | grep mydocker
mydocker
如下所示,在尝试更改“/etc/”时,由于AppArmor配置文件阻止对“/etc”的写访问,因此会出现错误。
复制 $ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied
AppArmor Docker Bypass1
您可以使用以下命令查找运行容器的 AppArmor配置文件 :
复制 docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile" : "lowpriv" ,
"apparmor=lowpriv"
然后,您可以运行以下命令来查找正在使用的确切配置文件 :
复制 find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2> /dev/null
AppArmor Docker Bypass2
AppArmor是基于路径的 ,这意味着即使它可能会保护 目录内的文件,比如**/proc
,如果你能 配置容器的运行方式**,你可以将主机的proc目录挂载到**/host/proc
,这样它就 不再受AppArmor保护**。
AppArmor Shebang Bypass
在这个漏洞 中,你可以看到一个例子,即使你正在阻止perl使用某些资源运行,如果你只是创建一个shell脚本,在第一行**#!/usr/bin/perl
指定,然后 直接执行该文件**,你将能够执行任何你想要的东西。例如:
复制 echo '#!/usr/bin/perl
use POSIX qw(strftime);
use POSIX qw(setuid);
POSIX::setuid(0);
exec "/bin/sh"' > /tmp/test.pl
chmod +x /tmp/test.pl
/tmp/test.pl
WhiteIntel 是一个由暗网 支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件 的侵害 。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家) ! 支持HackTricks的其他方式:
如果您想在HackTricks中看到您的公司广告 或下载PDF格式的HackTricks ,请查看订阅计划 !