攻防演练是一个对抗过程,攻防中红队几乎必定会用到的VPS用于远控或者扫描,为了避免被蓝队溯源反制,对VPS上的Web服务进行访问加固,可以增加蓝队对C2服务器的反制的工作量,降低被溯源的风险
需求说明
由于红队VPS上如果要使用一些远控和扫描功能,会要部署相应的Web服务,例如Viper、NPS、ARL等,如果这些服务没有做反溯源处理,很容易就被微步等平台标记为红队服务器
一目了然的远控标签,和直接开放的Web服务,都容易让我们成为蓝队的重点溯源目标,被溯源的风险大大增加
为了防止Web服务特征泄露,下面我们通过Nginx反向代理来进行反溯源配置
思路讲解
实现思路很简单,便是利用Nginx提供的ngx_http_auth_basic_module
模块,让用户必须输入正确的用户名和密码才能访问网页内容。在密码验证成功之前,用户无法获取网页的任何信息,可以完美隐藏网站原有指纹,还能多一层密码防护
实现方法也不难,首先安装htpasswd生成密码文件,然后通过Nginx指定读取该密码文件进行验证,验证成功后将请求转发到对应Web服务的端口,便可以进行访问了
htpasswd安装
首先安装需要的工具和环境,如果没有安装Nginx可以通过下面的指令进行安装,并设置Nginx服务为开机自启动
yum -y install nginx systemctl start nginx systemctl enable nginx
然后安装htpasswd工具,用于生成对应的密码文件
yum -y install httpd-tools
通过下面的指令指定密码文件路径和用户名,文件路径可以随意指定,输入指令后确认两次密码,便能生成对应的密码文件
htpasswd -c /usr/share/nginx/passwd {username}
如果不小心忘记了密码,可以通过下面这条指令修改密码
htpasswd -D /usr/share/nginx/passwd {username}
配置Nginx密码认证
先备份nginx配置文件,然后进行编辑
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak vim /etc/nginx/nginx.conf
修改配置如下,首先是监听端口可以设置不常用端口,我这里设置为常用端口8080
是希望对方以为我这是普通web服务,而不是红队工具。中间还一些配置是安全配置,限制爆破速率
然后通过auth_basic_user_file
指定密码文件路径为我们刚刚使用htpasswd生成的密码文件,最后配置端口转发,如果密码验证正确则跳转到本地的红队web工具端口
server_tokens off; # 关闭Nginx版本号回显 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s; # 定义变量,占用空间大小为10m,每秒处理请求不超过2个 server { listen 8080; listen [::]:8080; location / { auth_basic "Restricted Access"; # 配置认证提示信息 auth_basic_user_file /usr/share/nginx/passwd; # 配置存储用户名和密码的文件路径 limit_req zone=mylimit burst=5 nodelay; # 缓冲队列长度为5 limit_req_status 503; # 禁止访问后回显状态码 proxy_pass https://127.0.0.1:5003; # 配置转发到对应端口的服务 } }
配置完后需要重启Nginx服务才能使配置生效
systemctl restart nginx
设置监听服务仅能本地访问
以红队工具灯塔(ARL)为例,由于Docker占用了5003端口提供灯塔web服务,我们没办法直接通过Nginx监听5003端口并配置密码认证。我想到的解决方法是先通过Nginx监听其他端口并配置访问密码,一旦密码认证通过则将端口服务转发到灯塔监听的5003端口,这样就能正常使用灯塔服务
但是这样有个问题,就是如果别人不通过Nginx监听的端口访问灯塔,而是直接通过5003访问,那么Nginx配置的密码认证也就没有效果了
解决方法原理一致,只是方式不同:
通过Linux防火墙配置端口访问黑名单,禁止外网访问5003端口
通过灯塔进行配置,将服务绑定在本地的5003端口,这样外网就无法访问
这里介绍第二种方式的实现方法,首先进入arl源文件安装路径,关闭docker镜像服务
docker-compose down
然后编辑docker配置文件,指定本地IP 127.0.0.1
绑定的 5003
端口作为Docker容器中443端口的映射,这样想访问灯塔的web服务就只能通过本地地址 https://127.0.0.1:5003
访问
vim docker-compose.yml
最后重新启动灯塔服务,使配置文件生效
docker-compose up -d
实现效果
访问Nginx监听的端口会弹框提示需要输入账号和密码进行验证
验证通过后才会重定向到灯塔的主页,这时候才能正常使用
抓包端口,没有验证时请求包和响应包中完全看不出灯塔的指纹特征,完美隐藏
Viper反溯源
Viper 是国人自主编写的一款红队服务器,提供了MSF的图形化的操作界面,让用户使用浏览器便捷的进行内网渗透
这里特意提一下,避免有些人重复操作,由于Viper自带了反溯源功能,我们直接按照他的操作手册配置就行,不用我们再自己配置Nginx反向代理实现反溯源
Viper反溯源教程:https://www.yuque.com/vipersec/install/ilwe2iprztf9hlqv