mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-11-19 23:53:47 +08:00
mod
This commit is contained in:
55
极客时间专栏/安全攻防技能30讲/特别加餐/加餐1 | 数据安全:如何防止内部员工泄露商业机密?.md
Normal file
55
极客时间专栏/安全攻防技能30讲/特别加餐/加餐1 | 数据安全:如何防止内部员工泄露商业机密?.md
Normal file
@@ -0,0 +1,55 @@
|
||||
<audio id="audio" title="加餐1 | 数据安全:如何防止内部员工泄露商业机密?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/b1/39/b1fd66b264e9989e0b01469519eab639.mp3"></audio>
|
||||
|
||||
你好,我是何为舟。前面讲了这么多期正文,今天,我们通过加餐,来聊一个比较轻松的话题,数据安全。
|
||||
|
||||
我们先来看一个新闻。2017年,公安破获了一起涉及50亿条个人信息泄露的[重大案件](https://www.thepaper.cn/newsDetail_forward_1636851)。经调查发现,犯罪嫌疑人竟然是京东的一名试用期员工郑某鹏。还有非官方的消息说,这个郑某鹏,先后在亚马逊、新浪微博等知名互联网公司,利用试用期的员工身份,下载用户的隐私信息进行倒卖。
|
||||
|
||||
如果你稍微关注过这方面的新闻,就会发现,这种事情真的不少。Code42在2019年发布的[数据泄露报告](https://www.code42.com/news-releases/code42-global-data-exposure-report/)称,有69%的公司承认员工曾泄露过公司数据。其实,这些数据泄露的行为就是我们要关注的数据安全。
|
||||
|
||||
从广义上来说,数据安全其实是围绕着数据的CIA三元组来展开的。我们之前讲过,应用的本质就是数据,因此,我认为任何与安全相关的内容,其实都可以涵盖到数据安全中去。那从狭义上来说,数据安全就是如何防止员工泄露公司的敏感数据。国内公司主要关注的还是狭义上的数据安全,因此,我们今天所要讨论的也是狭义上的数据安全。
|
||||
|
||||
## 为什么员工会主动泄露公司机密?
|
||||
|
||||
那作为员工,为什么会主动泄露公司数据呢?我曾听过这样一句话,觉得非常有道理:“生活中有两个悲剧。一个是你的欲望得不到满足,另一个则是你的欲望得到了满足。”人的欲望总是无穷无尽的,而且一旦萌生,就极难克制。对于大多数人来说,泄露公司机密,无非有以下几个常见的出发点。
|
||||
|
||||
我认为,第一个肯定是赚钱,这也是最容易想到的一个。员工利用公司来赚钱的方式,无非有3种。
|
||||
|
||||
- 倒卖公司数据。对于任何一家公司而言,数据一定是其最有价值的部分。而员工往往能够很轻易地获取到一些私密的内部数据。在黑市上,个人的姓名、手机号和住址等信息,都能够以每条几毛甚至是几块的价格进行交易。除此之外,竞争对手之间,也很乐意出高价来收购对方的商业机密。
|
||||
- 欺诈。最典型的就是“吃回扣”,也就是利用公司采购流程的漏洞来获得非法收益。比如,一个和电商有关的欺诈行为,就是员工给自己发放内部网站的高额优惠券。
|
||||
- 贪污。采购投标、拉拢客户这些环节,都极容易出现贪污现象。
|
||||
|
||||
第二个出发点,我认为可能是员工出于对公司的不满而实施的报复行为。互联网公司往往变化非常快,员工被公司突然裁掉的事情这几年屡见不鲜。被裁员工心怀不满也是常事。除此之外,一些主动辞职的员工,出于对现阶段工作内容和收入的不满意,也会心生怨怼。我们常常拿来当玩笑说的“删库跑路”就是最常见的报复行为。
|
||||
|
||||
第三个出发点就是跳槽。说白了,就是跳槽后的员工,以原公司的核心数据为资本,服务下一家公司。我们经常能够听到相关的新闻报道,比如,某个销售总管跳槽,把客户也一并带走了;或者某个leader带着得力员工一起跳槽。这些客户关系或者员工,其实都是公司的核心资产。所以,一个内部员工,可以将他手中的这些资产,作为跳槽的一个筹码,来实现个人的职业发展。
|
||||
|
||||
第四个是商业间谍。这个你应该在很多商战类的电影和电视剧中经常看到,这些间谍会为了原始公司的利益打入对手公司的内部。这样的员工一开始就是怀揣着某种目的进入公司的。除此之外,一些黑灰产的从业人员也可能为了窃取某个公司的数据,去应聘这个公司。
|
||||
|
||||
第五个其实和利益就没有直接关系了,只是员工为了满足自己想要炫耀的心理,对外泄露信息。尤其是某些大公司的员工,他可能为了证明自己能够知道一些内部消息,而将内部的活动规则、公司通告等在微博或者脉脉上进行宣扬。这些敏感信息的泄露,对于公司的正常运营以及声誉,都有可能产生非常严重的影响。这也就是所谓的“员工一张嘴,公关跑断腿”。
|
||||
|
||||
## 如何防止内部员工泄露机密?
|
||||
|
||||
现在,我们大概知道了,员工一般会出于什么心理去泄露机密。了解了这些问题的“源头”,我们就需要思考,如何基于这些情况,做好数据安全,防止出现泄密情况。
|
||||
|
||||
我认为,在数据安全上,我们能做到的防护其实十分有限。因为数据安全所面临的威胁,不仅复杂度很高,而且隐蔽性极强。所以,我们只能通过各种手段,尽可能地降低数据安全带来的影响。下面,我总结了几个可行的方法和手段。
|
||||
|
||||
最直接的方式就是背调。背调是公司用来评判人品的一个直接方式。公司通过对员工过往工作行为和资历的调查,就能够看出员工是否值得信任。但我们不得不承认,一个公司在背调时,能够获取到的信息十分有限,根本没有办法和公安、政府相比。这也导致背调的准确性得不到保证,比如开头提到的郑某鹏,他能够以应聘者的身份入职多家知名公司,就是因为这些公司在背调时没有发现他的真正目的。
|
||||
|
||||
那除了前期招聘时的背调,我们还有什么其他方法来做防护吗?当然是有的。
|
||||
|
||||
DLP(Data leakage prevention,数据泄露防护系统)应该是目前数据安全中,最基础也是最重要的技术防护手段之一了。从原理上来说,DLP就是监控公司内部所有的数据流动,对数据的内容、类型和流向等进行统计和分析。不过,目前的DLP产品,更多的是关注员工个人设备中的数据流动。这主要是因为相比于服务器,个人设备的使用范围更广,不容易控制。而且,服务器的数据流动太大,监控成本也过高。
|
||||
|
||||
那DLP 是如何监控数据流动的呢?一般情况下,公司在部署了DLP产品之后,会强制员工在电脑上安装一个DLP的终端。公司会通过这个终端,监控员工设备中的各种数据流动。换一句话说,只要公司需要,可以随时掌握员工在个人电脑上获取了哪些数据、进行了哪些操作。不得不说,这确实在一定程度上侵犯了员工的个人隐私,但这也是目前公司为了保障数据安全,所采取的一些不得已的手段。
|
||||
|
||||
另外,公司还可以对员工的行为进行异常检测。为啥要这么做呢?这是因为,一个员工,如果想要贩卖公司的数据,那他就需要获取自己职责之外的大量数据。比如,如果一个客服在下班之后,还频繁地查询用户的个人信息,那么这个客服就很有可能在窃取公司的隐私数据。想要对员工的行为进行异常检测,公司需要先对各类员工的行为进行采集和数据分析,然后制定对应的规则和模型,从而区分员工的正常行为和异常行为。
|
||||
|
||||
最后,公司还可以制定相应的规章制度,对破坏公司利益的员工进行处罚和公示,这些都能够对员工产生威慑作用,从意识和心理上阻止员工泄密。
|
||||
|
||||
## 总结
|
||||
|
||||
好了,今天的加餐内容就是这些。虽然说,关于数据安全的防护,我们主要是站在企业的角度来讨论的。但是这些违法事件的发生,还是给我们自己“敲响了一个警钟”。提醒我们要坚守自己的道德底线,不去做违法的事情。
|
||||
|
||||
## 思考题
|
||||
|
||||
最后,还是给你留一道思考题。你见过哪些泄密行为?这些行为对被泄密的公司产生了什么影响?如果可以的话,你可以讲讲,你们公司是如何防止员工泄密的。
|
||||
|
||||
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!
|
||||
213
极客时间专栏/安全攻防技能30讲/特别加餐/加餐2 | 前端安全:如何打造一个可信的前端环境?.md
Normal file
213
极客时间专栏/安全攻防技能30讲/特别加餐/加餐2 | 前端安全:如何打造一个可信的前端环境?.md
Normal file
@@ -0,0 +1,213 @@
|
||||
<audio id="audio" title="加餐2 | 前端安全:如何打造一个可信的前端环境?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/4f/5f/4f7369007ca80d262344b3d751a0f45f.mp3"></audio>
|
||||
|
||||
你好,我是何为舟,欢迎来到安全专栏的第二次加餐时间。
|
||||
|
||||
前端的安全性一直是我们在考虑安全问题时,没有办法绕过的关键问题。今天,我就来和你聊一聊如何保护前端的安全性。
|
||||
|
||||
我们先来看一个攻击事件。2017年,12306网站被曝出有“买下铺”的功能。我们都有过买票的经历,当我们在12306上买卧铺的时候,是没法选择上铺、中铺还是下铺的。但是,有人去分析了12306的前端代码,发现里面其实包含了选铺位的功能,只是默认为随机,没有展示出来。所以,有人通过篡改前端代码,就将这个功能开放出来了。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/92/73/92d2a4d2e1f7ed9a52aa8c70617b1573.jpg" alt=""><br>
|
||||
一旦黑客能够完全摸清楚应用的前端代码,就能够任意地篡改前端的逻辑,实现带有想要功能的前端应用了。
|
||||
|
||||
如果说12306的例子,还不足以让你对前端安全产生警惕的话,你可以想一想,我们在网上看到的各种所谓的“破解版”软件,其实都是人为修改了应用的前端认证功能,从而不需要认证就可以正常使用。
|
||||
|
||||
除了篡改前端代码,黑客还可以通过对前后端接口的调用过程进行分析,复刻出一个自己的前端应用。在黑客复刻的前端应用中,所有的接口认证和加密都合法,只是调用的顺序完全由黑客掌控。粉丝圈比较流行的各类明星应援工具,其实都是基于这个原理实现的:黑客通过分析微博客户端的接口,自己打包了一个前端应用,实现了一键关注、点赞等功能。因为这些接口都是合法的,所以后端人员很难分辨出这些请求是来自于正规的应用,还是黑客自己实现的应用。
|
||||
|
||||
针对前端的攻击可以说是“防不胜防”,这让后端没有办法信任前端的环境,甚至没有办法信任前端发起的请求和上传的数据,极大地影响了公司和应用的正常发展。那么,我们应该通过什么方法来保障前端的可信呢?
|
||||
|
||||
## 什么是混淆技术?
|
||||
|
||||
要解决这个问题,我们可以先想一下黑客攻击前端的过程:黑客通过分析前端代码,来篡改前端逻辑,实现带有想要功能的前端应用。那有没有一种方法,无法让黑客在前端代码中分析出有效信息呢?答案就是**混淆**。
|
||||
|
||||
在理想状态下,我们混淆了前端代码之后,不仅能让黑客无法篡改前端代码,还能保证即使黑客成功篡改代码,那么篡改后的前端代码依然不可用。同时,黑客无法获得前端的接口密钥和签名等信息,也就无法伪造正常的前端应用去发起请求了。
|
||||
|
||||
我们知道,安全中通常不存在理想状态。我们最需要做的,就是不断地升级对抗,来接近这个理想的目标。
|
||||
|
||||
刚才我们说的是混淆技术可以实现的结果,那混淆技术究竟是什么呢?在不同的语言和环境(如:Android 、iOS和Web)中,混淆技术都是相对独立的。尽管混淆技术相对独立,但我还是希望,你可以通过理解一门语言的混淆技术和思路,做到“一通百通”。我也希望能够更好地启发你去思考,如何去做好前端安全。接下来,我就以JavaScript为例,带你梳理混淆的常见技术和思路。
|
||||
|
||||
### 1.清晰代码无序化
|
||||
|
||||
在实际工作中,开发人员总是会要求自己写出清晰简洁的代码。但是,这也为黑客的代码分析提供了便利。因此,混淆的第一步,一定是想办法让我们的JavaScript代码变得“难看”,也就是将整洁的代码变得无序。
|
||||
|
||||
有什么办法能让代码变得“难看”呢?我这里通过一个例子来具体解释一下,你就能明白了。
|
||||
|
||||
我们先来看一段代码。
|
||||
|
||||
```
|
||||
function obfuscate() {
|
||||
console.log("I'm obfuscator!");
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
我们一眼就能够看出这段代码的逻辑:有一个obfucate方法,这个方法会打出一行日志,日志内容为“I’m obfuscator!”。
|
||||
|
||||
在JavaScript中,空格、换行、缩进这些内容,只是为了让代码看起来更清晰。所以,这些对代码没有影响,只是便于开发人员查看的内容,完全可以去除。这样一来,这段代码我们就可以改成下面这样:
|
||||
|
||||
```
|
||||
function obfuscate(){console['log']('I'm obfuscator!');}obfuscate();
|
||||
|
||||
```
|
||||
|
||||
把代码压缩成一行后,黑客想要阅读就已经比较吃力。在此基础上,我们还可以让它变得更“难看”。实际上,JavaScript中的方法名和变量名也不影响逻辑执行,只是开发人员用来表示方法和变量的含义,完全可以用没有意义的随机字符替代。随机字符代替后的效果如下:
|
||||
|
||||
```
|
||||
function _0xc648a(){console['log']('I\x27m\x20obfuscator!');}_0xc648a();
|
||||
|
||||
```
|
||||
|
||||
### 2.简单逻辑复杂化
|
||||
|
||||
对于上面这段无序化后的代码,只要黑客稍微花点心思去阅读,再配合一些JavaScript格式化的工具,也能够弄明白它的逻辑。归根结底还是因为这段代码“太简单了”。那么,我们是不是能够让原本简单的代码变得复杂呢?实现方法有很多种,我们先来看最简单的一种:加入无意义的代码。
|
||||
|
||||
我们还是以最开始的简单代码为例。为了方便你查看,我把前面那段简单代码重新贴在这里。
|
||||
|
||||
```
|
||||
function obfuscate() {
|
||||
console.log("I'm obfuscator!");
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
在这段代码中,本来输出的日志就是一个固定的字符串“I’m obfuscator!”。但是,我们可以先将这段字符串放在一个字典中,然后再通过字典去获取字符串。修改后的效果如下:
|
||||
|
||||
```
|
||||
function obfuscate() {
|
||||
var _0x16df9a = { 'HXGCi': 'I\x27m\x20obfuscator!' };
|
||||
console['log'](_0x16df9a['HXGCi']);
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
这就是通过字典等形式,将常量变成变量的混淆方法。在此基础上,我们还可以加入一些无意义的switch、if和while语句,进一步将代码复杂化。
|
||||
|
||||
除了加入一些无意义的代码,我们还可以加入一些不会被执行的代码,让混淆的结果更有威慑力。比如下面这段代码:
|
||||
|
||||
```
|
||||
(function (_0x2177d9, _0x1442cc) {
|
||||
var _0xb84613 = function (_0x5a2b5f) {
|
||||
while (--_0x5a2b5f) {
|
||||
_0x2177d9['push'](_0x2177d9['shift']());
|
||||
}
|
||||
};
|
||||
_0xb84613(++_0x1442cc);
|
||||
}(_0x1808, 0x1ea));
|
||||
function obfuscate() {
|
||||
console['log']('I\x27m\x20obfuscator!');
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
在这段代码中,中间的function (_0x2177d9, _0x1442cc)就不会被执行,它的目的仅仅是让代码看起来更复杂而已。
|
||||
|
||||
### 3.固定字符动态化
|
||||
|
||||
在我们前面说的这几个混淆代码的例子中,关键字符串“I’m obfuscator!”始终都存在。如果黑客关心的只是这个字符串,那它通过搜索就可以很快定位到。也就是说,通过前面几种方式混淆的前端代码,其中的接口、密钥和签名等信息,黑客还是很容易就可以获取到。
|
||||
|
||||
既然关键字符串“存在”于代码中就不安全,那有没有方法可以让关键字符串“消失”呢?我们可以通过加入一些逻辑,让这些关键字符串只有在实际运行的时候,才会被计算出来。
|
||||
|
||||
最简单、最直接的思路就是,我们可以将关键字符串改成多个字符串拼接的形式。效果如下:
|
||||
|
||||
```
|
||||
function obfuscate() {
|
||||
console['log']('I\x27m\x20o' + 'bfusc' + 'ator!');
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
通过这样改写的方式,黑客就没有办法通过搜索功能,找到“I’m obfuscator!”的位置了。
|
||||
|
||||
但是,这种简单分割字符串的方式很容易被发现。所以,我们可以将这些字符串从它原本的位置拿出来,通过更复杂的方法(如:数组的引用、方法的调用等)来获取。效果如下:
|
||||
|
||||
```
|
||||
var _0x5e96 = [
|
||||
'bfusc',
|
||||
'ator!',
|
||||
'log',
|
||||
'I\x27m\x20o'
|
||||
];
|
||||
(function (_0x520fe6, _0x366376) {
|
||||
var _0x38fe5f = function (_0x456d44) {
|
||||
while (--_0x456d44) {
|
||||
_0x520fe6['push'](_0x520fe6['shift']());
|
||||
}
|
||||
};
|
||||
_0x38fe5f(++_0x366376);
|
||||
}(_0x5e96, 0x15e));
|
||||
var _0x40ca = function (_0x520fe6, _0x366376) {
|
||||
_0x520fe6 = _0x520fe6 - 0x0;
|
||||
var _0x38fe5f = _0x5e96[_0x520fe6];
|
||||
return _0x38fe5f;
|
||||
};
|
||||
function obfuscate() {
|
||||
console[_0x40ca('0x0')](_0x40ca('0x1') + _0x40ca('0x2') + _0x40ca('0x3'));
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
这样一来,黑客想要快速找到_0x40ca(‘0x1’)具体指什么,就需要花上一番功夫了。
|
||||
|
||||
### 4.反调试
|
||||
|
||||
前面3种技术都是直接对源码进行混淆。但是,大多数情况下,黑客在分析代码的时候,不是直接阅读源码,而是通过调试的方法在JavaScript代码运行过程中,获取实际的代码执行方向以及变量的值。因此,为了保护前端安全,我们要采用反调试技术。在JavaScript中,主要有两种方法可以对抗调试:域名锁定和无限断点。下面,我们一一来看。
|
||||
|
||||
**第一种是域名锁定。**
|
||||
|
||||
当黑客来想要分析一个网页的时候,通常会将代码下载下来放到本地运行。但是,我们更希望这个分析过程仍然发生在当前的域名下,这样我们就能够通过请求去分析黑客到底干了什么。因此,我们可以在JavaScript中加入一段域名判断的逻辑。这样一来,当JavaScript运行的环境是localhost(本地主机)域名,或者其他未知的域名时,JavaScript就会产生错误,黑客就无法正常运行下载后的JavaScript文件了。
|
||||
|
||||
我来举个例子。在JavaScript中,我们可以通过window.location.host获取当前域名,然后判断这个域名是否等于网站的域名,比如server.com。如果不等于的话, 说明JavaScript不是通过正常访问域名的形式执行的。因此,JavaScript会直接返回,不执行后续的逻辑。代码如下:
|
||||
|
||||
```
|
||||
function obfuscate() {
|
||||
if(window.location.host != 'server.com'){
|
||||
return;
|
||||
}
|
||||
console.log("I'm obfuscator!");
|
||||
}
|
||||
obfuscate();
|
||||
|
||||
```
|
||||
|
||||
**第二种是无线断点。**
|
||||
|
||||
在调式技术中,我们最常用到的功能就是断点。通过设置断点,我们可以让程序停留在某一个代码或者指令上,方便查看停留的这个时刻中各个变量的具体值是什么。
|
||||
|
||||
在JavaScript中,debugger指令就是用来添加断点的。所以,在反调试的时候,我们可以在JavaScript中开启一个单独的线程,来循环调用debugger。这样一来,如果黑客进入到调试模式,就会不断地停滞在无意义的断点处,从而无法正常调试。在正常运行JavaScript的时候,debugger不会生效,也就不会影响用户的正常使用。
|
||||
|
||||
除此之外,针对提供了额外的JavaScript接口的浏览器(比如Chrome),我们可以通过在JavaScript中检测开发者工具是否开启等特征,来实现反调试。开发者工具是开发人员在调试过程中必须使用的工具,一旦开启,基本就代表已经进入调试状态了。因此,我们可以在检测到开发者工具开启的时候,不去执行正常的JavaScript逻辑,这样就能够起到反调试的作用了。
|
||||
|
||||
好了,说完了这4种混淆技术,我要提醒你一点。这些混淆技术不是独立使用的,而应该是组合使用的。完整的混淆流程应该是这样的:首先,我们可以在原有的JavaScript代码中加入反调试的逻辑,然后通过简单逻辑复杂化和固定字符动态化的方法,隐藏原有的逻辑和反调试的逻辑。最后,通过清晰代码无序化,将所有的额外信息进行剔除,最终将代码变成了压缩成一行的JavaScript文件。
|
||||
|
||||
## 混淆技术有什么负面影响?
|
||||
|
||||
尽管混淆技术是保护前端安全的重要技术,但混淆技术改变了前端代码,就不可避免会影响前端的功能。这也是混淆始终达不到理想状态的一个主要原因。对于JavaScript的混淆来说,它的负面影响主要包括三个方面:增加体积、影响性能和无法分析报错。
|
||||
|
||||
**混淆带来的最直接影响就是增加代码体积**。在固定字符动态化的例子中,原本简单的4行代码经过混淆之后,变成了几十行。如果应用更复杂一些,一个几KB的JavaScript文件经过混淆之后变成几百KB,也是很正常的事情。这样一来,用户网络加载一个大型的JavaScript文件,所面对的消耗、加载时的延迟以及运行时的内存等都会有明显增长。
|
||||
|
||||
除了增加代码体积以外,**混淆还会增加额外的执行逻辑,降低代码执行的速度影响性能**。比如说,console.log本来只是一个简单的指令,但是在混淆之后,JavaScript需要对它进行数据的取值、索引的计算以及字符串的拼接等操作。这样一来,混淆后的代码执行速度必然会下降。
|
||||
|
||||
而且这些无用的操作,事实上是可以无限添加的。因此,在混淆的时候,如何把控复杂化的程度,是我们需要谨慎考量和测试的。
|
||||
|
||||
还有一点是不可避免的,那就是**混淆后的代码,不仅黑客无法阅读,你其实也无法阅读**。在混淆之前,如果前端出现错误,我们可以直接通过错误信息定位错误;但是在混淆之后,错误信息会变得“很难看”,而且代码只会剩下一行,我们也就无法定位了。
|
||||
|
||||
你还需要注意一点:**混淆不可能让代码变得完全不可读**。因为你的代码最终需要执行在用户终端,而执行的条件就是终端能够读懂代码。以JavaScript为例,黑客完全可以自己定义一个浏览器来执行JavaScript代码。这样一来,尽管黑客没办法直接阅读JavaScript文件,但仍然可以通过浏览器执行的指令集和内存环境来进行分析。
|
||||
|
||||
## 总结
|
||||
|
||||
好了,今天的加餐就到这里。
|
||||
|
||||
我们主要以JavaScript为例,梳理了混淆的主要技术和思路。虽然通过混淆,我们能大大增加黑客分析前端代码的难度,但是,混淆同样会给我们的正常工作和应用的执行增加难度,带来负面影响。所以,我们在使用混淆技术的时候,必须要经过谨慎的考量和测试。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/e6/30/e66c15067eed8691b6056c2e115ec830.jpg" alt="">
|
||||
|
||||
## 思考题
|
||||
|
||||
最后,还是给你留一道思考题。
|
||||
|
||||
我们知道,不同的语言和环境,其混淆的技术和思路都存在各自的特点。你可以试着分析一下,在你熟悉的语言和环境中,有哪些方式可以用来进行代码混淆?
|
||||
|
||||
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!
|
||||
98
极客时间专栏/安全攻防技能30讲/特别加餐/加餐3 | 职业发展:应聘安全工程师,我需要注意什么?.md
Normal file
98
极客时间专栏/安全攻防技能30讲/特别加餐/加餐3 | 职业发展:应聘安全工程师,我需要注意什么?.md
Normal file
@@ -0,0 +1,98 @@
|
||||
<audio id="audio" title="加餐3 | 职业发展:应聘安全工程师,我需要注意什么?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/b0/20/b0b49308c18c66a0ae4e0df3a8350520.mp3"></audio>
|
||||
|
||||
你好,何为舟。欢迎来到安全专栏的第三篇加餐时间。
|
||||
|
||||
经常有人会问我:“何老师,我已经学了不少安全相关的攻防知识了,那我该如何成为一名专业的安全工程师呢?”
|
||||
|
||||
今天我就通过一篇加餐,以我在面试时看到的一些简历为基础,来和你聊一聊公司在招聘安全人员的时候在意什么?你又需要注意些什么?
|
||||
|
||||
## 安全岗位有哪些?
|
||||
|
||||
安全是一个跨度很广的领域。所以,对于一个负责公司安全的中高层领导来说,他们当然需要一个对这些领域有全面认知和理解的人。但是,我们作为一名普通员工,经常只专注于某一个领域或者方向,去深入研究。
|
||||
|
||||
虽然在这个课程中,我们一直使用“安全工程师”这个词来指代所有的安全人员,但实际上,不同的公司会根据安全方向的不同,拆分出不同的安全岗位。所以,对于求职者来说,认清自己擅长哪个方向、适合哪个岗位是很重要的。下面,我们先来了解一下,公司中都存在哪些安全岗位。
|
||||
|
||||
首先,我们来看两个最直接也是最普遍的安全岗位:**渗透测试和安全运维**。
|
||||
|
||||
在讲Web安全的时候,我们介绍了一些常见的攻击方式。那么,如何确保公司开发出来的应用不存在Web安全漏洞呢?这就需要**渗透测试人员**来进行安全测试了。对于渗透测试人员来说,自身的安全攻击水平是其最核心的能力。
|
||||
|
||||
在“Linux系统和应用安全”“安全防御工具”这两个模块中,我们介绍了通过应用自带的安全配置和额外的安全工具,来为公司建立一套安全防御体系的技巧和方法。这些工作通常是交给**安全运维人员**负责。对于安全运维人员来说,他们必须熟练掌握各类安全知识和工具,及时发现公司存在的安全隐患,并进行修复。
|
||||
|
||||
渗透测试和安全运维是源于基础安全需求而产生的两个岗位。但随着安全领域的扩张,安全岗位对能力的要求越来越多,因此也衍生出了基础安全之外的一些安全岗位。近几年比较热门的就是**业务安全、开发和算法**。
|
||||
|
||||
业务安全算是近几年比较新兴的安全方向。由于业务安全和传统基础安全的差异性较大,因此,**业务安全**也成为了一个比较独立的岗位。对于业务安全人员来说,他们必须能够了解业务逻辑,掌握黑灰产的攻击方式,这样才能发现产品设计中可能存在的风险,并进行防护。
|
||||
|
||||
在专栏中,我们介绍了很多安全工具。这些工具的开发工作,有的公司会交给渗透测试和安全运维人员,有的公司也会交给纯粹的开发人员来完成。同理,在安全防护过程中,公司需要从海量的数据中挖掘出异常的攻击行为,这就需要专业的算法人员来提供支持了。因此,公司往往会招聘一些不具备安全基础的**开发和算法人员**,来为安全人员提供足够的技术支持。
|
||||
|
||||
最后,随着公司的规模扩张,安全需求也越来越细分。因此,公司会划分出一些安全岗位,来专门负责某一个领域下的安全工作,比如:**安全研究、数据安全、合规审查**。基本上,只有公司的安全团队接近上百人的时候,才会对这些领域进行细分。对于小公司来说,更多的还是一人身兼数职。
|
||||
|
||||
部分安全方向需要长期和黑客进行对抗的,比如:移动安全、AI安全。因此,有的公司会专门招聘**安全研究人员**对这些领域进行安全研究。对于安全研究人员来说,他们必须具备较高的学术研究能力,才能够在某一个安全领域中深耕,达到提升公司安全实力的目的。
|
||||
|
||||
数据安全的主要目的在于防止内鬼泄露公司的机密信息,是一个比较特别的方向。因此,如果公司注重对内部数据的安全保护,就会招聘专门的**数据安全和合规审查人员**,来负责公司数据安全的体系建设。同样的道理,合规专注于研究安全相关法规,让公司在获取和使用用户信息的时候,能够不触犯法律红线。因此,也需要懂得安全法规的人来负责。
|
||||
|
||||
为了辅助你理解这些安全岗位的工作内容和能力要求,我把它们总结成了一张表格。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/9b/2b/9b66856cd10baf9849150202a889b42b.jpeg" alt="">
|
||||
|
||||
## 面试安全工程师,必备哪些安全能力?
|
||||
|
||||
在了解了这些安全的细分领域和工作内容之后,下一步,你可能就会思考,我到底适合哪个岗位?或者,我该专注于提升哪方面的能力呢?
|
||||
|
||||
接下来,我来总结一些安全工程师必备的能力,以及我对这些能力的理解。
|
||||
|
||||
### 1.安全专业背景
|
||||
|
||||
安全专业背景很好理解,就是指系统地学习过安全知识。主要包括几种情况:学校是安全专业的、考过安全类的证书和学习过安全类的课程(比如我们的安全专栏)。另外,具体的实践经验不在这个能力的考量范围之内 。
|
||||
|
||||
安全专业背景,对于应聘安全运维人员、数据安全人员、合规审查人员和业务安全人员来说,都是一个很重要的加分项。但是,我在评价一个应聘者的安全专业背景的时候,不只是看你上过某门课程,而是你必须能够通过学习安全课程,产生对安全的深度思考和理解。
|
||||
|
||||
比如说,我经常会问:“你认为在公司安全防护中,哪一个环节是最重要的?如果你来设计安全防护体系,你会考虑怎么做?”这就需要你在学习安全的过程中,能够结合你看到或者参与的公司环境,去找到主要的安全问题,衡量出性价比最高的安全解决方案。而我问这些问题的目的,其实是在考验应聘者,是否真的将课程知识学进去了,以及能否做到活学活用。
|
||||
|
||||
### 2.攻击渗透能力
|
||||
|
||||
对于渗透测试人员来说,攻击渗透能力是最主要的要求之一。除此之外,安全运维人员、安全研究人员和数据安全人员,如果能够掌握攻击渗透能力也是一个加分项。
|
||||
|
||||
攻击渗透能力对实践要求很高。如果你说你只学过攻击渗透方式,对它很感兴趣,就想应聘渗透测试岗位。我个人觉得不可行。因为,想要获得攻击渗透实践的机会实在太多了。
|
||||
|
||||
- 网上大量的练习攻击渗透的教程和平台,比如经典的[WebGoat](https://owasp.org/www-project-webgoat/),你可以自己进行大量的练习。
|
||||
- 近几年CTF比赛在国内举办的频次很高,各类高校和公司都在举办,比如[XCTF联赛](https://www.xctf.org.cn/)。你可以通过不断地参加比赛,掌握更多的渗透测试技巧。
|
||||
- 各大互联网公司都成立了应急响应中心,比如微博的[WSRC](https://wsrc.weibo.com/)。你可以找一找这些公司应用的安全漏洞,如果成功找到漏洞的话,还能获得相应的奖励。
|
||||
|
||||
这三种攻击渗透的实践难度由弱到强,对于应聘者的加分也是由少到多。因此,如果你想要成为一名渗透测试人员,就必须多实践,最好还能够获得一定的成果(比如,CTF的名次、应急响应中心的排行榜)来证明自己的能力。
|
||||
|
||||
### 3.开发能力和算法能力
|
||||
|
||||
开发和算法能力对于任何一个岗位来说,都是很重要的加分项。因为整个安全行业的趋势,都是尽可能地让自动化的工具参与进来,从而提高安全人员的效率。而工具的开发以及海量数据的处理,就需要考验安全人员的开发和算法能力了。
|
||||
|
||||
在招聘安全工程师的时候,我会要求应聘者基于自己的能力,去设计一款安全工具。比如我一般会这么去问:如果你想应聘渗透测试岗位,那在熟练挖掘各种漏洞的基础上,你能否设计出一个漏洞扫描器?如果你想应聘安全运维岗位,那在快速进行审计发现黑客入侵的基础上,你能否设计出一个IDS?
|
||||
|
||||
当然,这些工具你在网上都能找到开源的版本,比如[OpenVAS](http://www.openvas.org),而我更关注的是:你的设计是不是基于自己的经验总结构建出来的,是否具有你的个人特色?这些都是我希望应聘者能够通过自我思考和总结产出的结果。
|
||||
|
||||
还有部分开发任务是不需要任何安全背景就能够参与的,比如开发一个前端展示页面。因此,我也会招聘一些纯粹的开发人员,加入到安全部门的开发队伍中。
|
||||
|
||||
但是,我更希望这些开发人员能够懂安全,成为真正意义上的安全开发工程师。如果具备基础的安全知识,那开发人员就不只局限于表层工具的开发,也可以参与到安全专业类工具的开发中。这对公司的整体安全防护建设,能够起到更大的促进作用。
|
||||
|
||||
### 4.安全研究能力
|
||||
|
||||
很多安全专业的研究生或者博士,都会跟随导师在某个安全方向上进行研究。而学术上的安全研究能力,是安全研究人员的核心能力。所以,对于其他安全岗位来说,具备研究能力也是一个不错的加分项。我们也很容易就能评价出安全研究能力的高低,可以通过对某个安全方向的知识深度进行评判,还有对具体的论文等成果进行考量。
|
||||
|
||||
前面我也说了,安全研究能力对于很多公司来说,起不到特别大的帮助。因此,需要安全研究人员的公司相对较少。即使是招聘安全研究人员的公司,对安全方向通常也有一定的要求,移动安全和AI安全是目前比较常见的需求方向。我也见过一些研究密码学的学生,对于他们来说,对口的就业面就更窄了。
|
||||
|
||||
因此,如果你想要成为安全研究人员,在提升学术研究能力的同时,也要找好方向匹配的公司,才可能比较成功地通过面试。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我们对安全中常见的岗位和能力进行了盘点。
|
||||
|
||||
希望在了解这些安全岗位之后,能够帮助你选定一个比较明确的目标。只有目标明确了,你才知道自己应该提升哪些方面的安全能力。在面试的过程中,明确的目标也是一个很好的加分项。
|
||||
|
||||
另外,我希望通过讲解这些必备的安全能力,帮助你认清自己的短板,有目标地去提升某一项安全技能。在面试中,让面试官能够认可你的安全能力,避免因为找不到方向而做一些无用功。
|
||||
|
||||
总而言之,希望这次加餐能够对你个人的安全职业发展有些帮助。
|
||||
|
||||
## 思考题
|
||||
|
||||
最后,还是给你留一道思考题。
|
||||
|
||||
假设你要去应聘成为一名安全工程师,那么在面试环节中,你会怎样做自我介绍?你会怎么展示你的工作目标和对应的安全能力呢?
|
||||
|
||||
你可以在留言区写一写,预演一下面试现场!如果有收获,欢迎你把这篇文章分享给你的朋友。我们下一讲再见!
|
||||
84
极客时间专栏/安全攻防技能30讲/特别加餐/加餐4 | 个人成长:学习安全,哪些资源我必须要知道?.md
Normal file
84
极客时间专栏/安全攻防技能30讲/特别加餐/加餐4 | 个人成长:学习安全,哪些资源我必须要知道?.md
Normal file
@@ -0,0 +1,84 @@
|
||||
<audio id="audio" title="加餐4 | 个人成长:学习安全,哪些资源我必须要知道?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/1f/d9/1fafeb6ad522c722d8d173e8dd657ad9.mp3"></audio>
|
||||
|
||||
你好,我是何为舟。欢迎来到安全专栏的第四次加餐时间。
|
||||
|
||||
安全涉及的知识面非常广,更新速度也很快,前辈们很难有足够的时间和精力来言传身教。这个时候就需要我们具备良好的自学能力,通过持续的学习来掌握新的知识,应对新的变化和挑战。
|
||||
|
||||
优质的学习资源是自学的重要基础。今天,我就来盘点一下,对我个人的安全学习产生帮助的各类学习资源,以及不同阶段的安全人员应该如何对各类资源进行取舍。
|
||||
|
||||
## 安全入门书籍
|
||||
|
||||
安全的核心能力分为两个方向:攻击和防御。俗话说“未知攻焉知防”,所以,学习安全一定是从攻击手段入门,在掌握了一定的攻击基础之后,我们再考虑选择某一个方向深入学习。
|
||||
|
||||
所以,我建议**刚入门的同学可以先选择几本攻击方向的经典书籍来学习**。
|
||||
|
||||
《[**白帽子讲Web安全**](https://book.douban.com/subject/10546925/)》这本书是大部分人的安全入门书籍。它覆盖了绝大部分的安全攻击知识,而且作者把知识点讲解得清晰,即使你没有安全基础也能很好理解。可以说,在学习完这本书之后,你已经具备了安全人员所需要的全部基础知识。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/90/97/9001552429cff7f23afcbf489323f397.jpeg" alt="">
|
||||
|
||||
如果说《白帽子讲Web安全》是一本入门教程,那《[**黑客攻防技术宝典**](https://book.douban.com/subject/10793814/)》就是一本攻击手册。虽然同样是讲Web安全攻防内容,但是《黑客攻防技术宝典》对其中涉及的每一个细节和原理(如HTTP协议,浏览器技术等)都进行了详细讲解。你在学习Web安全的过程中遇到的大部分问题,都可以通过翻阅这本书来解决。因此,我建议你通读这本书,并且结合实际工作中遇到的问题随时查阅。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/76/53/76b529488f202aae3fe03a87bfcd1e53.jpg" alt=""><br>
|
||||
熟练使用各种渗透测试工具是安全攻击的必备技能,Metasploit是最为常见的渗透测试工具之一。《[**Metasploit渗透测试指南**](https://book.douban.com/subject/10433737/)》这本书是学习这款工具最经典的书籍之一,书中对如何利用Metasploit发起各类攻击测试进行了详细介绍。如果你想要快速掌握Metasploit的使用方式,这本书能够帮到你。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/28/0e/28f7599a1970d9c59743606b9f23980e.jpg" alt=""><br>
|
||||
学完这几本书,你不一定能发起一次真实的攻击。但当你面对任何一起攻击事件时,一定能知道它的原理是什么。这恰恰就是所有安全人员需要具备的基础能力。
|
||||
|
||||
## 攻击进阶练习
|
||||
|
||||
有了一定的攻击基础之后,如果你还想向攻击渗透方向深入钻研,那就不是任何一本书能够解决的了。这个时候实战训练能够帮助你快速成长。下面,我就来分享一些我觉得很实用的攻击渗透平台。
|
||||
|
||||
[**WebGoat**](https://owasp.org/www-project-webgoat/)是最权威的Web安全组织OWASP提供的一个Web安全练习平台,它几乎涵盖了全部的Web安全漏洞的讲解和练习内容。使用WebGoat有两大好处:首先,它是一个本地的平台。这意味着你可以随时查看网页的源码,甚至进行调试。因此,你可以清晰地了解一次攻击发生时,Web应用内部到底发生了什么;其次,其中的每一个练习内容都有对应的知识讲解。所以,这个平台对你明确攻击方向,进行安全入门训练是十分合适的。
|
||||
|
||||
[**Pwnable.kr**](http://pwnable.kr)是我体验过的免费的攻击渗透平台中最好用的一个。Pwnable.kr中的题目更偏向系统和应用层的攻击渗透(这些都是权限提升过程中的常见手段),适合用来进行攻击渗透的进阶训练。Pwnable.kr的好用之处就在于,它提供了一个可以直接访问的Linux系统环境,省去了你在本地搭建环境的繁琐过程。
|
||||
|
||||
但是Pwnable.kr有一个缺点,就是不提供任何解题思路和答案,不过,网上已经有很多人公开了平台上题目的解题思路,你可以用来参考。但是,我还是建议你至少花2-3天的时间去思考和解决一道题目,如果仍然得不到结果,再去参考别人的答案。
|
||||
|
||||
如果自我训练已经无法让你获得成就感了,那是时候去参加一些比赛了。目前,国内的[**XCTF联赛**](https://www.xctf.org.cn/)最为知名。你可以独自作战,也可以叫上几个朋友组团参赛。
|
||||
|
||||
通常来说,一场CTF比赛会进行48小时以上,如果你精力充沛的话,可以去体验一把挑战极限的快感。而且,比赛方通常会在赛后公开部分题目的解题思路,你也可以拿来作为学习的资源。通过不断参加比赛,你可以磨练自己的攻击技巧和能力。除此之外,如果获得了足够的积分和名次的话,也是证明你个人能力的一个有力证明。
|
||||
|
||||
当具备足够的攻击能力之后,你既可以成为安全渗透人员,为企业应用的安全贡献力量,也可以成为一名“白帽子”,专门去挖掘各个公司的安全漏洞,然后提交给对应的SRC,获取各类物质奖励。
|
||||
|
||||
## 企业防御书籍
|
||||
|
||||
如果你选择的是安全防御方向,你会逐步接触到公司的安全防御工作。那么在一开始,你一定要去学习各大公司的安全负责人的经验,看看他们的安全建设思路是怎么样的,以及有哪些“坑”需要注意。阅读他们的书籍,就是向大佬学习的一种最简单、快捷的方式。
|
||||
|
||||
有关企业安全的书,我读过比较好的有:赵彦的《[**互联网企业安全高级指南**](https://book.douban.com/subject/26852503/)》、聂君的《[**企业安全建设指南**](https://book.douban.com/subject/33389358/)》、石祖文的《[**大型互联网企业安全架构**](https://book.douban.com/subject/34930400/)》。这些书中有很大部分内容是相似的,从任何一本书中,你都能够了解到企业安全体系建设所需要使用的工具。对我个人来说,书中最精华的部分是作者对安全体系建设的思考、对各类安全工具的理解。<br>
|
||||
<img src="https://static001.geekbang.org/resource/image/1f/af/1f833ab0342dc618f4ec9b8d984735af.jpg" alt="">
|
||||
|
||||
这些书的相似内容很多,读起来也不会花太多时间,所以,我建议你将这些书都读一遍。而且,这些书籍中的防御体系建设经验,都是安全行业内鼎鼎有名的大佬们基于自身经验总结的。虽然你不可能完全照搬里面的安全建设方案,但你可以从中吸取经验教训,博取众家之长,然后设计出适合你们公司的最佳方案。
|
||||
|
||||
## 安全证书
|
||||
|
||||
除了书籍和练习平台,我还想和你分享一些比较有价值的安全证书。以我了解到的现状,这些证书对应聘安全工作不会有太大的帮助。但我认为,这些证书最大的意义就在于,它能够推动你对安全知识体系进行补充和整理。因为考证的过程也是你对学过的知识进行再次学习和思考的过程。
|
||||
|
||||
其次,尽管对职业发展可能并没有帮助,但不论是对内行还是外行来说,证书始终是证明你安全能力的一个有力标签。
|
||||
|
||||
下面,我就来分享三个我认为最有价值的证书。为了方便你对比,我把这三个证书的基本信息总结了一张表格。在此基础上,我会重点分析一下,这些证书分别给我们的安全职业发展带来的好处。你可以结合自己的情况,来选择是否考取这些证书。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/72/01/72dddf7b5b5679f2a7ca3aeae8fd8401.jpg" alt="">
|
||||
|
||||
[**CISP**](https://baike.baidu.com/item/%E6%B3%A8%E5%86%8C%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E4%B8%93%E4%B8%9A%E4%BA%BA%E5%91%98/2530094?fromtitle=CISP&fromid=1438639&fr=aladdin)(Certified Information Security Professional ,注册信息安全专业认证)的考试普遍反馈难度不高。不过我认为既然主动去考证了,目标就绝不仅仅只是考试通过,而是以学习和自我提升为主要目的。在内容上,CISP整理得还是很完善的。而且CISP强制培训,在培训过程中,通过讲师的介绍,同样能够学习到不少理论和实践的内容。
|
||||
|
||||
在内容上,[**CISSP**](https://baike.baidu.com/item/CISSP/1436764?fr=aladdin)(Certification for Information System Security Professional,信息系统安全专业认证)会比CISP更丰富一些,不仅包含一些国际性的政策和框架,还包含诸如物理安全等更偏向运维的内容。另外CISSP不存在题库,它的初衷就是希望你不仅仅只是去背教材,而是能够自主梳理知识,并且深刻理解安全。因此,学习CISSP不仅能拓展你的知识面,还能帮助你进行自我总结和提升。
|
||||
|
||||
CISP和CISSP是更偏向公司防御的证书,而[**OSCP**](https://www.freebuf.com/articles/network/200009.html)(Offensive Security Certified Professional,安全攻击专业认证)是专门针对攻击渗透的证书,最近也比较热门。如果你在自主训练时觉得缺乏明确的方向,其实可以尝试通过考取OSCP证书来获得指导。另外,CTF比赛竞争还是比较激烈,拿到名次也很难。因此,我认为可以将OSCP作为CTF之外的另一种选择,只要拿到了OSCP证书,同样能够证明你的攻击渗透能力达到了可以实际运用的水平。
|
||||
|
||||
## 安全资讯
|
||||
|
||||
最后,我还想推荐3个比较常用的资讯网站,[FreeBuf](https://www.freebuf.com)、[安全客](https://www.anquanke.com)和[安全牛](https://www.aqniu.com)。这些网站每天会更新一些安全新闻和学习资料,你可以通过它们快速查询最新的行业动态。我个人一般是利用休闲时间,来阅读这类网站上的内容。我会先快速地浏览一下标题,找出一些感兴趣的内容进行了解。如果遇到某些特别感兴趣的知识点,想要深入挖掘,我会再搜索其他的相关资料来补充学习。
|
||||
|
||||
## 总结
|
||||
|
||||
我觉得无论跟随哪个课程进行学习,都不可能学完所有的安全知识。所以,在学习安全的路上,自学是我们不断精进的主要方式。
|
||||
|
||||
我的经验是:书籍能够帮助你入门,并且指导你进行防御建设;实战演练是掌握安全渗透技巧的唯一途径;安全证书一方面能帮助你对整体的安全知识进行全盘梳理,另一方面也是你个人安全能力的一个证明;安全资讯是帮助你掌握安全动态,发现新知识点的一个不错途径。
|
||||
|
||||
想要学好安全,没有什么捷径可以走,唯有多练多看。因此,对于安全的学习,我不建议你在前期花过多的时间去做基础知识储备,那容易变成纸上谈兵。**我更建议的是,当有了一定安全基础之后,你要找机会尽快投入到实际的演练或者工作中**。在实践的过程中,你再对遇到的困难或者知识盲区进行有针对性的学习。另外,在积累实际经验的过程中,周期性的自我总结,以及对知识进行系统梳理,也能很好地推动我们的个人成长。
|
||||
|
||||
## 思考题
|
||||
|
||||
最后,你可以在留言区讲一讲你的**自学心得,分享一些你的学习资源**。
|
||||
|
||||
如果有收获,欢迎你把文章分享给你的朋友。我们下一讲再见!
|
||||
99
极客时间专栏/安全攻防技能30讲/特别加餐/加餐5 | 安全新技术:IoT、IPv6、区块链中的安全新问题.md
Normal file
99
极客时间专栏/安全攻防技能30讲/特别加餐/加餐5 | 安全新技术:IoT、IPv6、区块链中的安全新问题.md
Normal file
@@ -0,0 +1,99 @@
|
||||
<audio id="audio" title="加餐5 | 安全新技术:IoT、IPv6、区块链中的安全新问题" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/3b/c6/3b3cad3ab11860e08ddbd5317b2a6cc6.mp3"></audio>
|
||||
|
||||
你好,我是何为舟。欢迎来到安全专栏的第5次加餐时间。
|
||||
|
||||
随着科技的快速发展,各种新的技术和概念不断出现,持续出现的新技术会不断推动安全的发展。虽然,每一个新技术都会衍生出新的安全威胁和隐患,但是,这些新的安全问题也正是安全行业保持活力的源泉。所以,对于安全人员来说,这些新技术的出现既是一种挑战,也是一种机遇。
|
||||
|
||||
近几年,IoT、IPv6和区块链是三个热度很高的新技术,我也最常听到三个热词。今天,我们就一起来探讨一下,这几个新技术都面临哪些独特的安全问题。
|
||||
|
||||
## 独特的IoT安全
|
||||
|
||||
毫无疑问,IoT(Internet of Things,物联网)是最近十年来比较火热的一个技术。对比于当前的网络环境,IoT的网络主要有以下几个特点:
|
||||
|
||||
- 设备更多:每一件小的物品都有可能成为联入互联网的设备
|
||||
- 设备性能更低:受限于体积和供电量,单台设备能够搭载的硬件配置都不高
|
||||
- 更加开放:由于设备的数量和类型众多,无法统一标准,因此IoT的网络环境也更加开放
|
||||
|
||||
那么,这些特点会给安全性带来哪些新的挑战呢?关于这个问题,我推荐你玩一玩《看门狗》这款游戏,它很好地描绘了一个未来IoT城市中会面临的各类安全问题。那在此之前,我先和你分享一下我对这些新挑战的思考。
|
||||
|
||||
**我认为最明显的问题就是认证更加复杂了。**
|
||||
|
||||
在使用电脑或者手机连入网络的时候,我们可以手动输入密码来完成认证。但是,当我们想要将各类小硬件连入网络的时候,没有键盘和屏幕可以供我们输入密码。为了解决这个认证问题,目前小米等IoT厂商的解决方案是,先让手机直接控制设备,配置好WiFi密码后,再让设备连入网络。
|
||||
|
||||
但是,这其实又引发了一个新的问题,如何确认是你本人在控制设备,而不是黑客呢?针对这个问题,现在也有对应的解决方案,那就是在短时间内开放设备的控制权限,限制手机在这个时间内完成对设备的控制。
|
||||
|
||||
仔细观察的话,你会发现这个解决方案有一个假设前提:黑客没办法在短时间内发现并控制设备。在当前的环境下,这个前提是成立的。但是随着技术的发展,IoT设备可能充斥在我们身边的每一个角落里,当有一个设备被黑客控制了之后,它很可能会时刻监控这周围的环境,一旦发现其他的设备开放控制权限,就会立即黑入。可以说,通过这样的攻击方式,任何一个设备都有可能被黑客所控制。
|
||||
|
||||
因此,**如何确保IoT中设备与网络、设备与设备之间的通信是可信的**,是未来认证技术需要面临的主要挑战之一。
|
||||
|
||||
**其次,我认为物理攻击会越来越流行。**
|
||||
|
||||
物理攻击实际上是安全领域内的**降维打击。** 换句话说,当底层的硬件被黑客控制之后,我们就无法保障运行在硬件之上的系统和软件的安全性了。
|
||||
|
||||
IoT的发展,事实上正让物理攻击变得越来越容易。我总结了一张物理攻击的发展过程图,你可以看到,随着IoT越来越小、越来越智能,和我们的联系越来越紧密,物理攻击的难度也变得越来越低。在未来,公共区域内的所有设备甚至都有可以成为黑客的囊中之物。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/74/c1/7490a2722eaf14f307e31a7c6f3ed8c1.jpeg" alt="">
|
||||
|
||||
因此,**如何对物理攻击进行有效的防控**,也是未来安全中需要解决的主要挑战之一。
|
||||
|
||||
**除了带来新的安全挑战,IoT能够造成的安全威胁也变得更加复杂了**。
|
||||
|
||||
目前来说,黑客利用IoT设备发起的最主要的攻击还是DDoS攻击,即黑客利用海量的IoT设备向目标服务器发送巨大的网络流量,导致服务器无法响应正常请求。
|
||||
|
||||
随着IoT的发展,黑客能够控制的设备越来越多,能够导致的影响也会越来越大。你一定在很多电影中看到过类似的情景,比如,黑客通过操纵汽车控制医疗设备等方式,导致人员伤亡。
|
||||
|
||||
因此,**如何保护IoT设备免受黑客的攻击**,同样会成为未来安全的主要挑战之一。
|
||||
|
||||
## IPv6对安全的影响
|
||||
|
||||
因为IPv4的地址空间短缺问题,IPv6是国家重点推进的一个技术方向。目前三大运营商已经完成了改造,各大互联网公司也已经接到了兼容IPv6的强制要求,我相信国内应该会很快推广和普及IPv6。
|
||||
|
||||
IPv6和IPv4相比最大区别就是IP地址变得非常庞大了。那么,庞大的IP地址对于安全来说,又意味着什么呢?
|
||||
|
||||
我认为对于黑客来说,最大的影响就是**网络扫描不再可能**。
|
||||
|
||||
我们知道,找到攻击目标是黑客发起攻击的第一步。因此,很多黑客会通过扫描网络来发现目标。目前,性能最优的扫描工具是[M](https://github.com/robertdavidgraham/masscan)[asscan](https://github.com/robertdavidgraham/masscan),它能够在5分钟内扫遍全部IPv4的地址空间。
|
||||
|
||||
而IPv6的地址空间是IPv4的2^96倍,黑客想要利用现有的扫描工具快速遍历IPv6的地址空间,显然是不可能的。因此,黑客就只能通过其他方式去精准定位目标了。
|
||||
|
||||
除了对黑客有影响以外,**庞大的IP地址对公司安全来说,也同样是一种负担**。
|
||||
|
||||
IP地址变多就意味着黑客手中的IP资源变多了,同时,IPv6的高变化频率还会让同一个设备的IP经常性地发生变化。因此,使用了IPv6之后,我们就很难利用黑名单对IP进行标记和处罚了。
|
||||
|
||||
另外,仍然有待观察的一点是,**IPv6的复用性是否会比IPv4更低**。
|
||||
|
||||
IPv4由于地址匮乏,有很高的复用性(一个学校可能都在共用一个IP地址),这让我们很难根据IP去定位到一个具体的位置或者人。
|
||||
|
||||
而IPv6的地址空间是足够的(每一粒沙子都能分配到一个IP地址),因此,IP复用就不再是一个刚需了。所以,如果IPv6的复用性远低于IPv4的话,就能让IP的定位变得更准确。那么对于安全工作来说,想要找到黑客也会更加容易。
|
||||
|
||||
## 区块链中的安全问题
|
||||
|
||||
最后,我们再来聊一聊近两年兴起的区块链。目前,区块链最成功的应用形式,就是以比特币为代表的各类虚拟货币。那么,比特币和区块链的安全性如何呢?它们又面临什么样的安全威胁呢?下面,我们一起来看。
|
||||
|
||||
我们都知道,区块链的思想是去中心化,即将数据和算力分散到每一个小的计算节点中,最终,以少数服从多数的形式来完成数据的计算和存储。这实际上是一种对完整性的保障。这么说你可能还不理解,我举个例子。
|
||||
|
||||
以货币为例,我们现在通过支付宝、微信等电子货币来完成日常交易,事实上是将钱交由支付宝和微信这样的中心机构进行集中保管。而对于支付宝、微信来说,理论上是可以对用户的余额进行篡改的,不过,因为受到了多方面限制,这一操作是无法实现的。
|
||||
|
||||
但是在比特币中,因为不存在中心机构,每个用户的余额由所有人共同保管,因此没有任何一个节点可以实现篡改。
|
||||
|
||||
但如果你仔细想想的话,就会发现这种近乎完美的完整性保障,是通过牺牲机密性来完成的。也就是说,在支付宝中,你无法知道其他用户的余额,但是在比特币中,每一笔交易和每一个用户的余额都是公开的信息,因此比特币不提供任何针对机密性的保护措施(比如,你可以在[blockchain](https://www.blockchain.com/explorer?view=btc_blocks)看到所有的比特币信息)。
|
||||
|
||||
尽管比特币本身的完整性无可挑剔,但仍然无法阻止由于用户个人密钥丢失而导致的资产损失。这就好比你安装了一个特别结实的门,但只要钥匙丢了,门的存在就毫无意义了。事实上,目前大部分的比特币安全事件,都是黑客成功盗取了用户或者公司系统的比特币密钥之后,再去盗取对应账号的余额。
|
||||
|
||||
另外,比特币是目前黑客们主要使用的货币之一。其原因在于,它是匿名的(注意:匿名不是机密性,匿名是指你无法通过比特币的账号,关联到某个具体的人)。这也就保证了,即使警方知道了黑客的账户,也没办法抓到黑客。而且,由于比特币的去中心化,警方也没办法封停黑客的账户,追回被盗的比特币。
|
||||
|
||||
所以,比特币这样一种去中心化且匿名的货币体系,既不保险,也不利于政府的管控,因此国内对于以区块链为基础的电子货币落地,始终不认可。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我们主要对 IoT、IPv6和区块链这三个热门技术及其安全性进行了盘点。这些新的技术都具备其独特的应用场景,也都带有独特的安全问题。这些问题既可能是这些技术本身所存在的一些缺陷,也可能是对已有的安全防御工作产生的威胁。
|
||||
|
||||
我们不仅要对这些新技术进行持续的关注,还要思考它们会产生的新安全需求,然后去学习对应的新知识。这也是安全人员提升自我价值,保持思维活力的有效手段。
|
||||
|
||||
## 思考题
|
||||
|
||||
最后,咱们来看一道思考题。
|
||||
|
||||
除了我们今天讲的这三种技术,你还接触过哪些新的技术呢?不妨和我的一样,把你对这些新技术的安全思考都写下来。
|
||||
|
||||
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!
|
||||
Reference in New Issue
Block a user