NSE Week5: Firwalls
How to protect edges of the Internet or Internal network?
Local area networks (LANs)
, personal area networks (PANs)
, wireless local area networks (WLANs)
, 以及 wireless sensor networks (WSNs)
都属于Internet的最边缘,大多都是个人组织或者家庭所拥有的内部网络,我们可以把保护这样的互联网边缘网络或者内部网络比喻成保卫一座城市,通过三层的保护措施来防止入侵:
- Perimeter Security (边界安全): 通过减少入口来控制进出,派遣武装守卫把守,同时要求进出的人员拥有预先设定的证明
- Street patrolling (街道巡逻): 派遣武装守卫定期上街巡逻,来识别入侵者
- House cleaning (入室排查): 派遣专业的安全专家挨家挨户的排查外来危险品以及安全漏洞
这三道对于城邦的包围也就可以对应网络安全中的三项技术:
- Perimeter Security <-> Firewall: 防火墙
- Street patrolling <-> Intrusion detection systems: 入侵检测
- House cleaning <-> Anti-malicious-software: 杀毒软件
而我们今天要讲的,就是内网的第一道防线,防火墙。
在正式介绍防火墙之前,我们最后再介绍一下针对边界攻击的防御理念:5Ds of Perimeter Security:
Deter -> Detect -> Deny -> Delay -> Defend
-
Deter : - 组织入侵的发生(在其发生之前进行组织),即使用
fencing 围栏
,lighting 完全照明
,signs 出入签名
等方式对犯罪者进行被动威慑,从最开始就扼杀入侵的念头- 使攻击变得困难,让attacker主动放弃
-
Detect : - 检测入侵的行为,例如
CCTV 监控
, 用来监控和记录所有的入侵行为- Intrusion detection software
- Traffic analysis and machine learning to detect abnormities
-
Deny : - 拒绝未经授权的访问,通过一些认证系统来主动拒绝入侵的行为,其中防火墙就属于
Deny
- Authentication, authorisation, freshness
-
Delay : - 延缓入侵的速度,通过设置障碍来延长入侵的时间,迫使入侵者放弃或者给予安全团队更多的时间
- 增加密钥的长度
-
Defend : - 主动地对入侵者进行打击,通过安全团队或者警方的行动来组织入侵
What is a firewall?
什么是防火墙,它有什么作用呢?
防火墙是一台主机或者一个网络服务,架设于 内网
和 外部网络
之间,用来:
- 防止坏事发生 (内部泄露机密到外部,外部攻击内部系统)
- 同时使正常的行为不收到影响(员工正常访问外网交互)
防火墙的主要功能
主要工作:Access control 访问控制
- 建立一道屏障,所有方向上的网络流量都需要经过防火墙
- 防火墙会预设一系列安全协议来对所有这些经过的流量进行审计和控制(可以对异常的行为设置警报)
- 可以对IP packet或者更早层的数据进行过滤
- 同时也可以部署NAT(network Address Translation)服务以及使用监控等服务
- 也可以通过IPSec来实现VPNs
防火墙的技术
- What? -> Service Control
- 通过
transport layer ports
决定决定 What types of Internet services 可以通过
- Where? -> Direction control
- 通过
{Source adddress -> Destination address}
决定决定特定方向的流量是否可以通过
- Who? -> User control
- 通过
{IP address -> Transport layer port}
决定决定什么服务可以被什么用户所访问
- How? -> Behaviour control
- 控制服务应该被如何使用,比如一些核心的服务只能在特定的时间被使用
防火墙的类型
- Positive filter
- 主动过滤,白名单过滤,只允许符合规则的数据通过,其他都不可以通过
假设所有人都是坏人
主动地选定谁是好人,允许其通过
- Negative filter
- 被动过滤,黑名单过滤,不允许不符合规则的数据通过,其他都可以通过
假设所有人都是好人
被动地,在发现了坏人之后,将其过滤
根据防火墙的类型,过滤的策略也会不一样:
- 一个或多个协议头
- Payload的内容
- 一串数据包的pattern
防火墙的限制
防火墙也存在很多的限制,要不怎么需要多道的保护呢 其无法保护:
- 绕过过滤规则的进攻
- 在外部被感染的设备
- 通过外部的WiFi网络进行的攻击
- 来自内部的威胁
-
sneakernet
球鞋网络,顾名思义就是使用物理媒介运输数据,而非通过网络,记得以前上计算机网络的时候,老师就提到过,在网络不稳定或者质量较差的时候,往往还是使用物理传输更为高效
那么这种时候
Firewall
就完全失效了,因为其所针对的都是网络数据包,物理传输完全不在范畴之内
-
WiFi
WiFi之前的数据共享没办法集中到Firewall进行管理
Packet filtering firewall
What is a packet filtering firewall?
基于数据包过滤的防火墙
是最基础也是最普遍使用的防火墙,其作用在两种数据包上:
- Ingress packets: 从外网到内网的数据包
- Egress packets: 从内网到外网的数据包
同时也对应 ingress filtering
, egress filtering
两种过滤手段:
Packet filtering firewall
通过预设一系列的规则来决定是否让某一种数据包通过,而这些规则都是用来检测 IP headers
以及 TCP headers
, 对于应用层所放入的payload一点都不感兴趣
Packet filtering firewall
也分成 stateless filtering
以及 stateful filter
,主要的区别就在于应用的规则是否会审计网络连接的状态,即判断一个数据包的去留是否会参考之前的记录,也可以说是考虑了上下文
Stateless filtering 无状态过滤
其无状态的过滤主要体现在:
- 对所有收到的包都一视同仁,单独决断是否放过
- 以前的记录不会影响对改数据包的判断
我们之前提到过 Packet filtering firewall
主要是通过审查 IP headers
以及 TCP headers
, 那么细化来说
是IP header中的:
- Source IP address
- Destination IP address
- other fields: defines the transport protocol
以及 TCP/UDP header 中的:
- Source port
- Destination port
通过设定对以上信息的规则来实现过滤审查,那么所有的这些规则都会被记录到 ACL (access control list)
访问控制列表上.
-
过滤规则
通常来说,ACL上定义的规则会被
从上至下
依次与审查的数据包进行匹配,然后执行对应的动作。-
默认规则
之前我们提到过主动过滤和被动过滤,在这里我们展开讲讲
Default = discard 默认丢包 : - 主动过滤(主动的选择可以通过的名单) - 白名单过滤 - 禁止未经明确许可的行为 (That which is not expressively permitted is prohibited) - 更为稳健和保守的政策 - 所有被允许的服务都需要一个个添加 - 对用户不太友好(就像我们之前所提到的,用户的端口更为灵活,利用白名单一个个加很不明显) - 用户的可见性随着规则的增加而降低 - 相对的,对企业和政府来说更加友好
Default = forward 默认放行 : - 被动过滤(默认不用过滤,直到被动的知道了有威胁才过滤) - 黑名单过滤 - 没有明确禁止的就是允许的(That which is not expressively prohibited is permitted) - 较于白名单更不安全 - 每当出现新的威胁需要更新记录到黑名单上 - 通常被开发的组织采纳,比如大学
Granularity of filtering 过滤的颗粒度 : 除了前面提到那几个常见的匹配规则,还有一些内容可以实现更精确的过滤,根据firewall使用的不同的routers来决定 - 在入站时进行过滤 - 在出站时进行过滤 - 在入站和出站同时进行过滤 - 检查数据包的其他控制区域
-
ACL实例
-
Rule set A
我们先来看这第一组规则 ’ * ’ = ANY
第一条 : 所有与
SPIGOT
的通信都被禁止了 1. 两个端口号都没有指定,说明这条规则没有方向(端口号的大小指示了客户端和服务端) 2. 只指定了SPIGOT
的IP地址,说明到SPIGOT的数据包和从SPIGOT来的数据包都会被禁止,也许是以前有过恶意行为,所以被整一个禁止了第二条 : 所有内网开启的SMTP服务都允许被外网所连接 1. 指定了IP地址以及对应的端口号25, 是SMTP服务所对应的端口 2. 这里是允许内网的邮件系统收取邮件
-
Rule set B
默认丢弃所有的数据包
- 这是一条默认丢弃规则,一般来说是放在最下面
- 默认丢弃就是我们之前说的主动过滤,白名单过滤
- 在此之上就是定义的可以通过的规则
-
Rule set C
- 与rule set A类似,这次是允许内网所有的主机向外发邮件
- 但是存在两个漏洞
- 攻击者也可以修改他们服务端口号到25,这样就可以使泄密的数据绕过防火墙策略
- attacker也可以修改他们的客户端端口号到25,从而绕过防火墙策略实现入侵,连接内网的服务
-
Rule set D
与之前三条不同的是,Rule set D多了flags的信息,主要运用于TCP的连接的判断
- 第一条和之前Rule set C一样,是允许内网的主机发送邮件到外网
- 第二条则做了更多的限制,要求进入内网的邮件需要是TCP ACK数据包
-
Rule set E
- 第一条,允许内网的主机向外发送数据
- 第二条,允许回复的ACK包
- 第三条,允许内网的服务对外网的客户端进行回复 (port > 1024)
-
-
其他常见过滤规则
-
Ingress packet 的source IP address 是内网的地址 : 我们知道防火墙是建立在内网和外网之前的,因此
Ingress packet
只有可能是从外网的地址到内网的地址,这类不寻常的数据包通常都是被恶意修改的数据包 -
指定了路由器的数据包 : 这类数据包通常也是被恶意修改的来绕过防火墙规则的
-
Payload特别小的数据包 : 这类特别小的数据包,很有可能是用来分离会被审查的信息,以此来绕过防火墙规则
-
来自外网地址的用于控制的数据包 : 有一些数据包是专门用来进行内网设备管理和控制的,比如DHCP, Bootp, TFTP, NFS, 都是来给内网下发指令或者发送配置的,这些数据包如果来自外网很有可能就是恶意的,应该丢弃
-
-
Stateless filtering的优劣势以及漏洞
-
Advantages
- 实现
stateless filtering
比较方便 - 规则对用户比较透明,速度也很快
- 实现
-
Disadvantages
- 没办法对更高层的数据进行过滤,因此没办法部署对于应用层的漏洞的过滤
- 一些恶意的指令(存在于payload中)无法被过滤
- 如果一个客户端端口号被允许通过(>1024),那么其所有的数据包都会被放行
- 日志记录的信息较少(因为本来指定规则以及审核数据包所需要用到的数据就很少)
- 无法部署高级的认证系统
- 同样因为缺乏高层的审核功能
- 没办法对更高层的数据进行过滤,因此没办法部署对于应用层的漏洞的过滤
-
Vulnerabilities
- 无法检测出TCP/IP被修改过的数据,spoofing attack
- 无法应用更高层的审核机制,导致数据内容被修改后即可绕过规则
- 由于用于过滤规则制定的变量较少,因此错误的配置很容易就发生了,从而招致入侵
- 无法检测出TCP/IP被修改过的数据,spoofing attack
-
-
-
攻防实例
接下来我们来看一些攻防的实例,来看看stateless filtering能抵御哪些攻击
-
IP address spoofing
IP address spoofing
通常都是通过修改IP地址来欺骗服务器其真正的主机地址Countermeasure : - 我们可以制定一些规则来避免一些不合理的数据包,例如 - Ingress(从连接外网的interface传向连接内网的interface)的数据包本来应该是外网到内网的地址,可如果source IP address变成了外网的地址,那就有问题了
-
Source routing attack
Source routing是一种特殊的路由机制,即发送方可以指定到达接收方的路由(通常来说,我们只是指定gateway,然后让路由器去寻找路由)
那么Attacker可以利用这个机制来伪造数据包的IP address绕过过滤规则,同时使用source routing指示数据包真正的路径和方向
Countermeasure : - 丢弃所有使用source routing的数据包 - 禁止这些指定了路由的数据包
-
Tiny fragment attacks
就像我们之前提到过的,攻击者可以将数据包分离成多个小的数据包,将所需要的信息分散到小的数据包当中,而防火墙往往只会检查最开始的数据包片段,由此可以绕过检测规则
Countermeasure : - 防火墙可以设定一些规则比如,丢弃所有分散化的TCP数据包,或者在进行审核之前先重组这些数据包片段 - 规定第一个数据包片段必须含有足够多的数据便于防火墙审核
-
-
补充知识
-
TCP port numbers
我们再来复习一下
TCP port numbers
TCP port number 一般用来指示运行的应用或者服务:
- 服务器端(本地的)应用的端口号一般小于1024,这些端口号一般都已经被占用了,我们自己在写程序的时候应该避免使用
- 而其他1024~66535的端口号一般被用于客户端(外部的)程序 (16 bits端口号)
还记得我们之前的送快递的例子吗,我们说传输层是上保险,IP地址是送货地址,网络层是找送货的地图,MAC地址是邮编,物理层是送货,那么这个端口号就是写的名字,表明是什么服务传输数据给什么服务
从中,我们又看出了一些
stateless filtering
的局限,用户的端口号千变万化,那么就会设置一下较为宽松的规则,从而引发漏洞
-
How to block an entire subnet?
Use subnet address with CIDR prefix or subnet masks,使用子网划分的后缀
-
Stateful firewall
Stateful filtering
, 也叫做 connection-state filtering
,通过追踪外部和内部的主机的连接来决定出入规则
- Connection state
- 当我们说连接的是,指的就是一个TCP连接的状态,是否已经建立(UDP不建立连接)
所有这些建立的TCP连接都会存入 state table
(但如果保存了大量的连接,就会出现TCP SYN Flooding 这样的攻击)
-
How stateful firewall works?
当有ingress或者egress的数据包通过的时候,firwall会查找
state table
来判断他们是否属于被记录的connection如果属于一个连接,发行,并记录信息(比如TCP sequence number,可以用来防御
TCP session hijacking
)如果不属于,再判断这是否是一个
TCP SYN packet
用来建立一个连接:- 如果是的话就新开一条记录用来记录这个新的连接
- 如果不是的话,那就丢弃
-
Drawbacks of stateful firewall?
我们可以同时使用
stateful filtering
以及stateless filtering
,因为从上面的描述中,也许有一些朋友已经嗅到了一丝漏洞的味道,存储 -> Emm ->flooding lol.查询连接,判断从属,记录信息等等这些动作都需要消耗大量的存储空间和CPU资源,因此很容易遭受攻击,因此可以选择只保存有限的信息,以及一段时间内的连接来减少消耗
-
IPTables
IPtables是Linux的 stateful packet filtering工具,其主要的功能有两个:
Tables :
Chains : 定义了一系列的过滤规则用来处理经过的数据包,然后做出响应的决定(accept or drop)
Stateful firwall and proxy firewall
Circuit-level gateway/proxy firewall
Circuit-level gateway/proxy firewall 位于 session layer
会话层,根据网络模型的不同,有一些教材也有说是跑在 Transport layer
传输层的。
也被称为 circuit gateways
, transparent proxy firewall
其主要的目标是对内外网想要建立的连接进行审核,通过 packet filters
与 circuit gateways
的结合可以构造起一个 dynamic packet filter
-
如何实现连接的过滤呢?
主要是通过
relay/proxy
连接,gateway会分别与server side
以及client-side
建立独立的连接在packet filter,无论是
stateful
或者是stateless
中,服务端和客户端的连接都是直连的,而在 circuit-level gateway中实现的relay可以很好的隐藏server和client的信息,外网只能观察到gateway的IP地址,而不知道具体连接的内网设备的信息上图就是当外网的client想要连接内网的服务,就会先与gateway建立连接,gateway会维护一个有效连接的表,如果连接是被允许的,那么就会继续建立连接,gateway会用公网IP地址与外网的client建立一个TCP连接,再与内网的设备用内网IP建立TCP连接,之后就不再过滤数据,只是做煎蛋的转发。
Application-level proxy firewall
Application gateways
, also referred to as application-level gateways (ALG)
or proxy servers
, 是安装在指定设备上的软件包,像proxy一样,用来为内网用户处理来自外网的服务请求。
ALG可以被配置为应用的特定特征进行过滤,例如MIME,或者SQL格式来决定数据包的payload是否合法。
通过监测分析这些payload,ALG可以检测出恶意代码还有可疑的数据包,进而屏蔽可以的IP地址以及端口号,这些处理将会要求ALG服务器有大量的运算处理和存储的需求。
ALG采用白名单的形式,需要为不同的applications配置不同的审核机制,否则就不能进行传输 If gateway does not implement the proxy code for a specific application, then the service is not supported and cannot be forwarded across the firewall
-
如何连接到ALG服务?
- 用户使用TCP/IP应用来进行连接,例如Telnet/FTP
- ALG会要求用户提供想要连接远程用户的名字
- 用户提供有效的user ID以及相关的认证信息
- ALG会relay TCP segment来进行监测并转发
-
ALG的优点
- 相较于
packet filtering firewalls
更为安全 - 只需要监测一小部分特定的应用即可
- 更方便的记录日志以及监测应用层的payload
- 相较于
-
ALG的缺点
- 每一个服务都需要进行proxy
- 需要大量的计算处理以及消耗大量的存储空间
Bastion hosts and Gateways
我们之前提到的 Application gateway
出于内外网之前充当转发的作用,但是相对的,ALG暴露在外网这种,因此我们需要对其提供更多的保护,一种就是 Tursted Operating Systems (TOS)
, 还有一种就是我们本章将要提到的 Bastion hosts
堡垒机。
Bastion hosts堡垒机将提供强大的防御措施,包括联合使用我们之前所提到过的 application gateways
, circuit gatways
以及各种类型的firewalls,同时堡垒机安装了可以信任的操作系统TOS,只提供必要的程序功能,例如SSH, DNS, SMTP, authentication programs。
Bastion上的Proxy必须满足以下条件
- Gateway software的开发必须使用小型的module,因为小型的module更加容易检查漏洞,并方便重复使用
- 堡垒机必须对网络层的用户进行单独的身份认证,例如通过IP packet 中的 source IP address以及destination IP address,这将与更高层的验证分离开来进行身份认证
- 堡垒机需要尽可能少得去连接内网的主机,这样一旦堡垒机出现问题,波及到的主机也会减少
- 堡垒机需要记录所有的系统日志,包括TCP会话连接状态,这将帮助管理员发现问题
- 所有跑在堡垒机上的代理服务都需要独立运行,一旦一个gateway发生问题,只需要单独关闭即可
- 堡垒机应该避免将数据写入硬盘保存(只写入内存中?),避免恶意软件的写入
- 堡垒机上运行的gateway软件不需要给予管理员权限
Bastion host case study
AWS就是通过设置堡垒机以及其中的Gateway来对危险的SSH进行relay,避免暴露真正的Linux instance
Firewall location and configuration
Personal firewall
个人防火墙的主要目的是控制用户电脑与外网的网络流量
位置:通常是安装在个人电脑或者路由器上的软件包
主要作用:
- 拒绝未经许可的外部访问
- 监控出站流量来分析恶意软件的活动
Host-based firewall
Host-based firewall其实与personal firewall十分相似,区别我觉得就是personal firewall一般是用在普通用户所使用的操作系统上的,而Host-based firewall则更多的是服务器上的使用,但特点都是一机一wall
而我们之前提到的用来分割内外网的firewall我们称为network-based firewall,区别就在于起作用域不一样
位置:通常被安装在一个web服务器上
-
Advantages
- 可以根据主机的情况进行过滤规则的定制
- 可以根据企业不同的安全政策进行定制
- 可以防御内部以及外部的网络
DMZ networks
-
DMZ
位于两个防火墙中间的子网我们称为Demilitarised Zones (DMZ 非军事化区域?), 其可以是物理的也可以是逻辑子王
- 外部的firewall保护DMZ网络来自外网的威胁
- 针对外网的连接
- 内部的firewall保护DMZ网络来自内部的威胁
- 保护那些直接从DMZ网络中发出的攻击,例如worms, rootkit, bots
DMZ中还可以嵌套DMZ形成多层的DMZ,那么连接在最末端firewall的子网就是最安全的,相反,连接在最外侧的firewall就是最不安全的,因为他们只有一个firewall的保护,随着结构的增加和复杂化,安全系数也在提高,攻击者需要绕过一层层的过滤规则才能到达最末端的设备。
通常来说,一些不需要特别强的保护的服务器电脑和其他设备会被放到DMZ网络中,他们起码可以避免暴露在外网当中。
例如我们可以把WAF和负载均衡这些功能性的服务器给放置在DMZ网络中
还有一些用于促进内外连接的服务器也会防止在DMZ中,例如企业网站,邮件以及DNS服务器
- 外部的firewall保护DMZ网络来自外网的威胁
Distributed firewalls
分布式的防火墙框架,将综合使用多种防火墙,比如单独的防火墙设备以及安装在各个server上的host-based firewall 以及 安装在各个用户系统上的 personal firewall
- Security monitoring
- 日志记录
- 防火墙统计数据
- 对于单独的用户的监控
Cloud firwalls
Virtual private cloud (VPC)
Firewall summary