设为首页收藏本站

追梦Linux

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 429|回复: 0

Nginx 配置文件安全分析工具--Gixy

[复制链接]

482

主题

485

帖子

16万

积分

CEO

Rank: 9Rank: 9Rank: 9

积分
168233

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2017-6-27 16:43:38 | 显示全部楼层 |阅读模式
简介
Gixy 是一个 Nginx 配置文件的分析工具,主要目标是防止由于不当的配置带来的安全问题;
Gixy 是进行静态分析,只需要指定配置文件的路径,不需要启动任何环境
Gixy特性
  • 找出服务器端请求伪造。
  • 验证HTTP拆分。
  • 验证referrer/origin问题。
  • 验证是否正确通过add_header指令重新定义Response Headers。
  • 验证请求的主机头是否伪造。
  • 验证valid_referers是否为空。
  • 验证是否存在多行主机头。

项目地址: https://github.com/yandex/gixy

Gixy安装

Gixy是一个Python开发的应用,目前支持的Python版本是2.7和3.5+。

安装步骤非常简单,直接使用pip安装即可:
   

[Bash shell] 纯文本查看 复制代码
pip install gixy

Gixy使用,直接执行gixy命令

Gixy默认会检查 /etc/nginx/nginx.conf 配置文件。

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

[Bash shell] 纯文本查看 复制代码
include servers/*;

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

也可以指定NGINX配置文件所在的位置。

[Bash shell] 纯文本查看 复制代码
gixy  /usr/local/openresty/nginx/conf/nginx.conf

==================== Results ===================
No issues found.

==================== Summary ===================
Total issues:
    Unspecified: 0
    Low: 0
    Medium: 0
    High: 0

来看一个http折分配置有问题的示例,修改Nginx配置:

[Bash shell] 纯文本查看 复制代码
server {
    listen 80 default;

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

再次运行gixy检查配置

[Bash shell] 纯文本查看 复制代码
gixy  /usr/local/openresty/nginx/conf/nginx.conf

==================== Results ===================

>> Problem: [http_splitting] Possible HTTP-Splitting vulnerability.
Description: Using variables that can contain "\n" may lead to http injection.
Additional info: [url=https://github.com/yandex/gixy/b]https://github.com/yandex/gixy/b[/url] ... ns/httpsplitting.md
Reason: At least variable "$action" can contain "\n"
Pseudo config:

server {

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

==================== Summary ===================
Total issues:
    Unspecified: 0
    Low: 0
    Medium: 0
    High: 1


从结果可以看出检测到了一个问题,指出问题类型为 http_splitting 。原因是 $action 变量中可以含有换行符。这就是HTTP响应头拆分漏洞,通过CRLFZ注入实现攻击。

例如请求为:

[Bash shell] 纯文本查看 复制代码
/v1/see%20below%0d%0ax-crlf-header:injected.json

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

[Bash shell] 纯文本查看 复制代码
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 后是这样的:

[AppleScript] 纯文本查看 复制代码
/v1/see belowx-crlf-header:injected.json

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

[Bash shell] 纯文本查看 复制代码
location ~ /v1/((?<action>[^/\s]+)\.json)?$ {
    ...
}

如果你要暂时忽略某类错误检查,可以使用 --skips 参数:

[Bash shell] 纯文本查看 复制代码
gixy --skips http_splitting /usr/local/openresty/nginx/conf/nginx.conf

==================== Results ===================
No issues found.

==================== Summary ===================
Total issues:
    Unspecified: 0
    Low: 0
    Medium: 0
    High: 0

更多使用方法可以参考 gixy --help 命令。


QQ|小黑屋|手机版|Archiver|追梦Linux ( 粤ICP备14096197号  点击这里给我发消息

GMT+8, 2019-7-17 16:23 , Processed in 0.345636 second(s), 34 queries .

Powered by 追梦Linux! X3.3 Licensed

© 2015-2017 追梦Linux!.

快速回复 返回顶部 返回列表