ELK 专题:2. 破解 X-Pack

教程基于 ELK 6.5.4 版本实现并测试通过,理论上支持 6.x 版本。仅供学习交流,严禁用于商业用途。

TL; DR

需要开箱即用的 Docker,请参见上一节内容「ELK on Docker with X-Pack」.

简单来说,破解 X-Pack 是 3 步操作:

  • 替换 X-Pack 的证书验证模块代码
  • 提交一个符合自己需求的证书文件
  • 修改 X-Pack 的登陆密码/关闭安全验证功能

操作步骤

安装 ELK with X-Pack 的环境

我是通过 Docker 来一次性安装的,网上的教程很多,不再赘述。

替换 X-Pack 的证书验证模块

本质上是反编译 X-Pack-Core 的证书验证函数。
分别是 org.elasticsearch.license.LicenseVerifier, org.elasticsearch.xpack.core.XPackBuild。那么我把其中一个验证函数摘抄出来说明问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
# org.elasticsearch.license.LicenseVerifier 
package org.elasticsearch.license;

public class LicenseVerifier
{
public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
return true;
}

public static boolean verifyLicense(final License license) {
return true;
}
}

然后让函数的结果直接返回 true ,再编译回正常的文件替换掉,问题解决。

所以把编译后的文件 x-pack-core-6.5.4.jar 替换到路径 /usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar 即可。

  1. 放上直接编译好的 jar 文件到 Github,有需要可以看看这里
  2. 不同安装方式的 ELK,ES 的安装路径会不一样,详情见此官方文档

提交一个修改了「有效期」以及「使用范围」的证书文件

可以直接把以下代码保存为 license.json 文件,
现在的ES接收什么样的证书,只要符合格式,都会认为是一个合法的证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
license: {
uid: "ea808341-3d7e-4579-85a3-d12656c1f0a7",
type: "trial", // 试用全功能
issue_date_in_millis: 1551830400000, // 2019-03-06 08:00:00 开始
expiry_date_in_millis: 2855980923000, // 2060-07-02 16:02:03 过期
max_nodes: 100,
issued_to: "aaa (non-production environments)",
issuer: "API",
signature: "AAAAAwAAAA0d0foz8ket6LdEx3GvAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQAgSBeZqIpgIgPtx3QyVzFbhoLK68XkY3XiaH15Gq1FFm5IBHxISlmOHH9sAGf3R9o4dqQbByKuFr7wlPmnG6yR9Z3tDWfDA90r0Tyvha2GZi7cV4P/ExaV1jPwuUVR5nMP7nhExEQXvkRL+7eyeqOwpyV0eRdcqsJgQ2Aq4fgIGK73pABwFwfJFTI2OMTevqYlY1ZREZ4LgrNGMSItOujuHleHGp6jSGUdJoE1wnc0xkZWwMpKArURqlPoENZa4MjvFoK4uu+3/0/rEg4Jmgi7ZgEPWpc1QnSYiZzJ0W1FWaxi+m/HwUsnG+1tv9QPfXcWTbf76bOZe7+zT9HauKC+",
start_date_in_millis: 1551830400000
}
}

然后通过 CURL 命令提交到 ES 中。

1
2
3
$ curl -H "Content-Type: application/json" \
-XPOST {ES_SERVER_IP}:9200/_xpack/license \
-d @{证书文件路径}/lisence.json

解释:

  • -H: 使用 JSON 格式编码发送
  • -X: 使用的方法,这里用 POST 方法
  • -d: 附带的参数用文件上传

这里需要有几点注意:

  1. 如果正确提交,会返回一个空数组
  2. 如果是通过提交一整个 JSON 文件,在文件路径面前需要添加 @,这是 CURL 的一个用法。

关闭 X-Pack 的安全验证功能

修改 X-Pack 的密码放到下一节讲述,这一节只介绍如何关闭 X-Pack 的安全验证功能。
在 ElasticSearch 的配置文件 elasticsearch.yml 中加入以下参数,重启后即可。

1
xpack.security.enabled: false

了解更多 ELK 专题

  1. ELK on Docker with X-Pack [了解一下]
  2. 破解 X-Pack [了解一下]
  3. 非交互式修改 ElasticSearch 密码 [了解一下]
  4. Logstatsh 的索引与模版文件 (template) [了解一下]

致谢

  1. Esticsearch之x-pack破解
  2. elasticsearch x-pack 5x,6x 授权永久破解
  3. Elasticsearch6.2.2 X-pack破解及安装教程