Easeprobe简单介绍使用

本篇文章将由我来介绍一款健康/状态检查工具 - Easeprobe 的简单使用。 介绍 EaseProbe 是一个由用 Go 编写的简单、独立、轻量级的工具,可以进行健康/状态检查, EaseProbe 主要完成3个目标工具: 探测、通知、报告 探测 EaseProbe 支持多种方法来执行其探测,例如: * HTTP。检查HTTP状态码,支持mTLS,HTTP Basic Auth,可以设置Request Header/Body。(HTTP 探针配置) * TCP。检查是否可以建立 TCP 连接。(TCP 探针配置) * shell。运行 Shell 命令并检查结果。(Shell 命令探针配置) * SSH。通过 SSH 运行远程命令并检查结果。支持堡垒/跳转服务器(SSH 命令探针配置) * TLS。使用 TLS 连接到给定端口并(可选)验证已撤销或过期的证书(TLS 探针配置) * Host。在远程主机上运行 SSH 命令并检查 CPU、内存和磁盘使用情况。(主机负载探针) * client。支持以下本机客户端。它们都支持 mTLS 和数据检查,请参阅Native Client Probe 配置 * MySQL。连接到 MySQL 服务器并运行SHOW STATUSSQL。 * Redis。连接到 Redis 服务器并运行PING命令。 * Memcache。连接到 Memcache 服务器并运行version命令或验证给定的键/值对。 * MongoDB。连接到 MongoDB 服务器并执行 ping。 * Kafka。连接到 Kafka 服务器并执行所有主题的列表。 * PostgreSQL。连接到 PostgreSQL 服务器并运行SELECT 1SQL。 * Zookeeper。连接到 Zookeeper 服务器并运行get /命令。 通知 EaseProbe 支持多种通知方式向你发送通知,例如: slack、钉钉、企业微信、邮件、Telegram 等。...

September 24, 2022 · 3 min · overstarry

gRPC中间件

本文我来介绍 gRPC 中的中间件相关知识。 介绍 gRPC 中间件基于前面讲解的拦截器相关概念,它是一组拦截器、辅助、工具的集合,在我们使用 gRPC 开发应用时,往往会使用到各种中间件。它允许在服务端或客户端以拦截器链条形式应用多个中间件。 因为拦截器经常用来实现一些通用的功能 ,如鉴权认证、日志、监控等,所以使用 gRPC 中间件来实现这些可重用功能是十分合适的。下面的代码就分别暂时服务端和客户端使用中间件的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import "github.com/grpc-ecosystem/go-grpc-middleware" myServer := grpc.NewServer( grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( grpc_ctxtags.StreamServerInterceptor(), grpc_opentracing.StreamServerInterceptor(), grpc_prometheus.StreamServerInterceptor, grpc_zap.StreamServerInterceptor(zapLogger), grpc_auth.StreamServerInterceptor(myAuthFunction), grpc_recovery.StreamServerInterceptor(), )), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( grpc_ctxtags.UnaryServerInterceptor(), grpc_opentracing.UnaryServerInterceptor(), grpc_prometheus.UnaryServerInterceptor, grpc_zap.UnaryServerInterceptor(zapLogger), grpc_auth.UnaryServerInterceptor(myAuthFunction), grpc_recovery.UnaryServerInterceptor(), )), ) 1 2 3 4 5 6 7 import "github.com/grpc-ecosystem/go-grpc-middleware" clientConn, err = grpc.Dial( address, grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(monitoringClientUnary, retryUnary)), grpc....

September 18, 2022 · 1 min · overstarry

Gitlab CVE-2021-22205

