微点交流论坛
» 游客:  注册 | 登录 | 帮助

 

作者:
标题: 【QQ517826104】扯一下U盘病毒的防范……
点饭的百度空间
银牌会员




积分 2315
发帖 2236
注册 2007-11-30
#1  【QQ517826104】扯一下U盘病毒的防范……

QQ517826104
男, 17岁
http://hi.baidu.com/517826104/bl ... 9de2315243c156.html



上图是我的U盘……或者说跟我的U盘一样。在学校死念书,退化了。我那该死的创新论文就写这个,挺恶心的。上次Left同学好像问到WM_DEVICECHANGE的用法,在下面一起写上了。高手勿喷……


学校的电脑都很不太平,老师们的U盘东插西插,结果把病毒传的到处都是。偏偏那些病毒又做的垃圾,把U盘文件夹全隐藏起来然后见一个同名EXE。杀软删掉病毒之后就无视那写可怜的隐藏文件夹了(好像微点会自动修复隐藏属性)……然后老师就会以为文件被“吃掉了”。

扯点很挫但是比较现实的方案吧。

关闭自动播放,这个是必须的。组策略或者修改注册表

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutorun
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutorun


不再赘述……

扯一下是U盘的插入拦截。

可以编程进行监控插入操作,然后自动删掉一些autorun.inf什么的文件。360有这个监控功能。相应U盘的插入可以用WM_DEVICECHANGE消息进行相应,说说WM_DEVICECHANGE的用法。

首先是准备工作。貌似有些机器在插入设备的时候不会发送WM_DEVICECHANGE消息。把HKLM\SYSTEM\CurrentControlSet\Services\Cdrom的Autorun键值设为1,类型REG_DWORD。貌似就可以了。

接着是响应消息。简述VC的做法。

首先需要引用dbt.h,里面有需要的一些常量。

/*
* BroadcastSpecialMessage constants.
*/
#define WM_DEVICECHANGE 0x0219

然后创建一个窗口用来接收消息。接收到这个消息后,可以通过wParam判断是插入还是拔出。比如在WndProc里面这样写:

BOOL CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    //...省略其他消息处理

     case WM_DEVICECHANGE:
    //设备改动

         switch(LOWORD(wParam))
         {
             case DBT_DEVICEARRIVAL: //插入设备
                 MessageBox(hWnd,"插入设备。","U盘监控",0);
                return true;
             case DBT_DEVICEREMOVECOMPLETE: //移除设备
                 MessageBox(hWnd,"拔出设备。","U盘监控",0);
                return true;
             }
        default:
            return false;
     }
    return false;
}

这样可以捕捉到U盘的插入和拔出动作。不过其他设备的插入和拔出也会发送DeviceChange消息,比如光驱中放入了光盘。是否存在U盘就要自己检查了。当然WM_DEVICECHANGE的wParam还有其他的值。引用dbt.h中的内容:

/*
* The following messages are for WM_DEVICECHANGE. The immediate list
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
*
*/
#define DBT_DEVICEARRIVAL                0x8000  // system detected a new device (插入新硬件)
#define DBT_DEVICEQUERYREMOVE            0x8001  // wants to remove, may fail (发出移除请求,还没有删除)
#define DBT_DEVICEQUERYREMOVEFAILED      0x8002  // removal aborted (取消删除硬件)
#define DBT_DEVICEREMOVEPENDING          0x8003  // about to remove, still avail. (??)
#define DBT_DEVICEREMOVECOMPLETE         0x8004  // device is gone (硬件已成功移除)
#define DBT_DEVICETYPESPECIFIC           0x8005  // type specific event (??)

这样可以捕捉到关于硬件插入和移除等事件,下面的工作就是拦截之类的了……有兴趣的同学可以自己写写,比如用进程注入explorer.exe然后R3下Hook CreateProcess之类的就行。

再扯U盘的修复。

下面是一个简单的VBS脚本,可以自动删除U盘上的autorun.inf,然后恢复根目录所有的隐藏目录。

Dim colDisks, objDisk
On Error Resume Next   
Set colDisks = objFSO.Drives   
For Each objDisk In colDisks
With objDisk
If .IsReady And .DriveType = Removable Then '是移动存储设备
If UCase(Left(.Path, 1) <> "A") Then '跳过A盘。很恶心
    DoEvents
    Dim szPath, szName

     szPath = .RootFolder '只检查根目录

    SetAttr szPath & "autorun.inf",vbNormal '删除autorun.inf
    Kill szPath & "autorun.inf"

     szName = Dir(szPath, vbDirectory + vbHidden + vbSystem + vbReadOnly)

    Do While szName <> ""
        If szName <> "." And szName <> ".." Then
            If ((GetAttr(szPath & szName) And vbDirectory) <> 0) And _
                 ((GetAttr(szPath & szName) And vbHidden) <> 0) Then '是否隐藏目录?

                '去掉隐藏属性
                SetAttr szPath & szName, vbNormal
               
                '删除同名exe
                SetAttr szPath & szName & ".exe",vbNormal
                Kill szPath & szName & ".exe"

                '删除同名scr。目前没有见到SCR后缀的。估计会有……
                SetAttr szPath & szName & ".scr",vbNormal
                Kill szPath & szName & ".scr"
            End If
        End If

         szName = Dir
    Loop
End If
End If
End With   
Next

