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搭建记录