起因 最近一台服务器出现服务器资源 cpu、内存过高的情况,通过对进程的分析,发现是 gitlab 容器进程,怀疑是 gitlab 被入侵运行了挖矿病毒,通过对 gitlab 日志的分析,可以得出入侵者是利用了 gitlab 的 CVE-2021-22205 的漏洞,对 gitlab 进行了攻击。 CVE-2021-22205 介绍 CVE-2021-22205是一个严重的严重性漏洞(CVSS 10.0),它是由第三方文件解析器Exif-Tool对图像文件进行不当验证的结果,导致远程命令执行漏洞,可能导致您的GitLab实例被攻击。 以下版本受到漏洞影响: 11.9.x - 13.8.7 13.9.0 - 13.9.5 13.10.0 - 13.10.2 解决 gitlab 发布了 GitLab 13.10.3、13.9.6 和 13.8.8 版本来解决这个漏洞。请尽快升级。 如果无法即使更新和使用热更新补丁解决,可以通过将exiftool脚本替换为cat -。这个解决方案将防止从上传的图像中剥离所有的exif数据。 将 /opt/gitlab/embedded/bin/exiftool 脚本内容替换为 1 2 3 #!/bin/bash cat - 这种方法不是长久之计,每次重启容器时都要手动修改文件,还是尽快更新版本。 原因 根据gitlab的官方漏洞issues来看,当访问接口/uploads/user上传图像文件时,GitLab Workhorse会将扩展名为jpg、jpeg、tiff文件传递给ExifTool。用于删除其中不合法的标签。具体的标签在workhorse/internal/upload/exif/exif.go中的startProcessing方法中有定义,为白名单处理。 而ExifTool在解析文件的时候会忽略文件的扩展名,尝试根据文件的内容来确定文件类型,其中支持的类型有DjVu。 关键在于ExifTool在解析DjVu注释的ParseAnt函数中存在漏洞,所以我们就可以通过构造DjVu文件并插入恶意注释内容将其改为jpg后缀上传,因为gitlab并未在这个过程中验证文件内容是否是允许的格式,最后让ExifTool以DjVu形式来解析文件,造成了ExifTool代码执行漏洞。 该漏洞存在于ExifTool的7.44版本以上,在12.4版本中修复。Gitlab v13.10.2使用的ExifTool版本为11.70。并且接口/uploads/user可通过获取的X-CSRF-Token和未登录Session后来进行未授权访问。最终造成了GitLab未授权的远程代码执行漏洞。 其它 gitlab 提供了对 gitlab 安全的一些最佳实践: https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/ 参考 https://hackerone.com/reports/1154542 https://www.anquanke.com/post/id/266606 https://mp.weixin.qq.com/s?__biz=Mzg3MDAzMDQxNw==&mid=2247491418&idx=1&sn=853be1256de894c3c579a07738c11590 https://about.gitlab.com/blog/2021/11/04/action-needed-in-response-to-cve2021-22205/ https://forum.gitlab.com/t/cve-2021-22205-how-to-determine-if-a-self-managed-instance-has-been-impacted/60918?_gl=11y48o1u_gaODE5OTE4NTMuMTY2MjgxODQ3OQ.._ga_ENFH3X7M5Y*MTY2MjgxODQ5MC4xLjAuMTY2MjgxOTE4Ny4wLjAuMA.. https://forum.gitlab.com/t/cve-2021-22205-how-to-determine-if-a-self-managed-instance-has-been-impacted/60918/2?_gl=11y48o1u_gaODE5OTE4NTMuMTY2MjgxODQ3OQ.._ga_ENFH3X7M5Y*MTY2MjgxODQ5MC4xLjAuMTY2MjgxOTE4Ny4wLjAuMA.. https://about.gitlab.com/releases/2021/04/14/security-release-gitlab-13-10-3-released/ https://hackerone....

September 10, 2022 · 1 min · overstarry

gRPC请求抓包

前言 本文来简单介绍如何使用 wireshark 来获取 gRPC 请求。 wireshark 配置 在进行对 gRPC 请求抓包前,得来几个准备。 设置 proto 文件路径 依次打开 编辑 > 首选项 > Protocols > ProtoBuf, 点击如图选项,添加 proto 文件所在的路径。记得勾选右边的 “Load all files” 选项。 设置TCP 消息解码 默认情况下,界面上显示的都是 TCP 数据包。依次点击菜单栏的 分析 -> 解码为… (或者右击随便一行)。 把 9000 (你的 gRPC 服务端端口) 端口的 TCP 消息解码成 HTTP2 协议信息。 开始抓包 现在开始捕获 gRPC 请求消息,为了避免其他无关的流量,在捕获选项设置筛选 tcp port 9000 只获得跟服务端相关的流量。 我们使用 postman 向服务端发送请求。回到 wireshark 界面,我们就可以看到许多流量,通过前面设置的解码,我们可以很方便的获得 gRPC 消息的具体内容。 小结 本文简单介绍了如何使用 wireshark 捕获 gRPC 请求流量。在使用Wireshark抓包时把未识别的HTTP/2协议手动设置为HTTP/2,这样会方便很多。 参考 https://jingwei....

September 3, 2022 · 1 min · overstarry

gRPC服务反射协议

本文主要介绍 gRPC 的服务反射协议和相关的应用。 介绍 gRPC 服务反射协议 (server reflection) 是在 gRPC 服务端定义的一个服务,它能提供该服务器端上可公开使用的 gRPC 服务的信息,简单的来说,就是服务反射向客户端提供了服务端注册的服务的信息。 因此客户端不需要预编译服务定义就能与服务端交互了。 客户端想要与服务端程序进行通信,必须要有所定义的服务信息,需要编译生产客户端存根,借助 gRPC 服务反射协议,我们就可以无需编译服务定义就能通信。 使用 该如何开启服务反射协议呢? 很简单,只需要通过一行代码即可开启: reflection.Register() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 package main import ( "context" "flag" "fmt" "log" "net" "google....

August 27, 2022 · 2 min · overstarry