20199315 2019-2020-2 《网络攻防实践》第6周作业
20199315 2019-2020-2 《网络攻防实践》第6周作业
前言
这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10589
我在这个课程的目标是:学习网络攻防相关知识,提升专业技能
这个作业在哪个具体方面帮助我实现目标:学习了解网络安全防范技术
知识点梳理与总结————《网络攻防技术与实践》教材第六章
安全模型
传统的安全评估和防范方法是通过对网络进行风险分析,制定相应的安全策略,然后采取一种或多种安全技术作为防护措施的。主要针对固定、静态的威胁和环境弱点,但对网络安全所面临的威胁和系统脆弱性没有做充分的估计。
动态可适应网络安全模型基于闭环控制理论,典型模型是PDR(Protection、Detection、Response)模型以及在其基础上提出的P^2DR模型等。
PDR安全模型是一个基于时间的动态安全模型,以经典的网络安全不等式P>D+R为本质基础,并提出安全性可量化和可计算的观点。如果信息系统的防御机制能够抵御入侵的时间P,能够超过检测机制发现入侵的时间D.和响应机制有效应对入侵的时间R,之和,那么这个信息系统就是安全的。
P^2DR安全模型基本描述为:网络安全=根据风险分析制定安全策略(Policy)+执行安全防护策略(Protection)+实时检测(Detection)+实时相应(Response)。
网络安全防范与系统
防火墙技术概述
防火墙指的是置于不同的网络安全域之间,对网络流量或访问行为实施访问控制的安全组件或设备。防火墙属于一种网络上的访问控制机制,通过在不同的网络安全域之间建立起安全控制点,对通过的网络传输数据进行检查,根据具体的安全需求和策略设置决定是否允许网络访问通过防火墙,达到保护特定网络安全域免受非法访问和破坏的安全目标。
防火墙的技术关键特性:
由于防火墙只能对流经它的网络数据进行检查和控制,因此必须将防火墙部署在不同网络安全域之间(比如外部公共互联网和企业内部网络)的唯一通道上
防火墙并不具备主动检测区分网络攻击数据与合法数据的能力,只是实施预先定义的网络安全访问策略的一种技术,因此只有网络安全管理员根据安全需求合理地设计安全策略规则,才能充分发挥防火墙的功能,保护网络安全
防火墙也存在一些缺陷和弱点,如无法防护来自网络内部的攻击等等,因此防火墙并非是“一劳永逸”的“安全最终解决方案”。
防火墙最基本的功能就是控制在计算机网络中不同信任程度网络域之间传送的数据流。具体的安全功能:
检查控制进出网络的网络流量
防止脆弱或不安全的协议和服务
防止内部网络信息的外泄
对网络存取和访问进行监控审计
防火墙可以强化网络安全策略并集成其他安全防御机制
防火墙的不足:
作为网络边界防护机制而先天无法防范的安全威胁包括如下。
来自网络内部的安全威胁
通过非法外联的网络攻击
计算机病毒传播
由于技术瓶颈问题目前还无法有效防范的安全威胁包括如下。
针对开放服务安全漏洞的渗透攻击
针对网络客户端程序的渗透攻击
基于隐蔽通道进行通信的特洛伊木马或僵尸网络
防火墙部署方法:包过滤路由器、双宿主堡垒主机、屏蔽主机、屏蔽子网
防火墙技术与产品
包过滤技术
包过滤技术在路由功能基础上进行扩展,通过对网络层和传输层包头信息的检查,根据用户定义的安全策略规则集,确定是否应该转发该数据包,将一些不符合安全策略的数据包阻挡在网络的边界处。
这种技术并不关注数据包是否是网络流的一部分,也就是说并不存储关于网络连接状态的任何信息,而仅仅根据数据包自身包含的信息进行检查和过滤。通常检查的信息包括数据包的源地址和目的地址、网络协议号、网络端口号、ICMP报文类型和号码等。
包过滤技术实现简单,但检查内容较少,安全功能较为有限。
基于检测状态的包过滤技术
也称为动态包过滤。维护所有通过防火墙的网络连接记录,并依此确定数据包是否属于一个新建的连接,或是已建连接的一部分,或是一个非法数据包。会试图跟踪数据包在网络连接上的上下文关系,并以网络连接状态作为一个附加的匹配标准,以确定是否允许和拒绝通信,即在网络连接层次上匹配和实施防火墙规则。
基于状态检测的包过滤技术具有更强大的安全功能,而且规则的设置也更为简单,同时也保留了包过滤对用户透明的特性。与此同时,由于根据数据包的上下文进行相关的检查和过滤,数据的合法性得到了更有效的保障。但是状态检测包过滤需要跟踪和维护所有网络连接的状态,因此其实现复杂度较高、对网络传输性能影响较大,并可能受到拒绝服务攻击的影响。是目前应用最为广泛的防火墙技术。
代理技术
代理(Proxy)技术是一种重要的计算机安全防护功能,允许客户端通过它与另一一个网络服务进行非直接的连接,也称“网络代理”。代理技术具体过程为:客户端首先与代理服务器创建连接,接着发出一个对另外的目标服务器的文件或其他资源的连接请求,代理服务器通过与目标服务器连接或从缓存中取得请求的资源,并返回给客户端。根据工作的网络协议栈层次的不同,代理技术包括应用层代理、电路级代理和NAT代理等。
Linux开源防火墙netfilter/iptables
netfilter/iptables组合是目前Linux开源操作系统中普遍使用的防火墙技术解决方案。netfilter是Linux内核中实现的防火墙功能模块,iptables是应用态的防火墙管理工具。
netfilter/iptables工作原理:
在nefilter/iptables防火墙系统中,netfilter组件位于Linux的内核空间中,实现了静态包过滤和状态报文检查(即动态包过滤)基本防火墙功能,此外也支持NAT网络地址转换等其他额外功能,并提供了多层API接口以支持第三方扩展,netfilter具备构建防火墙、NAT共享上网、利用NAT构建透明代理,以及构建QoS或策略路由器等安全功能。Iptables则是工作在Linux用户空间中的防火墙配置工具,通过命令行方式允许用户为nefilter配置各种防火墙过滤和管理规则。
netfilter/iptables中包含三个最基本的规则表,分别为用于包过滤处理的filter表、用于网络地址转换处理的nat表,以及用于特殊目的数据包修改的mangle表。在每张规则表中包含一些已缺省定义的规则链,以及可由用户自定义的规则链。
iptables为用户提供了配置netfilter规则的命令行接口,其命令语法为:
iptables [-t table] command [match] [target]
其中
-t
指定配置规则所在的表,缺省表包括filter、nat、mangle、raw 等。
command部分是iptables命令的最重要部分,它告诉iptables命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。以下是最常用的一些命令。
命令 | 含义 | 示例 | 示例含义 |
---|---|---|---|
-A或--append | 将一条规则附加到链的末尾 | iptables -A INPUT -s 205.168.0.1 j ACCEPT |
该示例命令将一条规则附加到INPUT链的末尾,确定来自源地址205. 168.0.1的数据包可以被接受,进入本地协议栈 |
-D或--delete | 通过用-D指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则 | ||
-P或--policy | 该命令设置链的缺省目标操作,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略 | iptables -P INPUT DROP |
该命令将INPUT链的缺省目标操作指定为DROP。这意味着,将丢弃所有与INPUT链中任何规则都不匹配的数据包 |
-N或--new-chain | 用命令中所指定的名称创建--个新链 | ||
-F或--flush | 如果指定链名,该命令删除链中所有的规则,如果未指定链名,该命令删除所有链中所有的规则。此参数用于快速清除 | iptables -F FORWARD |
|
-L或--list | 列出指定链中所有的规则 | iptables -L FORWARD |
Match部分为规则匹配条件,指定数据包与规则匹配所应具有的特征,匹配条件分为两大类:通用匹配和特定协议匹配,通用匹配为可用于采用任何协议的数据包进行的匹配条件,如-i/-o 进入网络接口/发出网络接口,-s/-d 源和目的地址、-p协议类型、-m网络连接状态等,特定协议匹配为某种.上层协议特定字段的匹配条件,如--sport--dport为TCP/UDP端口匹配设置条件等,在配置多个匹配条件是采用“与”关系,即同时满足后,才触发目标操作行为。
Target部分指定满足匹配条件之后的目标操作,即对与那些规则匹配的数据包执行的处理操作。netfilter/iptables 除了允许用户定义的目标之外,还有许多缺省已定义的常用目标操作选项。常用的一些目标及其示例和说明如下:
ACCEPT:当信息包与具有ACCEPT目标操作的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历规则链。该目标操作被指定为
-j ACCEPT
DROP:当信息包与具有DROP目标操作的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标操作被指定为
-j DROP
REJECT: 该目标操作的工作方式与DROP目标操作类似,但与DROP不同的是,REJECT不会在服务器和客户机上留下死套接字。另外,REJECT将错误消息发回给数据包的发送方。该目标操作被指定为
-j REJECT
。示例:iptables -A FORWARD -p TCP --dport 22 j REJECT
RETURN :在规则中设置的RETURN目标操作让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如INPUT之类的主链,则使用该链的缺省策略处理信息包。它被指定为
-jump RETURN
。iptables -A FORWARD -d 203.16.1.89 -jump RETURN
网络检测技术与系统
入侵检测技术:对入侵行为进行检测与发现,它是防火墙之后的第二道安全屏障。分为误用检测和异常检测。入侵检测系统可分为基于主机的入侵检测系统(HIDS)和基于网络的入侵检测系统(NIDS),这两者可以互相补充成为分布式入侵检测系统(DIDS)。
评估指标:检测率(系统捕获到的攻击行为与全部攻击行为比值)和误报率(对正常行为的误报数与全部报警数的比值)。
技术类型:特征检测(匹配特征库)、异常检测(检测与正常用户在统计方面的差别)。二者通常结合使用,提高入侵检测系统的整体检测性能。同时,基于这两种技术,也可以对入侵检测系统进行分类。
入侵防御系统:也叫内嵌式入侵检测,即对检测到的异常行为或者与特征库匹配的行为直接进行阻断,断开访问。
开源网络入侵检测系统Snort
Snort是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配,可以检测各种不同的攻击方式,对攻击进行实时报警等。
四个主要部件
数据包嗅探:将网卡设置为混杂模式,用libpacp函数来进行数据包监听和抓包。
预处理器:用于弥补检测引擎检测能力的不足。主要有TCP/IP协议栈模拟、应用层协议解码、异常检测。
检测引擎:是主题模块,主要包括规则库解析、多模式匹配、规则插件。
输出模块:进行各种多样化的报警和日志记录。
主要功能:
嗅探模式(从网络上读取数据包,常用命令
snort -dev
)数据包记录模式(把数据包记录到硬盘上,常用命令
snort -b
)网络入侵检测模式(载入规则库才能工作,Snort并不记录所有捕获的包,而是将包与规则对比,仅当包与某个规则匹配的时候,才会记录日志或产生报警)
VPN技术
VPN即虚拟专用网,指利用大规模公共网络搭建虚拟链路来代替物理链路进行私密通信的技术,VPN主要采用隧道技术、加密技术、密钥管理和交换技术、身份认证技术等。
常见的VPN分类有:IPSec VPN;SSL VPN;MPLS VPN
实践
防火墙配置(P198)
实践任务:配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问。
镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|
kali | kali | kali | kali | 192.168.200.2 |
windowsXP Attacker | - | mima1234 | - | 192.168.200.3 |
SEEDUbuntu | seed | dees | dees | 192.168.200.4 |
过滤ICMP数据包
在SEED上ping kali,ping 192.168.200.2
发现此时,在正常状态下可以ping通
在kali上通过iptables -L
查看默认规则
执行iptables -A INPUT -p icmp -j DROP
指令使主机不接受icmp的数据包。
其中-A
是追加新规则于指定链的尾部,INPUT
表示数据包入口(规则),-p
用于匹配协议,-j
用于指定如何处理(ACTION)。
再次通过iptables -L
查看规则,发现多了一条icmp针对任何位置不允许访问的规则,即在INPUT链中添加将所以有ping连接产生的icmp数据包丢失的规则。
再次通过SEED ping kali,发现ping不通了
执行iptables -D INPUT -p icmp -j DROP
指令除去刚才的过滤规则:(也可使用iptables -F
删除自定义规则)
再次尝试ping连接发现恢复
只允许特定IP访问主机网络服务
是一个dos环境下的命令。
netstat -a
是一个dos环境下的命令,在Internet RFC标准中,用来显示所有连接和侦听端口
netstat -a | grep telnet
查看kali上的telnet服务是否已经打开(如果没有打开,请跳转至我的问题解决方案2)
分别测试SEED和WinXP是否可以进行telnet登录kalitelnet 192.168.200.2
在kali使用iptables -P INPUT DROP
指令拒绝一切的数据包流入(修改的是默认规则-P
),此时发现两台机器都无法进行telnet访问
使用指令iptables -A INPUT -p tcp -s 192.168.200.4 -j ACCEPT
开启SEED对主机kali的tcp服务。并用iptables -L
查看规则
这时发现SEED是可以正常访问telnet服务的,但是Winxp是无法访问的
最后执行iptables -F
删除自定义规则,iptables -P INPUT ACCEPT
把没有规定的数据包都接收,恢复之前的状态
Snort(P217)
使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件)进行入侵检测,并对检测出的攻击进行说明。
在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
从离线的pcap文件读取网络日志数据源。
在snort.conf中配置明文输出报警日志文件。
指定报警日志log目录(或缺省log目录=/var/log/snort)。
使用之前实验的listen.pcap,确认下它还健在,及其位置
利用指令snort -r /home/kali/listen.pcap -c /etc/snort/snort.conf -K ascii
对listen.pacp
进行入侵检测, 其中-c
表示选择snort配置文件,-r
表示从pcap格式的文件中读取数据包,-K ascii
是用来指定输出日志文件的为ASCII编码。
查看输出里检测出的数据包,可以看到大部分数据流为tcp会话,少部分为ARP包
报警数据包有10条,均被日志记录,所有数据包都裁决允许:
数据流统计:
此时snort会在默认目录生成一个日志文件,进入报警日志目录cd /var/log/snort
, 查看日志文件vim alert
,记录了报警数据10条的入侵检测信息,可以发现本次攻击是使用nmap发起的。攻击主机的IP地址是172.31.4.178
,网络扫描的目标IP地址是172.31.4.188
实践作业(P221)
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,并撰写分析报告,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
具体分析配置规则与启动项文件包括:
防火墙(netfilter+IPTables) : /etc/init.d/rc.firewall;
入侵检测系统(Snort) : /etc/init.d/hflow-snort 与/etc/snort/snort.conf;
入侵防御系统(Snort_ inline) : /etc/init.dthflow-snort_ inline与/etc/snort_ inline/snort_inline.conf.
分析内容如下:
上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?
获取IPTables的实际规则列表、Snort 和Snort_ inline 的实际执行参数。
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
Bonus:蜜网网关中的Snort规则是如何自动升级的?
镜像类型 | 镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|---|
蜜罐网关 | roo | roo | honey | honey | 192.168.200.8 |
上述脚本是如何实现蜜网网关的数据捕获和数据控制机制
数据捕获机制:iptables可以通过记录日志的形式来捕获网络连接信息,包括源地址,目的地址,使用的端口和进行连接的协议、长度等等;Snort对符合入侵检测特征的攻击数据包发出响应的报警信息,从而标识网络流中存在的攻击事件。
查看防火墙的文件
su -
vim /etc/init.d/rc.firewall
可以看到创建了黑名单和白名单的规则链,还创建了很多协议数据包的处理规则链
create_chains() {
if [ -n "${HwFWBLACK}" ] && [ -e ${HwFWBLACK} ] &&
[ "${HwBWLIST_ENABLE}" == "yes" ]; then
# 黑名单
iptables -N BlackList
fi
if [ -n "${HwFWWHITE}" ] && [ -e ${HwFWWHITE} ] &&
[ "${HwBWLIST_ENABLE}" == "yes" ]; then
# 白名单
iptables -N WhiteList
fi
if [ -n "${HwFWFENCE}" ] && [ -e ${HwFWFENCE} ] &&
[ "${HwFENCELIST_ENABLE}" == "yes" ]; then
# 防护名单
iptables -N FenceList
# 防护日志删除
iptables -N FenceLogDrop
fi
if [ -n $HwTCPRATE ] && [ $HwTCPRATE -gt 0 ]; then
# 创建TCP处理链
iptables -N tcpHandler
fi
if [ -n $HwUDPRATE ] && [ $HwUDPRATE -gt 0 ]; then
# 创建UDP处理链
iptables -N udpHandler
fi
if [ -n $HwICMPRATE ] && [ $HwICMPRATE -gt 0 ]; then
# 创建ICMP处理链
iptables -N icmpHandler
fi
if [ -n $HwOTHERRATE ] && [ $HwOTHERRATE -gt 0 ]; then
# 创建其他协议处理链
iptables -N otherHandler
fi
}
snort主要通过对整个网络数据包进行预警提示,多侧重于数据捕获,当然查询防火墙和snort_inline日志也可以获得一定的数据捕获信息。
iptables中有用 modprobe ipt_LOG,iptables -N FenceLogDrop等存储数据捕获的日志,snort_inlin可以用
snort -c [snort.conf绝对路径} -l [log路径] -K ascii
来实现输出log文件。iptables防火墙主要负责对数据accept,reject,drop等规则的制定和执行,多用于数据控制。
分析相关脚本的关键代码,防火墙文件rc.firewall中
create_chains()
用于创建链,该函数分别创建了黑名单和白名单,防护名单以及防护日志删除,-N
的意思表示根据用户指定的名字创建新链,其中黑名单就是阻止某些网络地址和用户进入主机,白名单就是用户设置的认为可以添加信任的网络用户以及网络地址,防护名单是IPS的文件列表,防护日志删除是一个表,用于记录/删除从围栏反弹的数据包。
获取IPTables的实际规则列表、Snort 和Snort_ inline的实际执行参数
获取IPTables的实际规则列表
通过iptables -t filter -L | less
来查看规则列表,可以看到默认的规则入INPUT、FORWARD、OUTPUT都已经被关闭了
获取Snort实际执行参数
使用命令snort --h
也可以查询snort文件vim /etc/rc.d/init.d/snortd
可以看到些参数的选项:默认使用默认目录下的snort.conf规则,默认监听网卡为eth0,默认存储日志路径为/var/log/snort
获取Snort_inline实际执行参数
执行命令vim /etc/init.d/hw-snort_inline
打开snort_inline的脚本文件,可以看到到实际执行的参数
-D
表示Daemon模式,-c
表示读取config文件,-Q
表示使用QUEUE模式,-l
表示输出log文件的目录,-t
表示改变程序执行时所参考的根目录位置
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的
chkconfig命令主要用于检查,设置系统的各种服务。使用chkconfig -list
命令来对linux上运行的服务进行查询。
根据chkconfig --list | grep [服务]
可以查询到开启服务的情况,其中1表示单用户模式,2表示无网络连接的多用户命令行模式,3表示有网络连接的多用户命令行模式,4表示不可用,5表示带图形界面的多用户模式,6表示重新启动。
可以发现NIPS(snort)的0-6都是off,说明是需要手动启动的,而防火墙(iptables)和NIPS(snort_inline)不全是off,是随系统开机而开启的
密网网关中的Snort规则是如何自动升级的
可以从vim /etc/honeywall.conf
打开honeywall配置文件,来看snort的rule是否自动更新(在文件270+行),默认为不更新
Snort社区中的实际规则更新工具是免费的Oinkmaster
使用vim /etc/oinkmaster.conf
打开该文件,发现了snort.conf文件,可以推断这里使用工具Oinkmaster进行了snort的自动升级
遇到的问题
- 问题1:服务器经常有时候有一阵子连不上,无法保存,不知道是不是用的人太多了?
-
解决:没什么可解决不解决的,等服务器好了再保存即可。而对我这种save党,就会全选先存个文档。。。
-
问题2:使用
netstat -a | grep telnet
发现kali的telnet服务没有被打开,此时telnet连接不上
- 解决1:安装telnet
安装xinetd telnetdapt-get install xinetd telnetd
启动xinetd,/etc/init.d/xinetd start
创建并编辑/etc/inetd.conf文件gedit /etc/inetd.conf
(vim也可),i编辑,输入:
telnet stream tcp nowait telnet /usr/sbin/tcpd /usr/sbin/in.telentd
冒号wq保存
编辑文件/etc/xinetd.confvim /etc/xinetd.conf
,i编辑,在文件中加上
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd
然后重启服务/etc/init.d/xinetd restart
- 解决2:事实上,解决1提到的方案没能让我成功打开telnet服务。于是我去询问了杨蕾新同学,她给了我她参考的教程
安装telnet服务器端的应用程序
sudo apt-get install openbsd-inetd
sudo apt-get install telnetd
改配置文件/etc/inetd.confsudo vim /etc/inetd.conf
,添加内容
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
重启telnet服务sudo /etc/init.d/openbsd-inetd restart
查看telnet服务是否开启netstat -a | grep telnet
- 解决3:kali常作为攻击机使用,可以选择某个linux靶机进行telnet
-
问题3:
-
解决:
su -
提权 -
问题4:蜜罐字符界面找不到鼠标,查看内容受限
-
解决1:可使用
shift
键+page up/down
键上下翻动 -
解决2:我的电脑的
page up/down
在↑↓键重合,方案1无法实现翻页。于是使用less命令分页显示文件(more命令也可)。使用q
键就可以退出less
/more
。
思考感悟
利用指令对listen.pacp进行入侵检测时,发现跑出一只小猪猪的形状(* ̄(oo) ̄),应该是snort的标识
超级可爱(╹▽╹)
这次实验相较之前更偏重一些文件/语句的分析思考,需要额外查阅一些资料了解。
参考资料
- 《网络攻防技术与实践》
- 《linux防火墙iptables常用规则(屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链)》
- 《操作系统--Linux CentOS防火墙iptables安装及端口开放》
- 《linux操作系统防火墙iptables配置》
- 《snort_inline中与防火墙联动的实现以及代码inline.c分析》
此为本人网络攻防学习第六周的内容,如有不足,还请批评指正,不胜感激。
以上