Nginx 配置文件安全分析

简介

Gixy 是一个 Nginx 配置文件的分析工具,主要目标是防止由于不当的配置带来的安全问题

Gixy 是进行静态分析,只需要指定配置文件的路径,不需要启动任何环境

使用示例

配置文件 t.conf 的内容:

server {
    listen 80 default;

    location ~ /v1/((?<action>[^.]*)\.json)?$ {
        add_header X-Action $action;
        return 200 "OK";
    }
}

使用 gixy 进行分析:

gixy t.conf

结果:

检测到了一个问题,指出问题类型为 http_splitting,原因是 $action 变量中可以含有回车符

这就是HTTP响应头拆分漏洞,通过CRLFZ注入实现攻击,例如请求为:

/v1/see%20below%0d%0ax-crlf-header:injected.json

这个请求可以匹配上面的 location,响应信息为:

HTTP/1.1 200 OK
Server: nginx/1.11.10
Date: Mon, 13 Mar 2017 21:21:29 GMT
Content-Type: application/octet-stream
Content-Length: 2
Connection: close
X-Action: see below
x-crlf-header:injected

可以看到,成功的在最后一行添加了一个响应头 x-crlf-header:injected

因为请求中是包含回车符的,上面的请求 urldecode 后是这样的:

/v1/see below
x-crlf-header:injected.json

这就需要在 location 的匹配时进行严格的验证,改为:

location ~ /v1/((?<action>[^/\s]+)\.json)?$ {
    ...
}

再次使用 gixy 进行分析后通过了验证

Gixy 可以对配置文件中 include 的其他文件也一起进行分析,例如主配置文件 nginx.conf 引入了其他的配置:

include servers/*;

使用 gixy 分析 nginx.conf 时会自动把 servers 下的配置文件一起检查了,非常方便

可以分析出哪些问题

(1)ssrf 服务端请求伪造

(2)HTTP Splitting 响应拆分

(3)错误的 referrer/origin 验证

(4)错误使用 add_header 指令

(5)Host 头信息伪造

(6)Referer 验证中允许为空

(7)响应头中使用多行形式

安装

Gixy 发布在 PyPI 上,安装非常简单:

pip install gixy

安装后就可以执行 gixy 命令

小结

Gixy 简单实用,我对安全方面了解不多,用 gixy 检查一遍会感觉踏实很多,建议使用 Nginx 的朋友都试一下

Gixy 发布时间不长,但已经有了4千多个星,项目地址:

https://github.com/yandex/gixy

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Puppeteer学习

超越Ctrl+S保存页面所有资源

页面所有资源包含本页面所在域资源以及第三方域资源,同主域的资源也认为第三方域资源,这种资源一般是以绝对路径的方式标识,同域下资源主要有三种表现方式 (以ht...

6093
来自专栏AndroidTv

如何用Android Studio查看build.gradle源码

上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看...

47710
来自专栏技术墨客

React 搭建开发环境

本文记录了本人以及目前团队从无到有使用React的过程,我们将从webpack开始说起,一步一步展现React最基本的开发生态。在这里并不会介绍任何jsx或es...

1731
来自专栏云飞学编程

Python爬虫,反爬手段之防盗链的处理

我们日常访问网页,如果从一个网页跳转到另一个网页,http 头字段里面会带个 Referer的参数。那么图片服务器通过检测 Referer 是否来自指定域名,来...

3542
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(三):Django基础知识回顾

努力与运动兼备~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

3112
来自专栏老码农专栏

原 荐 介绍一个 Java 程序运行时版本信

2168
来自专栏BeJavaGod

Spring v4.1+ JSONP使用,以及jQuery跨域调用jsonp

(补充:我擦,微信不支持代码复制,我的发!还是截图吧~) 如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构 那么在页面上不同的服务调用不同域...

32410
来自专栏极客编程

IPFS环境安装与入门教程

IPFS(InterPlanetary File System,星际文件系统)是去中心化的,本文是介绍IPFS节点软件的系统环境搭建安装与使用方法的入门教程,并...

3603
来自专栏张首富-小白的成长历程

Linux的目录结构

1122
来自专栏SpringBoot 核心技术

第十七章:使用SpringSecurity让SpringBoot项目更安全

4944

扫码关注云+社区

领取腾讯云代金券