OpenVAS漏洞掃描插件工做原理淺析

開始閱讀此文以前請安裝好OSSIM v4.15
OpenVAS釆用滲透測試原理,利用Scanner模塊中的腳本引擎對目標進行安全檢測。Openvas的Scanner的掃描性能依賴於同時進行掃描的併發進程數,不一樣的硬件環境上可設置的最有效併發掃描數各不相同,Openvas的掃描引擎設備可在保證系統穩定的前提下達到最佳的掃描性能,對於大型網絡使用標準設備進行部署可大大下降安裝和維護成本。
腳本引擎根據用戶提交的配置與要求,首先對腳本進行加載與調度,按照順序依次調用腳本並解析執行,實現掃描功能。php

1.插件功能舉例正則表達式

在/var/lib/openvas/plugins/目錄下,分析cross_site_scriping.nasl腳本,本文重點對該文件進行講解,請你們在閱讀以前準備好腳本。跨站腳本漏洞是Web應用的常見漏洞,下面將開始對cross_site_scriping.nasl腳本分析,總結此類漏洞檢測過程。shell

77行script_category(ACT_GATHER_INFO);設置腳本的類別,這些類別有:
 ACT_GATH (信息採集類腳本)
 ACT_ATTACK (嘗試獲取遠程主機權限腳本)
 ACT_DENIAL(拒絕服務攻擊腳本)
 ACT_SCANNER(端口掃描腳本)
Category表明了腳本執行的優先級,不是隨便掃描,這種優先級的設定符合常規掃描過程,咱們在掃描初期須要對目標主機的端口信息,系統信息,服務信息進行收集,根據這些已知信息合理的進行後續測試,這種測試也是按照由弱到強的順序執行,爲何呢?若是首先就進行最強的漏洞掃描,至關於進行最危險的測試,一旦目標主機存在相應漏洞,當即系統就會崩潰,整個測試就沒法全面進行。
圖片描述
NASL腳本的結構與參數在後面內容將會進行詳細介紹,此處先對腳本中category參數進行簡單描述,category在腳本調度的過程當中具備很是重要的做用,category表明了腳本執行的優先級,經過宏對各種category值的優先級進行定義,NASL腳本按照下表中category優先級由高到低執行,相同優先級按照腳本id順序執行。
圖片描述
這種優先級的設定符合通常掃描過程的邏輯,咱們在掃描初期,須要對目標網絡的端口信息、系統信息、服務信息等進行收集,根據這些已知信息,合理進行後續的測試,並且再測試過程當中也要按照由弱到強的順序執行,若是首先進行高危測試,且目標系統存在相應漏洞,則會致使系統崩潰,測試沒法繼續進行。NASL腳本在完成加載調度的過程當中,須要通過三次處理,每次處理都定義了符合要求的鏈表結構對腳本及相關信息進行保存。
圖片描述
32行 include(「revisions-lib.inc」) 添加引用的類庫。
63行 script_id(10815); 添加 openvas ID。
但有些腳本會同時出現script_cve_id(「CVE-2010-2963」、」CVE-2010-3067」)這表明添加CVE ID,CVE(Common Vulnerabilities and Exposure)這類例子你們能夠參看deb_2126_1.nasl腳本,若是該漏洞有CVE編號,能夠再這個字段給出。一樣在freebsd_php5-gd.nasl腳本里還出現了script_bugtraq_id(33002),咱們能夠把CVE看做是一個詞典,它提供了許多的交叉引用,如今大量公司都宣佈他們的安全產品或數據庫都和CVE相兼容,也就是可以利用CVE中漏洞名稱同其它CVE兼容的產品進行交叉引用,經過CVE中爲每一個漏洞分配一個惟一的名稱,在其它使用了這個名稱的工具、網站、數據庫以及服務中檢索到相關信息,同時自身關於該漏洞的信息也可以被檢索到。因此在網絡安全評估時,利用CVE能夠找出修補漏洞的措施,CVE能夠提供很好的指導。你們若是要具體查詢這些ID信息能夠用grep命令
grep –ir 「script_bugtraq_id」 /var/lib/openvas/plugins/
圖片描述
78行 script_family("Web Servers");設置腳本所屬的族(family)。
NASL對此沒有明確規定,插件做者能夠本身定義腳本所屬的族。Openvas 使用的族有:
 Debian Local Security Checks
 Fedora Local Security Checks
 Mandrake Local Security Checks
 HP-UX Local Security Checks
 Ubuntu Local Security Checks
 CentOS Local Security Checks
 Windows : Microsoft Bulletins
 FreeBSD Local Security Checks
 Red Hat Local Security Checks
 Solaris Local Security Checks
 CentOS Local Security Checks
 Web application abuses
 FreeBSD Local Security Checks
 Buffer overflow
 Firewalls
 Web Servers
 RPC
 General
 CISCO
 Databases
 Useless services
 Default Accounts
 Nmap NSE net
 Gain a shell remotely
 Malware
 Port scanners
 IT-Grundschutz
 SMTP problems
 Gentoo Local Security Checks
 SuSE Local Security Checks
 FTP
 Denial of Service
 Windows
 Service detection
