Archive四月 2019

如何让【不支持】代理的网络软件,通过代理进行联网(不同平台的 N 种方法)

  先提醒一下:明天就到5月份啦。今年是“六四事件”30周年,GFW 肯定要发飙。大伙儿要提前做好预防措施——手头同时备几个翻墙梯子。
  今天要聊的这个话题,也是跟“翻墙”有点沾边滴,而且是为后续的某些博文做铺垫。

★本文的“目标读者”和“使用场景”

◇使用场景

  有时候,你因为种种原因,需要使用某款【网络】软件,但是该软件又【不】提供“代理设置”的配置界面和功能。
  如果你直接使用该【网络】软件的话,(在网络通迅过程中)服务器端可能会记录并保存【客户端 IP】(也就是你的【公网 IP】)。如此一来,可能会产生一些隐私方面的风险和担忧。
  俺今天要聊的话题就是——如何让那些【没有】代理功能的软件,也通过代理进行联网

◇目标读者

  首先,本文面向那些【有一定折腾能力】的同学。在这篇教程中,俺会介绍 N 种【思路】(方法论)。考虑到篇幅,每一种方法的配置,都只是【点到为止】。喜欢折腾的同学,可以根据俺给出的思路,配合俺介绍的软件,自己动手实践一下。
  其次,本文面向的是那些“比较注重隐私和隐匿性”的同学们。因为只有当你比较注重这些,才愿意为此而折腾。

◇关于【匿名化】

  本文的主题是——如何让【没有】代理功能的软件,也通过代理进行联网
  对于特别注重隐私和匿名的同学,仅仅使用“代理”当然是【不够】滴!为了实现【匿名性】,你不仅要让网络软件走代理,而且还要通过【匿名网络】来消除网络痕迹。
  所以,在本文每一个方法论的末尾,都附上一个如何匿名化的小节。讲述该方法论如何搭配【匿名网络】。(为了打字省力,俺以 Tor 来举例;使用 I2P 的同学,请依样画葫芦。)

  由于本文讨论的是【代理】的话题,所以本文涉及的【隐匿性措施】都仅仅是【网络层面】。但俺要强调的是——为了做到彻底的防范,你需要在【每一个层面】保护你的隐匿性。很多人虽然使用 Tor,但还是暴露了身份。因为他们【忽视】了其它某些层面的防范。
  下面这篇教程介绍了【每一个层面】的防范
为啥朝廷总抓不到俺——十年反党活动的安全经验汇总

★预备知识

◇“HTTP 代理”与“SOCKS 代理”有啥【差异】?

  简而言之,“HTTP 代理”只面向 HTTP 协议(包括 HTTPS);而“SOCKS 代理”可以支持多种协议。
  另外,“SOCKS 代理”的层次比“HTTP 代理”更【低】——它对应于 OSI 7层模型的第5层【会话层】(session layer)。

◇“SOCKS4”、“SOCKS4a”、“SOCKS5”都有啥【差异】?

  为了直观,放一个对照表(如下)。详细的说明参见维基百科的“这个页面”。

远程域名解析  IPv6   UDP 
SOCKS4 NO NO NO
SOCKS4a YES NO NO
SOCKS5 YES YES YES


  “远程域名解析”需要单独强调一下。
  当年设计 SOCKS4 的时候,并未考虑 DNS 的问题。所以客户端与 SOCKS4 服务端建立连接时,需要发送“4字节”的 IPv4 地址。
  后来 SOCKS4a 增加了这个特性(又叫做“服务端 DNS 解析”)。客户端可以把【域名】发给 SOCKS 代理的服务端,然后由 SOCKS 服务端完成域名解析。这个特性【很重要】,原因至少包括——
如果你在【本机】进行域名解析,并且你的操作系统的 DNS 是传统的设置。那么,你的“DNS 查询请求”会通过网络【直连】。在这种情况下,如果 ISP 监控你的网络流量,就可以看出你在访问【哪些域名】的网站。
  有鉴于上述原因,你使用的 SOCKS 代理,至少要是 SOCKS4a(SOCKS5 当然更好)。

◇两种 HTTP 代理——“转发”和“隧道”

  HTTP 转发
  这是传统的方式。网络软件(比如:浏览器、IM)把自己想要的 URL 网址发给 HTTP proxy,当 proxy 拿到 URL 之后,向目标网站发起 HTTP 请求,获取 URL 对应的内容(页面/脚本/图片/等等),然后 proxy 把内容返回给网络软件。
  使用这种代理,网络软件在进行 HTTP 通讯时,采用的依然是 HTTP 协议中常见的那几个 method(GET/POST/PUT/等等)。
  这种代理也被称作“relay 或 forward”

  HTTP 隧道
  另外还有一种不太一样的 HTTP Proxy,使用一个专门的 HTTP method——【CONNECT】。用了 CONNECT 这个 method 之后,网络软件发给 proxy 的就【不再是】URL 网址了,可以是任意的【主机:端口】二元组。proxy 拿到“目标主机 & 端口”之后,尝试与该主机建立连接。然后,proxy 就可以充当“目标主机”和“网络软件”之间的中转——网络软件发出的数据通过 proxy 转发给目标主机的指定端口,而目标主机发出的数据也通过 proxy 返回给网络软件。
  这种方式可以用来实现“各种 TCP over HTTP”(比如:SSH over HTTP 或 RDP over HTTP),所以也称为“隧道”(tunnel)。
  (关于“HTTP tunnel”的更多介绍,参见维基百科的“这个页面”)

◇“HTTP 代理”与“SOCKS 代理”如何【互相转换】?

  如果你使用的网络软件,仅仅支持 HTTP 或 SOCKS 的【其中一种】,而你用的代理是【另外一种】。那么就需要进行两种代理协议的【转换】。

  HTTP 转 SOCKS
  (如果你手头只有 SOCKS proxy,但你使用的网络软件只支持 HTTP 代理,就需要使用这种转换)
  通过 Privoxy 来进行这种转换。Privoxy 本身可以充当 HTTP proxy,然后可以把数据转给别的 SOCKS proxy。
  关于 Privoxy 的详细教程,参见《如何用 Privoxy 辅助翻墙?

  SOCKS 转 HTTP
  (如果你手头只有 HTTP proxy,但你使用的网络软件只支持 SOCKS 代理,就需要使用这种转换)
  通过 Tor(或 Tor Browser) 来进行这种转换。“Tor 客户端”本身可以充当 SOCKS proxy,然后可以把数据转给别的 HTTP proxy。
  关于 Tor 的详细教程,参见如下几篇:
“如何翻墙”系列:关于 Tor 的常见问题解答
“如何翻墙”系列:扫盲 Tor Browser 7.5——关于 meek 插件的配置、优化、原理
扫盲 Arm——Tor 的界面前端(替代已死亡的 Vidalia)

◇端口转发(Port Forward)

  本文后续部分会聊到“端口转发”这个招数。不太了解这个概念的同学,先看下面这篇博文(其中扫盲了“端口转发”的概念和工具)
多台电脑如何共享翻墙通道

★方案1:VPN

  先来聊 VPN,因为这是大伙儿最容易想到的方法,也是操作起来最简单滴。

◇原理

  简而言之,VPN 具有类似于“全局代理”的效果。也就是说,只要操作系统中开启了 VPN,整个系统中所有软件的网络传输,都会自动通过 VPN 服务器中转。所以,就算某个软件本身不支持代理,只要该软件运行在 VPN 的环境中,该软件的网络传输也会经过 VPN 服务器中转。此时,目标网站看到的是【VPN 服务器】的 IP 地址。

  数据流的示意图如下:

网络软件 <<==>> VPN客户端 <<==>> VPN服务器 <<==>> 目标网站

◇优点——配置简单

  由于 VPN 本身具有“全局代理”的效果,网络软件【无需任何配置】。
  这是该方案最主要的优点。

◇缺点——缺乏灵活性

  同样是由于“全局代理”的效果,导致这个方案【缺乏灵活性】。
  比如说:如果你希望某个网络软件直接联网,另一个网络软件走代理。用 VPN 就行不通啦。
  再比如说:你有两个不同的软件,需要走不同的代理,用 VPN 也不好弄。

◇相关软件及配置

  VPN 的软件非常多(各个平台都有),而且懂的人也很多,俺就不列举了。

◇如何匿名化?

  某些 VPN 软件(比如 VPNgate)本身提供了【代理设置】的功能——也就是说,可以让【VPN 客户端】通过代理联网。
  对于这类 VPN,你可以采用【VPN over Tor】的方式,就可以实现【匿名化】。由于 VPN 本身具有【全局】性质,所以你在搞“VPN over Tor”的招数时,“Tor 客户端”必须位于【另一台主机】。
  对于【VPN over Tor】的方式,就算 VPN 服务器记录了【访问者 IP】,这个 IP 也只不过是【Tor 出口节点】的 IP,与你本人的公网 IP 毫无关系。由于 Tor 的匿名网络会经过【三次随机跳转】,而且每隔几分钟就会变换线路(详情参见《关于 Tor 的常见问题解答》);这种情况下,逆向追溯非常非常难。数据流的示意图如下:

网络软件 <<==>> VPN客户端 <<==>> Tor客户端 <<==>> Tor匿名网络(3重跳转) <<==>> VPN服务器 <<==>> 目标网站

  如果你采用俺常年唠叨的【基于 TOR 的双重代理】,让某个翻墙工具作为 Tor 的【前置代理】,则数据流变得更加复杂(逆向追溯【更加不可能】):

网络软件 <<==>> VPN客户端 <<==>> Tor客户端 <<==>> 翻墙工具客户端 <<==>> 翻墙服务器 <<==>> Tor匿名网络(3重跳转) <<==>> VPN服务器 <<==>> 目标网站

  请注意:
  由于 Tor 有很长一段时间(2010~2014)无法在天朝独立联网(GFW 屏蔽了 Tor 在全球的节点),因此很多墙内的同学会采用“Tor over VPN”的方式,让 Tor 联网。“Tor over VPN”与“VPN over Tor”,这两者是【相反】滴,别搞混喽。

