?

基于端口掃描的變電站主機漏洞檢測系統

2022-01-28 02:13顏天佑
信息安全研究 2022年2期
關鍵詞:安全漏洞線程口令

顏天佑 盧 灝

(廣東電網有限責任公司廣州供電局 廣州 510620)

隨著第4次工業革命的到來,工業信息化進程不斷推進,傳統電網已經不能滿足國民生產生活的需求,再加上嚴峻的資源匱乏和環境污染問題,使得智能電網成為主流的發展趨勢.變電站作為電力供應網絡的重要環節,必然是智能電網研發中的熱點領域.不僅要承擔起電力能量轉換、調節控制、信息檢測等重要工作,更需要具備電力網絡的實時監測、自動控制、信息分析、風險預測和處理等高級功能.然而,網絡本身就是一個開放性服務系統,再加上主流通信協議和系統架構在使用中固有的安全缺陷,使得任何一種網絡系統都不可能完全避開網絡風險以及安全威脅[1].這也就意味著人們在接受由快速發展的網絡所帶來的生活上的便利和經濟上的效益的同時,也要面對網絡空間安全提出的可能危及到每個人的巨大挑戰,比如黑客攻擊、病毒傳播、非法聯絡、信息竊取等,這些威脅網絡信息安全的事件頻發,給國家安全、制度完善和人身權利造成了很大的危害,并造成了巨大的經濟損失.所以,在如今這個信息化程度穩步提升、網絡技術應用高速擴展的時代,保障網絡空間的安全顯得愈發重要.

根據目前網絡安全的狀況來看,雖然國家和企業都對這方面投入了很多財力物力人力,但是仍然沒能有效地將黑客的攻擊阻擋在防火墻外.尤其針對電網來說,緊密關系國民日常生活和國家正常運作,很多黑客會利用一些尚未發掘或潛在已久的漏洞攻擊電力網絡或者竊取內部機密信息.總的來說,我們認為變電站系統仍存在以下安全隱患:

1) 智能變電站2次系統本身的網絡架構復雜,涉及多設備、多層次、多系統,很容易出現漏洞,使得網絡本身的安全性大大降低;

2) 系統管理和維護耗費大量的人力物力財力,防火墻的部署以及漏洞庫的更新都是一個長期的可持續過程;

3) 對網絡安全保護范疇缺乏正確完整的認識,構建安全可靠的智能變電站系統不僅需要在傳統的電力網絡中融入網絡技術,更包括安全策略在管理中的部署[2],在不影響原始系統可用性的前提下提高安全等級;

4) 缺乏有效和準確的入侵檢測和漏洞檢測系統[3].

因此,本文以變電站主機安全為主要出發點,考慮到它在運行過程中不可避免地要開放各種端口進行服務,設計實現了一個基于端口掃描的漏洞檢測系統,并反饋給安全管理人員詳細的掃描結果報告,以幫助其了解系統的實時狀態,提高安全性.

1 網絡安全漏洞及攻擊原理

1.1 安全漏洞的定義

所謂的安全漏洞是指在安全策略設計、通信協議應用以及軟硬件開發等過程中所存在的不可避免的問題.它允許攻擊者在不經過正規許可的情況下訪問系統、修改系統甚至銷毀系統.漏洞的出現有其必然性[4].

1) 硬件原因

軟件程序員無法彌補的硬件有一些固有的漏洞.同時,在工作時,這些由硬件引發的漏洞有很大的可能會通過軟件漏洞的形式表現出來.

2) 設計原因

許多計算機網絡在初次設計時沒有充分考慮安全問題.因此有很多的網絡技術和協議在網絡安全方面存在著先天的不足,這些是很難通過后天的維護去修復的.

3) 編程原因

