Ghidra 服务器提供了一个协作逆向工程环境,允许多个用户同时共享和处理 Ghidra 项目。它管理共享存储库,支持多种用户认证方法,并提供对项目数据的安全访问。本页面介绍 Ghidra 服务器的技术架构、配置和操作。
有关作为客户端连接到 Ghidra 服务器的信息,请参阅 Ghidra 文档。
Ghidra 服务器基于 Java 的远程方法调用 (RMI) 框架构建,并采用 SSL/TLS 安全协议。服务器由几个关键组件组成,它们协同工作以提供对共享存储库的安全协作访问。
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java67-998
服务器通过 AuthenticationModule 接口实现了一个模块化认证框架。每种认证方法都作为一个单独的模块实现。
认证过程如下:
来源
Ghidra 服务器支持以下认证模式:
| 模式 | 描述 | 命令行选项 |
|---|---|---|
| 密码文件 | 本地密码认证 | -a0 |
| Active Directory | 通过 Kerberos 进行 AD 认证 | -a1 -d<domain> |
| PKI | 基于证书的认证 | -a2 |
| JAAS | 可插拔认证框架 | -a4 -jaas <config_file> |
| SSH | 用于无头客户端的 SSH 密钥认证 | -ssh |
| 匿名用户 | 只读匿名访问 | -anonymous |
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java89-117
Ghidra 服务器使用两个通道进行客户端-服务器通信:
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java232-265 Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java266-385
Ghidra 服务器通过多种来源进行配置:
# JVM Memory settings
wrapper.java.initmemory=396
wrapper.java.maxmemory=768
# TLS/SSL Configuration
wrapper.java.additional.6=-Dghidra.tls.server.protocols=TLSv1.2;TLSv1.3
wrapper.java.additional.7=-Djdk.tls.server.cipherSuites="TLS_DHE_RSA_WITH_AES_256_GCM_SHA384\,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\,TLS_AES_256_GCM_SHA384"
# Repository location
ghidra.repositories.dir=./repositories
# Authentication mode
wrapper.app.parameter.1=-a0
wrapper.app.parameter.2=${ghidra.repositories.dir}
来源: Ghidra/RuntimeScripts/Common/server/server.conf1-262
最重要的命令行选项包括:
| 选项 | 描述 |
|---|---|
-a# | 认证模式(0=密码,1=AD,2=PKI,4=JAAS) |
-p# | 基本端口号(默认为 13100) |
-ip <hostname> | 远程访问主机名 |
-i <ip> | 接口绑定地址 |
-d<domain> | Active Directory 域名 |
-e<days> | 密码过期天数 |
-u | 允许用户指定用户名 |
-ssh | 启用 SSH 认证 |
-anonymous | 启用匿名访问 |
<repository_path> | 存储库目录路径 |
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java84-86 Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/ServerHelp.txt1-58
服务器初始化序列遵循以下步骤:
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java518-848
Ghidra 服务器实施了多项安全措施:
TLS/SSL 加密 - 所有通信都使用 TLS 协议和强密码套件进行加密
序列化过滤 - 通过强大的过滤机制防止反序列化攻击
认证 - 多种认证方法,安全级别可自定义
密码策略 - 可选的密码过期和重置要求
访问控制 - 对存储库进行细粒度访问控制
来源: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java880-996 Ghidra/Features/GhidraServer/data/serial.filter1-23
Ghidra 服务器可以在两种模式下运行:
用于测试、调试或临时使用
ghidraSvr console
用于长期运行的生产部署
# Windows:
ghidraSvr install # Install as service
ghidraSvr start # Start service
ghidraSvr stop # Stop service
ghidraSvr uninstall # Remove service
# Linux/macOS:
svrInstall # Install as daemon
svrAdmin # Administration tool
svrUninstall # Remove daemon
来源: Ghidra/RuntimeScripts/Common/server/svrREADME.md1-1095
svrAdmin 工具提供管理用户和存储库的行政功能
# User management
svrAdmin -add <username> # Add user
svrAdmin -remove <username> # Remove user
svrAdmin -reset <username> # Reset password
svrAdmin -dn <username> <DN> # Set user PKI certificate DN
# Repository management
svrAdmin -create <name> <owner> # Create repository
svrAdmin -delete <name> # Delete repository
svrAdmin -grant <repo> <user> <RW> # Grant repository access
svrAdmin -revoke <repo> <user> # Revoke repository access
# Server management
svrAdmin -clearCache # Clear server cache
svrAdmin -fixUsers # Fix corrupted user database
来源: Ghidra/RuntimeScripts/Common/server/svrREADME.md300-325
Ghidra 服务器在内存中维护存储库信息,这对于大型存储库可能是一个限制因素。内存使用量可以在 server.conf 中配置。
wrapper.java.maxmemory=768 # Maximum memory in MB
估算内存需求的公式
Required Memory (MB) = 16 + (32 * FileCount/10000) + (2 * ClientCount)
对于大型存储库,请适当增加此值。
来源: Ghidra/RuntimeScripts/Common/server/svrREADME.md112-141
常见问题和解决方案
| 问题 | 可能解决方案 |
|---|---|
| 服务器无法启动 | 检查日志中的错误,验证存储库目录权限 |
| 认证失败 | 验证用户名/密码或证书,检查认证模式 |
| 连接超时 | 检查网络配置、防火墙设置、正确的主机名 |
| 存储库访问被拒绝 | 验证用户在存储库 ACL 中具有适当权限 |
| 内存错误 | 增加 server.conf 中的 wrapper.java.maxmemory |
主要的日志文件是:
wrapper.log - 服务包装器日志(在 Ghidra 安装目录中)server.log - 服务器应用程序日志(在存储库目录中)来源: Ghidra/RuntimeScripts/Common/server/svrREADME.md103-111
对于无头客户端,SSH 认证可以与密码认证一起配置
-ssh 选项启用 SSH 认证ssh-keygen -m pem -t rsa -b 2048 生成 SSH 密钥repositories/~ssh/<username>.pubSSH 认证适用于无头分析客户端,但不适用于 GUI 客户端。
来源: Ghidra/RuntimeScripts/Common/server/svrREADME.md234-258
Java 认证和授权服务 (JAAS) 提供了一个灵活的认证框架
-a4 -jaas <config_file> 选项进行配置jaas.conf 中定义认证模块外部程序认证示例
来源: Ghidra/RuntimeScripts/Common/server/jaas.conf1-79 Ghidra/Features/GhidraServer/src/main/java/ghidra/server/security/loginmodule/ExternalProgramLoginModule.java81-344
Ghidra 服务器通过其灵活的认证系统、安全通信和版本控制的存储库,为协作逆向工程提供了一个强大的平台。通过了解其架构和配置选项,您可以为您的团队部署和管理一个安全、可扩展的服务器环境。