實際上這些族就是主要的攻擊種類。
下面繼續看79行內容:
79行 script_copyright("Copyright (C) 2001 SecuriTeam, modified by Chris Sullo and Andrew Hintz");
設置腳本的版權信息
80行 script_dependendes("find_service.nasl", "httpver.nasl");
第80行腳本說明腳本依賴關係,若是要讓cross_site_scriping.nasl正常運行,必須依賴find_service.nasl"、"httpver.nasl"這兩個腳本。
圖片描述
81行script_require_ports("Services/www", 80);
代表執行此腳本所需的目標服務器的端口信息;
95行 port = get_http_port(default:80);獲取服務器端口
123行if(get_port_state(port))判斷端口是否打開
134行req = http_get(item:url, port:port);發送帶有攻擊性的請求
• 注意:nasl腳本主要是對攻擊的描述,只是說明的攻擊的步驟,不是一般意義上的攻擊
圖片描述
135行 r= http_keepalive_send_recv(port:port, data:req, bodyonly: TRUE); 接收響應
165行 set_Kb_item(name:string("www/", port, "/generic_xss"), value:TRUE);
圖片描述
查看知識庫中是否已存在此漏洞信息,知識庫中保存了各種掃描所需相關信息,例如:
 主機存活信息(Host/dead)
 主機提供服務的信息(ftp/no_mkdir)
 端口掃描信息(services/ftp)
 測試登陸信息(SMB/login SMB/password)
在腳本測試過程當中,若是收集到有用的信息,將經過set_Kb_item()這個函數,在知識庫中增長相應條目;當須要對知識庫中的相關信息進行調用時,則利用get_Kb_item()函數進行讀取。數據庫

2.NASL經常使用函數介紹
 open_sock_tcp()、open_sock_udp(),分別用於打開一個TCP或者UDP套接字。
 close(), 關閉一個端口。
 forge_ip_packet(), 函數構造一個新的IP報文。
 forge_tcp_packet() , 構造TCP報文。
 set_tcp_elements(), 可修改TCP報文的內容。
 forge_udp_packet(), 構造UDP報文。
 send_packet(), 函數發送報文。
 pcap_next() , 函數將從使用的最後一個接口讀取一個報文。
 this_host(), 獲取運行腳本的主機IP地址,沒有參數。
 get_host_name() , 獲取當前被測試主機的主機名,沒有參數。
 get_host_ip() , 獲取當前被測試主機的IP地址,沒有參數。
 get_host_open_port() ,獲取遠程主機打開的第一個端口號,沒有參數。
 get_port_stat(<portnum>),獲取端口的狀態。
除此以外還有大量的正則表達式函數這裏就不一一舉例。安全

3.OpenVAS腳本加載過程分析服務器

若是你須要開發插件對於,須要瞭解的一個重點問題是,當啓動OpenVAS時,由openvassd進程加載全部的腳本(/var/lib/openvas/plugins/下的*.nasl腳本),存儲爲argiist結構(數量可變的參數列表指針);根據客戶端傳遞的配置信息,選取須要的腳本,加載爲scheduler_plugin結構;最後根據選取腳本的category將腳本分組,組織腳本的執行順序,保存到plugins_scheduler-struct結構。
OpenVAS關於腳本管理設計的很是合理,初始的加載腳本是保存的argiist鏈表內容,供後面進步一選取腳本及組織腳本執行順序時調用,可有效減小內存的使用,提升工做效率。在腳本引擎的工做中,將腳本執行收集到的信息保存在知識庫中,可有效避免重複掃描,減小沒必要要的資源浪費,提升工做效率。知識庫中條目結構定義以下:
Struct kb_item
{
char name; /知識庫中條目名稱*/
char type; / 條目的類型 int 或 string /
union
{
char *v_str;
int v_int;
} V; /<知識庫中條目的值/
struct kb item next; /指針指向下一條目 */
};
知識庫中保存的信息包含各種掃描信息例如:
 主機存活信息(Host/dead)。
 主機提供的服務信息(ftp/no_mkdir)。
 端口掃描信息(Services/ftp)。
 測試登陸信息(SMB/login; SMB/password)。
 用戶檢測時進行的系統設置信息。
在腳本執行過程當中,若是收集到有用信息,將經過set_kb_item()函數,在知識庫中增長相應條目;若是須要對知識庫中的相關信息進行調用,則使用get_kb_item()函數進行讀取操做。
腳本在執行時若是有依賴的系統環境、端口狀態等信息,會到知識庫中查詢,並根據查詢結果作出合理的操做。例如:某腳本的執行須要目標主機的80端口打開,經過知識庫查詢,發現目標的80端口是關閉的,那麼此腳本的執行將放棄,且該腳本對應線程關閉;若是發現目標的80端口處於開啓狀態,那麼該腳本將順利執行,對目標進行檢測。經過對知識庫中信息的查詢判斷,可有效提升腳本執行的效率,一些無心義的掃描將被過濾。
更多OSSIM的內容請你們關注個人2019年最新做品。
圖片描述網絡

相關文章
相關標籤/搜索