USB自動実行ウイルス対策
最近、私の周辺でUSBの自動実行で拡散するウイルスが流行った模様。
ということで、自動実行に関する整理。
自動実行を無効にする
基本は、この通り。
よりセキュリティを高めるための設定: 自動再生を無効にする
抜粋すると
Vista は、Microsoftの手順通り Windows 2000 / XP Professional / Server 2003 は、「gpedit.msc」で 「gpedit.msc」のない「XP Home」等では、上記サイトの添付レジストリで
なお、「gpedit.msc」は、スタートメニューの「ファイル名を指定して実行」で実行する。
添付のレジストリで変更する場合は、xp-disable-autorun.regをダブルクリックで実行です。
自動実行がなくなるので
CDの自動実行は、右クリック・メニューに維持されるようですが、他が不明。
対象のドライブ直下にある、Autorun.infのopen指定を実行するだけだけど、
Autorun.infを開いて、対象のプログラムを探すのは、面倒。
ということで、それを行うWSHのJScriptを書いてみた。
以下を、autorun.jsといった名前で保存してください。
// Autorun var fso = new ActiveXObject('Scripting.FileSystemObject'); function GetPath(fullPath) { var nPos = -1; while(fullPath.indexOf("\\", nPos + 1) > 0) nPos = fullPath.indexOf("\\", nPos + 1); var ret = fullPath.substr(0, nPos + 1); if(nPos < 0) ret = ""; return ret; } function GetProfile(strSection, strKey, varDefault, strIniPath) { var ret; // Initialize if(strSection == null || strKey == null) { ret = ""; } else { ret = varDefault; } // var fso; var f; var strLine, strS, strK; var fSectionFound; var nKsep; var reLTrim = /^\s*(\S.*)$/, reRTrim = /^(.*\S)\s*$/, reSec = /^\[(.+)\]/; var reDq = /^"(.*)"$/, reEsc = /\\/g, reTarSec, reTarKey; // fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.OpenTextFile(strIniPath); fSectionFound = false; if(strSection) reTarSec = new RegExp("^" + strSection.replace(reEsc, "\\\\") + "$", "i"); if(strKey) reTarKey = new RegExp("^" + strKey.replace(reEsc, "\\\\") + "$", "i"); while(!f.AtEndOfStream) { strLine = f.ReadLine().replace(reLTrim, "$1"); if(strLine.length > 0) { // Control inside target section or not. nKsep = strLine.indexOf("="); if(strLine.match(reSec)) { strS = strLine.replace(reSec, "$1"); if(strSection == null) { ret += strS + "\n"; } else { fSectionFound = (strS.match(reTarSec) != null); } } else if(fSectionFound && nKsep > 0) { strK = strLine.substr(0, nKsep).replace(reRTrim, "$1"); if(strKey == null) { ret += strK + "\n"; } else if(strK.match(reTarKey)) { ret = strLine.substr(nKsep + 1).replace(reLTrim, "$1").replace(reRTrim, "$1"); if (ret.match(reDq)) { ret = ret.replace(reDq, "$1"); } break; } } } } f.Close(); f = null; //fso = null; return ret; } var FILE = "Autorun.inf"; var SECTION = "Autorun"; var OPEN = "open"; var SHELL = "shell\\"; var reSHELL = /^shell\\/i; var lenSHELL = 7; var COMMAND = "\\command"; var PRINT = "print"; var wsh = new ActiveXObject('WScript.Shell'); main() function help(path) { // Read Settings WScript.Echo("Target File : " + path); WScript.Echo("Target Program : " + GetProfile(SECTION, OPEN, "", path)); WScript.Echo("Target Icon : " + GetProfile(SECTION, "icon", "", path)); var strAllKey, strKey var pos strAllKey = GetProfile(SECTION, null, null, path); pos = strAllKey.indexOf("\n"); while(pos > 0) { strKey = strAllKey.substr(0, pos); if(strKey.match(reSHELL) && strKey.indexOf("\\", lenSHELL) < 0) { WScript.Echo("Target Shell : " + strKey.substr(lenSHELL - 1) + "=" + GetProfile(SECTION, strKey, "", path) + "=" + GetProfile(SECTION, strKey + COMMAND, "", path)); } strAllKey = strAllKey.substr(pos + 1); pos = strAllKey.indexOf("\n"); } } function runCommand(path, cmd) { var strKey, strCommand if(cmd == null) { strKey = OPEN; } else { strKey = SHELL + cmd + COMMAND; } strCommand = GetProfile(SECTION, strKey, "", path); if(strCommand && strCommand.length > 0) { wsh.Exec(strCommand); } else { WScript.Echo(strKey + " Command Not Found!"); } } function main() { // initialize var path, cmd, cd, fname = FILE; if(WScript.Arguments.length < 1) { WScript.Echo("args : (target path) [{ " + PRINT + " | (shell command) }]"); return; } path = WScript.Arguments.item(0); if(!fso.FolderExists(path)) { cd = GetPath(path); fname = path.substr(cd.length); if(cd.length == 0) cd = "."; path = cd; } cmd = null; if(WScript.Arguments.length > 1) { cmd = WScript.Arguments.item(1); } cd = wsh.CurrentDirectory; wsh.CurrentDirectory = path; if(cmd && cmd.match(PRINT)) { help(fname); } else { runCommand(fname, cmd); } wsh.CurrentDirectory = cd; }
で、このファイルを「C:\Documents and Settings\(ユーザID)\SendTo」に入れて、
Autorun.infを右クリック、「送る」>「autorun.js」と選らんで起動するとか。
デスクトップに置いて、対象の「Autorun.inf」や「D:」といったドライブ名を、
ドラッグ&ドロップするとか。
ま、ご自由に。