EC2でファイル監査を設定する(auditd設定編)

では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.txt

auditdのリスタート

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 ログファイルについて

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Understanding_Audit_Log_Files.html

uidしか出ないのでユーザ名が分からず、タイムスタンプもUnix時間(1487591778だと2017/02/20 20:56:18)で表示されるので、可読性は良くありません。

また、上記のログ確認時にはgrepで絞ってみましたが、ログには他のメッセージも多数出力されています。システムコールを幅広く拾ってしまうためです。

ログ監視運用時には、必要なログを漏れなく効率よく検知できるように、監視ルールの設計が重要です。

まとめ

今回はAmazon Linuxでのauditdの設定とログ確認までを行いました。ログの可読性はあまりよくありませんが、簡単にファイル監査の設定を行うことができました。次回はCloudWatch Logsを使ってauditdのログ監視を設定します。

次回もお楽しみに。

次回記事: EC2でファイル監査を設定する(CloudWatch Logs設定編)

この記事を書いた人

aws-recipe-user