AppArmor介绍


test
test 2022-10-08 10:53:38 52430
分类专栏: 资讯
原文链接:http://www.lenky.info/archives/2014/05/2405

AppArmor是一款与SeLinux类似的安全框架/工具,其主要作用是控制应用程序的各种权限,例如对某个目录/文件的读/写,对网络端口的打开/读/写等等。
来之Novell网站的引用:
  1. AppArmor is designed to provide easy-to-use application security for both servers and workstations. Novell AppArmor is an access control system that lets you specify per program which files the program may read, write, and execute. AppArmor secures applications by enforcing good application behavior without relying on attack signatures, so it can prevent attacks even if they are exploiting previously unknown vulnerabilities.
AppArmor通过一个配置文件(即profile)来指定一个应用程序的相关权限。在大多数情况下,可以通过限制应用程序的某些不必要的权限来提升系统安全性,比如指定Firefox不能访问系统目录,这样即便是使用Firefox访问了恶意网页,也可以避免恶意网页通过Firefox访问到系统目录。
AppArmor是Ubuntu的默认选择,但在默认情况下,系统自带安装的profile配置文件很少,通过命令:sudo apt-get install apparmor-profiles,可以安装额外的AppArmor-profile文件。
在Ubuntu下通过命令sudo apparmor_status可以查看当前AppArmor的状态。
执行sudo apt-get install apparmor-profiles命令之前的自带profile配置:
  1. lenky@local:~$ sudo apparmor_status
  2. apparmor module is loaded.
  3. 20 profiles are loaded.
  4. 20 profiles are in enforce mode.
  5.      /sbin/dhclient
  6.      /usr/bin/evince
  7.      /usr/bin/evince-previewer
  8.      /usr/bin/evince-previewer//sanitized_helper
  9.      /usr/bin/evince-thumbnailer
  10.      /usr/bin/evince-thumbnailer//sanitized_helper
  11.      /usr/bin/evince//sanitized_helper
  12.      /usr/lib/NetworkManager/nm-dhcp-client.action
  13.      /usr/lib/connman/scripts/dhclient-script
  14.      /usr/lib/cups/backend/cups-pdf
  15.      /usr/lib/lightdm/lightdm-guest-session
  16.      /usr/lib/lightdm/lightdm-guest-session//chromium
  17.      /usr/lib/telepathy/mission-control-5
  18.      /usr/lib/telepathy/telepathy-*
  19.      /usr/lib/telepathy/telepathy-*//pxgsettings
  20.      /usr/lib/telepathy/telepathy-*//sanitized_helper
  21.      /usr/lib/telepathy/telepathy-ofono
  22.      /usr/sbin/cups-browsed
  23.      /usr/sbin/cupsd
  24.      /usr/sbin/tcpdump
  25. 0 profiles are in complain mode.
  26. 4 processes have profiles defined.
  27. 4 processes are in enforce mode.
  28.      /usr/lib/telepathy/mission-control-5 (2438)
  29.      /usr/sbin/cups-browsed (1070)
  30.      /usr/sbin/cupsd (2881)
  31.      /usr/sbin/cupsd (2884)
  32. 0 processes are in complain mode.
  33. 0 processes are unconfined but have a profile defined.
  34. lenky@local:~$