從主觀方面來看,有一部分編程人員喜歡在自己的程序中留下一些后門來方便自己的一些行為.從客觀上來講,由于時代和技術的限制,很多程序員在編程時不會去考慮安全問題或者沒有能力去處理這類問題,導致設計中不可避免的缺陷造成了安全漏洞.從軟件工程學科的角度來看,系統的正確性只能通過測試加以驗證,但這只能用來發現錯誤、驗證錯誤的存在,而無法證明某些錯誤不存在,因此即使經過測試也很難保證系統中沒有潛在的隱含錯誤.

4) 管理原因

即使硬件和軟件都完美無缺不存在安全漏洞,但是相關的管理人員在進行網絡資源調配或者對系統的不合理配置都會導致一些人為的安全漏洞的產生,這一點很值得人們注意[5].

1.2 安全漏洞攻擊

1) 拒絕服務攻擊

當攻擊者使用類似洪泛的信息擊中網絡系統時,會出現最常見的DoS攻擊.比如用戶通過網址訪問某網站時,實際上是在向網站的服務器發送瀏覽網站的請求.由于資源有限,服務器只能同時處理一定數量的請求,因此如果攻擊者在一段時間內向服務器發送的請求超過其處理能力,服務器沒有資源來處理其他正常請求,導致服務器崩潰.正是因為其他用戶無法再進入這個網站所以被稱為“拒絕服務攻擊”.其攻擊原理如圖1所示:

2) 緩沖區溢出攻擊

所謂的緩沖區是內存中預留出來的用于存儲數據的連續存儲空間.緩沖區溢出攻擊是指實際所存入緩沖區的內容超出其預留的大小,利用地址沖突獲得堆棧操作能力,通過重寫其返回地址以獲得目標控制權[7].緩沖區溢出攻擊可能導致程序執行失敗、系統關閉或其他后果[8].更重要的是它也可以用來執行未授權的指令,甚至可以獲得系統執行各種非法操作的特殊權限[9].

3) 身份欺騙類攻擊

身份欺騙是一種主動攻擊.這種攻擊的方式非常多,常見的有IP欺騙攻擊、ARP欺騙攻擊、MAC地址欺騙攻擊、DNS欺騙攻擊、代理服務器欺騙攻擊、賬戶名稱欺騙攻擊等.其中IP欺騙攻擊使用最為廣泛[10].

2 網絡安全漏洞掃描技術

安全漏洞掃描也被稱為脆弱性評估(vulnerability assessment),是為了讓安全管理人員能夠及時了解網絡中有哪些漏洞,來針對性地采取一些措施,從而降低系統受到攻擊的概率的一種安全技術.它與防火墻、入侵檢測系統的共同配合使用能夠為網絡系統提供更全面的安全保障[11].相比于防火墻和入侵檢測系統的被動防御,漏洞掃描可以說是主動出擊,發現漏洞然后防患于未然[12].

2.1 安全漏洞掃描的基本原理

通過掃描網絡系統,安全管理員可以清楚地了解網絡目前的狀態、實時安全配置以及所運行的應用程序和服務.掃描方法[13]是積極的和非破壞性的.從安全保護的角度來看,這種方法可以提前發現潛在的安全風險并在攻擊被黑客利用之前對其進行修復.

漏洞掃描技術主要包括2種實現方法:首先是先進行端口掃描,收集系統的各種相關信息,如是否可以匿名登錄、是否用root身份運行等.獲取目標端口信息及其相應的網絡應用服務后,與漏洞庫進行比較,發現潛在的安全風險.其次是模擬黑客攻擊并對目標執行攻擊性安全掃描,如拒絕服務攻擊[14].

2.2 端口掃描基本方法

端口掃描是漏洞掃描的主要形式[15].

1) TCP連接掃描(TCP connect scan).又稱“TCP全連接掃描”,它也是公認的相比所有掃描技術中最簡單直接的方法.它首先針對目標端口建立3次握手通信過程,然后調用操作系統內置函數connect()即可連接到目標計算機.如果端口處于活動狀態,則可以成功調用該功能,否則端口將處于不可用狀態并且無法提供服務[16].

2) TCP同步序列號掃描(TCP SYN scan).如果端口掃描過程不建立完整的TCP連接,即建立TCP連接時只完成前2次握手,并且連接第3次斷開連接,從而無法完全建立連接.這種端口掃描方法也稱為“半連接掃描”.

