分类目录归档:网络技术

LINUX TC(TRAFFIC CONTROL) 简介

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾,比如,远程登录的交互数据流应该比数据下载有更高的优先级。

      针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入,人们已经提出了各种不同的管理模式。IETF已经发布了几个标准,如综合服务(Integrated Services)、区分服务(Diferentiated Services)等。其实,Linux内核从2.2开始,就已经实现了相关的流量控制功能。本文将介绍Linux中有关流量控制的相关概念, 用于流量控制的工具TC的使用方法,并给出几个有代表性实例。

一、相关概念
      报文分组从输入网卡(入口)接收进来,经过路由的查找,以确定是发给本机的,还是需要转发的。如果是发给本机的,就直接向上递交给上层的协议,比如TCP,如果是转发的,则会从输出网卡(出口)发出。网络流量的控制通常发生在输出网卡处。虽然在路由器的入口处也可以进行流量控制,Linux也具有相关的功能,但一般说来,由于我们无法控制自己网络之外的设备,入口处的流量控制相对较难。因此我们这里处理的流量控制一般指出口处的流量控制。流量控制的一个基本概念是队列(Qdisc),每个网卡都与一个队列(Qdisc)相联系,每当内核需要将报文分组从网卡发送出去,都会首先将该报文分组添加到该网卡所配置的队列中,由该队列决定报文分组的发送顺序。因此可以说,所有的流量控制都发生在队列中。

       有些队列的功能是非常简单的,它们对报文分组实行先来先走的策略。有些队列则功能复杂,会将不同的报文分组进行排队、分类,并根据不同的原则,以不同的顺序发送队列中的报文分组。为实现这样的功能,这些复杂的队列需要使用不同的过滤器(Filter)来把报文分组分成不同的类别(Class)。这里把这些复杂的队列称为可分类(Classiful)的队列。通常,要实现功能强大的流量控制,可分类的队列是必不可少的。因此,类别(Class)和过滤器(Filter)也是流量控制的另外两个重要的基本概念。

     类别(Class)和过滤器(Filter)都是队列的内部结构,并且可分类的队列可以包含多个类别,同时,一个类别又可以进一步包含有子队列,或者子类别。所有进入该类别的报文分组可以依据不同的原则放入不同的子队列 或子类别中,以此类推。而过滤器(Filter)是队列用来对数据报文进行分类的工具,它决定一个数据报文将被分配到哪个类别中。

二、使用TC
      在Linux中,流量控制都是通过TC这个工具来完成的。通常,要对网卡进行流量控制的配置,需要进行如下的步骤:

  ◆ 为网卡配置一个队列;

  ◆ 在该队列上建立分类;

  ◆ 根据需要建立子队列和子分类;

  ◆ 为每个分类建立过滤器。

      在Linux中,可以配置很多类型的队列,比如CBQ、HTB等,其中CBQ 比较复杂,不容易理解。HTB(Hierarchical Token Bucket)是一个可分类的队列, 与其他复杂的队列类型相比,HTB具有功能强大、配置简单及容易上手等优点。在TC中,使用”major:minor”这样的句柄来标识队列和类别,其中major和minor都是数字。

      对于队列来说,minor总是为0,即”major:0″这样的形式,也可以简写为”major: “比如,队列1:0可以简写为1:。需要注意的是,major在一个网卡的所有队列中必须是惟一的。对于类别来说,其major必须和它的父类别或父队列的major相同,而minor在一个队列内部则必须是惟一的(因为类别肯定是包含在某个队列中的)。举个例子,如果队列2:包含两个类别,则这两个类别的句柄必须是2:x这样的形式,并且它们的x不能相同,比如2:1和2:2。

      下面,将以HTB队列为主,结合需求来讲述TC的使用。假设eth0出口有100mbit/s的带宽,分配给WWW、E-mail和Telnet三种数据流量,其中分配给WWW的带宽为40Mbit/s,分配给Email的带宽为40Mbit/s,分配给Telnet的带宽为20Mbit/S。

      需要注意的是,在TC 中使用下列的缩写表示相应的带宽:

      ◆ Kbps : kilobytes per second,千字节每秒 ;

      ◆ Mbps : megabytes per second,兆字节每秒 ,

      ◆ Kbit : kilobits per second,千比特每秒 ;

      ◆ Mbit : megabits per second, 兆比特每秒 。

三、创建HTB队列
      有关队列的TC命令的一般形式为:

tc qdisc [add | change | replace | link] dev DEV [parent qdisk-id |root] [handle qdisc-id] qdisc [qdisc specific parameters]

      首先,需要为网卡eth0配置一个HTB队列,使用下列命令:

      #tc qdisc add dev eth0 root handle 1:htb default 11

      这里,命令中的”add”表示要添加,”dev eth0”表示要操作的网卡为eth0。”root”表示为网卡eth0添加的是一个根队列。”handle 1:”表示队列的句柄为1: 。”htb”表示要添加的队列为HTB队列。命令最后的”default 11”是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11。

四、为根队列创建相应的类别
      有关类别的TC 命令的一般形式为:

tc class [add | change | replace] dev DEV parent qdisc-id [classid class-id] qdisc [qdisc specific parameters]

      可以利用下面这三个命令为根队列1创建三个类别,分别是1:1 1、1:12和1:13,它们分别占用40、40和20mb[t的带宽。

      #tc class add dev eth0 parent 1: classid 1:1 htb rate 40mbit ceil 40mbit

      #tc class add dev eth0 parent 1: classid 1:12 htb rate 40mbit ceil 40mbit

      #tc class add dev eth0 parent 1: cllassid 1:13 htb rate 20mbit ceil 20mbit

      命令中,”parent 1:”表示类别的父亲为根队列1: 。”classid1:11”表示创建一个标识为1:11的类别,”rate 40mbit”表示系统将为该类别确保带宽40mbit,”ceil 40mbit”,表示该类别的最高可占用带宽为40mbit。

五、为各个类别设置过滤器
      有关过滤器的TC 命令的一般形式为:

tc filter [add | change | replace] dev DEV [parent qdisc-id | root] protocol protocol prio priority filtertype [filtertype specific parameters] flowid flow-id

      由于需要将WWW、E-mail、Telnet三种流量分配到三个类别,即上述1:11、1:12和1:13,因此,需要创建三个过滤器,如下面的三个命令:

      #tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:11

      #tc filter add dev eth0 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:12

      #tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:13

      这里,”protocol ip”表示该过滤器应该检查报文分组的协议字段。”prio 1” 表示它们对报文处理的优先级是相同的,对于不同优先级的过滤器,系统将按照从小到大的优先级顺序来执行过滤器,对于相同的优先级,系统将按照命令的先后顺序执行。这几个过滤器还用到了u32选择器(命令中u32后面的部分)来匹配不同的数据流。以第一个命令为例,判断的是dport字段,如果该字段与Oxffff进行与操作的结果是8O,则”flowid 1:11”表示将把该数据流分配给类别1:1 1。更加详细的有关TC的用法可以参考TC的手册页。

六、复杂的实例
      在上面的例子中, 三种数据流(www、Email、Telnet)之间是互相排斥的。当某个数据流的流量没有达到配额时,其剩余的带宽并不能被其他两个数据流所借用。在这里将涉及如何使不同的数据流可以共享一定的带宽。

      首先需要用到HTB的一个特性, 即对于一个类别中的所有子类别,它们将共享该父类别所拥有的带宽,同时,又可以使得各个子类别申请的各自带宽得到保证。这也就是说,当某个数据流的实际使用带宽没有达到其配额时,其剩余的带宽可以借给其他的数据流。而在借出的过程中,如果本数据流的数据量增大,则借出的带宽部分将收回,以保证本数据流的带宽配额。

      下面考虑这样的需求,同样是三个数据流WWW、E-mail和Telnet, 其中的Telnet独立分配20Mbit/s的带宽。另一方面,WWW 和SMTP各自分配40Mbit/s的带宽。同时,它们又是共享的关系,即它们可以互相借用带宽。

      需要的TC命令如下:

      #tc qdisc add dev eth0 root handle 1: htb default 21

      #tc class add dev eth0 partent 1: classid 1:1 htb rate 20mbit ceil 20mbit

      #tc class add dev eth0 parent 1: classid 1:2 htb rate 80mbit ceil 80mbit

      #tc class add dev eth0 parent 1: classid 1:21 htb rate 40mbit ceil 20mbit

      #tc class add dev eth0 parent 1:2 classid 1:22 htb rate 40mbit ceil 80mbit

      #tc filter add dev eth0 protocol parent 10 prio 1 u32 match ip dport 80 0xffff flowid 1:21

      #tc filter add dev eth0 protocol parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:22

      #tc filter add dev eth0 protocol parent 1:0 prio 1 u32 match ip dport 23 0xffff flowid 1:1

      这里为根队列1创建两个根类别,即1:1和1:2,其中1:1对应Telnet数据流,1:2对应80Mbit的数据流。然后,在1:2中,创建两个子类别1:21和1:22,分别对应WWW和E-mail数据流。由于类别1:21和1:22是类别1:2的子类别,因此他们可以共享分配的80Mbit带宽。同时,又确保当需要时,自己的带宽至少有40Mbit。

      从这个例子可以看出,利用HTB中类别和子类别的包含关系,可以构建更加复杂的多层次类别树,从而实现的更加灵活的带宽共享和独占模式,达到企业级的带宽管理目的。

给网络注入点延迟

前言

有些时候,需要人为引入网络延迟,模拟网络条件比较差的情况下,集群的行为。这时候,tc这个工具就横空出世了。 tc是 Traffic Control的简写,用来控制网络流量的。它的功能还是很强大的,我们本文仅简单介绍如何惹人为地注入网络延迟。

注入延迟

注入延迟之前,看下网路延迟:

root@BEAN-1:~# ping 10.10.125.1
PING 10.10.125.1 (10.10.125.1) 56(84) bytes of data.
64 bytes from 10.10.125.1: icmp_req=1 ttl=64 time=0.178 ms
64 bytes from 10.10.125.1: icmp_req=2 ttl=64 time=0.090 ms
64 bytes from 10.10.125.1: icmp_req=3 ttl=64 time=0.270 ms
64 bytes from 10.10.125.1: icmp_req=4 ttl=64 time=0.156 ms
64 bytes from 10.10.125.1: icmp_req=5 ttl=64 time=0.145 ms
^C
--- 10.10.125.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.090/0.167/0.270/0.061 ms

给eth0 注入8ms的延迟:

tc qdisc add dev eth0 root netem delay 8ms

然后通过ping查看是否生效:

ping 10.10.125.1
PING 10.10.125.1 (10.10.125.1) 56(84) bytes of data.
64 bytes from 10.10.125.1: icmp_req=1 ttl=64 time=8.17 ms
64 bytes from 10.10.125.1: icmp_req=2 ttl=64 time=8.17 ms
64 bytes from 10.10.125.1: icmp_req=3 ttl=64 time=8.18 ms
64 bytes from 10.10.125.1: icmp_req=4 ttl=64 time=8.28 ms
64 bytes from 10.10.125.1: icmp_req=5 ttl=64 time=8.13 ms
^C
--- 10.10.125.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 8.139/8.190/8.286/0.050 ms

可以看到网络延迟增加了8ms左右。

查看当前的延迟信息

tc qdisc show dev eth1 
qdisc netem 8121: root refcnt 2 limit 1000 delay 8.0ms

改变网络延迟大小

注意,如果已经引入了延迟,但是要修改延迟大小,使用add就不行了,要用change

tc qdisc add  dev eth1 root netem delay 10ms
RTNETLINK answers: File exists

tc qdisc change  dev eth1 root netem delay 10ms

tc qdisc show dev eth1 
qdisc netem 8121: root refcnt 2 limit 1000 delay 10.0ms

或者我们不想区别第一次和修改,可以一律使用replace

删除引入的网络延迟
tc qdisc del dev eth1 root netem delay 1ms

显示当前的状态,无延迟
tc qdisc show dev eth1 
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

#replace设置延迟为9ms
tc qdisc replace  dev eth1 root netem delay 9ms

# 显示当前状态,的确是delay 9ms
tc qdisc show dev eth1 
qdisc netem 8123: root refcnt 2 limit 1000 delay 9.0ms

# 用replace来修改网络延迟为4ms
tc qdisc replace  dev eth1 root netem delay 4ms

# 显示当前网络延迟,的确是4ms
tc qdisc show dev eth1 
qdisc netem 8123: root refcnt 2 limit 1000 delay 4.0ms

删除引入的延迟

tc qdisc del dev eth1 root netem delay 1ms

其他

我们在测试脚本中引入延迟,但是须知,脚本可能会被信号杀死,我们希望,脚本退出的时候,网络延迟被重置为0,这时候,对于shell脚本而言,需要使用trap,做清理工作。

function clean
{
   #此函数为清理函数,一般是将人为引入的网络延迟删除
}

trap clean EXIT

信息搜集

什么是信息搜集

信息搜集也称踩点,信息搜集毋庸置疑就是尽可能的搜集目标的信息,包括端口信息、DNS信息、员工邮箱等等看似并不起眼的一些信息都算是信息搜集,这些看似微乎其微的信息,对于渗透测试而言就关乎到成功与否了。

信息搜集的重要性

信息搜集是渗透测试的最重要的阶段,占据整个渗透测试的60%,可见信息搜集的重要性。根据收集的有用信息,可以大大提高我们渗透测试的成功率。

信息搜集的分类

1、主动式信息搜集(可获取到的信息较多,但易被目标发现) 2、通过直接发起与被测目标网络之间的互动来获取相关信息,如通过Nmap扫描目标系统。 3、被动式信息搜集(搜集到的信息较少,但不易被发现) 4、通过第三方服务来获取目标网络相关信息。如通过搜索引擎方式来搜集信息。

搜集什么信息

1、whois信息(微步) 2、网站架构 3、dns信息(通过查询dns我们可以检测是否存在dns域传送漏洞) 4、子域名搜集 5、敏感目录及敏感信息、源码泄露(搜索引擎+工具) 6、脆弱系统(网络空间) 7、旁站查询 8、C端查询 9、指纹信息 10、端口服务 11、备案信息 12、真实ip 13、探测waf 14、社工(朋友圈、微博、qq空间、求职、交易等社交平台) 15、企业信息(天眼查、企业信用信息公示系统、工业和信息化部ICP/IP地址/域名信息备案管理系统)

信息搜集的流程

上面我已经列举了需要搜集的信息,然后我给它们分了一下类。

我考虑到一个网站的组成是由域名、服务器、网站程序组成的。

因此:

首先入手域名方面:whois、子域名、备案信息; 其次是入手服务器方面:dns信息、端口服务、真实ip; 然后入手网站程序(web层)方面:网站架构、敏感目录及敏感信息、源码泄露(搜索引擎+工具)、脆弱系统(网络空间)、旁站查询、C端查询、指纹信息、探测waf; 最后入手企业方面:天眼查、企业信用信息公示系统

归了类之后,我做了一张脑图。

脑图如下图所示:

Whois信息和Whois反查

whois是用来查询域名的IP以及所有者等信息的传输协议。 whois信息可以获取关键注册人的信息,包括注册商、联系人、联系邮箱、联系电话、创建时间等,可以进行邮箱反查域名,爆破邮箱,社工,域名劫持等等。

查询方式

1、http://whois.chinaz.com/ 2、微步 3、https://who.is/ 4、Linux whois命令 5、其他工具

这里需要注意的是国际域名可以设置隐私保护,但像国内.cn等域名是不可以设置隐私保护的。

当然我们得比较一下这几种方式哪一种比较适合自己。

站长之家查询whois信息

这里我用360.cn为例。可以看到下图我们搜集到了注册商、联系人、联系邮箱等信息。

可以看到很直观,很中国,而且我们还可以通过联系人和联系邮箱反查。

我们通过联系人反查,搜集到更多信息,效果如下图

我们也可以通过邮箱反查,效果如下图

微步查询whois信息

下图通过微步查询whois信息的效果,和站长之家一样很中国,想要反查whois需要复制邮箱

图是反查邮箱的效果,微步需要登录才可以查看更多的信息。

因此相较于站长之家就显得有些麻烦了。

who.is查询whois信息

下图是通过who.is网站查询到的whois信息,可以看到中文字符竟还有乱码,很外国,且不能whois反查。

Linux whois命令查询whois信息

需要注意的是并不是所有Linux系统都自带whois命令的。

我这里就用CentOS7来演示安装whois客户端。

具体命令的话可以看下图

安装完成之后,我们来查询一下360.cn。可以看到下图的效果,同样出现了乱码。

其他工具查询whois信息

查询whois信息的工具,我这里不做讲解了,工具实质上还是调用了网站接口的。

因此通过比较,我们针对国内网站的whois信息,我们使用站长之家和微步来查询whois信息效率会比较高。

子域名搜集

子域名收集可以发现更多目标,以增加渗透测试成功的可能性,探测到更多隐藏或遗忘的应用服务,这些应用往往可导致一些严重漏洞。当一个主站坚不可摧时,我们可以尝试从分站入手。

查询方式

1、layer子域名挖掘机 2、https://phpinfo.me/domain/ 3、subDomainsBrute 4、搜索引擎语法(site:xxx.com)

layer子域名挖掘机

下载地址:https://www.webshell.cc/6384.html

我们运行这款工具需要安装.net framework 4.0以上,否则会出现像下图一样的错误信息

我就以安装4.5.2为例

安装完毕后会出现下图

现在可以成功运行工具了

以360.cn为例,爆破的效果如下图,这款软件的好处是还可以进行扫描端口和探测服务器类型

https://phpinfo.me/domain/

这是Lcy大佬的在线子域名爆破工具,我们可以测试一下爆破360.cn的子域名的效果,如下图所示,作为在线工具,它的爆破速度很可观。

subDomainsBrute

这是lijiejie大佬用python写的子域名爆破工具,不用说运行的话需要先安装python,对于懒惰的人,直接拖进kali里直接就可以运行。

github下载地址:https://github.com/lijiejie/subDomainsBrute

下图是以360.cn为例,用这款工具爆破出来的子域名,可以看到比较少,这是因为字典比较小的原因。

搜索引擎语法(site:xxx.com)

我们也可以通过搜索引擎的语法搜索,但是搜索到的子域名比较少。

下图是通过百度搜索360.cn子域名的效果图,当然谷歌也是同样的语法。

备案信息

备案信息分为两种,一种是IPC备案信息查询,一种是公安部备案信息查询。如果是国外的服务器是不需要备案的,因此可以忽略此步骤,国内的服务器是需要备案的,因此可以尝试获取信息。

查询方式

1、ICP备案查询 2、公安部备案查询

ICP备案查询

下图是通过网站查询ICP备案信息

公安部备案查询

下图是通过全国公安机关互联网安全管理服务平台查询公安部备案信息

DNS信息搜集

通过查询DNS信息,我们可能可以发现网站的真实ip地址,也可以尝试测试是否存在DNS域传送漏洞。

查询方式

1、Kali(host、big命令) 2、windows(nslookup命令) 3、在线工具

Kali命令

host查询DNS信息,如下图所示:

big查询DNS信息,如下图所示

windows命令

nslookup命令效果如下图,比较low。

在线工具

地址:

http://tool.chinaz.com/dns/
https://tool.lu/dns/

这里就不做讲解了,和查whois信息一样。

探测端口服务

查询方式

Nmap

个人觉得用Nmap足矣

Nmap扫描

扫描结果如下图所示,可以看到我们可以扫描到操作系统类型、端口信息和端口对应的服务信息。

下图是详细端口对应服务图

获取网站真实ip

现在大多数的网站都开启了CDN加速,导致我们获取到的IP地址不一定是真实的IP地址。

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

思路

1、二级域名法 一般网站不会所有的二级域名放CDN,因此我们可以利用这点来获取网站的真实ip 2、多地ping法 由CDN的原理,不同的地方去Ping服务器,如果IP不一样,则目标网站肯定使用了CDN 3、nslookup法 找国外的比较偏僻的DNS解析服务器进行DNS查询,因为大部分CDN提供商只针对国内市场,而对国外市场几乎是不做CDN,所以有很大的几率会直接解析到真实IP 4、查看邮件法 通过查看邮件原文来确定ip地址,CDN总不会发送邮件吧 5、RSS订阅法 RSS原理于邮件法差不多 6、查看历史解析记录法 查找域名历史解析记录,域名在上CDN之前用的IP,很有可能就是CDN的真实源IP地址 7、利用网站漏洞(XSS、命令执行、SSRF、php探针、phpinfo页面等) 可以通过一些页面和漏洞获取到服务器ip地址也是可能的。

网站架构

操作系统

查询方式:

1、Nmap 2、wappalyzer插件 3、云悉

wappalyzer插件是一款火狐插件,可以去火狐扩展中添加。

云悉是云悉安全专注于网络资产自动化梳理,cms检测web指纹识别,让网络资产更清晰的在线查询工具。

通过Nmap获取操作系统,如下图所示

通过wappalyzer插件查询,如下图所示

通过云悉也可以查询到操作系统,如下图所示

中间件信息

1、wappalyzer插件 2、云悉

通过wappalyzer插件查询中间件信息,如下图所示

通过云悉也可以查询到中间件信息,如下图所示

数据库

1、wappalyzer 2、云悉

通过云悉查询到数据库信息,如下图所示

通过wappalyzer插件查询到数据库信息,如下图所示

编程语言

1、wappalyzer 2、云悉

通过wappalyzer插件查询到编程语言信息,如下图所示

通过云悉查询到编程语言信息,如下图所示

敏感目录及敏感信息、源码泄露(搜索引擎+工具)

途径方法

1、御剑 2、搜索引擎 3、BBscan 4、GSIL 5、社交平台(QQ群、文库、求职网)

robots.txt、crossdomin.xml、sitemap.xml、源码泄漏文件、/WEB-INF/

御剑

御剑这款工具主要用于扫描网站的敏感目录、敏感文件。这里必须要说明一下字典必须要足够强大才可以扫到别人发现不了的点。因此我们必须完善一下自己的字典。

下图是我利用御剑对我自己网站的一次扫描

搜索引擎

搜索引擎也可以用于搜索网站的敏感目录、敏感文件和敏感信息。

这里就必须提一下搜索引擎的语法了,这里以google 黑客语法为例,语法同样适用于百度搜索引擎。

基本语法:

"" //双引号表示强制搜索
-  //表示搜索不包含关键词的网页
|  //或者的意思
site //返回所有于这个域名有关的网页
intext //搜索到的网页正文部分包含关键词
intitle //搜索到的网页标题包含关键词
cache   //搜索关于某些内容的缓存
definne //搜索某个词语的定义
filetype //搜索指定的文件类型
info //查找指定站点的一些基本信息
inurl //搜索包含关键词的URL
link //可以返回所有和baidu.com做了链接的URL

下面做几个演示

下图将返回360.cn的一些分站

下图返回了所有360.cn下的所有包含login关键词的URL

具体的用法你可以自己开动脑经组合使用,这里就不多做演示了。

BBscan

BBscan是一款信息泄漏批量扫描脚本。它是依旧还是由lijiejie大佬用python写的安全工具。

这是项目地址:https://github.com/lijiejie/BBScan

在windows平台运行需要解决依赖问题

pip install -r requirements.txt

下图是安装依赖的过程

下面说一下使用示例

1. 扫描单个web服务 www.target.com

python BBScan.py  --host www.target.com 

2. 扫描www.target.com和www.target.com/28下的其他主机

python BBScan.py  --host www.target.com --network 28 

3. 扫描txt文件中的所有主机

python BBScan.py -f wandoujia.com.txt 

4. 从文件夹中导入所有的主机并扫描

python BBScan.py -d targets/  --browser

5. 如果是为了去各大src刷漏洞,可以考虑把所有域名保存到targets文件夹下,然后

python BBScan.py -d targets/ --network 30 

下图是我利用BBscan扫描自己网站

GSIL

GSIL是一款由python3写的从github上寻找敏感文件的安全工具。

项目地址:https://github.com/FeeiCN/GSIL

先安装一下依赖

pip install -r requirements.txt

然后需要给它进行配置

用法

# 启动测试$ python3 gsil.py test# 测试token有效性$ python3 gsil.py --verify-tokens

社交平台

在wooyun某一些案例中,有一些奇葩的思路,通过qq群信息泄露或者通过在线文档平台等等导致被攻击。

下图是通过QQ群查找找到的敏感文件以及账号和密码信息。

下图是通过道客巴巴获取敏感信息,其他社交平台这里就不演示了,社交平台实在有点多。

脆弱系统(网络空间)

网络空间搜索引擎的作用就是将互联网上公开的网络资产收集和整理,以此方便人们进行查阅和利用。我在网络空间可发现了不少企业的脆弱系统,未授权访问、SQL注入、弱口令等等都是存在的。

网络空间搜索引擎:

1、Shodan 2、FOFA 3、Zoomeye

旁站查询

什么是旁站

旁站是和目标网站在同一台服务器上的其它的网站。

在线工具 k8旁站查询

在线工具获取旁站

下图是通过站长之家获取同一个服务器下的站点信息

k8查询旁站

这个工具是C#写的,因此需要.NET Framework v4.0

想要使用这款工具还需要申请必应API,我手工测试时是打不开KEY申请地址的,可能已经不行了,因此还是推荐使用在线工具查询吧。

C端查询

什么是C端

C端是和目标服务器ip处在同一个C段的其它服务器。

查询方式

北极熊扫描器 Nmap

北极熊扫描器扫C端

这是一款国人写的扫描器,不得不说这款扫描器误报率是真的高。通过一些实战我发现这款扫描器不错的是C端扫描,可以获取网站标题、服务环境、程序类型

下载地址

下图是使用北极熊扫描器扫C端的效果图

Nmap扫C端

下图是Nmap扫描开放http服务的服务器的效果图

指纹信息

指纹是什么

指定路径下指定名称的js文件或代码。 指定路径下指定名称的css文件或代码。 <title>中的内容,有些程序标题中会带有程序标识 meta标记中带程序标识中带程序标识。 display:none中的版权信息。 页面底部版权信息,关键字© Powered by等。 readme.txt、License.txt、help.txt等文件。 指定路径下指定图片文件,如一些小的图标文件,后台登录页面中的图标文件等,一般管理员不会修改它们。 注释掉的html代码中<!– http头的X-Powered-By中的值,有的应用程序框架会在此值输出。 cookie中的关键字 robots.txt文件中的关键字 404页面 302返回时的旗标

指纹信息的重要性

通过识别目标网站所使用的CMS信息,可以帮助我们进一步了解渗透测试环境,可以利用已知的一些CMS漏洞来进行攻击。

识别指纹方式

1、云悉 2、wappalyzer插件 3、whatweb工具

探测waf

WAF也称Web应用防护系统,Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

原理:WAF识别大多基于Headers头信息。通过发送恶意的内容,对比响应,寻找数据包被拦截、拒绝或者检测到的标识。

探测方式

手工(提交恶意数据) 工具(WAFW00F、Nmap)

我们可以通过工具判断,如果工具检测到WAF的存在,手工验证一下是否存在误报;如果工具检测不到WAF的存在,我们也可以通过手工来判断WAF到底存不存在。

Nmap探测WAF

Nmap探测WAF有两种脚本,一种是http-waf-detect,一种是http-waf-fingerprint。

WAFW00F探测WAF

手工探测WAF

在网址URL参数后面输入恶意数据,通过提交后被WAF拦截得知WAF信息。如下图

天眼查

地址:https://www.tianyancha.com/

天眼查是一款“都能用的商业安全工具”,根据用户的不同需求,实现了企业背景、企业发展、司法风险、经营风险、经营状况、知识产权方面等多种数据维度的检索。

下图以奇虎360为例

企业信用信息公示系统

地址:http://www.gsxt.gov.cn/index.html

下图以奇虎360为例

渗透测试信息收集工具篇

1、whois 查询网站及服务器信息

如果知道目标的域名,你首先要做的就是通过 Whois 数据库查询域名的注册信息,Whois 数据库是提供域名的注册人信息,包括联系方式,管理员名字,管理员邮箱等等,其中也包括 DNS 服务器的信息。

默认情况下,Kali 已经安装了 Whois 。你只需要输入要查询的域名即可:

利用以上收集到的邮箱、QQ、电话号码、姓名、以及服务商,可以针对性进行攻击,利用社工库进行查找相关管理员信息,另外也可以对相关 DNS 服务商进行渗透,查看是否有漏洞,利用第三方漏洞平台,查看相关漏洞。

2、Dig 使用

可以使用 dig 命令对 DNS 服务器进行挖掘,Dig 命令后面直接跟域名,回车即可,如图:

【Dig常用选项】

1 -c 选项,可以设置协议类型( class ),包括 IN (默认)、CH 和 HS。

2 -f 选项,dig 支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。来个实际例子吧:

3 -4 和 -6 两个选项,用于设置仅适用哪一种作为查询包传输协议,分别对应着 IPv4 和 IPv6。

4 -t 选项,用来设置查询类型,默认情况下是 A,也可以设置 MX 等类型,来一个例子:

5 -q 选项,其实它本身是一个多余的选项,但是它在复杂的 dig 命令中又是那么的有用。-q 选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性,来个例子:

6 -x 选项,是逆向查询选项。可以查询 IP 地址到域名的映射关系。举一个例子:

【跟踪 dig 全过程】

dig 非常著名的一个查询选项就是 +trace,当使用这个查询选项后,dig 会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来

【精简 dig 输出】

使用 +nocmd 的话,可以节省输出 dig 版本信息。

Dig 可以用来查域传送漏洞

前面介绍了 dig 的使用,若将查询类型设定为 axfr,就能得到域传送数据。这也是我们要用来测试 DNS 域传送泄露的命令

3、Nslookup 用法

nslookup 是站长较为常用的工具之一,它甚至比同类工具 dig 的使用人数更多,原因是它的运行环境是 windows ,并且不需要我们再另外安装什么东西。dig 是在 linux 环境里运行的命令,不过也可以在 windows 环境里使用,只是需要安装 dig windows 版本的程序。

Nslookup 命令以两种方式运行:非交互式和交互式。本文第一次提到 “交互式” 的概念,简单说明:交互式系统是指执行过程中允许用户输入数据和命令的系统。而非交互式系统,是指一旦开始运行,不需要人干预就可以自行结束的系统。因此,nslookup 以非交互式方式运行,就是指运行后自行结束。而 “交互式”,是指开始运行后,会要求使用者进一步输入数据和命令。

DNS 记录类型:

A 地址记录 AAAA 地址记录 AFSDB Andrew 文件系统数据库服务器记录 ATMA ATM 地址记录 CNAME 别名记录 HINFO 硬件配置记录,包括 CPU 、操作系统信息 ISDN 域名对应的 ISDN 号码 MB 存放指定邮箱的服务器 MG 邮件组记录 MINFO 邮件组和邮箱的信息记录 MR 改名的邮箱记录 MX 邮件服务器记录 NS 名字服务器记录 PTR 反向记录 RP 负责人记录 RT 路由穿透记录 SRV TCP 服务器信息记录 TXT 域名对应的文本信息 X25 域名对应的 X.25 地址记录

举例说明:

设置类型为 ns

下面的例子查询 baidu.com 使用的 DNS 服务器名称:

下面的例子展示如何查询 baidu.com 的邮件交换记录:

查看网站 cname 值。

查看邮件服务器记录( -qt=MX )

同样 nslookup 也可以验证是否存在域传送漏洞,步骤如下:

1) nslookup 进入交互式模式