执行sudo apt-get install apparmor-profiles命令之后的情况:
  1. lenky@local:~$ sudo apparmor_status
  2. apparmor module is loaded.
  3. 47 profiles are loaded.
  4. 23 profiles are in enforce mode.
  5.      /sbin/dhclient
  6.      /usr/bin/evince
  7.      /usr/bin/evince-previewer
  8.      /usr/bin/evince-previewer//sanitized_helper
  9.      /usr/bin/evince-thumbnailer
  10.      /usr/bin/evince-thumbnailer//sanitized_helper
  11.      /usr/bin/evince//sanitized_helper
  12.      /usr/lib/NetworkManager/nm-dhcp-client.action
  13.      /usr/lib/chromium-browser/chromium-browser//browser_java
  14.      /usr/lib/chromium-browser/chromium-browser//browser_openjdk
  15.      /usr/lib/chromium-browser/chromium-browser//sanitized_helper
  16.      /usr/lib/connman/scripts/dhclient-script
  17.      /usr/lib/cups/backend/cups-pdf
  18.      /usr/lib/lightdm/lightdm-guest-session
  19.      /usr/lib/lightdm/lightdm-guest-session//chromium
  20.      /usr/lib/telepathy/mission-control-5
  21.      /usr/lib/telepathy/telepathy-*
  22.      /usr/lib/telepathy/telepathy-*//pxgsettings
  23.      /usr/lib/telepathy/telepathy-*//sanitized_helper
  24.      /usr/lib/telepathy/telepathy-ofono
  25.      /usr/sbin/cups-browsed
  26.      /usr/sbin/cupsd
  27.      /usr/sbin/tcpdump
  28. 24 profiles are in complain mode.
  29.     /sbin/klogd
  30.     /sbin/syslog-ng
  31.     /sbin/syslogd
  32.     /usr/lib/chromium-browser/chromium-browser
  33.     /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
  34.     /usr/lib/chromium-browser/chromium-browser//lsb_release
  35.     /usr/lib/chromium-browser/chromium-browser//xdgsettings
  36.     /usr/lib/dovecot/deliver
  37.     /usr/lib/dovecot/dovecot-auth
  38.     /usr/lib/dovecot/imap
  39.     /usr/lib/dovecot/imap-login
  40.     /usr/lib/dovecot/managesieve-login
  41.     /usr/lib/dovecot/pop3
  42.     /usr/lib/dovecot/pop3-login
  43.     /usr/sbin/avahi-daemon
  44.     /usr/sbin/dnsmasq
  45.     /usr/sbin/dovecot
  46.     /usr/sbin/identd
  47.     /usr/sbin/mdnsd
  48.     /usr/sbin/nmbd
  49.     /usr/sbin/nscd
  50.     /usr/sbin/smbd
  51.     /usr/{sbin/traceroute,bin/traceroute.db}
  52.     /{usr/,}bin/ping
  53. 10 processes have profiles defined.
  54. 4 processes are in enforce mode.
  55.     /usr/lib/telepathy/mission-control-5 (2438)
  56.     /usr/sbin/cups-browsed (1070)
  57.     /usr/sbin/cupsd (2881)
  58.     /usr/sbin/cupsd (2884)
  59. 0 processes are in complain mode.
  60. 6 processes are unconfined but have a profile defined.
  61.     /usr/sbin/avahi-daemon (868)
  62.     /usr/sbin/avahi-daemon (873)
  63.     /usr/sbin/dnsmasq (2493)
  64.     /usr/sbin/nmbd (2639)
  65.     /usr/sbin/smbd (704)
  66.     /usr/sbin/smbd (1105)
  67. lenky@local:~$
可以看到新安装了一些profile配置文件。Apparmor的profile配置文件均保存在目录/etc/apparmor.d,对应的日志文件记录在/var/log/messages。
Apparmor使用内核标准安全文件系统机制(/sys/kernel/security)来加载和监控profiles文件。而虚拟文件/sys/kernel/security/apparmor/profiles里记录了当前加载的profiles文件。
  1. lenky@local:/var/log$ cat /sys/kernel/security/apparmor/profiles
  2. cat: /sys/kernel/security/apparmor/profiles: 权限不够
  3. lenky@local:/var/log$ sudo -i
  4. [sudo] password for lenky:
  5. root@local:~ cat /sys/kernel/security/apparmor/profiles
  6. /usr/{sbin/traceroute,bin/traceroute.db} (complain)
  7. /usr/sbin/smbd (complain)
  8. /usr/sbin/nscd (complain)
  9. /usr/sbin/nmbd (complain)
  10. /usr/sbin/mdnsd (complain)
  11. /usr/sbin/identd (complain)
  12. /usr/sbin/dovecot (complain)
  13. /usr/sbin/dnsmasq (complain)
  14. /usr/sbin/avahi-daemon (complain)
  15. /usr/lib/dovecot/pop3-login (complain)
  16. /usr/lib/dovecot/pop3 (complain)
  17. /usr/lib/dovecot/managesieve-login (complain)
  18. /usr/lib/dovecot/imap-login (complain)
  19. /usr/lib/dovecot/imap (complain)
  20. /usr/lib/dovecot/dovecot-auth (complain)
  21. /usr/lib/dovecot/deliver (complain)
  22. /usr/lib/chromium-browser/chromium-browser (complain)
  23. /usr/lib/chromium-browser/chromium-browser//browser_java (enforce)
  24. /usr/lib/chromium-browser/chromium-browser//browser_openjdk (enforce)
  25. /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox (complain)
  26. /usr/lib/chromium-browser/chromium-browser//lsb_release (complain)
  27. /usr/lib/chromium-browser/chromium-browser//sanitized_helper (enforce)
  28. /usr/lib/chromium-browser/chromium-browser//xdgsettings (complain)
  29. /sbin/syslog-ng (complain)
  30. /sbin/syslogd (complain)
  31. /sbin/klogd (complain)
  32. /{usr/,}bin/ping (complain)
  33. /usr/sbin/tcpdump (enforce)
  34. /usr/lib/telepathy/telepathy-ofono (enforce)
  35. /usr/lib/telepathy/telepathy-* (enforce)
  36. /usr/lib/telepathy/telepathy-*//sanitized_helper (enforce)
  37. /usr/lib/telepathy/telepathy-*//pxgsettings (enforce)
  38. /usr/lib/telepathy/mission-control-5 (enforce)
  39. /usr/sbin/cups-browsed (enforce)
  40. /usr/bin/evince-thumbnailer (enforce)
  41. /usr/bin/evince-thumbnailer//sanitized_helper (enforce)
  42. /usr/bin/evince-previewer (enforce)
  43. /usr/bin/evince-previewer//sanitized_helper (enforce)
  44. /usr/bin/evince (enforce)
  45. /usr/bin/evince//sanitized_helper (enforce)
  46. /usr/lib/lightdm/lightdm-guest-session (enforce)
  47. /usr/lib/lightdm/lightdm-guest-session//chromium (enforce)
  48. /usr/sbin/cupsd (enforce)
  49. /usr/lib/cups/backend/cups-pdf (enforce)
  50. /usr/lib/connman/scripts/dhclient-script (enforce)
  51. /usr/lib/NetworkManager/nm-dhcp-client.action (enforce)
  52. /sbin/dhclient (enforce)
  53. root@local:~
