日志分析

基础日志分析


Web服务器日志

日志文件位置

  • IIS

    • Windows Server 2003 iis6日志路径:
      C:\Windows\System32\LogFiles
    • Windows Server 2008 R2、2012、2016、2019 iis7以上日志路径:
      C:\inetpub\logs\LogFiles
  • 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
  • nginx

    • /usr/local/nginx/logs
  • 常见格式内容

    • 访问的主机IP
    • 请求时间
    • 请求方法、请求的URL、采用的协议
    • HTTP状态码

基础分析方法

  • 访问频率分析

    • 目录扫描

      • 扫描的基本都是一些备份文件、敏感信息、后台目录、配置文件,一般是Head方法,状态码多数为404
    • 盲注

      • 常见盲注函数

        • sleep\mid\left\right\ord\ascii
      • 日志中请求的URL或者POST的内容每次大体都差不多,只改变个别字符。整个过程修改的所有ascii 码就是最后跑出来的字段内容

    • 账户密码暴破

      • 短时间针对某一账号发起多次请求,返回值基本相同,暴破失败,长度xxx,暴破成功,长度xxxxx
    • Web漏洞扫描

      • 根据User-Agent来判断
      • 访问IP基本是一个VPS主机
  • 特征字符串分析

    • SQL注入漏洞

      • 万能密码

        • admin' or '1'='1
        • username = secpulse'=' password = secpulse'='
        • ffifdyop
      • 报错注入

        • floor()、extractvalue()、updatexml()、geometrycollection()、multipoint()、polygon()、multipolygon()、linestring()、multilinestring()、exp()
      • 关键字特征

        • 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 返回正常
    • XSS漏洞

- JS标签

    <script> <a> <p> <img> <body> <button> <var> <div> <iframe> <object> <input> 
    <select> <textarea> <keygen> <frameset> <embed> <svg> <math> <video> <audio>

