AmazonLinuxのEC2上でHIDSのAIDEを構築する

# IDSとは？
IDSは、侵入検知システム（Intrusion Detection System）の略称。
似たような概念として、IPSがありますが、こちらは侵入防止システム（Intrusion Prevention System）の略称で、侵入されたことを検知するか、それとも侵入自体を防止するか分けられています。

IDSにはNIDSとHIDSの二種類があり、一般的にIDSと呼ぶと前者のことをさすことが多いです。
NIDSは、Network-based Intrusion Detection Systemの頭文字を取ったもので、ネットワーク上で侵入検知を行うシステムです。
HIDSは、その頭にHost-basedが付いたもので、ホスト型の侵入検知システムのことをさします。
本ポストでは、オープンソースで提供されるHIDSのひとつである、AIDEのインストール方法について述べます。

# AIDEとは？
HIDSの一つで、ファイルの改ざん検知を実施するツールです。
Advanced Intrusion Detection Environmentの頭文字を取っているそうです。
https://aide.github.io/

似たようなツールとして、OSSECというのがあります。
https://ossec.github.io/
そっちの方はAWSさんの公式ドキュメントに構築手順が載っているので、そちらを参照。
https://aws.amazon.com/jp/blogs/news/how-to-monitor-host-based-intrusion-detection-system-alerts-on-amazon-ec2-instances/

# インストール&初期設定
まずは、yumを使ってインストールをしていきましょう。
今回は、OSとしてAmazonLinuxを利用しました。

```bash
yum install -y aide
```
/etcの下に、どこのフォルダを検知対象とするかを書くためのコンフィグファイルが
出来ているはずです。

```bash:/etc/aide.conf
@@define DBDIR /var/lib/aide
@@define LOGDIR /var/log/aide
database=file:@@{DBDIR}/aide.db.gz
database_out=file:@@{DBDIR}/aide.db.new.gz
gzip_dbout=yes
verbose=5
report_url=file:@@{LOGDIR}/aide.log
report_url=stdout
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
EVERYTHING = R+ALLXTRAHASHES
NORMAL = FIPSR+sha512
DIR = p+i+n+u+g+acl+selinux+xattrs
PERMS = p+i+u+g+acl+selinux
LOG = >
LSPP = FIPSR+sha512
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+sha256
/boot   NORMAL
/bin    NORMAL
/sbin   NORMAL
/lib    NORMAL
/lib64  NORMAL
…
```
上の方はいじらなくてよいですが、/boot NORMAL等ディレクトリがずらっと記述されているはずです。
これは、検知対象のディレクトリを表しています。検知対象としたいディレクトリはそのままにして、検知したくないディレクトリの行の先頭には!を付けてあげましょう。
(今回はテストなので、/usr以外すべてのディレクトリを検知対象外としました。)

```bash:/etc/aide.conf
/boot   NORMAL
↓
! /boot   NORMAL
```

次に、現状のファイル状態を保存したデータベースファイルを作成します。

```bash
aide --init
```
```bash:console
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
```
結構時間がかかります。現状のファイル構造が複雑であれば複雑であるほど時間がかかるんだと思います。
終わったら、早速ファイルを変更してみて検査…をしようとすると、エラーが出ます。
↑でやった初期化だけでは、検知に利用するためのデータベースファイルの元しかできないので、自分で名前を変更してあげる必要があります。

```bash
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
```

ようやく、検知する準備ができました。
さっそく適当に一つファイルを作ってみて、検知ができるか見てみましょう。

```bash
touch /usr/testfile.txt
```
/usrの直下にtestfile.txtという名前のテキストファイルを置きました。
(あくまで例ですので、ご自身の都合のいいディレクトリで試してみてください)

検査してみます。

```bash
aide --check
```

```bash:console
AIDE found differences between database and filesystem!!
Start timestamp: 2019-07-08 06:21:37

Summary:
  Total number of files:        36082
  Added files:                  1
  Removed files:                0
  Changed files:                1


---------------------------------------------------
Added files:
---------------------------------------------------

added: /usr/testfile.txt

---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /usr

--------------------------------------------------
Detailed information about changes:
---------------------------------------------------


Directory: /usr
  Mtime    : 2019-05-13 17:54:02              , 2019-07-08 06:18:33
  Ctime    : 2019-05-13 17:54:02              , 2019-07-08 06:18:33
```
やはり少し時間はかかりますが、検知できました！
実際に利用する場合は、cronに検査とデータベースファイルの更新処理を書いたシェルを登録することになるかと思います。