最后是恶心的免疫。下面是的批处理在每个磁盘根目录创建所谓的“免疫目录”。其中用了点猥琐的手段,创建的免疫目录在FAT32文件系统也不能用rd /s /q命令移除。我记得磁碟机是会调用这个命令删掉免疫目录的。

创建

::::::::::::::::::::::::::::::::::::::::::::
::   By ChiChou
::::::::::::::::::::::::::::::::::::::::::::

@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
   cacls "%%i:\folder.htt" /E /C /P everyone:F
   cacls "%%i:\autorun.inf" /E /C /P everyone:F
   cacls "%%i:\desktop.ini" /E /C /P everyone:F
   del /f /q "%%i:\folder.htt"
   del /f /q "%%i:\autorun.inf"
   del /f /q "%%i:\desktop.ini"
   md "%%i:\folder.htt"
   md "%%i:\autorun.inf"
   md "%%i:\desktop.ini"
   attrib "%%i:\folder.htt" +s +r +h
   attrib "%%i:\autorun.inf" +s +r +h
   attrib "%%i:\desktop.ini" +s +r +h
   md "%%i:\folder.htt\...\"
    md "%%i:\autorun.inf\...\"
   md "%%i:\desktop.ini\...\"
    md "%%i:\folder.htt\...\"
   md "%%i:\autorun.inf\...\"
    md "%%i:\desktop.ini\...\"
   cacls "%%i:\folder.htt" /E /C /P everyone:N
   cacls "%%i:\autorun.inf" /E /C /P everyone:N
   cacls "%%i:\desktop.ini" /E /C /P everyone:N
)
del /f /q "%0"

移除

::::::::::::::::::::::::::::::::::::::::::::
::   By ChiChou
::::::::::::::::::::::::::::::::::::::::::::

@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
   cacls "%%i:\folder.htt" /E /C /P everyone:F
   cacls "%%i:\autorun.inf" /E /C /P everyone:F
   cacls "%%i:\desktop.ini" /E /C /P everyone:F
    rd /s /q "%%i:\folder.htt\...\"
    rd /s /q "%%i:\autorun.inf\...\"
    rd /s /q "%%i:\desktop.ini\...\"
    rd /s /q "%%i:\folder.htt\safe..\"
    rd /s /q "%%i:\autorun.inf\safe..\"
    rd /s /q "%%i:\desktop.ini\safe..\"
    rd /s /q "%%i:\folder.htt\safe..\safe..\"
    rd /s /q "%%i:\autorun.inf\safe..\safe..\"
    rd /s /q "%%i:\desktop.ini\safe..\safe..\"
    rd /s /q "%%i:\folder.htt"
    rd /s /q "%%i:\autorun.inf"
    rd /s /q "%%i:\desktop.ini"
)
del /f /q "%0"

废话完毕。


百度空间 笑侃人生
U盘病毒惯用伎俩—隐藏文件夹 微点对于未知伪文件夹病毒防御机制是?

清除病毒后很多用户都找不到自己的文件夹 被病毒隐藏的正常文件夹微点能否成功还原?(修改文件夹的属性为不隐藏)

建议:
把防御病毒的时间提前 在插上U盘是后台就自动做了,并修复文件夹,然后给用户一个提示 而不是用户双击后提示病毒,这个时间差给普通用户影响很大
通过某些特征(如大小,文件夹名称 文件名综合判断)
发现有隐藏文件夹的行为 就可以直接判断 符合病毒伪装的特征报为未知病毒然后比对白名单 排除误报
文件夹隐藏,该文件夹的名称和某个.exe文件的文件名相同并且文件大小小于2Mb 基本上可以判断了

我的意见:
如果一个未知程序 除了恶意隐藏所有文件 其他什么坏事都不干 微点没发现病毒行为 那用户就找不到自己的文件了
干脆微点在注册表保护里面增加 显示/隐藏所有文件和文件夹

※ ※ ※ 本文纯属【点饭的百度空间】个人意见,与【 微点交流论坛 】立场无关※ ※ ※

你的微笑 is 微点的骄傲!
http://hi.baidu.com/new/micropoint
2009-9-8 20:38
查看资料  发送邮件  访问主页  发短消息   编辑帖子
jackybaby
中级用户





积分 330
发帖 321
注册 2006-12-31
来自 sz
#2  

好像不用这么麻烦吧? 如果是防U盘感染主机,一个策略就行了(?:\*.*  不允许)。

※ ※ ※ 本文纯属【jackybaby】个人意见,与【 微点交流论坛 】立场无关※ ※ ※

微点+组策略,不知毒滋味。
2009-9-9 09:33
查看资料  发送邮件  发短消息   编辑帖子
yangliu2000
中级用户





积分 209
发帖 209
注册 2009-1-13
#3  

我的意见:
如果一个未知程序 除了恶意隐藏所有文件 其他什么坏事都不干 微点没发现病毒行为 那用户就找不到自己的文件了
干脆微点在注册表保护里面增加 显示/隐藏所有文件和文件夹

好主意!

※ ※ ※ 本文纯属【yangliu2000】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
2009-9-10 12:06
查看资料  发送邮件  发短消息   编辑帖子



论坛跳转:

可打印版本 | 推荐 | 订阅 | 收藏


[ 联系我们 - 东方微点 ]


北京东方微点信息技术有限责任公司 福建东方微点信息安全有限责任公司

闽ICP备05030815号