掘金 后端 ( ) • 2024-04-22 09:59

距离上次做 Kali Linux 分享已经相隔半年之久了,刚好需要主导公司每半年一次的本地安全加固工作,这次将简单分享自己是如何做单一服务器的扫描。

声明:

  1. 本文测试的站点为自家站点仅做学习使用,不存在侵犯网络信息安全问题;
  2. 本文只介绍工具的使用并不鼓吹任何非法活动,请各位看官三思而后行一切后果自负;
  3. 本文涉及敏感信息将会进行脱敏处理;

1. 端口扫描

在正式进入系统扫描前先进行网络端口扫描(由外到内)。由于本次是做已知的单一服务器扫描,因此已经获取到目标服务器 ip 直接对目标服务器扫描即可。

# 创建目录存储扫描内容
┌──(root💀b8ef6c2abc47)-[~]
└─# mkdir /home/standalone/nmap

┌──(root💀b8ef6c2abc47)-[~]
└─# cd /home/standalone/nmap

┌──(root💀b8ef6c2abc47)-[/home/standalone/nmap]
└─# nmap -sV -sS -O -p- -oA scan_all 192.168.xxx.xxx
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-19 03:41 UTC
Nmap scan report for 192.168.xxx.xxx
Host is up (0.0027s latency).
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.4 (protocol 2.0)
2377/tcp open  ssl/swarm?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port2377-TCP:V=7.94%T=SSL%I=7%D=4/19%Time=6621E7FC%P=x86_64-pc-linux-gn
SF:u%r(NULL,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(GenericLines,F,"\0\
SF:0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(GetRequest,F,"\0\0\x06\x04\0\0\0\0
SF:\0\0\x05\0\0@\0")%r(HTTPOptions,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0"
SF:)%r(RTSPRequest,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(RPCCheck,F,"
SF:\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(DNSVersionBindReqTCP,F,"\0\0\x0
SF:6\x04\0\0\0\0\0\0\x05\0\0@\0")%r(DNSStatusRequestTCP,F,"\0\0\x06\x04\0\
SF:0\0\0\0\0\x05\0\0@\0")%r(Help,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%
SF:r(SSLSessionReq,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(TerminalServ
SF:erCookie,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(TLSSessionReq,F,"\0
SF:\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(Kerberos,F,"\0\0\x06\x04\0\0\0\0\
SF:0\0\x05\0\0@\0")%r(SMBProgNeg,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%
SF:r(X11Probe,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(FourOhFourRequest
SF:,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(LPDString,F,"\0\0\x06\x04\0
SF:\0\0\0\0\0\x05\0\0@\0")%r(LDAPSearchReq,F,"\0\0\x06\x04\0\0\0\0\0\0\x05
SF:\0\0@\0")%r(LDAPBindReq,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(SIPO
SF:ptions,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(LANDesk-RC,F,"\0\0\x0
SF:6\x04\0\0\0\0\0\0\x05\0\0@\0")%r(TerminalServer,F,"\0\0\x06\x04\0\0\0\0
SF:\0\0\x05\0\0@\0")%r(NCP,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(Note
SF:sRPC,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(JavaRMI,F,"\0\0\x06\x04
SF:\0\0\0\0\0\0\x05\0\0@\0")%r(WMSRequest,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\
SF:0\0@\0")%r(oracle-tns,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(ms-sql
SF:-s,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0")%r(afp,F,"\0\0\x06\x04\0\0\0
SF:\0\0\0\x05\0\0@\0")%r(giop,F,"\0\0\x06\x04\0\0\0\0\0\0\x05\0\0@\0");
Device type: printer|WAP
Running (JUST GUESSING): HP embedded (86%), Netgear embedded (85%)
OS CPE: cpe:/h:hp:officejet_pro_8500 cpe:/h:netgear:wgr614v7
Aggressive OS guesses: HP Officejet Pro 8500 printer (86%), HP PSC 2400-series Photosmart printer (85%), Netgear WGR614v7 wireless broadband router (85%)
No exact OS matches for host (test conditions non-ideal).

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.11 seconds

关于扫描命令中的参数如下:

  • -sV:探测开放端口的服务版本信息
  • -sS:使用SYN半开式扫描,速度快且相对隐蔽
  • -O:启用操作系统指纹识别
  • -p-:扫描目标 IP 的全部 65535 个端口
  • -oA scan_all:将扫描结果以标准格式、XML 格式和 Grepable 格式存储为 scan_all 开头的三个文件

接着,我们可以粗略分析一下返回的信息:

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.4 (protocol 2.0)
2377/tcp open  ssl/swarm?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
...
Device type: printer|WAP
Running (JUST GUESSING): HP embedded (86%), Netgear embedded (85%)
OS CPE: cpe:/h:hp:officejet_pro_8500 cpe:/h:netgear:wgr614v7
Aggressive OS guesses: HP Officejet Pro 8500 printer (86%), HP PSC 2400-series Photosmart printer (85%), Netgear WGR614v7 wireless broadband router (85%)
No exact OS matches for host (test conditions non-ideal).

通过返回得知,这台服务器开放了 2 个 TCP 端口,一个是 22 端口它运行着 OpenSSH 7.4 服务,另一个是 2377 端口运行着未知服务,但可能是 SSL/swarm。此外 2377 端口返回了一些数据,但 Nmap 无法识别服务,虽然 Nmap 提供了一些服务指纹但内容是经过加密的,因此无法窥探一二。

根据 Nmap 推测,该设备可能是一台打印机或无线接入点(WAP)。其中,86%可能性是 HP Officejet Pro 8500 打印机,85%可能性是 HP PSC 2400 系列 Photosmart 打印机,85%可能性是 Netgear WGR614v7 无线宽带路由器。并且没有找到完全匹配的操作系统。

其实根据我们过往的经验可以知道 22 端口一般都是 ssh 远程连接端口,而 2377 很熟但一时间想不起来,需要进一步排查。此外,如果想以 Html 方式查看结果可以通过 xsltproc 工具进行转换:

┌──(root💀b8ef6c2abc47)-[/home/standalone/nmap]
└─# xsltproc scan_all.xml -o scan_all.html

┌──(root💀b8ef6c2abc47)-[/home/standalone/nmap]
└─# ls
scan_all.gnmap  scan_all.html  scan_all.nmap  scan_all.xml

结果如下图: image.png

2. 系统漏洞扫描

在系统漏洞扫描方面,这次我选用了 Nessus 进行全面扫描。关于 Nessus 的安装可以参考以下的文章,我就不再详述了。

Kali Linux Nessus详细安装步骤!!!

但不知为何,有可能是我用 Docker Kali 的缘故 Kali 死活装不了 Nessus,于是采用第二种解决方案:Docker 部署。通过 tenable 官网得知只需几个参数就可以部署并使用 Nessus 非常方便,如下图: image.png 于是直接下载镜像并且运行(用户信息的哪些启动了容器再说)

(base) yuanzhenhui@MacBook-Pro ~ % docker pull tenable/nessus:latest-ubuntu
latest-ubuntu: Pulling from tenable/nessus
7f8e4ec648be: Pull complete 
Digest: sha256:169fa12a6b297638737b777bea60e3a5fbdbea9b679f3a813eddcace22940849
Status: Downloaded newer image for tenable/nessus:latest-ubuntu
docker.io/tenable/nessus:latest-ubuntu

What's Next?
  View summary of image vulnerabilities and recommendations → docker scout quickview tenable/nessus:latest-ubuntu
(base) yuanzhenhui@MacBook-Pro ~ % docker run -d --name nessus -p 8834:8834 tenable/nessus:latest-ubuntu
c3c58732640a6503a5e3b9900d1b135dfcd2f9f1d3901d6a75be85f5fc2a2a7a

容器启动后就可以使用 https://localhost:8834 进行访问了。(如果用新版 Chrome 浏览器这里一定要用 https)

第一次访问时会要求注册,这个不难一步一步跟着做就可以了。如果像我一样想快速体验一下可以选择“Register for Nessus Essentials” 用邮箱注册即可获取激活码(有 7 天试用)。

image.png

PS:之前并不是使用 Nessus 进行系统扫描的,只不过我们的运维小哥力荐这次就尝试一下吧。

在安装的收尾阶段 Nessus 会自动下载插件,并且需要一些时间进行编译。在编译结束后会要求重新登录。登录成功后就可以创建扫描任务了。点击右上方“New Scan”按钮后就跳转到 Scan Templates 页面,这里选择“Basic Network Scan”。

image.png

接下来就可以进行扫描配置了(这里图例我做最基础配置)

image.png 虽然已经用 Nmap 做了端口扫描,但是既然提供了这种服务那选择就选择全端口扫描吧。 image.png 值得一提的是,Nessus 也有提供 Web 漏洞扫描方案,在这里也选择了混合扫描方式。 image.png

输出的报告不让修改,因此做了反选处理

image.png

在点击“Save”保存配置后就可以开始扫描了

image.png

最后扫描出来的结果如下:

image.png

由扫描结果可知,当前服务器大部分问题都是 info 级别,但也有零星几个是中等级和低等级的。

image.png 这里就是展示具体问题的地方了,点击后可以展开来看。里面含有有修复建议,提示还算清晰。 image.png 最后点击右上角的“Report” 按钮即可导出 pdf 报告。

3. Web应用漏洞扫描

接下来本应进行 Web 应用的漏洞扫描的,但通过端口扫描得知目前开放的端口只有 22 和 2377 端口。经查明 22 为 ssh 远程端口,2377 为 Docker 通讯端口。两者皆不是 Web 应用因此无需进行 Web 应用扫描了。 PS:如果要进行 Web 应用扫描可以使用之前介绍过的 Nikto

【Linux】Kali Linux 渗透安全学习笔记(3) - Nikto 简单应用

或者 Burp suite 来做。后者 Burp suite 是 Kali 自带的并且提供了图形化界面,用起来更加直观是个不错的选择(后面有机会会说说)。

4. 密码检测

网络、系统、应用都基本扫过一遍了,剩下的就是对弱密码方面进行扫描检测了。由端口扫描得知这台服务器存在 ssh 远程服务,那么可以通过工具验证一下这个 ssh 的密码强度,若发现存在弱密码的情况必须立刻修复。

这里我选择 Ncrack 来实施这项工作( Hydra、Ncrack、Medusa、Patator 这 4 个主流工具都可以做密码检测的事情,功能也都大同小异。Ncrack 相对而言比较简单一点)。

接着就可以准备用户名清单(username.txt)和密码字典(password.txt)文件了。在这里将使用 rockyou.txt 作为密码字典,因为 Kali 里面本来就预安装了 rockyou.txt.gz ,在/usr/share/wordlists 路径底下,如下图:

┌──(root💀b8ef6c2abc47)-[/usr/share/wordlists]
└─# ls
amass       dirb       dnsmap.txt     fern-wifi  legion      nmap.lst        seclists    wfuzz
brutespray  dirbuster  fasttrack.txt  john.lst   metasploit  rockyou.txt.gz  sqlmap.txt  wifite.txt

┌──(root💀b8ef6c2abc47)-[/usr/share/wordlists]
└─# gzip -d rockyou.txt.gz 

┌──(root💀b8ef6c2abc47)-[/usr/share/wordlists]
└─# ls
amass       dirb       dnsmap.txt     fern-wifi  legion      nmap.lst     seclists    wfuzz
brutespray  dirbuster  fasttrack.txt  john.lst   metasploit  rockyou.txt  sqlmap.txt  wifite.txt

接下来创建文件夹并将 rockyou.txt 拷贝到这个目录下备用,如下图:

┌──(root💀b8ef6c2abc47)-[/usr/share/wordlists]
└─# mkdir /home/ncrack

┌──(root💀b8ef6c2abc47)-[/usr/share/wordlists]
└─# cd /home/ncrack

┌──(root💀b8ef6c2abc47)-[/home/ncrack]
└─# cp /usr/share/wordlists/rockyou.txt .

就在同样的文件夹下创建 username.txt(内容比较敏感就不展示了,反正每个用户名一行就可以了)。之后就可以执行命令进行检测了,如下图:

┌──(root💀b8ef6c2abc47)-[/home/ncrack]
└─# ncrack -p 22 --user username.txt -P rockyou.txt 192.168.xxx.xxx

Starting Ncrack 0.7 ( http://ncrack.org ) at 2024-04-19 11:22 UTC


Ncrack done: 1 service scanned in 326.03 seconds.

Ncrack finished.

此外,通过网上搜索得知,CrackStation 网站也有提供数据字典下载:

CrackStation’s Password Cracking Dictionary (Pay what you want!)

密码本大小解压后足足有15GB,对于 txt 文件来说这个量足够庞大。 image.png

5. 总结

在完成了以上的一系列操作后,剩下的还会有渗透测试与验证以及安全加固和复测两项任务。

这里的渗透测试与验证主要是针对上面扫描的结果去进行漏洞的验证并试图获取系统控制权。但本次任务主要是对自家本地服务器的进行加固,因此没有这番操作的必要。

而安全加固和复测任务可以依据上述扫描结果按需进行漏洞修复即可,该打补丁打补丁,该配置安全策略配策略。所有工作加固动作完成后按照上述办法进行重测就能够验证效果并更新安全配置基线,留存到 CMDB 里面。