最近在迎接安全审计,其中有一条需求是:
文件完整性检测对应数据库为安装的程序文件、配置文件(排除数据文件、日志文件)
也就是需要定期对数据库软件的重要文件做内容校验,避免重要文件被篡改。
整体思路是:
1. 由于oracle的文件太多,我们假设重要的可执行文件目录为$ORACLE_HOME/bin和$ORACLE_HOME/lib。
2. 扫描后记录这些文件的md5sum值。
3. 定期扫描这些文件,对比md5sum值,检查文件是否发生变化。
4. 每次打patch,由于可执行文件会发生变化,需要记录打完patch之后,相关文件新的md5sum值。
我们可以如下实现:
find $ORACLE_HOME/bin -type f -print0 | xargs -0 md5sum >> /tmp/my.md5_before1
find $ORACLE_HOME/bin -type f -print0 | xargs -0 md5sum >> /tmp/my.md5_before1
--回滚某个补丁,模拟文件被修改
[oracle11g@testdb2 tmp]$ opatch rollback -id 17411249
find $ORACLE_HOME/bin -type f -print0 | xargs -0 md5sum >> /tmp/my.md5_after1
find $ORACLE_HOME/bin -type f -print0 | xargs -0 md5sum >> /tmp/my.md5_after1
--使用diff检查md5值被修改的文件:
[oracle11g@testdb2 tmp]$ diff my.md5_before1 my.md5_after1
1d0
< d41d8cd98f00b204e9800998ecf8427e -
284c283
< 6d068201a219168ccbccb30f06b90202 /u01/ora11g/app/oracle/product/11.2.0/db_1/bin/oracle
---
> ab0aa04b8847755f287458c2e2aa1505 /u01/ora11g/app/oracle/product/11.2.0/db_1/bin/oracle
289c288
< ab0aa04b8847755f287458c2e2aa1505 /u01/ora11g/app/oracle/product/11.2.0/db_1/bin/oracleO
---
> 6d068201a219168ccbccb30f06b90202 /u01/ora11g/app/oracle/product/11.2.0/db_1/bin/oracleO
446c445
< c0befa825eea9033a04772b73353890c /u01/ora11g/app/oracle/product/11.2.0/db_1/lib/libserver11.a
---
> c05354dd80564134c3ed71a591fe3dd3 /u01/ora11g/app/oracle/product/11.2.0/db_1/lib/libserver11.a
676c675
< c5d4b4c11499d8969fbe5e51105cd384 /u01/ora11g/app/oracle/product/11.2.0/db_1/lib/libcommon11.a
---
> 36bbc228f4fe8cddbe95a8f103875f5b /u01/ora11g/app/oracle/product/11.2.0/db_1/lib/libcommon11.a
[oracle11g@testdb2 tmp]$
如果要审计ORACLE_HOME下的所有文件,也是类似的:
find $ORACLE_HOME -type f -print0 | xargs -0 md5sum > /tmp/my.md5_before
find $ORACLE_HOME -type f -print0 | xargs -0 md5sum > /tmp/my.md5_after
但是其实我认为审计全部ORACLE_HOME下的文件没有必要,我们审计比较重要的$ORACLE_HOME/bin和ORACLE_HOME/lib的两个目录就可以了。