企业安全实践(基础建设)之HIDS(上)

HIDS全称是Host-based Intrusion Detection System,即基于主机型入侵检测系统,如选型、搭建是本章的重点

前言

       HIDS运行依赖这样一个原理:一个成功的入侵者一般而言都会留下他们入侵的痕迹。

背景

       在主机系统这个层次的安全检查,其实我更加关注的是主机的重要变化情况,如它创建了哪些进程、添加哪些账户、启用了哪些服务、修改了哪些文件等,都是我关注的重点,相对于OSSEC的大量误报,我更加倾向于Osquery的精准。

Osquery

       Osquery是一款由facebook开源的,面向OSX和Linux的操作系统检测框架,通过Osquery的SQL表可以提供诸如正在运行的进程,已加载的内核模块,已打开的网络连接,硬件事件等等信息。集成osquery可以实现快速监控发现系统的安全状况

项目主页: http://osquery.io/
代码托管地址: https://github.com/facebook/osquery

下载

        安装以Centos 6/7 为主,运行也较为稳定,下载也分为不同版本

Centos 6  可直接执行rpm包,不存在其他依赖: 
wget https://s3.amazonaws.com/osquery-packages/centos6/x86_64/osquery-2.4.6-1.linux.x86_64.rpm

Centos 7 可直接执行rpm包,不存在其他依赖:
wget https://s3.amazonaws.com/osquery-packages/centos7/x86_64/osquery-2.4.6-1.linux.x86_64.rpm

        下载到的rpm可直接在内部做成rpm源,根据系统版本的不同安装不同的rpm。

安装

         安装较为简单。如下

sudo rpm -ivh centos6_osquery-2.4.6-1.linux.x86_64.rpm
或
sudo rpm -ivh centos7_osquery-2.4.6-1.linux.x86_64.rpm

运行测试

       判断安装成功与否,可以根据版本来判断

$ osqueryi -version #大规模部署时可根据此命令来判断是否安装成功
$ osqueryi #可通过此命令来手动使用osquery

1.png

$ osquery> select * from users; #例子命令,可通过此命令查询当前系统的用户情况
$ osquery> select * from users where uid=0; #例子命令,可通过此命令查询当前系统UID为0的用户信息

2.png

3.png

配置

        要配置自动化监控,就要接触它的配置项,osquery配置选项还是比较简单的。

        osquery 默认加载配置文件/etc/osquery/osquery.conf,也可通过参数osqueryd –config_path来指定启动时使用的配置文件。

         创建osquery配置文件,也可直接使用我开源项目中的测试规则。

vim /etc/osquery/osquery.conf

4.png

解析配置文件

           osqueryd.conf是osqueryd的配置文件,json格式。可以看到上述配置文件包含了options,schedule,decorators,packs几个部分。下面分别来进行介绍。

Options

options里主要包含的是osquery daemon的一些配置。这里主要介绍几个:

logger_path        日志路径,产生结果的路径

worker_threads   worker的线程数(并不是越大越好,根据自己任务的多少设定)

host_identifier      在产生result时候的主机标识

Decorators

         decorators主要用于在记录result的时候,添加额外的信息到decorations中。decorator分为三种,load,always,interval。

decorator的查询结果最多只能有一行(可以为空)。

load: 在配置加载的时候,执行一次,并记录结果,之后在每次decorations添加的是加载时的执行结果

always: 每次记录result的时候执行,并在decorations中添加执行结果

interval: 配置是一个字典。只有当匹配中对应的key时,才进行执行,并添加执行结果

Schedule

定时执行的任务。该任务会定时去执行SQL查询,并生成result和snapshot记录。其配置样例如下:

{
  "schedule": {
    "system_info": {
      "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
      "interval": 60,
      "removed": false,
      #"snapshot":true
    }
  }
}

          schedule是一个字典。key就是每个schedule的name,value是每个schedule的配置。比如这个system_info即是schedule的name。

在schedule的配置里

query: 查询的SQL语句

interval: 查询间隔,单位时间为秒

removed: 是否生成减少的记录

snapshot: 是否是snapshot类型(默认为result)

Packs

        packs可以看做是一系列schedule的集合。osquery提供了一些常用的查询。在配置文件里,可以做如下配置:

