ではauditdの設定を行っていきます。
auditdのインストール確認
Amazon Linuxには標準でauditdがインストール済です。
念のため、インストールされていること、起動していることを確認しましょう。
インストールされているかの確認
1$ yum list installed | grep audit2audit.x86_64 2.4.1-5.27.amzn1 installed3audit-libs.x86_64 2.4.1-5.27.amzn1 installed起動しているかの確認
1$ chkconfig --list | grep audit2auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off34$ service auditd status5auditd (pid 2173) is running...auditdの設定
auditdが動いていることが確認できたら、auditdの設定を行います。
ログの出力場所や出力形式に関する設定は /etc/audit/auditd.conf にあります。
今回はログの出力先がデフォルト値(/var/log/audit/audit.log)になっていることを確認して設定は変えません。
/etc/audit/auditd.confの設定内容
1#23# This file controls the configuration of the audit daemon45#67log_file = /var/log/audit/audit.log8log_format = RAW9log_group = root10priority_boost = 411flush = INCREMENTAL12freq = 2013num_logs = 514disp_qos = lossy15dispatcher = /sbin/audispd16name_format = NONE17##name = mydomain18max_log_file = 619max_log_file_action = ROTATE20space_left = 7521space_left_action = SYSLOG22action_mail_acct = root23admin_space_left = 5024admin_space_left_action = SUSPEND25disk_full_action = SUSPEND26disk_error_action = SUSPEND27##tcp_listen_port =28tcp_listen_queue = 529tcp_max_per_addr = 130##tcp_client_ports = 1024-6553531tcp_client_max_idle = 032enable_krb5 = no33krb5_principal = auditd34##krb5_key_file = /etc/audit/audit.key監査のルールに関する設定は /etc/audit/audit.rules にあります。
今回は、以下の設定を行います。
①システムコール監査の有効化(Amazon Linuxではデフォルトで無効)
-a never,taskの行をコメントアウト(先頭に#を付ける)
②監視するファイルパスの指定
-w /home/ec2-user/audittest/ConfidentialInfo.txt -p rwxa -k fileaudit
各オプションの意味は以下の通りです。
-w /home/ec2-user/audit_test/ConfidentialInfo.txt : 監視するファイルパスの指定。今回はファイルを指定していますが、ディレクトリ指定も可能です。
-p rw : ログ記録するパーミッションの指定。今回はRead、Writeを指定しています。
-k fileaudit : ログに対するキー指定オプションが設定できます。後からログを検索しやすくするためにfileaudit というキーを指定しました。
audit.rulesは以下のように設定しました。
/etc/audit/audit.rulesの設定内容
1# This file contains the auditctl rules that are loaded23# whenever the audit daemon is started via the initscripts.45# The rules are simply the parameters that would be passed67# to auditctl.89# First rule - delete all1011-D1213# Increase the buffers to survive stress events.1415# Make this bigger for busy systems1617-b 3201819# Disable system call auditing.2021# Remove the following line if you need the auditing.2223#-a never,task2425# Feel free to add below this line. See auditctl man page2627-w /home/ec2-user/audit_test/ConfidentialInfo.txt -p rw -k file_auditファイル監査テスト用のファイルを作成
テスト用にrootユーザで
/home/ec2-user/audit_test/ConfidentialInfo.txtを作成し、所有者(root)のみアクセスできる権限(700)を付けました。
1$ ls -ltr2total 43-rwx------ 1 root root 13 Feb 20 11:47 ConfidentialInfo.txtauditdのリスタート
service auditd restart でauditdをリスタートすると設定が反映されます。
1$ sudo service auditd restart2Stopping auditd: [ OK ]3Starting auditd: [ OK ]/var/log/audit/audit.log を確認するとログが出力されていることが確認できます。
システムコールを拾うため、今回設定したファイルパスへのアクセス以外の情報(例えばrestart時のログ)も出力されています。
ログ出力の確認
ファイル監査が動き始めたので、実際にログが出る操作をやってみましょう。
rootユーザで書き込み操作
rootユーザ(アクセス権限あり)で echo ‘Bad Data’ >> ConfidentialInfo.txt を実行します。
grepで file_audit に絞ると以下のメッセージの出力を確認できます。
uid=0(root)での/bin/bashの実行が成功したこと(success=yes)が確認できます。
1type=SYSCALL msg=audit(1487591927.003:135): arch=c000003e syscall=2 success=yes exit=3 a0=1543100 a1=441 a2=1b6 a3=fffffff0 items=2 ppid=2806 pid=2807 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/bin/bash" key="file_audit"ec2-userで読み込み操作
次にec2-user(アクセス権限なし)で view ConfidentialInfo.txt を実行します。
uid=500(ec2-user)での/bin/viの実行が失敗したこと(success=no)が確認できます。
1type=SYSCALL msg=audit(1487591778.124:122): arch=c000003e syscall=2 success=no exit=-13 a0=169c3b0 a1=0 a2=0 a3=7fff6128b190 items=1 ppid=2576 pid=2804 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts0 ses=1 comm="view" exe="/bin/vi" key="file_audit"なお、auditログのフォーマットの詳細は以下サイトに記載があります。
5.6. Audit ログファイルについて
uidしか出ないのでユーザ名が分からず、タイムスタンプもUnix時間(1487591778だと2017/02/20 20:56:18)で表示されるので、可読性は良くありません。
また、上記のログ確認時にはgrepで絞ってみましたが、ログには他のメッセージも多数出力されています。システムコールを幅広く拾ってしまうためです。
ログ監視運用時には、必要なログを漏れなく効率よく検知できるように、監視ルールの設計が重要です。
まとめ
今回はAmazon Linuxでのauditdの設定とログ確認までを行いました。ログの可読性はあまりよくありませんが、簡単にファイル監査の設定を行うことができました。次回はCloudWatch Logsを使ってauditdのログ監視を設定します。
次回もお楽しみに。