蓝队基础:安全运维防护浅析
日志分析
基础日志分析
Web服务器日志
日志文件位置:
-
IIS:
- Windows Server 2003 iis6日志路径:
C:\Windows\System32\LogFiles - Windows Server 2008 R2、2012、2016、2019 iis7以上日志路径:
C:\inetpub\logs\LogFiles
- Windows Server 2003 iis6日志路径:
-
Apache:
- Apache+Windows:
D:\xampp\apache\logs\access.log - Apache+Linux:
/var/log/apache/access.log或/var/log/apache2/access.log或/var/log/httpd/access.log
- Apache+Windows:
-
nginx:
/usr/local/nginx/logs
常见日志格式内容:
- 访问的主机IP
- 请求时间
- 请求方法、请求的URL、采用的协议
- HTTP状态码
基础分析方法
访问频率分析:
- 目录扫描:扫描的基本都是一些备份文件、敏感信息、后台目录、配置文件,一般是Head方法,状态码多数为404
- 盲注:
- 常见盲注函数:
sleep\mid\left\right\ord\ascii - 日志中请求的URL或者POST的内容每次大体都差不多,只改变个别字符
- 常见盲注函数:
- 账户密码暴破:短时间针对某一账号发起多次请求,返回值基本相同
- Web漏洞扫描:根据User-Agent来判断,访问IP基本是一个VPS主机
特征字符串分析:
-
SQL注入漏洞:
-
万能密码:
admin' or '1'='1、username = secpulse'=' password = secpulse'='、ffifdyop -
报错注入:
floor()、extractvalue()、updatexml()、geometrycollection()等 -
关键字特征:
union、order by、select...from -
数据库类型判断:
- MySQL:
id=2 and version()>0返回正常 - Access:
and (select count(*) from sysobjects)>0返回异常 - SqlServer:
and (select count(*) from sysobjects)>0返回正常 - Oracle:
and length(select user from dual)>0返回正常
- MySQL:
-
-
XSS漏洞:
- JS标签:
<script>、<a>、<p>、``等 - JS属性:
formaction、action、href、xlink:href等
- JS标签:
-
文件上传漏洞:
multipart/form-data(表示该请求是一个文件上传请求)- 存在
boundary字符串(作用为分隔符) Content-Disposition、filename、name、file- 常见工具:
rebeyond、AntSword
-
文件包含漏洞:
../../../../php://filter/convert.base64-encode/resource=data://text/plain;base64,
-
反序列化漏洞:
aced 0005 7372(攻击者为了Bypass WAF可能会进行编码)- 工具:
ysoserial
操作系统日志
Linux:
- 系统日志、安全日志、应用程序日志等
Windows:
- 系统日志:
%SystemRoot%\System32\Winevt\Logs\System.evtx - 安全日志:
%SystemRoot%\System32\Winevt\Logs\Security.evtx - 应用程序日志:
%SystemRoot%\System32\Winevt\Logs\Application.evtx - PowerShell历史命令:
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
日志分析技巧
- 确定入侵的时间范围,以此为线索查找可疑日志
- 查找攻击者留下的后门文件作为线索
常用命令:
# 列出当天访问次数最多的IP
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
# 查看当天有多少个IP访问
awk '{print $1}' log_file|sort|uniq|wc -l
# 查看某一个页面被访问的次数
grep "/index.php" log_file | wc -l
# 查看每一个IP访问了多少个页面
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
# 将每个IP访问的页面数进行从小到大排序
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
# 查看某一个IP访问了哪些页面
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
# 去掉搜索引擎统计当天的页面
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
# 查看特定时间范围内有多少IP访问
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l
# 统计爬虫
grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq
# 统计浏览器
cat /www/logs/access.2019-02-23.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100
# IP统计
grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10
# 统计网段
cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200
# 统计域名
cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more
# 统计URL
cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more
# URL访问量统计
cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more
流量分析
常用工具:WireShark
WireShark 使用技巧
数据过滤
-
IP过滤:
ip.addr==192.168.111.169ip.src==192.168.111.1ip.dst==192.168.111.157
-
端口过滤:
tcp.port==21udp.port==53
-
协议过滤:
- 直接输入:
HTTP、HTTPS、SMTP、ARP等
- 直接输入:
-
请求方法过滤:
http.request.method=="POST"http.request.method=="GET"http.request.uri=="/flag.php"http contains flag(请求或响应中内容为flag)
-
组合过滤:
ip.addr==x.x.x.x && tcp.port==21tcp.port==21 or udp.port==53
数据统计
- 文件属性统计
- IP统计
- 端口统计:在菜单中选择Statistics,然后选择Conversation
搜索功能
Command + F弹出搜索框:
- Display Filter:显示过滤器
- Hex Value:搜索数据中十六进制字符位置
- String:字符串搜索
- Packet list:搜索关键字匹配的flag所在帧的位置
- Packet details:搜索关键字匹配的flag所包括数据的位置
- Packet bytes:搜索关键字匹配的内容位置
TCP 数据流追踪(Follow TCP Stream)
红色部分为客户的请求request,蓝色为服务端响应response
HTTP 分析
在菜单中选择Statistics,选择HTTP,然后选择Requests(可以过滤IP)
流量包修复
wireshark打开流量包后提示包异常的情况,通过在线工具修复:
http://f00l.de/hacking/pcapfix.php
USB 流量分析
MacOS上使用tshark:
tshark -r password.pcap -T fields -e usb.capdata > usbdata.txt
现成的轮子:
https://github.com/WangYihang/UsbKeyboardDataHacker
磁盘内存分析
工具
- EasyRecovery
- MedAnalyze
- FTK
- Elcomsoft Forensic Disk Decryptor
- Volatility
磁盘
常见的磁盘分区格式:
- Windows: FAT12 -> FAT16 -> FAT32 -> NTFS
- Linux: EXT2 -> EXT3 -> EXT4
FAT 主磁盘结构:
- 删除文件:目录表中文件名第一字节 e5
VMDK:
VMDK 文件本质上是物理硬盘的虚拟版,可以利用填充区域来隐藏数据
内存
- 解析 Windows / Linux / Mac OS X 内存结构
- 分析进程,内存数据
- 根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据
内存取证例题:
volatility基础用法:
python vol.py -f [内存文件] --profile=[配置文件] <插件>
常用命令:
# 扫描内存中的进程
python vol.py -f ../../../Downloads/suspicion/mem.vmem psscan
# 识别内存映像相关信息
python vol.py -f ../../../Downloads/suspicion/mem.vmem imageinfo
# 列出运行的进程
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 pslist
# 列举缓存在内存中的注册表
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 hivelist
# 扫描文件
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 filescan
# 将缓存文件导出
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 dumpfiles
# 转储出可寻址的内存数据
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 memdump -p 2012 -D ./outout
木马查杀与分析
WebShell查杀
- 工具:
- D盾
- 在线WebShell查杀:
- https://scanner.baidu.com/
- https://www.shellpub.com/
EXE木马
- 杀软病毒查杀&虚拟机断网分析(监控进程,监控网络,行为分析)
- 在线沙箱:
- 微步:https://s.threatbook.cn/
- QAX:https://sandbox.ti.qianxin.com/
- VT:https://www.virustotal.com/gui/home/upload
- 大圣云沙箱:https://mac-cloud.riskivy.com/detect?theme=vulbox
应急响应
进程分析
Linux
Gscan工具:https://github.com/grayddq/GScan
功能包括:
- 主机信息获取
- 系统初始化alias检查
- 文件类安全扫描
- 各用户历史操作类
- 进程类安全检测
- 网络类安全检测
- 后门类检测
- 账户类安全排查
- 日志类安全分析
- 安全配置类分析
- Rootkit分析
- WebShell类文件扫描
文件排查:
# 最近使用文件
find / -ctime -2
登录排查:
/etc/shadow密码登陆相关信息uptime查看用户登陆时间/etc/sudoerssudo用户列表
弱口令排查
进程排查:
w命令,查看用户及其进程- 分析开机自启程序/脚本:
/etc/init.d、~/.bashrc - 查看计划或定时任务:
crontab -l - 查看进程端口占用:
netstat -an、lsof
Windows
文件排查:
- 最近使用的文件:
C:\Documents and Settings\Administrator\RecentC:\Documents and Settings\Default User\Recent%UserProfile%\Recent
登录排查:
lusrmgr.msc查看账户变化net user列出当前登录账户wmic UserAccount get列出当前系统所有账户
弱口令排查
进程排查:
netstat -ano查看是否打开了可疑端口tasklist查看是否有可疑进程
开机启动项分析:
(ProfilePath)\Start Menu\Programs\Startup启动项msconfig启动选项卡gpedit.msc组策略编辑器
定时任务分析:
C:\Windows\System32\Tasks\C:\Windows\SysWOW64\Tasks\C:\Windows\tasks\schtaskstaskschd.msccompmgmt.msc
已启动的服务:services.msc
漏洞修复
信息泄露漏洞
Nginx目录遍历漏洞:
修改nginx配置文件,autoindex=off;
IIS 目录遍历漏洞:
在IIS的网站属性中,勾去"目录浏览"选项,重启IIS。
Apache 目录遍历漏洞:
打开Apache配置文件httpd.conf,查找"Options Indexes FollowSymLinks",修改为"Options -Indexes"(减号表示取消),保存退出,重启Apache。
敏感文件泄露:
删除svn、git、zip、rar等备份文件
SSRF
- 过滤返回信息,验证远程服务器对请求的响应
- 限制请求的端口为http常用的端口,比如,80,443,8080,8090
- 黑名单内网ip
- 禁用不需要的协议,仅允许http和https请求
注入漏洞
SQL注入、命令注入、模版注入等注入漏洞:
- 过滤注入漏洞所需要的关键字
- 采用预编译的方式进行SQL操作
- 设置命令执行白名单
- 严格编写正则
- 升级存在漏洞的版本
XSS
- 验证所有输入数据,有效检测攻击
- 对所有输出数据进行适当的编码
- 限制输入长度
CSRF
- 通过referer判断页面来源进行CSRF防护
- 重要功能点使用动态验证码进行CSRF防护
- 通过token方式进行CSRF防护(CSRF-Token)
文件上传漏洞
- 文件名随机重命名、目录随机
- 上传到静态不解析目录
- 文件上传白名单
- 设置单独的文件服务器
文件包含漏洞
- PHP:配置php.ini关闭远程文件包含功能(
allow_url_include = Off) - 严格检查变量是否已经初始化
- 严格编写正则(禁止../等特征字符串)
组件漏洞
Shiro:
- 升级到最新安全版本
- 修改默认key
Struts2:
- 升级到最新安全版本
Tomcat:
- 修改管理后台弱口令
- 避免被部署WAR包GetShell
Weblogic:
- 及时打补丁
Fastjson:
- 开启safeMode
- 升级到安全版本
Fastjson安全配置方式:
- 在代码中配置:
ParserConfig.getGlobalInstance().setSafeMode(true);
- 加上JVM启动参数:
-Dfastjson.parser.safeMode=true
- 通过fastjson.properties文件配置:
fastjson.parser.safeMode=true
安全配置与加固
端口安全
- 对外不开放高危端口,不启用无用的端口
- 只开放80、443、8080、8090等常规端口
- 如有需要ssh,ftp,mysql等数据库端口,需要排查弱口令后再对外外放
- 定期修改密码
- 检查是否存在未授权访问漏洞的端口
系统安全
- 及时打漏洞补丁
- 实施前面应急响应相关内容
密码安全
- 长度不少于8个字符
- 密码中同时存在大小写字母、数字和特殊符号
- 不存在于已有字典之中
- 定期修改密码
应用安全
-
FTP:
- 禁止匿名登录
- 修改Banner信息防止被识别
-
SSH:
- 是否禁用root登录
- 是否需要禁用密码连接
- 采用ssh密钥登录
-
VPN:
- 是否为最新安全版本
- 账户密码定期修改
-
数据库应用:
- 文件写权限
- 日志记录是否开启
- 账户密码弱口令排查