侵入検知システム(IDS:Intrusion Detection System)の設定　AIDE

# ホスト型IDS 「AIDE」

IDSはネットワークやサーバ上の不正侵入を検出する機能
AIDEはホスト型IDSです。

```bash
# データベースを初期化する(現在のデータ情報を登録)
aide --init

AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
# 初期化したデータベース情報を使用するデータベースファイルにコピー
cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 情報に差異がないかチェック
aide --check
#tail -f /var/log/aide.log　　リアルタイムで出力する場合は別ターミナルで実行

# 対象のファイル、ディレクトリが変更(改ざん)されていない場合の出力
AIDE, version 0.15.1

### All files match AIDE database. Looks okay!

# ファイルを変更する
chmod g+w /etc/passwd
-rw-rw-r-- 1 root root 1139 May 14 14:41 /etc/passwd
# 情報に差異がないかチェック
aide --check
# 対象のファイル、ディレクトリが変更(改ざん)されている場合の出力
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2020-06-20 09:38:05

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


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

changed: /etc/passwd

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


File: /etc/passwd
 Perm     : -rw-r--r--                       , -rw-rw-r--
 ACL      : old = A:
----
user::rw-
group::r--
other::r--
----
                  D: <NONE>
            new = A:
----
user::rw-
group::rw-
other::r--
----
                  D: <NONE>

```

/etc/aide.confファイルでチェックするファイル、ディレクトリの詳細を設定する

```conf:/etc/aide.conf

vi /etc/aide/aide.conf
@@define DBDIR /var/lib/aide
@@define LOGDIR /var/log/aide

# The location of the database to be read.
database=file:@@{DBDIR}/aide.db.gz

# The location of the database to be written.
#database_out=sql:host:port:database:login_name:passwd:table
#database_out=file:aide.db.new
database_out=file:@@{DBDIR}/aide.db.new.gz

# Whether to gzip the output to database.
gzip_dbout=yes

# Default.
verbose=5

report_url=file:@@{LOGDIR}/aide.log
report_url=stdout
#report_url=stderr
#NOT IMPLEMENTED report_url=mailto:root@foo.com
#NOT IMPLEMENTED report_url=syslog:LOG_AUTH
# These are the default rules.
#p:      permissions
#i:      inode:
#n:      number of links
#u:      user
#g:      group
#s:      size
#b:      block count
#m:      mtime
#a:      atime
#c:      ctime
#S:      check for growing size
#acl:    Access Control Lists
#selinux:  SELinux security context
#xattrs:  Extended file attributes
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:  sha256 checksum
#sha512:  sha512 checksum
#rmd160: rmd160 checksum
#tiger:  tiger checksum
#haval:  haval checksum (MHASH only)
#gost:   gost checksum (MHASH only)
#crc32:  crc32 checksum (MHASH only)
#whirlpool:     whirlpool checksum (MHASH only)
HFIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
#R: p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5
#L: p+i+n+u+g+acl+selinux+xattrs
#E: Empty group
#>: Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
# You can create custom rules like this.
# With MHASH...
# ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32
HALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
# Everything but access time (Ie. all changes)
HEVERYTHING = R+ALLXTRAHASHES
# Sane, with one good hash.
# NORMAL = sha256
NORMAL = sha256
# For directories, don't bother doing hashes.
DIR = p+i+n+u+g+acl+selinux+xattrs
# Access control only.
PERMS = p+u+g+acl+selinux+xattrs
# Access + inode changes + file type.
STATIC = p+u+g+acl+selinux+xattrs+i+n+b+c+ftype
# Logfiles only check access w/o xattrs.
LOG = p+u+g+n+acl+selinux+ftype
# Content + file type.
CONTENT = sha256+ftype
# Extended content + file type + access.
CONTENT_EX = sha256+ftype+p+u+g+n+acl+selinux+xattrs
# Some files get updated automatically, so the inode/ctime/mtime change
# but we want to know when the data inside them changes.
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+sha256

(略)
```