SYN掃描從自身指定端口向目標指定端口發送TCP SYN連接建立請求數據包后,等待對方返回響應數據包[17].如果SYN位和ACK位在響應數據包中有所設置,則證明目標端口是打開的.如果所收到的答復數據包是RST連接重置數據包,則證明另一方的端口處于非活動狀態.也就是說使用這種方法只要完成建立連接的有效部分就可以完成端口掃描.

3) TCP結束標志掃描(TCP FIN scan).該掃描方法不依賴于前2種方式中通信雙方所要求的TCP 3次握手過程.在TCP連接結束時,它會希望端口發送一個連接終止數據包并為其設置FIN位.如果這個端口是不活躍的,則會忽略該數據包,不對其進行操作,而如果這個端口是活躍的,會對其進行回復,本地端口即可收到具有響應RST設置的連接重置數據包[17].我們可以根據它是否響應RST數據包來判斷端口是否處于活動狀態.

3 基于端口掃描的變電站主機漏洞檢測系統

3.1 系統需求分析與流程設計

總體來說,這是一個基于端口掃描的變電站主機安全漏洞檢測系統.

針對智能變電站系統業務連續性和實時性強的特點,進行漏洞檢測的過程必須不影響變電站主機的正常運行.本文從端口檢測入手,僅通過模擬正常訪問建立TCP/UDP連接測試變電站主機的開放端口服務,不要求變電站主機進行額外操作,不占用其他資源.

在端口掃描部分,傳統的端口掃描方法中大多是采用指定端口范圍的方式,但實際生活中常用的開放端口分散性強、跨度廣,大批量檢測和多次重復檢測都難免會增加變電站主機的訪問量和服務負擔[18],同時浪費更多時間,不利于漏洞的實時發現與防御.本文在此基礎上拓展了指定端口集合的掃描方法,安全人員能夠根據變電站系統的實際運行情況,指定需要掃描的端口,只需執行1次檢測即可實現多個端口段的檢測,保證低耗時、高效率.

在具體實施上,該系統借助Java多線程的機制.并非是同一線程逐個、依次與變電站主機的每個端口建立連接,而是多個線程并發訪問1次,分別測試不同的端口,極大地優化了網絡連接部分的額外耗時,預防傳統檢測技術可能造成的網絡擁塞問題[19].

最后,考慮到變電站系統管理人員可能對于網絡漏洞安全缺乏熟練性和專業性,該系統以HTML的形式給出漏洞掃描報告,盡可能詳盡地說明系統狀態來協助系統安全管理人員了解系統端口運行狀況,提高系統安全性.

系統整體結構如圖2所示,分為端口掃描和漏洞檢測2大部分.

其中端口掃描部分包含2種方法,漏洞檢測模塊中則包含3個流程.從上到下,先進行端口掃描,既可以掃描指定的端口范圍,也可以掃描指定的端口集合.其目的主要是先找出目標網站主機開放的端口,然后通過調用第三方工具對這些已開放的端口進行漏洞檢測,先確定并行的線程數再選擇需要檢測的漏洞種類,最后檢測完成生成檢測報告.系統整體流程如圖3所示:

3.2 模塊設計

3.2.1 多線程并發機制

本文定義了一個scanLargePorts類,類中包含一種后續實現的端口掃描方法ScanMethod.這里通過循環建立線程池,然后線程可以通過調用該方法進行掃描.另外,在后面放置一個while循環來判斷線程池是否已經關閉,若關閉則輸出“掃描結束”并跳出循環,若尚未關閉則等待1 s,并調用Exception類中的方法打印產生錯誤的位置和原因.

對于線程數目的確定,考慮到不同外部環境、不同硬件設備對于檢測可能造成的干擾,我們允許用戶根據設備計算能力、主機負載能力、檢測精度要求等自行設置并發線程個數,提高穩定性.

部分模塊代碼如下:

/*

多線程掃描目標主機的端口開放情況

ip 需要掃描的目標IP或目標域名,

例:14.215.177.38 www.baidu.com;

sport 起始端口號;

eport 結束端口號;

thnumber 并發線程個數;

timeout 連接超時時間

*/

public void scanPorts(String ip, int sport, int eport,int thnumber, int timeout)

{

ExecutorService threadPool=

Executors.newCachedThreadPool();

for (inti=0;i

/*調用端口掃描方法ScanMethod*/

threadPool.execute(scanMethod);

}

threadPool.shutdown();

while (true) {

if (threadPool.isTerminated()) {

System.out.println(“掃描結束”);

break;

}

try {

Thread.sleep(1000);

}

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

3.2.2 端口掃描模塊

1) 掃描指定范圍端口

主要實現思路是給定一個端口號的范圍,讓掃描器掃描這個范圍中所有端口,檢查端口的開放情況.在這里本文通過定義run()函數來實現對范圍內每個端口的掃描,并建立socket連接來測試端口是否開放[20],即若能成功建立連接則說明該端口是開放的,若在建立連接時發生超時則說明該端口處于關閉狀態.在多線程機制下,對于指定范圍內的端口,端口序號是有序排列的,每個線程按照序號一一對應一個端口號,相當于對整個端口序列按照線程總數進行分組,當前線程對分配到的端口檢測完成后,自動獲取下一組端口中與之對應的端口,間隔式檢測,保證每次這些線程偶讀同時進行掃描,不會出現多線程同時檢測同一端口造成的訪問沖突以及資源搶占問題.實現代碼如下:

class ScanMethod1 implements Runnable {

private String ip; /*目標主機的IP地址*/

private int sport, eport, thnumber,

serial, timeout; /*serial線程序列號,

即第幾個線程 */

public void run() {

int port=0;

try {

InetAddress address=

InetAddress.getByName(ip);

Socket socket;

SocketAddress socketAddress;

for (port=sport+serial; port<=

eport; port += thnumber) {

socket=new Socket();

socketAddress=new

InetSocketAddress(address, port);

try {

socket.connect(socketAddress,

timeout); /*時間超時*/

socket.close();

System.out.println(“端口”+port

+“ :開放”);

}

catch (IOException e) {

/*System.out.println(“端口”+

port+“ :關閉”);*/

}

}

}

catch (UnknownHostException e) {

e.printStackTrace();

}

}

}

2) 掃描指定端口集合

據統計,計算機有大約65535個端口,但是常用端口只有20個左右,跨度范圍廣、分散性強.若只采用指定端口范圍的方式,大批量檢測和重復檢測都不是最優方法.本文設計了掃描指定端口集合的方式,用戶根據實際情況在給定的端口集合中輸入所有需要掃描的端口號,只需讓掃描器檢查這些指定端口是否開放.與之前掃描指定范圍的端口類似,只是在這里端口號不是按照順序依次羅列,而是隨機分布的.本文將給定的一系列端口號用數組的形式存儲下來,然后依舊通過建立socket連接的方式來確定端口的狀態.

public void run() {

/*PortSet為待檢測端口集合*/

int port=0;

Integer[] ports=portSet.toArray(new

Integer[portSet.size()]);

try {

InetAddress address=

InetAddress.getByName(ip);

Socket socket;

SocketAddress socketAddress;

if (ports.length<1)

return;

for (port=0+serial; port<=

ports.length-1;port+=thnumber) {

socket=new Socket();

socketAddress=

new InetSocketAddress(address,

ports[port]);

try {

socket.connect(socketAddress,

timeout);

socket.close();

System.out.println(“端口”+

ports[port]+“ :開放”);

}

catch (IOException e) {

/*System.out.println(“端口”+

ports[port]+“ :關閉”);*/

}

}

}

catch (UnknownHostException e) {

e.printStackTrace();

}

}

3.2.3 漏洞檢測

