前言
之前花过一段时间研究群晖的NAS
设备,并发现了一些安全问题,同时该研究内容入选了安全会议POC2019
和HITB2021AMS
。网上关于群晖NAS
设备安全研究的公开资料并不多,因此基于议题《Bug Hunting in Synology NAS》和《A Journey into Synology NAS》,将之前的一些内容展开,如果有对群晖NAS
设备感兴趣的同学,希望对你们有所帮助。
本系列文章的目的是介绍一些关于群晖NAS
设备的基本信息、请求处理的相关机制和常见攻击面等,以及实际发现的部分安全问题,让读者对群晖NAS
设备有个大体的认识,并知道如何去对设备进行安全分析,而不会聚焦于某个具体漏洞的利用细节。本系列文章大概会分为以下几个部分:
- 群晖环境搭建
- 自定义服务分析,包括
findhostd
和iscsi_snapshot_comm_core
HTTP
请求处理流程,和常见的攻击面分析
群晖NAS介绍
NAS
(Network Attached Storage
),即网络附属存储,是一种特殊的数据存储设备,包含一些必要的器件如RAID
、磁盘驱动器或可移动的存储介质,和内嵌的操作系统,用于将分布、独立的数据整合并集中管理,同时提供远程访问、共享、备份等功能。简单地可以理解为”联网的磁盘阵列”,并同时具备硬盘存储和网盘存储的优势。
群晖是一家致力于提供网络存储服务器(NAS
)服务的公司,被认为是中小企业和家庭NAS
领域的长期领导者。群晖NAS
的主要产品线包括DiskStation
、FlashStation
和RackSation
,其中DiskStation
是适合我们日常使用的桌面型号。针对每个产品线,都提供了不同的系列来满足不同的要求。
此外,群晖还提供了适用于每一个NAS
的操作系统DiskStation Manager
(DSM
)。它是一个基于Linux
的、网页界面直观的操作系统,提供了丰富的功能包括文件共享、文件同步和数据备份等,以在各个方面提供更好的灵活性和可用性。
环境搭建
在了解了群晖NAS
的基本信息后,需要有一个目标设备来进行测试。目前,常见的有两种方式,如下。
- 直接购买一个群晖
NAS
设备,即”白群晖”,其功能完整,比较方便配置和使用 - 组装一个设备,或购买一个厂商的
NAS
设备,并安装群晖的DSM
系统,即”黑群晖”,其拥有大部分的功能,对于测试而言是足够的
除了上述两种方式,NAS
社区还提供了另一种方式,即创建一个群晖虚拟机。这种方式更适合于测试用途(比如想测试不同的DSM
版本),因此下面主要对这种方式进行介绍。
这里仅是出于安全研究的目的,如果有实际使用需要,建议购买群晖官方
NAS
设备。
安装DSM 6.2.1
创建一个群晖虚拟机,主要需要如下两个文件。目前社区提供了针对不同NAS
型号和不同DSM
版本的loader
,最新的loader
版本适用于DSM 6.2.1
,注意在安装时最好选择和loader
对应的NAS
型号及DSM
版本。经测试,ds918
系列的loader
支持升级到DSM 6.2.3
,即可以在先安装DSM 6.2.1
版本后再手动升级到DSM 6.2.3
。
- 群晖官方提供的
href="https://archive.synology.com/download/Os/DSM">DSM文件(
pat
文件) - 社区提供的loader
关于
loader
是否可以升级以及是否成功升级等信息可参考这里
以VMware Workspace
为例,创建群晖虚拟机需要先加载synoboot
引导,再安装对应的DSM
。由于下载的引导文件为img
格式,这里可以先将其转换为vmdk
格式,方式如下。
- 使用软件
StarWind Converter
进行转换 - 使用
qemu-img
命令进行转换$ qemu-img convert -f raw -O vmdk synoboot.img synoboot.vmdk
之后正常创建VMware
虚拟机,并使用之前转换得到的vmdk
文件。其中,在选择安装引导的磁盘类型时,一定要选择SATA
类型,选择SCSI
的话可能会造成后续引导无法识别或启动。创建完毕后,再正常添加额外的硬盘,用于数据存储。启动虚拟机后,通过Web Assistant
或Synology Assistant
进行安装和配置,完成之后就可以通过浏览器成功访问NAS
虚拟机了。
Synology Assistant
是一个客户端软件,用于在局域网内搜索和管理对应的NAS
设备。
之后,可以通过手动更新的方式将其升级到DSM 6.2.3
版本。前面提到过,通过这种方式只能得到DSM 6.2.3
版本的虚拟机,而目前群晖DSM
的最新版本包括DSM 6.2.4
和DSM 7.0
,无法通过这种方式安装。不过,可以基于刚创建的NAS
虚拟机,借助群晖提供的Virtual Machine Manager
套件来安装DSM 6.2.4
或DSM 7.0
版本的虚拟机。
安装DSM 6.2.4/DSM 7.0
群晖套件Virtual Machine Manager
,通过一个集中且规范的接口集成了多种虚拟化解决方案,可以让用户在NAS
上轻松创建、运行和管理多台虚拟机,当然也包括群晖的虚拟DSM
。
简单而言,可以先创建一个DSM 6.2.3
版本的虚拟机,然后在该虚拟机内部,借助Virtual Machine Manager
套件再安装一个或多个virtual DSM
。其中,在安装virtual DSM
时,需要保证对应的存储空间格式为Brtfs
,可以通过额外添加一个硬盘(容量尽量大一点,比如40G
或以上)的方式,新增加存储空间时选择SHR(Brtfs)
即可。另外,一个Virtual Machine Manager
里面似乎只提供了一个Virtual DSM
的免费License
,因此如果安装了多个Virtual DSM
的话,多个虚拟实例无法同时启动。这里通过切换虚拟实例的方式来避免这一问题,对于安全测试而言足够了。
由于目前
DSM 7.0
还在测试阶段,一些功能或特性不是特别稳定或成熟,因此本系列文章还是以DSM 6.1
/DSM6.2
版本为主。
群晖在线Demo
群晖官方也提供了供在线体验的href="https://demo.synology.com/en-global/dsm">DSM实例,包括
DSM 6.2.4
和DSM 7.0
版本。当然,你也可以基于该坏境去进行安全分析与测试,不过可能会有一些限制比如无法使用SSH
访问shell
等,或者其他顾虑等等。
工具安装
群晖NAS
上提供了SSH
功能,开启后可以访问底层Linux shell
,便于后续的调试与分析等。此外,群晖还提供了一个名为Diagnosis Tool
的套件,其包含很多工具,如gdb
和gdbserver
等,便于对程序进行调试。通常,可以通过套件中心搜索并安装该套件,如果在套件中心中无法找到该套件的话,可以通过在shell
命令行采用命令synogear install
进行安装,如下。
$ sudo -i # 切换到root用户
$ synogear install # 安装套件
设备指纹
群晖NAS
主要是用在远程访问的场景下,此时唯一的入口是通过5000/http
(5001/https
)进行访问(暂不考虑使用QuickConnect
或其他代理的情形)。使用设备搜索引擎如shodan
查找暴露在公网上的设备,如下。可以看到,确实只有少量的端口可以访问。
为了进一步地知道目标设备的DSM
版本、安装的套件和对应的版本等信息,需要获取更精细的设备指纹。通过分析,发现在index
页面中存在对应的线索。具体地,index
页面中存在一些css
链接,表明有哪些内置的模块和安装的第三方套件。同时,其中也包含一些NAS
特有的脚本链接。根据上述信息,可以构建一些query
用于更准确地查找群晖NAS
设备。
Port: 5000/5001 # default
Shodan query: html:"SYNO.Core.Desktop.SessionData"
另外,在每个链接后面还有一个参数v
,其表示最后更改时间的时间戳,即对应构建时的时间戳。以如下链接为例,时间戳1589235146
可转换为时间2020-05-12 06:12:26
。通过在群晖镜像仓库中查找各DSM
版本发布的时间,可以推测该DSM
版本为6.2.3-25426
。类似地,AudioStation
套件的版本为6.5.6-3377
。
webapi/entry.cgi?api=SYNO.Core.Desktop.SessionData&version=1&method=getjs&SynoToken=&v=1589235146
进一步地,可以通过访问http://<host>:<port>/ssdp/desc-DSM-eth0.xml
, 获取设备的具体型号、版本以及序列号等信息。
通常,设备搜索引擎只会探测
http://<host>:<port>/
下的默认页面,对于该二级页面没有进行探测。
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<friendlyName>VirtualDSM (VirtualDSM)</friendlyName>
<manufacturer>Synology</manufacturer>
<manufacturerURL>http://www.synology.com</manufacturerURL>
<modelDescription>Synology NAS</modelDescription>
<modelName>VirtualDSM</modelName>
<modelNumber>VirtualDSM 6.2-25556</modelNumber>
<modelURL>http://www.synology.com</modelURL>
<modelType>NAS</modelType>
<serialNumber>xxxxxx</serialNumber>
<UDN>xxxxxx</UDN>
相关事件/研究
近年来,有一些关于群晖的安全事件,其中包括:
- 在
2018
年的GeekPwn
比赛中,来自长亭科技的安全研究员攻破了群晖DS115j
型号NAS
设备,成功获取了设备上的root
权限; - 在
Pwn2Own Tokyo 2020
比赛中,有2个团队攻破了群晖DS418Play
型号NAS
设备,均成功拿到了设备上的root shell
。
同时,也有一些安全研究人员对群晖设备进行了分析,感兴趣的可以看看。
- Network Attached Security: Attacking a Synology NAS
- SOHOpelessly Broken 2.0 – Security Vulnerabilities in Network Accessible Services
- Vulnerability Spotlight: Multiple vulnerabilities in Synology SRM (Synology Router Manager)
- Vulnerability Spotlight: Multiple vulnerabilities in Synology DiskStation Manager
小结
本文首先对群晖NAS
进行了简单介绍,然后给出了如何搭建群晖NAS
环境的方法,为后续的安全分析做准备。同时,对设备指纹进行了简单讨论,并介绍了与群晖NAS
相关的一些安全事件/安全研究等。后续文章将对群晖NAS
设备上的部分服务、功能或套件等进行分析,并分享一些实际发现的安全问题。