动态 帖子 3 评论 9 短评 0 收到的赞 送出的赞
  1. 差生文具多   在小组 国家局域网研究所 回复文章

    一种可能可行的墙内直连从官方渠道下载Tor的方法(利用GetTor)

    网警看不到你用tor,网警不关心也没有必要关心你是不是在用tor……

    很多翻墙用户高估了自己对网警的价值,这些翻墙用户没有也不打算也不可能发表任何有价值、有争议的政治言论,不存在独立的opinion。类似于看完电视新闻之后跑到你面前,跟你复述主持人用到的新词。他们对“网警”的价值几乎为零。

    但是这部分用户却因为恐惧中共,在加固网络安全上投入了不成比例的精力,这种做法不仅是自己吓唬自己,也吓唬其他人。宣传中共的技侦手段多么强大、多么高明,客观上起到了帮助中共维稳的作用。

    我的建议是,翻墙软件足够掩盖tor流量,如果不放心,里面设置obfs4网桥一样可以起到混淆的作用。有兴趣的还可以试试i2p。

    Tor团队的开发人手有限,TBB换装Arti还要几年。不过Arti已经发布了1.x版(production ready),Arti的代码库里有官方的Arti+TBB教程: https://crates.io/crates/arti

  2. 差生文具多   在小组 国家局域网研究所 回复文章

    一种可能可行的墙内直连从官方渠道下载Tor的方法(利用GetTor)

    先用迷雾通翻墙,再用tor浏览发帖就足够了,tor自带的可插拔传输未必比迷雾通安全性更高。

    普通人上网,应该多关注社会工程方面的安全,关注网络安全是好事,但也不必对一些安全特性太较真。

    真要较真的话,Tor的代码经过十多年的开发已经很难维护了,事实上很多人追求的“安全上网”的根基就建立在屎山上。如果可能的话,可以用Arti(tor团队开发的rust版本)作为tor的替代品。

  3. 差生文具多   在小组 国家局域网研究所 回复文章

    《连线》杂志报道rust:接管技术的安全编程语言

    我认为原因是C/C++存量代码大,毕竟有过去30多年的积累,rust要短时间“替代C”几乎不可能,很多老项目还会招C++程序员来做。

    还有一个原因是人才问题,一代的CTO都是学C++过来的(例如编程随想),他们做技术选型的时候当然愿意选技术更成熟、自己更熟悉的C系语言来做。

    从招聘需求也能看出来,传统技术,老项目用C系的多,新技术、新项目用rust的多,例如加密货币、分布式数据库。

    我个人认为学C++和学rust完全不矛盾,用过C++以后,用rust的感觉是:真香。而且学rust也可以反过来加深对C++的理解。

  4. 差生文具多   在小组 国家局域网研究所 回复文章

    有什么客户端的JS白名单工具可以根据JS的实际内容决定是否加载?

    不行,Tor浏览器的限制程度有限。如果只追求安全,那么Tor浏览器确实够用了,但有些用户希望在限制危险JS API的基础上,自己做更多定制。

    举个例子,Vibration API允许JS代码震动设备,仅从安全角度讲这个API是无害的,但少数网站(特别是弹窗)利用这个功能骚扰用户。再比如Page Visibility API在Tor浏览器上是可用的,这API可以允许JS了解当前网页是否对用户可见,网课前端检测用户状态就是这个原理。

    我认为这些恼人的问题不是JS的缘故,而要归结于网页设计者不尊重用户。如果可能,浏览器应该提供禁用这些API的选项,或者更进一步提供虚假值,给用户提供更多的选项

  5. 差生文具多   在小组 国家局域网研究所 发表文章

    Arti: 一个用内存安全语言Rust实现的Tor节点程序

    大多数情况下提到Tor,指的是用C语言实现的Tor。说起Tor大家会想到安全、隐私,然而事实上,C语言实现的Tor经过十多年的开发迭代,代码已经变成了屎山。

    你没看错,用Tor团队的说法,目前C语言实现的Tor的情况是

    What's more, our existing C implementation has grown over the years to have a not-so-modular design: nearly everything is connected to everything else, which makes it even more difficult to analyze the code and make safe improvements. One thing that we found, however, was that our existing C code was not modular enough to be easily rewritten. (Rust's security guarantees depend on Rust code interacting with other Rust code, so to get any benefit, you need to rewrite a module at a time rather than just one function at a time.) The parts of the code that were isolated enough to replace were mostly trivial, and seemed not worth the effort—whereas the parts that most needed replacement were to intertwined with each other to practically disentangle. We tried to disentangle our modules, but it proved impractical to do so without destabilizing the codebase.

    简单来说,Tor开发团队试着用Rust语言向Tor代码中添加一些新功能,结果发现旧代码耦合在一起,修改一处,其它地方就要出乱子,不得已只好彻底推翻重写。

    从前年(2020)开始,Tor开发团队就开始着手用内存安全语言Rust重写Tor,重写后的Tor叫做Arti,架构设计更合理,开发语言Rust当然也更安全。目前Arti已经推出了1.0,可以用于生产环境。

    有人会问,Go或Java不也是内存安全语言吗?这个Arti不能用Go或者Java重写吗?

    先不谈性能问题,只就语言设计来说,Rust语言的不止有内存安全的特点,它还有很多非常严谨的代码防呆设计来阻止你写错代码,除非你编程思路有问题,或者故意写错代码,否则很难出错。Tor开发团队也有相同的感慨:

    At every stage, we've encountered way fewer bugs than during comparable C development. The bugs that we have encountered have almost all been semantic/algorithmic mistakes (real programming issues), not mistakes in using the Rust language and its facilities. Rust has a reputation for being a difficult language with a picky compiler - but the pickiness of the compiler has been a great boon. Generally speaking, if our Rust code compiles and passes its tests, it is much likelier to be correct than our C code under the same conditions.

    (在开发过程的每个阶段,我们遇到的错误都比用C语言开发的对应阶段少得多。我们遇到的 bug几乎都是语义/算法错误(即真正的编程问题),而不是使用Rust语言本身和开发设施的错误。Rust以复杂的语言和挑剔的编译器而著称——但是挑剔的编译器是一个很大的优点。一般来说,只要我们的Rust代码编译并通过了测试,那么比起C代码,相同条件下Rust代码就更可能正确。)

    除此之外,Arti还在Tor的基础上,添加了很多新的安全特性,例如对流量分析的抵抗能力。

    目前安装Arti需要电脑上有Rust编译器,如果你已经安装了Rust编译套件(Cargo),可以运行以下指令安装Arti:

    cargo install arti
    

    如果没有安装Rust,可以参考Rust官网的指南安装Rust编译套件

  6. 差生文具多   在小组 国家局域网研究所 回复文章

    VirtualBox+Whonix隔离方案和Whonix设置中文环境

    whonix用来跑暗网服务应该是神器,双重虚拟机+安全强化。可惜在中国不太适用,国内网络上先翻墙再跑服务反而增加了风险。

    whonix有一个不错的用途是跑XMR全节点,因为全节点无法用代理,可以把全节点扔进虚拟机里面运行。

  7. 差生文具多   在小组 国家局域网研究所 回复文章

    迷霧通到底咋了?一分鐘恨不得掉線5次。

    #195476

    这是两码事。

    付费用户花钱买服务,完全有资格对服务不稳定提出意见。你模仿的这个例子的恰当类比场景是:付费用户要求迷雾通添加各种额外功能,这种情形确实不在服务方的义务之内。

    不过说回来,迷雾通每次大规模掉线之后都会补偿用户时长,这也没有什么可以指摘的。

  8. 差生文具多   在小组 国家局域网研究所 回复文章

    有什么客户端的JS白名单工具可以根据JS的实际内容决定是否加载?

    我想到两种办法:

    1. 写一个油猴子脚本,记录下网站JS的md5,如果md5发生改变则不再加载。缺点是很多网站的js都会定期更新,有可能网站更新了,但是你的插件发现md5不匹配把它拦截了。

    2. 可以考虑拦截敏感JS API,我认为这个更可行,但是工程量较大。举例来说,dom操作是非敏感api,其它api都可以考虑拦截,比如臭名昭著的webrtc(可绕过代理获取真实ip),beacon(经常用来跟踪用户),还有各种乱七八糟的ajax请求也可以直接拦了。

    多说一句,我认为js api缺少有效的权限管理,大多数js api是完全无害的,它们只用来改变网页的显示效果。但还有一些js api权限很大,比如很多网课会用js检测用户是否打开了当前tab,这就侵害了用户的自主权。我认为最好可以像安卓那样,由用户选择性的禁用一些api。

  9. 差生文具多   在小组 国家局域网研究所 发表文章

    谈谈thphd的《对养猫君对葱爆的分析的分析》一文的错误之处

    对养猫君对葱爆的分析的分析

    我最近翻站里的旧文章,发现这篇一年以前的文章里充斥着大量的IT常识错误,作者的语气还颇为自信,气势很能唬住一些外行读者。这样一篇充满低级错误的文章以贵站(前)站长的身份发在站里,实属拉低了贵站技术的上限。不知那些专业的IT人士看到这样一篇文章,会对2047的技术水平作何感想?因此,我认为有必要写一篇文章,指出《葱爆的分析的分析》的错误之处。

    thphd在这篇文章中的技术分析有很多错误。我不清楚是他自己一知半解就信口开河,还是自己清楚但故意误导读者。比如,技术分析部分的第二段就是如此:

    MySQL遇到磁盘已满的情况,并不会返回DISK_FULL错误并拒绝服务,而会直接当场卡死,除非非常了解mysql工作原理,否则只能强行重启:https://dev.mysql.com/doc/refman/8.0/en/full-disk.html

    我很疑惑thphd是否真的看过这个链接里的内容,这个链接里讲的是MySQL如何处理磁盘写满的情况。根据MySQL文档的说明,在磁盘写满时,MySQL并不会“卡死”,而只是每隔一分钟检查一下是否有足够的空间写入,如果有空间就写入,没有空间就不写入,就好像什么都没发生一样(it continues as if nothing had happened)。

    就算不去读MySQL的文档,凭常识也可以推断出,MySQL作为一款全世界最流行的数据库系统,背后又有Oracle这样的公司支持,必然会考虑到磁盘写满这样的常见情况。所谓MySQL“卡死”纯属缺乏计算机常识的臆测。

    这篇文章里更有一些极度缺乏常识的观点,例如:

    因为开机过程也是需要写入磁盘的,磁盘空间不足可能导致开机卡死。而云服务器无法开机就连不上,也就无法进行远程操作

    我不知道thphd是否有操作Linux系统的经验。Linux系统非常可靠,这和我们日常使用windows电脑的经验不同,即使硬盘写满,内存占满,CPU使用率100%,也不会影响正常使用,当然也不影响远程连接。事实上在商业环境中,操作系统满负荷重载运行是很正常的事情(包括偶尔写满硬盘),否则公司投资了昂贵的IT基础设施又不能跑满,岂不是严重的浪费。

    下面的分析更是看似有理,实则是满篇的胡说八道:

    所以另一种情况是,品葱站长强行重启了服务器,开启了数据库,数据库尝试从上一次强行重启的地方开始恢复。由于几乎所有数据库都依赖某种b+tree,而b+tree最流行的实现是leveldb(myrocks),leveldb极度依赖底层磁盘的顺序写入特性,如果底层磁盘(这个例子中是虚拟磁盘)不完全是顺序写入的(例如为了性能开启写入缓存),那么强行重启就会导致丢失最近写入的几个ldb文件,而leveldb在这种故障模式下完全无法recover(因为作者假定磁盘是强顺序写入的),使得强行重启有一定几率会导致丢失自上次启动数据库以来的所有数据。

    常见的数据库管理系统由存储引擎和外部的“wrapper”构成。存储引擎是数据库的核心,其本质是一棵查找树(B树、B+树、LSM树),通过查找树可以高效地完成数据读写等数据库基本功能。外部的“wrapper”负责解析命令、查询规划、用户认证等功能。

    要查看mysql的存储引擎,可以在MySQL控制台输入show engines。下图所示列出了MySQL使用的存储引擎,可见其中并没有thphd提到的“leveldb/myrocks”

    事实上,MySQL最常用的存储引擎的是InnoDB和MyISAM。InnoDB是芬兰公司Innobase在2005年开发的一款存储引擎,MyISAM是MySQL团队基于IBM ISAM开发的存储引擎。而LevelDB是谷歌公司在2011年发布的一款嵌入式数据库,和MySQL风马牛不相及。

    再进一步,thphd对LevelDB存储特性的分析,也是完全错误的:

    leveldb极度依赖底层磁盘的顺序写入特性,如果底层磁盘(这个例子中是虚拟磁盘)不完全是顺序写入的(例如为了性能开启写入缓存),那么强行重启就会导致丢失最近写入的几个ldb文件,而leveldb在这种故障模式下完全无法recover(因为作者假定磁盘是强顺序写入的),使得强行重启有一定几率会导致丢失自上次启动数据库以来的所有数据。

    从技术角度说,leveldb并不依赖底层磁盘的写入特性。确实,LevelDB对底层存储设备做了“顺序写入速度大于随机写入速度”的假设,这是为了优化写入性能。这种实现叫做LSM树(Log Structured Merge Tree,日志结构合并树),而不是thphd所说的B+树。好了,这里thphd又犯了一个知识性错误。

    LSM树会把对数据的修改变化缓存在内存中,达到一定的大小限制后,将这些变化批量写入磁盘。确实,在LSM树把数据写入磁盘之前,断电会导致数据丢失,然而LevelDB中数据缓存-写入的间隔非常短,仅为几百毫秒。换句话说,如果你在1秒的时间内,向LevelDB写入数据然后断电,那么这1秒内写入的数据确实会丢失,但是只要超过1秒,数据就会永久写入磁盘,不管怎么断电都不会影响数据,除非磁盘本身损坏。

    再退一步说,LevelDB的作者是谷歌首席程序员Jeffrey Dean,并且在开发过程中得到了谷歌的大力支持。就算你对我或thphd说的一切表示怀疑,你应该可以相信谷歌顶级程序员的实力——LevelDB经过了无数苛刻环境的考验,重启电脑并不会丢失大半年的数据,否则谷歌首席程序员就不要混了。

    至于看了《对养猫君对葱爆的分析的分析》信以为真的网友,这不是大家的错,毕竟术业有专攻,不能要求每个人都是IT专家。但是贵站的前站长thphd暗示自己是“IT从业人士”,却发表这样一篇错误百出的文章,我想只有两种可能:要么是 1) 拉大旗扯虎皮,用专业名词忽悠外行,证明自己对“葱爆”的原因推测正确,进而达到污蔑其它网站的目的。要么就是 2) 没有基本的网络常识,被抓迟早的事。

    相关资料:

    [1] MySQL存储引擎:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

    [2] MySQL磁盘满的行为:https://dev.mysql.com/doc/refman/8.0/en/full-disk.html

    [3] LevelDB:https://github.com/google/leveldb

    [4] LSM-tree: https://en.wikipedia.org/wiki/Log-structured_merge-tree

  10. 差生文具多   在小组 国家局域网研究所 回复文章

    不建议日常使用chrome绿色版

    可以尝试一下Chromium浏览器(和Chromium内核是不同的东西),这个是从Chromium编译来的浏览器,去掉了Chrome的自动更新和遥测,可以一试。

  11. 差生文具多   在小组 国家局域网研究所 发表文章

    《连线》杂志报道rust:接管技术的安全编程语言

    https://www.wired.com/story/rust-secure-programming-language-memory-safe/

    Rust 被称为“内存安全”语言,因为它旨在使程序不可能意外地从计算机内存中提取意外数据。当程序员使用不具备此属性的强大语言(包括 C 和 C++)时,他们必须仔细检查程序将请求哪些数据以及如何请求的参数——即使是最熟练和最有经验的开发人员也会偶尔执行这项任务拙劣。通过使用 Rust 编写新软件,即使是业余程序员也可以确信他们没有在代码中引入任何内存安全漏洞。

    很少见到大众媒体报道这样专业的领域。