profile文件以它所对应的应用程序的完整路径来命名,当然,要去除对前面的根符号(/),然后把路径中间的/替换为.。如果是软连接,还必须转换到最终的应用程序。比如firefox的情况:
  1. lenky@local:/var/log$ whereis firefox
  2. firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/bin/X11/firefox /usr/share/man/man1/firefox.1.gz
  3. lenky@local:/var/log$ file /usr/bin/firefox
  4. /usr/bin/firefox: symbolic link to `../lib/firefox/firefox.sh'
  5. lenky@local:/var/log$ ls /usr/lib/firefox/firefox.sh -l
  6. -rwxr-xr-x 1 root root 2740  4月 11 05:10 /usr/lib/firefox/firefox.sh

可以看到firefox对应的最终路径是/usr/lib/firefox/firefox.sh,因此与此相对的AppArmor配置文件为:/etc/apparmor.d/usr.lib.firefox.firefox.sh,即我们可以在/etc/apparmor.d目录下建立一个usr.lib.firefox.firefox.sh文件来定义firefox的相关权限。
一个profile文件定义好之后,当其对应的应用程序启动(比如firefox),它也就自动激活生效。有两种模式,分别为:
complain:应用程序发生了超过其权限之外的动作时,Apparmor会进行log记录,但是不会阻止应用程序相关动作的成功执行。
enforce:应用程序发生了超过其权限之外的动作时,Apparmor会进行log记录,并且会阻止应用程序相关动作的成功执行。
通过命令aa-complain或aa-enforce可以切换profile文件的状态。这需要先安装对应的utils工具:

  1. sudo apt-get install apparmor-utils
试试:

  1. lenky@local:~$ sudo aa-complain tcpdump
  2. Setting /usr/sbin/tcpdump to complain mode.
  3. lenky@local:~$ sudo aa-enforce tcpdump
  4. Setting /usr/sbin/tcpdump to enforce mode.
做了这种修改后需要重启apparmor,Apparmor的启动、停止等操作的相关命令如下:
  1. Start : sudo /etc/init.d/apparmor start
  2. Stop : sudo /etc/init.d/apparmor stop
  3. reload: sudo /etc/init.d/apparmor reload
  4. Show status: sudo /etc/init.d/apparmor status
其他命令:
aa-unconfined用来显示系统里那些拥有tcp/udp端口,但又未处于apparmor监控之下的进程。
  1. lenky@local:~$ sudo aa-unconfined
  2. 704 /usr/sbin/smbd not confined
  3. 868 /usr/sbin/avahi-daemon not confined
  4. 979 /usr/sbin/sshd not confined
  5. 1070 /usr/sbin/cups-browsed confined by '/usr/sbin/cups-browsed (enforce)'
  6. 2493 /usr/sbin/dnsmasq not confined
  7. 2639 /usr/sbin/nmbd not confined
  8. 2881 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'
  9. 9624 /usr/sbin/nginx (nginx: master process /usr/sbin/nginx) not confined

这样的进程越多,对应系统被攻击的风险也就越大。aa-genprof命令用来生成一个profile文件。实例:利用命令sudo aa-genprof nginx生成nginx的一个profile文件。
在一个终端1里执行:
  1. lenky@local:~$ sudo aa-genprof nginx
  2. ...
  3. [(S)can system log for AppArmor events] / (F)inish
另开一个终端2,执行sudo nginx,然后切回终端1,按s进行扫描,竟然挂了,原因不明,不管,直接再执行sudo aa-genprof nginx,按s进行扫描,没有扫描到东西。
切换会终端2,sudo killall nginx; sudo nginx,切回终端1,按s进行扫描,有如下提示:
  1. [(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
按a,还有类似提示,一直按a,即全部设置为allow,到最后出现:
  1. (S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
按s保存配置。
出现:
  1. [(S)can system log for AppArmor events] / (F)inish
按f结束












网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=17518
赞同 0
评论 0 条
testL2
粉丝 0 发表 13 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2950
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!