2) Server 设置使用的 DNS 服务器

3) ls 命令列出某个域中的所有域名

4、fierce 工具

在进行了基本域名收集以后,如果能通过主域名得到所有子域名信息,再通过子域名查询其对应的主机 IP,这样我们能得到一个较为完整的信息。除了默认使用,我们还可以自己定义字典来进行域名爆破。

使用 fierce 工具,可以进行域名列表查询:fierce -dns domainName

输出结果表明,程序首先进行了域传送测试,域传送通过一条命令就能获取服务器上所有的域名信息。如果一次就能简单获取服务器上所有记录域名信息,就不再暴力破解。

但从结果上看,“Unsucessful in zone transfer” , 域传送测试是失败了。接着执行暴力破解,测试的数量取决于字典中提供的字符串数量,上例中没有指定字典,在默认情况下在 Kali 中使用 /usr/share/fierce/hosts.txt。一个内部网络的 DNS 域名服务器可以提供大量信息,这些信息可以在以后评估网络漏洞。

5、theHarvester 的使用

theHarvester 是一个社会工程学工具,它通过搜索引擎、PGP 服务器以及 SHODAN 数据库收集用户的 email ,子域名,主机,雇员名,开放端口和 banner 信息。

-d 服务器域名 -l 限制显示数目 -b 调用搜索引擎(baidu,google,bing,bingapi,pgp,linkedin,googleplus,jigsaw,all) -f 结果保存为HTML和XML文件 -h 使用傻蛋数据库查询发现主机信息

