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 | [Unit] |
所以在测试阶段我们都可以使用上述的命令运行lunima服务。
因为该lumina服务套了一层TLS,并且没找到关闭TLS的方法,所以得先生成相关证书和密钥,命令如下所示:
1 | $ 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' |
下一步是需要设置lumina的license证书,根据lumina_server_teams
命令的提示,-L
参数应该是指定license证书,所以license证书应该是lumina.lic
,但是不对,不知道为啥,证书是硬编码的luminasrv*.hexlic
。
lumina的license证书格式和ida pro9的类似,crack方案也相似可以使用同一个脚本,不过有几个需要修改的地方,如下所示:
1 | ...... |
按上述方案修改好后,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 | #!/usr/bin/env python3 |
证书和lumina服务使用同一个证书,端口监听65433
,因此需要修改lumina.conf
内容为:
1 | cat lumina.conf |
接着通过点击IDA Pro的lumina->view all
来访问vault
服务,然后查看流量。
但是发现,在TLS握手阶段就出现了证书错误,尝试了能想到的多种方案都失败了,能想到的方案如下:
- linux信任该证书
- 使用非自签名证书,比如我博客的证书。
在对lumina_server_teams
逆向的过程中发现了在该程序中硬编码了一个IDA自己的证书,该证书的长度为2078,所以尝试对lumina_server_teams
进行patch,把该证书修改为lumina.crt
。并且由于lumina.crt
的长度为1923,所以patch起来毫无难度。
在证书patch完以后,发现在TLS服务上能抓取到流量,如下所示:
1 | ('127.0.0.1', 59670) |
通过逆向分析发现,ida自行实现了一个RPC协议。前4字节表示第六字节开始的长度,第五字节表示RPC命令。
通过逆向发现”p”的十六进制为”0x70”,RPC命令为: AUTHENTICATE
。而我们需要回应AUTHENTICATE_RESULT
,十六进制为”0x71”,第六字节开始的数据为命令相关的信息,通过”\x00”分割。
并且通过逆向发现,AUTHENTICATE_RESULT
命令要求的字段有六个,因此可以构造响应头为:
1 | payload = b"lumina\x00lumina\x00\x05\x00A\x00B\x00CC\x00" |
到这里,我们就能正常的使用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搭建记录