★方案2:对“网络软件”的进程注入

  说“进程注入”,可能很多读者不知所云。但如果举 SocksCap 的例子,很多同学就明白俺要说啥了。

◇原理

  以 SocksCap 为代表的这类软件,可以对其它上网软件的进程进行注入(把自己的某个动态库注入到上网软件的进程中)。
  通过注入自己的动态库,就可以截获(被注入的)上网软件的网络行为,并修改其网络行为使网络通讯的数据转向指定的代理。

◇优点——比较灵活,可以实现【进程级】的设置

  相比 VPN 方式,该方法的主要优势在于【灵活性】。
  所谓的【进程级】就是说——即使对【同一个软件】的多个进程,你可以通过该方法,让某几个进程的网络通信走代理,而另几个进程则网络直连。。

◇缺点1——兼容性比较差

  该方法的最大缺点是【兼容性】。
  因为不同的软件,其内部实现方式,差异很大。采用“进程注入”,【未必】都有效。
  俺在 Windows 和 Linux 下都尝试过这种方式,经常发现有些网络软件用这招不灵(未能实现转发)。

◇缺点2——稳定性比较差

  另一个缺点是——有可能导致软件运行不稳定。
  因为不同的网络软件,可能由不同的编程语言开发,可能由不同的编译器编译,编译时可能有不同的编译选项。
  所以,对网络软件搞了进程注入之后,可能会出现一些奇奇怪怪的问题,甚至可能导致网络软件在运行时崩溃。

◇相关软件及配置

  下面这几款软件,都是通过进程注入的方式,让网络软件的网络流量转向 SOCKS 代理。

  SocksCap(Windows)
  在 Windows 的同类软件中,SocksCap 大概是最老牌滴。使用教程参见“这个页面”。
  目前网上流传最广的是 2.40 版本,大约2006年左右发布。开发该软件的“Permeo 公司”如今已经没了,当年的官网也没了。如果你要找这个软件,要从【靠谱的】网站下载。保险起见,附上 2.40 版本安装包的 SHA256 校验码(如下)

f381cae0f28d72bd1380159ca80b09e5526aa53d49d8dc963f7eace0c8f32d97

  由于 SocksCap 只能对32位的软件进行注入。如今“64位系统”越来越流行,它就显得有点落伍了;后来有人开发了一个 SocksCap64,基本模仿 SocksCap 的功能,但可以支持64位系统。
  请注意,SocksCap64 与 SocksCap 虽然名称差不多,但这俩的作者【完全没关系】。
  使用过程中,有个细节要提醒一下——小心 DNS 泄露信息。
  SocksCap 的界面上可以配置“域名解析”(Name Resolution)。你要记得用【远程解析】。

  tsocks(Linux & Mac OS & BSD)
  你可以把这个软件理解为“Linux 版的 SocksCap”。其官网在“这里”。
  它的最后一个版本发布于2002年10月。可能是因为功能本身很简单,而且也不需要再加新功能,所以就没有更新了。
  顺便说一下:几大主流的 Linux 发行版(Debian、Fedora、Arch、Gentoo ……),其软件仓库中都已经包含了 tsocks。

  ProxyChains(Linux & Mac OS & BSD)
  proxychains 相当于 tsocks 的增强版,包括如下特性:
1. 支持【更多的】代理类型(除了各种 SOCKS 代理,还支持各种 HTTP 代理)。
2. 可以实现【链式】的代理(ProxyChains 这个名称就来自于此)
3. 用户可以定义一堆代理,让它“随机选择”
  它的官网在“这里”。后来又出了 proxychains-ng (ng 表示“new generation”),官网在“这里
  顺便说一下:几大主流的 Linux 发行版(Debian、Fedora、openSUSE、Arch、Gentoo ……),其软件仓库中都已经包含了 ProxyChains 或 ProxyChains-ng。

  PySocks(专用于 python)
  作为曾经的程序猿,而且还比较喜欢 Python,顺便介绍一个库(如果你不是搞 Python 开发的,这个东东与你无关)。
  它的代码仓库在“这里”。使用它,只需增加4行代码(如下),就可以让整个 Python 进程的网络链接都转向指定的 SOCKS 代理。

import socket
import socks
socks.set_default_proxy(socks.SOCKS5, addr, port) # addr 和 port 表示 SOCKS 代理的地址和端口
socket.socket = socks.socksocket

  其原理与刚才介绍的那几个工具差不多——它替换掉 socket 标准库的入口函数,其它 python 库(不管是标准库还是第三方库)只要想联网,终归都要直接或间接地依赖 socket 进行网络通讯,因此都会被重定向到指定的 SOCKS 代理。

◇如何匿名化?

  如果你使用普通的翻墙代理,数据流的示意图如下:

网络软件 <<==(进程注入工具转发)==>> 翻墙工具客户端 <<==>> 翻墙服务器 <<==>> 目标网站

  为了强化【隐匿性】,你可以改用 Tor 匿名网络,数据流的示意图如下(逆向追溯已经非常难)

网络软件 <<==(进程注入工具转发)==>> Tor客户端 <<==>> Tor匿名网络(3重跳转) <<==>> 目标网站

  如果你采用俺常年唠叨的【基于 TOR 的双重代理】,让某个翻墙工具作为 Tor 的【前置代理】,则数据流变得更加复杂(逆向追溯【更加不可能】):

网络软件 <<==(进程注入工具转发)==>> Tor客户端 <<==>> 翻墙工具客户端 <<==>> 翻墙服务器 <<==>> Tor匿名网络(3重跳转) <<==>> 目标网站

★方案3:对“端口转发工具”的进程注入(某些情况需要改 hosts)

  (注:本文开头部分的“预备知识”已经提到了【端口转发】的概念)

◇原理

  (上一章节提到)由于网络软件的千差万别,对网络软件搞进程注入,经常会出现一些【兼容性问题】。所以,咱们要转换一下思路,不去动网络软件,而在【端口转发】的软件上做文章。因为端口转发工具(比如:rinetd)通常很简单,对其进行注入,出问题的概率要小很多。
  而“修改 hosts”是为了进行【域名欺骗】,从而让网络软件把数据流发送【本机】的某个端口,以便咱们实现“端口转发”。由于端口转发工具已经被注入,所以它在转发的那一瞬间,网络流量已经被重定向到指定的代理。
  这个方案的原理有点复杂(比较绕),俺举2个例子,帮你理解。

  例1——邮件客户端
  假设你用邮件客户端软件来收发 email。并且你有多个邮箱,位于不同的邮件服务器。其中有些邮件服务器已经被 GFW 屏蔽。
  如果你对邮件客户端设置了代理,那所有邮箱(包括国内邮箱)的收发都要经过代理,就不爽了。比较爽的方法是——只对【被封锁】的邮件服务器走代理。
  为了达到这个效果,你需要进行如下步骤:
1. 在邮件客户端配置 POP3 和 SMTP 的服务器域名时,【不】要填写真实域名,而是填写本机地址(比如分别填写 127.0.0.1127.0.0.2)。
2. 使用某个【端口转发工具】(比如:rinetd)在上述两个地址进行监听,端口号还是采用 POP3 和 SMTP 的端口号。并配置2条【转发规则】,分别转发到 POP3 和 SMTP 服务器的【真实地址】的相应端口。
3. 对“端口转发工具”搞【进程注入】(参见“方案2”)。因此,当 TCP 流量被转发的瞬间,就被自动重定向到翻墙代理

  例2——系统升级
  “邮件客户端”的例子比较特殊,因为网络通讯的对象(邮件服务器)是【界面可配置】滴。如果某个网络软件连接的服务器,【没有】相应的配置界面或配置文件,咋办捏?
  下面俺举“Windows 系统升级”的例子。在这种情况下,并【没有】界面让你配置微软官方的升级服务器的域名或 IP 地址。这时候咋办捏?
  首先,你要研究一下,系统升级软件,访问的是哪个域名的哪个端口?
  其次,通过【修改 hosts】的方法,把“升级服务器的域名”指向某个【本机】地址(为了叙述方便,假设用 127.1.2.3)。
  接下来的手法就差不多啦——同样对 rinetd 配置转发规则(转发到升级服务器【真实的】IP),同样对 rinetd 进行注入。
  【系统级 hosts】在域名查询时具有最高的优先级,因此升级程序会误以为上述的 127.1.2.3 是升级服务器的 IP,并尝试与这个 IP 的监听端口进行通讯,于是数据会被 rinetd 收到并转发。由于 rinetd 已经被进程注入,于是 rinetd 转发数据流的时候,会被重定向到你指定的代理。

◇优点1——软件级的灵活性

  这个优点是相比“方案1”(VPN)而言滴。
  此招数只影响某个特定的软件,所以比 VPN 更灵活。

◇优点2——更好的兼容性

  相比方案2(对网络软件的进程注入),这招的兼容性更好,因为这招【不去动】网络软件,注入的对象改为“端口转发工具”。

◇缺点——适用范围很窄

  由于要事先配置好“端口转发”,所以这个招数适用于——只与少数固定的“IP/域名”进行通讯的软件。
  如果某个网络软件需要通讯的对端是不确定的(比如 P2P 软件,比如浏览器),就【没法】用这招。
  所以说,这个方案的适用范围【很窄】。

◇软件及配置

  系统级 hosts 文件
  首先,所有知名的桌面操作系统(Windows/Linux/Mac OS/BSD),都可以定制【系统级】hosts 文件。

  端口转发工具
  端口转发的工具有很多,俺个人推荐 rinetd。理由包括:
1. 这个工具很小,很简单(越简单,搞“进程注入”的成功率越高)
2. 这个工具跨平台(Windows、Linux、UNIX 都可以用)
3. 这个工具非常老牌,很多系统的软件仓库都已经内置了。
  关于 rinetd 的使用,可以参见如下博文:
多台电脑如何共享翻墙通道

  进程注入工具
  “方案2”已经介绍了这类工具,此处再重复一遍。
  对于 Windows,你可以用 SocksCap 对 rinetd 进行注入;在 POSIX 系统(POSIX 是“Linux/Mac/BSD”的统称),可以用 tsocks 或 proxychains 对 rinetd 进行注入。
  有个细节要提醒一下:
  (在 POSIX 系统上)由于要对 rinetd 进行注入,所以 rinetd【不】能以常规的 daemon 方式启动;而必须用“注入工具”来启动 rinetd。

◇如何匿名化?

  (这部分与前面的“方案2”相同,略)

★方案4:防火墙转发——本机模式

  前面介绍的几个招数,都有一些严重缺陷,令人不爽:

方案1:VPN——不够灵活
方案2:对网络软件的进程注入——兼容性差
方案3:hosts + 端口转发——只适用于“通讯对端比较固定”的网络软件

  下面要介绍的是【终极大杀器】,可以解决前面所有弊端,那就是——
“防火墙”转发给“透明代理”(Transparent Proxy),然后“透明代理”再转给真实代理(比如 Tor)。
  使用这个方案,网络软件完全感觉不到代理的存在。从这个角度而言,它有点像 VPN。但是它与 VPN 又不太一样,因为这个方案可以对同一个系统的不同网络行为作【细颗粒度】的区分,使得某些数据走代理,另一些数据则直连。

◇原理

  这个方案的关键在于操作系统内置的【主机防火墙】。
  如今的几大桌面系统(Windows、Linux、Mac OS、BSD),都自带了【内核级】的防火墙,下面俺以 Linux 自带的 iptables 来说事儿。
  iptables 功能非常强,而且具备高度的可定制性。你可以定制 iptables 的规则,使得符合某些条件的数据包,被重定向到本机的某个指定端口。
  然后,你用某个特定的软件充当【透明代理】,对这个端口进行监听,于是这个透明代理就可以截获这些被重定向的数据包,然后透明代理再把这些数据包转发给咱们真正需要的代理(比如 Tor)。
  iptables 可以针对不同条件进行重定向,俺举几个例子:
针对“端口”的范围(只有当“源端口”或“目的端口”符合某些条件,才进行重定向)
针对“IP地址”的范围(只有当“源IP”或“目的IP”符合某些条件,才进行重定向)
针对“用户”(只对特定用户产生的数据包,才进行重定向)
针对“网卡”(只有某个网卡的数据包,才进行重定向)
……

  刚才是拿 Linux 内核自带的 iptables 说事儿。除了它,OpenBSD 自带的 pf 和 FreeBSD 自带的 ipf 也可以实现类似的效果。
  Windows 自带的防火墙是否能做到类似效果捏?俺不太确定 🙁
  (注:多年不用 Windows 了,写本文时,还特地开了个 Windows 虚拟机,简单看了一下内置防火墙的配置,好像没有这种功能)

◇优点1——足够灵活

  在本文介绍的所有方案中,这个方案的灵活性是最好的。
  前面提到:方案2(对网络软件的进程注入)的灵活性非常好,能做到【进程级】的灵活性。而方案4的灵活性甚至超过方案2,因为它能实现【数据包级】的灵活性。

◇优点2——足够好的兼容性和稳定性

  由于这个方案依赖的是【内核级】的主机防火墙,它处在操作系统的底层。因此【不】会受到软件的影响。
  另外,这个方案【不】需要搞“进程注入”,也【不】影响网络软件的稳定性。

◇优点3——不受“更换软件”的影响

  由于防火墙规则针对的是数据包的属性(比如:IP、端口)以及操作系统相关的属性(比如:用户组),与网络软件本身没啥关系。
  也就是说,你一旦设定好相关的规则,即使你换了不同的网络软件,这些防火墙规则依然有效(不用再改)

◇缺点——配置的门槛偏高

  “门槛偏高”体现在——你必须足够熟悉操作系统自带的防火墙,懂得如何设定规则,以便对特定的数据包进行【重定向】。

◇缺点——Windows 的【可行性】,俺还不确定

  关于这点,下面的某个小节会提到。

◇软件及配置

  完成该方案需要三样东西:
1. 防火墙和相关规则
2. 透明代理
3. 实际的代理(比如 Tor)
  重点说说前面两样。

  防火墙的配置
  (下面以 iptables 举例,使用 pf 或 ipf 的同学,请依样画葫芦)
  考虑到本文只是提供思路和方法论,对 iptables 的配置,俺只提几个注意事项。具体的命令,请自行查阅手册。
  【注意事项1】
  iptables 默认的 table 是 filter,大部分使用 iptables 的同学,都是针对 filter 进行配置。
  但本文要聊的【数据包重定向】,必须在【nat】这个 table 上进行配置。
  【注意事项2】
  对于“本机模式”的防火墙转发,你需要重定向的是【本机软件】产生的数据包,所以你要在【OUTPUT】这个 chain 中追加规则。
  【注意事项3】
  你需要用到 -j REDIRECT 选项和 --to-ports 端口号 选项(此处的“端口号”就是透明代理的监听端口号)
  【注意事项4】
  如果“透明代理”位于【另一个系统】,上述 iptables 的选项要略做修改。
-j REDIRECT 改为 -j DNAT(REDIRECT 与 DNAT 的差异,参见“这篇洋文”)
--to-ports 端口 改为 --to 地址:端口(此处的“地址”就是“透明代理”所在的另一个系统的地址)

  透明代理的配置
  对于 POSIX 系统(Linux/Mac OS/BSD),俺推荐的是 redsocks 这个工具(官网在“这里”,官方代码仓库在“这里”)。
  它的名气大(主流的 Linux 发行版,软件仓库都已经内置),支持的代理种类也齐全——可以把收到的数据包转发给各种代理(各种 SOCKS 代理,各种 HTTP 代理)。
  redsocks 本身的配置还算简单。安装好之后,直接修改 /etc/redsocks.conf 这个配置文件。而且配置文件中已经写了相当多注释,很容易看懂。
  关于 redsocks,也说几个注意事项。
  【注意事项1】
  对于“本机模式”,redsocks 监听端口可以绑定到 127.0.0.1,也可以绑定到 0.0.0.0,但【不要】绑定到网卡的 IP 地址。
  【注意事项2】
  如果你要转发的“实际代理”是“HTTP 代理”,要区分不同类型(参见本文开头的预备知识章节)。
  在 redsocks 配置文件中,用 http-connect 表示“HTTP 隧道”,用 http-relay 表示“HTTP 转发”。
  【注意事项3】
  redsocks 每次接收到数据会记录日志(你可以在它的配置文件中指定日志文件的位置)
  在转发失败(数据不通)的情况下,先去看 redsocks 的日志。如果 redsocks 的日志没有东西,通常说明你的防火墙规则配置错误(所以 redsocks 没收到数据)。如果 redsocks 记录了日志,你可以根据日志判断——是否在转发给“实际代理”时出了问题。

◇Windows 系统的可行性还【不确定】

  这个方案能否用于 Windows 系统,俺【不】清楚。至少有两个地方存在不确定性:
1. Windows 自带的防火墙是否能做到类似的【重定向】效果
2. Windows 上是否有类似 redsocks 这样的软件(可以充当【透明代理】,并把数据转发到其它代理)
  如果读者中有人知道这两个问题的答案,欢迎到博客上留言。先行谢过。

◇关于 DNS 的转发

  redsocks 本身支持 DNS 的转发,具体参见它的配置文件中的【redudp】和【dnstc】这两个部分。
  由于传统的 DNS 协议是【UDP】,所以,一定要基于【SOCKS5 代理】才能进行转发(“SOCK4 代理”不行,“HTTP 代理”也不行)。
  如果你手头只有其它代理,偏偏缺少 SOCK5 代理,咋办捏?
  你可以在本地开启【DNS proxy】。这种 proxy 把自己伪装成一个 DNS server,然后把收到的 DNS 查询请求转发给真正的 DNS server。
  但是 DNS proxy 把 DNS 请求转发出去,还是要走 UDP 协议,还是得依靠 SOCKS5 代理。所以你必须使用一种特殊的 DNS proxy——可以把“传统 DNS”转成“DNS over HTTPS”。“DNS over HTTPS”简称 DoH,具体介绍请看这篇博文。由于 DoH 包裹在 HTTPS 流量中,自然可以用各种代理(SOCKS or HTTP)进行转发。
  Facebook 开源了一个【DoH proxy】(基于 python 开发,代码仓库在“这里”),就可以实现上述效果。感兴趣的同学可以去体验一下。

◇如何匿名化?

  (下面以 redsocks 为例)

  如果 redsocks 把数据转发给普通的翻墙代理,数据流的示意图如下:

网络软件 <<==(内核防火墙转发)==>> redsocks <<==>> 翻墙工具客户端 <<==>> 翻墙服务器 <<==>> 目标网站

  让 redsocks 把数据转发给本机的 Tor,就可以实现匿名化。数据流的示意图如下(逆向追溯已经非常难)

网络软件 <<==(内核防火墙转发)==>> redsocks <<==>> Tor客户端 <<==>> Tor匿名网络(3重跳转) <<==>> 目标网站

  如果你采用俺常年唠叨的【基于 TOR 的双重代理】,让某个翻墙工具作为 Tor 的【前置代理】,则数据流变得更加复杂(逆向追溯【更加不可能】):

网络软件 <<==(内核防火墙转发)==>> redsocks <<==>> Tor客户端 <<==>> 翻墙工具客户端 <<==>> 翻墙服务器 <<==>> Tor匿名网络(3重跳转) <<==>> 目标网站

★方案5:防火墙转发——网关模式

  接下来聊“防火墙转发”的另一个模式——网关模式。

