黑群晖镜像安全一览
揭秘黑群晖世界:从风险到规避风险之路
2024年04月16日 更新, 请参阅文章末尾。
1. 黑群晖入门
从19年开始, 装过五台黑群晖, 6.1.3、7.0.1、7.1.1、7.2.1, 引导包也是从最开始的50M到现在3G多大小。
以前虽然也有考虑安全性, 但是毕竟便捷性在前, 因此也未仔细深究过, 突发奇想想看看包的变化, 才是大吃一惊。
简单的说, 你的电脑在你的家里,
花着你每天两块钱的电费,还有平均每天四块钱的网费,
运行着其它人的程序,甚至还去看你全家人的照片,
甚至通过你的nas访问你的手机、个人电脑, 刷你的信用卡。
上面的流程都是打通的。 也就是说理论上如果攻击者想, 就能做到。
诸位, 黑群晖使用需谨慎,有条件请上正版。 没条件可以参考本文稍微调整一二(需要了解一定的技术)。
注:本文不贬低任何一位奉献者。
2. 黑群晖的风险剖析
最新安装的包是7.2.1:
主要的文件变更来源于各个驱动或者插件, 例如如图:
这也是引导程序越来越易用的原因。
但是, 驱动程序等是开源的, 贡献者可以在里面插入自己的代码, 参考最近的开源社区 xz 事件。
除此之外, 引导程序启动的时候本身可以执行一系列的脚本、安装一系列的程序,它们都可以以最高权限执行。
如上图中的ssh文件夹, 以及其他的一些内置的脚本、程序等,在你的nas启动之后, 攻击者可以很方便的访问你的电脑。
2.1 upnp
一般的路由器都是打开的, 群晖本身就有个upnp服务, 可以被nas上的服务调用(也包括攻击者) 简单的说这个服务可以让攻击者在任何时候访问你的nas。
2.2 ssh
也是如上图, sshd_config它支持让root用户直接通过ssh连接你的nas。 root 用户, 听名字就知道有多不安全了吧。
其配置: PermitRootLogin yes, 是可以允许配置了私钥了的root直接登录的。
2.3 ttyd
你用的攻击者的引导程序, 攻击者也可以在引导程序里面插入个远程webssh, 这个更简单, 有浏览器就能使用。
并且, 这个程序来源于大名鼎鼎的:pocopico,端口7681。
当然, 可能pocopico大神是为了调试方便, 此处不做评估。
此处因为发现之后直接iptables给它封了, 然后它就自己把自己kill了,暂时没有截图。
2.4 其它
使用Nmap扫描了下接口, 比较多, 并且因为是引导级别的, 启动的时候就可以hook内核了, 因此再看下去意义不大。
3. 解决(尝试)这些风险
首先, 解决是不可能解决的, 道高一尺魔高一丈, 尽可能预防把。
3.1 购买正版
正版不一定毫无问题, 但是大概率会好很多。
3.2 参阅博主的解决方案
1. 关闭路由器UPNP, 尤其是你的路由器有公网环境, 务必关闭!
2. 设置路由器过滤规则,端口映射的时候, 不要映射5001等端口, 改成一个不常用的, 尤其不要打开22端口。
3. 配置出站、入站规则,
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
把所有的端口都封了, 然后只打开类似5001等需要用的端口。
4. (如果需要公网使用ssh)使用堡垒机
可以买一个低功耗开发板, 例如arm开发板、赛扬的二手笔记本。上面安装正版的ubuntu server(免费),
server上安装堡垒机, 隔离外部访问
5. 定时扫描进程, 不是在白名单里面的进程都给kill了:
参阅python脚本:
import psutil
import subprocess
class OOMKiller:
def init(self, whitelist_processes, whitelist_ports):
self.whitelist_processes = whitelist_processes
self.whitelist_ports = whitelist_ports
def get_all_processes(self):
return psutil.process_iter(attrs=['pid', 'name', 'cmdline'])
def get_process_ports(self, pid):
try:
proc = psutil.Process(pid)
connections = proc.connections()
ports = [conn.laddr.port for conn in connections]
return ports
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
return []
def kill_process(self, pid, program, cmdline, port):
try:
#subprocess.run(['kill', str(pid)])
print(f"Killed {port} process: {program} {cmdline}")
except subprocess.CalledProcessError:
pass
def scan_and_kill(self):
for proc in self.get_all_processes():
program = proc.info['name']
cmdline = " ".join(proc.info['cmdline'])
if program not in self.whitelist_processes:
ports = self.get_process_ports(proc.info['pid'])
if any(port not in self.whitelist_ports for port in ports):
for port in ports:
if port not in self.whitelist_ports:
self.kill_process(proc.info['pid'], program, cmdline, port)
# Example usage:
whitelist_processes = ['systemd', 'sshd', 'bash', 'vpnauthd', 'openvpn', 'synowsdiscoveryd', 'nmbd', ] # Add processes you want to whitelist
whitelist_ports = [22, 23, 80, 139, 443, 445, 554, 111, 892, 2049, 111, 662, 892, 2049,554 ,1688,1935,3260,3261,3263,3265,5566,6690] # Add ports you want to whitelist
killer = OOMKiller(whitelist_processes, whitelist_ports)
killer.scan_and_kill()
# port table
# 554 SurveillanceStation
# 1688 docker-proxy, windows kms
# 1935 SurveillanceStation
# 3260 iSCSI
# 3261 iSCSI
# 3263 iSCSI
# 3265 iSCSI
# 5566 5566高级 LUN 和共享文件夹
# 6690 Cloud
# 7681 ttyd, pocopico.misc的渗透端口
# 111, 662, 892, 2049 NFS
# iptables -A INPUT -p tcp --dport 3261 -j DROP
# iptables -A INPUT -p tcp --dport 3263 -j DROP
# iptables -A INPUT -p tcp --dport 3264 -j DROP
# iptables -A INPUT -p tcp --dport 3265 -j DROP
# iptables -A INPUT -p tcp --dport 4045 -j DROP
# iptables -A INPUT -p tcp --dport 5357 -j DROP
# iptables -A INPUT -p tcp --dport 7681 -j DROP
如上, 很难说完全保证你的nas的安全, 但是大概率能减少你的nas被无端的使用。
当然, 如果攻击者想要直接定时加密你的硬盘, 怎么想都百搭, 毕竟你用的是盗版。
4. 结束
总之, 引导的提供者, 也是用心用时间在提供服务。 但是可能提供的过程中遗留了一些难以解决的漏洞, 这些漏洞是能被攻击者利用的。
且不做防护, 你的nas 100%被攻击, 可能你在读文章的时候,它正在被攻击。
如果大家有其他好的方案,请联系我。
2024年04月16日 更新,更新:
改动点:
1. 安装iptables(可以先在套件中心安装ruby和git, 然后使用清华大学镜像源安装homebrew, 使用brew安装iptables), 使用如下配置:
# /etc/iptables/block_ip.sh
内容(里面的端口按情况更改):
================
#! /bin/bash
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,23,80,111,137,138,139,161,443,445 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 548,892,1194,1688,1935,2049,5000,5001 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 0:65535 -j DROP
iptables -A INPUT -p udp -m multiport --dports 0:65535 -j DROP
================
2. 安装 systemctl。
# vi /etc/systemd/system/xxx.service
内容(里面的端口按情况更改):
=================
[Unit]
Description=Iptables Block None Allowed
After=network.target
[Service]
ExecStart="/etc/iptables/block_ip.sh"
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
=================
3. 编辑 /etc/hosts.deny, 把下面内容放进去:
http://antivirus.neu.edu.cn/ssh/lists/neu.txt
一定记住修改sshd_config, 禁止root访问。
大致含义是只允许部分端口开放, 这样即使有进程监听了不可预期的端口, 也无法接收到外部的请求。
搭配正文python写的扫描非白名单的进程, 一定层度上会安全一点。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
刀刀是把好菜刀
校验提示文案
值友4359734809
校验提示文案
值友8400517551
校验提示文案
值友4137582193
校验提示文案
xiaolaohu0424
校验提示文案
AI小值-电脑数码
校验提示文案
佩佩猪猪_
校验提示文案
视听爱好者
校验提示文案
爱的昵称
校验提示文案
sontjer
校验提示文案
djzxpg
校验提示文案
bettermsao
校验提示文案
三颗棒棒糖都很甜
文章里好多问题都是白裙、黑裙同样会遇到的,与是不是黑裙没有半毛钱的关系。
校验提示文案
平菇虾饺
去看看
在物理机上安装一个Ubuntu Server, 然后使用docker安装vDSM, 逐行分析了它的镜像源码。 全部是依赖于vDSM本身的机制, 没有发现恶意代码的植入。
因此, 只要群晖官方没有留后门, 理论上是不担心主观上的安全问题的(客观上存在的问题, 白群晖一样存在, 不在讨论范围内)
校验提示文案
建筑师PG万
校验提示文案
今夜月光明媚
校验提示文案
夏已V微V凉
校验提示文案
平菇虾饺
去看看
在物理机上安装一个Ubuntu Server, 然后使用docker安装vDSM, 逐行分析了它的镜像源码。 全部是依赖于vDSM本身的机制, 没有发现恶意代码的植入。
因此, 只要群晖官方没有留后门, 理论上是不担心主观上的安全问题的(客观上存在的问题, 白群晖一样存在, 不在讨论范围内)
校验提示文案
三颗棒棒糖都很甜
文章里好多问题都是白裙、黑裙同样会遇到的,与是不是黑裙没有半毛钱的关系。
校验提示文案
今夜月光明媚
校验提示文案
bettermsao
校验提示文案
djzxpg
校验提示文案
sontjer
校验提示文案
值友4137582193
校验提示文案
爱的昵称
校验提示文案
建筑师PG万
校验提示文案
夏已V微V凉
校验提示文案
视听爱好者
校验提示文案
佩佩猪猪_
校验提示文案
xiaolaohu0424
校验提示文案
刀刀是把好菜刀
校验提示文案
值友4359734809
校验提示文案
AI小值-电脑数码
校验提示文案
值友8400517551
校验提示文案