编注:本文入选「自力更生」征文活动。本次征文选题灵活,只要围绕「自托管」展开即可,软件推荐、经验分享、技术科普、观点评论均可投稿,入围作品均可获得稿酬、Zeabur 订阅、少数派 PRIME 会员等奖励。了解详情
目前征文投稿已截止,你可以通过 #自力更生 标签查看所有投稿。
前两天看到了作者 @Ivan 关于《如何压榨 24 小时工作的 NAS》的文章1,我没有想到自己关于网络安全抖机灵似的回复被很多人点了赞,大家对于网络安全的关注超出了我的预料,身为网络安全的从业者,五年的工作经历,从研究黑客的攻击手法到设计安全产品,深感网络安全「水深」。我觉得自己有必要借着这个机会写一篇文章,跟大家分享下自托管前,普通人应该了解的真实网络安全世界。
这篇文章不是专业的分析报告、学术论文,文中每一个子标题都能延展出非常多内容,仅仅一篇文章实在难以面面俱到。我希望这篇文章浅显的语言能抛砖引玉,让大家管中窥豹,了解真实网络安全世界的一角,重视网络安全、敬畏网络安全。也欢迎大佬、师傅们批评指正。
我本科不是学的信息安全专业,上学那会儿甚至还不知道什么 NAS、自托管服务,大三上了计算机网络的课才逐渐对基本的网络知识有了一定的想法。我当时也会有稚嫩的网络安全疑问:「是不是只要病毒木马不在互联网上传播,只在内网环境中传播,就无敌了?内网完全没有隐私可言了,完全是养蛊的修罗场?」
当时唯一一条沾边的评论可能想说我们访问网页有类似 TLS 之类的加密,不过其实没有答到点上。现在我当然可以从容的回答:「从我当时的描述来看,当时确实有一些思考,也许是想问内网会面临什么威胁、针对这些威胁有什么防护措施。其实高校每年会花重金在网络安全上,这其中当然包括对内网的安全防护。内网中的威胁也不止木马、病毒,但是仅就内网中的木马、病毒而言,除了杀毒软件,校园网内 IDS、IPS、WAF 之类的安全产品,能在一定程度上对木马、病毒的网络行为、通信特征进行识别,进而实现防护。最后,问题中的安全服务器,可能是想说堡垒机。」
你看,即使身为计算机相关专业的学生,我在从业前也甚至连网络安全的问题都问不清楚,对普通人而言,对网络安全知之甚少太正常了,我也是在从业过程中不断学习才逐渐了解到网络安全的只鳞片爪,大家也不必听到网络安全这个词儿就感觉多么高深,对网络安全望而却步,了解之后你可能会说一句,网络安全也就那么回事儿嘛 。
本片文章将围绕以下几个线索展开,希望通过本篇文章,大家能在自托管前,对相关网络安全知识有一个整体的概念:
除了从事威胁捕获、安全运营等方向的网络安全专家,当被问及诸如「你了解此时此刻网络中的有哪些攻击吗?这些攻击是由谁发起的?目标是谁?有什么目的」的问题时,也很难给出准确的答案,这是网络安全行业面临的一个现状——安全事故/安全事件缺少统一的曝光、披露出口。
引用老东家领导的一条朋友圈:
企业安全事故/安全事件的披露尚且如此,对于消费级电子产品的安全事件披露就更少了。回想自己在媒体上接触的信息,似乎除了小时候听说过什么「灰鸽子」、「熊猫烧香」之类的病毒,实在是想不起太多的网络安全相关新闻,反而「现在网络上没有什么病毒了、没必要安装杀毒软件了」之类的声音逐渐成了主流,似乎只有不懂电脑的人才担心网络安全,真正懂行的人都在「裸奔」,事实真是这样吗?
国内外有一些专业的研究团队在研究公网上的攻击态势,但更多也是研究针对政府、企业的攻击,这是个烧钱的东西,大家都是要生活的嘛,大多数普通消费者连杀毒软件都不愿意付钱,企业自然没有动力投入过多资源。但针对消费级电子产品、开源组件的攻击,不会因为没有被披露就消失,反而十分疯狂,引用某网友的吐槽:
你说上面这是公司,他比较有钱,所以黑客才盯上他,我就玩个 NAS,部署点开源软件,跟运营商要了公网 IP,用路由器搞个端口映射啥的,黑客能看上我?其实黑客都不用盯上你、甚至都不用费什么力,因为整个攻击过程大部分的步骤都是自动的。
上面是我个人蜜罐(后文会解释)节点上,黑客利用 CVE-2023-1389 这个漏洞,攻击一款消费级路由器的日志,简单来说,攻击者利用这个 RCE 漏洞,调用路由器上的 wget 命令下载 downloader(把它当成病毒好了,它会自动执行一系列的命令,最终你的设备就变成了所谓的「僵尸主机」),虽然只列出了两条日志,实际的分析过程不会这么草率,但是我可以负责地「以偏概全」:
从业人员一眼就可以看出上面的这个攻击是某个「开源」僵尸网络的变种,直接用 wget 下载 downloader 这种方式只是冰山一角,但仅统计我个人一个蜜罐节点上,一天利用 wget下载 downloader 的攻击数量(上图),我接着责任地「以偏概全」:
会有人说你这个统计样本太少,没有说服力。我虽然已经不做威胁捕获方向(个人确实没有财力买太多的服务器当蜜罐节点),没办法给出最新的数据,但引用当年在老东家绿盟科技当年的一些研究报告,还是能够说明一个观点:针对物联网设备(NAS、摄像头、路由器、机顶盒等等)的攻击,早就放飞自我,彻底疯狂了:
攻击源和攻击次数方面,《绿盟科技 2020 年物联网安全年报》:根据现网流量监控,2020 年监控到的境外攻击源如下图所示,国内捕获的来自境外攻击的源 IP 地址中,占比最高的是美国,总量高达 23%,每个月平均有约 30 万个 IP 地址被发现有 5.2 亿余次攻击行为;其次是德国,占比达 11%,每个月平均有近 15 万个 IP 源攻击中国境内的物联网设备;居德国之下的是印度、法国,相应的攻击 IP 地址占比分别为 5% 和 4%;剩余的还有韩国、意大利、巴西等国,其单个攻击源占比均不足 7%,但累加后合计占比达到了将近 55% 左右。
恶意样本(姑且当成针对自托管服务的病毒吧)方面,《绿盟科技 2020 年物联网安全年报》:2020 年全年共捕获到来自全球总计 18 万余个物联网恶意样本,传播这些样本的 IP 地址共有 2.4 万余个,分布于全球 140 个国家和地区,排名前五的分别是印度、美国、俄罗斯、荷兰和巴西。其中印度 6 千余个传播 IP 地址,美国 4 千余个,其他三国均超过 1 千个,下图为全球物联网恶意样本传播 IP 地址分布图(来源:CNCERT 物联网威胁情报平台)。
如此多的攻击次数、如此多的攻击源、如此多的恶意样本,你还会认为我们的自托管服务不会被攻击吗?
成为一名所谓的黑客,技术门槛其实没有想象的那么高,你只要会一门 C 语言之类的编程语言,加上胆子够大2,用「开源」的代码,改一改,买几台服务器,把你的代码跑起来,你就能拥有自己的僵尸网络了,是不是很简单?
我当然不是鼓励大家去当黑客,莫伸手,伸手必被抓。我是想说,如此低的门槛导致网络攻击背后的攻击者也是「鱼龙混杂」,有尝试用各种方式隐藏自己,闷声发大财的;有嚣张至极,直接告诉你我是 XXX,甚至挑衅网络安全公司的;也有像我刚说的,单凭一手胆子大,上去就是干的「小白」;当然了,也长期潜伏、有预谋、有分工协作的各种间谍组织。不过这些黑客其实不是大家想象中的,一个戴棒球帽、戴面具的人,对着电脑屏幕的黑框框,啪啪啪输入一大堆命令,然后去一个一个攻击你家设备的。大部分针对消费电子产品的攻击,都源自僵尸网络,僵尸网络背后的控制者才是真正的黑客。
僵尸网络也有各式各样的架构,这里引用一下 Cloudflare 的图。僵尸网络通常由 CnC 服务器和僵尸主机组成,僵尸主机就是僵尸网络利用漏洞、弱口令等等各种方式,感染、控制的设备。CnC 服务器相当于控制中心,给僵尸主机下发各种命令。
我们通常把各种漏洞、用来感染僵尸主机的手段称之为武器库。僵尸网络背后的黑客不需要自己手动去黑框框敲代码,攻击别人,这样浪费精力并且效率也不高对吧。黑客只需要维护自己的武器库,给自己的武器库不断补充新的弹药即可。之后由 CnC 服务器给僵尸主机下发命令:「武器库更新了,铁子们,该干活了!」,紧接着数以万计的僵尸主机就自己开始感染新的僵尸主机了,这时候,黑客就只需要躺在椅子上,看着屏幕上不断更加的僵尸主机数量,来根儿小烟儿,喝点啤啤,盘算自己能「赚」多少钱了。
可以想象,一个僵尸网络,一开始通过一台固定的服务器做扫描,去感染僵尸主机,IPv4 全球 40 亿地址,速度相对来说是比较慢的,我们肯定不是天选之人,自己的设备那么巧就被感染了。但随着僵尸主机的数量增加,僵尸主机主动去感染其他设备,就像链式反应一样,僵尸网络的规模越大,他感染新僵尸主机的速度就越快。更何况,网络中不会只有一个僵尸网络,对吧!
网络上的攻击这么多,那研究人员是怎么发现、分析这些攻击的呢?既然是网络攻击,那一定得有网络吧?以家庭为例子,我把家里路由器的网络数据包(流量)全部抓出来分析,不就知道我家里的设备受到哪些攻击了?对,国家队就是这么干的,运营商会将骨干网的流量抓出来,供「有关部门」的工作人员研究分析,国家队是很厉害的,通过这种方式,能分析出各式各样网络安全公司都难以发现的攻击,默默保护国家安全。
那你说,我一个小公司或者个人对网络上的真实攻击感兴趣,我们也没办法跟国家队合作去要数据,咋办呢?我上文提到的「蜜罐」就该登场了。通俗的来讲,蜜罐有点像是「钓鱼执法」,也有点像书中说的「兵不厌诈」,它通过各种技术,假装自己是某个设备或者某个服务,暴露在网络上引诱攻击者来攻击,攻击者的攻击过程会被完整的记录下来。
蜜罐和攻击者就像是矛与盾,是一个充斥着博弈的过程,蜜罐的开发人员希望尽可能伪装自己,不让别人发现自己是蜜罐,并且希望引诱尽可能多的攻击者来攻击自己。攻击者呢,当然希望识别、避开各种蜜罐,以免自己的攻击过程被别人发现。本文的重点不在蜜罐,感兴趣的铁子,可以自行搜索 cowrie 蜜罐、HFish 蜜罐,部署着玩玩,当然了,请遵守法律法规,不要在自己家的公网 IP 上或者国内的服务器上部署。
前文提到黑客会控制僵尸网络,定期维护自己的武器库,来感染更多的僵尸主机。这一小节来讲讲黑客的武器库,看看黑客是怎么攻击我的设备的。
弱口令是一个老生常谈的话题,但是又难以杜绝,毕竟每天能记这么多网站、邮箱之类的密码就够麻烦了,更何况自托管服务,要给每个服务配置一个复杂的密码吗?因此弱口令也是黑客武器库中常用的一项,需要认证的服务自然就需要口令,就都存在弱口令的风险。比如典型的:SSH、RDP、Web 服务等。
引用伊利诺伊大学了一项针对美国国家超级计算应用中心的操作系统的 11 亿次 SSH 暴力破解的纵向研究。
弱口令是一个统称,虽然本小节只分享了针对 SSH 弱口令的相关内容,但其实凡是需要认证的地方都存在弱口令的问题。可是不管攻击情况怎么样,该用的服务咱总得用,不然你公网的服务器咋登录?不难发现安全和便捷是相背的,我们当然把各种密码的强度拉满,该用秘钥登录的用秘钥登录,也可以通过敲门等方式来减少被暴力破解的可能性,使用相应的安全工具尽可能加强防护,设置IP白名单限制来源,甚至使用 2FA 等等,但安全拉满就意味着你用起来很麻烦,具体到个人,还得看如何取舍便捷和安全。
是不是咱只要口令强度拉满或者我暴露出去的服务压根儿没口令(比如 nginx 起了一个纯静态网站),就不会被攻击啦?那当然不是了,漏洞——黑客的又一大杀器。
啥是漏洞呢?简单来说,漏洞就是程序猿们在开发时因为疏忽或者其他原因造成的缺陷,举个例子,我们家的大门有一个锁,但这把锁有点问题,用力拍几下它就开了,那用力拍它会开,就是这个锁的漏洞。你说这锁的质量不行啊,造锁师傅手艺不行,推及到软件漏洞上,是不是漏洞都是技术不行的程序猿写的,找一些技术好的程序猿,咱写代码的时候考虑周全,不就不会有漏洞了?
其实不然,软件是一个很复杂的工程,苹果、微软、谷歌最顶尖的程序猿们写的代码,也会有各式各样的漏洞,很多漏洞是由于违背了最初的设计目的,程序猿当然不想写漏洞出来。总之,软件漏洞难以避免。
个人观点:RCE 漏洞真的危害很大。那你说,漏洞有就有呗,有漏洞就不安全嘛?它能把我咋?你别说,他还真能把你咋,不同漏洞的危害程度不同,结果也不同,有的真的影响严重。有的漏洞可以进行未授权远程命令执行(高强度的口令没用,服务只要开着,黑客就能直接通过这个服务在主机上执行命令),有的漏洞可以造成拒绝服务(比如让正常运行的某个服务崩溃),有的漏洞只是泄露软件版本之类的信息,有的漏洞比如 SQL 注入会导致信息的泄露等等。普通人自然不用去了解什么 OWASP TOP 10,但是要知道,挖矿、勒索、DoS 等等很多攻击,都是以 RCE 漏洞作为入口的。
个人观点:漏洞和用操作系统没有关系,任何操作系统都有漏洞。那你说,好像 Windows 才有漏洞的,360 之类的杀毒软件老是提醒我系统有漏洞让我修复。我用 Android 系统,我用 iOS 系统,哥们技术牛用 Linux,漏洞和我就无关了。其实仔细看一下我们系统的更新记录,无论 NAS、Macbook、还是 Linux,都会有修复 CVE-XXXX-XXXX 的漏洞之类的描述。
漏洞的修复其实也很麻烦,以 Windows 为例,Windows 有自动更新会自己修复相关的漏洞,如果关闭了自动更新,就需要到微软的官方网站上,找到相应漏洞对应的补丁包,然后手动安装。所以某种程度上要感谢微软、苹果之类的厂商,持续不断的给自己的产品推送更新,修复相应的漏洞,咱掏钱了,他们也应该。也要感谢 360 之类的安全软件,对于普通人而言,你不需要知道 MSRC,你只需要知道,点一下「一键修复」,我的电脑就没有漏洞了。
最后,满足自己探索的欲望当然是好的,但不要自以为是,觉得我用上什么操作系统我就特别厉害,这种操作系统肯定没漏洞,不会被攻击,你要知道,小众的软件、小众的系统,小众是有原因的,既然那么好用,那么安全,为什么大家不用呢?有些时候,小众的系统,就是你要花费很多的精力去折腾,也许别人只需要「一键修复」。
个人观点:开源软件也是漏洞的重灾地,不比闭源的软件漏洞少。你说那我用开源软件总没事吧?很多大神对闭源产品嗤之以鼻,选择拥抱开源软件,他们说其中很重要的一个原因是「开源软件安全」。大神这么做有自己的道理,毕竟大神在使用开源软件时,甚至在每次更新前都可以做代码审计,这样确实安全。但我们普通人,也能保证对自己用的开源软件去做代码审计吗?很多所谓拥抱开源的用户,也就只是点开某某开源软件仓库的 Release 页面,下载编译好的版本,直接运行。喜欢折腾的,clone 源码编译一下,然后骗自己:「我都通过源码编译了,还不安全?」
这里想到我自己的例子,我的个人网站通过 hexo 搭建,使用了某个开源主题,某次排查页面访问速度慢的过程中发现,访问我的网站时浏览器在莫名其妙发出一些奇奇怪怪的 HTTP 请求,最后发现这个开源主题的源码插入了刷广告的代码,某些时候会自己弹广告出来。你会说,你这个属于个例,那不妨抖机灵问自己一下:「苹果、谷歌高薪聘请的程序猿,写的东西都有漏洞。是个人写个代码公开出去都能叫开源的东西,你敢相信开源的漏洞更少吗?」
不可否认,很多开源软件背靠优秀的组织实力强劲,很多作者技术能力扎实。但你不能保证,所有的开源作者,都有良好的职业道德,技术能力,你也不能保证,开源的代码不被黑客看到。你能想象,信息安全公司有专门的团队,7*24 小时监测开源仓库,保证自己的产品代码不外泄吗?虽然有保护知识产权的因素在,但某次内部培训,关于这个问题,相关同事是这样解释的:「保证公司的产品代码不外泄,很大的因素是防止代码泄露出去以后,被人拿来做代码审计,发现我们产品有漏洞,导致我们产品被攻击。」举个例子,我们被锁家外面了,找来开锁师傅给开锁,这时候我们反手掏出门锁的说明书、设计图纸、钥匙的图纸,肯定比师傅啥资料没有,对着门锁干研究开锁要快吧!开源和闭源就是这个道理,开源软件就像是你把说明书、设计图纸全部公布出去,那黑客找漏洞自然容易,而闭源软件就是:「说明书?设计图?不好意思,不开源。」黑客要想找漏洞,自然要困难一些。
观点:漏洞真的需要重视。引用漏洞情报公司 VulCheck 的分享:
其实几年前我们就发现这个问题了,我们在绿盟科技《2021 网络空间测绘年报》也提到了这个问题:2021 年,Exploit-DB 平台漏洞利用披露日期、 漏洞首次被利用日期以及间隔天数如下表所示。从 Exploit-DB 披露漏洞利用到被攻击者首次利用,最短仅需 1 天,最长为 221 天。值得注意的是,2021 年出现了较多首次捕获日期早于 Exploit-DB 相关漏洞利用收录日期的情况, 其中最长达 284 天,去年同期仅有个别漏洞利用首次捕获日期早于 Exploit-DB 的收录日期。 说明 Exploit-DB 的收录已经出现一定的迟滞,研究人员需要扩展信息来源以应对日益复杂的攻击态势,仅依赖单一来源在与攻击方对抗的过程中将处于落后。
除了弱口令和漏洞外,因错误配置导致暴露的服务,也是黑客的武器之一,并且除了我们自身可能被攻击以外,这些暴露的服务还可能成为黑客攻击别人的帮凶。暴露的服务指的是将内网的服务暴露在公网上,比如 docker daemon api 的 2375 端口本来是方便远程连接 docker 的,如果直接暴露在公网上,僵尸网络可以直接在你的宿主机上启动恶意的容器,直接用来挖矿或者利用容器逃逸漏洞在你的宿主机上再做其他事儿;Android ADB 的 5555 端口本来是用作调试的,有的远控软件也需要开启 ADB,但直接把 ADB 暴露在公网,你的设备也会很快成为僵尸主机;UPnP 服务本来是方便设备之间建立 P2P 连接的,但误将 UPnP 暴露在公网,其协议栈中的 SSDP 服务,早就成了黑客进行 DDoS 时最锋利的「刀」,有时候你觉得网络很卡,很有可能是你暴露出去的 UPnP 服务,被僵尸网络用作反射攻击了,僵尸网络很容易就能把你的你的上行带宽榨干。对没错,你不光自己的网很卡,你还成无意之中成了黑客攻击别人的帮凶。下图引用自腾讯云 2018 年上半年的 DDoS 攻击分析报告。
暴露的服务是一个屡禁不止的问题,你只要会搜,网络空间搜索引擎 zoomeye、shodan 上可以搜出来大量不需要密码就能访问的摄像头、NAS 设备,可以搜出来一大堆 S3 存储看到里面的图片、资料等等。我曾经的同事主笔了多年网络空间测绘的报告,不过关注这些问题的大多是从业者,普通人很难想到自己在公网暴露的服务可能导致严重的后果。
我也有过无知者无畏的阶段,上大学那会儿曾经的校园宽带会直接给我们公网 IP(没想到吧),虽然被限制只能在电脑上的某某客户端拨号登录,但我们早就能在 OpenWRT 上拨号给自己开 WiFi 了,某次我发现在 OpenWRT 上开 VPN,就从外网连进来直接访问校园网,当时别提多开心了(当时很快意识到有隐患就关了)。当时的我也没想过会有什么后果,OpenWRT 爆出来的漏洞还少吗?公安部每年组织的某某行动利用 VPN 漏洞攻破防守方的案例还少吗?敌特利用我这个口子进了校园网,窃取了重要资料我跑得脱吗?当时只是觉得自己能把这网络折腾的能用,挺有成就感,这也是很多玩 NAS 极客们的乐趣吧,折腾的快乐谁懂?但切记「淹死的都是会水的」,除非真的很有把握,否则能不往公网暴露服务就别去折腾。
上一小节分享了黑客的武器库,那黑客利用武器把门锁打开了,接下来会干啥呢?偷东西?入室抢劫?
我就是普通用户,搞个 NAS,自托管个服务,黑客攻击我没意义啊,攻击我图什么?
挖矿自然是大家能想到黑客最直接获利的方式之一了,这里黑客恶意挖矿是在用户不知情或未经允许的情况下,占用受害者的系统资源和网络资源进行挖矿,从而获取加密货币牟利。确实有一些僵尸网络家族是专门干挖矿这个事儿的,没错,僵尸网络也是术业有专攻。并且专业团队做事儿是很专业的,不是直接用你的机器楞挖,他们甚至会根据你机器的情况,限制挖矿的负载,不然你一看为啥 CPU 直接被拉满了,就发现了对吧。
僵尸网络挖矿的币种一般是门罗币,一方面因为门罗币的挖矿算法属于CPU友好型,比特币之类的数字货币现在想获得收益要么需要很强的显卡要么需要ASIC矿机,门罗币能在算力没那么强的设备上获得收益。另一方面门罗币本身就是一种高度安全,隐私且无法追踪的数字货币(至少是这么宣传的)。
恶意挖矿的方式,有通过僵尸网络传播,在僵尸主机上运行基于开源的挖矿代码的定制化挖矿程序(如 XMRig、CNRig、XMR-Stak);也有嵌入恶意 JS 脚本的挖矿网站,你会发现访问有些不可描述的网站,CPU 被拉的很高,就有可能是网站被黑或者本身带有挖矿的代码。
观点:放僵尸网络进门,他们的专业和自动化程度将会让你震惊。不同的僵尸网络,通过上一节的武器库(不局限在那些,还有别的)进入我们的设备后,行为是不太一样的,但都是高度自动化的,下面是我简化的两个挖矿僵尸网络进入设备后的流程对比,可以看到这一系列行为几乎滴水不漏(反正你让我自己写这么个程序,可能我的思路不会有它们这么缜密),从初始化挖矿的环境,到清除主机上的安全工具,到持久化挖矿服务,给自己留后门账户,替换系统命令让你连接到自己的主机也没办法排查问题(毕竟连 wget 之类的命令都被篡改完了),再到清除自己的痕迹,他们甚至还会清除竞争对手的挖矿程序,黑吃黑。
这也是为什么我会在漏洞相关的章节输出很多观点,因为防微杜渐,把黑客阻挡在门外面才是我们普通人应该做的,漏洞又是重灾地。只要给黑客留一个能进来的口子,剩下的都是轻车熟路,高度自动化,感染个挖矿咱就要重装内网所有的机器吗?
DDoS 这个词儿,即使不知道具体含义,但可能很多人还是听过。想象一下,你是一家非常受欢迎的咖啡店的老板。每天,你的咖啡店都挤满了顾客,大家都喜欢你家的咖啡和甜点。突然有一天,一大群人在同一时间涌进了你的咖啡店,但他们并不是来买咖啡的,只是站在柜台前不点单,也不离开。结果,真正的顾客进不来,店里的工作人员也被这些不买东西的人搞得忙不过来。最终店里的业务完全瘫痪,无法正常运作,这就是 DDoS。
DDoS(Distributed Denial of Service)攻击,即分布式拒绝服务攻击,是一种常见的网络攻击方式。DDoS 的方式也是多种多样,有直接控制僵尸主机向受害者服务器发送大量请求,伪装成正常用户,耗尽受害者服务器带宽的。注意,这里是僵尸主机消耗自己的带宽,使得受害者的服务器带宽被耗尽。
除了直接控制僵尸主机向目标主机发送请求的,也有所谓的反射型 DDoS,这也是物联网设备被用作 DDoS 最多的一种。僵尸主机会向网络中暴露的各种 UDP 服务(比如刚才提到的 UPnP、NTP、WS-Discovery、CoAP 等等)发送数据包,这样做一方面僵尸网络隐藏了自己,受害者不知道背后真正的攻击者。另一方面,反射攻击通常会放大带宽,以 SSDP 为例,僵尸网络(「加大剂量弄那台服务器」)总共有 1T 的带宽,暴露的各种 SSDP 服务就像是代理或者 CDN 一样,最终到达受害者服务器的带宽能达到 30T。
那看起来黑客 DDoS 了别人,他没获得收益啊,其实啊,黑产市场 DDoS 早就变成明码标价了,甚至支持「试用」,比如你是一家网吧老板,你对面网吧生意比你好,索性你心生邪念,跟黑客买 DDoS,去攻击对面网吧,对面网吧动不动断网,就没生意了呀。这里例子我记得是小时候中央电视台上看到的,网吧老板很厉害,好像是自己去 DDoS 对面网吧的,不过网吧老板最后被抓了,而黑客 DDoS 就是这么赚钱的。
国内在 DDoS 方面研究也很多,2021 年 RSA 大会,绿盟科技脱颖而出,在物联网安全论坛发表题为《物联网中基于 UDP 的 DDoS 新型反射攻击研究》(Research on New Vectors of UDP-Based DDoS Amplification Attacks of IoT,[SAT-M19])的主题演讲,这是中国安全厂商首次登上 RSAC 大会的主题演讲舞台。回想起来那时候也是自己职业生涯的高光时刻,自己为这个课题也贡献了力量(团队也是因为我的发现才切入了物联网 DDoS 的研究),也算是不忘初心给老东家做一波宣传吧,当然也感谢腾讯云鼎实验室这样的团队,刚入行启蒙的时候,他们的研究报告对我帮助很大。
说起勒索病毒,最有名的莫过于 WannaCry 了,它利用「永恒之蓝」漏洞(Windows)的一个漏洞传播,利用 AES-128 和 RSA 算法恶意加密用户文件以勒索比特币。之后就能在电脑上看到久违让我们打钱的和倒计时的框框了。
我对于勒索方面没有深入的研究,不过我觉得勒索算是最流氓的攻击方式之一了。因为其余攻击手段比如挖矿、DDoS,不会影响我们数据,但勒索是真的会让我们重要文件丢失。最关键的是,不是你乖乖打钱,就能够解密的,有的是你打了钱,人家不发解密的秘钥,有的干脆就是骗钱的假勒索。
那有人说哥们儿我早用上 Linux 了,Linux 没有永恒之蓝漏洞吧?确实,永恒之蓝是 Windows 的,但 Linux 有其他漏洞呀朋友。Cyclop s家族已经拥有针对包括 Windows、Linux 和 macOS 系统在内三种主流操作系统的勒索软件开发能力了。
还是那句话防微杜渐,把黑客阻挡在门外面才是我们普通人应该做的。我们的 NAS,时间久了似乎就不会引起我们的注意,它就在那运行着,你甚至都不会翻出它上面的照片回忆回忆,但有一天你数据真丢了,才逐渐意识到问题的严重。我的 NAS 曾经因为所在片区的供电故障,几经突然停电之后数据差点丢了,数据刚丢的几天觉得没啥,一些「学习资料」,一些曾经的照片,丢了就丢了,后来逐渐发现,坏了,丢的东西有点多,TimeMachine 备份没了,有些秘钥没了。后来联系了威联通的售后,小哥哥态度超好但他们最终没有恢复数据,而我根据他们远程操作的流程,大致猜测了 QTS 系统文件系统的结构,凭借丢失文件名称的一些记忆,最终找到了文件,庆幸只是 QTS Web 页面上某个 Data Vol 的家目录无法启用。从那以后,我直接下单了犹豫了好久的 UPS,然后长期续费了百度网盘会员定期备份。
每个人的数据都值得被重视——在你的数据真丢了以后,你会发现我说的是对的。
大家觉得,国家安全离我们远吗?或者换个说法,间谍离我们远吗?网络战离我们普通人远吗?其实就像上文提到的 UPnP 服务,可能成为危害国家安全的一环。
炸一看,好像挺危言耸听,我就把一个服务暴露在公网了,我就能危害国家安全了?没错,真的可以。UPnP 服务有一个功能,向 UPnP 服务构造并发送相应 SOAP 报文,能够直接在路由器上增加端口转发规则,这个功能在内网没问题,某些需要 P2P 连接的场景比如微信、迅雷等等都会用到,但若将 UPnP 服务暴露在公网上,恰好这个 UPnP 服务是路由器的,那后果就严重了。黑客能直接在公网上,更改你路由器的端口转发配置,这样的后果是:
对于内网渗透而言,对端口转发的操作则可将内网设备的服务暴露到互联网中,以便黑客可以访问到内网服务,如内部文件共享服务 SMB 等。若黑客确定了某个端口的服务存在命令执行类漏洞,则可以利用对路由器端口转发的操作,将内网存在漏洞的服务暴露出来,进而感染内部主机,使其成为僵尸主机,或进行持续渗透。我们观察到有攻击者尝试打开 139、445 这些永恒之蓝漏洞对应端口的现象, 故推测 WannaCry 这类的病毒具备在全球范围内大规模传播并穿透到内部局域网的能力。
对于端口转发而言,路由器厂商在实现利用 UPnP 进行的端口转发相关功能时,通常不会对转发的地址进行验证,黑客就可以利用路由器上 UPnP 对端口转发的操作,将互联网中某个 IP 的端口映射到互联网中另一个 IP 的某个端口上。黑客可以借助这种方式,可以利用多个路由器的 UPnP 服务,组建一条很难追溯源头的代理链,如下图所示。
我当时发现这个问题的时候激动了好久,哥们儿发现大新闻了。后来发现赛门铁克快了一步,在 2018 年 5 月发表文章称,一个被称为「Inception Framework」的间谍组织,利用路由器暴露的 UPnP 服务,将流量从一个端口转发到互联网上的另一台主机上,通过构成代理链,以隐藏自己的真实地址。
你看,间谍在用 UPnP,国家安全是不是掌握在我们每个人手中呢?所以啊,一个看起来人畜无害被暴露的服务,真的有可能成为敌特的帮凶,听哥们儿一句劝,没事儿别老琢磨,咋把服务往公网上暴露。
那我在这故作惊人之语半天了,我们玩自托管服务的,公网没办法访问我们的自托管服务,还玩什么?哎,说道点子上了,公网访问一定要公网 IP 吗?
我对于赛博菩萨 Cloudflare 的好感是与日俱增的。
Cloudflare 是美国的一家网络安全公司(姑且当它是吧,很难给它定位),光从它拥有1.1.1.1
的 IP 地址就能看出来这个公司手上的资源不简单。Cloudflare 提供一项名为Cloudflare Zero Trust(后面简称 SASE)的服务,实际上呢,是融合了 SD-WAN 以及零信任技术的集合产品,SD-WAN 负责解决接入、组网的问题,零信任负责安全的问题——要再吹一波 Cloudflare,SD-WAN 和零信任这在别家都是单独的产品,要商用卖高价的,Cloudflare 可是免费给大家用的。
虽然 Cloudflare 的 SASE 理念和体验真的很好,但由于不可抗力的原因,Cloudflare 零信任 PC 上的客户端因为网络原因(至少我这里是这样)暂时无法使用,不过我们还是可以把它当做是内网穿透工具来用,如下图所示。
我们内网的服务器通过 Cloudflare 的工具 Cloudflared 与 Cloudflare 网络建立双向连接,当需要公网访问时,用户的浏览器访问托管在 Cloudflare 的网址,请求首先到达 Cloudflare 的边缘服务器,之后经由 Cloudflare 转发,通过 Cloudflared 访问内网的服务。当然了,下列服务都可以:
Web 服务的公网访问是最无感的,浏览器直接访问即可。而其他的服务,则需要在访问端也安装 Cloudflared,稍微麻烦一些。但如 SSH 之类的服务,相比于直接暴露在公网,这样是不是更安全一些呢?实际上我们还可以只在内网的一台服务器上安装 Cloudflared,所有希望公网访问的服务都通过这台服务器转发,然后在这台服务器上部署 IDS 之类的产品,尽可能保证能及时发现内网到公网的流量中有没有异常。但这都不是本文讨论的重点,大家感兴趣吗?感兴趣我后面再写一篇文章。
蒲公英是贝锐公司的 SD-WAN 产品,远程工具向日葵也是他们家的。我对贝锐真是又爱又恨,爱吧,是它的一些产品真的还可以,恨吧,是收费越来越贵了。那啥是 SD-WAN,简单来说,就是不需要你有公网的服务器,就可以实现异地组一个大的局域网。比如家里和公司,两个内网按照传统的方式,我们得有一台公网的服务器做转发或者有公网 IP 通过 VPN 的方式才能让两地的内网互通。而贝锐的蒲公英可以通过硬件接入的方式,比如公司和家里各丢一台蒲公英路由器(旁路接入、串联接入都可以),也可以直接通过软件的方式,比如公司电脑运行蒲公英客户端,家里电脑也运行蒲公英客户端,家里电脑就能远程RDP公司电脑了。
当然了,我觉得蒲公英最好的地方是,它能根据网络情况,自动选择通过贝锐的服务器中转还是直接立 P2P 的连接,并且如果是 P2P 连接不限速,这你受得了吗?
我家里本来是移动的宽带,但是有次凌晨在家加班,没有征兆直接断网给我气坏了,索性换成了联通的宽带。但移动宽带和我公司是能够 P2P 直连的,联通只能通过贝锐的服务器做中转了。可以看到 P2P的时候,公司的 PC 192.158.111.22
是能够 ping 通我家里10.24.1.1
路由器的,延迟 6-7ms 左右。
下载速度呢,差不多能把我上传的带宽拉满,体验还不错,最关键的是,目前三个节点免费。你可以完全不花钱,公司电脑,家里电脑上装蒲公英客户端,实现互联。也可以像我一样,公司和家里各丢一个蒲公英路由器,然后在路由器上设好静态转发的规则,就可以公司、家里无感互联了。(希望贝锐的同学看到了给我打钱,真的不是广告)
相比于直接在公网上暴露一个服务,或者自己在公网的服务器上中转,SD-WAN 真的是一种相对安全、方便的方案,感兴趣的小伙伴可以试试。
行文至此,不求每一个人都能重视网络安全,也不是用了安全产品就高枕无忧了,但能劝一个劝一个,装了总比不装安全把。自托管场景可以使用很多开源、免费的安全产品,但这里只介绍几个简单易用的,像是字节跳动的 Elkeid,百度旗下的 OpenRASP,开源 XDR wazuh 等等,由于使用相对门槛高一些,就不做过多介绍了。
什么是 WAF 呢?WAF(Web Application Firewall,Web 应用防火墙)是一种专门保护 Web 应用程序安全的防护工具。简单来说,如果要把我们 Web 服务暴露到公网上去,不妨别裸奔,套个 WAF 试试,能防下来很多攻击。
网络世界,Web 服务很多,所以 WAF 也是很多公司收入的大头,因此之前 WAF 都是面向企业的,个人很难使用 WAF。当然有开源的 WAF,比如 ModSecurity,你很难想象,单是在 nginx 上把 ModSecurity 跑起来,就花了我几个小时,各种编译、改配置文件,麻烦!
这个时候就该隆重介绍一下长亭科技的雷池 WAF 了,长亭科技成立于 2014 年,创始团队来自知名 CTF 战队清华「蓝莲花」战队,专注为企业级用户提供专业的网络信息安全解决方案。我本人对他们「未知攻焉知防」的理念深表认同。
雷池 WAF 是长亭科技开源的一款 WAF 产品,传统的 WAF 需要通过规则实现防护(有新的漏洞出来,就要有新的规则),而雷池 WAF 的智能语义分析算法能够一定程度上防护没有规则的漏洞。雷池 WAF 目前社区版免费,安装也有完善的文档,可以直接安装,可以 docker 安装。使用只需要在 Web 页面上通过反向代理的方式接入就行了。
你看,即使用了 Cloudflare Zero Trust,我内网的服务还是被扫了。
NIDS(Network Intrusion Detection System,网络入侵检测系统)是一种用于监控网络流量并检测潜在的恶意活动或违规行为的安全工具。WAF 主要用户防护 Web 应用,针对 SSH 暴力破解、永恒之蓝等等攻击就没办法防护了,这时候就该 NIDS 发挥作用了(别抬杠说 HIDS 也能防护)。
这里想介绍的 NIDS 是 suricata,suricata 是一款开源、高性能的 NIDS,并且拥有不断更新的开源规则。因为 Windows 上的杀毒软件本身就很强了,所以 suricata 我主要是用在 Linux 服务器上。对于自托管环境而言,我们可以给每台自托管的 Linux 主机安装 suricata,可以在路由器/交换机上镜像流量给一台装有 suricata 的主机。
suricata 使用起来不像雷池 WAF 那么简单,需要敲命令行,所以喜欢折腾的铁子们,照着官方文档上手吧,官方文档算是相当详细的了。
前面两种都是被动防御,那你知道自己的自托管服务有没有漏洞吗?对,你需要漏扫。漏扫顾名思义就是扫描漏洞的嘛!就是通过漏扫工具主动的去扫我们的自托管服务,如果有漏洞,就要及时更新软件或者打补丁。漏扫我推荐大家了解 nuclei,nuclei 是一款开源的漏扫工具,更新频率很高,社区支持也很不错(意味着官方的免费模版比较多,能扫出来的漏洞相对比较全),nuclei 的使用很简单,指定好你要扫的服务以及模版,开扫就行。
使用漏扫重点不在于漏扫工具的使用,重点在于我们需要有一种主动关注网络安全,防患于未然的意识。即在自托管前或定期针对运行的自托管服务进行资产的规划和排查,我们到底自托管了多少服务?这些服务到底有多少我们还在用?那些服务暴露到公网了?这些服务有没有漏洞?只有这样,自己做到心中有数,才能将损失降到最低,自己的网络安全都不重视,指望黑客来帮我们重视嘛?
很庆幸,自己的工作经历,让我能了解到网络上的黑客是怎么攻击,安全产品又是怎么防的,所以有了这篇文章。但与之而来的,是深深的无力感。
网络安全的从业者大都是闷骚的技术男,大家开玩笑整活儿可以,但动笔写文档大都觉得很痛苦,这也导致了网络安全行业很少被大众了解,普通人安全意识薄弱。不要说折腾自托管的爱好者们,就算是从业者,五年前自豪地入行,以为挂上安全研究员的 title 我就是专家、我就了解网络安全了,结果五年后的今天,也不敢说自己很了解网络安全,有太多我不知道的东西了。身边的同事们虽然有自己的专精,但很少有人能对网络安全有全面的认识,很多同事甚至不了解自己做的产品是干什么的。
最后,送给赛博世界玩自托管前的你:
> 关注 少数派小红书,感受精彩数字生活 🍃
> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺 🛒