- JS属性

  - formaction action href xlink:href autofocus src content data
  • 文件上传漏洞

    • multipart/form-data(表示该请求是一个文件上传请求)
    • 存在boundary字符串(作用为分隔符,以区分POST数据
    • 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
  • 事件日志ID

日志分析技巧

第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。

第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。

1、列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
​
2、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l
​
3、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
​
4、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
​
5、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
​
6、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
​
7、去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
​
8、查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l

9、统计爬虫
grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq

10、统计浏览器
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  

11、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

12、统计网段
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 

13、统计域名
cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more 

14、 统计URL
cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more  

15、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.169,ip.src== 192.168.111.1,ip.dst== 192.168.111.157

端口过滤:

tcp.port==21、udp.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==21、tcp.port==21 or udp.port==53

数据统计

文件属性统计:

IP统计:

端口统计:
在菜单中选择Statistics,然后选择Conversation,就可以统计出所在数据包中所有通信IP地址,包括IPV4和IPV6,点击TCP可以看到所有TCP会话的IP、端口包括数据包数等信息,且可以根据需求排序、过滤数据。UDP同理。

搜索功能

Command + F弹出搜索框,
Display Filter:显示过滤器,用于查找指定协议所对应的帧。
Hex Value:搜索数据中十六进制字符位置。
String:字符串搜索。Packet list:搜索关键字匹配的flag所在帧的位置。Packet details:搜索关键字匹配的flag所包括数据的位置。Packet bytes:搜索关键字匹配的内容位置。

此处用的是Packet details,搜索关键字符串flag{,实际蓝队中可以搜索一些危险函数、漏洞特征字符串等。

TCP 数据流追踪(Follow TCP Stream)


其中,红色部分为客户的请求request,蓝色为服务端响应response

HTTP 分析

在菜单中选择Statistics,选择HTTP,然后选择Requests(可以过滤IP),就可以统计出HTTP会话中Request的域名,包括子域名。

流量包修复

wireshark打开流量包后提示包异常的情况,通过在线工具修复:

http://f00l.de/hacking/pcapfix.php

USB 流量分析

MacOS上使用tshark,需要安装wireshark到系统环境变量中

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 文件本质上是物理硬盘的虚拟版,也会存在跟物理硬盘的分区和扇区中类似的填充区域,我们可以利用这些填充区域来把我们需要隐藏的数据隐藏到里面去,这样可以避免隐藏的文件增加了 VMDK 文件的大小(如直接附加到文件后端),也可以避免由于 VMDK 文件大小的改变所带来的可能导致的虚拟机错误。而且 VMDK 文件一般比较大,适合用于隐藏大文件。

内存

解析 Windows / Linux / Mac OS X 内存结构
分析进程,内存数据
根据题目提示寻找线索和思路,提取分析指定进程的特定内存数

内存提取导图

来源:https://wiki.ffffffff0x.com/1earn/security/blueteam/bi-ji/nei-cun-qu-zheng

内存取证例题

volatility基础用法:

python vol.py -f [内存文件] --profile=[配置文件] <插件>
扫描内存中的进程:
python vol.py -f ../../../Downloads/suspicion/mem.vmem psscan


imageinfo:识别内存映像相关信息(包括了配置文件类型、处理器数量、文件类型、文件日期与时间等等)

--info参数来查看Volatiliity已经添加的profile和插件等信息
kdbgscan这个插件可以扫描文件的profile的值:

pslist可以用来列出运行的进程:
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 pslist

如果Exit 那一栏有列出时间,说明进程已经结束
hivelist用来列举缓存在内存中的注册表:

filescan,扫描文件:

文件很多,可以输出重定向到文件中,方便分析。
dumpfiles,将缓存文件导出
更多操作,官方文档:
https://github.com/volatilityfoundation/volatility/wiki/Command-Reference
下面是解题过程:
通过pslist插件发现有TrueCrypt.exe进程,

推测题目所给的另一个文件是使用TrueCrypt进行加密了的。且进程没有退出,加密的密钥有可能就在进程中,将该进程作为文件导出。
memdump,转储出可寻址的内存数据:
python vol.py -f ../../../Downloads/suspicion/mem.vmem --profile=WinXPSP3x86 memdump -p 2012 -D ./outout
得到2012.dmp
TrueCrypt进行加密,采用Elcomsoft Forensic Disk Decryptor软件进行解密。

暴破出加密的key:

BEGIN KEYS SEARCH
Progress: 100% [   89  /    89 MB]

END SEARCHING

Search result:
Algorithm:'TrueCrypt' Volume Master Keys
Key data (hex): 030000006daa0cef6be318bd75080ec053287f74bcacad0ed9636a058388048263c1799333ab2b30fc0cc872f31bad043be78119ff4fd2960fc6203c70697059544326930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e1c11ec5cfcd0921a21fb083ba9b7c5f6ac12518526001fad6bfafa114bbd6c5dddbc41923571d685d95a968bed6693541cc4d95831745aaa49b842612ce32400000000000002000000000000003c0100000000

然后挂载到本地磁盘,得到flag

木马查杀与分析

常见的:webshell与exe

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

1、主机信息获取
2、系统初始化alias检查
3、文件类安全扫描
  3.1、系统重要文件完整行扫描
  3.2、系统可执行文件安全扫描
  3.3、临时目录文件安全扫描
  3.4、用户目录文件扫描
  3.5、可疑隐藏文件扫描
4、各用户历史操作类
  4.1、境外ip操作类
  4.2、反弹shell类
5、进程类安全检测
  5.1、CUP和内存使用异常进程排查
  5.2、隐藏进程安全扫描
  5.3、反弹shell类进程扫描
  5.4、恶意进程信息安全扫描
  5.5、进程对应可执行文件安全扫描
6、网络类安全检测
  6.1、境外IP链接扫描
  6.3、恶意特征链接扫描
  6.4、网卡混杂模式检测
7、后门类检测
  7.1、LD_PRELOAD后门检测
  7.2、LD_AOUT_PRELOAD后门检测
  7.3、LD_ELF_PRELOAD后门检测
  7.4、LD_LIBRARY_PATH后门检测
  7.5、ld.so.preload后门检测
  7.6、PROMPT_COMMAND后门检测
  7.7、Cron后门检测
  7.8、Alias后门
  7.9、SSH 后门检测
  7.10、SSH wrapper 后门检测
  7.11、inetd.conf 后门检测
  7.12、xinetd.conf 后门检测
  7.13、setUID 后门检测
  7.14、8种系统启动项后门检测
8、账户类安全排查
  8.1、root权限账户检测
  8.2、空口令账户检测
  8.3、sudoers文件用户权限检测
  8.4、查看各账户下登录公钥
  8.5、账户密码文件权限检测
9、日志类安全分析
  9.1、secure登陆日志
  9.2、wtmp登陆日志
  9.3、utmp登陆日志
  9.4、lastlog登陆日志
10、安全配置类分析
  10.1、DNS配置检测
  10.2、Iptables防火墙配置检测
  10.3、hosts配置检测
11、Rootkit分析
  11.1、检查已知rootkit文件类特征
  11.2、检查已知rootkit LKM类特征
  11.3、检查已知恶意软件类特征检测
12.WebShell类文件扫描
  12.1、WebShell类文件扫描

文件排查

最近使用文件

  • find / -ctime -2

登录排查

  • /etc/shadow 密码登陆相关信息
  • uptime 查看用户登陆时间
  • /etc/sudoers sudo用户列表
  • 弱口令排查

进程排查

  • w 命令,查看用户及其进程

  • 分析开机自启程序/脚本

    • /etc/init.d
    • ~/.bashrc
  • 查看计划或定时任务
    crontab -l

  • netstat -an / lsof 查看进程端口占用

Windows

文件排查

最近使用的文件:

C:\Documents and Settings\Administrator\Recent
C:\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\
    • schtasks
    • taskschd.msc
    • compmgmt.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

  • 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
  • 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
  • 黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
  • 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://,dict://等引起的问题。

注入漏洞

SQL注入、命令注入、模版注入等注入漏洞

  • 过滤注入漏洞所需要的关键字,前提是不能影响正常的业务功能。
  • 采用预编译的方式进行SQL操作
  • 设置命令执行白名单
  • 严格编写正则
  • 升级存在漏洞的版本

XSS

  • 验证所有输入数据,有效检测攻击;
  • 对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器执行;
  • 限制输入长度

CSRF

  • 通过referer判断页面来源进行CSRF防护,该方式无法防止站内CSRF攻击及referer字段伪造。
  • 重要功能点使用动态验证码进行CSRF防护。
  • 通过token方式进行CSRF防护:(CSRF-Token)

文件上传漏洞

  • 文件名随机重命名、目录随机
  • 上传到静态不解析目录
  • 文件上传白名单
  • 设置单独的文件服务器

文件包含漏洞

  • PHP:配置php.ini关闭远程文件包含功能(allow_url_include = Off)
  • 严格检查变量是否已经初始化
  • 严格编写正则(禁止../等特征字符串)

Shiro、Weblogic、Fastjson等组件漏洞

  • Shiro:升级到最新安全版本,修改默认key
  • Struts2:升级到最新安全版本
  • Tomcat:修改管理后台弱口令,避免被部署WAR包GetShell
  • Weblogic:及时打补丁
  • Fastjson:开启safeMode,升级到安全版本
    A.在代码中配置
    ParserConfig.getGlobalInstance().setSafeMode(true);
    B.加上JVM启动参数
    -D fastjson.parser.safeMode=true
    如果有多个包名前缀,用逗号隔开
    C.通过fastjson.properties文件配置。
    通过类路径的fastjson.properties文件来配置,配置方式如下:
    fastjson.parser.safeMode=true

fastjson在1.2.68及之后的版本中引入了safeMode,配置safeMode后,无论白名单和黑名单,都不支持autoType,可一定程度上缓解反序列化Gadgets类变种攻击(关闭autoType注意评估对业务的影响)

安全配置与加固

端口安全

  • 对外不开放高危端口,不启用无用的端口,只开放80、443、8080、8090等常规端口。
  • 如有需要ssh,ftp,mysql等数据库端口,需要排查弱口令后再对外外放,并且定期修改密码
  • 检查是否存在未授权访问漏洞的端口

系统安全

  • 及时打漏洞补丁
  • 前面应急响应相关内容

密码安全

  • 长度不少于8个字符
  • 密码中同时存在大小写字母、数字和特殊符号
  • 不存在于已有字典之中
  • 定期修改密码

应用安全

  • FTP 禁止匿名登录、修改Banner信息防止被识别
  • SSH 是否禁用root登录、是否需要禁用密码连接、采用ssh密钥登录
  • VPN 是否为最新安全版本、账户密码定期修改
  • 数据库应用 文件写权限、日志记录是否开启、账户密码弱口令排查

参考资料

CTF-MISC-日志分析
应急中Web日志分析
wireshark技巧
磁盘内存分析 CTF-WIKI
Fastjson漏洞修复参考

点击收藏 | 8 关注 | 3
  • 动动手指,沙发就是你的了!
登录 后跟帖