该文档是关于CYBR3000信息安全作业的说明,作业分为两部分。A部分是入侵防御,需要使用iptables
编写规则集,完成五个任务,并将每个任务的规则集写在单独的.txt
文件中。B部分是入侵检测,需要编写一个名为IDS.py
的Python程序,读取包含入侵检测规则的文件和.pcap
文件,检测数据包是否违反规则,并将警报信息记录到IDS_log.txt
中。程序需要支持多种检测场景,并遵循特定的规则格式和要求。
介绍
本作业分为两个部分:A部分和B部分。
A部分:入侵防御(总计25分)
非中介 直接联系❤️ cstutorcs
- 您需要为以下每个任务编写
iptables
规则集。每个任务的每个规则集都需要写在一个单独的.txt
文件中。.txt
文件中的每一行都对应一个单独的iptables
规则。.txt
文件的名称必须与相应任务的名称匹配(例如task1.txt
)。如果.txt
文件的名称不正确或标记错误,则不会给分。每个.txt
文件中的规则应该是可以直接使用的,这意味着其他人可以复制粘贴并在终端中运行规则集中的每个规则来满足任务的要求。 - 要使用
iptables
,您需要在基于Linux的系统中测试您的规则。像Docker这样的工具或使用VirtualBox或VMware等软件的虚拟机可以让您运行一个可以使用iptables
的Linux环境。 任务: - 任务1(5分):允许来自特定IP地址(192.168.1.100)的传入SSH流量(使用端口22),并拒绝所有其他传入的SSH连接。
- 任务2(5分):允许传入的HTTP(端口80)和HTTPS(端口443)流量,但丢弃所有其他传入流量。
- 任务3(5分):将传入的ICMP ping请求(ICMP echo – request)限制为每秒仅两个。
- 任务4(5分):对于传入流量,仅允许已建立和相关的连接,阻止新的传入连接,除了SSH。
- 任务5(5分):默认情况下阻止所有传入和传出流量,但允许来自特定IP(192.168.1.100)的SSH访问、HTTP / HTTPS流量和DNS查询。
B部分:入侵检测(总计75分)
- 在这部分中,您需要编写一个名为
IDS.py
的Python程序,该程序模拟入侵检测系统(IDS)的行为。这个程序将读取两个文件:1)一个文件包含入侵检测规则(如Snort中使用的规则),2)另一个文件是.pcap
文件,其中包含您的程序将检查的所有数据包,以查看它们是否违反规则。这两个文件都将通过命令行参数传递到您的Python程序(IDS.py)中。IDS.py
的开头如下:
$python3 NIDS.py <.pcap文件的绝对路径> <IDS规则的绝对路径>
两个路径都需要是绝对路径。 – Python 3.9是此部分所需的版本,并且本次作业的最终测试也将使用Python 3.9。我们不允许使用任何其他Python版本,如果由于错误的Python版本导致意外行为发生,则不会给分。Scapy是此部分允许使用的库,请勿在代码中使用任何其他外部库。 – IDS_rules.txt
和.pcap
文件的示例在BlackBoard上给出。您需要读取和解析每条规则,并使用该规则来监视和检测.pcap
文件中的数据包。请注意,提供的.pcap
文件只是在最终评分中使用的.pcap
文件的一个子集。 – IDS规则的格式与Snort规则的格式略有不同。您的IDS规则的一个简单示例是:
alert tcp 192.168.102.132 any -> any any (msg: "receive a TCP packet";)
当数据包是来自IP地址192.168.102.132的任何端口并发送到任何IP地址的任何端口的传入TCP数据包时,此规则将发出警报。如果发现这样的数据包,IDS.py
将把消息记录到名为IDS_log.txt
的日志中,格式如下:
2024 - 08 - 18 11:47:53 - Alert: receive a TCP packet
2024 - 08 - 18 11:47:53 - Alert: receive a TCP packet
...(如果发现更多数据包)
IDS_log.txt
中的每一行表示IDS发现至少一个符合规则的数据包。每一行以时间戳开头,然后是Alert: <msg中的内容>
。IDS_log.txt
必须与上面给出的格式匹配,因为您将根据此进行评分。 – 一个更复杂的示例是:
alert tcp 192.168.102.132 any -> 131.171.127.1 25 (content: "malicious"; msg: "multiple malicious TCP syn packets found"; flags: S; detection_filter: count 10, seconds 2;)
在这个示例中,如果IDS在2秒内发现从IP地址192.168.102.132的任何端口发送到IP地址131.171.127.1的端口25的包含字符串“malicious”的TCP syn数据包超过10个,IDS.py
将发出警报。 – 您的IDS.py
应该忽略规则集中以“#”开头的任何行。 澄清: – IDS.py
在检测到数据包后仅具有“alert”作为动作。 – IDS.py
支持四种不同的协议:ip
、icmp
、tcp
、udp
。 – IDS.py
不支持IP范围,所有测试用例都将有一个源IP地址和一个目标IP地址。 – IDS.py
仅考虑传入流量,“->”符号在所有测试用例中都保持不变。 – 规则中括号内的每个规则选项都应该用“;”分隔。规则中的最后一个选项应该以“;”结尾,然后是“)”。 – “flags”选项支持四种不同的类型:A
、S
、F
、R
– A
:ACK(确认) – S
:SYN(同步序列号) – F
:FIN(完成) – R
:RST(重置连接) – “detection_filter”仅且始终有两个选项:“count <数据包数量>”和“seconds <时间窗口(秒)>”。请遵循示例中提供的确切格式。 您的IDS.py
将在以下场景(任务)中进行测试: – 检测多个TCP数据包(5分)。 – 检测多个ICMP数据包(5分)。 – 检测多个IP数据包(5分)。 – 检测多个UDP数据包(5分)。 – 检测TCP、ICMP、UDP和IP数据包的混合(5分)。 – 在所有其他良性数据包中检测一个具有恶意内容的数据包(5分)。 – 检测跨不同协议的具有恶意内容的数据包(5分)。 – 检测TCP syn数据包、fin数据包、rst数据包和ack数据包(10分)。 – 检测TCP泛洪(10分)。 – 检测TCP syn扫描(10分)。 – 在短时间内检测多个具有恶意内容的TCP ack数据包(10分)。