# ls /etc/apparmor.d/
abstractions sbin.syslogd usr.sbin.identd usr.sbin.traceroute
bin.ping sbin.syslog-ng usr.sbin.mdnsd
program-chunks tunables usr.sbin.nscd
sbin.klogd usr.sbin.avahi-daemon usr.sbin.ntpd
Novell 將 / 轉成 . , 舉例來說 ping 指令
# which ping
/bin/ping
所在路徑為 /bin/ping, 所以設定檔就是在 /etc/apparmor.d內的
bin.ping
在profile內定義的 include 的相關目錄都是在 /etc/apparmor.d
例如
# cat /etc/apparmor.d/bin.ping
#include
/bin/ping {
#include
#include
#include
capability net_raw,
capability setuid,
network inet raw,
/bin/ping mixr,
/etc/modules.conf r,
}
我們來觀察一下上面的 include
# ls /etc/apparmor.d/
abstractions sbin.syslogd usr.sbin.identd usr.sbin.traceroute
bin.ping sbin.syslog-ng usr.sbin.mdnsd
program-chunks tunables usr.sbin.nscd
sbin.klogd usr.sbin.avahi-daemon usr.sbin.ntpd
就會發現有 tunables 目錄, 繼續觀察此目錄
# ls /etc/apparmor.d/tunables/
global home ntpd proc
觀察相關內容
# cat /etc/apparmor.d/tunables/global
# $Id: global 697 2007-05-25 03:09:30Z steve-beattie $
# ------------------------------------------------------------------
#
# Copyright (C) 2006 Novell/SUSE
#
# 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.
#
# ------------------------------------------------------------------
# All the tunables definitions that should be available to every profile
# should be included here
#include
#include
就可以知道他是用來定義 home 以及 proc 變數
# cat /etc/apparmor.d/tunables/home
# $Id: home 12 2006-04-12 21:35:41Z steve-beattie $
# ------------------------------------------------------------------
#
# Copyright (C) 2006 Novell/SUSE
#
# 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.
#
# ------------------------------------------------------------------
# @{HOME} is a space-separated list of all user home directories. While
# it doesn't refer to a specific home directory (AppArmor doesn't
# enforce discretionary access controls) it can be used as if it did
# refer to a specific home directory
@{HOME}=@{HOMEDIRS}/*/ /root/
# @{HOMEDIRS} is a space-separated list of where user home directories
# are stored, for programs that must enumerate all home directories on a
# system.
@{HOMEDIRS}=/home/
另外再來觀察
# cat /etc/apparmor.d/tunables/proc
# $Id: proc 797 2007-07-23 17:31:39Z seth_arnold $
# ------------------------------------------------------------------
#
# Copyright (C) 2006 Novell/SUSE
#
# 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.
#
# ------------------------------------------------------------------
# @{PROC} is the location where procfs is mounted.
@{PROC}=/proc/
另外可以觀察 /etc/apparmor.d/abstractions/base
對相關的 函式庫 以及檔案也有 相關存取的規定
以下是自己練習AppArmor
AppArmor 是藉由紀錄程式的所有動作, 建立該程式的Profile
來達成 限制程式進行例外行為 以防止不正當的存取
建立的方式藉由 YasT --> Novell AppArmor --> Add Profile Wizard
或是#yast2 GenProf
來建立程式的Profile
建立方法為(以firefox 為例子)
#yast2 GenProf
輸入 firefox (程式名稱,他會去系統內抓) --> Create
這個時候有可能有預設的Profile 這個時候就可以 點選 Use Profile 或是點選View Profile 觀察
如果沒有這個程式的預設Profile 那就可以點選 Create New Profile
--> 出現 Profiling 的視窗 , 按鍵盤上面的Alt + F2 --> 輸入 firefox --> Run
--> 執行平常的瀏覽 --> 關閉firefox
--> 點選 Scan system log for AppArmor events
這個時候會出現 firefox 這個程式會去呼叫哪些程式 或是 對那些目錄進行存取
程式的話 可以選擇 Inherit 或是Deny 來決定要不要讓他呼叫
權限的改變或是使用 例如 setgid or setuid 可以決定 Allow or Deny
針對一些目錄的存取, 除了 Allow or Deny 還可以使用 Glob 來使用 * 字元 再進行Allow 或是 Deny 的設定
--> 回答完一堆的問題之後 點選 Finish 完成
如何確認有生效呢
#cat /sys/kernel/security/apparmor/profiles
確認該程式是 enforce 狀態
如果之前所設定的Profile 太嚴謹想要放鬆該如何呢
可以使用
#complain firefox
將該程式切換到 complain 模式
重新開啟程式, 然後進行要允許的行為
接下來執行 Yast --> Novell AppArmor --> Update Profile Wizard
或是 #yast2 LogProf
再次決定相關行為是Allow or Deny
然後再次啟動 AppArmor 對該程式的限制
#enforce firefox
是個好玩的軟體
另外可以利用 command的方式來管理
#autodep 程式名稱
這個方式很好玩
剛剛在建立 AppArmor 的時候會詢問是否要啟動儲存庫
如果有啟動的話
這個時候 使用 autodep 就可以看到 儲存庫上面的人的設定並套用
# autodep firefox
正在連接至儲存庫...
設定檔 : /usr/lib/firefox/firefox.sh
[1 - kuschel]
2 - raulliborio
3 - Michi8383
4 - cjgiraldes
5 - noone123456789
6 - buds428
7 - mdemoulin
8 - amat17t
9 - netxxx
10 - alice
11 - osmo
12 - vtold
13 - test27
14 - memfys
15 - Ivan Susanin
16 - samavedam_vijay
17 - 非使用中本地設定檔/usr/lib/firefox/firefox.sh
18 - jjohansen
19 - juan
20 - philodoxia
21 - usernowy
22 - lasm
23 - walik
24 - mts-consult
25 - kelln
26 - rollo
[(V)iew Profile] / (U)se Profile / (C)reate New Profile / Abo(r)t / (F)inish
接下來使用 genprof 來產生套用 profile
#genprof firefox
要知道目前的程式 是在 enforce 啟用, 還是 complain 抱怨模式( 不啟動該服務的 AppArmor)
可以觀察設定檔, 例如
# cat /etc/apparmor.d/usr.lib.firefox.firefox.sh
# Last Modified: Thu Jun 3 20:36:16 2010
# REPOSITORY: http://apparmor.opensuse.org/backend/api kuschel 3827
#include
/usr/lib/firefox/firefox.sh flags=(complain) {
#include
#include
#include
deny capability sys_ptrace,
/bin/basename rix,
/bin/bash rix,
/bin/grep rix,
/etc/magic r,
/usr/bin/file rix,
/usr/lib/firefox/firefox px,
/usr/share/misc/magic.mgc r,
}
# cat /sys/kernel/security/apparmor/profiles
/usr/sbin/traceroute (enforce)
/usr/sbin/ntpd (enforce)
/usr/sbin/nscd (enforce)
/usr/sbin/mdnsd (enforce)
/usr/sbin/identd (enforce)
/usr/sbin/avahi-daemon (enforce)
/sbin/syslogd (enforce)
/sbin/syslog-ng (enforce)
/sbin/klogd (enforce)
/bin/ping (enforce)
另外可以利用 unconfined 指令來觀察哪些服務沒有被限制, 可以考慮限制他
# unconfined
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
3164 /usr/sbin/cupsd 未限制
3164 /usr/sbin/cupsd 未限制
3164 /usr/sbin/cupsd 未限制
3251 /usr/sbin/rpc.mountd 未限制
3251 /usr/sbin/rpc.mountd 未限制
3252 /usr/sbin/rpc.statd 未限制
3252 /usr/sbin/rpc.statd 未限制
3252 /usr/sbin/rpc.statd 未限制
3343 /usr/lib/postfix/master 未限制
3384 /usr/sbin/nrpe 未限制
3507 /usr/sbin/sshd 未限制
3507 /usr/sbin/sshd 未限制
25120 /usr/sbin/sshd (sshd: root@pts/1) 未限制
25120 /usr/sbin/sshd (sshd: root@pts/1) 未限制
28328 /usr/sbin/ietd 未限制
28328 /usr/sbin/ietd 未限制
28328 /usr/sbin/ietd 未限制
29117 /usr/sbin/sshd (sshd: root@pts/2) 未限制
29117 /usr/sbin/sshd (sshd: root@pts/2) 未限制
另外可以利用 command的方式來管理
#autodep 程式名稱
這個方式很好玩
剛剛在建立 AppArmor 的時候會詢問是否要啟動儲存庫
如果有啟動的話
這個時候 使用 autodep 就可以看到 儲存庫上面的人的設定並套用
# autodep firefox
正在連接至儲存庫...
設定檔 : /usr/lib/firefox/firefox.sh
[1 - kuschel]
2 - raulliborio
3 - Michi8383
4 - cjgiraldes
5 - noone123456789
6 - buds428
7 - mdemoulin
8 - amat17t
9 - netxxx
10 - alice
11 - osmo
12 - vtold
13 - test27
14 - memfys
15 - Ivan Susanin
16 - samavedam_vijay
17 - 非使用中本地設定檔/usr/lib/firefox/firefox.sh
18 - jjohansen
19 - juan
20 - philodoxia
21 - usernowy
22 - lasm
23 - walik
24 - mts-consult
25 - kelln
26 - rollo
[(V)iew Profile] / (U)se Profile / (C)reate New Profile / Abo(r)t / (F)inish
接下來使用 genprof 來產生套用 profile
#genprof firefox
要知道目前的程式 是在 enforce 啟用, 還是 complain 抱怨模式( 不啟動該服務的 AppArmor)
可以觀察設定檔, 例如
# cat /etc/apparmor.d/usr.lib.firefox.firefox.sh
# Last Modified: Thu Jun 3 20:36:16 2010
# REPOSITORY: http://apparmor.opensuse.org/backend/api kuschel 3827
#include
/usr/lib/firefox/firefox.sh flags=(complain) {
#include
#include
#include
deny capability sys_ptrace,
/bin/basename rix,
/bin/bash rix,
/bin/grep rix,
/etc/magic r,
/usr/bin/file rix,
/usr/lib/firefox/firefox px,
/usr/share/misc/magic.mgc r,
}
所以就觀察 設定檔有沒有加上 complain 的 flags 就知道
如果要再次啟動 該程式的 AppArmor 保護可以使用
enforce 程式名稱
# enforce firefox
設定 /etc/apparmor.d/usr.lib.firefox.firefox.sh 為強迫 (enforce) 模式。
檢查是否有 complain 的 flags
# cat /etc/apparmor.d/usr.lib.firefox.firefox.sh | grep flag
再次觀察
# cat /etc/apparmor.d/usr.lib.firefox.firefox.sh
# Last Modified: Thu Jun 3 20:36:16 2010
# REPOSITORY: http://apparmor.opensuse.org/backend/api kuschel 3827
#include
/usr/lib/firefox/firefox.sh {
#include
#include
#include
deny capability sys_ptrace,
/bin/basename rix,
/bin/bash rix,
/bin/grep rix,
/etc/magic r,
/usr/bin/file rix,
/usr/lib/firefox/firefox px,
/usr/share/misc/magic.mgc r,
}
另外就是可以透過 rcapparmor status 來觀看狀態
# rcapparmor status
apparmor module is loaded.
10 profiles are loaded.
10 profiles are in enforce mode.
/usr/sbin/ntpd
/usr/sbin/identd
/sbin/klogd
/sbin/syslogd
/sbin/syslog-ng
/usr/sbin/traceroute
/usr/sbin/nscd
/usr/sbin/mdnsd
/bin/ping
/usr/sbin/avahi-daemon
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode :
/sbin/syslog-ng (1970)
/sbin/klogd (1958)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
[1]+ Done yast2 (wd: /var/log/audit)
# rcapparmor status
apparmor module is loaded.
10 profiles are loaded.
10 profiles are in enforce mode.
/usr/sbin/ntpd
/usr/sbin/identd
/sbin/klogd
/sbin/syslogd
/sbin/syslog-ng
/usr/sbin/traceroute
/usr/sbin/nscd
/usr/sbin/mdnsd
/bin/ping
/usr/sbin/avahi-daemon
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode :
/sbin/syslog-ng (1970)
/sbin/klogd (1958)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
[1]+ Done yast2 (wd: /var/log/audit)
也可以藉由去觀察 /sys/kernel/security/apparmor/profiles 來觀察狀態
# cat /sys/kernel/security/apparmor/profiles
/usr/sbin/traceroute (enforce)
/usr/sbin/ntpd (enforce)
/usr/sbin/nscd (enforce)
/usr/sbin/mdnsd (enforce)
/usr/sbin/identd (enforce)
/usr/sbin/avahi-daemon (enforce)
/sbin/syslogd (enforce)
/sbin/syslog-ng (enforce)
/sbin/klogd (enforce)
/bin/ping (enforce)
另外可以利用 unconfined 指令來觀察哪些服務沒有被限制, 可以考慮限制他
# unconfined
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
2657 /sbin/rpcbind 未限制
3164 /usr/sbin/cupsd 未限制
3164 /usr/sbin/cupsd 未限制
3164 /usr/sbin/cupsd 未限制
3251 /usr/sbin/rpc.mountd 未限制
3251 /usr/sbin/rpc.mountd 未限制
3252 /usr/sbin/rpc.statd 未限制
3252 /usr/sbin/rpc.statd 未限制
3252 /usr/sbin/rpc.statd 未限制
3343 /usr/lib/postfix/master 未限制
3384 /usr/sbin/nrpe 未限制
3507 /usr/sbin/sshd 未限制
3507 /usr/sbin/sshd 未限制
25120 /usr/sbin/sshd (sshd: root@pts/1) 未限制
25120 /usr/sbin/sshd (sshd: root@pts/1) 未限制
28328 /usr/sbin/ietd 未限制
28328 /usr/sbin/ietd 未限制
28328 /usr/sbin/ietd 未限制
29117 /usr/sbin/sshd (sshd: root@pts/2) 未限制
29117 /usr/sbin/sshd (sshd: root@pts/2) 未限制
沒有留言:
張貼留言