基本信息
报告名称:某Keylogger分析
报告更新日期:2013/06/25
样本发现日期:未知
样本类型:键盘记录
样本文件大小:1587712 字节
样本文件MD5 校验值:56263331B8A63334C467B43538E5873C
样本文件SHA1 校验值:74479FDE18AD3CD31E84F3DAF5555FE9EFEFB9D9
壳信息: 无壳
可能受到威胁的系统:Windows
相关漏洞:无
简介
Keylogger.exe是一个键盘记录程序,用于记录用户输入的信息并保存到文件
被感染系统及网络症状
1> 进程中出现debugsrv.exe进程
2> %SystemRoot%下出现r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]文件夹
3> 注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下出现名叫MSWDebugServer的键值
文件系统变化
创建目录:
%SystemRoot%\r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]
创建文件:
%SystemRoot%\r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]\debugsrv.exe
%SystemRoot%\r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]\debugsrv.exe_bug.log
注册表变化
在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下创建键值MSWDebugServer
网络症状
无
详细分析/功能介绍
样本Keylogger.exe为载体,被运行后,会进行如下操作:
1> 查找进程中是否存在debugsrv.exe进程,存在则将其终止
2> 在%SystemRoot%下创建目录r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]并将其属性设置为隐藏
3> 在%SystemRoot%\r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]下创建文件debugsrv.exe并从自身资源中获取数据并将其写入到文件
4> 运行debugsrv.exe
5> 创建进程install.ceo并等待其结束
样本debugsrv.exe为键盘记录主体,被运行后,会进行如下操作:
1> 创建一个名叫MSCDBGSV1的自动事件内核对象,用于防止进程多开
2> 创建一个互斥量内核对象,用于线程同步
3> 在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下创建键值MSWDebugServer = "debugsrv.exe的完整路径",用于启动启动后自动启动
4> 创建线程,线程主要用于获取剪贴板的数据,获取数据后并打开debugsrv.exe_bug.log文件,不存在则创建,将获取的剪贴板数据加密后(原始数据加上0xA)写入文件
5> 安装全局键盘钩子,用于截获用户输入加密(原始数据加上0xA)后并写入文件debugsrv.exe_bug.log
预防及修复措施
手动修复:
1> 结束进程debugsrv.exe
2> 删除%SystemRoot%\r_GUID[F481B223-3705-45B3-B9AB-C0D9A3FDEBB4]目录及目录中的文件
3> 删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下键值MSWDebugServer
程序通过载体Keylogger.exe在自身资源中获得主体的二进制数据,并将其写入到磁盘创建的文件中,然后主体debugsrv.exe通过全局键盘钩子与一个线程分别获取用户输入与剪贴板数据解密后写入到debugsrv.exe_bug.log文件中
记录文件解密代码:
// Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
FILE *lpFile = _tfopen(TEXT("debugsrv.exe_bug.log"), TEXT("r"));
if (NULL == lpFile)
_tprintf(TEXT("File open failure!\r\n"));
TCHAR lpBuffer[1024];
while (1)
{
_fgetts(lpBuffer, _countof(lpBuffer), lpFile);
for (int nIndex = 0; nIndex < _tcslen(lpBuffer); nIndex++)
lpBuffer[nIndex] -= 0xa;
_fputts(lpBuffer, stdout);
if (feof(lpFile))
break;
}
fclose(lpFile);
return 0;
}
下载样本及idb(密码:virus):
http://pan.baidu.com/share/link?shareid=1537250711&uk=4012944288