1. 程式人生 > >openvas9 原始碼編譯及模組解析

openvas9 原始碼編譯及模組解析

                                      OPENVAS 9原始碼編譯

 該文章為作者原創,轉載請宣告來源

作為業界最牛x的掃描器,通常來說安裝openvas都會直接在kali上使用或者apt來安裝,雖然安裝步驟算不上簡單,但是相比原始碼安裝肯定是方便了很多,後來openvas官方釋出了openvas的一個bug,這個bug的影響會導致一個半個小時掃完的ip需要三個小時才能掃完,而幾個月之後,官方也更新了新版本,我查看了一下那次提交,bug解決起來很簡單,只需要把一個while迴圈改成do while,然後加一個條件判斷,但是不僅需要重新編譯scanner,也要重新編譯庫檔案,因此乾脆就選擇了從頭編譯,也可以更加了解openvas各個模組。畢竟恐怕沒有掃描器比openvas原始碼編譯更復雜的了,但是同時在原始碼編譯的過程中也能對openvas各模組有更細緻的瞭解。

目錄

一.編譯檔案版本

我採用的版本如下:必要檔案:         openvas-libraries-9.0.3        OPENVAS庫檔案         openvas-scanner-5.1.3        掃描代理         openvas-manager-7.0.3       排程中心         openvas-cli-1.4.4                  命令列呼叫         gsa-7.0.3                               前端Web UI         redis-2.8.0                            資料庫

其他檔案(自選):         gvm-tools-1.4.1         openvas-smb-1.0.4         ospd-1.2.0

系統環境         ubuntu 16.04 server

以上檔案為2018.11.5日最新版(除了redis) 可以從openvas官網和github關注更新                      https://community.greenbone.net/t/gvm-9-stable-initial-release-2017-03-07/211

二.安裝cmake

1.    openvas原始碼安裝過程,必要檔案都是採用了cmake進行安裝,安裝之前先閱讀INSTALL檔案,安裝需要安裝的庫 2.    隨後建立build檔案後在build檔案中cmake .. 然後make && make install即可 3.    如果不想安裝在預設路徑下,在cmake之前export一下環境變數:                      export PKG_CONFIG_PATH=/your/location/lib/pkgconfig:$PKG_CONFIG_PATH        然後cmake語句中宣告新的路徑:                      cmake -DCMAKE_INSTALL_PREFIX=/path/to/your/installation ..

4.    openvas原始碼編譯中對更改路徑有一些不友好,除了以上兩點之外,後續安裝過程依然存在兩個找不到路徑的問題,需要更改閱讀原始碼後對.c檔案進行操作(很坑),因此建議安裝到預設路徑(我的為/usr/local)

三.安裝openvas庫檔案

1.    解壓庫檔案:tar -zxvf openvas-libraries-9.0.3.tar.gz

2.    檢視INSTALL檔案:其中依賴的庫如下:

       不過好在下邊給出了Debian的安裝庫安裝命令,雖然開頭提到了建議使用Debian,在其他系統可能會安裝失敗:

       但是由於ubuntu的前身是debian,而且本人習慣於使用ubuntu,因此還是採用ubuntu進行原始碼安裝,安裝庫如下:

3.    隨後apt安裝doxygen,雖然這個庫不會影響整個openvas的編譯,但是會影響make doc,和make doc-full,也就是一些面向開發者的文件,如果沒有相應的需求可以忽略

4.    接下來就可以編譯openvas-lib了,依次執行以下命令:         mkdir build         cd build         cmake ..             make                               構建庫檔案         make doc                        構建基礎文件         make doc-full                  構建更多面向開發者文件         make install                     安裝所有構建的檔案          make rebuild_cache       重置cmake特徵 5.    進入預設路徑中的bin觀察剛剛建立的可執行檔案:其中openvas-nasl比較重要,它是用於執行單個外掛的程式。

        以掃描vsftp的backdoor漏洞為例,呼叫命令為:openvas-nasl -X -t 192.168.140.115 -i /var/lib/openvas/plugins/ -k               get_app/ports/cpe:/a:beasts:vsftpd=21 /var/lib/openvas/plugins/2011/gb_vsftpd_backdoor_07_2011.nasl         當然現在還沒有從官方地址拉取外掛庫,因此無法執行上述命令 6.    其他選項:         可以繼續閱讀INSTALL檔案,還包括配置選項,庫檔案靜態連結的構建等

四.安裝openvas-scanner 掃描代理

