AppArmorで安全なLinux





前回の 記事はSELinuxについてでした。このセキュリティシステムに対する私の印象は2つあります。一方では、ITのセキュリティが厳しすぎることはなく、SELinuxには、OSとアプリケーションを不正アクセスから保護するために必要なすべてのものが含まれています。一方で、見た目が煩雑で不必要に複雑なため、実用的ではありません。商用ソフトウェアをインストールするためのユーザーマニュアルで1〜2回以上、インストールを開始する前にsetenforce0を実行することをお勧めします。



SELinuxの半分の機能を備えているが、構成と操作がはるかに簡単なソリューションは、これらすべてのドメイン、ポリシー、および役割を掘り下げることが怖くないという理由だけで、より信頼性の高い保護になります。これはまさにAppArmorが提供するものです。



SELinuxと同様に、AppArmorは、Linuxセキュリティモジュール(LSM)アーキテクチャに基づく必須アクセス制御(MAC)実装です。Apparmorのセキュリティモデルは、アクセス制御属性をユーザーではなくプログラムにバインドすることです。AppArmorは、通常は起動時にカーネルにロードされるプロファイルを介して分離を提供します。



AppArmorは、パスベースであるという点で他のLinux MAC実装とは異なり、強制プロファイルとアラートプロファイルを混在させることもできます。さらに、AppArmorは添付ファイルを使用して開発を容易にし、SELinux自体よりもエントリに対するバリアがはるかに浅いです。



DACとMAC



Discretionary Access Control(DAC)アーキテクチャは、サブジェクトまたはサブジェクトが属するグループの属性に基づいて、重要なリソースへのアクセスを制限します。これらの属性は、ファイルシステムのリソースへのアクセス権を決定します。各管理者は、読み取り(読み取り)、記録(書き込み)、および実行(eXecute)の特権の重要性を十分に認識しています

これらの属性は、ユーザー(所有者)、グループ(グループ)、その他(その他)の3つのカテゴリーのユーザーに適用されます。所有者カテゴリは1人のOSユーザーを指しますが、グループには多くのOSユーザーを含めることができます。残りのカテゴリには、最初の2つに属していないユーザーが含まれます。

DACモデルは、リソース所有者に、指定されたカテゴリのユーザーのアクセスのタイプを決定する権利を与えます。このアクセスの差別化は、意図しないユーザーアクションから保護するのに適しており、次の質問に答えることができます。



  • 特定のOSユーザーが読み取り、書き込み、実行に使用できるFSリソースは何ですか?
  • このグループが読み取り、書き込み、実行に使用できるFSリソースは何ですか?
  • 他のユーザーが読み取り、書き込み、実行に使用できるFSリソースは何ですか?
  • このプロセスを実行するのに十分な権限を持っているユーザーはどれですか?




図: 1DACおよびMACセキュリティシステム。



必須アクセス制御(MAC)セキュリティシステムは、アクセスポリシールールを集中管理することを前提としています。このルールでは、通常のユーザーはルールに変更を加えることができません。ポリシー設計者は、システムリソースに対して特定のアクションを実行できるプログラムまたはプロセスを決定します。 MACは、ユーザーよりもプログラムに重点を置き、OSリソースへのプロセスアクセスを区切る問題を解決します。

本質的に、MAC設計は、アクセス特権の描写を物理的な世界のドキュメントにコピーしようとします。特定の従業員が「トップシークレット」というラベルの付いたドキュメントを読む権利を持っている場合、その従業員は標準の機密および内部ドキュメントにもアクセスできます。ただし、その逆は当てはまりません。MACアーキテクチャのOSプロセスのアクセス権限のコンテキストでも同じことが言えます。したがって、プログラムがファイル/ etc / sudoersを読み取ることができる場合、そのプログラムは/ etc /ホストにもアクセスできますが、その逆も当てはまりません。



AppArmorのインストールと構成



AppArmorの基本要素はUbuntuServerにプリインストールされており、管理ツールとアプリケーションプロファイルのセットについては、個別にインストールする必要があります。



[admin@server ~]$ sudo aptitude install apparmor-utils apparmor-profiles
      
      





設定前に状態を確認してください。



