我们…… 不哭,起来,再撸
关注本博客的朋友们可能会发现,三个多星期之前我根据歪果仁的论文写了一篇《使用 EternalBlue, doublepulsar, metasploit 渗透 Windows》的文章,那时候 ShadowBroker 刚刚公布 NSA 黑客工具一个星期,MS17-010 都公布接近一个月了。没想到一个月之后,竟然有人根据这漏洞搞出来蠕虫大规模入侵内网(那个…… 我拿着 08 年的 netapi 也干了不少事),同时又看到很多哭笑不得的言论,什么别以为 Mac 就安全了什么 Linux 的。童鞋们啊,多读书,尽可能的进行批判性思维和独立思考真的很重要啊。
由于本文主要会集中讨论一下 Windows 和 Linux 的问题,这就好像问一个程序员,你是用 vim 还是 Emacs,jihad 啊!所以,我会尽量避免这些问题,争取避免片面思维。
咱本篇主要讨论的是服务器和桌面的 Windows 与 Linux,当然在开始之前,咱们有必要普及几个技术术语,毕竟,咱的写作目标是科普嘛!
啥是比特币
不同于一般货币拥有载体(实物)、中央发行机构,比特币是一种没有载体(实物)的、没有发行机构的、去中心化电子货币。由于其采用密码技术来控制货币的生产和转移,而没有中央的发行机构,无法任意增发,交易由整个网络进行验证,因此比特币也被认为是一种电子加密货币 ,由于其有特殊的隐秘性,加上不必经过第三方金融机构,因此除了重视隐私的用户外,也经常被拿来当作非法交易的媒介,比如说在暗网上干点坏事啦,都是用比特币的。
使用比特币最大的特点就是很难溯源,在技术层面上你不知道这个比特币账户背后的人究竟是谁,因此也特别适合那些 “黑客们”。
比特币有多值钱呢?现在 1 比特币已经大概等值于 1700USD 了,挺值钱的,要是我在初中的时候知道这东西搞几个就好了……
啥是勒索病毒
就是吧,有一种恶意的计算机程序,它控制你的电脑之后,会用某种加密算法加密你的部分甚至是全部文件,之后向你索要赎金来解密;类似的事情不仅发生在桌面、服务器上,有些数据库被脱下来之后也会这样索要比特币。
由于密码学的一些原因,咱想不交钱解密可能比较难(咱不会逆向,不过咱可以想万一这个病毒制作者的加密密钥是硬编码在软件中的呢,应该没这么智障吧),所以咱要支付赎金吗?当然不要了,那不是助纣为虐么!谁敢保证 “黑客” 一定会有良心!话说回来,那勒索工具需要 Tor?那完了哈哈哈还得挂代理啊真是悲剧;中文版据说是 Google Translate 的?Google Translate 这么牛逼了?
需要 tor 才能解密,来源陈少举 Twitter
在一两年前我还玩新浪微博的时候,看到字幕组里一个人的朋友的电脑被这样的病毒搞了,应该使用了巨慢无比的 RSA,哎,看来这事还是层出不穷呢。
EternalBlue 又是个啥
就是嘛,美国有一个巨牛逼巨可恶的机构叫做 NSA 国家安全局,对就是爆光棱镜计划的主角斯诺登曾经就职的那个地方;说 NSA 巨牛逼是因为 NSA 技术实力其实蛮强的,说 NSA 巨可恶是因为他们净想着以各种名义来做各种侵犯人权的事情。话说有另一个黑客组织叫影子经纪人(The Shadow Brokers ),他们竟然从 NSA 手里吧 Equation Group 的黑客工具偷出来了。那堆黑客工具中有一系列叫做 Eternal 啥的,包括EternalBlue,EternalRomance,EternalRomance
啥的,听这名咱就能直到 NSA 那群人是多么的骄傲啊竟然把这玩意叫 Eternal 永恒的?
在这对工具中啊最好用的基本上就是 EternalBlue 了,EternalBlue 可以通过开放 445 端口(提供 SMB 服务,SMB 是啥?简单理解你在网上邻居里看到同局域网的电脑那就算 SMB 好吧)来远程执行代码,其中可以被入侵的目标包括 XP、Server 2008/7,咦竟然没有 Server 2003?没事咱有 ms08-067 的 netapi 啊……
总结就是一句话,EternalBlue 非常强大,强大到只要知道一个 IP 地址就能够植入后门,颇有当年 ms08-067 的风范啊……
啥是零日漏洞(0day)、未公开漏洞
咱字幕组做字幕啊,分成好几种,一种叫 0day,就是当天必须翻译完压制完的;还有 1day,就是第二天翻译完。类比下,假如某个系统的某个漏洞的细节被公开,他们可以在 24 小时之内制作出相应的攻击代码。而这个时候,软件厂商多半还没来得及发布补丁。那么这些攻击者就可以利用这个时间差,进行入侵活动。所以,这种漏洞称为 “零日漏洞”(Zero-Day, 0-Day)。
类似 0day 有一种说法叫做 “未公开漏洞”,这俩概念比较接近,“零日漏洞” 可利用的时间段会短一些,比较负责任的软件厂商通常会比较快发布补丁(当然也有例外,比如那个 Oracle 啊);未公开漏洞就是没公开给厂商、但是却有漏洞利用程序的,咱可以说 NSA 这堆在没被公开之前就属于未公开漏洞。
咱能发现,未公开漏洞要危险的多。NSA 在 2011 年就有了这堆工具 (根据文件的时间戳),这都 17 年了,想想就可怕。
好了咱说了一大堆啥是,大概让大家对背景有了些了解。
勒索病毒是咋扩散的这么快的啊
鉴于巨硬的 Windows 7 是如此成功、优秀的一款操作系统,大家应该都使用过吧?但是很多人应该发现只要自己那么一关机啊,它就给你更新更新更新,有的时候还更新失败,巨烦无比!在 Windows 10 上这个问题貌似得到了一些改善。所以呐有很多人,为了防止被这个更新折磨致死,就把它关掉了(坦言我也曾经给自己的自动更新关掉),于是乎巨硬推送的安全更新就不会自动安装了,恰巧 SMB 默认是开启的、EternalBlue 攻击执行远程代码成功率奇高,在加上很多政府组织、公司、学校内网的 Windows 配置都是一样的,网管还很懒,这天时地利人和加一起就导致了像传染病一样的传播。
被攻击的学校机房,来源猫箱内の巴托拉 - BattlerHenry
提到政府组织、公司、学校的安全策略,其实有一些会对外来攻击防范的比较好,但是对于内网发起的攻击却不那么在乎;有些则是内外都不在乎,比如说我学校,网管懒死了!
Linux 对于此次病毒攻击的防范
据国外安全研究人员报道,此病毒的变种版本 2.0 可以在 wine 下感染文件,但是还请各位 Linux 用户放心…… 原因待我一一道来。
图片来源:Hacker Fantasic 称
原因之一:wine/Linux 默认不带有 smb 服务
原因之二:就算带,EternalBlue 也只是针对有漏洞的 smb 实现发起攻击(7/2008/XP)
以上两个原因就已经能够保证 Linux 就像打了疫苗一样对病毒的传播是免疫的,但是哪怕某个用户脑残在 Linux 下收到了病毒的 exe、并且还装有 wine、并且还双击了……
原因之三:wine 的一些对于 Windows API、dll 不完善的封装可能会导致某些版本的病毒运行失败
找不到入口点,无法加载某个 dll,唉,当个病毒也不容易啊。
原因之四:退一步讲,wine 只对~
有读写权限,万一走了狗屎运也只是自己的~
被加密
默认 wine 会把~/.wine/driver_c
映射为 C 盘,把/
映射为 Z 盘,然而普通用户对/
没有 w 权限,用 root 权限运行 wine 的当我啥也没说。
所以总结这四个原因就是,Linux 对此病毒的传染是免疫的、哪怕此病毒破坏力再强再跨平台,只要你不运行,那就没事…… 这就好似某人发明了一款蟑螂药,管它美洲蟑螂还是火星机械蟑螂吃了肯定会死,但是你得掰开蟑螂嘴喂它才行……???
请注意,5 月 26 日,Samba 近日发布了 4.6.4 版本,该版本修复了一个严重的远程代码执行漏洞(漏洞编号:CVE-2017-7494),Samba 3.5.0 和包括 4.6.4/4.5.10/4.4.14 中间的版本均在受影响之列
先谈谈预防措施
值得庆幸的是,我所在的学校并没有被此次蠕虫波及(但是我学校的网络安全防护差到不敢想想),昨天也发现身边的一些朋友在分享这条消息。然而我敢打赌,大家都是看完了就看完了就像看了笑话一样以为一切和自己毫无关系,很少有人会立刻开电脑进行安全加固吧?所以万万不可掉以轻心,EternalBlue 成功率高到可以手动十分钟一台……
所以至少要未雨绸缪嘛,羊还没丢啊!我们需要做的事情的安装 ms17-010 安全更新(巨硬都给 XP 和 2003 这个更新了),关闭 SMB 服务,养成备份文件的好习惯。
当然了那些使用 Mac(并且安装使用的是 OS X)、Linux 发行版的用户就别管了,与你们无关。
说句题外话,昨天我从外面回来,室友忧心忡忡的问我:这个没事吧我都不敢连锐捷了。我说你别急,等我扫下你的电脑看看开没开 445 哈……
已经中招了咋办
那些已经中招的小伙伴,唉,一定不要交赎金啊,还得带 tor,目前根据一些安全人员的逆向研究,也没啥太管用的恢复文件的办法,也不知道这玩意变异了几个版本,目前我搜集到的稍微靠谱点的信息有:
1. 使用数据恢复工具恢复文件(因为这家伙是在内存中加密再删除源文件的),至于用其他人的比特币记录忽悠始作俑者,还是算了吧……
2.XP 用户可以试试一个安全人员利用 XP 中 CryptoAPI 实现缺陷来取得加密密钥,戳我
好哒,咱说了这么多题外话,终于到转入正题了,为啥无论是在桌面上还是服务器上(甚至是移动设备上),Linux 要比 Windows 在安全性上做的更好啊。当然了,我这样是在引战,Linux 也有过 dirty cow,OpenSSL 也有过 heartbleed,但是就如小蜗牛童鞋所言:
若无力驾驭,自由便是负担
为了避免打口水战,咱要提的第一个先决条件就是:适用性
适用性
众所周知,当今世界是一个开放的、经济全球化的世界,想要闭关锁国那是不行滴(包包:啥?)!软件也如此,很多软件现在都开始是跨平台并且设计为 i18n,当然也有一些例外,比如说大部分游戏都只有 Windows 版本的,这咱不能 wine 一个吧(其实也不是不行……wine2.0 能跑使命召唤 4 你敢信?)
咱所说的适用性就是,有些服务器必须要使用 Windows,最常见的就是那些游戏服务器;有些必须要使用 Linux,有些则是二者均可。咱要说 Linux 和 Windows 都有各自的适用性,只不过在服务器领域,Linux 是占有大部分优势的;在桌面领域,Linux 的优势似乎没那么大……
咱主要说的就是最后这二者均可的。
安全性
首先咱要知道,Linux 就是个内核,只有内核那是不成的,所以还需要套上一大堆东西才能成为今天咱用的发行版。根据包管理器的不同,Linux 发行版可以大体分成 deb 系和 rpm 系,还有其他的比如 Arch、Gentoo 啥的。
大家可以戳去维基百科来看看所有发行版的时间线,咱能发现这简直太多太多了好吧。
Linux 发行版数量这么多,有啥好处呢?
其一对于咱用户来说,选择的余地太多啦!苦了那些选择纠结症的童鞋
其二,发行版数量多也直接减少了攻击面,不同的发行版,其体系可能会差非常多。预装的软件不同,内核版本也不同,甚至是内核的编译参数、运行参数都不同,你这让攻击者情何以堪啊——目标都无法确定攻击个毛啊。
相反咱看看 Windows,总共也就那么几个版本,像 Windows 7 有 Professional、Home、Ultimate,反正双手双脚大概是差不多输得过来了,尽管数的过来,但实际上这些版本是没啥差别的。为啥呢?因为 Windows 的核心组件都是基本不变的,比如这几个版本都有 IE,那个巨慢无比漏洞百出的 IE。
被嘲讽的 IE,来源见水印
Linux 发行版的可定制性
咱说,Linux 非常灵活、简洁,咱可以重新编译内核来去掉很多用不到的模块,咱可以删掉很多用不到的软件包,这样就直接减小了攻击面。活这么大,我还没听说过谁能够自己编译 Windows 的内核呢,Mac OS 的内核虽说也是开源的,但是想要自己编译,似乎还是有些难度的。
Linux 发行版对于硬件的丰富支持
《计算机原理》没挂科的童鞋们大概知道 CPU 有很多架构吧,什么 x86 啊,x86_64 啊,ARM 啊,MIPS 啊,PowerPC 啊…… 反正是超多 CPU 架构的,Windows 可没有这么多。
支持这么多、对于安全性来说,有啥好处呢?不知道大家是否听过这样的新闻:XX 处理器爆出 XXX 漏洞,硬件漏洞也是可能的。支持的硬件更多可以有效的降低 “被盯上” 的可能性,这么多谁知道你用的是啥处理器嘛。
Linux 用户更小众
我相信所有人都会一致认为,在桌面上,三大系统使用率是 Windows>Mac OS>>Linux,所以这也避免了 “树大招风” 的效应。毕竟,如果想要开发对应的漏洞利用程序,就要付出更多的资源来针对使用率最广泛的系统,也就是 Windows 咯。
不过一定要注意,桌面 Linux 之所以要安全,用户数量少只是其中的原因之一,Linux 的安全是从本质上优越于 Windows 的。全球 Linux(包括服务器和桌面)用户可不少,Android 的用户量早就超过了 Windows,可是 Android 和 Linux 可并没有像 Windows 那样病毒泛滥成灾,所以千万不要犯本末倒置的逻辑谬误。
Linux 有完善的包管理器机制
大家在用 Windows 的时候,是咋么安装软件的,肯定是这么几个步骤吧:打开百度啥,搜索 XX 软件,从广告中分辨出真正的官方网站,到某个网站,从广告中分辨出真实的下载地址,下载,安装,使用。
上述步骤中可能存在有非常多的问题,比如说:万一你去的网站不是 https 的,下载链接被劫持了呢?万一那个网站本身就给加了后门啥的呢?(参见 XGhost Code 事件)
还有一点,Windows 下有些软件的自动更新也存在一些问题,有些的自动更新渠道不是加密的、并且不会对下载之后的文件进行校验,大名鼎鼎的黑暗幽灵是怎么来的,嘿嘿。
烦死人了嘛!但是在 Linux 下,咱不用这么做,因为有软件包管理器啊,软件包管理器有啥好处呢,除了方便快捷之外?
安全的签名机制:咱不用担心源里面的软件是被篡改的、下载过程中被篡改了,它会直接拒绝安装。因为完善的包管理器都会有一些机制来校验,有些是使用散列函数、有些是数字签名,有些是这二者结合。
升级更新机制:当软件包的维护者开发完新的版本并测试之后(可能是功能更新,可能是 bug fix,也可能是安全更新),他可以把新的版本推送到源,包管理器也会有对应的自动更新机制(尤其是服务器版)。咱晓得,使系统随时保持最新状态可以集大程度降低被攻击的风险
Linux 的文件权限遏制了病毒的扩散
话说土豆我当初在学习 Linux 的时候,最头疼的问题就是,rwx 权限有毛用啊!更别提还有suid、sgid、sticky bit
了,简直头疼。那时候我还年轻呐!
呐,咱知道,在 Windows 下,一个程序能不能运行,是看扩展名滴!只要扩展名是 exe 那么就是能够运行的(这里的能够运行是指的操作系统能够给它可执行的能力,而不是能否工作,咱把一个 txt 改成 exe 当然是没办法运行出来 hello world 的),不知道大家中没中过 U 盘病毒啊嘻嘻嘻。
有些人可能会说了,Windows 也有类似的文件权限体系啊,比如说 NTFS 的 ACL 啥的…… 那个,是这么个理,只不过俺至今不会配置那玩意(太费事了太繁琐了),而且 U 盘基本上都格式化为 FAT 之类的文件系统,FAT 天生不支持文件权限,没戏!
但是在 Linux 下,一个程序能不能运行是靠的 x 权限的,扩展名并不是判定因素。再由于默认的umask
是 022,本来一个文件就是没有 x 权限的了,唉~
没有 x 权限,你是运行不了滴!咦,暴露了我电脑型号。
还有一些其他的有助于 Linux 安全的因素,比如说开源有助于安全审查,社区维护可以避免商业公司侵犯用户隐私,这里就不提了。
不过,咱得说,Linux 也曾经爆出过很多非常严重的漏洞,包括其他的一些非常关键的开源项目(比如说 OpenSSL)也爆出过漏洞。但是咱得承认,Windows 漏洞的修复速度、漏洞潜伏期往往都比较慢的……
价格
没错哒,那么多发行版基本上咱都可以拿来免费用,不用给他们一毛钱!呐,有人也许会问,那些靠着发行版活着的商业公司是怎么赚钱的啊?软件免费,服务收钱呗~
因为开源的性质,有很多发行版都适合做服务器,而 Windows 服务器是要给微软交钱的,所以你能看到国外有些 vps, Windows 服务器比 Linux 贵个几块钱(不过腾讯云是个例外哈哈哈赚它 30G 硬盘)
稳定性、操作性、高性能
Linux 比较稳定,跑几个月甚至几年都不会挂也不需要重启,而且 KISS:简洁,自定义程度高,更节约资源更高效,信不信我rm /bin/rm
给你看?
服务器版的 Linux 都没有桌面环境,更节约内存,Windows 的桌面环境怎么也得要二三百兆内存吧,而且 Linux 有很强大的 shell,shell 就能搞定一切,而管理 Windows 服务器则需要远程桌面,你再瞅瞅 Windows 的那个 cmd.. 虽说微软新搞的 powershell 很强大,但是学习成本有点高。
文件系统的性能上 ext4, btrfs, xfs 都比 Windows 的 NTFS 好太多啦
Linux 对硬件要求很低,而且也支持更多的 CPU 架构不用多大内存多大硬盘,有的在 128M,64M 内存都跑的起来 (不信你搜搜 puppy Linux, tiny core Linux 人家还带桌面环境),咱甚至可以通过重新编译内核等途径,精简不需要的模块来达到更好的效果,整体而言 Linux 的耦合度比较低,很多没必要的东西都能删掉,也照样跑的起来。而 Windows 是不可能做到这一点的,Windows 的组件几乎都是没有选择的只能全装 (比如说漏洞百出的 IE,耦合度高的 Windows 自己都离不开),再怎么精简也得是几百兆出头吧。
对于硬件要求低,在服务器上这一点优势更明显,咱家用 PC 可能都是 GB 级别的内存,但是服务器上多 1G 的内存就要多不少钱呢!干嘛要把本来就很珍贵的内存用来跑 GUI 呢,是吧!就算都跑 GUI,咱还有 LXDE、Xface 这类轻量级的桌面环境可以选择嘛,照样虐杀瘟斗士。
维护性
升级维护方面 Linux 发行版都有包管理器,所以各种包很容易升级到最新版本。而且很多发行版都弱化版本号而采用滚动发行的概念 (那些不滚动的很多也都有用某个命令就可以升级到下一个 LTS),比如 Arch、Kali,你再想想要是把 server 2008 升级成 12,不得累死人
还有一点就是,Windows 更改了配置啥的,很多情况下都得重启才行,但是 Linux 基本不用,有很多东西直接是修改内核参数的。甚至一些商业公司 (redhat 啊 canonical) 提供热补丁,不重启就能 patch 内核。
标准和一些乱七八糟的
呐,POSIX 啊,咱比如说 Linux 都是用 UTF-8 的,全球通用,但是 Windows 就不是了,简体中文版是 gbk, 繁体中文是 big5 等等跟着不同语言版本的 locale 来的。UTF-8 还给加个 BOM,怪胎啊。
当然了……
最近这几年,Windows 也有了很大的改进,比如支持 WSL,微软也开始拥抱开源,甚至收购了 GitHub。一些娱乐性需求,Windows 还是很吃香的:-) 是不是
随想与总结
介绍了这么多 Linux 的优点,其实避而不谈了一些缺点,比如说字体可能会有些问题(随着文泉驿、思源宋体等开源字体的发展,这个问题已经越来越少见了)、入门门槛比较高、某些桌面环境操作习惯不同、某些桌面环境兼容性稳定性有问题、娱乐游戏比较少,总之很多吧。但是呢,
对待这次蠕虫事件,咱得说遇见了好些逻辑谬误:本末倒置的以用户量多少作为衡量安全性的标准、阴谋论认为这是微软的阴谋等等、片面性的认为 Linux 使用范围只有服务器、打稻草人转移话题等等,俺是真的懒得说了……
若无力驾驭,自由便是负担
MS08-067
依旧很好用?