由於Nessusd是一下安全掃描程序,其中附有一些攻擊性質的安全掃描,而且用戶可以遠程啟動Nessusd進行操作,所以用戶需要對它進行正確的設置,防止有人惡意的使用。
1、 加密
前面提到,如果用戶通過網絡使用Nessusd,也就是說客戶端程序與服務端程序Nessusd不在同一台主機上,Nessusd最終的掃描結果會通過網絡返回到客戶端,考慮到這其中的內容都是有關網絡安全的敏感數據,所以在這裡建議用戶對二者之間的通話內容進行加密。
在配置安裝nessus的時候,執行如下命令:
./configure –enable-cipher
./make
./make install
這樣就啟用了加密模式,在啟動nessusd的時候,還必須為用戶指定一個一次性的口令,該口令只在用戶第一次登錄的時候需要輸入,一旦用戶登錄成功,客戶端就向服務端發送公開密鑰,這個密鑰可以唯一的標識一個用戶,所以下一次用戶登錄的時候就無需輸入口令了。增加用戶的方法如下:
nessusd –make-user=username,passwd
或
nessusd –P username,passwd
注意在用戶名和口令之間除了這個逗號外,不能有空格存在。如果nessusd進程正在運行,你也可以運行這個命令,運行nessusd進行密鑰管理,不會重新啟動一個nessusd進程。為了驗證這個用戶的記錄已經被保存,可以用這個命令來查看:
nessusd –list-keys 或者nessusd –L
接著,用客戶端登錄到nessusd,輸入剛才建立的用戶名及口令。再用上述的命令查看,會發現用戶的口令的標識已經由passWord變為用戶的公開密鑰user key了。下次用戶再用這個用戶名進行操作的時候就無需輸入用戶口令了,但用戶所使用的IP地址也因此就被綁定到用戶的公開密鑰中了,如果在不同的機器中使用同一個用戶名進行登錄,就會失敗。
在當前的版本中,在使用nessus-adduser添加用戶時如果指定采用明文的密碼,並且按照說明將nessusd.conf中的force_pubkey_auth 項置為no,好象服務端並不能識別該用戶,不知道是什麼原因。
2、 nessusd的啟動參數
-D,--background
在後台運行nessusd服務。
-c ,--config-file=
使用另外一個配置文件,默認的配置文件是nessusd.conf。
-a ,--listen=
只監聽來自指定IP地址的連接請求。如 nessusd –a 192.168.6.3,nessusd將只接收來自於192.168.6.3的通信請求,用這個參數可以指定允許連接的客戶端地址,防止來自其它機器的使用。
-p , --port=
使nessusd只在指定的TCP端口上監聽。默認的監聽端口是3001。
-v,--version
顯示版本號並退出程序。
-h,--help
顯示所有命令。
-d,--dump-cfg
顯示當前的配置。
3、 nessusd.conf配置文件
nessusd的默認配置文件是/nessus/etc/nessusd.conf。它每行的內容都類似於:<關鍵字>=<值> 這種形式。它的關鍵字及其意義如下:
plugins_folder:包含插件的文件夾。一般它位於/nessus/lib/nessus/plugins,你也可以改變它的位置。
Logfile:日志文件所在的路徑。如果它的值為syslog,所有nessusd的信息都會通過syslog來進行記錄。如果為stderr,所有的信息將會被輸出到標准輸出設備中。
Max_threads:允許開啟連接的最大線程數。建議不要將該值設置太大。該值設置過大,雖然到加快工作速度,但也會導致在測試過程當中丟包,影響掃描的准確程序。建議設為50。
Users:用戶資料庫文件的路徑。
Rules:向規則資料庫文件的路徑。
Language:指定生成報表所采用的語言。目前只支持english和french兩種語言。
Check_read_timeout:指定在檢查過程當中客戶端與服務端的連接超時時間。
Peks_username:用來在私有密鑰數據庫中標識nessusd服務的名字。
Peks_keylen:公用密鑰的最小長度。
Peks_keyfile:私有密鑰數據庫的路徑。
Peks_usrkeys:用戶公用密鑰及用戶口令數據庫的存放路徑。
Peks_pwdfail:口令錯誤的最大重試次數。
force_pubkey_auth:是否強制采用公鑰體制加密。
下面給出作者的nessusd.conf的配置文件內容:
# configuration file of the Nessus Security Scanner
# Every line starting with a '#' is a comment
# Path to the security checks folder :
plugins_folder = /usr/local/lib/nessus/plugins
# Maximum number of simultaneous tests :
max_threads = 8
# Log file (or 'syslog') :
logfile = /usr/local/var/nessus/nessusd.messages
# Shall we log every details of the attack ?
log_whole_attack = yes
# Log the name of the plugins that are loaded by the server ?
log_plugins_name_at_load = no
# Dump file for debugging output, use `-' for stdout
dumpfile = /usr/local/var/nessus/nessusd.dump
# Rules file :
rules = /usr/local/etc/nessus/nessusd.rules
# Users database :
users = /usr/local/etc/nessus/nessusd.users
# CGI paths to check for (cgi-bin:/cgi-aws:/ can do)
cgi_path = /cgi-bin
# Range of the ports nmap will scan :
port_range = 1-15000
# Optimize the test (recommanded) :
optimize_test = yes
# Language of the plugins :
language = english
# Crypto options :
negot_timeout = 600
peks_username = nessusd
peks_keylen = 1024
peks_keyfile = /usr/local/etc/nessus/nessusd.private-keys
peks_usrkeys = /usr/local/etc/nessus/nessusd.user-keys
peks_pwdfail = 5
# set random_device to "none" to disable
#random_device = /dev/urandom
track_iothreads = yes
cookie_logpipe = /usr/local/etc/nessus/nessusd.logpipe
cookie_logpipe_suptmo = 2
force_pubkey_auth = yes
# Optimization :
# Read timeout for the sockets of the tests :
checks_read_timeout = 15
# Time to wait for between two tests against the same port, in seconds (to be inetd friendly) :
delay_between_tests = 1
# Maximum lifetime of a plugin (in seconds) :
plugins_timeout = 160
#end.
4、 規則的定義格式
在Nessus中有三個部分用到了規則定義:
規則資料庫:這裡面這義的規則適用於全體用戶。
用戶資料庫中的規則:其中的規則只適用於一個用戶。
客戶端的規則:由用戶在客戶端程序中指定的規則,該規則用來設定掃描目標的范圍。
這三個地方的規則是有優先級的,其優先級順序由高往底為:規則資料庫中的規則->用戶資料庫中的規則->客戶端的規則。所以,在低優先級的規則中定義的權限不能超過上一級規則中定義的權限。
規則的定義格式是:
關鍵字 IP/mask
供使用的關鍵字包括:deny,accept和default。另外,IP地址前還可以加“!”的前綴,表示“not”的意思。
我們以規則資料庫為例來看看規則的定義。規則資料庫文件名為nessusd.rules,其中存放的是在系統范圍內應用的規則,起到約束全體用戶的作用。它的語法如前面所講。如:
accpet 127.0.0.0/8
deny 192.168.1.1/32
deny !192.168.0.0/16
default deny
這些規則組合在一起說明:允許在用戶在本地進行操作,可以接受來自於192.168.0.0/16網段中除了192.168.1.1/32以外的所有主機的操作請求。
用戶還可以用client_ip這個關鍵字來代表本地主機的IP地址,如果你希望用戶只能在本地主機中進行操作,規則表達如下:
accept client_ip/32
default deny
5、 定義用戶資料
用戶資料庫存放在文件nessusd.users中。用戶資料庫中包含了允許使用nessusd服務進程的用戶資料。在用戶資料庫中創建多個不同的用戶,與相應的規則結合,就可以限定在特定的網段甚至特定一台機器的用戶才可以進行掃描操作。
用戶資料庫中的記錄格式很簡單:
user:password [rules]
其中user是用戶的登錄名。用戶的登錄名可以是任意的。
Password:就是該用戶的口令。它的內容是名文,如果用戶使用公鑰體制進行登錄,那麼password這一項的內容為空,用戶的公鑰放在nessusd.user-keys文件中。
Rules:適用該用戶的規則。
下面是一個典型的nessusd.users文件內容:
# 用戶名為foo,口令為bar
foo:bar
deny 192.168.1.1/32
accept 192.168.0.0/16
default deny
#
# 用戶oof通過公鑰體制進行認證
#
oof:
deny 192.168.1.1/24
accept 192.168.0.0/16
default deny'