我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

妹纸说不要我搞社工库

这个博客创建于精子 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:有,等着。

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

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

订阅推送

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

王子亭的博客 @ Telegram


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

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