Lumina Server v9.0搭建记录

前几天慈善家Hex-Rays公开IDA Pro 9,全平台全插件,并且还提供了lumina server的安装程序lumina_teams90_x64linux.run。不过该服务只能在linux上搭建,下面对搭建的过程进行一次简单的记录。

本次搭建的环境使用的是Debian 12,可以直接运行lumina_teams90_x64linux.run程序进行安装,跟着程序的安装提示设置相关的配置。

其中有两部分需要特殊注意一下,一个是mysql服务相关配置,lumina服务需要使用到mysql服务,所以还需要自行搭建一个mysql服务。另一个需要设置Vault Server,该服务为身份验证检查服务,暂时先随便设置一个ip地址和端口。

在安装好以后,可以通过lumina.service文件查看启动命令,该文件内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Hex-Rays Lumina daemon
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/opt/lumina/lumina_server_teams -f /opt/lumina/lumina.conf -p 65432 -l /opt/lumina/logs/lumina_server.log -L /opt/lumina/lumina.lic -c /opt/lumina/lumina.crt -k /opt/lumina/lumina.key
User=lumina

[Install]
WantedBy=multi-user.target

所以在测试阶段我们都可以使用上述的命令运行lunima服务。

因为该lumina服务套了一层TLS,并且没找到关闭TLS的方法,所以得先生成相关证书和密钥,命令如下所示:

1
2
3
4
$ openssl req -nodes -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -sha256 -keyout luminaRootCAKey.pem -out luminaRootCAK.pem -days 365 -subj '/CN=www.fakerays.com/O=Fake Hexrays/C=XX'
$ openssl req -nodes -x509 -newkey rsa:4096 -sha512 -keyout luminaRootCAKey.pem -out luminaRootCA.pem -days 365 -subj '/CN=www.fakerays.com/O=Fake Hexrays/C=XX'
$ cp luminaRootCA.pem /opt/lumina/lumina.crt
$ cp luminaRootCAKey.pem /opt/lumina/lumina.key

下一步是需要设置lumina的license证书,根据lumina_server_teams命令的提示,-L 参数应该是指定license证书,所以license证书应该是lumina.lic,但是不对,不知道为啥,证书是硬编码的luminasrv*.hexlic

lumina的license证书格式和ida pro9的类似,crack方案也相似可以使用同一个脚本,不过有几个需要修改的地方,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
......
license = {
......
"product": "LUMINASRV", # 产品名要设置为LUMINASRV
......
"owner": "46:D3:BF:FF:E2:03", # owner需要修改为对外服务网卡的mac地址
......
filename = "luminasrv*.hexlic" # 修改license文件名

with open(filename, "w") as f:
f.write(serialized)

generate_patched_dll("lumina_server_teams") # 最后需要patch lumina_server_teams程序

按上述方案修改好后,lumina服务就能正常运行了,接下来需要在ida pro 9中进行配置,本来以为是像之前的IDA版本中一样,设置ida.cfg或者环境变量,不过都失败了。最后发现在IDA PRO 9的Options->General->Lumina中可以直接设置,设置Primary中的服务和端口,并且下面认证的账号密码也是必选设置。账号密码先随便设置一个lumima/lumima

下一步尝试运行Lumina->View all。发现报错,lumina服务会请求lumina.conf中设置的VAULT_HOST服务,也就是认证服务,该服务的下载地址应该是https://hex-rays.com/products/ida/support/ida/hexvault84_linux.run,但是本次的慈善中并没有提供该服务,并且网上暂时也搜不到任意版本的vault服务。

因此下一步考虑尝试自行搭建一个fake vault server。通过抓包发现vault server也使用了TLS协议,并且无法关闭。

因此,第一步尝试编写一个简单的TLS服务,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding=utf-8 -*-

import ssl
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server = ssl.wrap_socket(
server, server_side=True, keyfile="lumina.key", certfile="lumina.crt"
)
server.bind(("127.0.0.1", 65433))
server.listen(0)

while True:
connection, client_address = server.accept()
print(client_address)
while True:
data = connection.recv(1024)
if not data:
break
print(f"Received: {data}")

证书和lumina服务使用同一个证书,端口监听65433,因此需要修改lumina.conf内容为:

1
2
3
4
5
6
$ cat lumina.conf
...
VAULT_HOST="www.fakerays.com:65433"
$ cat /etc/hosts
...
127.0.0.1 www.fakerays.com

接着通过点击IDA Pro的lumina->view all来访问vault服务,然后查看流量。

但是发现,在TLS握手阶段就出现了证书错误,尝试了能想到的多种方案都失败了,能想到的方案如下:

  1. linux信任该证书
  2. 使用非自签名证书,比如我博客的证书。

在对lumina_server_teams逆向的过程中发现了在该程序中硬编码了一个IDA自己的证书,该证书的长度为2078,所以尝试对lumina_server_teams进行patch,把该证书修改为lumina.crt。并且由于lumina.crt的长度为1923,所以patch起来毫无难度。

在证书patch完以后,发现在TLS服务上能抓取到流量,如下所示:

1
2
('127.0.0.1', 59670)
Received: b'\x00\x00\x00\x10plumina\x00lumina\x00\x05\x00'

通过逆向分析发现,ida自行实现了一个RPC协议。前4字节表示第六字节开始的长度,第五字节表示RPC命令。

通过逆向发现”p”的十六进制为”0x70”,RPC命令为: AUTHENTICATE。而我们需要回应AUTHENTICATE_RESULT,十六进制为”0x71”,第六字节开始的数据为命令相关的信息,通过”\x00”分割。

并且通过逆向发现,AUTHENTICATE_RESULT命令要求的字段有六个,因此可以构造响应头为:

1
2
payload = b"lumina\x00lumina\x00\x05\x00A\x00B\x00CC\x00"
payload = len(payload).to_bytes(4, "big") + b"\x71" + payload

到这里,我们就能正常的使用IDA Pro 9.0的lumina服务了。

题外话

在Windows上安装IDA Pro 9.0的时候,发现其捆绑安装了IDA Team,可以团队协作逆向。但是IDA Team只是一个客户端,还需要搭建一个服务端,该服务端就是Vault Server,由于IDA Team是最近IDA Pro提供的新服务,所以还未看到有相关的泄漏信息。虽然猜测Vault Server也是使用RPC协议进行通信,也可以伪造一个Vault Server,但是由于没有Vault Server的样本,只通过分析客户端发送的流量和参考lumina_server_teams中的RPC信息,难度还是挺大的,还不如继续期待Hex Rays下一波的慈善活动。

Lumina Server v9.0搭建记录

https://nobb.site/2024/08/13/0x8E/

Author

Hcamael

Posted on

2024-08-13

Updated on

2024-08-13

Licensed under