APP下载

基于Python的端口扫描器及Metasploit安全测试

2023-04-27蒋明峰陈马申屹汤慧敏

电脑知识与技术 2023年8期

蒋明峰 陈马申屹 汤慧敏

关键词:端口扫描;socket;Metasploit;永恒之蓝;Nmap

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2023)08-0077-03

0 引言

0.1 研究背景与意义

随着信息技术的发展,计算机安全问题得到越来越多的重视。黑客可以通过漏洞获取任何他们想要的资料,如之前Windows的“永恒之蓝”和“永恒之黑”漏洞以及最近发现的大型漏洞log4j2,如果我们不注重相应的安全防护,黑客就会顺着这些缺口入侵。对于入侵的最佳的防护措施就是及时进行漏洞修复,打好安全补丁,设置好防火墙等。黑客进行入侵时很多是从开放的端口入侵,因此对于端口的开放与否需要更加谨慎,无论在进行漏洞测试的过程中是为了找合适的入口,还是为了准确找到位置进行修补,端口扫描都是非常重要的一环。在进行Metasploit模拟漏洞攻击的时候使用Nmap进行端口扫描,发现扫描的过程过于缓慢,这是由于扫描结果会包含很多用不到的信息且无法过滤导致。为了提高端口扫描的效率,利用Python写了简易的端口扫描器,用于提高端口扫描的效率,更好地进行漏洞测试实验。

0.2 国内外网络扫描技术研究现状

端口扫描被归类为网络扫描技术,扫描是为了信息的收集,主要分为四类。其他三类分别是主机存活扫描、操作系统指纹识别和漏洞扫描,其中操作系统指纹识别和端口扫描用于收集信息,漏洞扫描用于保障网络安全。端口扫描、主机存活扫描和操作系统指纹识别使用Nmap都能够较好地实现,漏洞扫描较为实用的软件是Nessus,可以在设置好字典的情况下输入指定主机即可分析系统中可能存在的漏洞并进行安全性分析,根据这些信息保障安全。

除了Nmap之外,由Durumeric领导密歇根大学研究团队开发的软件Zmap也是很好的扫描工具。Zmap是基于无状态的扫描技术,无须进行完整的三次握手,因此速度上较Nmap 会更快,缺点是不能扫描Ipv6,且不能进行内网等的扫描。之后的扫描工具就是Masscan,相比之前的两种工具,速度更上一个层次,除了無状态的扫描技术外,发包速度也更快,缺点是无法探测端口服务和操作系统[1]。

网络扫描无论是在漏洞分析还是安全维护上都有着相当重要的作用,因此只要网络还在发展,网络扫描技术也就会随着一起发展,以便防止漏洞在网络中随处可见,更好地保障我们的安全。

本文阐述了如何使用Python实现端口扫描功能,利用Python提供的socket模块实现端口扫描功能、判断与分析端口的开放与否,其中使用了并行化技术,利用python中的multiprocessing.dummy中的pool来实现多线程操作,提高了效率,并将基于Python实现的端口扫描器从速度、准确率等角度与Nmap进行比较,最后应用于Metasploit进行简单的漏洞测试,演示若存在危险端口时如何进行入侵,提醒人们提高对于网络安全的防护。

1 背景知识介绍

1.1 端口扫描原理及常见扫描方式

端口是设备用于和外界进行通信的出口,最开始仅有物理端口。随着互联网的发展,人们为了实现远程连接又发展出了虚拟端口,用户仅需通过IP和端口就能确定一台主机的信息出口,从而进行信息的接收和发送。端口扫描则是通过设定好相应的内容后发送给目标端口,如ICMP包等,用以判断端口的开放与否以及计算机所提供的服务类型,黑客也能通过此手段来获取这些服务存在的漏洞从而进行攻击。同样的,我们也可通过此方式来扫描本机或是远程主机的端口开放情况,从而分析可能存在的系统漏洞,进行相应的防护措施。

根据设置的参数不同,可以进行不同的扫描方式。其中参数-sS表示的是SYN扫描,也称为半开放扫描,不需要建立完整的TCP连接,仅需两次握手即可进行扫描,相对记录较少,比较隐蔽,但需要较高的权限。-sT表示的是TCP扫描,TCPconnect()函数调用传输层的API通过三次握手与指定端口建立连接,可以同时扫描多个用户且不需要管理员权限,但由于三次握手会导致记录更多,痕迹较为明显[2]。-sU表示UDP扫描,用于扫描UDP端口。除了这三者以外还有FIN扫描、ACK扫描等,其也是通过TCP建立连接时所用到的参数作为标志位,根据收到相应的报文(或者是有无报文)来判断端口的开放与否。

1.2 socket

socket又称套接字,是TCP或是UDP用于区分不同应用程序并且实现连接的工具。套接字的参数有IP、端口号和传输协议,根据传输协议的不同,UDP和TCP的套接字分为三元组和五元组,三元组仅需目标IP和端口号,五元组则是使用双方的IP和端口号,通信双方发送的信息中后面加上socket用以识别目标以及对应的应用程序。详细过程如图1所示.

1.3 永恒之蓝漏洞

