给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
当今互联网流量中,以HTTP/HTTPS为主的Web服务产生的流量占据了绝大部分。Web服务发展的如火如荼,这背后离不开一个默默无闻的大功臣就是域名解析系统:
如果没有DNS,我们上网需要记忆每个网站的IP地址而不是他们的域名,这简直是灾难,好在DNS默默在背后做了这一切,我们只需要记住一个域名,剩下的交给DNS来完成吧。
也正是因为其重要性,别有用心的人自然是不会放过它,DNS劫持技术被发明了出来。
DNS提供服务用来将域名转换成IP地址,然而在早期协议的设计中并没有太多考虑其安全性,对于查询方来说:
- 我去请求的真的是一个DNS服务器吗?是不是别人冒充的?
- 查询的结果有没有被人篡改过?这个IP真是这个网站的吗?
DNS协议中没有机制去保证能回答这些问题,因此DNS劫持现象非常泛滥,从用户在地址栏输入一个域名的那一刻起,一路上的凶险防不胜防:
- 本地计算机中的木马修改hosts文件
- 本地计算机中的木马修改DNS数据包中的应答
- 网络中的节点(如路由器)修改DNS数据包中的应答
- 网络中的节点(如运营商)修改DNS数据包中的应答
- …
后来,为了在客户端对收到对DNS应答进行校验,出现了DNSSEC
技术,一定程度上可以解决上面的部分问题。但限于一些方面的原因,这项技术并没有大规模用起来,尤其在国内,鲜有部署应用。
再后来,以阿里、腾讯等头部互联网厂商开始推出了httpDNS
服务,来了一招釜底抽薪,虽然这项技术的名字中还有DNS
三个字母,但实现上和原来但DNS已经是天差地别,通过这项技术让DNS变成了在http协议之上的一个应用服务。
重点关注
:安全工程师、后端工程师、运维工程师
TCP劫持
TCP是TCP/IP协议族中非常重要的成员,位于传输层。协议本身并没有对TCP传输的数据包进行身份验证,所以我们只要知道一个TCP连接中的seq和ack后就可以很容易的伪造传输包,假装任意一方与另一方进行通信,我们将这一过程称为TCP会话劫持(TCP Session Hijacking)
TCP劫持技术是一种很老的技术,1995年被提出来后深受黑客青睐。不过近些年来,随着操作系统层面的安全机制增强和防火墙软件的检测能力提升,这种基础的攻击方式越来越容易被发现,慢慢的淡出了人们的视野。
重点关注
:安全工程师、运维工程师
端口扫描技术
端口扫描是黑客经常使用的一种技术,它一般是作为网络攻击的前期阶段,用于探测目标开启了哪些服务,以便接下来发起针对该服务的攻击。
记得刚刚学习网络安全的时候,大家总会没事拿出工具来扫一扫,虽然扫了之后就没有了下文,也总是乐此不疲,在不懂的人面前秀一把自己的“黑客”能力。
以TCP/IP协议族构建的互联网,网络服务总是离不开端口这个概念,不管是TCP也好,UDP也罢,应用层都需要一个端口号来进行网络通信。而我们常见的服务端口有:
21
: FTP文件传输服务25
: SMTP邮件服务53
: DNS域名解析系统服务80
: HTTP超文本传输协议服务135
: RPC远程过程调用服务443
: HTTPS3389
: MSRDP微软远程桌面连接服务- …
端口扫描都原理,对于基于UDP的服务,发送对应服务都请求包,查看是否有应答;对于基于TCP的服务,尝试发起三次握手发送TCP SYN数据包,查看是否有应答。
如果远端服务器进行了响应,则表明对端服务器上运行了对应的服务,接下来则是进一步探知对端服务器使用的操作系统、运行的服务器程序类型、版本等等,随即针对对应的漏洞程序发起网络攻击。
由此可见,为安全着想,在互联网上应当尽可能少暴露信息,关闭不需要的服务端口。
防御手段
:使用防火墙等安全产品,即时发现和阻断非法的扫描探测行为。
重点关注
:运维工程师、安全工程师
系统安全
系统安全版块中的技术,一般是指攻击发生在终端之上,与操作系统息息相关。
栈溢出攻击
栈溢出攻击历史悠久,也是发生在系统侧最基础的攻击。
现代计算机基本上都是建立在冯-诺伊曼
体系之上,而这一体系有一个最大的问题就是数据和指令都保存在存储器中。
在计算机的内存中,既包含了程序运行的所有代码指令,又包含了程序运行的输入输出等各种数据,并没有一种强制的机制将指令和数据区分。因为对于计算机来说它们都是一样的二进制0和1,大部分时候都是靠程序按照既定的“规则”去解释理解内存中的这些0和1。而一旦这些“规则”理解错误,事情就变得糟糕起来。
具体到我们现代CPU和OS,不管是x86/x64处理器,还是ARM处理器,均采用了寄存器+堆栈式的设计,而这个堆栈中,既包含了程序运行各个函数栈帧中的变量数据等信息,还保存了函数调用产生的返回地址。
所谓栈溢出攻击,则是通过一些手段输入到栈中的缓冲区中,冲破缓冲区原有的界限,将存储返回地址的位置覆盖为一个数值,使其指向攻击者提前布置的恶意代码位置,劫持了程序的执行流程。
防御手段
:现代操作系统针对栈溢出攻击已经有非常成熟的应对方案,像Linux平台的Stack Canary,Windows平台的GS机制等等,程序员需要做的就是充分利用这些机制。
重点关注
:C/C++工程师
整数溢出攻击
和栈溢出攻击一样,整数溢出攻击也是属于溢出类攻击,不一样的是溢出的目标不是栈中的缓冲区,而是一个整数。
我们知道,计算机数值以补码
的方式表示和存储。在表示一个有符号数时,最高位是用来表示这是一个正数(0)还是一个负数(1),比如对于一个16位的short变量而言,+1和-1的表示方法如下:
一个16位的short变量表示的范围是-32768~32767,现在思考一个问题,假如一个short变量的值现在是32767:
如果现在对其执行+1操作,将变成:
而这正是-32768的补码形式!
试想一下,如果这个变量名字叫length作为strcpy参数,或是叫index作为数组的下标,整数的溢出将导致可怕的后果,轻则进程崩溃,服务宕机,重则远程代码执行,拿下控制权。
重点关注
:所有程序员
空指针攻击
空指针一般出现在指针没有初始化,或者使用new
进行对象创建/内存分配时失败了,而粗心的程序员并没有检查指针是否为空而进行访问导致的攻击。
大多数情况下,这将导致内存地址访问异常,程序会崩溃退出,造成拒绝服务的现象
而在一些特殊的情况下,部分操作系统允许分配内存起始地址为0的内存页面,而攻击者如果提前在该页面准备好攻击代码,则可能出现执行恶意代码的风险。
释放后使用攻击
释放后使用Use After Free
意为访问一个已经释放后的内存块。较多的出现在针对浏览器的JavaScript引擎的攻击中。
正常情况下,一个释放后的对象我们是没法再访问的,但如果程序员粗心大意,在delete对象后,没有即时对指针设置为NULL,在后续又继续使用该指针访问对象(比如通过对象的虚函数表指针调用虚函数),将出现内存访问异常。
在上面的场景中,如果攻击者在delete对象后,马上又new一个同样内存大小的对象,在现代操作系统的堆内存管理算法中,会有很大概率将这个新的对象放置于刚刚被delete的对象的位置处。这个时候还通过原来对象的指针去访问,将出现鸠占鹊巢,出现可怕的后果。
养成好的编程习惯,对象delete后,指针及时置空。
重点关注
:C/C++工程师
HOOK
HOOK原意钩子的意思,在计算机编程中时常用到,用来改变原有程序执行流程。
在那个互联网充斥着流氓软件的年代,流行着一种键盘记录器
的木马,用于记录用户键盘的输入,从而盗取密码,这其中QQ曾经是重灾区。
而实现这一功能的技术就是用到了HOOK技术,钩到了键盘敲击的事件消息。
除了消息HOOK,用得更多的是程序执行流程层面的HOOK。恶意代码被注入目标程序后,在函数入口处添加跳转指令,导致执行到此处的线程转而执行攻击者的代码,实现修改参数、过滤参数的目的。
HOOK技术不仅为黑客使用,安全软件用的更多,安全软件需要守护整个系统的安全防线,通过HOOK技术在各处敏感API处设立检查,从而抵御非法调用攻击行为。
另外,软件补丁技术中也时常用到HOOK技术,软件厂商发现原来程序漏洞后,通过HOOK,修改既有程序的执行逻辑,从而达到修复漏洞的目的。
重点关注
:C/C++工程师
权限提升
现代操作系统都对运行于其中的进程、线程提供了权限管理,因为安全攻击无可避免,而权限的限制作为一道颇为有效的屏障将程序被攻击后的影响减少到最小。
换句话说,即便我们的程序因为漏洞原因被攻击执行了恶意代码,但因为操作系统的权限控制,恶意代码能干的事情也有限。
就像一枚硬币总有两个面,有权限限制,自然而然就有权限提升。攻击者想要做更多事情,就得突破操作系统的限制,获取更高的权限。
在Windows上,经常叫获得管理员权限。
在Linux上,经常叫获得Root权限,手机Root也是这个意思。
在iOS上,经常叫“越狱”。
权限提升的方式五花八门,总体来说,程序执行的时候,所属进程/线程拥有一个安全令牌,用以标识其安全等级,在访问资源和执行动作的时候由操作系统内核审核。
权限提升的目标就是将这个安全令牌更改为高等级的令牌,使其在后续访问敏感资源和执行敏感动作时,凭借该令牌可以通过系统的安全审核。
而更改这个安全令牌的惯用伎俩便是利用操作系统内核漏洞(如前面所述的栈溢出、整数溢出、释放后使用等)执行攻击者的代码,实现安全令牌的篡改。
重点关注
:安全工程师
可信计算
安全攻击无处不在,不仅应用程序的环境不可靠,甚至连操作系统内核的环境也充满了风险。
如果一段程序(比如支付)必须在一个极度绝密的环境下执行,该怎么办?
可信计算
的概念被安全研究者提了出来,根据百科的解释:
可信计算/可信用计算(Trusted Computing,TC)是一项由可信计算组(可信计算集群,前称为TCPA)推动和开发的技术。可信计算是在计算和通信系统中广泛使用基于硬件安全模块支持下的可信计算平台,以提高系统整体的安全性 [1] 。签注密钥是一个2048位的RSA公共和私有密钥对,它在芯片出厂时随机生成并且不能改变。这个私有密钥永远在芯片里,而公共密钥用来认证及加密发送到该芯片的敏感数据。
可信计算中一个非常重要的概念是可信执行环境TEE(Trusted Execution Environment)
,简单来说就是在现有的计算机内部的世界里,再构建一个秘密基地,专门用于运行极度机密的程序。该秘密基地甚至连操作系统都轻易无法访问,更别说操作系统之上的应用程序了。
在移动端,ARM芯片占据了主流市场,ARM芯片提供了名为TrustZone
技术的技术,在硬件层面新增一个可信计算环境,包含一个可信OS,和一些可信APP,和普通环境在硬件层面隔离,处理器内部进行通信完成两个世界的交互。
重点关注
:终端系统工程师
密码学
由于数据传输的过程中会遇到信息泄漏、篡改、伪造的风险,加密技术应运而生。
对称加密 & 非对称加密
有加密就有解密,根据加密过程使用的密钥和解密过程使用的密钥是否相同,将加密算法分为了两个大类:对称加密
和非对称加密
。
最早出现的加密技术是对称加密
- 对称加密:加密密钥和解密密钥一致,特点是加密速度快、加密效率高。常用的对称加密算法有:
-
- DES
- AES
- RC4
- DES
这种加密方式中有一个非常关键的问题是,解密方需要拿到密钥才能进行解密,而密钥钥匙通过网络传输又会面临不安全的风险,这成了一个鸡生蛋,蛋生鸡的问题。
于是通信技术上一个划时代的技术被发明了出来,这就是非对称加密
!
- 非对称加密:加密密钥与解密密钥不一致,特点是算法较复杂,但安全性高。非对称加密的密钥一般分为公钥和私钥,公钥公开,私钥需保密。常用于数字认证,如HTTPS中握手阶段的服务器认证。常用的非对称加密算法有:
-
- RSA
- DH
- ECC(椭圆曲线加密)
- RSA
可以毫不夸张的说,没有了非对称加密,互联网绝不会发展到今天这样的高度。
秘钥交换技术
在互联网通信中,有加密就有解密,解密自然就需要密钥,那如何把这个密钥告诉对方呢?密钥交换算法
就是要解决这个问题:如何安全的将密钥传输给对方?
回头看看上面提到的非对称加密,它就可以解决这个问题:
- 服务器负责生成一对公私钥,公钥告诉客户端,私钥自己保存
- 客户端拿到公钥后,使用它来对后续通信将要使用的对称加密算法密钥进行加密传输
- 服务端收到后使用私钥解密,拿到这个密钥
- 以后双方可以通过对称加密进行传输通信
上面这个例子并不只是举例,在早期版本的HTTPS中,就是通过这种方式来进行密钥交换。而后来的版本中,另外一种叫DH及其变种的密钥交换算法用的越来越多。
DH全称Diffie-Hellman,是两位数学家的名称构成,这种算法的核心是完全依靠数学运算实现密钥的交换。
信息摘要算法
信息摘要算法其实不算是一种加密算法,加密的前提是可以通过解密还原,而信息摘要算法的目的并不是对数据进行保护,也无法解密还原。
在一些语境下,信息摘要我们听得少,听的更多的名词是哈希
信息摘要算法的目的之一是校验数据的正确性,算法公开,数据通过该算法得出一个摘要值,收到数据后通过该算法计算出这个摘要,前后对比就知道是否有被篡改。
常用的信息摘要算法有:
- MD5
- SHA1
- SHA256
数据编码技术
严格来说,数据编码技术也不算是加密算法,因为其目的同样不是为了加密,而只是为了将数据编码以便传输。
最常见的编码算法就是base64
了,多用于编码二进制的数据,将不可见的字符编码后转换成64个常见字符组成的文本,便于打印、展示、传输、存储。如邮件eml格式中,将附件文件通过base64编码。
除了base64,还有常用于比特币钱包地址编码的base58。base家族还有base85、base92、base128等众多算法。它们的区别不仅仅在于参与编码的字符集不同,算法执行也是各有千秋。
多因子认证技术
说到认证,最常出现的莫过于登录、支付等场景。传统的认证技术就是密码技术,但随着网络攻击的日益猖獗以及互联网渗透到人们生活的方方面面,传统密码技术的安全性不足以满足互联网的发展。
多因子认证技术意为在传统密码认证之外,引入其他认证技术进行补充,使用2种及以上的方式共同完成认证。随着人工智能技术的发展,基于生物特征的认证技术突飞猛进:
- 指纹认证
- 虹膜认证
- 人脸识别
- …
这个世界从来不缺先行者,多因子认证看上去很复杂,好在已经有不少头部企业搭建了认证平台,对于绝大多数企业,需要做的只是下载SDK,调用API而已。
目前国内外主流的多因子认证平台有三大派系:
FIDO
,国际标准,在国内,翼支付、百度钱包、京东钱包、微众银行等都已经应用
IFAA
,阿里系,凭借阿里在电商领域的优势,也吸引了众多追随者。
TUSI
,腾讯系
总结
如何自学黑客&网络安全
黑客零基础入门学习路线&规划
初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!
7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。
8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
网络安全工程师企业级学习路线
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
一些笔者自己买的、其他平台白嫖不到的视频教程。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!