我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
标签 #黑客

为什么我总是在黑「黑客」

和一些人从「黑客技术」入门计算机不同,我似乎从一开始就对所谓黑客技术没有什么兴趣。一开始当我刚刚听说黑客这个词的时候,因为大多数人对黑客精神的崇拜,我也对黑客这个称呼心存敬畏,但当我掌握了更多的知识,接触了更多的人和事之后,越发觉得黑客技术并不高端,黑客也不值得敬畏。在最近两年,黑客被洗白成了「白帽子」,入侵被洗白成了「信息安全」,一开始我觉得这似乎还是个好现象,但后来我觉得这其实也不见得有多少正面意义。

无论在哪里,只要提到黑客这个词,总有一批人跳出来为黑客洗白,而且会把黑客洗成「黑帽子」,「白帽子」,「骇客」,「红客」或者其他各种颜色。我觉得这样挺无趣的,有太多的词已经不是它本来的含义了,而且黑客这个词很模糊,总是被用来制造神秘感。如果是为了显示自己的专业性,介绍自己的职业,不如换成交互设计,桌面编程,代码审计,数据库运维等更具体的词。

我总是在吐槽某某知名 Web 安全界人士的编程水平不过关,当然,他们也确实不过关。会写代码是最低的标准,代码应当首先是写给人看的,顺便能在机器上运行。无论多么短小的程序,都应当考虑可读性和可维护性,并应用各种用于避免错误的技巧。对于如何提高可读性,如何避免错误,不同的人可能会有不同的观点,但是作为代码的作者,在写代码的时候至少应当考虑过这些问题。我认为绝大部分信息安全相关的工作,都需要首先是一名程序员,有过构建真正应用的经验才行。

我有这样的观点是因为我在思考一个问题,「信息安全」的最终目的是什么呢?我认为目的是为了减少程序的漏洞,但是现在业界的普遍目标是「发现更多的漏洞」。的确,发现漏洞是减少漏洞的前提,但是现在业界对于「发现漏洞」的热情实在太高了,以至于忘记了真正的目的。

比如说前一阵的 Heartbleed 事件,首先发现这个漏洞的人值得喝彩。但是随后几天,就开始有很多人在乌云网上提交各种网站没有更新 OpenSSL 的问题。在这些人看来,发现漏洞就是自己的目标,但他们从未想过如何能够减少漏洞。

我认为减少漏洞的途径应当是培养更多具有安全意识,能够写出高质量代码的程序员,专职的信息安全专家当然也要有,但至少他们应当曾经是一个「具有安全意识的程序员」。以我自己举例,我算是一个不太主流的程序员,除了写代码之外,我还花了更多时间学习新的技术,和新的知识——虽然这些知识可能我永远也不会在工作中用到。我虽然从未专门学习过有关「信息安全」的技术,但是因为我一直在研究如何编写更安全的代码,所以我对「信息安全」也算是触类旁通,甚至发现漏洞的水平也在一些人(通常被经常给黑客洗白的人称为「脚本小子」)之上。

很多没有学习过编程,而是首先开始学习信息安全的初学者,思维都很僵化。举个简单的例子,他们很难认识到「XSS」和「SQL Injection」其实是同一类攻击手法——注入 HTML 和注入 SQL. 也很难区分加密(Encryption), 编码(Encode)和散列(Hash)——因为它们似乎都是在把一个可读的字符串「加密」成一个不可读的字符串。所谓 SQL 注入不过是 SQL 的一个特例而已,如果你没有用过 SQL, 而直接学习如何注入,那你恐怕得一直按照「大牛」们总结的注入方法来实施,很难自己发现新的攻击方式,这就是我所说的,编码是 Web 安全的基础。

比如现在有些 Web 安全方面的书,在繁复地罗列一些很相似的攻击手法,并未抽象出其中的联系和规律,使读者只能照着做,而很难有所启发。更不要说这些书将安全与编码完全割裂了开来,并传达「代码只是工具,会写就行了」的思想。这样的书却被一些人奉为神作,这又印证了我之前的观点:太多人在以发现漏洞为目标,而不是减少漏洞。

