破解Unifi控制器密码:乐趣与WIFI之旅
作者:Kent Ickler
Black Hills Information Security
因为,你知道——这应该是个事儿。
TL;DR:
别在壁橱里的笔记本上运行Unifi控制器。
背景
Ubiquiti的Unifi控制器是一个网络设备或软件服务,用于控制Ubiquiti的Unifi系列设备。Unifi是一个设备品牌,它们统一在一起,为SMB领域的网络用户和系统管理员提供更好的用户体验。我们把这留给您自己判断,但我们用过这些设备,它们运行得还不错。
免责声明
我不是来从安全角度评论控制器软件设计的。Ubiquiti聘请安全专家来做这件事。那不是我或BHIS。这没问题。
我要告诉你的是:
一个被入侵的Unifi控制器主机就是一个被入侵的Unifi网络。
黑客总会黑
Unifi云启用设备不久前被攻破了。觉得应该提一下。
https://krebsonsecurity.com/2021/03/whistleblower-ubiquiti-breach-catastrophic/
够了。
本地控制器
本地Unifi云控制器可以安装在Linux或Windows系统上,如果你不想购买他们的“Cloud Key”硬件控制器(https://store.ui.com/products/unifi-cloudkey)。他们为Unifi设备所有者提供可下载的控制器真是太棒了。这允许集中安装和管理本地Unifi设备,而无需购买额外的软件或硬件。
下载链接:https://www.ui.com/download/unifi/
事实上,它如此棒和多才多艺,就像他们希望我们把它安装在一个我们不经常使用的旧随机笔记本上,然后完全忘记它在运行。
控制器设计
控制器的后端数据库运行一个MongoDB数据库。虽然数据库服务器只监听安装它的主机的环回地址,但它不需要认证。
再次声明,我不评论这一点。
环回端口转发
信息安全领域的人知道,环回地址的安全性仅取决于运行它们的系统。在大局中,如果运行控制器的主机被入侵,使用环回地址获取对Unifi控制器的远程访问将变得微不足道,而无需远程桌面或控制台访问。为了演示目的,我通过RDP直接跳转到主机,抓取一些简单的截图。
无SQL
我通常会用DBeaver(https://dbeaver.io/)来做这种事。不久前,DBeaver从社区版中移除了他们的No-SQL和MongoDB驱动程序。真遗憾。
NOSQLBooster(https://nosqlbooster.com/)是一个很好的替代品。
启动NOSQLBooster后,你需要连接到本地数据库。
DRAKE MONGODB端口热线
这里没有MongoDB。
即使没有Drake,这个环回混淆端口用一些cmd-fu也不难找到。
但是……Ubiquiti也好心地完整记录了它:https://help.ui.com/hc/en-us/articles/218506997-UniFi-Ports-Used
连接
在NOSQLBooster中,点击“Connect”然后“Create”。输入详细信息:
类型:Single Server
服务器:localhost
端口:27117
名称:Unifi
接下来,按“Save and Connect”。
数据库结构将在应用程序的左侧打开。
好黑客的东西
让我们深入到Unifi > ace > admin。
双击“admin”打开相关记录。
注意到x_shadow键了吗?它看起来非常像一个哈希密码。
剧透:它是。
让我们抓取那个键并做一些魔法。
停,哈希时间
跟着这个跳舞,你会变瘦。
$6$KPCNpIC/$GzO92iNqVVQNN8cQonvDQumnwmYOnUzvC6WvGLLMcysBfporCeVt7UYgGKPnkxp8B/e0Ckp.57Q8UiWw32sM60
让我们剖析那个哈希。通过用模块化加密格式(https://passlib.readthedocs.io/en/stable/modular_crypt_format.html)分析哈希,我们可以识别它的各个部分。这种类型哈希的语法:$id$salt$encrypted
首先,id,$6$,告诉我们我们正在看某种SHA512-crypt的变体。
$6$和下一个$之间的文本是哈希盐(KPCNpIC/)。关于那个盐有一些有趣的点,我们稍后会讨论。
在盐和$之后是密码+盐的加密哈希(GzO92iNqVVQNN8cQonvDQumnwmYOnUzvC6WvGLLMcysBfporCeVt7UYgGKPnkxp8B/e0Ckp.57Q8UiWw32sM60)。
我闻到企鹅
值得注意的是,这是Linux影子文件中常见的哈希类型。聪明地,我们在一个名为x_shadow的键中找到了哈希。
你们中了解Linux的人已经识别出哈希为一个加盐的sha512crypt哈希。
Hashcat书呆子(像我)已经知道这是模式1800。
破解哈希,获取锅
继续吧。
首先,我们把那个哈希扔进一个名为“hash”的文件,然后启动Hashcat。Hashcat将尝试找到一个哈希碰撞,如果找到,将在一个名为“pot”的文件中输出碰撞。我们使用Hashcat的-m标志指定哈希类型,-a标志指定我们的攻击模式——在这种情况下,直接字典攻击。
echo $6$KPCNpIC/$GzO92iNqVVQNN8cQonvDQumnwmYOnUzvC6WvGLLMcysBfporCeVt7UYgGKPnkxp8B/e0Ckp.57Q8UiWw32sM60 > hash
hashcat -m 1800 -a 3 hash wordlist -o pot
命中了。你击沉了我的控制器船。让我们从潜力文件中抓取碰撞。
cat pot
$6$KPCNpIC/$GzO92iNqVVQNN8cQonvDQumnwmYOnUzvC6WvGLLMcysBfporCeVt7UYgGKPnkxp8B/e0Ckp.57Q8UiWw32sM60:Fall2021!
密码是Fall2021!
管理员登录时间
你现在可以用ace admin键“name”中指定的用户名和破解的密码登录Unifi控制器https://localhost:8443/。在我们的例子中,Fall2021!它被黑了。
我的哈希,你的哈希
让我们谈谈盐和哈希。
为了有点乐趣(并证明关于非过滤盐的一点),让我们创建我们自己的哈希。
我们将使用openssl生成一个SHA512-crypt哈希。然而,我们将使用我们自己的自定义盐——一个Unifi应该知道它从未用于存储实际用户帐户凭据的盐。
openssl passwd -6 -salt BHISWASHERE Fall2021!
$6$BHISWASHERE$M.ngiEju5sTwrsxbs3gRK/Ok.mp948HNn5x1PrB6UK3q/3acozGjEQtVSRZ4KUBmU02iI.TdJGhqNBj4ttbzI1
要“重置”那个Unifi控制器管理员密码,我们只需要用我们的新哈希覆盖ace>admin表中的x_shadow键:
$6$BHISWASHERE$M.ngiEju5sTwrsxbs3gRK/Ok.mp948HNn5x1PrB6UK3q/3acozGjEQtVSRZ4KUBmU02iI.TdJGhqNBj4ttbzI1
登录密码将是一个非常安全的Fall2021!
盐没有被过滤,它将用于登录控制器。
咸帕德梅
所以,盐不重要。它没有被过滤。大事。
抱歉,帕德梅。
想象一个运行时计算的盐,它是帐户属性(如创建时间戳)加上设备GUID的衍生物,从不存储,而是在认证时重新计算。
在认证时,用户提交一个密码,然后添加到运行时计算的盐——即用户帐户创建时间加上设备GUID的衍生物。由于盐永远不会被存储,黑客将“永远”无法正确生成和注入外部哈希到认证数据库。
但我是个理想主义者。
还有什么?
嗯,除了像“payment”表这样有趣的东西,你在那里找到Hot Spot Unifi服务的支付细节,还有其他可能让你感兴趣的小细节。
“devices”表有你想要知道的关于控制器如何与设备通信的一切,包括认证。
“alert”表将有网络元数据警报。你可以观看用户在大楼里走动。
在“users”表中,你会找到控制器跟踪数据的每个网络设备的元数据(基本上是任何受控Unifi设备在其网络广播中看到的任何东西)。
在“settings”表中,你会找到其他多汁的小细节,包括对Unifi云控制器服务的认证和API信息。
底线:控制器中的每个设置都可以被枚举。
SMTP配置、SYSLOG、SNMP等。如果它是控制器中存储的凭据,你现在拥有它。
咳嗽……IPSEC和VPN……咳嗽。
我来这里是为了“免费”无线
如果登录仪表板不是你的菜,你总是可以直接从数据库中拉取无线预共享密钥,而无需登录控制器界面。
如果你查看“wlanconf”表,你会找到像“name”和“x_passphrase”这样的款待,它们分别是明文SSID和预共享密钥。记住,即使控制器设备本身无法“看到”无线网络,这也是可访问的。
老实说:如果你已经走到这一步,意大利面和明文预共享密钥是你最不担心的。
结论
坦率地说,这一切都是因为我忘记了我家里本地控制器的管理员密码。
哎呀。
红队:检查目标端点上的Unifi控制器。它可能带来轻松的胜利。
热门观点
软件Unifi控制器不安全吗?
不。我的意思是,是。也许。
如果运行Unifi控制器的主机被入侵,网络就被入侵。任何在控制器中配置的外部服务,以及可能链接的Unifi云帐户,应被视为已入侵,并更改密钥。
但话说回来,运行此软件的主机可能应该更好地称为“Unifi控制器”,并像保护“Unifi控制器”一样受到保护。不要使用扔在壁橱后面的随机笔记本,因为你不想购买Cloud Key硬件控制器。
顺便说一句,“入侵”在这里不意味着SYSTEM上下文。记住,MongoDB在没有认证的情况下运行。你只需要本地环回权限(即使是远程)来修改数据库。
它能更安全吗?
是的,绝对。
但记住钟摆如何两边摆动;另一个极端:
所有敏感位可以用由Ubiquiti控制的PKI基础设施保护。那会更好,对吧?
#GetOffMYLawnAlexa
SHA512crypt不是已经坏了吗?
呃,当然,这里有一些数学:https://pthree.org/2018/05/23/do-not-use-sha256crypt-sha512crypt-theyre-dangerous/
我联系Ubiquity了吗?
没有。这是他们的设计。我甚至不生气。
作为系统管理员,我承认这种行为与其他制造商未安装在Windows上的网络控制器一致。例如:控制台电缆可以给你交换机上的root权限,只需物理访问——但你把那个交换机锁在安全设施中。
这看起来不好只是因为人们认为在任何Windows主机上安装软件是可以的,包括个人使用的笔记本。这里的网络控制器利用了主机本身的安全性。
当你安装这个软件时,设备成为网络控制器,你需要像保护一个网络控制器一样保护它。
不要在易受攻击的设备上安装网络控制器软件。
我唯一想多说