由于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''