你可能不知道的态势感知-snort

枫少@KillBoy 资源分享评论4,0781字数 6056阅读20分11秒阅读模式

抱歉,来晚了!最近疫情又有点严重了,被迫在家办公,复现完漏洞,点开微信群看到群里小伙伴最近都在讨论态势感知系统,于是我有了写文章的冲动,哈哈哈,我又提起了笔杆子,说到态势感知不得不说说snort,现在很多产品可以看到他的影子。本次主要从原理和安装使用上面为大家解析相关内容,解开他的神秘面纱。

关于snort,在1998年,Marty Roesch先生用C语言开发了开放源代码(Open Source)的入侵检测系统Snort. 直至今天,Snort已发展成为一个多平台(Multi-Platform),实时(Real-Time)流量分析,网络IP数据包(Pocket)记录 等特性的强大的网络入侵检测/防御系统(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort符合通用公共许可(GPL——GNU General Pubic License),在网上可以通过免费下载获得Snort,并且只需要几分钟就可以安装并开始使用它。

Snort能够对网络上的数据包进行抓包分析,但区别于其它嗅探器的是, 它能根据所定义的规则进行响应及处理。Snort 通过对获取的数据包,进行各规则的分析后,根据规则链,可采取Activation(报警并启动另外一个动态规则链)、Dynamic(由其它的规则包调 用)、Alert(报警),Pass(忽略),Log(不报警但记录网络流量)五种响应的机制。

Snort有数据包嗅探,数据包分析,数据 包检测,响应处理等多种功能,每个模块实现不同的功能,各模块都是用插件的方式和Snort相结合,功能扩展方便。例如,预处理插件的功能就是在规则匹配 误用检测之前运行,完成TIP碎片重组,http解码,telnet解码等功能,处理插件完成检查协议各字段,关闭连接,攻击响应等功能,输出插件将得理后的各种情况以日志或警告的方式输出。

入侵检测(Intrusion Detection),顾名思义,就是对入侵行为的发觉。他通过对计算机网络或计算机系统中若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象。

入侵检测系统所采用的技术可分为特征检测与异常检测两种。
特征检测特征检测(Signature-based detection) 又称Misuse detection ,这一检测假设入侵者活动可以用一种模式来表示,系统的目标是检测主体活动是否符合这些模式。它可以将已有的入侵方法检查出来,但对新的入侵方法无能为力。其难点在于如何设计模式既能够表达“入侵”现象又不会将正常的活动包含进来。
异常检测异常检测(Anomaly detection) 的假设是入侵者活动异常于正常主体的活动。根据这一理念建立主体正常活动的“活动简档”,将当前主体的活动状况与“活动简档”相比较,当违反其统计规律时,认为该活动可能是“入侵”行为。异常检测的难题在于如何建立“活动简档”以及如何设计统计算法,从而不把正常的操作作为“入侵”或忽略真正的“入侵”行为。

1)基于主机 (ossec)一般主要使用操作系统的审计、跟踪日志作为数据源,某些也会主动与主机系 统进行交互以获得不存在于系统日志中的信息以检测入侵。这种类型的检测系统不需要额外的硬件.对网络流量不敏感,效率高,能准确定位入侵并及时进行反应, 但是占用主机资源,依赖于主机的可靠性,所能检测的攻击类型受限。不能检测网络攻击。
2)基于网络 (snort)通过被动地监听网络上传输的原始流量,对获取的网络数据进行处理,从中提 取有用的信息,再通过与已知攻击特征相匹配或与正常网络行为原型相比较来识别攻击事件。此类检测系统不依赖操作系统作为检测资源,可应用于不同的操作系统 平台;配置简单,不需要任何特殊的审计和登录机制;可检测协议攻击、特定环境的攻击等多种攻击。但它只能监视经过本网段的活动,无法得到主机系统的实时状 态,精确度较差。大部分入侵检测工具都是基于网络的入侵检测系统.
3)分布式这种入侵检测系统一般为分布式结构,由多个部件组成,在关键主机上采用主机入侵检测,在网络关键节点上采用网络入侵检测,同时分析来自主机系统的审计日志和来自网络的数据流,判断被保护系统是否受到攻击

本次讲解主要讲解securityonion以完成后续的演示,Security Onion是用于网络监控和入侵检测的基于Ubuntu的Linux发行版,Security Onion基于Ubuntu,包含了入侵检测、网络安全监控、日志管理所需的Snort、Suricata、Bro、OSSEC、Sguil、Squert、ELSA、Xplico、NetworkMiner等众多工具。

安装securityonion版本,至少需要两块网卡,一块用于监听网络流量、一块用于管理界面,多块网卡的话 可以接多个交换机。这里我们用虚拟机安装securityonion