最后,我的观点就是认为,直到目前,至少国内的「信息安全」的行业还处于一个非常原始的状态。当然,没有事情是完美的,我也期待这个行业能够迅速地成长起来。

妹纸说不要我搞社工库

这个博客创建于精子 7 岁第一天上学的时候,之后的十几年里精子的成长和价值观的改变是很大的。
所有的日志发布之后除了错别字都不会再修改,因此他可能并不完全同意早期日志中的观点。

简单说,社工库是这样一个神奇的东西,你只需要输入一丁点信息,如QQ号,或姓名,手机,就可以查到一个人的其他个人信息。除了QQ, 姓名,手机外,还会有身份证,住址等等,甚至包括他在各大网站的帐号和密码。

行外人可能惊奇于它是如何实现的。事实上网络比你想象得要险恶得多,各大互联网公司时刻都在收集你的个人信息。一个人,一个公司,总会有疏忽,这些资料一旦被泄露出来便无法挽回。久而久之,从这些泄露的资料中找到一个人显得十分简单。

所谓社工库就是要将这些泄露的资料汇总到一起,让查询更为方便,自动化。同时通过计算,在这些资料中挖掘出更多的关联。已经有人在这么做了,但我觉得我能做得更好,所以我开始对这个项目感兴趣。现在流行谈“大数据”,一个人掌握百G级别的数据并加以利用,是很有诱惑力的。

但这种项目的法律风险是显而易见的,我意识到,一旦我付出了努力,我绝不会放弃,也不会甘心于“内部使用”,我一定会(视图)将它做大,但相应的风险是我承受不了的。

于是我决定放弃这个项目,但我依然希望有人能够实现它,所以接下来我将描述关于这个项目我所设想到的所有技术细节,如果有人感兴趣,我可以进一步提供技术方面的指导,不感兴趣的看到这里可以洗洗睡了。

我决定给它起个代号叫做 BC.

BC计划由PHP编写,PHP是最通用,最容易部署的Web语言之一。事实上BC中,PHP的逻辑很少,大部分工作是数据库来完成的,所以使用PHP之外的其他语言来实现也没有问题。当然,如果你需要收费的话,还需要引入一个用户系统。

我决定使用三款数据库:MySQL, MongoDB, Memcached.

MySQL用于储存用户数据,和其他的一些数据量较少的信息。这是因为相比于MongoDB, MySQL还是更为稳定和成熟的。

社工库的主体由MongoDB储存,MongoDB在平时是只读的(平时需写入的数据在MySQL中).

每一份泄露出来的资料都有不同的格式,比如 .mdb, .xls, .sql, 纯文本等等。

我们必须将它们以统一的格式导入到MongoDB中,否则一切都是空谈。

我能想到的最为通用的格式是CSV, 上述各种格式都可以很轻松地被转换到CSV, 而PHP内置了对CSV的支持,更何况自行解析简单的CSV也并不复杂。

我们需要为每一份导出的CSV编写PHP脚本,以将这些数据逐条导入到MongoDB中,好在各个CSV差不多只是字段顺序上的区别。

每一份资料所包含的字段都可能不同,不过这也没有关系,反正MongoDB是无模式的。

至于查询,就很简单了,接下来我们讨论性能优化。

如果不对MongoDB进行索引,那么每次查询都需要遍历百G级别的数据,这是无法容忍的。

BC的情况略为复杂,用户名,QQ, 手机号,这些字段都可能被用作查询。

所以我建议,先使用1G左右,较为典型的数据进行实验,根据结果对查询量最高的2-3个字段添加索引。

分片是MongoDB的重要功能之一,通过分片可以将查询均衡到多台服务器,利用更多的内存来加速查询。

