阿里云服务器ECS    
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新 [咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本 [咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案 [咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中 [咨询更多]
阿里云折扣优惠    
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣 [咨询更多]
通过资产扫描来了解并管理企业所有的资产
2020-8-19    点击量:
  企业在知己的过程中,首先要做的就是资产扫描,即通过资产扫描来了解并管理企业所有的资产。
  
  需要注意的是,这里所说的资产管理与IT资产管理(IT As-set Management,ITAM)中的资产管理想要达到的目的是不太一样的,这里更倾向于从安全视角对资产进行管理。但如果企业已经部署了ITAM,则双方的数据可以进行必要的整合或验证,例如资产扫描可以基于ITAM中的数据进行操作,或是资产扫描后的数据可以同步到ITAM中。
  通过资产扫描来了解并管理企业所有的资产
  1.扫描内容
  
  资产扫描的目的是全面了解企业的各种IT资产,例如物理服务器、虚拟机、网络设备、存储设备、打印机、安全设备、物联网设备等。所有通过网络可以访问的资产,除了硬件形态的资产外,还包括软件形态的资产,例如数据库服务器、Web服务器、文件服务器等对外提供服务支撑的服务器软件。当然,企业还有数据资产等其他更为重要的无形资产。资产扫描的对象还是以硬件资产和软件资产为主。
  
  (1)资产存活
  
  首先,可以通过网络连通性的测试,例如,利用ping来判断硬件类资产是否存活。
  
  root@target:~# ping 192.168.1.1
  
  PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
  
  64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.94 ms^C
  
  --- 192.168.1.1 ping statistics ---
  
  2 packets transmitted, 2 received, 0% packet loss, time 1002ms
  
  rtt min/avg/max/mdev = 2.941/47.468/91.996/44.528 ms
  
  root@target:~#
  
  (2)开放端口
  
  其次,可以通过尝试连接端口,例如,利用telnet来判断端口是否开放。
  
  root@target:~# telnet 192.168.1.1 80
  
  Trying 192.168.1.1...
  
  Connected to 192.168.1.1.
  
  Escape character is '^]'.
  
  服务器软件对外提供服务时,通常都会通过某个固定的端口进行,例如Web应用通常是通过80端口对外提供服务的,SSH应用是通过22端口对外提供服务的。
  
  (3)运行服务
  
  仅获得开放的端口并没有太大的意义,重点是需要获得在开放端口上提供的服务类型、运行软件、软件版本等。因此,最后还需要通过对开放端口的识别,以及访问端口时的返回信息,例如Banner信息,来判断运行的服务器软件。
  
  root@target:~# nc localhost 22
  
  SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
  
  现在很多流行的服务器软件都运行在默认的端口,例如HTTP(80)、HTTPS(443)、SSH(22)、Telnet(23)、SMTP(25)、NTP(123)、SNMP(161)、LDAP(389)、MySQL(3306)等,所以通常情况下,如果确定了开放的端口,也就大概了解到了端口运行的服务。
  
  2.扫描手段
  
  为了完成对企业IT资产的画像,有时会利用多种资产扫描、资产采集的手段,具体内容如下所示。
  
  (1)网络层直接扫描
  
  通过主动对企业进行网络扫描,来对企业IT资产进行画像,这是最简单、直接的技术手段,也是大多数安全厂商采用的方式。同时,这种扫描手段也在最大程度上模拟了攻击者的攻击路径。
  
  通过直接扫描来探测资产存活是资产扫描的初级阶段,是其他扫描的基础。ping是一种基础的扫描工具,它利用了ICMP(Internet Control Message Protocol)的Echo字段,发出的请求如果收到回应,则代表地址是存活的。包括ping在内,常用的扫描手段有如下几类。
  
  •ICMP Echo:精度相对较高。简单地向目标主机发送ICMPEcho Request,并等待回复的ICMP Echo Reply。
  
  •ICMP Sweep:进行批量并发性扫描。使用ICMP Echo Re-quest一次探测多个目标地址。通常这种探测包会并行发送,以提高探测效率,适用于大范围的扫描。
  
  •Broadcast ICMP:广播型ICMP扫描。利用一些主机在ICMP实现上的差异,设置ICMP请求包的目标地址为广播地址或网络地址,这样就可以探测广播域或整个网络范围内的主机,子网内所有存活主机都会给予回应。但这种情况只适用于UNIX/Linux系统。
  
  •Non-Echo ICMP:在ICMP协议中不仅有基于ICMP Echo的查询方式,还可以用Non-Echo ICMP。利用ICMP的服务类型,例如发出ICMP Timestamp Request、ICMP Ad-dress Mask Request等数据包,并且等待回应,根据回应来判断资产存活状态。
  
  通过网络层直接扫描来对开放端口进行探测,通常是资产存活扫描之后的动作,telnet是最为直接、简单的探测工具,它基于的是TCP Connect方式实现的。下面罗列了部分用于端口扫描的技术,供大家参考。
  
  •TCP Connect:一种简单的端口扫描技术,它的实现基于TCP协议建立的过程,通过完成与被扫描端口之间的三次握手过程(SYN、SYN/ACK和ACK)来识别端口是否处于开放状态。如果结果为成功,则表示端口处于开放状态;否则,这个端口是不开放的,即没有对外提供服务。
  
  •TCP SYN:与TCP Connect不同的是,它没有完成一个完整的TCP连接,在和被探测端口之间建立连接时,只完成了前两次握手,到第三步就中断了,使连接没有完全建立。因此,这种端口扫描又被称为半连接扫描。
  
  •TCP FIN:这种扫描方式不依赖TCP协议建立的三次握手过程,而是直接向被探测端口发送带有FIN标志位的数据包。如果端口处于开放状态,则会将它直接丢弃;反之,则会返回一个带有RST标志位的响应数据包。因此,可以根据是否收到RST来判断端口是否开放。
  
  •TCP Xmas Tree:这种方法和TCP FIN类似,不同的是,它向被探测的端口发送的数据包中包含了3个标志位——FIN、PSH和URG。
  
  •TCP Null:这种方法和TCP FIN类似,不同的是,它向被探测的端口发送的数据包中不包含任何标志位。在确认开放端口后,需要对端口上运行的服务器软件(或者提供的服务)进行识别,这种识别技术相对比较简单,通常有如下两种使用方式。
  
  •端口对应:根据一些常用端口与服务的对应关系,来判断端口上运行的服务。比如识别80端口处于开放状态,那可以初步判断在80端口上运行的是网站类型的服务;识别22端口处于开放状态,那可以初步判断在22端口上运行的是SSH服务。
  
  •Banner:根据端口返回数据包中的Banner信息来判断运行的服务。
  
  (2)网络层流量监测
  
  除了直接扫描之外,企业安全人员还可以通过对企业中的网络流量进行采集和分析(例如全流量、NetFlow信息),从而梳理出所有有真实流量的硬件资产和软件资产。基于对流量的监测,也同样可以对资产存活以及开放端口进行非常高效的识别。和直接扫描不同,这是一种被动的信息采集方式。
  
  (3)云环境开放接口
  
  通过直接扫描或流量采集的方式固然可以获得比较全面的资产信息,但对于新兴的虚拟化环境、混合云环境,甚至是多云环境就都有一定的局限了。所以,除了网络层的手段外,企业还可以通过云环境的开放接口,直接获取IAAS或PAAS层的资产信息。这种数据获取的方式更加直接、准确且高效,随时都可以执行,不需要等到下一个扫描周期。
  
  利用阿里云的开发接口,获得阿里云租户的虚拟机资源的代码如下所示。
  
  ...
  
  List<Instance> instanceList = null;    DescribeInstancesRequest describeInstancesRequest = new DescribeInstances-Request();    describeInstancesRequest.setRegionId(regionID);    describeInstancesRequest.setVpcId(vpcID);    try {        DescribeInstancesResponse dir = client.getAcsResponse(describeInstances-Request);
  
  instanceList = dir.getInstances();        ...    }...
  
  (4)操作系统登录扫描
  
  除了在网络层进行扫描的方式外,如果有服务器权限的话,还可以登录服务器,通过运行一些命令来获得开放端口以及运行服务。
  
  利用netstat命令来获得操作系统上开放的端口的方法如下所示。我们可以看到,这台虚拟机上运行了多个服务,包括80端口的网站服务、22端口的SSH服务、389端口的LDAP服务、27017端口的MongoDB服务、3306端口的MySQL服务。
  
  root@target:~# netstat -ant
  
  Active Internet connections (servers and established)
  
  Proto Recv-Q Send-Q Local Address
  
  Foreign Address         State
  
  tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN
  
  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
  
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
  
  tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN
  
  tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN
  
  tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN
  
  tcp        0      0 192.168.43.92:22        192.168.43.115:55152    ESTABLISHED
  
  tcp6       0
  
  0 :::21                   :::*                    LISTENtcp6
  
  0      0 :::22                   :::*                    LISTENtcp6
  
  0      0 :::389                  :::*                    LISTENtcp6
  
  0      0 :::3306                 :::*                    LISTEN
  
  root@target:~#
  
  利用apt命令来获得安装的软件以及安装软件的版本,可以看到这台虚拟机上运行的MySQL版本是5.7.29。
  
  root@target:~# apt list --installed |grep mysql
  
  WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
  
  mysql-client-5.7/xenial-updates,xenial-security,now
  
  5.7.29-0ubuntu0.16.04.1 amd64 [installed,automatic]mysql-client-core-5.7/xenial-updates,xenial-security,now
  
  5.7.29-0ubuntu0.16.04.1 amd64 [installed,automatic]
  
  mysql-common/xenial-updates,xenial-updates,xenial-security,xenial-security,now 5.7.29-0ubuntu0.16.04.1 all
  
  [installed,automatic]
  
  mysql-server/xenial-updates,xenial-updates,xenial-security,xenial-security,now 5.7.29-0ubuntu0.16.04.1 all
  
  [installed]
  
  mysql-server-5.7/xenial-updates,xenial-security,now 5.7.29-0ubuntu0.16.04.1 amd64 [installed,automatic]
  
  mysql-server-core-5.7/xenial-updates,xenial-security,now
  
  5.7.29-0ubuntu0.16.04.1 amd64 [installed,automatic]
  
  root@target:~# apt show mysql-server
  
  Package: mysql-server
  
  Version: 5.7.29-0ubuntu0.16.04.1
  
  ...
  
  root@target:~#
  
  (5)与CMDB进行整合
  
  如果企业已经建有配置管理数据库(Configuration Man-agement Database,CMDB),那么很多信息都可以从CMDB中直接获得,不必再通过扫描手段来获得了。
  
  无论采用哪种扫描手段,最终目的都是一样的,即通过获取“网络地址+开放端口+运行服务”这种组合信息,对企业的IT资产进行画像。这个组合信息虽然简单,但却非常重要,它是我们实现知己这个大目标迈出的第一步。
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