Nginx常见漏洞处理
1.检测到目标URL存在http host头攻击漏洞【中危】
描述:
为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER["HTTP_HOST"]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。
检测:
通过burp进行抓包:
这就说明,可以随意更改报头的Host,请求都可以被执行,返回200,这就有可能被利用,构造恶意的代码传入并执行。
处理:
在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项
server_name XXX.XXX.com xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx;
if ( $host !~* 'XXX.XXX.com|xxx.xxx.xxx.xxx|xxx.xxx.xxx.xxx' )
{
return 403;
}
参考:
https://www.cnblogs.com/xidxi/p/14781383.html
https://www.cnblogs.com/huiy/p/13433643.html
2.点击劫持:X-Frame-Options未配置
描述:
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
检测:
访问页面,F12查看响应头
没有配置X-Frame-Options响应头
处理:
修改web服务器配置,添加X-Frame-Options响应头。赋值有如下三种:
1、DENY:不能被嵌入到任何iframe或者frame中。
2、SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。
3、ALLOW-FROM uri:只能被嵌入到指定域名的框架中。
(另外两种配置方式e.g.):
# add_header X-Frame-Options:ALLOW-FROM https://tongji.baidu.com;
# add_header X-Frame-Options:DENY;
这里一般选择SAMEORIGIN配置,只允许本站页面被嵌入到iframe。
在nginx的server里面配置:
add_header X-Frame-Options "SAMEORIGIN";
再查看页面响应头X-Frame-Options,实现漏洞规避。
参考:
https://www.zhihu.com/question/31785438
https://www.cnblogs.com/xidxi/p/14781383.html
3.检测到目标X-Content-Type-Options响应头缺失
描述:
响应头用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜测行为,nosniff 表示不允许任何猜测,在通常的请求响应中,浏览器会根据Content-Type来分辨响应的类型,但当响应类型未指定或错误指定时,浏览会尝试启用MIME-sniffing来猜测资源的响应类型,这是非常危险的,例如一个.jpg的图片文件被恶意嵌入了可执行的js代码,在开启资源类型猜测的情况下,浏览器将执行嵌入的js代码,可能会有意想不到的后果。
检测:
访问页面,F12查看响应头
没有配置X-Content-Type-Options响应头
处理:
# add_header X-Content-Type-Options: nosniff;
如果服务器发送响应头 “X-Content-Type-Options: nosniff”,则 script 和 styleSheet # 元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。
在nginx的server里面配置:
add_header X-Content-Type-Options "nosniff";
参考:
https://blog.csdn.net/weixin_41986096/article/details/108319848
4.检测到目标X-XSS-Protection响应头缺失
描述:
HTTP X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。 X-XSS-Protection响应头的缺失使得目标URL更易遭受跨站脚本攻击。
检测:
访问页面,F12查看响应头
没有配置X-XSS-Protection响应头
处理:
# 0:# 禁用XSS保护;
# 1:# 启用XSS保护;
# 1; # mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换);
# 浏览器提供的XSS保护机制并不完美,但是开启后仍然可以提升攻击难度,总之没有特别的理由,不要关闭它。
在nginx的server里面配置:
add_header X-XSS-Protection "1; mode=block";
表示若检查到XSS攻击则停止渲染页面
参考:
https://www.cnblogs.com/xidxi/p/14781383.html
5.检测到目标Content-Security-Policy响应头缺失
描述:
内容安全策略(Content Security Policy)是一种声明的安全机制,可以让网站运营者能够控制遵循CSP的用户代理(通常是浏览器)的行为。通过控制要启用哪些功能,以及从哪里下载内容,可以减少网站的攻击面。
CSP的主要目的是防御跨站点脚本(cross-ste scripting,XSS)攻击。例如,CSP可以完全禁止内联的JavaScript,并且控制外部代码从哪里加载。它也可以禁止动态代码执行。禁用了所有的攻击源,XSS攻击变得更加困难。
CSP由Mozilla开发,曾经有几年试验过概念,一开始称为内容限制(content restriction),后来改称为内容安全策略。2012年11月CSP 1.0成为W3C的候选议案。
网站通过设置Content-Security-Policy响应头启用所需的CSP策略。
检测:
访问页面,F12查看响应头有没有配置Content-Security-Policy响应头
处理:
#并不限制内容加载来源
add_header Content-Security-Policy "script-src * 'unsafe-inline' 'unsafe-eval'";
#将本站内部http链接自动改为https,并不限制内容加载来源
#add_header Content-Security-Policy "upgrade-insecure-requests;content *;img-src '*'";
upgrade-insecure-requests CSP 指令的作用就是让浏览器自动升级请求,防止访问者访问不安全的内容。
该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用.
在nginx的server里面配置:
add_header Content-Security-Policy "script-src * 'unsafe-inline' 'unsafe-eval'";
参考:
http://www.hlcjw.cn/archives/533
https://www.jianshu.com/p/62d7053d1e5d
https://blog.csdn.net/unhejing/article/details/107606615
6.检测到目标Referrer-Policy响应头缺失
描述:
在页面调用图片等其它资源时,或者发生页面跳转时,都会向服务端发生一个带Referrer的HTTP请求,这也是一些网站做防盗链的抓手,在Referrer Policy策略发面前,浏览器可以按自己的默认规则来决定是否加上Referrer。2014年W3C下Web应用安全工作组(Web Application Security Working Group)发布了Referrer Policy草案,对浏览器发送Referrer做了详细规定。在新的Referrer Policy中,可以实现隐藏Referrer,也可以只发送来源URL的host地址(不过不允许伪造)。
检测:
访问页面,查看响应头
处理:
no-referrer 全省略
no-referrer-when-downgrade 协议的安全级别降低时全省略,即HTTPS -> HTTP
strict-origin 协议的安全级别相等时仅发送源,不等时全省略
origin 仅发送源
same-origin 同源时全发送,跨源时全省略
strict-origin-when-cross-origin 同源时全发送,跨源时协议的安全级别相等时仅发送源,不等时全省略
origin-when-cross-origin 同源时全发送,跨源时只发送源
unsafe-url 全发送
在nginx的server里面配置:
add_header 'Referrer-Policy' 'origin';
Ps:该配置导致finderweb打不开,修改配置如下:
add_header 'Referrer-Policy' 'strict-origin-when-cross-origin';
即可
参考:
http://www.04007.cn/article/778.html
https://jsweibo.github.io/2020/05/06/HTTP中的Referrer-Policy响应头/
https://blog.csdn.net/wwppp987/article/details/117822609
7.检测到目标X-Download-Options响应头缺失
处理:
add_header X-Download-Options "noopen" always;
参考:
https://blog.csdn.net/wwppp987/article/details/117822609
8.检测到目标X-Permitted-Cross-Domain-Policies响应头缺失洞
描述:
用于指定当不能将"crossdomain.xml"文件(当需要从别的域名中的某个文件中读取 Flash 内容时用于进行必要设置的策略文件)放置在网站根目录等场合时采取的替代策略。
master-only 只允许使用主策略文件(/crossdomain.xml)
处理:
add_header X-Permitted-Cross-Domain-Policies "master-only";
参考:
https://blog.csdn.net/wwppp987/article/details/117822609
https://www.cnblogs.com/oneapm/p/5168793.html
9.检测到目标Strict-Transport-Security响应头缺失
描述:
用于通知浏览器只能使用 HTTPS 协议访问网站。用于将 HTTP 网站重定向到 HTTPS 网站。
处理:
Strict-Transport-Security: max-age=31536; includeSubDomains
max-age 用于修改 STS 的默认有效时间。
includeSubDomains 用于指定所有子域名同样使用该策略。
preload,可选参数,一个浏览器内置的使用HTTPS的域名列表。
在nginx上配置:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
参考:
https://blog.csdn.net/u012560410/article/details/86489979
https://blog.csdn.net/weixin_42715225/article/details/108520181
https://blog.csdn.net/wwppp987/article/details/117822609
10.HTTP动词篡改的认证旁路
检测:
处理:
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 501;
}