[admin@server ~]$ sudo apparmor_status
apparmor module is loaded.
31 profiles are loaded.
31 profiles are in enforce mode.
 /snap/snapd/10492/usr/lib/snapd/snap-confine
 /snap/snapd/10492/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
 /usr/bin/man
 /usr/lib/NetworkManager/nm-dhcp-client.action
 /usr/lib/NetworkManager/nm-dhcp-helper
 /usr/lib/connman/scripts/dhclient-script
 /usr/lib/snapd/snap-confine
 /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
 /usr/sbin/tcpdump
   ...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
      
      





最後の行は、強制モードと不平モードを示しています。要するにこれらの体制は何ですか?



  • 強制モード、カーネルは、プロファイルファイルに書かれたルールを適用します。違反は許可されず、対応するエントリがログに記録されます。
  • 苦情モードでは、AppArmorはアクション自体をブロックせずに違反のみを登録します。


apparmor-profilesパッケージのコンテンツはフォルダー /usr/share/apparmor/extra-profiles/



にあり、100を超える既製のプロファイルがあります。



[admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |head
total 484
-rw-r--r-- 1 root system 1724 May 19 2020 README
drwxr-xr-x 3 root system 4096 Dec 8 10:14 abstractions/
-rw-r--r-- 1 root system 1319 May 19 2020 bin.netstat
-rw-r--r-- 1 root system 1815 May 19 2020 etc.cron.daily.logrotate
-rw-r--r-- 1 root system  948 May 19 2020 etc.cron.daily.slocate.cron
-rw-r--r-- 1 root system  722 May 19 2020 etc.cron.daily.tmpwatch
-rw-r--r-- 1 root system 2623 May 19 2020 sbin.dhclient
[admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |wc -l
118
      
      





プロファイルがアクティブになる前に、フォルダから、それを転送する必要があります /usr/share/apparmor/extra-profiles/



/etc/apparmor.d/



これで、調査して、必要に応じて変更することができます。たとえば、もっと簡単なものを考えてみましょう /etc/apparmor.d/bin.ping







...
#include <tunables/global>
profile ping /{usr/,}bin/{,iputils-}ping flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability net_raw,
  capability setuid,
  network inet raw,
  network inet6 raw,

  /{,usr/}bin/{,iputils-}ping mixr,
  /etc/modules.conf r,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/bin.ping>
}
      
      





ミキサーフラグを除いて、すべてがかなり明確です。以下のフラグの意味の説明:

  • r-読み取り;
  • w-記録
  • a-英語の付録からのファイルの終わりへの増分書き込み。
  • k-ファイルをロックします。
  • l-実行可能ファイルへのシンボリックリンクを作成します。
  • m-実行可能ファイルをメモリにロードします。
  • cx-実行中に下位レベルのプロファイルに移行します。
  • Cx-クリーニング環境変数を使用して実行すると、下位レベルのプロファイルに移行します。
  • ix-実行の継承。
  • px-リソースの個別のセキュリティプロファイルの定義が必要です。
  • Px-リソースの個別のセキュリティプロファイルの定義が必要であり、環境変数がクリアされます。
  • ux-新しいプロセスの起動をチェックしません。
  • Ux-新しいプロセスの起動をチェックせず、環境変数をクリーンアップしません。


Capabilities



プロセスが使用を許可されているLinuxカーネルを指定することもできます それらの完全なリストは、マニュアルの対応するページにあります。

学習モードから強制モードに切り替えるには、コマンドを実行する必要があります aa-enforce <prog_name>, - aa-complain <prog_name>



ここで、強制モードを有効にした後、pingが何かを実行しようとすると、AppArmorはそれをブロックします。



[admin@server ~]$ sudo aa-enforce ping
Setting /usr/bin/ping to enforce mode.
[admin@server ~]$ sudo cp /usr/bin/man /usr/bin/ping
[admin@server ~]$ /usr/bin/ping ping
/usr/bin/ping: can't open the manpath configuration file /etc/manpath.config
      
      





新しいプロファイルを作成する必要がある場合、それは難しくありません。まず、コマンドを使用してテンプレートを作成し、aa-autodep



次にを実行し てテンプレートを作成する必要があります aa-genprof



リンクで無料のインタラクティブダイアログaa-genprofの例



使用材料














All Articles