【IDS场景模拟】suricata检测HTTPS流量

一、如何实现检测?

针对HTTPS流量来说,毕竟不是攻击流量,而是互联网通信的标配,所以服务器端是可以解密的,解密后变成明文HTTP协议,就可以很好地实现入侵检测了。所以,要处理HTTPS流量,最关键的是,先解密HTTPS数据包,才对其进行入侵检测,通常的解决方案有两种:一是直接在代码层面进行检测,对用户输入进行检测判断。第二种方案就是通过配置HTTPS反向代理的方式来进行检测,如下图所示:

二、构造实验环境

1、一台客户机,模拟客户端发送HTTPS请求给Nginx服务器,此IP地址为:192.168.101.1

2、一台Nginx服务器,该Nginx配置HTTPS证书,并反向代理到远程Tomcat主机,此IP地址为:192.168.112.170

3、一台Tomcat服务器,docker拉取Tomcat,不配置HTTPS证书,将8080端口映射到8848端口,IP地址为:192.168.112.149

4、在Nginx或Tomcat任意一台服务器上安装Suricata,均可对Tomcat的流量进行入侵检测或防御。本次安装在Tomcat服务器中。

整个过程的通信过程如下:

三、配置Tomcat服务器

在Tomcat服务器上安装MySQL与Tomcat,并部署WoniuSales在此,同时在该服务器上安装Suricata,实现对Tomcat流量的检测

一、部署靶场

1、拉取mysql镜像

docker pull mysql:5.6

2、挂载部署mysql

docker run --name mysql01 -p 3303:3306 --privileged=true -v /usr/local/mysql01/data:/var/lib/mysql -v /usr/local/mysql01/logs:/logs -v /usr/local/mysql01/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

3、使用docker拉取tomcat镜像文件

docker pull daocloud.io/library/tomcat:8.5.15-jre8

4、部署tomcat镜像为容器

docker run -d -p 8848:8080 --name mytomcat -v /usr/local/mytomcat01/webapps:/usr/local/tomcat/webapps --privileged IMAGE-ID

#注意需要换成你自己的IMAGE-ID docker images 查看id

3、启动容器

docker start mytomcat

4、部署woniusales靶场项目

将WoniuSales1.4.war包 上传到Tomcat服务器的/usr/local/mytomcat01/webapps目录下,重启Tomcat后,会在/usr/local/mytomcat01/webapps 生成一个 文件夹 WoniuSales1.4

5、修改数据库配置

vim /usr/local/mytomcat01/webapps/WoniuSales1.4/WEB-INF/classes/db.properties

配置自己的服务器地址和端口,设置mysql数据库密码

6、创建数据库

6.1、使用navicat连接docker中的MySQL数据库,主机端口账号密码就是上一步设置的。

6.2、新建数据库 数据库名称是 woniusales 字符集编码是 utf8 排序规则 utf8_bin

6.3、点亮数据库,将 woniusales1.4.sql 拖入

6.4、运行完毕后点击刷新,即可看到user数据表

7、重启docker中的tomcat,即可在浏览器访问该靶场

docker restart mytomcat

http://192.168.101.149:8848/WoniuSales1.4/

二、安装suricata

1、二进制安装

yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-6.0
yum -y install suricata

2、启动suricata

suricata  -c  /etc/suricata/suricata/yaml  -i ens33

3、排除启动存在的问题

suricata启动时候需要加载规则,从主配置文件中可以看到规则目录,默认的规则文件路径是/var/lib/suricata/rules,但是这个目录是不存在的,需要自己创建目录,同时rule-files指定suricata.rules文件也是不存在。如果安装之后立即启动就会报错

suricata自带的规则文件存放在/etc/suricata/rules,这里有许多配置好的规则文件,所以我们需要在主配置文件中按照如下进行修改,同时在/etc/suricata/rules目录下面创建一个文件suricata.rules,保存主文件的变更

#default-rule-path: /var/lib/suricata/rules
default-rule-path: /etc/suricata/rules
rule-files:
  - suricata.rules

还需要在suricata.rules文件中,增加一条规则,如:

alert http $EXTERNAL_NET any <> $HOME_NET 80 (msg:"出现404错误"; content: "404"; http_stat_code; sid: 561001;)

