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

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

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

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

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

使用CentOS8和NGINX尝试ModSecurity启动Web应用程序WAF

文章来源:重庆网络安全 发布时间:2020-02-22 14:02:16 围观次数:
分享到:

摘要:尝试使用ModSecurity启动Web应用程序并在测试环境中运行。 测试环境由NGINX CentOS8设备组成,结果比预期的要难得多。

  尝试使用ModSecurity启动Web应用程序并在测试环境中运行。测试环境由NGINX CentOS8设备组成,结果比预期的要难得多。


启用PowerTools存储库


  由于所有配置都是在CentOS8上完成的,因此所有开发工具都必须可用,因此需要启用PowerTools存储库。


  dnf config-manager --set-enabled PowerTools

  并需要很多开发工具


    dnf -y install      \

    autoconf        \

    automake        \

    GeoIP-devel     \

    bison           \

    bison-devel     \

    curl            \

    curl-devel      \

    doxygen         \

    flex            \

    gcc             \

    gcc-c++         \

    git             \

    libcurl-devel   \

    libxml2-devel   \

    lmdb-devel      \

    lua-devel       \

    openssl-devel   \

    ssdeep-devel    \

    yajl            \

    yajl-devel      \

    zlib-devel

  获取所有资源


  现在所有软件都已安装到位,建立一个工作环境。请注意,因为这是一个测试环境,所以不使用sudo,并且所有操作都以root身份完成。


  cd

 mkdir owasp

 cd owasp

  然后下载所有资源。需要GeoIP2,因为即将弃用GeoIP,请下载并与NGINX一起安装。


  wget https://nginx.org/download/nginx-1.17.8.tar.gz

  wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz

 wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O CRS_v3.2.0.tar.gz

 git clone --recursive https://github.com/maxmind/libmaxminddb

 git clone             https://github.com/SpiderLabs/ModSecurity

 git clone             https://github.com/SpiderLabs/ModSecurity-nginx

 git clone             https://github.com/leev/ngx_http_geoip2_module

 MaxMin library


  ModSecurity库和ModSecurity模块都需要libmaxmin,因此首先


 cd libmaxminddb

 ./bootstrap

 ./configure

 make

 make check

 make install

 cd ..


配置并安装modsecurity库


  然后是libmaxmin的modsecurity库


  tar -xvf modsecurity-v3.0.4.tar.gz

cd modsecurity-v3.0.4

./configure --with-lmdb --with-maxmind=/usr/local

make

make install

cd ..

  配置并安装modsecurity模块


  现在可以使用modsecurity库,创建模块


cd ModSecurity

sh build.sh

git submodule init

git submodule update

./configure --with-lmdb --with-maxmind=/usr/local

make

make install

cd ..

  棘手点


  为了使NGINX能够接受和加载模块,必须使用与已安装的NGXINX完全相同的配置选项来编译它们。这些可以使用nginx -V命令确定。


  但是不知何故无法正常工作。尝试了所有可能找到的选项,但不断出现binairy不兼容错误。因此决定也从头开始编译NGINX。当然,这具有以下缺点:NGINX无法再通过packagemanager进行升级,但是由于模块与nginx二进制文件之间的严格匹配,因此不再可行。想确保自建的nginx内容不会干扰系统的其余部分,因此将所有内容都放在/ usr / local / nginx中。首先,使用已安装的NGINX来获取配置选项,最后得到:

tar -xvf nginx-1.17.8.tar.gz

cd nginx-1.17.8

./configure                                                     \

    --prefix=/usr/local/nginx                                   \

    --sbin-path=/usr/local/nginx/sbin/nginx                     \

    --modules-path=/usr/local/nginx/modules                     \

    --conf-path=/usr/local/nginx/etc/nginx.conf                 \

    --error-log-path=/var/log/nginx/error.log                   \

    --http-log-path=/var/log/nginx/access.log                   \

    --pid-path=/var/run/nginx.pid                               \

    --lock-path=/var/run/nginx.lock                             \

    --http-client-body-temp-path=/var/cache/nginx/client_temp   \

    --http-proxy-temp-path=/var/cache/nginx/proxy_temp          \

    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp      \

    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp          \

    --http-scgi-temp-path=/var/cache/nginx/scgi_temp            \

    --user=nginx                                                \

    --group=nginx                                               \

    --with-file-aio                                             \

    --with-threads                                              \

    --with-http_addition_module                                 \

    --with-http_auth_request_module                             \

    --with-http_dav_module                                      \

    --with-http_flv_module                    


配置ModSecurity


  nginx可以编译并安装到modsec中。ModSec(SpiderLabs)的创建者提供了默认的下载配置。让我们开始吧。


mkdir -p /usr/local/nginx/etc/modsec

wget

https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended \

    -O /usr/local/nginx/etc/modsec/modsecurity.conf

cp -p /root/owasp/modsecurity-v3.0.4/unicode.mapping /usr/local/nginx/etc/modsec/unicode.mapping

sed -i 's/^SecRuleEngine.*/SecRuleEngine On/' /usr/local/nginx/etc/modsec/modsecurity.conf

cat <<- '@EOF' > /usr/local/nginx/etc/modsec/main.conf

    Include "/usr/local/nginx/etc/modsec/modsecurity.conf"

    # Basic test rule

    SecRule ARGS:blogtest "@contains test" "id:1111,deny,status:403"

    SecRule REQUEST_URI "@beginsWith /admin"

    "phase:2,t:lowercase,id:2222,deny,msg:'block admin'"

