OSSIM项目研究记录(十一)

2021SC@SDUSC


一、库

#
# GLOBAL IMPORTS
#
import os
import pwd
import grp
#
# LOCAL IMPORTS
#

from OssimConf import OssimConf
from OssimConf import OssimMiniConf
from Logger import Logger
from DBConstantNames import *
logger = Logger.logger

1、os库在前面一篇文章讲过,链接在这OSSIM项目研究记录(九)
主要作用:提供了多数操作系统的功能接口函数。
2、pwd模块,提供了一个Unix 密码数据库(/etc/passwd)的接口,这个数据库包含本地机器用户账户信息。
pwd.getpwuid(uid):
返回对应uid的用户信息
pwd.getpwnam(name):
返回对应name的用户信息
pwd.getpwall():
返回所有用户信息
3、grp模块,提供了一个Unix 用户组/group(/etc/group)数据库的接口。
grp.getgrgid(gid):
返回对应gid的组信息
grp.getgrname(name):
返回对应group name的组信息
grp.getgrall():
返回所有组信息

pwd和grp的用法都十分相似,对于操作linux系统用户和组十分方便灵活,推荐使用。

二、模块化分析

OSSIM有几个重要组成部分

  • Arpwatch – 用于MAC异常检测。
  • P0f – 用于被动操作系统检测和操作系统更改分析。
  • Pads –用于服务异常检测。
  • Nessus –用于漏洞评估和相互关联(IDS vs Security Scanner)
  • Snort –IDS也用于与nessus的互相关。
  • Tcptrack –用于会话数据信息,可证明对攻击关联有用。
  • Ntop – 它建立了一个令人印象深刻的网络信息数据库,我们可以从中识别异常行为/异常检测。
  • Nagios – 从主机资产数据库获取,它监视主机和服务可用性信息。
  • Osiris – 一个 great HIDS.
  • OCS-NG – 跨平台库存解决方案。
  • OSSEC – 完整性、rootkit、注册表检测等。

本次分析的文件NagiosMisc.py从名字就可以看出和Nagios组件有关。
Nagios 主要功能如下:
监视网络服务 (SMTP, POP3, HTTP, NNTP, PING等)
监视主机资源 (进程, 磁盘等)
简单的插件设计可以轻松扩展Nagios的监视功能
服务等监视的并发处理
错误通知功能 (通过email, pager, 或其他用户自定义方法)
可指定自定义的事件处理控制器
可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等
可以通过手机查看系统监控信息

三、class nagios_host

1、获取本机文件的地址,连接两个或更多的路径名组件

  def file_host(self):
        if self.__conf is None:
            self.__conf = OssimConf ()
            logger.debug("Getting new ossim config for %s " % self._name)
        return os.path.join(self.__conf[VAR_NAGIOS_CFG], "hosts", self._address + ".cfg")

2、输出已检查的主机配置信息

    def write(self):
        cfg_text = "define host{\n"
        cfg_text += "\thost_name " + self._alias + "\n"
        cfg_text += "\talias " + self._alias + "\n"
        cfg_text += "\taddress " + self._address + "\n"
        cfg_text += "\tuse " + self._use + "\n"
        cfg_text += "\t}\n"
        try:
            f=open(self.file_host(), "w")
            f.write(cfg_text)
            logger.debug("host configuration checked for %s " % self._name)
        except Exception, e:
            logger.error(e)
            return False

四、class nagios_host

最关键的函数 def select_command
这就涉及到前文所说的监视网络服务,网络服务的协议有很多,这里需要进行选择。
通过端口号以及self的属性service_type来判断。
获取内容后在从配置文件里取用户名和密码登录DB。

 def select_command(self):
        if self._protocol not in self._allow_protocols:
            return
        if self._service_type in  ['ping','PING']:
            self._check_cmd = "check_ping!100.0,20%!500,60%"
            self._descr='PING'
        else:
            port=self._port
            if port == 21 and self._service_type in ['ftp','FTP']:
                self._check_cmd="check_ftp"
                self._descr="FTP"
            elif port == 22 and self._service_type in ['ssh','SSH']:
                self._check_cmd="check_ssh"
                self._descr="SSH"
            elif port == 23 and self._service_type in ['telnet','TELNET']:
                self._check_cmd="check_tcp!23"
                self._descr="TELNET"
            elif port == 25 and self._service_type in ['smtp','SMTP']:
                self._check_cmd="check_smtp"
                self._descr="SMTP"
            elif port == 80  and self._service_type in ['http','HTTP']:
                self._check_cmd="check_http"
                self._descr="HTTP"
            elif port == 161  and self._service_type in ['snmp','SNMP']:
                self._check_cmd="check_snmp"
                self._descr="SNMP"
            elif port == 389  and self._service_type in ['ldap','LDAP']:
                self._check_cmd="check_ldap"
                self._descr="LDAP"
            elif port == 3306  and self._service_type in ['mysql', 'MYSQL']:
                db_ip = self.__conf.__getitem__('ossim_host')
                db_user = self.__conf.__getitem__('ossim_user')
                db_pass = self.__conf.__getitem__('ossim_pass')
                mysql_conf = '/etc/nagios/mysql.cnf'
                nagios_dir = os.path.dirname(mysql_conf)
                try:
                    os.stat(nagios_dir)
                except:
                    os.mkdir(nagios_dir)
                f = open(mysql_conf, 'w+')
                f.write('[client]\nuser = ' + db_user + '\npassword = ' + db_pass + '\n')
                f.close()
                uid = pwd.getpwnam("root").pw_uid
                gid = grp.getgrnam("nagios").gr_gid
                os.chown(mysql_conf, uid, gid)
                os.chmod(mysql_conf, 0640)
                self._check_cmd = "av_check_mysql!" + db_ip
                self._descr = "MYSQL"
            else:
                self._check_cmd="check_tcp!%d" % self._port
                self._descr="GENERIC_TCP_%d" % self._port
                # To search in /etc/services !!!

五、class nagios_host与class nagios_host_group_service

在这里插入图片描述
从方法上来说,几乎差别不大,那么这两者的区别和作用是什么呢?
答案是:没有区别,即使class nagios_host多了一个方法debug,但作用只是输出调试信息。
在后续程序中,为了区别服务和主机组的概念特别生成两个类,但方法实际相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值