接下来使用命令行启动,则可以看到如下提示/;

[root@Tomcat-suricata suricata]# suricata -c suricata.yaml -i ens33
23/3/2024 -- 15:50:08 - <Info> - Configuration node 'HOME_NET' redefined.
23/3/2024 -- 15:50:08 - <Notice> - This is Suricata version 6.0.17 RELEASE running in SYSTEM mode
23/3/2024 -- 15:50:08 - <Notice> - all 2 packet processing threads, 4 management threads initialized, engine started.

四、配置Nginx服务器

1、安装Nginx服务器,确保在编译时支持SSL模块

yum install -y nginx

如果提示没有可用软件包 nginx,则需要安装epel,之后重新安装Nginx即可。

yum -y install epel-release

因为Nginx位于第三方的yum源里面,而不在CentOs官方yum源里面。

2、为Nginx生成证书

2.1、先确认openssl是否已经安装好
OpenSSL1.0.2k-fips 26Jan2017
2.2、生成私钥,需要输入密码,如123456
openssl genrsa -des3 -out server.pass.key 2048
2.3、去除私钥中的密码
openssl rsa -in server.pass.key -out server.key
2.4、生成CSR证书,注意最后必须是localhost
openssl req -new-key server.key -out server.csr -subj "/C=CN/ST=BeiJing/L=BeiJing/O=dev/OU=dev/CN=localhost"
2.5、生成SSL证书
openssl x509 -req -days 365-in server.csr -signkey server.key -out server.crt
2.6、最终只需要三个文件:server.crt, server.csr, server.key,将上述三个文件复制到/etc/nginx/目录下

3、修改nginx.conf配置文件(先做好备份)

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 添加该upstream节点实现反向代理到Tomcat
    upstream mytomcat {
        server 192.168.101.149:8848 weight=1;
    }
    # 添加server节点,定义SSL证书路径,端口,转发地址等
    server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      "server.crt";
        ssl_certificate_key  "server.key";
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        # 配置网站目录
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /WoniuSales1.4/ {
            proxy_pass http://192.168.101.149:8848/WoniuSales1.4/;
            proxy_redirect default;
        }
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
                    

4、重启Tomcat和Nginx,即可访问Nginx服务器

Tomcat服务器:docker restart mytomcat

Nginx服务器:systemctl restart nginx

五、使用Wireshark抓包

在Nginx上登录靶场

客户机(192.168.101.1)访问Nginx服务器(192.168.101.170),抓取到的都是TLS协议的加密流量;

Nginx服务器(192.168.101.170)访问Tomcat服务器(192.168.101.149),抓取到的都是HTTP协议的明文流量。

所以,在Nignx或Tomcat上安装Suricata对其流量进行检测即可,因为Nginx与Tomcat的通信流量是非加密的,所以在哪一台电脑上安装Suricat取决于实际需要,如果要更真实模拟一个IDS或WAF硬件设备的部署方式,通常建议安装在Nginx这台代理服务器上。

六、利用Suricata对流量进行检测

[root@Tomcat-suricata rules]# vim /etc/suricata/rules/suricata.rules

监测所有源IP和端口,发送到tomcat服务器(192.168.101.149:8848)的流量,对具有SQL注入和xss特征的流量进行告警。

alert http any any -> $HOME_NET 8848 (msg:"POST请求时SQL注入"; http.method; pcre:"/POST/i"; http.request_body; pcre:"/updatexml|union|select/i"; sid:564001;)
alert http any any -> $HOME_NET 8848 (msg:"GET请求时SQL注入"; http.method; pcre:"/GET/i"; http.uri; pcre:"/updatexml|union|select/i"; sid:564002;)
alert http any any -> $HOME_NET 8848 (msg:"XSS跨站攻击"; http.method; pcre:"/GET/i"; http.uri; pcre:"/script|javascript|alert/i"; sid:564003;)

配置好规则后重启suricata,查看流量实时监控

[root@Tomcat-suricata suricata]# tail -f /var/log/suricata/fast.log

七、在Nginx服务器上尝试SQL注入

开启suricata流量实时监控后,在Nginx服务器上进行sql注入,则能成功监测。

  • 60
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值