こんにちは、本日は近年のマルウェア多用するLoL攻撃のうち、PowerShellを用いた悪用手法について検証してみました。
目次
LoL攻撃とは?
Living-Off-The-Land-Attack というのが正式名称でして、Windowsなどに標準インストールされているアプリケーション (PowerShell, cmd)などを利用した攻撃のことです。
攻撃者にとってのメリットは、Windowsの標準アプリケーションを利用する攻撃なので、ウイルス対策ソフトで検知しにくいということです。
検証環境
Windows 10 Enterprise
検証
今回検証するPowerShellの仕様は、Windows10 PCにおいて、PowerShellを起動引数なしで起動すると特定のファイルを実行してしまうというものです。
特定のファイルとは
下記のディレクトリに存在する「Get-Variable.」で始まるファイルです。
%LOCALAPPDATA%\Microsoft\WindowsApps¥Get-Variable.*
Get-Variable.exeを配置
早速検証してみましょう。該当ディレクトリに見るからに怪しいアイコンの「Get-Variable.exe」を置いてみます。
PowerShell起動時にこのexeファイルが実行されると成功です。
PowerShellを実行すると・・・
PowerShellが起動した後に、「Get-Variable.exe」が実行されます。
(この「Get-Variable.exe」は自作の情報取得ツールをリネームして作ってます。)
Get-Variable.batを配置
続いては、exeファイルではなくbatファイルを置いて検証してみます。
「Get-Variable.bat」の中身は下記のスクリプトを書いています。ペイントアプリが起動すれば検証成功です。
start mspaint
PowerShellを起動すると、batファイルが実行されペイントアプリが起動しました。検証成功ですね。
Get-Variable.ps1を配置
続いて、PowerShellスクリプトファイルを配置してみます。
「Get-Variable.ps1」の中身は下記のスクリプトを書いています。Gドライブに現在時刻のフォルダが作られると成功です。
$date = (Get-Date).ToString("yyyyMMddHHmmss")
New-Item ("G:\" + $date) -ItemType Directory
PowerShellを起動すると・・・ Gドライブにはフォルダは作られませんでした!!!
「Get-Variable.ps1」はPowerShellを引数なしで実行した場合は起動しませんでした。
Get-Variable.exe & Get-Variable.batを配置
複数のGet-Variableファイルが実行されるか検証してみましょう。
結果は・・・ exeファイルのみ実行されました!
どういう理屈でexeのみ実行なのかは不明です。。。
Get-Variable.exe & Get-Variable.bat & Get-Variable.ps1を配置
最後は3ファイル配置で検証してみます。
この場合の結果は、何も起きませんでした。つまりGet-Variable.ps1が対象となったがPowerShellスクリプトのため何も起きませんでした。
検証まとめ
・PowerShellを引数なしで実行すると、該当フォルダに「Get-Variable.exe」や「Get-Variable.bat」などの実行可能ファイルが存在すると実行される
・実行対象は1ファイルのみです
・「Get-Variable.ps1」のPowerShellスクリプトは実行されなかった
検証所感
PowerShellの謎の挙動である「Get-Variable.*」は意味のわからない仕様です。
私も何年もWindows 10 使ってますが、通常の業務ではまず「Get-Variable」なんて使用しません。
Intuneなどで管理している組織内端末でスクリプトなどを定期実行させて、「Get-Variable.*」ファイルがないかチェックさせたいですね。
参考サイト
三井物産セキュアディレクションさんの技術力はさすがです。いつも参考にさせてもらってます。
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/111900071/051800031/