{
     "packs": {
          "process-monitor": "/etc/osquery/process-monitor.conf"
      }
}

在process-monitor.conf 可加载配置如下:

{
  "discovery": [
    "select pid from processes where name = 'zooker';",
    "select count(*) from users where username like 'www%';"
  ],
  "queries": {
    "pack_proc_num":{
      "query": "select count(*) as num_proc from processes;",
      "interval": 60,
      "removed": false
    }
  }
}

        discovery是用于判定是否在该host上执行queries。discovery是一个列表,包含多个SQL查询。多个查询结果直接是or关系。

        如上例,如果该host上存在一个zooker的进程或者存在以www开头的用户名,则执行queries。这个discovery的判断只在配置加载时做一次判断。

        queries是一个字典。其格式和内容与schedule一致,用于执行定时任务。

日志结果

        osqueryd 可以以日志的方式,记录下其工作和执行结果。日志默认保存在/var/log/osquery中。/var/log/osquery中主要有两种日志:运行日志和结果日志。

运行日志

osqueryd.INFO 和 osqueryd.WARNING:主要记录了osqueryd运行时的一些日志。

结果日志

osqueryd.results.log 和 osqueryd.snapshots.log:主要记录了osqueryd定期执行的查询的结果。

osqueryd.results.log 代表差异记录,如增加、减少。如果没有改变,则不生成。

osqueryd.snapshots.log 代表对每次查询结果的记录。

结果都以json形式保存,如图:

5.png

6.png

开源项目

项目地址

https://github.com/grayddq/HIDS

项目介绍

       本项目由两部分组成:一部分osquery、另一部分监控脚本来补充osquery规则的不足; 本文是第一部分osquery规则部分,实现绝大部分主机信息监控。

作者

       咚咚呛,如有其他建议,可联系微信280495355

满足安全需求

1、支持大部分Centos6-7、winodws系统等。
2、可记录主机的信息变更情况,如账户、进程、网络连接等等;
3、变更结果记录到日志中;

技术细节

1、监控主机信息如下:
1)对公网访问的网络连接增加情况
2)进程增加情况
3)对外端口侦听增加情况
4)arp缓存变化情况
5)authorized_keys公钥差异变化
6)crontab定时任务差异变化
7)DNS映射表差异变化
8)etc_hosts信息差异变化
9)etc_services 差异变化
10)groups 本地系统组差异变化
11)iptables 防火墙差异变化
12)系统登录和登出差异变化
13)主机系统的主动路由表差异变化
14)应用程序和二进制文件设置为用户/登录启动项,差异变化
15)通过sudo作为其他用户运行命令的规则差异变化
16)主动插入主机系统的USB设备差异变化
17)本地系统用户组关系差异变化
18)系统用户差异变化
2、监控任务都是周期定时执行的,网络连接和进程是每5分钟执行一次,其他监控都是1小时执行一次,监控时间可自行修改;

测试环境

centos 7、6

部署

1)根据系统同版本,下载osquery
$ wget https://s3.amazonaws.com/osquery-packages/centos7/x86_64/osquery-2.4.6-1.linux.x86_64.rpm 
$ wget https://s3.amazonaws.com/osquery-packages/centos6/x86_64/osquery-2.4.6-1.linux.x86_64.rpm
2)根据系统版本,安装osquery
$ sudo rpm -ivh centos6_osquery-2.4.6-1.linux.x86_64.rpm
$ sudo rpm -ivh centos7_osquery-2.4.6-1.linux.x86_64.rpm
3)拷贝 osquery.conf 和 secrity.conf 到 /etc/osquery/目录下
4)启动osquery服务
$ sudo /etc/init.d/osqueryd restart

配置

安全监控规则在文件secrity.conf中,可自行修改,其中包含主要几项,query、interval、removed。
query: 查询的SQL语句
interval: 查询间隔,单位时间为秒
removed: 是否生成减少的记录
如:
"users": {
  "query" : "select * from users;",
  "interval" : 3600,
  "removed": false
}

日志结果

        osquery的监控结果以日志形式表现,默认保存在/var/log/osquery/中,可通过日志服务器同步/var/log/osquery/osqueryd.INFO文件进行告警。

2

发表评论

已有 1 条评论

取消
Loading...

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php