利用端口扫描进行终端合规性检查的一个示例

2020-08-11 16:07李维峰
网络安全技术与应用 2020年8期
关键词:端口命令应用程序

◆李维峰

(中国飞行试验研究院 陕西 710089)

现代大型公司往往都有自己的内部办公网络,根据公司业务的规模及分布,有的办公网络集中于某个地区,有的则跨省跨国。使用计算机网络的地方就必须考虑安全问题,这是计算机网络发展多年以来大家早已达成的共识。面对公司规模庞大、主机众多的网络,我们怎么能够快速检查,找到那些存在安全隐患的主机?这是网络管理员躲避不了的问题。目前人们对于内网安全的研究比较广泛,总结起来大致是三个方面:(1)加强员工安全意识教育;(2)提高终端安全管理水平;(3)完善终端安全防护措施[1]。笔者认为除了正面防御之外,还应考虑检查手段,不然无法验证我们的防御手段是否有效。考虑到完整的渗透测试未必适用于每个公司,因此本文提出利用端口扫描进行终端合规性检查的办法,并举例说明。希望以点带面、抛砖引玉,促进网络管理人员对内网安全的思考。

1 端口及端口扫描

端口只是一种软件中的抽象概念,用于区分通信信道。这与IP地址用于识别网络上的计算机的方式类似,端口用来标识在单个计算机上使用的特定应用程序。例如,你的Web浏览器将默认连接到HTTP URLs中的TCP端口80。如果您指定安全的HTTPS协议,浏览器将默认尝试端口443。

端口扫描是远程测试多个端口以确定它们处于什么状态的行为。通常我们最感兴趣的状态是open,这意味着应用程序正在侦听并接受端口上的连接。虽然许多端口扫描程序传统上将所有端口都集中到open或closed状态,但我们将要使用的工具Nmap更加精细,它将端口划分为六个状态。这些状态不是端口本身的固有属性,而是描述Nmap如何看待它们。例如,来自于统一目标的网络的Nmap扫描可能会将端口135/tcp显示为open,而同时使用来自Internet的相同选项的扫描可能会将该端口显示为filtered。

2 问题

在真实环境中有时我们会需要从一个网络中快速找出某个TCP端口开放的主机[2]。例如:在Microsoft IIS的漏洞曝光后,我们很想知道网络中的这些主机上哪一台的TCP 80端口是打开的,并且还在运行着该服务;或者,当你发现一台被攻陷的主机上黑客留下的后门在端口31337上运行,你会希望快速扫描网络,找到其他被攻陷的主机,等等。

3 解决办法

要解决上面的问题,最直接的办法就是运行下面的命令:

#nmap -Pn -p -oG

这是一个搜索4096个IP的Web服务器(端口80打开)的具体示例:

#nmap -Pn -p80 -oG logs/pb-port80scan-%D.gnmap 216.163.128.0/20

文件名中的“%D”将替换为扫描运行的数字日期(例如,2007年9月1日为“090107”)。尽管此扫描命令有效,但做一些选项上的优化会大大减少扫描时间。

#nmap-T4-Pn-p80--max-rtt-timeout 200ms--initial-rtt-timeout 150ms --min-hostgroup 512 -oG logs/pb-port80scan-%D.gnmap 216.163.128.0/20

我们发现大部分时间都花在了反向DNS解析上。通过在上面的命令行中添加-n来禁止DNS解析,可以大大减少等待的时间。

上面的命令将grepable格式结果存储在指定的文件中。然后,再用一个简单的egrep命令将找到端口80打开的机器(图1):

egrep‘[^0-9]80/open’logs/pb-port80scan-%D.gnmap

图1用一个简单的egrep命令将找到端口80打开的机器

egrep模式前面带有[^0-9],以避免虚假匹配端口(例如3180)。由于我们仅扫描端口80,因此当然不可能发生,但是这在进行多端口扫描时是一种好习惯。如果只需要IP地址,则使用egrepawk'{print$2}’。

4 实例演示

有时,故事是理解决策的最佳方法,在实际例子中我们才能更好地理解如何决定在解决方案中使用哪些命令行。例如,在一家公司里,大约有4096台终端,公司对这些终端上能够使用的应用程序有明确的要求,其中有一条“用户终端不得提供web服务”,但面对数量如此庞大的终端数,网络管理员不可能进行普查,即使逐台进行检查,你也无法保证之后不会有人违规。运行web服务器的主机通常会开放TCP 80端口,尽管理论上此类服务器可以侦听任何端口,但可能性最大的还是80端口。因此,我们可以通过找到网络中80端口开放的终端来确定那些违反公司规定的员工(图2)。

图2通过找到网络中80端口开放的终端来确定违反公司规定的员工

为了优化扫描的效果,我们先对网络延迟进行了测量,平均延迟60毫秒。考虑平均延迟影响之后,我们使用如下选项:--max-rtt-timeout 200ms--initial-rtt-timeout 150ms。然后再使用一个更加积极的时间模板-T4。

由于我们重视整个扫描的完成时间,而不是最小化返回第一批主机结果之前的时间,因此,选项--min-hostgroup 512设定每次并行扫描512台主机。使用精确的子地址块能够避免出现低效的扫描子块,就像本例中的4096台主机如果用--min-hostgroup 500,最后就会出现96台主机的扫描子块。

由于一次ping需要花费的时间与单端口扫描本身消耗的时间相同,因此无须在先前的ping阶段浪费时间。因此,指定了-Pn以禁用该阶段。通过使用-n参数跳过反向DNS解析,可以节省大量时间。否则,在禁用ping扫描的情况下,Nmap会尝试查找所有4096个IP。由于我们是要寻找web服务器,所以将端口设定为80。当然,这样的设置会错过在非标准端口(例如81或8080)上运行的所有HTTP服务器。也不会找到使用443端口的SSL服务器。你也可以把这些端口加到选项-p之后,但是即使是多加一个端口也会让扫描时间翻倍,这大致与扫描的端口数成正比。

最后一个选项是-oG,后跟要存储grepable结果的文件名。Gordon将目标网络添加到命令的最后,然后按下enter键开始扫描。如例6所示:

例1:开始扫描

Nmap会在大约三分钟内扫描所有4096个IP。正常输出显示一堆处于过滤状态的端口。这些IP中的大多数可能不是活动主机(端口仅显示为已过滤),因为Nmap没有收到对其SYN探针的响应。我们使用egrep命令,从输出文件中获得web服务器的列表。如例7所示:

例2:egrep命令查询开放80端口的主机

在经过所有努力之后,发现了在4096个IP中有两台主机的80端口开放。比起一台主机一台主机的排查,使用端口扫描的效率明显更高。当然,如果出现了极端的用户,例如:故意躲避扫描;修改web服务端口;设置本地防火墙策略等,我们目前使用的办法效果就会大打折扣,不过有这种技术的用户本身在公司里应该就很显眼吧。

5 总结

终端合规性检查这个话题的范围其实挺大,并不仅仅只有应用程序检查这一个方面。本文以检查终端TCP 80端口开放的终端为例,介绍了端口扫描技术在此方面的应用。当然,没有一种技术能够单独解决终端合规性检查的问题,我们还需要综合利用其他手段,扩大检查范围,提高检查效率,减轻网络管理人员的工作负担。

猜你喜欢
端口命令应用程序
只听主人的命令
一种有源二端口网络参数计算方法
一种端口故障的解决方案
多按键情况下,单片机端口不足的解决方法
安装和启动Docker
删除Win10中自带的应用程序
现有网络架构及迁移方案
谷歌禁止加密货币应用程序
移防命令下达后
解析Windows10的内部命令