实例1:

theHarvester -d sec-redclub.com -l 100 -b baidu

实例2:

输出到 html 文件中,可以更清晰的看到搜索的网站信息的模型。

theHarvester -d sec-redclub.com -l 100 -b baidu -fmyresults.html

6、DNS 枚举工具 DNSenum

DNSenum 是一款非常强大的域名信息收集工具。它能够通过谷歌或者字典文件猜测可能存在的域名,并对一个网段进行反向查询。它不仅可以查询网站的主机地址信息、域名服务器和邮件交换记录,还可以在域名服务器上执行 axfr 请求,然后通过谷歌脚本得到扩展域名信息,提取子域名并查询,最后计算 C 类地址并执行 whois 查询,执行反向查询,把地址段写入文件。本小节将介绍使用 DNSenum 工具检查 DNS 枚举。在终端执行如下所示的命令:

输出的信息显示了 DNS 服务的详细信息。其中,包括主机地址、域名服务地址和邮件服务地址,最后会尝试是否存在域传送漏洞。

使用 DNSenum 工具检查 DNS 枚举时,可以使用 dnsenum 的一些附加选项,如下所示。

–threads[number]:设置用户同时运行多个进程数。 -r:允许用户启用递归查询。 -d:允许用户设置 WHOIS 请求之间时间延迟数(单位为秒)。 -o:允许用户指定输出位置。 -w:允许用户启用 WHOIS 请求。

