WMQ 对 WAS 客户端的特殊考虑?

Posted

技术标签:

【中文标题】WMQ 对 WAS 客户端的特殊考虑?【英文标题】:WMQ special consideration for WAS clients? 【发布时间】:2011-04-15 14:03:35 【问题描述】:

我们有一个 WMQ - WAS/JMS 客户端通过服务器连接通道设置,我们试图通过用户 ID 设置安全性。

现在,我们在 MQ 盒子上设置一个本地用户 ID,mquserid,并将通道的 MCAUSER 留空。

我们认为:运行 MQ 客户端的 id(在我们的例子中是 WAS)wasuserid,当传递给 MQ 时会失败,因为它没有在 MQ 盒子上设置。因此,我们将为 WAS 上的队列连接工厂设置 JAAS 别名(用户 ID:mquserid),然后将其传递给 MQ 并允许连接。

但是,我们能够在没有 JAAS 别名的情况下连接和放置消息:(

我编写了一个独立的 Java 程序来连接到 QM,它的行为正确取决于我在获取连接时传递的用户 ID。

WMQ 是否以一种特殊的方式处理 WAS,允许连接而不检查其本地用户注册表?

【问题讨论】:

【参考方案1】:

不,WAS 被视为与任何其他连接一样。

在 WAS 版本 6 和更早版本中,如果未指定 WMQ 连接上的用户 ID,它将发送一个空白 ID。您可以通过在连接 WAS 时查看通道状态来判断是否是这种情况。正在运行的通道的 MCAUSER 将包含用于连接的 ID。如果正在运行的通道状态显示没有 MCAUSER 值,则 WAS 没有提供 ID。

另一种可能性是SVRCONN 通道定义(不是状态)在MCAUSER 中有一个值,例如mqm。在这种情况下,连接请求期间提供的 ID 将被忽略。再次检查通道状态以查看运行时使用的 ID,或者仅检查 SVRCONN 通道定义以查找 MCAUSER 值。

现在这里是关键 - 如果通道的 MCAUSER 为空白,那么 WMQ 将接受提供的任何 ID。如果未提供 ID,则连接的应用程序或用户以管理员身份运行。如果应用程序或用户可以是 WMQ 管理员,那么他们可以在 QMgr 上执行任何操作,还可以在 QMgr 下的服务器上远程执行任意操作系统命令。不好。

正确的答案是将通道上的 MCAUSER 设置为应用程序应该连接的任何值。此时,应用程序无法使用任何其他 ID,因为通道将覆盖它。但是,任何人都可以连接到该通道,因此下一步是验证连接请求。您可以使用像BlockIP2 这样的出口,它是免费的或MQAUSX,它是一个商业供应商产品。 BlockIP2 将按 IP 地址过滤传入的请求,这对于来自锁定数据中心中的静态 IP 的连接可能已经足够了。 MQAUSX 实际上会检查在来自 WAS(或任何客户端,就此而言)的连接请求期间发送的用户 ID 和密码。您还可以使用 SSL 和通道的 SSLPEER 属性来验证使用 X.509 证书的请求。请注意,如果您使用 MQAUSX 来验证用户 ID 和密码,要么对其使用 SSL 加密,要么同时使用出口的客户端和服务器端版本。否则,您的凭据会以明文形式通过网络传输,从而无法达到目的。

当然,如果您保护应用程序的通道,则必须保护主机上的其他通道,例如 SYSTEM.DEF.* 和 SYSTEM.AUTO.*,否则攻击者将简单地绕过应用程序通道。

请注意,如果 RCVR、RQSTR 和 CLUSRCVR 通道不验证请求或不包含 MCAUSER 值,它们也会公开管理员访问权限。例如,如果我想控制你的 QMgr 并且你锁定了 SVRCONN 频道,我会在我的桌面上创建一个 QMgr,删除我的 SYSTEM.DEF.RECEIVER,创建一个名为 SYSTEM 的新 SDR 频道。 DEF.RCVR 并将其指向您的 QMgr。如果您的 SYSTEM.DEF.RCVR(或 SDRQSTR 或 SDCLUSRCVR)或您定义的任何其他这些通道类型缺少 SSL 或出口,那么我可以连接,如果他们 lcak 一个 MCAUER,那么我可以匿名管理 QMgr 并执行操作系统命令。

任何没有 MCAUSER 值的通道定义都允许管理访问。任何没有 SSL/SSLPEER 和/或出口的通道都允许匿名连接。

有关这方面的更多信息,请参阅https://t-rob.net/links 上的 WMQ 强化演示和 WMQ 安全实验室文档。此外,请参阅 IBM developerWorks Tech Journal 上 Mission:Messaging 专栏中有关 SSL 和其他 WMQ 安全主题的文章。

【讨论】:

谢谢罗伯!这是一个非常清晰的答案。 我认为可能是 JMS 消息 --> MQ 消息转换正在剥离用户 ID 字段。但我会按照您的建议检查正在运行的频道的 MCAUSER。谢谢。 是的,JMS 字段被映射进或映射出 MQMD。它首先是一条 MQ 消息,JMS 结构映射在它之上。 JMS 字段可以被视为底层 MQMD 值的别名。

以上是关于WMQ 对 WAS 客户端的特殊考虑?的主要内容,如果未能解决你的问题,请参考以下文章

作为自己的客户端的服务

XMPP:使客户端仅对该客户端的其他实例在线显示

asp.net mvc源码分析-ModelValidatorProviders 客户端的验证

我可以在 MDB 中获取源 JMS 会话吗?

聊天客户端的验收测试

客户端到客户端的短消息