◇原理

  对于“网关模式”,你需要【N + 1 个】主机——其中的 N 个主机充当【隔离主机】,还有一个充当【网关主机】。
  (注:本章节所说的“主机”,可以是“物理主机”,也可以是“虚拟机/VM”。关于“虚拟机”,俺写了扫盲的系列教程
  对于【网关主机】
  “方案4”提到的那三样东西(防火墙规则,透明代理,实际代理),都在【网关】主机上进行配置。
  充当【网关】的主机可以是【双】网卡,也可以是【单】网卡(到底用哪种,视具体情况而定)。
  对于【隔离主机】
  只需要在网卡中设置【默认网关】,“默认网关”的地址就填写“网关主机的网卡地址”。如果网关主机是【双】网卡,注意别填错喽。

◇相比“方案4”的优点——支持任何操作系统

  前面俺提到:“本机模式的防火墙转发”(方案4),只能用于【桌面的】POSIX 系统,Windows 上有可能搞不定,移动设备更加搞不定。
  而如果你用了“网关模式的防火墙转发”(方案5),只有“网关主机”需要是 POSIX,“隔离主机”可以是任何系统(甚至可以是移动设备)。

◇相比“方案4”的优点——降低了配置的工作量

  假设你有好几个操作系统,都需要搞“防火墙转发”。如果用“本机模式”,每个系统都要配置;如果用“网关模式”,只需要对“网关主机”配置【一次】,其它几个系统作为“隔离主机”,除了设一下“默认网关”,【不用】再进行别的设置。

◇其它优点

  (参见“方案4”,略)

◇缺点——配置的门槛偏高

  (参见“方案4”,略)

◇软件及配置

  本方案与“方案4”大致相同,只不过多了一个主机作【网关】。然后你把 redsocks 和代理软件(比如 Tor)部署到【网关】上,防火墙规则也在【网关】上设置。
  由于部署方式变成【跨主机】,防火墙规则需要适当改动。说几个注意事项(以 iptables 为例)
  【注意事项1】
  对于“方案4”(本机模式),你要转发的数据包来自【本机】的软件,你的转发规则必须添加到【OUTPUT】这个 chain 中。
  对于“方案5”(网关模式),你要转发的数据包来自【另一个主机】,你的转发规则必须添加到【PREROUTING】这个 chain 中。
  下面这张图有助于让你理解 iptables 中不同的 chain 的拓扑关系。
  

不见图 请翻墙

  关于 redsocks,也说几个注意事项。
  【注意事项1】
  前面提到:“本机模式”,redsocks 监听端口可以绑定到 127.0.0.1,也可以绑定到 0.0.0.0,但【不要】绑定到网卡的 IP 地址。
  而对于“网关模式”,redsocks 监听端口可以绑定到“网卡地址”,也可以绑定到 0.0.0.0,但【不要】绑定到 127.0.0.1。(请注意上述两者,有点差别)
  【注意事项2】
  如果你想【混用】这两种模式(既作为网关,转发别的主机的数据包到透明代理;同时又转发本机软件的数据包到透明代理)。那么 iptables 既要设置【OUTPUT】这个 chain,也要设置【PREROUTING】这个 chain。此时,redsocks 的监听端口【必须】绑定到 0.0.0.0 才能“鱼和熊掌兼得” 🙂

◇DNS 的两种玩法

  使用“网关模式”,DNS 有两种玩法:

  方法1
  类似“方案4”,通过配置网关的防火墙规则,使得所有“隔离主机”的 DNS 数据包被转向 redsocks 的 UDP 端口。

  方法2
  你也可以让“网关主机”充当 DNS server,然后在“隔离主机”中配置 DNS,指向“网关主机”。如此一来,所有“隔离主机”的 DNS 请求都由“网关主机”完成,然后“网关主机”采用【DNS proxy】的技巧(具体参见前一个章节的关于 DNS 的转发)。

  以上两种方法,都可以确保你的所有主机的所有 DNS 请求通过自己指定的代理,而你只需在网关一个地方进行配置。

◇如何匿名化?

  (参见“方案4”,略)

◇网关模式下,Tor 如何部署?

  对于特别注重隐匿性的同学,肯定希望让每个“隔离主机”都用上【匿名网络】(比如 Tor)。这时候就涉及到——“Tor 如何部署”这个问题。
  关于这个话题,可能很多人会觉得——把 Tor 和 Tor 的前置代理都放到“网关主机”。
  这么干,配置会比较简单。但俺认为这种部署方式【不好】!
  因为这样部署,你的 N 个“隔离主机”会共用同一个 Tor 环境。这样有啥风险捏?具体解释请参见《为啥朝廷总抓不到俺——十年反党活动的安全经验汇总》一文中的 ★【网络】层面的防范 这个章节。
  所以,更好的部署是:【每个隔离主机】都有自己的 Tor 客户端,“网关主机”只部署“透明代理”和“Tor 的前置代理”。如此一来,每个隔离主机都有各自独立的 Tor 环境。

★结尾

  今天聊的只是俺个人经验,未必全面。
  如果你有其它技巧,欢迎在俺博客留言,分享给大伙儿 🙂

俺博客上,和本文相关的帖子(需翻墙)
多台电脑如何共享翻墙通道
如何用 Privoxy 辅助翻墙?
对比4种强化域名安全的协议——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS
为啥朝廷总抓不到俺——十年反党活动的安全经验汇总
如何隐藏你的踪迹,避免跨省追捕
“如何翻墙”系列:关于 Tor 的常见问题解答
“如何翻墙”系列:扫盲 Tor Browser 7.5——关于 meek 插件的配置、优化、原理
扫盲 Arm——Tor 的界面前端(替代已死亡的 Vidalia)
扫盲操作系统虚拟机

“996工作制”只不过是【劫贫济富】的缩影——“马云奇葩言论”的随想

★引子

  这次的“996.ICU 事件”闹得很大,连朝廷喉舌都出来发话了。尤其是马淫发表了一些奇葩的言论,把此事的热度推到了一个新的高度。俺正好借此机会,写篇博文抹黑党国。

★“共同奋斗”的口号,大部分情况是【忽悠和洗脑】

  相当比例的资本家都喜欢用“共同奋斗”(或诸如此类)的口号来激励员工。这个口号相当于古典小说中常见的“有难同当,有福同享”。
  问题在于:当企业将来做大做强之后,到了“共富贵”的时候,到了需要“分蛋糕”的时候,老板是否愿意跟底下的员工一起分蛋糕,这里面就存在很大的变数。说得夸张一点,这全在老板的【一念之间】。
  大部分资本家(黑心资本家)从一开始就【没打算】跟员工“共富贵”,只有极少数良心资本家愿意跟下面的员工一起分蛋糕。但不管是“黑心资本家”还是“良心资本家”,一开始都会喊出“共同奋斗”(或诸如此类)的口号。
  有鉴于此,“共同奋斗”(或诸如此类)的口号,具有很大欺骗性——毕竟,良心资本家本来就是少数(具体到咱们天朝,更加是少数)。

  所以,【老板的人品】比“口号”更重要;而绝大部分人恰恰在【理解人性】方面非常【幼稚】,总是把“黑心企业家”当成好人。
  另一个难点在于——就算你能非常准确地判断自己的老板是良心资本家,依然存在【其它变数】——
比如说,当企业做大之后,由于资本运作(或诸如此类的原因),原先的创始老板,其话语权会下降,企业的实际控制人可能改变。新老板未必会兑现旧老板的承诺。

  综上所述,
  所有这些“共同奋斗”之类的口号,你听听就算了,不要太当真。【千万不要】把自己未来的希望寄托在这种非常飘渺的东西之上。
  俺在博文和博客评论区经常唠叨的观点是:
最可靠的东西是你自己的能力(尤其是你的核心竞争力)

★为啥“996制度”变得更加普遍?

  (为了打字省力,本文后续部分以“996”一词指代各种“【常态化】的加班制度”)
  20多年前,当俺以程序猿的身份刚开始工作时,像996这么变态的工作制,还很少听说;而如今,不要说996,连997都有公司在推行了。
  很显然,这类变态的加班制度,正变得越来越普遍。

◇劳动力成本上升

  为啥 996 越来越普遍?这里面当然有很多原因,本着“长期抹黑党国”的写作习惯,俺今天只谈其中一个原因,那就是——企业的【劳动力成本】在显著上升,而劳动力成本中,【社保成本】又是其中的主要影响因素。最近这些年,天朝的社保费率一直是【超高】滴!
  为了强调这点,特地引用官方喉舌中国新闻网的报道——《发改委:中国社保费率超美日 应降五险一金减负 @ 中新网》(以下是部分内容摘录,粗体是俺标注滴)

国家发改委网站公布了来自该委社会发展研究所的研究报告,称当前我国企业职工五项社保总费率为企业职工工资总额的 39.25%
……
目前各地 10% 到 24% 的住房公积金缴费,我国“五险一金”的名义费率已经达到 60% 左右

  从上述报道可以看出——连朝廷自己的喉舌,都不得不承认——【社保成本超高】。

◇“996工作制”是资方的应对措施之一

  资本家通常不会太傻(太傻的资本家会很快被淘汰),所以他们想出了若干招数来应对劳动力成本上升。
  对于【体力密集型】的行业(比如某些制造业),可以用“工业自动化”来应对“劳动力成本上升”。但对于【脑力密集型】的行业(比如软件业),【暂时没有】成熟的工业自动化来实现“对人的替代”。所以,资方必须采用其它招数。
  其中一个招数就是——【大幅延长】劳动时间。在员工人数【不变】的情况下,增加每个员工的工时,社保成本【没有】变,但劳动产出增加了。
  就算对加班的时间支付“加班费”,增加的劳动产出,还是会显著大于加班费(【净收益】大于零)。有些更加黑心的企业,连加班费也不给,那么【净收益】就更加显著了。

◇为啥社保成本持续上升?

  那么,为啥朝廷要让企业缴纳如此高比例的社保捏?原因同样有很多,本着抹黑朝廷的目的,俺只谈其中两个原因:
  其一,公务员队伍
  天朝有非常庞大的公务员队伍。关于这点,是有目共睹滴。前几年网上流传一篇文章,列举【县一级】的政府机构,竟然有【100多个】。单从这点就可以看出——公务员队伍有多么庞大了。
  另外,顺便分享一篇文章:《公务员一辈子不缴社保,退休金却拿最高 @ 凤凰网
  其二,人口结构
  说到人口红利耗尽,最近2年已经非常明显了。当然啦,这要归功于朝廷那个傻逼的计生政策。这个政策不但傻逼,而且还坚持不懈地搞了40年。

★“996工作制”如何影响你自己的职业生涯?

  “996工作制”对个人的影响,包括如下几个方面:

◇压缩了员工的业余时间——因此也就减少了你的自学【时间】

  大多数人都知道——加班意味着业余时间减少。业余时间减少也就意味着:你更加没有时间去自学,去提升自己的能力。
  如果你的能力得不到提升,你在人力市场上的【议价能力/谈判筹码】也就得不到提升。然后你就不得不继续接受这种变态的工作时间。
  俺把这称之为【996怪圈】——它是一个恶性循环(恶性正反馈),你陷入其中,并越来越无法自拔。

◇消耗了员工在业余时间的【自控力】——因此也就减少了你的自学【动力】

  关于“自控力”这个词汇,容易产生歧义。为了避免理解上的出入,建议你先看上个月(2019年3月)的博文:
为什么独立思考这么难?——谈谈心理学的成因,并分享俺的经验》。
  首先,大部分人的工作都【不是】自己的兴趣所在。
  其次,超长的工作时间,使得你必须长时间面对自己不感兴趣的工作内容,所以你必须动用“自控力”以完成自己的工作。
  最后,当你忙碌了一天,终于回家的时候,很可能你的自控力已消耗殆尽
  结论就是:如果你的工作不是你的兴趣所在,长时间加班之后,回到家里,你很难再有动力去学习其它新技能。
  超长加班导致的【自控力损耗】,同样会让你处于(俺前面提到的)【996怪圈】。

◇对【健康】的负面影响

  (这方面的弊端,人所共知,俺就不展开啦)

◇对【家庭生活】的负面影响

  (这方面的弊端,人所共知,俺就不展开啦)

◇如何跳出996的怪圈?

  看完前面几个小节,肯定会有读者问这个问题。
  关于这个问题的讨论会比较长,不适合放在这里展开。如果有很多人对此话题感兴趣,可以到博客评论区反馈,到时候俺再另写一篇博文。

★“996工作制”【不】仅仅出现在软件行业

  (再次强调:本文所说的“996”泛指各种“【常态化】的加班制度”)
  这次的“996.ICU 事件”,创建于 Github 的项目,2周左右获得【20万】的 star(请注意:只有 Github 帐号才能点赞)
  考虑到“Github 帐号”的用户,大部分是程序员,这至少说明——在软件开发行业,996 已经非常普遍了。
  但如果你以为:996工作制只在软件行业才有,那你就犯了【幸存者偏见】的思维谬误(关于这种思维谬误,参见博文《思维的误区:幸存者偏见——顺便推荐巴菲特最著名的演讲》)
  这次的事件能闹大,全靠这 Github 这个开源平台。由于这个平台在全球是独一无二的(墙内的没有同等的替代品),天朝程序员自然也大量使用它。所以 Github 上有很多天朝的程序员用户。而且 Github 位于【墙外】,不受真理部的管辖(朝廷拿它没办法)。
  相比之下,其它行业虽然也存在类似996的现象,但是其它行业缺少像 Github 这样的平台,所以很多【不满的意见】,无法集中表达,无法成为热点事件,也就无法被各国媒体报道。

★“996工作制”如何影响天朝的人力资源市场?

◇除了“供给和需求”,【博弈】也会影响商品的价格

  早期的经济学理论认为:“价格”完全是由“供给和需求”决定滴。到了20世纪,跨界大牛冯·诺依曼与另一个经济学家合写了一篇论文,指出【博弈论】在经济学的重要性。关于这事儿,俺在博文《为什么马克思是错的?——全面批判马列主义的知名著作导读》一文中也有提及。
  也就是说,不光是商品的“供应量和消费量”会影响商品的价格,供应方和需求方的【博弈】,也会影响商品的价格。
  下面俺来介绍一下:“996工作制”作为【资方】的博弈工具,是如何影响人力资源价格滴。

◇“996工作制”成为【资方】的博弈工具

  下面以 IT 行业为例来说明。
  由于超长加班已经成为行业常态,每个程序员的【工作时间】增加了,每个人的【产出】当然也增加了。于是,同样的工作量,只需要【更少】的人就可以完成。
  也就是说,同一个公司,如果公司本身的业务没有显著变化,延长每个员工的劳动时间,公司老板对人员数量的需求就【减少】了,所以,资本家就获得了【更强】的议价能力。这至少体现如下几方面:
  其一,对企业内的员工
  由于需求的人数降低了,资方可以拿【裁员】进行威胁(当然啦,不会说得这么难听,会美其名曰“末位淘汰”)。从而进一步迫使员工付出更多劳动(比如更长的加班),并进一步减少成本(比如取消加班工资)
  其二,对人力市场上的应聘者
  资方可以进一步压价(尤其是针对刚毕业的新手)
  其三,正反馈
  只要某个行业中的【标志性企业】都这么干(比如“腾讯、阿里、百度、华为”就是软件行业的标杆),同一行业的其它小公司肯定纷纷效仿(这么好的赚钱机会,资本家又不傻,当然不会错过)。如此一来,就形成了某种【正反馈】。

  综上所述,996之类的工作制越是普及,则行业的【平均工资】水平会被压低。
  当然啦,“平均工资”这个说法【不能】一概而论。考虑到每一个行业中的岗位,都会有【高/低】之分。俺的观点是:层次越【低】的岗位,越容易受到996工作制的影响,并导致这类岗位的平均薪资水平被压低
  因为越低层次的岗位,其劳动者的【议价能力】也越低。

◇平均工资到底是上升还是下降?

  这个问题肯定是有争议滴。
  由于篇幅的关系,俺不想在这里展开详细讨论,只提几个要点,供参考:
  其一,
  前面的讨论有一个前提【公司业务没变化】。在这个前提下,如果延长每个员工的劳动时间,则资方对“员工人数”的需求就会下降。
  而实际情况是,由于天朝作为【世界工厂】,很多行业的【业务总量】是在增长滴。所以,就要判断“行业的业务增幅”与“行业的工时增幅”哪个更大。如果“业务的增幅”更大,资方对人员数量的需求不但没降低,反而会增加。这种情况下,该行业的平均工资可能会上升;反之,则可能会下降。
  但是,不管业务的情况如何变化,【增加平均工时】之后,资方的【利润率】显然是变大滴。
  其二,
  在讨论“平均工资”的时候,要参考【通胀因素】,否则没有意义。

★为啥有很多知名企业家力挺马淫?

  自从马淫发表了那个奇葩言论(能够996是员工的福报),已经引发广泛批评,但是有很多企业家跳出来支持马淫。
  很多人的解读是:屁股决定脑袋,企业家当然是站在资方的立场进行思考。
  俺觉得以上只是一个方面,另一个方面是:
  这次的“996.ICU 事件”闹得很大,连很多知名外媒都报道了。这有点出乎资方的意料。考虑到舆论的压力很大,资方代表作人物必须站出来力挺996之类的工作制(表面上是力挺马云,实质上是要维护996制度)。
  如果资方能安然渡过这次的大风波,今后就算有人再闹,充其量也不过如此。那么,996之类的工作制,将成为各行业的潜规则,【黑心】资本家又多了一个利器。

★再来谈谈【工会 & 工运】的问题

  既然聊到“996工作制”,当然也要顺便谈谈“工会和工运”。
  在咱们天朝,每一个城市(具体到每一个县和镇),都有【官方的】工会。但所有这些“官方工会”全都是【扯蛋】滴——你千万不要指望官方的工会能帮你维权。
  在咱们天朝,各级衙门都讨厌维权。因为任何一个地方出现维权事件,也就意味着这个地方的衙门出了问题。所以,天朝所有的维权事件,都必然会被【打压】。
  5年前(2014),俺写了一篇博文《被判“谋反罪”的都是哪些人?——“危害国家安全罪”出笼20年随想》,里面汇总了【上百个】被判“危害国家安全罪”的民众。很多被判“谋反罪”的人,其实只不过是【维权人士】而已。

  明白了上述道理,你再去看近期发生的“996.ICU 事件”,就能理解很多奇葩的事情,为啥会发生。
  比如说:“996.ICU 项目”刚刚引发热议的时候(4月初),多款国产浏览器(至少包括:QQ浏览器、微信浏览器、UC浏览器、360浏览器)同步屏蔽了这个项目的网址。这么多国产浏览器能够统一协调行动,这说明啥捏?这说明了——背后是真理部的旨意。也就是说,真理部(中宣部)是【不】希望 996.ICU 这个事情闹大滴。因为这个事情闹得越大,有关部门就越没有面子。
  天朝的各级官员更关心自己的面子——因为面子会影响到仕途;至于广大民众的死活,跟他们没有半毛钱关系——因为屁民【无法影响】官员的仕途。

★天朝是哪一种资本主义?

  去年俺写了一篇博文《相当奇葩的天朝,【劫贫济富】的国度》,里面提到了:三种“财富分配方式”。今天再来老调重弹一下。
  社会的财富分配方式,大致可以归纳成三种。为了通俗起见,俺分别称之为:

1. 放任自由——政府【不】过多地干预社会财富分配
2. 劫富济贫——政府通过税收之类的方式,把一部分富人的财富转移到穷人手中
3. 劫贫济富——政府通过各种【掠夺】的方式,把一部分穷人的财富转移到富人手中

  如果把这3种财富分配方式去跟不同类型的资本主义进行关联,那么:

“放任自由” 相当于 “自由资本主义”
“劫富济贫” 相当于 “福利资本主义”
“劫贫济富” 相当于 “权贵资本主义”

(上述这个说法,从政治学理论的角度,肯定是不够严谨滴。考虑到本文只是一篇【通俗性】博文,喜欢较真的同学就不要跟俺抬杠啦)

  从今天对“996工作制”的讨论,你可以很清楚地看出,天朝就是典型的——【劫贫济富】(这也就是本文标题的由来)。
  俺已经猜到:某些“职业五毛”或“自干五”会为朝廷辩护,他们会辩称:996是资本家的罪过,与政府无关。
  但如果你再回头去看刚才关于“工会 & 工运”的讨论,自然明白——问题的根源还是出在【政治体制】。在如今的天朝,衙门是站【资方】这边滴。
  俺经常说:【天朝是个奇葩的国度】,从今天的讨论也可以看出来:一方面,咱们国家挂的是“马列主义的招牌”;另一方面,咱们国家的剥削远远胜过欧美那些老牌资本主义国家。
  是不是很讽刺啊?!

俺博客上,和本文相关的帖子(需翻墙)
相当奇葩的天朝,【劫贫济富】的国度
为什么马克思是错的?——全面批判马列主义的知名著作导读
被判“谋反罪”的都是哪些人?——“危害国家安全罪”出笼20年随想
王健林及万达集团背后的朝廷权贵家族(习、胡、温、贾、王)
习包子露馅——习近平在内的权贵家族如何转移巨额海外资产
中国电婊李小琳的精彩人生(多图)
若政治制度不公平,则经济改革无意义——谈谈天朝这个大赌场
点评中国社会九大阶层——没有公平、难以流动、无法稳定
为什么独立思考这么难?——谈谈心理学的成因,并分享俺的经验
思维的误区:幸存者偏见——顺便推荐巴菲特最著名的演讲

近期安全动态和点评(2019年1季度)

  上一篇博文的评论数又猛涨(每次俺戳到衙门的痛点,评论都挺多)。

★引子:关于《近期安全动态和点评》这种形式

  最近这些年,俺写了不少信息安全的教程,也获得很多读者的认可(对大伙儿的捧场,再次表示感谢)。
  久而久之,经常会有读者来询问信息安全相关的新闻或业界动态。俺如果有空,通常会在评论区回复相关的提问。
  对于那些特别重要的事情,俺会专门发一篇博文进行介绍(比如:“心脏滴血漏洞”、“TrueCrypt 之死”、“黑暗幽灵木马(DCM)”…)。
  但是捏,大部分的安全新闻和动态,重要性都不是那么高,相关的讨论也没有那么多。如果针对某个事情单独写一篇博文,篇幅会太短(可能就只有几句话)。而且俺也不喜欢发短篇博文。
  权衡之下,想到这种形式——
用单篇博文汇总最近一个季度的安全新闻和动态,然后再附上俺本人的评论。必要时,也可以分享俺的经验。

★隐私保护

◇朝廷监控屁民的数据库被曝光,含【3.64亿】自然人

中國用來存放監控資料的 MongoDB 資料庫曝光了 @ iThome

中國政府監控民眾網路行為的政策幾乎舉世皆知,但一名資安研究人員Victor Gevers揭露了一個可公開存取、且存放著中國監控民眾的資料庫,進一步向外界展示了中國的監控規模。

此一可公開存取的MongoDB資料庫位於中國,它蒐集了3.64億個連結真實身分的網路個人檔案,紀錄他們在六大社交平台上的聊天內容或檔案傳輸行為,而且透過各省份與縣市的警察局與座落在其它17個地區的MongoDB資料庫同步,這些資料庫都擁有同樣的監控網路名稱,也全都允許公開存取。

Gevers從資料庫上找到的六大社交平台代號為imsg、qg、qqmesg、wwhmsg、wxmsg及yymsg,推測它們分別是
IS語音服務、QQ Group、QQ Message、wangwang message(阿里旺旺)、微信及YY傳訊
……

  编程随想注:
  据俺了解到的情况,前几年公安部就已经在搭建一个大数据的平台,用来汇总各类 SNS 的数据,并以此来建立很详细的【人际关系网络】。所有墙内的帐号(手机、微信、微博、QQ、支付宝、等等),都整合到这个平台上,并且每个帐号都关联到具体的【自然人】。
  利用这样一个平台,六扇门的爪牙就可以很方便地进行各种数据挖掘。所以,早在很多年以前,俺就反复警告:【不要】用天朝的网络服务进行【敏感】活动
  不得不说,奥威尔在《1984》中预言的【电幕】,正越来越接近现实。如何对抗这种趋势捏?下面这篇博文可以供你参考。
“对抗专制、捍卫自由”的 N 种技术力量

◇“美团 & 饿了么”的手机 APP 涉嫌偷听用户说话

美团饿了么否认“偷听”,那为何我们说啥就推荐啥? @ 搜狐

据《IT时报》报道,2018年11月中旬,上海的孙女士在和同事闲聊时提到想喝CoCo奶茶,在打开饿了么APP时,在推荐商家首位看见了CoCo奶茶。让孙女士疑惑的是,自己之前从未在饿了么买过CoCo奶茶,“此前也没有使用任何手机App搜索过CoCo奶茶的相关信息。”

几乎在同一时间,北京网友燃玉(化名)跟朋友说想吃鳗鱼饭,1分钟后打开支付宝上的饿了么应用,推荐位顶部恰巧显示着一家鳗鱼饭的外卖店,此时距离他上次下单鳗鱼饭相隔23天。

《IT时报》的记者耗时三个月模拟用户的使用场景,对iPhone、Android手机和iPad上的美团外卖和饿了么APP进行跟踪测试。从测试结果来看,在谈及某种食物后,打开外卖APP出现相关推荐的概率高达60%-70%。
……

  编程随想注:
  下面这篇是俺写于4年前的博文,其中提到了手机的【硬件】(麦克风、摄像头、GPS、陀螺仪)如何泄漏你的个人信息。
如何保护隐私[10]:移动设备的隐私问题

◇“京东金融” APP 盗取用户截屏

网友曝京东金融App会获取用户截图、照片 @ 新浪

网友上传的视频显示,其先打开京东金融App,并让其在后台运行。然后打开手机上的银行应用,然后截图。随后打开文件管理器,找到京东金融的文件目录,在此目录下,出现了刚刚的银行应用截图。

不仅如此,该网友后续又发微博称,“京东金融不止偷截图,还会偷照片。”同时又附上一个视频说明,视频显示同样先打开京东金融App,并让其在后台运行。然后打开一个美颜相机App,用该App拍一张图片,之后会在京东金融的文件目录中找到该图片。
……

◇抖音国际版被美国 FTC 处以巨额罚款

违规搜集儿童隐私,抖音国际版在美被罚570万美元 @ 网易

网易科技讯2月28日消息,据TechCrunch报道,美国联邦贸易委员会(FTC)今天发布了一项重要裁决,短视频应用抖音国际版(TikTok)因违反美国《儿童隐私法》,将被处以570万美元罚款,并将影响该应用在13岁以下儿童中的使用方式。

◇【两亿】中国求职者简历被泄露

两亿中国求职者数据泄露 @ Solidot

HackenProof 报告,网络风险研究总监 Bob Diachenko 于 12 月 28 日分析 BinaryEdge 搜索引擎数据时发现了一个公开的没有任何保护或身份验证的 MongoDB 数据库,数据库容量为 854 GB,包含了 202,730,434 名中国求职者的数据,数据包括了详细的求职者信息如技能、工作经验、电话号码、电子邮件、婚姻状况、子女状况、政治面貌、身高、体重、驾照、文化水平和薪水期望等等。

◇Chrome 74 之后,用户无法再禁用“点击追踪”

  编程随想注:
  “点击追踪”是 HTML5 引入的特性,术语叫做“ping 属性”。如果网站在“超链接”中加入该属性,当用户点击这个超链接的时候,链接所在网站会得到点击的通知。很多网站用“点击追踪”来统计【外链】的点击情况。
  Google 作为搜索引擎,用户点击搜索结果,当然属于【外链点击】。所以,“点击追踪”这个功能对 Google 而言很有用(可以统计用户曾经点击过搜索结果中的哪些网站)。

  在 74 版本之前,Chrome 还有“点击追踪的选项”(也就是说,用户可以关闭该选项,禁用“点击追踪”)。到了 74 版本之后,Chrome 连这个开关选项也【去掉】了——因此,普通用户再也【无法禁止】“点击追踪”了。
  不得不说,Chrome 在【侵犯隐私】的邪路上越走越远。具体的原因,俺已经多次聊过——因为 Google 的主要利润来源是【在线广告收入】。所以,Chrome 的隐私保护,不但比 Firefox 差,而且很可能会【越来越差】。
  引申阅读:
弃用 Chrome 改用 Firefox 的几点理由——关于 Chrome 69 隐私丑闻的随想

★高危漏洞

◇Chrome 高危漏洞

Disclosing vulnerabilities to protect users across platforms @ Google 官方博客
Google: Chrome zero-day was used together with a Windows 7 zero-day @ ZDNet

  编程随想注:
  这个 Chrome 漏洞的编号是:CVE-2019-5786,存在于 FileReader API 中,攻击者可以利用该漏洞实现【远程执行代码】(Remote Code Execution)。Google 紧急发布了 72.0.3626.121 版本,修复该漏洞。
  讽刺的是:和该漏洞一起曝光的另一个漏洞是——“Win7 的【提权漏洞】”。攻击者如果同时利用这两个漏洞,不但能【远程】执行代码,还可以在执行代码后【提权】(拿到“管理员权限”)。(对攻击者而言)这两个漏洞堪称完美组合。

◇WinRAR 高危漏洞

WinRAR bug 正被利用安装难以检测的恶意程序 @ Solidot

流行的解压缩软件 WinRAR 曝出了一个至少 14 年历史的代码执行漏洞,
安全公司 Check Point 的研究人员在 UNACEV2.DLL 的过滤函数中发现了一个漏洞,允许将代码提取到 Windows 启动文件夹,在 Windows 重启之后执行。
现在,McAfee 研究人员报告该漏洞正被利用安装难以检测的恶意程序。

  编程随想注:
  WinRAR 这个软件,早就该丢到垃圾桶了——这玩意儿不但是【闭源】滴,而且还要【注册】。让人非常不爽!
  WinRAR 的完美替代品是【7zip】——不但【开源】、【免费】,而且还【跨平台】。
  顺便说一下:
  如果对压缩率要求【不】高,俺通常用 zip 格式,因为这种格式已经成为【事实标准】(比如:俺网盘分享的 HTML 格式电子书,会把多个 HTML 打包成一个 zip)
  如果对压缩率要求【很】高,俺通常用 7z 格式(很多情况下,7z 压缩率超过 rar)

◇apt 高危漏洞

Debian 官方安全公告
Remote Code Execution in apt/apt-get @ 漏洞发现者的博客

  编程随想注:
  apt 是 Debian 发行版默认使用的【软件包管理器】。考虑到 Debian 有【非常多】的衍生发行版,apt 的影响面非常大。
  这个漏洞(CVE-2019-3462)很危险!因为 Linux 用户通常会以【root】身份运行“软件包管理器”。所以,apt 的“远程执行漏洞”,会让攻击者直接获得【最高权限】。

  【不彻底】的解决方法:
  当然是升级到修复该漏洞的 apt 版本。

  【彻底】的解决方法:
  除了这次,apt 在【2016年】曾经曝光过安全漏洞(CVE-2016-1252)。所以,咱们可以合理地怀疑——apt 的网络模块中还存在其它高危漏洞。
  (对于使用 apt 的同学)俺认为彻底的解决办法是——搭建【私有的】升级镜像。搞了这个玩意儿之后,你的 apt 工具只是通过【内网 or 本地文件】的方式获得升级包。因此,apt 就算有安全漏洞,至少漏洞也【不会】暴露到公网上。这种玩法,本质上就是——【降低攻击面】(这句话也是俺经常唠叨滴)。
  搞了自己的升级镜像后,你可以用其它网络工具(rsync、curl、wget)从发行版的官方网站同步升级包。由于“同步升级包”的操作可以用【普通用户】的权限进行(甚至可以在另一个 OS 中进行),即使用来同步的网络工具出了安全问题,也不至于太惨。
  升级镜像的另一个好处是——如果你有多个【同种的】OS,采用私有的升级镜像,可以大大提升速度——(传输一次,升级 N 次)。对于使用虚拟机的同学,这个好处会特别明显——你可以把私有的升级镜像放在 Host OS,然后每个 Guest OS 都可以从 VM 的共享目录获得升级包。

★网络与 Web

◇针对“域名服务商”的 DNS 劫持攻击

研究称 DNS 劫持攻击规模惊人 @ Solidot

攻击者首先设法窃取目标 DNS 服务商管理面板的登录凭证,然后修改目标域名的 IP 地址,将其指向攻击者控制的服务器。攻击者之后再利用 Let’s Encrypt 自动生成合法证书。当用户访问目标域名,他们会先访问攻击者的服务器然后再重定向到合法服务器,整个过程用户唯一的感觉可能就是延迟略微增加。攻击者之后能收集到用户名和密码,而终端用户对此几乎一无所知。

  编程随想注:
  这种攻击手法,再次凸显了【DNS】与【CA 证书】的重要性。攻击者如果【同时搞定】这两者,就可以实现【完美的钓鱼】。关于这点,俺在9年前(2010)的某篇博文中提到过:

既然老流氓 CNNIC 已经成为合法的 CA,那它就能堂而皇之地制作并发布 CA 证书。然后捏,再配合 GFW 进行【域名污染】。那 GFW 就可以轻松搞定任何网站的 HTTPS 加密传输。
……
可能有些小朋友心里会犯嘀咕:GFW 会有这么坏吗?俺想篡改鲁迅他老人家的一句话来回答:俺向来是不惮以最坏的恶意,来推测党国。GFW 和 CNNIC 作为党国的2条走狗,一起进行中间人攻击(一个负责在 DNS 上做手脚、另一个负责伪造 CA 证书),简直是“天生一对、黄金搭档”啊!

  引申阅读:
数字证书及 CA 的扫盲介绍
CNNIC 证书的危害及各种清除方法

◇可【突破两步验证】的网络钓鱼工具

New tool automates phishing attacks that bypass 2FA @ ZDNet

  编程随想注:
  波兰的安全研究人员 Piotr Duszyński 发布了名为“Modlishka”的工具(该名称是波兰语“螳螂”)。这个玩意儿可以实现【更逼真】的钓鱼攻击,并且可以突破【两步验证】
  该工具本质上是一个【反向代理】,其原理类似于“中间人攻击/MITM”(由“钓鱼网站”充当中间人)。受害者看到的界面,是从【真实的】网站传回到钓鱼网站的界面,受害者输入的密码,也会被转发给真实的网站。“两步验证”在这种攻击面前是【不堪一击】滴。

  这种钓鱼攻击能否成功,关键在于 CA 证书。如果钓鱼网站使用的是“貌似合法的 CA 证书”,则浏览器【不会】弹出“无效证书”的警告,因此受害者也就【不会】怀疑网站是假的。
  由于创建“貌似合法的 CA 证书”,正变得越来越容易(参见前一个小节提到的手法),因此这种钓鱼也就变得越来越危险。
  俺的建议是——
  你在某个【专用】的浏览器实例中操作特别重要的帐号(也就是说,这个实例只操作这个帐号,不进行其它操作)然后在该实例中采用【证书白名单策略】——只留下这个帐号对应网站所需的 CA 证书,其它证书全部禁掉。
  浏览器的选择:
Chrome 和 Firefox 都可以创建【多实例】,但 Chrome 有个缺点——Chrome 用的是操作系统的证书。因此,Chrome【无法】使用上述招数。
相比之下,Firefox 使用的是【自带证书】。因此,你可以创建多个 Firefox 实例,并通过配置让每个实例的证书都采用各自的【白名单策略】。

◇Google 的公共 DNS 服务正式支持 DoH(DNS over HTTPS)

谷歌公共 DNS 正式支持 DoH 加密 @ cnBeta

  编程随想注:
  Google 的公共 DNS,也就是 8.8.8.88.8.4.4 这俩。
  其实这两个 DNS 在去年就已经提供 DoH 服务,但还处于【试运行阶段】。从2019年1月,开始【正式】支持 DoH。
  关于 DoH 的好处,可以参考俺之前的博文:
对比4种强化域名安全的协议——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS
扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”

  关于浏览器的支持:
Firefox 从 62 版本开始支持 DoH,具体参见 Mozilla 官方博客(链接在“这里”)。
Chrome/Chromium 从 66 版本开始支持 DoH。具体参见 Chromium 官网的 issue(链接在“这里”)。

★移动设备

◇2018年全年,针对移动设备的攻击,堪称有屎以来最高

Mobile malware evolution 2018 @ Securelist

  编程随想注:
  上述报告来自 Kaspersky Lab。
  俺已经在博客上唠叨无数次了——【不要】用手机操作重要帐号,也【不要】用手机进行敏感活动。

◇大部分 Android 杀毒软件【不】靠谱

三分之二的 Android 杀毒应用没有价值 @ Solidot

杀毒软件测试机构 AV-Comparatives 测试了 Google Play 商店里的 250 款杀毒应用,检查这些应用对 2000 恶意应用样本的检测情况。结果显示,只有 80 款应用能阻止最少数量的恶意样本。不到十分之一的应用能阻止所有恶意应用,超过三分之二的应用检出率不到 30%

◇贝佐斯的手机被入侵

贝索斯手机隐私遭入侵,疑为沙特政府所为 @ 搜狐
Jeff Bezos investigator: Saudi Arabia obtained private information @ CNN

  编程随想注:
  作为目前的世界首富,而且还是顶级 IT 公司的老板,贝佐斯显然拥有顶级的安全顾问团队。
  如果连他的手机都会被入侵(而且是被“深度渗透”),这说明啥捏?你自己想一下吧。
  另外,
  博客的长期读者都知道,俺特别喜欢抹黑朝廷,中国政府的御用骇客也老早就盯上俺了(请看“这篇博文”和“这篇博文”)。
  俺写“煽颠性质”的博文,已经【十年】。至少到今天,俺还没有倒下。其中一个重要经验是:俺【从不】在手机上使用这个身份。
  当然啦,除了这个经验,还有其它很多经验,具体参见:
为啥朝廷总抓不到俺——十年反党活动的安全经验汇总

★安全工具

◇几款主流的【密码管理器】都有安全缺陷

  下面是由 ISE(Independent Security Evaluators)发布的一篇挺详细的评估报告,涵盖了最常用的几款密码管理器(LastPass、KeePass、1Password、Dashlane)。
Password Managers——Under the Hood of Secrets Management @ ISE

  编程随想注:
  考虑到那篇报告很长,而且是洋文,俺简单说一下。
  几款主流密码管理器的缺陷,都与【内存】有关——比如说:有的软件居然把【主密码】(master password)以【明文形式】留在内存中。
  像这种做法,一旦遭到【冷启动攻击】,攻击者就可以拿到主密码,进而拿到管理器中的所有密码。
  即使不考虑“冷启动攻击”,如果你的系统开启了【休眠功能】,内存中的主密码(在休眠时)会被保存到硬盘的“休眠文件”中。因此,如果你遭遇了警方的【取证软件】,你的“主密码”(master password)同样有曝光的风险。
  引申阅读:
如何用“磁盘加密”对抗警方的【取证软件】和【刑讯逼供】,兼谈数据删除技巧

◇NSA 发布【逆向工程框架】——Ghidra

NSA 官网
Ghidra @ Github

  编程随想注:
  该软件本身能运行于 Windows、Linux、Mac OS 三大主流操作系统,可以分析多种处理器指令集。
  该工具仅限于政府内部使用。直到前几年,维基解密公布了美国国安局(NSA)内部资料(Vault7),这款工具才开始为人所知。
  另
  该工具开源之后不久,被发现自身有安全漏洞,如今已修复。

◇Metasploit 发布 5.0 版本

  Metasploit 是大名鼎鼎的【渗透测试框架】,主要用于安全攻防人员。不了解的同学请看“维基百科”。
  这是它在【2011年】之后首次发布新版本(大版本)。增加的新特性参见“这个链接”。

★操作系统

◇匿名操作系统的对比

最好的匿名操作系统 @ Solidot

安全研究员 David Balaban 对比了五个匿名操作系统:Tails OS,Whonix,Kodachi,Qubes 和 Subgraph,分析了各个系统的优缺点。Qubes 和 Subgraph 都是隔离应用来实现安全,它们其实不是为匿名设计的。Tails OS 基于 Debian,所有流量都经过 Tor,设计作为 Live CD 或 Live USB 使用,不在主系统留下痕迹,会话结束之后所有痕迹就抹掉了,它不适合作为一个永久性的操作系统使用。Whonix 也是基于 Debian,通过 VirtualBox 和 Tor 实现匿名,内置了大量应用,但不具有可携性,硬件需要也比较高。Kodachi 基于 Debian,通过 VPN 和 Tor 实现匿名,硬件需求不高,作者认为它是目前最好的匿名操作系统。

  编程随想注:
  如果你对安全性(包括隐匿性)要求很高,但又【不】擅长技术,上述对比可以供参考。
  对于擅长折腾的同学,俺建议选某个 Linux 或 BSD 的【成熟】发行版,然后根据自己的需要进行【高度定制】(裁剪),只留下自己需要的部分(从而把攻击面降到最低),然后再搭配上自己需要的加固措施。

★硬件相关

◇Spectre & Meltdown 漏洞的普及性文章

How the Spectre and Meltdown Hacks Really Worked @ IEEE

  编程随想注:
  一年前(2018年初)曝光的 Spectre 和 Meltdown 在信息安全界可以称得上是【划时代】滴!因为其利用的是 CPU 的【设计缺陷】(而且还是【根本性】缺陷)。不熟悉这两个漏洞的同学,可以看维基百科的介绍(这里这里
  上述文章是专门研究这两个漏洞的三个学者在今年2月份撰写的【扫盲性质】文章,介绍漏洞的【原理】。
  为了说明这两个漏洞极其难搞定,再引述一篇今年2月份的报道:
Google Researchers Say Software Alone Can’t Mitigate Spectre Chip Flaws @ Slashdot

◇针对英特尔处理器的新型 Spoiler 攻击

所有英特尔处理器面临新的 Spoiler 攻击 @ Solidot

美国和德国的计算机科学家在预印本网站 ArXiv 上发表论文(PDF),披露了针对英特尔处理器的新攻击 SPOILER。他们在英特尔内存子系统私有实现中发现了地址推测的一个弱点,能透露内存布局数据,让翻转比特的 Rowhammer 攻击更容易执行。研究人员检查了 ARM 和 AMD 处理器,但没有发现它们表现出类似的行为。新的漏洞很难在不重新设计处理器微架构的情况下修复或缓解。Spoiler 攻击不同于 Spectre 攻击,它无需提权就可以在用户空间利用。研究人员称,Spoiler 大幅加快了 Rowhammer 和缓存攻击。Rowhammer 翻转比特攻击影响所有处理器,但要利用 Rowhammer 你可能需要花费数周时间,而在 SPOILER 的帮助下,攻击将可以在数秒内完成,Rowhammer 攻击将变得切实可行。

  编程随想注:
  简单扫盲一下【Row Hammer 攻击】
  如今的集成电路,集成度越来越高。这种攻击利用相邻内存单元之间的电磁影响,在足够多的访问次数后让某个比特的值改变(0、1 互换)。因此也称为“比特翻转”(洋文叫“bit flipping”)。
  假如攻击者能够修改某些【关键的比特位】,就可以实现【权限提升】或【代码执行】。
  在硬件层面引入 ECC(error-correcting code),可以【部分防止】这种内存错误;但某些精心构造的“Row Hammer 攻击”能绕过 ECC 的防护机制。

◇超微(Super Micro)主板的 BMC 后门

超微服务器主板组件爆漏洞 @ 新浪

这项漏洞是出现在超微主板上的基板管理控制器(baseboard management controller, BMC)上。BMC是一个具高度权限的组件,提供多种接口,包括系统接口、IPMB接口、LAN及Serial/Modem接口,可让数据中心管理员通过智能平台管理接口(Intelligent Platform Management Interface, IPMI)指令远程执行、或在服务器不开机状态下安装操作系统、安装修改app、或对多台服务器变更状态。然而由于BMC提供的接口对系统内、外部来的IPMI指令欠缺足够验证,因此常被用来传送恶意IPMI指令、或遭恶意软件挖掘BMC漏洞。
……
Eclypsium研究人员挑选IBM的SoftLayer云裸机服务进行了概念验证攻击,原因是SoftLayer服务执行在超微服务器上。IBM SoftLayer的裸机云服务提供企业客户租用,服务期满客户资料删除后,可以再租给下一家企业。在实验中,研究人员租用了SoftLayer服务、在其Supermicro的BMC上修改了一些程序代码,开了一个名为Cloudborne的后门,并且在其BMC的IMPI界面中新开另一个用户账号。之后再将服务还给IBM,又再租了新服务。
研究人员发现,在转换客户期间,IBM SoftLayer的确进行了回收(reclaimation)过程,将多的账号清掉,但是BMC被植入的后门还是在,显示并未经过刷新。研究人员表示,结合漏洞让黑客得以利用后门读取托管在同一台服务器上的新企业客户的云环境,以窃取数据、发动Dos攻击,或是植入任何恶意软件。

  编程随想注:
  俺在去年底的博文《每周转载:盘点一下贸易战爆发后的【中美对抗】(2018年4季度)》,提到了如下:

《彭博商业周刊》报道称——
在中国组装的超微主板被植入了恶意芯片,黑客借此渗透了美国政府和大型企业的数据中心,受影响的企业包括了亚马逊和苹果。

编程随想注:
到俺写本文为止,这几家公司(超微、亚马逊、苹果)都发表声明予以否认。此事目前有争议,尚未定论。
从技术上讲,这么做是【可行】滴。硬件层面的安全漏洞能规避操作系统的安全防护机制。

  如今,超微主板的 BMC(基板管理控制器)被发现有缺陷,可以被攻击者用来留下后门。而超微的某些主板是在咱们天朝组装滴。
  这两件事情,很容易让人产生联想。

◇隐藏在 USB 线里的 WIFI

隐藏在 USB 线里的 WIFI @ Solidot

你可能认为 USB 线没什么可怕的,大多数人都会随身带些 USB 线以方便给便捷式设备充电或访问设备内部资料,但如果看起来一模一样的 USB 线包含了隐藏的后门?你插上之后就容易遭到网络攻击?
安全研究员 _MG_历时一个月制作的O.MG Cable,将 WIFI 微控制器秘密安装在 USB 连接器内,能通过 USB 设备发送载荷,实现远程控制

★安全编程

◇微软产品的漏洞,有【七成】源自“内存问题”

Microsoft: 70 percent of all security bugs are memory safety issues @ ZDNet

  编程随想注:
  熟悉 C/C++ 的“程序猿/程序媛”,应该很清楚小标题所说的“内存问题”是指哪些。举个栗子:安全漏洞中大名鼎鼎的【缓冲区溢出】(包括“栈溢出”和“堆溢出”),都与内存问题有关。
  前几天,俺的网盘上分享了两本书,分别是:《C 语言安全编程规范》和《C++ 语言安全编程规范》。
  这两本书出自 CERT/CC,权威性应该是 OK 滴。

◇哪些编程语言的漏洞更多?

Which Programming Language Has The Most Security Vulnerabilities? @ Slashdot

Across the seven most widely-used programming languages, here’s how the vulnerabilities were distributed:

C (47%)
PHP (17%)
Java (11%)
JavaScript (10%)
Python (5%)
C++ (5%)
Ruby (4%)

  编程随想注:
  上述统计只针对【7种】流行的编程语言,统计数字来自 TechRepublic 网站。
  C 语言占了接近一半,这在意料之中(参见前一个小节)。C++ 的漏洞显著低于 C,这很大程度得益于 C++ 标准库中提供了很多“类/模板”(比如:string、vector、shared_ptr),可以封装原始类型,尤其是指针。C 语言经常要【显式】进行内存分配/释放。而在 C++ 中,很多内存分配/释放变为【隐式】(在封装库内部完成)。
  另,
  C++ 的漏洞比例竟然【低于】Java 和 JS,俺还是有点小小的惊讶 🙂

俺博客上,和本文相关的帖子(需翻墙)
为啥朝廷总抓不到俺——十年反党活动的安全经验汇总
如何保护隐私》(系列)
如何防止黑客入侵》(系列)
如何隐藏你的踪迹,避免跨省追捕》(系列)
“对抗专制、捍卫自由”的 N 种技术力量
如何用“磁盘加密”对抗警方的【取证软件】和【刑讯逼供】,兼谈数据删除技巧
对比4种强化域名安全的协议——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS
扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”
弃用 Chrome 改用 Firefox 的几点理由——关于 Chrome 69 隐私丑闻的随想
数字证书及 CA 的扫盲介绍
CNNIC 证书的危害及各种清除方法