目录
[案例一:ELK 搭建使用-导入文件&监控日志&语法筛选](#案例一:ELK 搭建使用-导入文件&监控日志&语法筛选)
[案例二:Yara 规则使用-规则检测&分析特征&自写规则](#案例二:Yara 规则使用-规则检测&分析特征&自写规则)
案例一:ELK 搭建使用-导入文件&监控日志&语法筛选
该软件是专业分析日志的工具,但是不支持安全软件的分析
这里我是在kali中搭建的
搭建参考文章:(第一篇成功,第二篇呢可能是国外的docker关闭了未成功)
ELK详细搭建流程_elk搭建-CSDN博客 (本地搭建)
5分钟快速安装ELK(一)(docker搭建)
安装完成的界面
三种模式
选择日志上传
上传文件
导入
命名并导入
上传完成以后去查看
可以根据不同类别去分类查看
IP
时间戳
ua头
这里看到呢ua头有个sqlmap直接定位
搜索特征字符不是单独出现,需要在前后加上*
还可以自动加入机器,自动化进行分析,可以自己研究一下,主要是了解日志平台的分析
案例二:Yara 规则使用-规则检测&分析特征&自写规则
项目地址
https://github.com/VirusTotal/yara
部分规则: https://github.com/Yara-Rules/rules
基本使用
检测挖矿病毒
yara需要借助规则去判断,规则直接下载好
yara64.exe 规则 -r 可疑程序/或者文件夹
根据规则所以就得对大概木马类型做出判断
通过帮助文档查看
检测勒索病毒
检测cs木马,没检测到,这里是因为我的cs版本比较高,而项目规则比较老,导致匹配不到
自写Yara-cs规则
可以自己根据需求去写文件进行判断,需要提取特征,根据特征的共同性去判断。
写规则的话,根据两个不同的ip和端口绑定的cs马,通过010editer判断不同程序的共同特征
这里是我自己写的,没那么多规律可言,只是简单判断,正常的话根据文件头,关键字,协议,域名等等来进行编写
我准备了三个cs文件,1个是cs4.0 32位,还有两个cs4.5 32 位 64位
两个特征
第三个
第四个
编写规则
-Yara 规则内容支持字符串、正则表达式、十六进制进行匹配。
字符串:定义一个变量 $a = " 字符串内容 "
正则表达式:定义一个变量 $a = / 正则表达式内容 /
十六进制:定义一个变量 a = { 十六进制内容 } -Yara 规则条件 and :与 or :或 not :非 all of them :所有条件匹配即告警 any of them :有一个条件匹配即告警 a and $b and c : abc 同时匹配即告警 (a and $b) or $c :匹配 a 和 b 或 c 即告警
按照如下实例写出规则,同时匹配四个规则就报警
rule csshell_check
{
meta:
author = "xiaojiesec"
description = "test check"
date = "2024-09"
strings:
$a = "MZ"
$b = "_set_invalid_parameter_handler"
$c = "KERNEL32.dll"
$d = "msvcrt.dll"
condition:
all of them
}
把不同类型的木马放在一个文件夹下
统一进行检测,只有cs后门被检测了出来
自写Yara-挖矿规则
这里就规范一点从文件头,关键字,协议,域名四个角度切入
文件头
这里可以写成字符串的MA,也可以写成16进制的{4D 5A}
关键字
这里就根据文件命名,xmrig进行搜索,这里切换成text进行搜索,不然搜索不到
协议
搜索资料,挖矿病毒常见协议位stratum和xmr协议
搜索xmr也能找到,但是都是文件名在干扰,忽略
域名这里其实没有找到,但是有一个字符串pool,出现了很多次
检测
自写Yara-php内存马规则
这里我觉得内存马的编写确实有问题,一是没办法从多个样本分析,只有一个idea,或者phpstudy环境,而且感觉不能确定唯一性,只做简单了解即可
下面这篇文章介绍过使用php内存马
第146天:内网安全-Web权限维持&各语言内存马&Servlet-api类&Spring类&Agent类_第146天web权限维持-内存马-CSDN博客
这里介绍过查杀
第162天: 应急响应-网站入侵篡改指南&Webshell 内存马查杀&漏洞排查&时间分析_东方通webshell 日志-CSDN博客
要抓取内存马,首先需要把内存包给导出来,进行分析
通过pcdump,把这个进程给进行导出
使用命令
procdump.exe -accepteula -ma 进程名 文件名.dmp
procdump.exe -accepteula -ma phpstudy.exe php.dmp
首先常见的eval
因为这个php内存马是你删除就立刻上传文件,应该涉及到sleep,条件竞争,以及file文件上传,直接搜php函数搜索不到,其实我也不是很理解
就根据这三个函数进行尝试
rule _checkphp
{
meta:
author = "xiaojiesec"
description = "test check"
date = "2024-09"
strings:
$a = "eval"
$b = "file"
$c = "sleep"
condition:
all of them
}
确定进程号
通过进程号检测
但是这里规则写的不好,检测别的进程号也能够检测到,主要是不理解为什么函数不出现
下面是ai写的也没用,根本搜索不到关键字,了解一下工具的使用,以及利用进程号分析
rule PHP_Memory_Webshell_DynamicWrite {
meta:
description = "Detects PHP scripts that attempt to dynamically write webshell code to a file"
author = "Your Name"
version = "1.0"
date = "YYYY-MM-DD"
strings:
$ignore_user_abort = "ignore_user_abort(true);"
$set_time_limit = "set_time_limit(0);"
$unlink = "@unlink(__FILE__);"
$eval_code = "<?php @eval($_POST\['c'\]); ?>"
$file_put_contents = "file_put_contents"
$usleep = "usleep"
condition:
$ignore_user_abort and
$set_time_limit and
$unlink and
$file_put_contents and
$usleep and
# This is a heuristic to check for the eval code being written to a file
# Note: This is not foolproof, as the actual code written to the file might vary
# But it gives us a good indication of the intent
# We use a wildcard to match the variable assignment and loop structure
# which are likely to be present in such scripts
(
# Matching the file variable assignment
/\$file\s*=\s*['"].+['"];/ and
# Matching the code assignment
/\$code\s*=\s*['"].+<?php\s*@eval\(\$_POST\['c'\]\);\s*>.+['"];/ and
# Matching the while loop structure
/while\s*\(1\)\s*\{/
)
}
自写Yara-java内存马规则
写在前面这里我发现小迪师傅讲的有一点点问题,我发现没上传内存马,用小迪的程序检测也能够检测出来,真尴尬啊,我也只是简单复现了一下
注入两个不同的内存马
把idea的内存包导出,这个过程会比较慢,因为java会创建虚拟机
先分析这个ico后缀的
发现他们两个有相同的前缀 org.apache.coyote 查的时候可能输入完整的查不到,可以只查一部分,就像java中类的概念一样
搜索
在分析特殊之处 TimeZoneSerializer
就根据这两条这一个判断gsl内存马
rule java_chechk
{
meta:
author = "xiaojiesec"
description = "test check"
date = "2024-09"
strings:
$a = "org.apache.coyote"
$b = "TimeZoneSerializer"
condition:
all of them
}
存在gsl内存马
判断别的没有
分析完这个分析一下刚才上传了一个lister 一个filter
org.apache.jasper
还有另外一个相同的类 org.apache.jsp
同时存在判断有内存马
rule java_chechk
{
meta:
author = "xiaojiesec"
description = "test check"
date = "2024-09"
strings:
$a = "org.apache.coyote"
$b = "TimeZoneSerializer"
condition:
all of them
}
判断结果
判断别的进程的结果
但是这个规则总觉得有很多问题,只是简单了解了一下