1.    解壓掃描代理:openvas-scanner-5.1.3.tar.gz 2.    檢視INSTALL         發現openvas-scanner也存在很多庫依賴,但是檔案中並沒有給出apt安裝的語句,因此直接嘗試cmake進行安裝 這裡注意如果庫檔案安裝在了非預設路徑下,要先export一下環境變數,讓scanner可以找到庫檔案 3.    編譯openvas-scanner         mkdir build         cd build         cmake ..             make                               構建庫檔案         make doc                        構建基礎文件         make doc-full                  構建更多面向開發者文件         make install                     安裝所有構建的檔案          make rebuild_cache       重置cmake特徵 4.    檢視openvas-scanner安裝生成的檔案:

        其中openvassd為scanner的執行檔案,greenbone-nvt-sync為NVT(openvas中對漏洞外掛的簡稱)同步指令碼,兩個redis的配置檔案分別對應不同版本的redis的配置 5.    進行掃描器配置:         由於openvas的掃描器的配置會直接決定掃描結果的,因此我們最好對它進行一定的瞭解,然後按照需求進行配置,檢視的命令為openvassd -s,然後在$prefix/exc/openvassd.conf中進行配置即可         openvassd在/usr/local/sbin中         但是當前還無法執行openvassd,因此稍後再來觀察scanner的配置 6.    對漏洞外掛進行同步         這一步就簡述了,直接執行greenbone-nvt-sync就可以了,這個檔案在/usr/local/sbin中         這個時間較長,因為要同步50,000個外掛到本地         這一步的前提是系統中存在rsync,wget,curl至少一項

        同步結束後檢視/usr/local/var/lib/openvas/plugins  資料夾即可看到剛剛同步的五萬個外掛 7.    安裝並同步redis資料庫         官方給出的redis版本號建議是支援2.4,建議使用2.6.         但是由於我當時下載的時候沒有注意到這個問題,因此使用的是2.8版本的,並沒有出現什麼異常,但是還是建議使用2.6版本。最好不要使用apt安裝,因為目前apt只有3.0.6版本,已經跨了一個大版本了

        redis原始碼安裝比較簡單解壓後直接                                 make && make install         即可         安裝結束進入安裝路徑(預設為/usr/local/bin)執行redis-server來觀察是否執行成功,不過要在執行引數中加入&,表示靜默執行,否則退出介面後,redis-server也會跟著退出,然後netstat檢視一下預設的6379埠來檢視redis是否安裝成功:

        安裝redis成功後還需要進行一步配置:

          由於我使用的是2.8的redis,因此執行2.6的語句,在路徑前面加上openvas的安裝路徑:                                         redis-server /usr/local/share/doc/openvas-scanner/example_redis_2_6.conf         我們可以繼續netstat一下6379埠,發現redis沒有繼續監聽了,我們netstat一下:

        發現redis現在改為監聽38695埠了,這是為啥?檢視一下:

        可以看到配置檔案中預設埠為0,因此應該是隨機選擇了一個埠進行監聽,但是作為服務端最好還是不要將openvas的redis資料庫埠對外開放(除非是有外部連線資料庫的需求),因此我們取消掉bind 127.0.0.1的註釋後重新執行redis:

        可以看到,此時已經改為本地監聽了這樣redis不在網路上開放,因此也不需要對redis進行賬號密碼之類的額外配置 現在應該可以執行openvassd了,但是執行後報錯:

        發現openvassd找不到庫檔案,因此我們需要更新動態庫快取檔案,在/etc/ld.so.conf.d目錄下建立openvas.conf檔案,將庫檔案的路徑寫入,寫入內容如下:                                                         /usr/local/lib         然後執行ldconfig命令,更新/etc/ld.so.cache檔案內容,如下圖:

        最後我們就終於可以執行openvassd了!,然後加入-s檢視並瞭解一下掃描器的配置:

        有關上述配置的說明可以使用   man  openvassd   來檢視  

        隨後我們確定掃描器是否開啟:         網上有些教程會讓檢視9391埠是否開啟,因為scanner會監聽9391埠,但是我們這裡發現9391並沒有開啟,於是我們用netstat檢視一下服務是否開啟:

        發現openvassd服務已經開啟了,並且接收到了兩個連線(manager還沒有安裝,也不知道是誰去連線了它)         原因是openvas9中已經將scanner的監聽改為本地監聽,不會監聽在網路,因此9391埠不會開啟,需要通過服務來判斷scanner是否安裝成功

五.安裝manager 排程中心

1.     解壓openvas-manager-7.0.3.tar.gz

2.     進入gvm-7.0.3目錄並檢視INSTALL檔案         依據檔案內容分別apt安裝包libsqlite3-dev和libpq-dev         接下來和之前相同,如果未安裝預設路徑要先export環境變數         mkdir build         cd build         cmake ..             make                               構建庫檔案         make doc                        構建基礎文件         make doc-full                  構建更多面向開發者文件         make install                     安裝所有構建的檔案          make rebuild_cache       重置cmake特徵

        執行的時候會發現make doc 和make doc-full會報錯

        解決辦法是安裝兩個庫,直接使用apt安裝即可:                                                 sudo apt-get install xsltproc                                                 sudo apt-get install libgd-gd2-perl

        安裝結束後執行openvasmd:                                                 openvasmd --listen=127.0.0.1

        同樣,在openvas9中,manager不會監聽9390埠。

