Solaris服务器配置高级入侵检测工具AIDE

网络整理 - 06-30
     AIDE即Advanced Intrusion Detection Environment直译为高级入侵检测环境AIDE是一个文件完整性检测工具AIDE 能够构造一个指定文件的数据库它使用nf作为其配置文件AIDE生成的数据库能够保存文件的各种属性包括权限(permission)索引节点序号(inode number)所属用户(user)所属用户组(group)文件大小最后修改时间(mtime)创建时间(ctime)最后访问时间(atime)增加的大小以及连接数AIDE 还能够使用下列算法shamdrmdtiger以密文形式建立每个文件的校验码或散列

  一旦一台计算机系统被攻击 所有的信息都将暴露在攻击者的视野中如果攻击者能很好的隐藏痕迹 那么入侵的事实是一下很难被发现的 随着时间的推移攻击者将会发现越来越多的有用信息管理员在系统安装完毕连接到网络上之前可以通过该程序建立新系统的AIDE 数据库这个AIDE 数据库是系统的一个快照和以后系统升级的准绳数据库应该至少包含这些信息关键的系统二进制可执行程序动态连接库头文件以及其它总是保持不变的文件(当然也可以用一些变通的策略例如/dev 下很多终端设备只是permisson 变动所以只要检查时去掉权限检查就不会被报警淹没)一旦发现系统被侵入系统管理员会使用lslsofpsnetstatlast 以及who等系统工具对系统进行检查但是所有这些系统工具都可能被rootkit 程序代替了可以想象被修改的ls 程序ps 也不会显示任何入侵进程的信息甚至本身就是一个肩负backdoor 任务的程序即使系统管理员恐怕永远也无法通过简单的文件属性来获知它们是否被修改过了因为文件日期大小等信息是非常容易改变的如利用touch系统管理员需要安装入侵检测工具才能更好的提高信息的安全性AIDE 高级入侵检测环境 是一个文件完整性检测工具 一种类型的入侵检测程序 使用AIDE 系统中的重要文件和文件相关的属性如权限 inode号 用户 用户组和链接数 也包括创建每一个文件的加密校验都会被创建到一个数据库中

  二AIDE的工作流程

  

  

  图 AIDE的工作流程

  AIDE的工作流程包括如下步骤

  ()设定nf

  ()依据nf建立数据库文件

  ()执行文件审核确认完整性文件系统是否有发生异常

  ()回报异常

  ()检查异常是否属于正常

  () 重设nf更新数据库文件或者采取安全的补救措施 

  三下载安装AIDE

  下载安装mhash扩展库

  Mhash扩展库支持种混编算法可以知道它支持下面的混编算法

  

      CRC HAVAL MD
  CRCB HAVAL RIPEMD
  GOST HAVAL SHA
  HAVAL HAVAL TIGER
  #wget ftp:///pub/freeware/intel//mhashsolxlocalgz
  #gunzip mhashsolxlocal
  #pkgadd –d mhashsolxlocal

   下载安装libiconv库

  libiconv库为需要做转换的应用提供了一个iconv()的函数以实现一个字符编码到另一个字符编码的转换由于历史原因国际化的文字常常由于语言或者国家的原因使用不同的编码随着互联网时代的到来通过互联网进行文字交流也逐渐增多浏览外国的网站这个时候字符编码的转换变得尤为重要这带来了一个问题就是许多字符在某一种编码方式中没有为了解决这种混乱Unicode的编码方式被建立Unicode是一种超级编码包含了所有这些编码的字符集因此一些新的文本格式像XML的默认编码方式就是Unicode

  但是很多老式的计算机还在使用当地的传统的字符编码方式而一些程序例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换其他的一些程序则内置支持Unicode以顺利支持国际化的处理但是仍然有在Unicode和其他的传统编码之间转换的需求GNU的libiconv就是为这两种应用设计的编码转换库

  

      #wget solintellocalgz
  #gunzip libiconvsolintellocalgz
  #pkgadd –d libiconvsolintellocal

  下载安装libgcc

  Libgcc是编译器内部的函数库是用来实现目标平台没有直接实现的语言元素举个例子C 语言的模运算符 (%) 在某个平台上可能无法映射到一条汇编指令可能用一个函数调用实现比让编译器为其生成内嵌代码更受欢迎(特别是对一些内存受限的计算机来说比如微控制器)很多其它的基本运算包括除法乘法字符串处理(比如 memory copy)一般都会在这类函数库中实现

  

      #wget ftp:///pub/freeware/intel//libgccsolxlocalgz
  #gunzip libgccsolxlocalgz
  #pkgadd –d libgccsolxlocal

   下载安装AIDE

  

      #wget ftp:///pub/freeware/intel//aidesolxlocalgz
  #gunzip aidesolxlocalgz
  #pkgadd –d aidesolxlocal

  

  图 AIDE在Soilaris 下安装完成界面

  四配置AIDE

  接下来的步骤是配置nf nf 配置文件的格式是非常简单的 在设

  置该文件之前 建议阅读该配置 或者阅读帮助文件进入/usr/local/etc/目录编辑nf文件包含如下内容

  

      Rule = p+i+u+g+n+s+md
  /etc Rule
  /sbin Rule
  /var Rule
  /usr/bin Rule
  /usr/local/bin Rule
  !/var/spool/*
  !/var/log/*
  !/var/tmp/*
  !/opt/apachelogs/*

  在这个配置中 我们可以看到一个规则Rule设置了检查的权限(p) inode号(i) 用户(u)用户组(g) 链接数(n) md校验(md) 然后这些规则被应用到/bin /sbin /var 和

  /usr/local/apache/conf目录下的所有文件 因为通常这些目录下的文件很少被修改

  /etc/中的文件仅使用了权限(p) inode号(i) 用户(u)和用户组(g) 因为文件的大小

  可能改变 而其它的很少改变 /var/spool和/var/log目录中的所有子目录和文件被设置

  为不做检查 因为这里面的文件经常性的改变

  在nf里有三类命令行

  配置命令行 用来设置配置参数和定义变量

  选项命令行 指明哪个文件将被添加到数据库中

  宏命令行 在配置文件内部定义或取消定义变量

  在配置文件中所有指定的系统的部分都会被监控以及被默认的规则设置这里列出一些AIDE的功能

  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 代表检查文件大小的变动程&#;

  md: md checksum 代表md杂凑函&#;算法

  sha: sha checksum 代表sha杂凑函&#;算法

  rmd: rmd checksum 代表md杂凑函&#;算法

  tiger: tiger checksum 代表tiger杂凑函&#;算法

  R: p+i+n+u+g+s+m+c+md R参数代表同时设定这个参数

  L: p+i+n+u+g L参数代表同时设定这个参数

  E: Empty group 代表空数组

  >: Growing logfilep+u+g+i+n+S代表变动的log档检查参数

  haval: havalchecksum代表hava杂凑函&#;算法

  gost: gostchecksum代表gost杂凑函&#;算法

  crc: crc checksum代表crc杂凑函&#;算法

  说明AIDE主要支持两种加密算法md和Sha

  MDMessageDigest Algorithm由麻省理工学院为开发的用于数字签名的信息摘要算法做Message的Hash变换将任意长度的Message变换成一个位的大整数并且它是一个不可逆的字符串变换算法MD的典型应用是对一段Message产生数字指纹以防止被篡改即数字签名应用

  SHA安全散列算法(SHA)是由美国国家标准和技术协会(National Institute of Standards and Technology)开发的年发布了原始算法的修订版称为SHA与MD相比SHA生成位的消息摘要虽然执行更慢却被认为更安全明文消息的最大长度可达到位

  五初始化AIDE

  下面初始化AIDE使用命令

  /usr/local/bin/aide c /usr/local/etc/nf –i

  提示下面成功信息如图

  

  图 初始化AIDE

  #cd /usr/local/etc/

  # cp aidedbnew aidedb

  其他命令

  需要检查数据库 运行命令:

  # aide –C

  或者使用下面的命令仔细的比较最初的的数据库和后生成的库之间的区别现在的数据库:

  #aide compare

  升级数据库如果你已经完成了检查和修复任务 你需要重新更新一下数据库:

  #aide –update

  六ADIE进阶应用

  定期运行AIDE

  典型的系统管理员会花很多时间进行重复的任务至少在没有可在合适的时间点运行各种任务的任务计划系统的情况下他们会这样做不过计划可以节约大量的时间因此这些选项值得考虑cron 系统可处理所有基于时间的命令执行计划并提供了可用于在特定时间运行命令的两个不同解决方案at 命令可计划在特定的时间执行某项任务且仅执行一次crontab 系统允许指定命令的执行计划可以在指定的时间运行可以在特定某天运行还可以将二者结合使用

  为了定期执行要设置一个 cron 表(称为 crontab)以定义每个命令执行的间隔和顺序该文件的格式是这样的每个命令占单独的一行每行包括六个字段如下所示

  minute hour day month dayofweek command

  应根据以下规则使用数字进行时间指定

  Minute Hour Day Month Day

  (其中 是星期日) 对于任何字段都可以指定单个数字用逗号分隔的数字列表或星号(指示应匹配任何值) 通过指定时间只要匹配当前时间就会执行命令例如通过指定以下时间 * * * * dosomething命令将在当前时间的分钟值为 时(例如整点时)执行而指定以下时间 * * dosomething命令将在每晚 点分时运行

  

      crontab e
     * * /usr/local/bin/aide c /usr/local/etc/nf

  缺省情况下crontab 运行的生成输出(到标准输出和标准错误的输出)的命令都会将输出以电子邮件的形式发送给该作业的用户不过这并非总是方便的解决方案对于某些结果您可能只需要部分输出或者可能希望忽略标准输出而仅报告错误甚至可能希望将输出发送到不同的用户或电子邮件别名 所以要忽略输出请重定向到特殊的 /dev/null 设备对于标准输出请使用以下语句

  

         * * /usr/local/bin/aide c /usr/local/etc/nf |
  mailx s server_aide_report  >/dev/null 

   在USB存储设备中保存AIDE数据库

  使用AIDE 系统中的重要文件和文件相关的属性如权限 inode号 用户 用户组和链接数 也包括创建每一个文件的加密校验都会被创建到一个数据库中 然后把这些信息放到一个可读类型的媒体介质上 如一个CDR U盘 zip磁盘等 那么攻击者想要覆盖入侵痕迹将会变的极为困难

  从Solaris 开始下面这些大容量的USB存储设备就被支持

  &#; CDRW;&#; 移动硬盘;&#; DVD;&#; 数码照相机;&#; ZIP

  所有USB大容量存储设备都是可以移动的设备Solaris平台的USB设备具有下列特性

  &#; Solaris平台的USB设备支持DOS或者Windows的文件系统

  &#; 可以友好地使用rmformat命令来代替format命令对大容量的USB存储设备进行分区或者格式化如果还需要用以前的format命令请用formate命令

  &#; 还可以用fdisk命令进行fdisk分区的划分

  &#; 当使用卷管理器(volume management)管理这些设备时大容量的USB存储设备就会被自动mount到/rmdisk目录但是需要卷管理器重新启动

  &#; 如果不使用卷管理器这些大容量的USB存储设备就需要手动mount到系统比如一个FAT文件系统的设备就用下面的命令

  

mount F pcfs /dev/rdsk/ctdp /mnt

  对于支持热插拔的USB存储设备只要插上设备我们就能用prtconf在系统设备层看到它拔下就不会再出现一旦数据被初始化 然后你可以把数据库和aide的binary文件拷贝到一个u盘媒体上:

  

      #mv aidedb /dev/rdsk/ctdp/aidedb
  #umount /mnt/u

  然后确定修改nf配置文件:

  

#vi nf

  修改成下面的配置:

  

      database=file: //dev/rdsk/ctdp/aidedb
  database_out=file:/ /dev/rdsk/ctdp/aidedbnew
  database_new=file:/ /dev/rdsk/ctdp/aidedbnew