7、subDomainsbrute 二级域名收集

二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称;在国家顶级域名下,它是表示注册企业类别的符号。我国在国际互联网络信息中心(Inter NIC) 正式注册并运行的顶级域名是CN,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共7个,包括用于科研机构的ac;国际通用域名com、top;用于教育机构的edu;用于政府部门的gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。(摘自百度百科

以上为工具默认参数,如果是新手,请直接跟主域名即可,不用进行其它设置。

python subDomainsbrute.py sec-redclub.com

就可以直接运行,等待结果,最后在工具文件夹下面存在txt文件,直接导入扫描工具就可以进行扫描了。

8、layer子域名检测工具

layer子域名检测工具主要是windows一款二级域名检测工具,利用爆破形式。

工具作者:http://www.cnseay.com/4193/

域名对话框直接输入域名就可以进行扫描了,工具显示比较细致,有域名、解析 ip、cnd 列表、web 服务器和网站状态,这些对于一个安全测试人员,非常重要。如下操作:

回显示大部分主要二级域名。

9、Nmap

Nmap 是一个网络连接端口扫描软件,用来扫描网上电脑开放的网络连接端口。确定哪些服务运行在哪些连接端口,并且推断计算机运行哪个操作系统。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

功能:

1、 主机发现

2、 端口扫描

3、 版本侦测

4、 OS侦测

几种部署方式:

1、Kail 集成环境

2、单独安装(使用 yum 工具直接安装)

3、PentestBox 环境

4、Windows 版等等

Nmap 的参数和选项繁多,功能非常丰富。我们先来看一下 Nmap 的通用命令格式:(详细教程及下载方式参见:http://nmap.org/

Nmap < 扫描选项 > < 扫描目标 >

主机发现的原理与 Ping 命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap 支持十多种不同的主机探测方式,比如发送 ICMP ECHO/TIMESTAMP/NETMASK 报文、发送 TCPSYN/ACK 包、发送 SCTP INIT/COOKIE-ECHO 包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。

主机发现的基本用法:

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。 -sn: Ping Scan 只进行主机发现,不进行端口扫描。 -Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。 -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。 -PE/PP/PM: 使用ICMP echo,timestamp, and netmask 请求包发现主机。 -PO[protocollist]: 使用IP协议包探测对方主机是否开启。 -sP:Ping 指定范围内的 IP 地址 -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。 –dns-servers <serv1[,serv2],…>: 指定DNS服务器。 –system-dns: 指定使用系统的DNS服务器 –traceroute: 追踪每个路由节点

扫描局域网 192.168.80.1/24 范围内哪些 IP 的主机是活动的。

命令如下:

nmap –sn 192.168.80.1/24

由图可知:192.168.80.1、192.168.80.254、192.168.80.166 三台主机处于存活状态。

扫描局域网 192.168.80.100-200 范围内哪些 IP 的主机是活动的。

命令如下:

nmap –sP 192.168.80.100-200

端口扫描是 Nmap 最基本最核心的功能,用于确定目标主机的 TCP/UDP 端口的开放情况。默认情况下,Nmap 会扫描 1000 个最有可能开放的 TCP 端口。Nmap 通过探测将端口划分为 6 个状态:

open:端口是开放的。 closed:端口是关闭的。 filtered:端口被防火墙 IDS/IPS 屏蔽,无法确定其状态。 unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。 open|filtered:端口是开放的或被屏蔽。 closed|filtered :端口是关闭的或被屏蔽。

端口扫描方面非常强大,提供了很多的探测方式:

TCP SYN scanning TCP connect scanning TCP ACK scanning TCP FIN/Xmas/NULL scanning UDP scanning

其他方式

-sS/sT/sA/sW/sM: 指定使用 TCPSYN/Connect()/ACK/Window/Maimon scans 的方式来对目标主机进行扫描。 -sU: 指定使用 UDP 扫描方式确定目标主机的UDP端口状况。 -sN/sF/sX: 指定使用 TCP Null,FIN, and Xmas scans 秘密扫描方式来协助探测对方的 TCP 端口状态。 –scanflags <flags>: 定制 TCP 包的 flags。 -sI zombiehost[:probeport]: 指定使用 idle scan 方式来扫描目标主机(前提需要找到合适的 zombie host ) -sY/sZ: 使用 SCTPINIT/COOKIE-ECHO 来扫描 SCTP 协议端口的开放的情况。 -sO: 使用 IP protocol 扫描确定目标机支持的协议类型。 -b <FTP relay host>: 使用 FTPbounce scan 扫描方式 -p 指定端口扫描

在此,我们以主机 192.168.80.166 为例。命令如下:

nmap-sS -p0-65535 -T4 192.168.80.166

参数 -sS 表示使用 TCP SYN 方式扫描 TCP 端口;-p0-65535 表示扫描所有端口;-T4 表示时间级别配置 4 级;

扫描特定端口是否开放

nmap -p21,80,445,3306 192.168.80.166

简要的介绍版本的侦测原理。版本侦测主要分为以下几个步骤:

1、首先检查 open 与 open|filtered 状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。

2、如果是 TCP 端口,尝试建立 TCP 连接。尝试等待片刻(通常 6 秒或更多,具体时间可以查询文件 nmap-services-probesProbe TCP NULL q|| 对应的 totalwaitms )。通常在等待时间内,会接收到目标机发送的 “WelcomeBanner” 信息。nmap 将接收到的 Banner 与 nmap-services-probesNULL probe 中的签名进行对比。查找对应应用程序的名字与版本信息。

3、如果通过 “Welcome Banner” 无法确定应用程序版本,那么 nmap 再尝试发送其他的探测包(即从 nmap-services-probes 中挑选合适的 probe ),将 probe 得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。

4、如果是 UDP 端口,那么直接使用 nmap-services-probes 中探测包进行探测匹配。根据结果对比分析出 UDP 应用服务类型。

5、如果探测到应用程序是 SSL,那么调用 openSSL 进一步的侦查运行在 SSL 之上的具体的应用类型。

6、如果探测到应用程序是 SunRPC,那么调用 brute-force RPC grinder 进一步探测具体服务。

具体参数解释

-sV: 指定让 Nmap 进行版本侦测 –version-intensity <level>: 指定版本侦测强度 ( 0-9 ),默认为 7 。数值越高,探测出的服务越准确,但是运行时间会比较长。 –version-light: 指定使用轻量侦测方式 ( intensity 2 ) –version-all: 尝试使用所有的probes进行侦测 ( intensity 9 ) –version-trace: 显示出详细的版本侦测过程信息。

对主机 192.168.80.166 进行版本侦测。

命令如下:

nmap -sV -p0-65535 -T4 192.168.80.166

Nmap 使用 TCP/IP 协议栈指纹来识别不同的操作系统和设备。在 RFC 规范中,有些地方对 TCP/IP 的实现并没有强制规定,由此不同的 TCP/IP 方案中可能都有自己的特定方式。Nmap 主要是根据这些细节上的差异来判断操作系统的类型的。

具体实现方式如下:

Nmap 内部包含了 2600 多已知系统的指纹特征(在文件 nmap-os-db 文件中)。将此指纹数据库作为进行指纹对比的样本库。分别挑选一个 open 和 closed 的端口,向其发送经过精心设计的 TCP/UDP/ICMP 数据包,根据返回的数据包生成一份系统指纹。将探测生成的指纹与 nmap-os-db 中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

-O: 指定 Nmap 进行 OS 侦测。 –osscan-limit: 限制 Nmap 只对确定的主机的进行 OS 探测(至少需确知该主机分别有一个 open 和 closed 的端口)。 –osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

命令如下:

nmap –O 192.168.80.166

-vv 详细显示扫描状态

nmap -p21,80,445,3306 -vv 192.168.80.166

–script 使用 nse 脚本,也可自行编写 nse 脚本,nmap 有 580 多个脚本

nmap –script=auth 192.168.80.166

–script=brute 对弱口令进行暴力破解

nmap –script=brute 192.168.80.166

–script=default 使用默认 nse 脚本搜集应用的信息

nmap –script=default 192.168.80.166

–script=vuln 检测常见漏洞

nmap –script=vuln 192.168.80.166

优势:

1、功能灵活强大,支持多种目标,大量计算机的同时扫描;

2、开源,相关帮助文档十分详细;

3、流行,由于其具有强大的扫描机探测功能,,已被成千上万安全专家使用。

劣势:

Nmap 参数众多,难以一一记忆;

10、DirBuster

DirBuster 是一款路径及网页暴力破解的工具,可以破解出一直没有访问过或者管理员后台的界面路径。

安装方式:

Java 运行环境 + DirBuster 程序包

使用方式:

1、直接双击 DirBuster.jar 打开软件,在 URL 中输入目标 URL 或者主机 IP 地址

2、在 file with list of dirs/files 栏后点击 browse,选择破解的字典库为 directory-list-2.3-small.txt

3、将 File extension 中填入正确的文件后缀,默认为 php ,如果为 jsp、asp、aspx 页面,需要填入 jsp、asp、aspx 同样可以选择自己设置字典,线程等等

4、其他选项不变,点击右下角的 start,启动目录查找

5、观察返回结果,可点击右下角的 report,生成目录报告

优点:

1、敏感目录发掘能力强

2、OWASP安全机构极力推荐

缺点:

探测目录依赖字典文件(可以说工具只是辅助,在不同的人手里,工具有不同的功效,为什么呢?因为核心是字典,牛逼的人经过常年的渗透测试收集到的字典足够精准足够全面,所以新手可以先学习工具,想要成长还是要搞清楚原理。)

山石防火墙部署HA模式,保证业务不中断

本示例介绍如何配置HA Active-Passive工作模式,以提高网络可靠性,保证业务不中断。

如下图所示,组建HA AP模式的两台设备分别为Device A和Device B。配置后,Device A将被选举为主设备,进行流量转发;Device B为备份设备。Device A会将其配置信息以及状态数据同步到备份设备Device B。当主设备Device A出现故障不能正常转发流量时,备份设备Device B会在不影响用户通信的状态下切换为主设备,继续转发流量。

步骤一: 配置Device A的监测对象。监控主设备ethernet0/0的工作状态,一旦发现接口工作失败,则进行主备切换。
选择“对象 > 监测对象”,并点击“新建”。   名称:track1 警戒值:255 监测类型:选择<接口>单选按钮,并点击“添加”按钮。在弹出的<添加监测对象>对话框,指定接口为“ethernet0/0”,权值为“255”
步骤二: 配置HA组。 
Device A   选择“系统 > HA”,在<组0>处配置。 优先级:10 监测对象:track1
Device B   选择“系统 > HA”,在<组0>处配置。 优先级:100
步骤三: 配置Device A的接口及策略。 
选择”网络 > 接口”,双击ethernet0/0。   绑定安全域:三层安全域 安全域:untrust 类型:静态IP IP地址:100.1.1.4 网络掩码:29
选择”网络 > 接口”,双击ethernet0/1。   绑定安全域:三层安全域 安全域:trust 类型:静态IP IP地址:192.168.1.4 网络掩码:29
选择“策略 > 安全策略”,并点击“新建”按钮创建一条策略规则。   名称:policy 源信息 安全域:trust 地址:Any 目的信息 安全域:untrust 地址:Any 其他信息 服务/服务组:Any 行为:允许
步骤四:配置HA控制连接接口,并开启HA功能。 
Device A   选择“系统 > HA”。 HA控制连接接口1:ethernet0/4 HA控制连接接口2:ethernet0/8 IP地址:1.1.1.1/24 HA簇ID:1
Device B   选择“系统 > HA”。 HA控制连接接口1:ethernet0/4 HA控制连接接口2:ethernet0/8 IP地址:1.1.1.2/24 HA簇ID:1
步骤五:主备同步完成后,配置主设备与备份设备的管理IP。
Device A   选择”网络 > 接口”,双击ethernet0/1。在<接口配置>对话框<IP配置>处点击“高级选项”。 管理IP IP地址:192.168.1.253
Device B   选择”网络 > 接口”,双击ethernet0/1。在<接口配置>对话框<IP配置>处点击“高级选项”。 管理IP IP地址:192.168.1.254
步骤六:验证结果。 
配置完成后,点击“系统 > 系统信息”,两台设备的HA状态分别如下显示:   Device A HA状态:Master Device B HA状态:Backup Device A:   Device B:
当Device A出现故障不能正常转发流量或Device A的ethernet0/0接口断开时,Device B会在不影响用户通信的状态下切换为主设备,继续转发流量。   点击“系统 > 系统信息”,两台设备的HA状态分别如下显示: Device A HA状态:Monitor Failed Device B HA状态:Master Device A:   Device B:

防火墙的逆向路由和路由器的反向接口策略路由

逆向路由:

如果启用,则向外转发数据包时需查询路由表

如果禁用,则向外转发数据包不查路由表,而根据会话信息实现数据包从哪里来,就从哪里出去。​

接口的逆向路由 影响到 运营商(联通)链路设备的连通!

假设防火墙上接口1的IP地址为202.0.0.1/30,接口2的IP地址为61.0.0.1/30 ,接口3的IP地址为219.1.1.1/30

有一条路由为 210.0.0.0/8 next-hop 61.0.0.2

一数据包源IP地址为210.0. 0.1 目的IP地址为 219.1.1.2的数据包从接口1收到,

接口1如果不开启逆向路由,源IP219.1.1.2 目的IP210.0.0.1的回复数据包会从接口1转发(原路返回,匹配会话表),

接口1如果开启逆向路由,会查找路由表,这样SOURCE_IP 219.1.1.2 D_IP 210.0.0.1的回复数据包将从接口2转发。​

反向接口策略路由:​​ 华三AR6600系列路由器 配置案例

1. 组网需求

网关设备Router A通过两个接口(Serail2/2/0和Serial2/2/1)和公网连接。用户PC从公网访问内网的HTTP Server服务,不妨设PC请求报文从Router A接口Serial2/2/0进入,通过网关设备转发,从Router A的私网接口GigabitEthernet2/1/1进入内网访问HTTP Server服务器。

要求:从私网返回的响应报文从Router A的接口GigabitEthernet2/1/1进入,经Router A转发时,能够从原来请求报文的入接口Serial2/2/0进入公网,返回用户PC。​

配置步骤

# 配置Router A各接口IP地址,并保证Router A与公网连通(略)。

# 在接口Serial2/2/0上配置内部服务器功能,将HTTP Server的IP地址192.168.1.2/24映射为2.1.1.100/16(和Router A的接口Serial2/2/0的IP地址在同一网段)。

system-view

[RouterA] interface serial 2/2/0

[RouterA-Serial2/2/0] nat server protocol tcp global 2.1.1.100 www inside 192.168.1.2 www

[RouterA-Serial2/2/0] quit

# 在接口Serial2/2/1上配置内部服务器功能,将HTTP Server的IP地址192.168.1.2/24映射为2.2.1.100/16(和Router A的接口Serial2/2/1的IP地址在同一网段)。

[RouterA] interface serial 2/2/1

[RouterA-Serial2/2/1] nat server protocol tcp global 2.2.1.100 www inside 192.168.1.2 www

[RouterA-Serial2/2/1] quit

# 定义10号节点,使匹配反向入接口Serial2/2/0的报文的下一跳地址为2.1.1.2/16。

system-view

[RouterA] policy-based-route test permit node 10

[RouterA-pbr-test-10] if-match reverse-input-interface serial 2/2/0

[RouterA-pbr-test-10] apply ip-address next-hop 2.1.1.2

[RouterA-pbr-test-10] quit

# 在以太网接口GigabitEthernet2/1/1上应用策略test。

[RouterA] interface GigabitEthernet 2/1/1

[RouterA-GigabitEthernet2/1/1] ip policy-based-route test

山石防火墙工作原理

防火墙作为一种网络安全产品,通过控制进出网络的流量,保护网络的安全。防火墙的基本原理是通过分析数据包,根据已有的策略规则,允许或阻断数据流量。除此之外,防火墙也具有连通网络的功能,实现安全可信区域(内部网络)和不信任区域(外部网络)之间的桥接。

应用负载网关是山石网科面向电信运营商、广电市场、院校和大中型企业开发的负载均衡产品,能够使负载分担、安全与网络深度融合。用户可以将其部署在多ISP链路的出口,通过对链路状态的检测,采用对应的调度算法将数据合理、动态的分发到不同链路上,以提高链路利用率。

StoneOS 应用负载网关系统架构

组成StoneOS应用负载网关系统架构的基本元素包括:

  • 安全域:域是一个逻辑实体,将网络划分为不同部分,应用了安全策略的域称为“安全域”。例如,trust安全域通常为内网等可信任网络,untrust安全域通常为互联网等存在安全威胁的不可信任网络。
  • 接口:接口是流量进出安全域的通道,接口必须绑定到某个安全域才能工作。默认情况下,接口都不能互相访问,只有通过策略规则,才能允许流量在接口之间传输。
  • 虚拟交换机(VSwitch):具有交换机功能。VSwitch工作在二层,将二层安全域绑定到VSwitch上后,绑定到安全域的接口也被绑定到该VSwitch上。一个VSwitch就是一个二层转发域,每个VSwitch都有自己独立的MAC地址表,因此设备的二层转发在VSwitch中实现。并且,流量可以通过VSwitch接口,实现二层与三层之间的转发。
  • 虚拟路由器(VRouter):简称为VR。VRouter具有路由器功能,不同VR拥有各自独立的路由表。系统中有一个默认VR,名为trust-vr,默认情况下,所有三层安全域都将会自动绑定到trust-vr上。系统支持多VR功能且不同硬件平台支持的最大VR数不同。多VR将设备划分成多个虚拟路由器,每个虚拟路由器使用和维护各自完全独立的路由表,此时一台设备可以充当多台路由器使用。多VR使设备能够实现不同路由域的地址隔离与不同VR间的地址重叠,同时能够在一定程度上避免路由泄露,增加网络的路由安全。
  • 策略:策略是设备的基本功能,控制安全域间/不同地址段间的流量转发。默认情况下,设备会拒绝设备上所有安全域/接口/地址段之间的信息传输。策略规则(Policy Rule)决定从安全域到另一个安全域,或从一个地址段到另一个地址段的哪些流量该被允许,哪些流量该被拒绝。

StoneOS系统的架构中,安全域、接口、虚拟路由器和虚拟交换机之间具有从属关系,也称为“绑定关系”。

null

各个元素之间的关系为:接口绑定到安全域,安全域绑定到VSwitch或VRouter,进而,接口也就绑定到了某个VSwitch或VRouter。一个接口只能绑定到一个安全域上,一个安全域可以绑定多个接口。二层安全域只能绑定到VSwitch上,三层安全域只能绑定到VRouter上。

安全策略规则

默认情况下,所有的接口之间的流量都是拒绝的。不同的安全域之间、相同的安全域之内的接口流量均不能互访。要实现接口的互访,只有通过创建策略规则,才能将流量放行。 如果既有从源到目的的访问,又有反方向的主动访问,那么就要创建两条策略规则,允许双方向的流量通过;如果只有单方向的主动访问,而反方向只回包即可,那么只需要创建源到目的的一条单方向的策略。

根据接口所属的安全域、VSwtich或VRouter的不同,要创建不同的策略才能允许接口互访,具体的规则如下:

  • 属于同一个安全域的两个接口实现互访:
    需要创建一条源和目的均为该安全域的策略。
    例如,要实现上图中的eth0/0与eth0/1的互访,需要创建从L3-zone1到L3-zone1的允许流量通过的策略;或者,要实现eth0/3与eth0/4的互访,要创建源和目的均为L2-zone2的策略。
  • 两个二层接口所在的安全域属于同一VSwitch,实现接口互访:
    需要创建两条策略,第一条策略允许从一个安全域到另一个安全域流量放行,第二条策略允许反方向的流量通过。
    例如,要实现上图中的eth0/2与eth0/3的互访,需要创建从L2-zone1到L2-zone2的策略和L2-zone2到L2-zone1这两条策略。
  • 两个二层接口所在的安全域属于不同的VSwtich的,实现接口互访:
    每个VSwtich都具有唯一的一个VSwtich接口(VSwitchIF),该VSwtichIF与某个三层安全域绑定。要实现互访,需要创建放行策略,源是一个VswichIF所属的三层安全域,目的是另一个VSwtichIF所属的三层安全域。同时,还需要创建反方向的策略。
  • 两个三层接口所在的安全域属于同一VRouter,实现接口互访:
    需要创建策略允许从一个安全域到另一个安全域的流量放行。例如,要实现eth0/0和eth0/5的互访,要创建从L3-zone1到L3-zone2的允许流量通过的策略,然后再创建反方向的策略。
  • 两个三层接口所在的安全域从属于不同的VRouter的,实现接口互访:
    若要实现接口互访,需要创建策略规则,允许从一个VRouter到另一个VRouter之间的流量放行。
  • 同一VRouter下的二层接口和三层接口,实现互访:
    创建允许流量通过的策略,策略的源是二层接口的VSwtichIF所绑定的三层安全域,策略的目的是三层接口所属的三层安全域。然后,再创建反向策略。
    例如,要实现eth0/0与eth0/2的互访,需要创建从L3-zone1到L2-zone1的策略,以及反向策略。

数据包处理流程

二层转发域中的转发规则

在一个VSwitch,即一个二层转发域中,应用负载网关StoneOS通过源地址学习建立MAC地址转发表。每个VSwitch都有自己的MAC地址转发表。StoneOS根据数据包的类型(IP数据包、ARP包和非IP且非ARP包),分别进行不同的处理。

对于IP数据包,StoneOS遵循以下转发规则:

  1. 收到数据包。
  2. 学习源地址,更新MAC地址转发表。
  3. 如果目的MAC地址是单播地址,则根据目的MAC地址查找出接口。这时又有以下两种情况:
    • 如果目的MAC地址为VSwitch接口的MAC地址,并且VSwitch接口有IP地址,则按照路由转发规则进行转发;若VSwitch接口没有IP地址,则丢弃。
    • 根据目的MAC地址找到出接口。如果找到的出接口是数据包的源接口,则丢弃该数据报,否则从出接口继续转发数据包。
    • 如果在MAC地址表中没有找到出接口(未知单播),直接跳到第6步。
  4. 根据入接口和出接口确定源域和目的安全域。
  5. 查找策略规则。如果策略规则允许则转发数据包;如果策略规则不允许,则丢弃数据包。
  6. 如果在MAC地址转发表中没有找到出接口(未知单播),StoneOS则尝试将数据包发给VSwitch中的所有其它二层接口,此时的操作流程为:把其它的每一个二层接口做为出接口,二层接口所在的二层安全域作为目的域,查询策略规则,如果策略允许,则在该二层接口转发数据包,如果策略不允许,则丢弃数据包。概括地说,对未知单播的转发即为策略限制下的广播。对于广播和多播IP包的处理类似于对未知单播的处理,不同的是广播和多播IP包会被同时拷贝一份进行三层处理。

对于ARP包,广播包和未知单播包转发到VSwitch中的其它所有接口,同时,复制一份由ARP模块进行处理。

三层转发域的转发规则

null
  1. 识别数据包的逻辑入接口,可能是一般无标签接口,也可能是子接口。从而确定数据包的源安全域。
  2. StoneOS对数据包进行合法性检查。如果源安全域配置了攻击防护功能,系统会在这一步同时进行攻击防护功能检查。
  3. 会话查询。如果该数据包属于某个已建立会话,则跳过4到10,直接进行第11步。
  4. 目的NAT(DNAT)操作。如果能够查找到相匹配的DNAT规则,则为包做DNAT标记。因为路由查询需要DNAT转换的IP地址,所以先进行DNAT操作。
    *说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。
  5. 路由查询。系统的路由查询顺序从前到后依次为:策略路由(PBR)> 源接口路由(SIBR)> 源路由(SBR)> 目的路由(DBR)> ISP路由。此时,系统得到了数据包的逻辑出接口和目的安全域。
  6. 源NAT(SNAT)操作。如果能够查找到相匹配的SNAT规则,则为包做SNAT标记。
    *说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。
  7. 下一跳VR查询。如果下一跳为VR,则继续查看指定的下一跳VR是否超出最大VR数限制(当前版本系统仅允许数据包最多通过3个VR),如果超过则丢弃数据包,如果未超过,返回4;如果下一跳不是VR,则继续进行下一步策略查询。
  8. 策略查询。系统根据数据包的源安全域、目的安全域、源IP地址和端口号、目的IP地址和端口号以及协议,查找策略规则。如果找不到匹配的策略规则,则丢弃数据包;如果找到匹配的策略规则,则根据规则指定的行为进行处理,分别是:
    • 允许(Permit):允许数据包通过。
    • 拒绝(Deny):拒绝数据包通过。
    • 隧道(Tunnel):将数据包转发到指定的隧道。
    • 是否来自隧道(Fromtunnel):检查数据包是否来自指定的隧道,如果是,则允许通过,如果不是,则丢弃。
    • Web认证(WebAuth):对符合条件的流量进行Web认证。
  1. 第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
  2. 会话建立。
  3. 如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
  4. 应用层行为(ALG)控制。为特定的复杂协议实施自适应处理。
  5. 根据会话中记录的信息,例如NAT标记等,执行相应的处理操作。
  6. 将数据包转发到出接口。

山石网科创新产品入选 2019 Gartner NTA 指南

山石网科携山石智·感——智能内网威胁感知系统,成为《指南》中唯一中国网络安全厂商,被Gartner认可为全球范围内具有代表性的NTA产品提供商。山石网科获中国厂商唯一殊荣 2月28日,Gartner发布了《网络流量分析(NTA)市场指南》,山石网科携山石智·感——智能内网威胁感知系统,成为《指南》中唯一的中国网络安全厂商,被Gartner认可为全球范围内具有代表性的NTA产品提供商。 

《指南》中收录的大多是专注在NTA领域的创新型厂商,山石网科和思科是为数不多的综合型网络安全厂商。

能够入选这一新兴技术品类指南,再次证明了山石网科在基于人工智能的网络安全威胁检测领域前瞻创新能力,以及全球市场的突出表现,得到了业界认可。什么是NTA

“NTA是一种功能和能力,而非纯粹的一个产品。”——Gartner

NTA (Network Traffic Analysis) 网络流量分析,最早在2013年被提出,是一种威胁检测的新兴技术,2016年逐渐在市场上兴起。

根据Gartner的定义,NTA——融合了传统的基于规则的检测技术,以及机器学习和其他高级分析技术,用以检测企业网络中的可疑行为,尤其是失陷后的痕迹。NTA通过DFI和DPI技术来分析网络流量,通常部署在关键的网络区域对东西向和南北向的流量进行分析,而不会试图对全网进行监测。

NTA做为五种检测高级威胁的手段之一,连续两年被Gartner选为十一大信息安全技术之一。在NTA入选11大技术的解说词中,Gartner说到——“NTA解决方案通过监测网络的流量、连接和对象来识别恶意的行为迹象。对于那些试图通过基于网络的方式去识别绕过边界安全的高级攻击的企业而言,可以考虑将NTA作为一种备选方案。”

随着人们越来越关注威胁检测与响应,出现了很多新兴的威胁检测技术,包括欺骗技术,以及同在11大技术之列的NTA、EDR,还有UEBA,等等。山石智·感 :国内首款获奖NTA网络安全产品 2017年,山石网科发布山石智·感,是国内首个引入NTA技术理念的网络安全产品,产品同时也融入了山石网科在利用人工智能领域,发现高级威胁上积累多年的工程技术。 

山石智·感自2017年发布之后,在多次勒索病毒爆发初期,业界尚未明确病毒特征时,利用山石网科的人工智能技术,通过分析内网通信流量和主机访问行为,发现异常高危网络行为、刻画异常互访链条、定位高危主机。

“当下,在不可预测的网络安全领域,保护核心信息,对所有企业来说都是一项重大挑战,”山石网科首席技术官兼联合创始人刘向明表示,“借助山石网科基于人工智能的NTA解决方案,山石网科可为企业的核心资产和信息提供全面、有效的安全防护。”

山石智·感:智能内网威胁感知系统 山石智·感是智能的内网威胁感知系统,设计目标是发现和定位精心伪装或绕过网络边界防护,进入用户内部网络的高级威胁。 

山石智·感通过旁路部署监听服务器区的核心交换机流量,利用人工智能、行为分析、蜜罐等多种技术手段,检测内网中的网络威胁,定位风险服务器,最终完成内网风险的评估。

山石智·感发布以来,得到了国内外金融、大企业、教育、政府等客户的广泛认可。山石网科AI基因 山石智·感产品继承了山石网科多年来在利用人工智能领域,积累的高级网络威胁的工程技术经验。早在2013年,山石网科发布智能下一代防火墙时(产品型号:iNGFW),就引入了利用机器智能学习技术,建立了网络通信基线。通过多维度分析发现异常访问,定位高级威胁。 

基于iNGFW的技术创新,山石网科在2014年入选Gartner魔力象限时,就位列前瞻性维度全球第三

H3C无线网络终端MAC白名单问题处理方法

现有一个H3C无线网络,发射无线信号LD,现有一新终端连接LD信号,DHCP获取到IP,但是不能上网,打开任何网页都提示该页无法显示,网关也ping不通。

通过dis cu查看配置,发现该LD信号属于服务模板23,查看服务模板23下面连接的终端,dis wlan client service-template 23,查看到该终端的MAC,但是对应的IP地址显示0.0.0.0,即没有IP地址,继续查看配置dis wlan service-template 23,该服务模板绑定的接口是wlan-ess10口,然后进入interface wlan-ess10下,dis this看下配置,发现该接口下有policy 11,或者通过dis qos policy interface wlan-ess10,可以看到该接口下的policy 11下有一条acl 4020,通过dis acl 4020可以看到设置了MAC白名单,仅放通了相关MAC地址,通过以下配置将新终端的MAC加入后,该新终端即可正常获取到IP地址并且上网。

[H3C-wx]acl number 4020
[H3C-wx]rule x permit source-mac 终端的MAC ffff-ffff-ffff

做好相关配置后做好保存配置操作。