借助于分片,理论上BC可以实现无限扩充,至于片键,还需要通过之前的实验来选择,当然,我觉得更大的可能性是选择用户名做片键。

除了最为基本的查询,我们还可以提供更多的功能。

如通过用户名,查询到了一个手机号,我们可以自动地根据这个手机号继续查下去,挖掘出更多可能同属一个人的信息。

但这样,原来一次简单的查询就可能变成十几次查询,这将会对数据库造成极大的压力。

细想一下,如果没有新的信息(泄露资料)加入,那么查询的结果是不会改变的,所以我们要引入缓存。

Memcached是一种选择,不过实际上,使用文件来缓存已经足够。

我们缓存每一次查询的结果(可以直接是HTML输出)到文件,再有重复的查询时,我们无需经过数据库,只需访问文件缓存即可。

而每当有新的泄露资料加入时,我们要清空缓存。

对于服务器选择,我的建议是选择同在内网的若干台服务器,一台提供Web服务,其他的作为MongoDB以及缓存服务器。

选择2G内存的服务器,每台储存50G的数据。数据服务器不接入外网,Web服务器通过内网向数据服务器进行查询。

至于盈利模式可以选择会员制,以下功能都是收费点:

  • 是否可以使用索引之外的字段进行查询
  • 是否自动查找关联帐号
  • 是否仅可以查看缓存

附我前几天在邪红色论坛发的帖子:

我也想搞个社工库,大家意向如何

如题

我一毛钱的库都没有,但我有资金,有技术,有兴趣。

我对社工什么的不是很了解,我主要是对“大量的数据”感兴趣。

功能:

一个搜索框,可以搜用户名,QQ,邮箱,手机号码等。

查询结果可显示符合条件的帐号的更多信息。

同时,还会显示和这个帐号相关联的其他帐号(例如他们都使用了同一个手机号码).

同时利用这些数据我们还会搞一些公益的项目,如统计最为常用的密码等等。

盈利模式:

每月收取会员费,不限查询次数,未付费用户限每天1-10次查询。

显示关联帐号也算会员的高级功能。

上传新数据可抵会员费。

技术细节:

数据库使用MongoDB, 服务器打算用Linode的服务器,使用Linode的主要原因是数据服务器不用外网IP,直接用内网。

我会为每一个社工库写脚本,统一转入我们的数据库,进行统一的分析。

工期:

一个月出雏形,两个月正式运营。

FAQ:

Q:会员费大概多少?

A:预计如果是100G左右的数据,会员费大概在10元/月,如果数据量增加,会员费显然也要加。

Q:如何防御攻击?

A:因为数据服务器没有公网IP,不会被DDOS. 提供Web服务的服务器即使被DDOS,也可以随时再开一台新的服务器。

Q:不限查询次数的会员帐号如何防止被人互相借用,导致没人购买新的会员

A:登录帐号即可直接修改密码,对被盗帐号不予找回,看谁还敢借别人——敢借的都是真朋友,我们就不管了…

Q:邪红色有特别福利么?

A:有,等着。

重谈黑阔(二)

接上篇,这一篇讲我混过的(国内草根)黑客圈。

重申,这个话题相当有争议,如果你持不同观点,且有信心说服我,请留言或直接找我;如果你不打算说些什么,则你大可以不和我一般见识;如果你只是想要个说法,那么我很明确地表示我害怕任何人攻击我的网站。

在这里,完全是另一个世界。黑客技术与入侵划了等号,所谓黑客社区中充斥着“提权”、“破MD5”、“社工”、“数据库打包下载”,很高兴我没看到“刷砖”…
早些时候还有搞破解和外挂的,现在要么消失要么自立门户了。
这些黑客社区打着“自由”、“开放”的旗号,却在限制(论坛)访问,更有甚者卖会员,收徒。
除此之外,还有那从未消失过的,有关黑客精神实质的口水战。

虽然更普通的叫法是Cracker, 但我更喜欢称他们为黑阔。

一部分的黑阔社区是这样的模式,一个大哥,忽悠着一群小弟,大哥卖卖会员收收徒,发发小财。
还有一部分则是不懂装懂的小弟们互相忽悠。这个过程中,很多技术被神化了,如社工,如最近比较火的XSS. 他们将这些技术奉为圣经,凡是提到,必须围观一下;不挨边的,短时间用不上的,则不屑一顾。
黑阔们不求甚解,只要找到的工具、代码能用,方法可行,能黑下来站,那就是好的。很多时候他们只是在“无差别日站”——看看哪个站自己黑得下来,再给自己一个一定要黑掉它,而且看上去正义的理由,比如当年蒙牛官网被黑的那次,我是经历过的,还有前一阵钓鱼岛扯出的一些事件,无外乎这种心理。
大部分黑阔只是在混QQ群,混论坛,YY, 读一些零散的文章。也有一些认真点的会系统地看一些书或者视频教程。然后——挑自己黑得下的站尝试一下。

我非常瞧不起这种浮躁的学习方式,所谓知己知彼才能百战不殆,要学如何进攻,先学如何防守。这绝不是什么哲学上的东西,而是实实在在的经验。
虽然我从未正面学习过入侵技术,但凭借在“如何编写等待被入侵的网站”方面的经验,我可以猜出都有哪些入侵方式,如何防御,甚至背后的原理是什么。
跳过“守”这个基础来速成是不可能的。

说到底,大多数草根黑阔只是把学黑客技术当作一种廉价的,体现个性的方式,交友的方式。他们也不需要多少时间的学习就可以进入一个与众不同的圈子。随自己心情黑几个站,盗几个号,很有成就感不是么?认为自己技术很牛X的人可以衡量一下自己到底花了多少时间来学习,有多少时间是在严肃地学习,别人又需要多少时间能达到你的水平,是否仅仅是为了融入黑阔的圈子,寻找认同感。

很多黑客组织有一种官僚的作风是我很不喜欢的,明明没多少人,没什么内容,就要先搞一套等级制度…不过也难怪,既然是要寻找认同感,建立小圈子,这是很重要的一步。

前几天爆出一篇文章(http://taosay.net/?p=189), 先不论其真实性,掌握了顶尖(之前我们讨论的都是草根)的黑阔技术,确实就拥有了极大的权利。和恐怖分子、高官、富豪手中的权利相比,具有更强的隐蔽性,只要部署足够周密(如跨越多国的代理), 几乎无从调查。这种权利,利益的驱使,让一些人堕落,但我相信在不久的将来,这个领域同样会受到法律的约束。

入侵会促进网络的发展是确实,但它同样也有极大的危害性。但建立强健的网络,需要黑客们的探索和创新,黑客们的成长需要实践,但这种实践又是破坏性的,这是一个矛盾。
但乌云网(http://www.wooyun.org/), 给黑阔洗白提供了一种非常有效的尝试,乌云网提供了一个平台,让黑阔们在破坏性较小的入侵后,及时向厂商提交漏洞的信息,并在一段时间内对漏洞细节进行保密,以供厂商修复,同时建立了一个社会化的排名系统。它的高明之处在于降低了黑阔的破坏性的同时,又给了黑阔们如往常一样的成就感,这是一个好的开始。

总结,可以看到,这和上一篇完全是两个世界,我不认为黑阔们具有传统意义上的黑客精神。他们是随着互联网发展必须出现的一个群体或者说行业,在进行破坏的同时也在促进行业发展和相关法规的完善。这个新兴行业目前还非常不规范,其中一些人的行为确实令人生厌。

后记,这篇日志写的很艰难,我花了一些时间,在脑海里拾出了之前我对黑阔的种种吐槽,有长有短,短则几十字,多则百字,写在本子上。然后在电脑上将这些零散的文字片段衔接在一起,就成了此文,很散啊。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.