考慮到系統的有效完備性,我們共提供20個漏洞檢測類型[21].用戶可以根據檢測需求自行選擇.完整的漏洞類型如下:1)開放服務;2)NT-Server弱口令;3)NetBios信息;4)Snmp信息;5)遠程操作系統;6)TELNET弱口令;7)SSH弱口令;8)REXEC弱口令;9)FTP弱口令;10)SQL-Server弱口令;11)WWW弱口令;12)CVS弱口令;13)VNC弱口令;14)POP3弱口令;15)SMTP弱口令;16)IMAP弱口令;17)NNTP弱口令;18)SOCKS5弱口令;19)IIS編碼/解碼漏洞;20)漏洞檢測腳本.

當設置好需要檢測的漏洞類型后,即可加載插件,檢測指定地址的主機中存在的漏洞并生成掃描報告.為了盡可能地幫助管理人員深入了解系統安全狀況,所生成的掃描報告中不包含指定地址下的主機存活數量,而且按照問題嚴重等級分為漏洞數量、警告數量、提示數量,對其出現的安全問題也能夠比較詳盡的說明,比如每一個安全問題所對應的端口/服務、安全漏洞的表現及其解決方案.

4 系統測試

4.1 端口掃描

本文針對掃描指定端口范圍和掃描指定端口集合2種方法,分別測試了并發的不同線程個數針對同一測試主機(172.26.193.192)進行端口掃描的結果.以并發5個線程掃描常見端口為例,掃描結果如圖4所示,能夠掃描到用來瀏覽網頁的443和80端口處于開放狀態.

考慮到檢測系統不能影響變電站主機的正常工作,本文對于整個檢測過程的耗時也進行了統計.對于指定端口集合的掃描,保證集合相同,分別并發5,10,15個線程進行測試;對于指定范圍端口的掃描,分別設置端口號從0~100,0~500和0~1 000,并發線程數分別為10,20,50.結果如表1所示:

表1 多線程并發端口掃描耗時分析

由測試結果可知,系統的整體運行時間在可接受范圍內,對變電站主機的正常業務工作影響不大.

當待掃描的端口范圍一樣時,增加同時進行掃描的線程數能有效地降低耗費的時間,但是增加的線程數如果過大,可能會導致掃描的精度下降.可以由用戶根據檢測需求自行設置并發線程數目,靈活使用.

4.2 漏洞檢測

為了全面測試系統功能,本文首先針對本地主機進行了漏洞檢測,檢測過程中勾選了所提供的全部漏洞類型,檢測過程如圖5所示:

為了驗證系統的通用性和可靠性,我們還針對另一臺主機進行了漏洞檢測.2臺主機所生成的檢測報告如圖6和圖7所示:

5 結束語

如今,網絡空間逐漸發展成為繼海、陸、空、天之后的第5個具有戰略意義的空間,成為工業信息化、產業智能化的核心、關鍵和基礎.由于網絡空間的開放、服務、動態和可移動等異構特性,使得新技術更新換代、不斷涌現的同時,也面臨著更加嚴峻的安全形勢.本文以關系國民生活的變電站系統為落腳點,為其設計了基于端口檢測的漏洞掃描系統,針對其所開放的服務端口,及時監測并發現潛在危險.涵蓋了主機中可能存在的20種漏洞供用戶自行選擇,既能全面檢測,也能針對性檢測,完備性強,靈活性高.同時,多線程并發操作也使得本文的系統具有較好的實用性和高效性.綜上所述,本文設計研發的系統能夠協助系統安全管理人員了解變電系統運行狀況,提高系統的安全性.

猜你喜歡
安全漏洞線程口令
5G終端模擬系統隨機接入過程的設計與實現
實時操作系統mbedOS 互斥量調度機制剖析
淺析體育賽事售票系統錯票問題的對策研究
芻議計算機軟件中的安全漏洞檢測技術
高矮胖瘦
口 令
智能設備安全漏洞知多少
好玩的“反口令”游戲
計算機軟件安全漏洞檢測技術
健身氣功·五禽戲教學口令
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合