一、如何实现检测?
针对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注入,则能成功监测。