最近有同學問我,網絡安全的學習路線是怎么樣的?
廢話不多說,先上一張圖鎮樓,看看網絡安全有哪些方向,它們之間有什么關系和區別,各自需要學習哪些東西。
在這個圈子技術門類中,工作崗位主要有以下三個方向:
安全研發
安全研究:二進制方向
安全研究:網絡滲透方向
下面逐一說明一下。
第一個方向:安全研發
你可以把網絡安全理解成電商行業、教育行業等其他行業一樣,每個行業都有自己的軟件研發,網絡安全作為一個行業也不例外,不同的是這個行業的研發就是開發與網絡安全業務相關的軟件。
既然如此,那其他行業通用的崗位在安全行業也是存在的,前端、后端、大數據分析等等,不過除了這類通用開發崗位,還有一部分與安全業務緊密相關的研發崗位。
這個分類下面又可以分為兩個子類型:
做安全產品開發,做防
做安全工具開發,做攻防火牆、IDS、IPS
WAF(Web網站應用防火牆)
數據庫網關
NTA(網絡流量分析)
SIEM(安全事件分析中心、態勢感知)
大數據安全分析
EDR(終端設備上的安全軟件)
DLP(數據泄漏防護)
殺毒軟件
安全檢測沙箱
總結一下,安全研發的產品大部分都是用於檢測發現、抵御安全攻擊用的,涉及終端側(PC電腦、手機、網絡設備等)
開發這些產品用到的技術主要以C/C++、Java、Python三大技術棧為主,也有少部分的GoLang、Rust。
安全研發崗位,相對其他兩個方向,對網絡安全技術的要求要低一些(只是相對,部分產品的研發對安全技能要求並不低),甚至我見過不少公司的研發對安全一無所知。在這種情況下,如果除了基本的開發功底以外,對網絡安全技術有所了解,自然會是你面試這些崗位時的加分項。
第二個方向:二進制安全
二進制安全方向,這是安全領域兩大技術方向之一。
這個方向主要涉及到軟件漏洞挖掘、逆向工程、病毒木馬分析等工作,涉及操作系統內核分析、調試與反調試、反病毒等技術。因為經常都是與二進制的數據打交道,所以久而久之用二進制安全來統稱這個方向。
這個方向的特點是:需要耐得住寂寞。
比不上安全研發可以有實實在在的產品輸出,也比不上網絡滲透方向聽起來的狂拽炫酷,這個方向更多時間是在默默的分析和研究。
以漏洞挖掘為例,光是學習五花八門的攻擊手法就需要花不少的時間。在這個領域,為了研究一個問題,可能花費數月甚至數年時間,這絕非一般人能堅持下來的。不僅如此,不是勤奮就可以成功,更多還要靠天分。
像騰訊幾大安全實驗室的掌門人,業界知名的TK教主、吳石這些人物,他們已經深諳漏洞挖掘的奧義,並將這門絕技融會貫通,做個夢都能想到新的玩法。不過像這樣的天才實在是少之又少,絕大多數人都無法企及。
如果說程序員是苦逼的話,那二進制安全研究就是苦逼Plus
第三個方向:網絡滲透
這個方向更符合於大部分人對“黑客”的認知,他們能夠黑手機、黑電腦、黑網站、黑服務器、黑內網,萬物皆可黑。
相比二進制安全方向,這個方向初期更容易入門一些,掌握一些基本技術,拿起各種現成的工具就可以開黑了。
不過,要想從腳本小子變成黑客大神,這個方向越往后,需要學習和掌握的東西就多了。
網絡滲透的方向更偏向於“實戰”,因此對技術在廣度上有更高的要求,從網絡硬件設備、網絡通信協議、網絡服務(web、郵件、文件、數據庫等)、到操作系統、攻擊手法等等都需要了解。更偏向於一個全能型的計算機專家,將各種技術融會貫通,以用於“實戰”。
下面開始說說學習路線的問題,內容有點長,可以先點個贊,這樣不迷路及時找得回來哦。
圖片有些大,上傳后被壓縮的厲害。想要獲取高清圖的朋友可以來這里:
在這張圖路線圖中,一共划分了六個階段,但並不是說你得學完全部才能上手工作,對於一些初級崗位,學到第三四個階段就足矣。
下面的內容,一定要結合上面這張圖看效果才最好,建議在瀏覽器中新建一個tab頁面,打開那張圖,結合着看。
石器時代
第一個階段——石器時代,針對的是純新手小白剛剛入場。在這個階段,主要是打基礎,需要學習的有五部分內容:
Windows
Windows上基礎的一些命令、PowerShell的使用和簡單腳本編寫,以及Windows以后經常會打交道的幾個重要組件的使用:注冊表、組策略管理器、任務管理器、事件查看器等。
除此之外,學習在Windows上面搭建虛擬機,學會安裝系統,為接下來學習Linux做准備工作。
網絡安全,必然要與Linux經常打交道,我看到很多新人一上來就跟着一些培訓班學習Kali,學的雲里霧里的。連基本的Linux概念都沒建立起來,就急着學Kali,這屬於還沒學會走路就去學跑步,本末倒置了。
在基礎階段,主要以使用為主,學習文本編輯、文件、網絡、權限、磁盤、用戶等相關的命令,對Linux有一個基本的認知。
計算機網絡
網絡安全,計算機網絡肯定是非常重要的存在。作為基礎階段,這一小節主要從宏觀上學習計算機網絡,而不是死扣某一個協議的某些字段意義。
首先從局域網出發,了解計算機通信的基本網絡——以太網,局域網內是如何通信的?集線器、交換機有什么區別?MAC地址、IP地址、子網、子網掩碼分別是做什么用的?
隨后引出更大的廣域網、互聯網,什么是網絡通信協議,通信協議分層的問題,通過七層和四層模型快速建立起計算機網絡的基礎概念,各層協議的作用,分別有哪些協議,這些協議在當今的互聯網中具體是怎么應用的。
Web基礎
網絡滲透中非常重要的一個組成部分就是Web安全,要學習Web安全,得先從Web前端基礎開始入手。
這一小節非常簡單,就是學習最原始的Web前端三板斧:HTML+CSS+JS的開發使用,為將來學習Web相關的安全知識打下基礎。
這一小節是相對偏實際動手多一些,需要自己多動手進行一些網頁編程,尤其是JavaScript的熟悉掌握,了解Ajax是什么東西,常用的jQuery庫也學習一下,這都是Web前端中非常基礎和常用的內容。
數據庫基礎
基礎階段的最后一部分,可以來接觸一些數據庫的基礎知識了。
這個階段主要學一些理論知識,重點掌握庫、表、索引等概念,然后學習SQL的編寫,學會增刪改查數據。暫時不用編程來操作數據庫。
青銅時代
度過了石器時代,你已經儲備了一些計算機的基礎知識:操作系統的使用,網絡協議,前端基礎,數據庫初識,但這距離做網絡安全還不夠,在第二個青銅階段,你還需要再進一步學習基礎,在第一階段之上,難度會開始慢慢上升。
這一階段需要學習的知識有:
Web進階
在前面的石器時代,咱們初步接觸了網頁編程,了解了網頁的基本原理。不過那時候是純前端的,純靜態的網頁,沒有接觸后端。在這個進階的階段,你要開始接觸Web后端的內容了。
首先從常用的兩大主流Web服務器出發,學習Apache和Linux的基本知識,隨后引出動態網頁的基本原理,從CGI/Fast-CGI過渡到后來的ASP/PHP/ASPX/JSP等動態網頁技術,了解它們的發展歷史,演變過程和基礎的工作原理。
最后再學習一些Web開發中的基礎知識:表單的操作、Session/Cookie、JWT、LocalStorage等等,了解這些基本的術語都是什么意思,做什么用,解決了什么。
PHP編程
學習Web后端開發,得搭配學習一個后端開發語言才行。在這一小節,選擇從PHP入手。
不過要記住,這里選擇PHP不是讓你以后從事PHP的后端開發,也不是說PHP現在有多流行,而是特定歷史背景下,PHP相關的網站安全問題非常具有代表性,選擇這門語言更方便我們研究安全問題。
由於學習的目的不同,所以在學習方法上和普通的后端開發就有所不同了。在這里咱們學習一下語法基礎,基本的后端請求處理,數據庫訪問,然后再接觸一下常用的ThinkPHP框架即可,當然如果你有興趣,學的更深入當然更好。
計算機網絡進階
第二階段需要再充實一下計算機網絡的學習。這一次,重點把精力放在HTTP/HTTPS以及抓包分析之上。
Linux上的tcpdump必須掌握,包括常見的參數配置。然后重點學習Wireshark分析數據包,用Fiddler抓取分析加密的HTTPS流量。
通過在抓包軟件下查看通信流量,對計算機網絡的認識從抽象變得具象。
加解密技術
接着,來了解一些網絡安全領域內經常打交道的編解碼技術和加解密技術。包括base64編碼、對稱加密、非對稱加密、哈希技術等等。
了解它們基礎的概念、做什么用的,解決什么問題,最后再了解下工作原理。
推薦書籍:《加密與解密》
白銀時代
現在進入第三個階段——白銀時代,激動人心的時刻就要到來了,在這個階段,我們開始全面學習真正的網絡安全技術了,前面兩個階段打下的基礎,在這個階段,也將派上用場。
這一階段需要學習的知識有:
Web安全入門
有了前面的Web前端和PHP編程的基礎,可以來正式學習Web安全了。Web安全領域內幾大典型的攻擊手法:SQL注入、XSS、CSRF、各種注入、SSRF、文件上傳漏洞等等,每一個都需要詳細學習,一邊學習理論,一邊動手實踐。
千萬注意別拿互聯網上的網站來攻擊學習,這是違法的行為。自己可以在虛擬機中搭建一些包含漏洞的網站(網絡上有很多可以下載來玩),拿自己建的網站練手。
網絡掃描與注入
前面學習了一些Web安全的攻擊手法,但光有這些還不夠,當我們面對攻擊目標后,如何尋找攻擊點,獲取目標的信息至關重要。
這些信息包括:目標運行了什么操作系統,開放了哪些端口,運行了哪些服務,后端服務是什么類型,版本信息是什么等等,有哪些漏洞可以利用,只有獲取到了這些信息,才能有針對性的制定攻擊手段,拿下目標。
常見的網絡信息掃描包括端口掃描、網站后台掃描、漏洞掃描等等。需要學習常用的掃描工具以及它們的工作原理。
信息搜集 & 社會工程學
除了上面需要掃描的信息,在網絡安全中,經常還需要調研很多信息,比如網站的注冊信息、相關聯的人物、網站內部的內容檢索等等。這就需要學習掌握信息搜集和社會工程學的相關技術。
whois信息用來查詢域名信息,shodan、zoomeye、fofa等網絡空間搜索引擎檢索IP、域名、URL等背后的信息,Google Hacking利用搜索引擎來檢索網站內部信息,這些東西都是在網絡信息搜集中經常用到的技能。
暴力破解
在網絡攻擊中,當掃描到目標開放的服務后,最直接的就是想要登錄進去。常見的服務有SSH、RDP、MySQL、Redis、Web表單等等。
這個時候,暴力破解通常會派上用場,通過使用各種服務常見用戶名密碼組成的字典,通過程序暴力破解。
常用的爆破工具有hydra、超級弱口令,另外還有一個mimikatz,常用來獲取Windows系統的密碼。
黃金時代
上一個階段,學習了一些安全攻擊技術,在這一個階段,需要學習一下安全防御和安全檢測技術,安全具有攻防兩面性,缺一不可。
WAF技術
首先要學習的就是WAF——Web應用防火牆。
Web安全學習的是通過Web技術攻擊計算機系統,WAF就是檢測和防御這些安全攻擊。正所謂知己知彼才能百戰百勝,作為攻方,要掌握WAF的工作原理,找到弱點繞過檢測,作為守方,需要不斷加強安全檢測和防御能力,有效的發現和抵御Web攻擊。
需要學習當下主流的WAF軟件所采用的架構比如openresty、modsecurity,以及主要的幾種檢測算法:基於特征的、基於行為的、基於機器學習的等等。
網絡協議攻擊 & 入侵檢測
WAF主要針對的是Web相關的安全攻擊,到這一小節,將視野進一步拓展到整個網絡協議棧,TCP劫持、DNS劫持、DDoS攻擊、DNS隧道、ARP欺騙、ARP泛洪等等,需要掌握這些傳統經典攻擊手段的原理,搭建環境實踐,為后續的內網滲透打下基礎。
另外作為防守的一方,還需要學習通過網絡流量分析技術來進行安全檢測,了解常用的網絡分析技術,檢測框架,規則語法,對以后從事安全相關開發或安全防御工作進行儲備。
日志技術
通過日志來發現攻擊行為是一種最常見的行為,攻擊者的Web請求,系統登錄,暴力破解嘗試等等都會被系統各種軟件記錄在案,攻擊者得手后也經常會抹除相關的日志記錄,所以學習掌握這些日志,是攻防兩隊的人都需要學習的技能。
常見的日志有系統登錄日志(Windows、Linux)、Web服務器日志、數據庫日志等等。
Python編程
在這個階段,是時候來學習一些Python編程開發了。雖然網絡安全不用經常做大量的工程開發,但掌握基本的編程能力,可以用來編寫爬蟲、數據處理、網絡掃描工具、漏洞POC等等,都是非常有用的,而眾多編程語言中,Python無疑是最適合的。
瀏覽器安全
這個階段的最后一部分,來學習了解一些瀏覽器側的安全知識,夯實Web安全中與瀏覽器相關的漏洞攻擊。
需要重點掌握IE、Chrome兩款最主流的瀏覽器特性,瀏覽器的沙盒機制是什么,同源策略和跨域技術等等。
鉑金時代
第三方組件漏洞
前面Web安全相關的攻擊都是一些很多年的經典手法了,經過多年的發展已經相當成熟,相關的漏洞早已不如以前多,現在很多時候的攻擊,都是依靠各種各樣的第三方組件漏洞完成的,所以學習研究這些常見第三方組件的漏洞,一方面掌握這些攻擊手法用於實戰中使用,另一方面觸類旁通,對從事漏洞挖掘的工作也是非常有幫助的。
研究的對象主要涵蓋目前互聯網服務中實際使用的一些工程組件,比如Java技術棧系列Spring全家桶、SSM、Redis、MySQL、Nginx、Tomcat、Docker等等。
內網滲透
網絡滲透中,攻下一個點后,只是一個開始,攻入以后如何轉移,控制更多的節點,是內網滲透研究學習的范疇。典型的如當年的永恆之藍病毒,通過SMB協議漏洞,快速擴散傳播,造成了大面積的中招。
內網滲透中要學的東西既多且雜,難度要上升不少,但這是做網絡滲透的非常重要的一塊兒,必須多啃一啃。這一部分理論較少,偏實戰性多一些,需要多搭建環境模擬學習。
操作系統安全技術 & 提權技術 & 虛擬化技術
通過web等手段滲透進入計算機后,由於各種限制原因,經常會有提權的需求,還會涉及到許多跟操作系統安全機制緊密相關的內容,所以學習一些操作系統的安全知識也是非常有必要的。
像Windows、Linux上各自的權限管理機制,提權方法和常用的漏洞,工具等等
最后,再學習一些虛擬化技術相關的知識,應對可能需要從虛擬機中逃逸的場景。
王者時代
CobalStrike & MetaSploit
學習使用這兩個神器,將大大提升攻擊效率,是網絡滲透人員居家旅行必備之選!
其他安全技術拓展
到了網絡滲透的后期階段,想成為一個安全高手,絕不只是固步自封在自己擅長的領域,需要多學習網絡安全的其他領域,拓展自己的知識面。
比如二進制漏洞攻擊、逆向工程、木馬技術、內核安全、移動安全、側信道攻擊等等,當然在學習的時候,不用像專業方向的同學那么深入,但需要涉獵了解,豐富自己的知識面,構建全方位的網路安全知識技能棧。
以上就是我分享的網絡安全學習路線了,希望對自學的你有一些啟發和幫助。