我们选择第一个选项 进入live模式    双击桌面那个install 进行安装

选择英文 下一步

这块选择下一步

这是问你清除哪块磁盘   直接下一步即可

这是问你清除哪块磁盘   直接下一步即可

询问你安装到哪块硬盘上   点击安装

选择时区和键盘布局自己选择

用户名 8ling   计算机名8ling-snort    密码 123457  下面三个选项我们选最上面的那个   就直接登录了

然后等待它安装

安装完成后我们选择重启机器  restart now

我们双击这个setup

需要输入 密码  我们把密码输入进去(那会设置的密码)

询问我们是否启动配置向导   选择yes

你是否要配置你的网络接口   点击yes

选择eth0 做为我的管理接口  选择yes

我们在这里为方便就不指定ip地址了  (实际情况下一定使用静态)

配置你的镜像口(监听交换机流量的口)             我们选择yes

我们选择eth1

配置完成后  点击yes

选择重启系统    reboot

开机之后 再次点击setup   输入密码后选择yes

因为我们配置过网卡了 点击yes 即可  如果想重新配置 点击x就可以了

它让我们选择部署方式  第一个是快速    第二个是 高级    我们选择高级 点击下一步

你当前的机器 需要以什么模式启动   
第一种模式是server   服务器
第二种模式是sensor  它只是一个探针  只采集数据然后把数据发送给server
第三种模式是standalone   独立  我这台机器包含两种角色 不过我不和其他链接

这个可以拆成分布式的部署方式   但实验环境下啥也没有  我们就选择第三种独立模式

我们点击yes   启用它

让我们配置邮箱 (不会验证)

默认保留30天数据   (网络安全法要求180天,硬盘内存得大)

这个也可以选择180天  我们就7天默认就好了

你希望启用哪个ids 引擎
可以把suricata 理解为 snort 的升级版
我们选择suricata

要采用入侵检测的规则    随便选一个 反正不用它的规则

这个默认点ok就行了

让我们确认监听的端口是哪个   直接ok

点击yes  打开引擎

你想有多少个ids的线程运行   我们只给了两核心   所以选择两核心 点击ok

接下来都点击yes  打开

直到再次出现这个页面   我们点击2  ok

然后一直点击yes  因为询问的我们是不是要开启什么功能

中途有需要输入参数的  默认点击下一步即可

来到这一步后 我们点击yes

然后等待它配置完成即可,完成后我们点击桌面上那个 snorby

进入到浏览器后  我们给这个网址一个信任

账号就是我们那会设置的邮箱    密码是 123457

进入到这个页面就证明机器环境配置的没有问题了

需要配置交换机的端口镜像

把经过源端口的流量都转发到数据端口一份
snort监听的端口接到设置的38端口上

ssh登陆上    由于是乌班图 没法拿root直接连  然后使用sudo -s切换到root的状态下

service nsm restart   (重启它的所有服务)

cd /etc/nsm    里面有四块网卡的配置文件

你可能不知道的态势感知-snort我们 先进eth0  查看
重要的配置文件有 snort.conf      sid-msg.map    classifcation.congif

我们先查看snort.config 配置文件
Snort.conf为snort的主配置文件分为9个段落

段落1:定义网络相关的信息,主要配置网络地址/端口/规则文件的路径。
我们可以定义一个网段

比如我们单位有redis服务   我们可以定义好  到时候直接调用就好

规则的引用路径

段落2:主要配置解码器(不常用)
用什么解析过来的流量  (不用配置)

你可能不知道的态势感知-snort段落3:配置基础的检测引擎(不常用)
正则的最大长度什么的  (不用配置)

你可能不知道的态势感知-snort段落4:配置动态加载库(不常用)
配置动态静态规则的链接库 (不用配置)

你可能不知道的态势感知-snort段落5:配置预处理(不常用)
不用管

你可能不知道的态势感知-snort段落6:配置输出插件,一般可以配置日志。
配置输出的格式  unified2      单个文件最大128m    (定义输出的日志)

输出的日志可以远程发送到其他的服务器,也可以存储到数据库中 (可以上网百度  snort  mysql)

你可能不知道的态势感知-snort段落7/8/9: 配置启用的规则文件,默认securityonion加载的比较少。
/etc/nsm/rules  下规则很多   但启用的只有下面两个   我们把它们注释掉 不用

第八个规则下边有些拓展类的规则   规则全没有启用

现在规则一条也没有启用

最后说下,关于snort语法,比如有时候爆出0day时,我们可以自己添加一条规则对0day规则进行捕获,因此我们应该熟悉snort规则的书写

案例:
规则头 | 规则选项

alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

