---
# System prepended metadata

title: Powershellの呼び出し方
tags: [security]

---

###### tags: `security`

# Powershellの呼び出し方

Powershellを使うとWindows環境のほぼ全てを操作する事ができるため、システム管理はもちろんの事、マルウェア開発でもPowershellが良く使われます。このときPowershellを呼び出す方法にはいくつかのパターンがあるため、それらを理解しておくことはインシデントレスポンスをする上で有益だと思います。

とても短い記事ですが参考にしてください。

## javascript

日本では2017年頃にjavascriptファイルを直接配布してマルウェアをダウンロードさせようとする手口が流行りました。Windowsでは拡張子が.jsのファイルをダブルクリックすると標準でMicrosoft Windows Based Script Hostによって実行される設定になっており、これを悪用する手法です。

以下のjavascriptコードはPowershellを使ってコマンドリストを表示するだけのものです。アンチウイルスに検知されるような悪意あるコードではないため、javascriptによるPowershell呼び出しの例として実際に確認してみて下さい。

```
var wsh = new ActiveXObject("WScript.Shell");
var cmd = "powershell -c "
cmd = cmd + "echo コマンド一覧を呼び出しています;"
cmd = cmd + "sleep 3;"
cmd = cmd + "get-command -name '*process';"
cmd = cmd + "sleep 5;"
wsh.run(cmd);
```

この脅威を未然に防ぐには、拡張子.jsのファイルの関連付けをMicrosoft Windows Based Script Hostからメモ帳などに変更しておくことが有効です。

## Office VBA

Officeマクロを利用したマルウェアへの対策は年々進んでおり、最新のOfficeを使っていればデフォルトでコードが実行されないようになりました。しかしOfficeマクロを業務に利用する企業は多く、利用者の心理に働きかけることでマルウェアを実行させる手法は未だに現役のままです。

以下のコードはjavascript版のコードをVBAスクリプトに置き換えたものです。workbook_open()関数にコードを記述することで、Excelワークブックを開いた瞬間に自動的に実行されるようになっています。

```
Private Sub workbook_open()
    Dim sh
    Set sh = CreateObject("WScript.Shell")
    cmd = "powershell -c "
    cmd = cmd & "echo コマンド一覧を呼び出しています;"
    cmd = cmd & "sleep 3;"
    cmd = cmd & "get-command -name '*process';"
    cmd = cmd & "sleep 5;"
    sh.Run cmd
End Sub
```

この脅威を未然に防ぐにはVBAスクリプトを使用しない事が一番だと思いますが、どうしても使用せざるを得ない場合は細心の注意を払ってマクロを有効化するしかないでしょう。最近のOfficeではマクロが有効なドキュメントの拡張子には.xlsmや.docmのように末尾にmが付く仕様です。あるいは古いバージョンで使われた.xlsや.docでもマクロを使う事が出来ます。2022年現在一般的に使われる拡張子は.xlsxや.docxなので、普段から拡張子を意識するようにしておけば違和感を抱くことができるのではないでしょうか。
