最近在迎接安全审计,其中有一条需求是:
文件完整性检测对应数据库为安装的程序文件、配置文件(排除数据文件、日志文件)
也就是需要定期对数据库软件的重要文件做内容校验,避免重要文件被篡改。
整体思路是:
1. 由于oracle的文件太多,我们假设重要的可执行文件目录为$ORACLE_HOME/bin和$ORACLE_HOME/lib。
2. 扫描后记录这些文件的md5sum值。
3. 定期扫描这些文件,对比md5sum值,检查文件是否发生变化。
4. 每次打patch,由于可执行文件会发生变化,需要记录打完patch之后,相关文件新的md5sum值。
我们可以如下实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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下的所有文件,也是类似的:
1 2 3 |
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的两个目录就可以了。