“永恒之蓝”漏洞利用Windows 操作系统SMB服务漏洞获取系统的最高权限,对应微软公司编号MS17-010,后被不法分子改造制作了wannacry勒索病毒,利用Windows操作系统445端口存在的漏洞进行传播,并且具有自我复制、主动传播性[3]。

1.4 Metasploit

Metasploit是一个免费的框架,由于其自身携带了许多软件的漏洞攻击模块,因此可用于模拟漏洞攻击、验证漏洞、安全性分析等。Metasploit最大的优势在于采用模块化理念设计,包含了很多利用代码和安全测试工具且被不断更新。它可以在同一个平台上利用各种不同的代码进行安全测试,可以根据需要将安全测试过程中不同阶段使用的攻击代码自由组合,而不需要针对每一个漏洞去写一整套完整的代码,因此它可以在不同的目标环境中快速地执行完整的安全测试[4]。

2 Python 实现端口扫描

2.1 基本功能实现

Python实现端口扫描是利用socket模块来实现。先判断连接方式,SOCK_STREAM是TCP连接,处理面向字节流的传输,SOCK_DGRAM是UDP连接,处理面向数据包的传输。接着输入需要查询的IP,若输入的是域名,则通过socket.gethostbyname来获取域名所对应的IP,然后通过socket.connect_ex函数传输目标IP以及端口号,根据返回值判断端口是否开启,若返回值为0,则端口是开启的,否则是关闭的,若是需要全端口扫描则循环65536次即可。端口扫描功能流程图如图2所示。

2.2 利用多线程提高执行效率

若是单线程进行端口扫描,则需要循环65536次依次执行该函数进行连接,效率过低,耗时太长,因此需要采用多线程的方式提升效率。利用python中的multiprocessing.dummy中的pool来实现多线程操作,先开线程池,然后通过调用apply_async函数进行多线程的函数执行。根据不同的cpu线程可开的数量不同,虽然多开线程能有效提高程序的执行效率,但在执行过程中过多的线程可能会导致电脑的运行卡顿甚至崩溃。这里进行一个比较,将线程分别设置为1000和2000,可以看到速度有明显的提升,但1000的时候电脑仍运行流畅,2000时电脑出现明显卡顿。运行时间通过datatime模块,用运行结束的时间减去运行前的时间得出程序执行时间。多线程流程图如图3所示。

这里先用python实现的扫描器对服务器进行全端口扫描,运行结果图如图4所示。

再用nmap的三种不同方式對服务器进行扫描,运行结果图如图5所示。

可以看出利用多线程且简化功能后相比于Nmap扫描的速度还是有了很大的提升。

2.3 基于python的端口扫描器与Nmap 对比

Python用socket进行端口扫描的方式与Nmap基本相同,都是先通过TCP(UDP) 与端口连接,根据自身发送内容的回应判断端口是否开启。根据自身需求进行修改,将不需要的内容去掉之后扫描的时间为18秒左右,而Nmap由于能判断操作系统、端口类型等时间耗费较长,全端口扫描可能耗时需要1-2分钟,且若不能成功建立连接可能出现无法扫描完成的情况,在socket中设立了超时则自动跳过,根据测试将时间改为0.3秒,能够更加方便快捷地扫描全端口。但由于速度提升上去的原因,无法识别端口的服务类型、识别操作系统,且线程无法再往上加,在性能和速度都考虑的情况下已是最快时间,若要更全的信息还是要通过Nmap进行扫描。

3 端口扫描器在Metasploit 安全测试中的应用

由于Kali Linux系统自带Metasploit的原因,本实验是基于Kali Linux系统所做。这里以永恒之蓝的测试为例,实验环境为Vmware搭建的虚拟机,靶机为Windows7操作系统。先通过指令msfconsole 打开攻击程序,查询可得永恒之蓝的攻击模块名为ms17_010,通过指令“use auxiliary/scanner/smb/smb_ms17_010”使用该攻击模块,通过options发现需要设置的参数有监听IP以及对应的端口,通过set指令进行修改。由于靶机是搭建的虚拟机,IP已知,通过端口扫描器扫描出开放的端口后即可通过此端口进行测试,设置好参数后执行run命令即可进行攻击,成功后即可夺取靶机的控制权,可在控制台中进行查看文件、文件上传等一系列的操作。

在测试的过程中发现攻击成功需要满足两点:①靶机的系统需要在漏洞的允许范围内,由于系统在不断更新,管理员也会在发现后及时修补该漏洞,因此只有在较低的版本可以实现攻击,高版本则会修复此漏洞,无法进行攻击。②靶机需要关闭防火墙,否则端口扫描无法直接探测出开启端口,需要绕过防火墙后才能扫出;即使是在扫出端口的情况下,防火墙也能够阻止Metasploit的攻击,而如何在不进入系统的情况下关闭防火墙也是一大问题。因此通过Metasploit既将端口扫描器在实例中运用,又进行了攻击,对相应的漏洞进行了安全性测试。

4 总结

本文基于Python实现了端口扫描的功能,并利用Metasploit运用在安全测试实例中,最后与常见的端口扫描器Nmap进行对比,分析两者实现功能的不同与优缺点,进一步了解了端口扫描机制以及漏洞安全性测试相关的知识还有漏洞的危害性,加强了网络安全意识。