@EOF


使用ModSec模块配置nginx。

worker_processes  1;

load_module modules/ngx_http_modsecurity_module.so;

load_module modules/ngx_http_geoip2_module.so;

load_module modules/ngx_stream_geoip2_module.so;

events {

    worker_connections  1024;

}

http {

    include            mime.types;

    default_type       application/octet-stream;

    sendfile           on;

    keepalive_timeout  65;

    server {

        listen         80;

        server_name    localhost;

        modsecurity    on;

        modsecurity_rules_file /usr/local/nginx/etc/modsec/main.conf;

        location / {

            root   html;

            index  index.html index.htm;

        }

        error_page  500 502 503 504 /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}


要验证它们是否全部损坏,请运行/ usr / local / nginx / sbin / nginx -t并确保一切正常。检查ModЅecurity是否适用于:

curl http://localhost/adminaccess

<html>

<head><title>403 Forbidden</title></head>

<body>

<center><h1>403 Forbidden</h1></center>

<hr><center>nginx/1.17.8</center>

</body>

</html>


而/var/log/nginx/error.log文件显示:


2020/02/07 16:04:08 [error] 17871#17871: *3 [client 127.0.0.1]

ModSecurity: Access denied with code 403 (phase 2). Matched "Operator

`BeginsWith' with parameter `/admin' against variable `REQUEST_URI'

(Value: `/adminaccess' ) [file "/usr/local/nginx/etc/modsec/main.conf"]

[line "7"] [id "2222"] [rev ""] [msg "block admin"] [data ""] [severity

"0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "127.0.0.1"] [uri

"/adminaccess"] [unique_id "158108784890.091254"] [ref

"o0,6v4,12t:lowercase"], client: 127.0.0.1, server: localhost, request:

"GET /adminaccess HTTP/1.1", host: "localhost"

此时,ModSecurity正在NGINX上运行,因此所需的只是核心规则集(CRS)。 一旦做到这一点,下一步就很容易。


 cd /usr/local/nginx/etc

tar -xvf ~/owasp/CRS_v3.2.0.tar.gz

ln -s owasp-modsecurity-crs-3.2.0 owasp-crs

cp -p /usr/local/nginx/etc/owasp-crs/crs-setup.conf.example /usr/local/nginx/etc/owasp-crs/crs-setup.conf

  将这些行添加到:/usr/local/nginx/etc/modsec/main.conf


  Include "/usr/local/nginx/etc/owasp-crs/crs-setup.conf"

Include "/usr/local/nginx/etc/owasp-crs/rules/*.conf"

  还要确保文件/usr/local/nginx/etc/owasp-crs/crs-setup.conf包含以下行


  SecDefaultAction "phase:1,log,auditlog,deny,status:403"

SecDefaultAction "phase:2,log,auditlog,deny,status:403"

  如果curl发出正常状态,例如,curl http://localhost/trololo_singer.html这将不会触发任何安全规则,并且404将显示正常错误:


 <html>

<head><title>404 Not Found</title></head>

<body>

<center><h1>404 Not Found</h1></center>

<hr><center>nginx/1.17.8</center>

</body>

</html>

  但是,如果curl命令正在请求受保护的文件(例如.htaccess文件),它将触发“核心规则集”并发出拒绝访问错误。


 <html>

<head><title>403 Forbidden</title></head>

<body>

<center><h1>403 Forbidden</h1></center>

<hr><center>nginx/1.17.8</center>

</body>

</html>

而/var/log/nginx/error.log文件显示:

2020/02/07 16:17:28 [error] 2724#2724: *8 [client 127.0.0.1]

ModSecurity: Access denied with code 403 (phase 2). Matched "Operator

`PmFromFile' with parameter `restricted-files.data' against variable

`REQUEST_FILENAME' (Value: `/.htaccess' ) [file

"/usr/local/nginx/etc/owasp-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf"]

[line "104"] [id "930130"] [rev ""] [msg "Restricted File Access

Attempt"] [data "Matched Data: .htaccess found within REQUEST_FILENAME:

/.htaccess"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"]

[accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag

"platform-multi"] [tag "attack-lfi"] [tag "OWASP_CRS"] [tag

"OWASP_CRS/WEB_ATTACK/FILE_INJECTION"] [tag "WASCTC/WASC-33"] [tag

"OWASP_TOP_10/A4"] [tag "PCI/6.5.4"] [hostname "127.0.0.1"] [uri

"/.htaccess"] [unique_id "15813292242.837003"] [ref

"o1,9v4,10t:utf8toUnicode,t:urlDecodeUni,t:normalizePathWin,t:lowercase"],

client: 127.0.0.1, server: localhost, request: "GET /.htaccess

HTTP/1.1", host: "localhost"


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

相关热词搜索:CentOS8 NGINX ModSecurity 启动Web应用程序 WAF 重庆网络安全

上一篇:网站或软件系统上线前对注册功能的安全测试
下一篇:Pikachu靶场复现钓鱼攻击之Basic认证后数据无法发送到后台,PHP的HTTP身份验证机制仅在PHP作为Apache模块运行时有效

热门资讯

鼠标向下滚动