3.    生成證書         由於openvas manager使用TLS協議來進行tcp連線,因此需要生成一個證書,這個步驟在openvas9中給使用者提供了極大的方便,我們可以很容易的生成證書,只需要執行如下openvas-manage-certs(該檔案在/usr/local/bin/目錄下)即可,執行:                                                 openvas-manage-certs -a         會報錯:

        仔細觀察一下manager編譯生成的安裝檔案,發現在/usr/local/sbin中存在兩個檔案:                                                 greenbone-scapdata-sync(這個命令需要的時間比較長,因為是從02年開始的資料)                                                 greenbone-certdata-sync

        看名字應該分別是同步其他資料和證書資料的檔案,因此我們也先執行一下這兩個檔案         執行後依然報錯!         原因是我們還需要安裝一個叫certtool的東西,但是這個東西搜不到原始碼安裝包,我們只能這樣安裝:                                                 sudo apt install gnutls-bin         然後再檢測certtool是否安裝成功:                                                 certtool -h         現在我們可以安裝證書了:                                                 openvas-manage-certs -a

        當然也可以手動生成證書

4.    構築資料庫:         openvas-manager預設使用SQLite操作資料庫,因此需要先apt安裝sqlite3庫         初始化資料庫:首先要確保openvassd是開啟狀態,因為manager初始化資料庫時需要檢索scanner中的NVT資訊。隨後執行:                                                 openvasmd  --rebuild    ( 這個命令執行時間較長)           然後建立一個使用者:                                                 sudo openvasmd --create-user=admin --role=Admin         改密碼:                                                 sudo openvasmd --user=admin --new-password=admin         admin/admin是openvas的預設密碼

5.    重新執行openvasmd         這裡最好殺掉原來的程序後重新執行,         直接openvasmd restart後出現了兩個openvasmd程序,未探究原因 6.    安裝nmap         因為openvas中主要會使用nmap進行資訊蒐集,因此nmap的安裝必不可少                                                 apt install nmap

六.安裝GSA 前端web UI

1.    解壓gsa-7.0.3.tar.gz 2.    進入目錄gsa-7.0.3         同樣先觀察INSTALL檔案,需要下載如下安裝包:                                                 apt-get install libmicrohttpd-dev libxml2-dev libxslt1-dev         接下來用相同的方式進行安裝         mkdir build         cd build         cmake ..             make                               構建庫檔案         make doc                        構建基礎文件         make doc-full                  構建更多面向開發者文件         make install                     安裝所有構建的檔案          make rebuild_cache       重置cmake特徵

3.    執行gsad         安裝結束後最需要關注的就是gsad(位於/usr/local/sbin)         直接執行gsad即可:

七.安裝openvas-cli 命令列呼叫

1.    下載安裝包

        當前沒有在官網找到給出的最新安裝包,只有官方文件中的參考連結中給出了下載連結,版本為14.4

2.    解壓,安裝,步驟和其他安裝包相同         mkdir build         cd build         cmake ..             make                               構建庫檔案         make doc                        構建基礎文件         make doc-full                  構建更多面向開發者文件         make install                     安裝所有構建的檔案          make rebuild_cache       重置cmake特徵

        最後執行omp -?命令:

3.    重啟openvasmd         看起來已經安裝結束了,但是當我們執行檢視報告命令時:

        提示獲取套接字失敗,經過對openvas的瞭解不難猜到這裡的套接字應該指的是manager的sock,我們netstat一下:

        發現openvasmd服務正在執行,但是並沒有開啟套接字埠,雖然openvas9已經不需要openvasmd去監聽網路了,但是依然可以監聽本地埠,因此我們殺掉openvasmd程序後,重新起一個監聽本地埠的程序:

        可以看到開啟了一個監聽127.0.0.1:9390埠的openvasmd的程序了         然後我們重新看一下omp檢視配置的返回結果:

        沒有問題,至此,openvas-cli 命令列呼叫也安裝完畢

八.重啟後開啟openvas整個流程

        可能看完了上述編譯文件之後會有點蒙,到底哪些步驟是配置的,哪些步驟是開啟服務的?畢竟openvas的編譯過程確實很複雜,因此我們重新整理一下重啟之後怎樣開啟openvas服務: 1.    開啟redis資料庫,注意一定要使用openvassd的配置檔案開啟:                                         redis-server /usr/local/share/doc/openvas-scanner/example_redis_2_6.conf 2.    開啟openvas-scanner 掃描代理                                         openvassd 3.    開啟openvas-manager 排程中心                                         openvasmd 4.    開啟gsa    前端web ui(可選)                                          gsad 5.    開啟openvasmd監聽埠(可選,僅omp需要)                                          openvasmd --listen=127.0.0.1 

該文章為作者原創,轉載請生命來源