第一个括号前的部分是规则头(rule header),规则头包括:规则动作、协议、源IP地址,源端口,方向,目的IP,目的端口。包含的括号内的部分是规则选项(rule options)。规则选项部分中冒号前的单词称为选项关键字(option keywords)。注意,不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素 对于指定的要采取的行动都必须是真的。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句。同时,snort规则库文件中的不同规则可以 认为组成了一个大的逻辑或(OR)语句。
规则动作:
规则的头包含了定义一个包的who,where和what信息,以及当满足规则定义的所有属性的包出现时要采取的行动。规则的第一项是"规则动作" (rule action),"规则动作"告诉snort在发现匹配规则的包时要干什么。在snort中有五种动作:alert、log、pass、activate 和dynamic.
Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。
Log-记录这个包。
Pass-丢弃(忽略)这个包。
activate-报警并且激活另一条dynamic规则。
dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。

常用的规则方式:

msg - 在报警和包日志中打印一个消息。
content - 在包的净荷中搜索指定的样式
nocase - 指定对content字符串大小写不敏感。
reference - 外部攻击参考ids。
sid - snort规则id。
rev - 规则版本号。
classtype - 规则类别标识。
detection_filter - 基于频率的检测状态

最常用的三个规则套路

第一个套路 基于同样明显特征的写法
所有tcp的流量触发这个规则进行报警 所有源地址 目的地址 都随意 输出的日志是webscan sqlmap content: 匹配数据包内有没有sqlmap 关键字 sid:100 classtype:分类是webscan

第二个套路 匹配多个关键字
所有tcp的流量触发这个规则进行报警 所有源地址 目的地址 都随意 输出的日志是webscan sqltest1 content: 匹配数据包内有没有select和and关键字(少一个都不行) sid:101 classtype:分类是webscan
第三个套路 基于频率进行控制
检测到你访问我的流量有login.php detection_filter:count3 (三次) seconds 300(300秒)
当有人访问的数据包内带这login.php 在300秒内访问了3次 我就触发这个警报

规则的分类

vi /etc/nsm/farmsec-SNORT-eth0/classification.config

它语法的格式为   config classification  (固定语法):小的说明,更详细的说明,警告的级别 ()

至于怎么去写规则,怎么配置,怎么让他生效,这里就不给大家展示了。

最后我们可以使用sqlmap去测试snort是否生效

再次回到web页面 查看就已经抓到这个局域网内有人使用sqlmap

日志显示很详细   可以看到是哪个探针   源ip是哪个  目的ip是哪个   signature的信息是哪个

我们点击进入 查看更详细的
里面有十六进制的信息 还有包的信息

你可能不知道的态势感知-snort点一下右上角的钮
一个标准的http数据包就出来了    
post包 也可以

以上就代表我们第一条规则写成功了

我们找一个登录界面  账号写select   密码 写and 然后点击登录 看看它会不会认为我们是一条注入数据包

sql-in test  那条规则警报已经出现了

我们点进去查看

用户名是select  密码是and

规则需要慢慢的调试 使其变得更严谨

总结:

作为新的一年的第一篇文章,主要为大家大概讲解了关于态势感知的神秘面纱,新的一年工作重点代码安全,产品是根本,企业内生安全的重视将是安全行业进步的一个跨越,关注企业CI/CD敏捷开发和持续部署融入安全思考,推动企业合理的安全开发流程是一件比挖到sql注入更酷的一件事,下一篇为大家带来从公司整体开发架构《从上帝视角看安全》包括CI/CD部署k8s、高可用集群k8s、数据库集群、ELK、消息列队、OAuth2.0、身份认证和权限管理框架(Shiro、SpringSecurity、JWT)、注册中心安全、配置中心、微服务认证与授权管理、负载、API安全设计、前后端不同安全级别参数信息的加密算法、内部安全编码开发、docker、业务集群)融入安全思考,笔者始终坚持纵深防御、多维防护、管家式安全跟踪管理方案,比如一个web漏洞,在SDL阶段可以消灭百分之70,我再利用安全产品消灭百分之25,后面的百分之5可以利用后期的渗透测试发现,再有一个防御思维就是利用渗透测试流程制定策略,我们是不是在对方进行打点的时候就能发现对方的行为、即使拿到权限我的EDR基于他的某种行为能不能发现、即使绕过了我的EDR我能不能让他无法横向渗透或者在他横向渗透时候ids能够发现报警,方方面面我们都需要考虑。路还很远,加油吧未来的首席安全官们!!!

https://www.freebuf.com/sectool/260223.html

免责声明:本站某些文章、信息、图片、软件等来源于互联网,由本网整理发表,希望传递更多信息和学习之目的,并不意味赞同起观点或证实其内容的真实性以及非法用途。 如设计、版权等问题,请立即联系管理员,我们会给予更改或删除相关文章,保证您的权利。
高性能云服务器2折起
 
枫少@KillBoy
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: