个人信息安全

“所有黑客手段中最有效的、最伟大的幻想艺术—-社会工程学”

最近参加一个线下聚会,其中在讨论信息安全的时候了解到不少当下的企业和个人安全现状。我从几年前开始担忧的事情实际上还是发生了,这使我不禁想起几年前看的一部关于黑客的德国电影《我是谁:没有绝对安全的系统》(《Who Am I - Kein System ist sicher》)。

这部电影的最后主角遇到了一个几乎不可能攻破的系统,但是他从系统的使用者下手在最后的几次剧情反转中阐述了一个思想:”人不能总藏在他的计算机后面,最大的安全漏洞并不是存在于什么程序或者服务器内,人类才是最大的安全漏洞“。

##前言

好像是近几年开始专门从事安全行业的人士越来越来越多,也许是各个大企业对安全越来越重视进而培养了大批的安全相关从业者,渐渐的这些相关人士创建了不少专门从事安全行业的企业。这直接带来的结果是企业的软件漏洞越来越少,还使用以前的那种通过软件和系统漏洞入侵企业系统的方式渐渐开始非常困难。而通过对企业内部人员的渗透攻击或利用不健全的安全制度对企业的攻击,理论上是可以攻破任意企业、组织和网站的。

无论软硬件系统多么安全,只要其使用者和相关人员和社会存在交互,其必然会或多或少,有意无意的泄露一些信息。这些信息可能是企业的也可能是个人的,鉴于现在大部分非安全人员,特别是对外部门的人员对个人信息的保护缺乏必要的安全意识。其针对自身的安全规则和认知或多或少会反应和影响到企业内部的安全设置,更别说现在频繁的大数据泄露问题。在经过长期的数据分析后,相信已经存在不少根据搜集的个人信息预测口令和密码的代码和相关脚本。现在的信息泄露都为的是将来在某个时候将其价值转换到最大,或者仅仅是一个个大数据的预测样本,所以对大部分人来说由于其个人信息并不能带来多大的利益,最多也就被当做基本信息进行倒卖吧(笑)。所以从这个角度来说,对大部分人来说除了关注自己的支付,其余的信息泄露了就泄露了。当然也能出现一些比较严重的问题,比如被别人伪造身份从事一些违法活动等。

##加密与存储

首先是目前后台比较常用的用户密码管理方式。

  • 非明文储存:这算是最基本的安全措施了。但是经过这么多年的发展,很多时候都懒得解密你的密文,直接查表(彩虹表)就可以了。所以大部分情况,特别是以为MD5无法破解进而随便md5一次就存数据库的那种,基本上和明文存储无异。更何况很久之前就流传MD5碰撞解密的,而且2月23号谷歌还宣布使用SHA-1算法碰撞,俨然哈希算法有岌岌可危的势头(笑)。

  • 加盐Hash:加盐算法实际上就是给明文加某个字符串再进行hash算法的加密方式(当然具体的加密算法自己选择)。关于加盐hash详见这片文章《Salted Password Hashing - Doing it Right》。而很多时候又有认为多次hash安全性更高的情况,而大部分组合式哈希其实意义不大。多种哈希含函数相互使用甚至发明自己的加密算法,只能造成更多的问题甚至造成新的安全隐患。

接下来就聊一聊加盐加密。

加盐加密由于有很强的定制性,所以在实际环境中有非常不错的效果。在使用中有一个强度问题,强度越高易用性越差,这在目前几乎是无法兼得的。这也是普通软件和系统面临的最大问题,比如windows的UAC如果使用起来确实比较安全,但是普通用户肯定会非常反感。就像明明知道不同网站使用一套用户名密码不安全,但是时间一久就觉得非常麻烦干脆就用一套好了。

企业环境下情况非常复杂,如果是明星企业肯定会被不少人专门去关注,这时候对于加密和存储肯定会有要求的强度就不一样了。对于加盐Hash来说关键就是盐的设置,理论上如果盐值是无规则,并且没有被黑客获得,那么即便整个系统被攻破,拿到所有的代码和数据库,账号信息依旧是无法被有效破解的。

企业环境中,尤其是现在的互联网企业环境下。除了加密的盐值,所有的一切都是不可靠的。比如加密算法可能在手机客户端被逆向获得,更加严重的是内部人员泄露服务端代码,数据库被攻破等。这时候需要设计随机盐算法,避免黑客简单的获取单个盐值生成彩虹变。

那么传统的安全领域又是如何做的呢?简单来说系统的设计之初都是相对安全的,在使用中对于密码的关注点有两个:数据的通信保护和数据的存储保护。而为了避免对密钥的泄露甚至会有多级密钥管理体系,如主密钥对二级密钥进行加密,二级密钥用作对数据的加密。但是还是老问题在使用中我们无法保证这个过程的安全性,所以更加极端的情况是执行加密操纵为一个独立的黑箱,如专门的硬件设备。而对于主密钥和二级密钥的管理也成为了重中之重,对安全要求较高的系统甚至有“一次一密”的要求,即频繁的更改密钥。

至少我们可以认为银行这些部门的安全是绝对可靠的,所以请至少确保这类场合使用独立的密码,并且这些密码和个人信息没有任何必然联系。更不要是证件号,生日等,说不定哪天你就会把这些信息分享到公开的网络环境中。

我们日常使用最多的服务都是互联网相关,这些服务由于用户量非常巨大,并且交互非常频繁,过于严格的安全措施也许会成为系统性能的瓶颈。即便那些大企业有非常完善的措施,可以保障即便数据泄露了也无法获得我们的敏感信息。但是我们使用的那些小企业的服务又有多少保障呢,我们设置同样的密码,如果这些小企业的数据被攻破,即便大企业有再好的安全措施也无济于事。

##社交网络与公共网络环境

“人类天生胆小且容易受骗”。“人们只看到他们愿意看到的”

一般情况下为了强化记忆,会选择容易记忆和与日常生活相关的信息帮助记忆。简单的浏览一下朋友圈信息流和自己公布在公共网络环境下的信息,看是不是和自己的安全信息存在直接或间接的关系?那怕这些关系多么的微弱,经过长年累月运行的分析程序也可以轻易的预测出。更何况现在大数据和机器学习异常的火热,更别说不断翻倍的计算机性能以及专门优化过的各类算法,甚至还有不太成熟的量子计算机。

如果一个自称是你好友,并且熟知你信息的人和你联系,你到底信还是不信?

如果公司对外部门收到一份合作伙伴的要求,他们会先去核实还是立刻去做?

开源项目被注入代码,如果没有被及时的发现,你在使用的时候会发现吗?

你会打开陌生人的邮件和不加思考的运行好友发来的程序吗?

你会把个人的敏感信息保存在文档中并上传云服务保存吗?

你会把公司的敏感信息写在邮件中发给同事吗?

“你的脸皮要足够厚,那样世界就会在你的脚下”

对于社交网络和公共网络环境的使用是一个长期过程,在这个过程中随时随地我们都可能放送警惕,泄露自己的敏感信息。甚至如果你是一个比较重要的人物,还会被针对的进行分析。而普通人更可能在长期运行的脚本中顺便就被当做样本信息使用了。

对于大多数人认为安全的最后一道防线,短信验证码,也是可以通过某些手段被嗅探的。更何况还有便携式伪基站,对于没有互联网知识和安全知识的朋友来说,简直到处都是陷阱。

获得个人信息大多时候仅仅是个开始,黑客可以通过这些信息伪造身份,甚至混进企业内部而不被发现,通过正规的手段绕过软硬件安全防护。比如你们公司的保安会每次都把你叫住核实你的身份吗?打卡机对身份的认证也仅仅是嘟的一声吗?看到一个和公司名同名的wifi会输入密码吗?在公共场所连接到一个wifi会毫无防备的打开各类应用吗?

##个人信息安全

个人信息安全,除非你拥有多套身份信息。比较敏感的信息使用另外一套专门的独立身份,否则我们很难在日常使用中保证其不被泄露。即便你密码有多么复杂,我们也难以保证每次的使用环境都是安全的。

即便如此我们也要尽量避免这些,我们能做的其实只有安全的保存和使用自己的密码。就像最开始说的那样,安全性和易用性难以兼得,除了那些极客和安全相关从业者外又有多少人能坚持下去呢?我们能做的就是仿照企业对安全信息的管理来管理自己安全信息,由于个人信息遇到各类极端情况比较少,我们可以做某些取舍,如以下几种情况,

一、基本安全措施:设计多个等级的安全密码。按照使用服务的敏感度设置几个强度不同的密码,将其分开管理。也是最基本的安全措施了,同时兼顾了一定的易用性。

二、全部使用独立安全信息:所有服务都使用独立的安全密码。这是比较常规的也是最难坚持使用的方法。毕竟分级密码可以在使用中被记住,进而避免由于密码在储存时泄露。全部使用独立密码由于记忆困难,专门的存储反而又增加了危险性,并且由于使用繁琐,最终难以坚持。

三、第三方密码管理工具:如果对密码安全有所关注的朋友也许会知道这些密码管理工具,比如跨平的laspass和iOS/Mac平台的1password。这些应用会储存已有的密码,或者根据算法随机给你生成密码当做密码进行保存。这样的好处是给人一种感觉,我自己都不知道密码别人怎么会知道。但是一旦应用主密码被攻破,相当与所有信息全被泄露。至少到目前为止1password没有出现这类问题,但是前一段时间有传闻说某CDN提供商出现漏洞,影响到1password,但也仅仅是传闻而已。

四、自定制密码管理:就是自己定制密码规则和管理方式,接下来专门针对此问题进行说明

###自定制密码管理

这里使用前面说过的一种方案:加盐加密。为了增加易用性要做出不少牺牲,我们可以从服务端的已有方案进行精简。个人觉得最低的限度为静态密文,动态盐的方式。这样做是为了便于使用,静态密文意味着可以不需要存储,所以关键就是盐值和算法。而算法请不要自己实现,无论你有多么厉害,请不要自己创造新的加密算法。另外由于自己使用可以不需要特别复杂的算法,或者计算后密文过长的算法。

目前比较常规的使用方式是:encrypt(静态/分级原始密码 + 盐(系统特征值))

这里系统特征值最最简单的情况是使用目标系统的域名。这样可以保证不存储任何密码和盐的信息,而达到基本的随机盐。加密算法就根据自己的容忍度进行选择,毕竟某些系统是不支持复制粘贴密码的,这种情况下就要手动输入一长串无规则的密码。

这是有一些解决方案供我们使用的,它们提供一定的跨平台工具,并且只提供加密算法。由于其不存储任何信息,理论上是非常安全的。当然有规则就有可能被针对性的发现,所以更加严格的话可以使用第三方密码管理软件提供的随机密码,然后使用另一套系统提供的无规则随机盐。将两套无关系统当做密码和盐在第三套系统中进行加密,进而输出最终密码。但是又过于繁琐,实际上实用性不高。

对于开发者可以通过自己实现的应用轻松将复杂的存取和加密逻辑进行简化,就像手机的口令软件那样在使用是计算出密码。

##最后
目前常规陷阱和以前不同,现在是广撒网愿者上钩。这样直接过滤掉安全意识强,几乎不会上当的人。因为这些人反正又骗不到何必是浪费精力,而那些主动联系的人基本都会被骗到。所以如果不是那种特别频繁的骚扰信息,请不要回复或者直接与骚扰者接触。如果只是一个普通的骚扰短息你就去回复退订什么的,那么就会默认你是活跃用户反而会变本加厉。并且尽量不要和这些人联系,即便对方可能知道你的个人信息。

那些自导自演的骗局,比如捡到你快递包裹贴纸联系你说要更改供应商,否则会收你多少钱什么的,然后联系警察和银行什么的,这种直接挂掉屏蔽此号码,不要浪费口舌了。就像前面说那样,每个人个人信息基本都泄露的差不多了,任何和你谈钱的陌生人请直接挂掉电话,中奖短信和邮件更是不要回复。资金周转,缴费什么的请到已认证账号或者线下。

最后以上强调引用的部分出自电影《Who Am I》。