攻撃者が悪用するWindowsコマンド(2015-12-02)
Windows OSには標準で多数のコマンド(以下「Windowsコマンド」といいます。)がインストールされています。しかし、ユーザが実際に利用するのは多くの場合そのうちのごく一部です。一方、侵入した攻撃者も情報を収集し、あるいはネットワーク内で感染を拡大させるためにWindowsコマンドを使っていることをJPCERT/CCの調査で確認しています。ここで注目されるのは、普通の利用者が使うWindowsコマンドの集合と攻撃者が使うWindowsコマンドの集合のずれです。両者が大きく違っていれば、Windowsコマンドの実行状況を監視または管理することで、攻撃者の動きを検知あるいは抑制できることになります。
今回は、攻撃者が侵入したWindows OS上で使用するWindowsコマンドを明らかにし、攻撃者は使うが各ユーザにとっては不要なWindowsコマンドの実行を制限することで、攻撃による影響を低減する方法を示します。
遠隔操作のためのマルウエア(RAT)には、リモートからコマンド・シェルを実行する機能があります。この機能を利用すると、Windowsコマンドをリモートから実行することが可能です。
そのようなマルウエアをネットワーク内に侵入させた攻撃者は、次のような流れで侵入したネットワーク内のシステムを攻略し、機密情報の収集などを試みます。
① 初期調査 :感染した端末の情報を収集する
② 探索活動 :感染した端末に保存された情報や、ネットワーク内のリモート端末を探索する
③ 感染拡大 :感染した端末を別のマルウエアにも感染させる、または別の端末にアクセスを試みる
これらのすべての攻撃フェーズでWindowsコマンドが使用されます。以降では、各攻撃フェーズで使用されるWindowsコマンドについて紹介します。
初期調査
攻撃者が感染端末の情報収集によく使用するコマンドは、表1の通りです。なお、実行数は3つの異なる攻撃グループが使用していた各C&Cサーバで入力したWindowsコマンドの集計結果です(詳細は、Appendix A,B,Cをご参照ください)。
表1: 初期調査(上位10コマンド)
順位 | コマンド | 実行数 |
1 | tasklist | 155 |
2 | ver | 95 |
3 | ipconfig | 76 |
4 | systeminfo | 40 |
5 | net time | 31 |
6 | netstat | 27 |
7 | whoami | 22 |
8 | net start | 16 |
9 | qprocess | 15 |
10 | query | 14 |
攻撃者は、tasklistやver、ipconfig、systeminfoなどのコマンドを使用し、ネットワーク情報やプロセス情報、OS情報などを収集して、どのような端末に感染したのかを調査します。これによって、侵入した端末がマルウエア解析のためのおとり環境でないかなどを確認していると考えられます。
探索活動
機密情報の探索やネットワーク内のリモート端末の探索においては、表2のコマンドがよく使用されます。
表2:探索活動(上位10コマンド)
順位 | コマンド | 実行数 |
1 | dir | 976 |
2 | net view | 236 |
3 | ping | 200 |
4 | net use | 194 |
5 | type | 120 |
6 | net user | 95 |
7 | net localgroup | 39 |
8 | net group | 20 |
9 | net config | 16 |
10 | net share | 11 |
攻撃者は、ファイルを探索するためにdirおよびtypeを使用します。dirコマンドに適切な引数を指定することで、感染端末内のすべてのドキュメントファイルの一覧を収集することもあります。
ネットワークの探索にはnetコマンドが用いられます。特に次のコマンドが多用されます。
- net view: 接続可能なドメインのリソース一覧取得
- net user: ローカルおよびドメインのアカウント管理
- net localgroup: ローカルのグループに所属するユーザ一覧取得
- net group: 特定ドメインのグループに所属するユーザ一覧取得
- net use: リソースへのアクセス
さらに、Active Directoryを使用している環境の場合、次のコマンドが利用されることもあります(Appendix A 表5参照)。これらのコマンドは、Windows Serverに搭載されているコマンドで、本来はWindows 7や8.1などのクライアントOSには存在しませんが、攻撃者はこれらのコマンドを外部からダウンロードしインストールした上で実行します。
- dsquery: Active Directoryに含まれるアカウントの検索
- csvde: Active Directoryに含まれるアカウント情報取得
感染拡大
ネットワーク内のリモート端末への侵入・感染拡大のフェーズでは、表3のコマンドがよく使用されます。
表3:感染拡大
順位 | コマンド | 実行数 |
1 | at | 103 |
2 | reg | 31 |
3 | wmic | 24 |
4 | wusa | 7 |
5 | netsh advfirewall | 4 |
6 | sc | 4 |
7 | rundll32 | 2 |
※wmicは、探索活動などにも用いられます
atやwmicは、リモート端末上でマルウエアを実行するためによく利用されます。
atコマンドにより、次のように接続可能な端末に対してファイルを実行するタスクを登録することで、リモート端末上でコマンドを実行することができます。
at \\[リモートホスト名 or IPアドレス] 12:00 cmd /c "C:\windows\temp\mal.exe"
また、wmicコマンドにより、次のような引数を指定することで、リモート端末上のコマンドを実行することができます。
wmic /node:[IPアドレス] /user:”[ユーザ名]” /password:”[パスワード]” process call create “cmd /c c:\Windows\System32\net.exe user”
必要のないWindowsコマンドを実行制限する
これらの攻撃者が使うWindowsコマンドの中には、ユーザごとに吟味すれば、使用しないコマンドが含まれていると思います。そのようなコマンドを、AppLockerやソフトウエア制限ポリシーを使用して実行を制限することで、攻撃者の活動を抑えることができます。例えば、netコマンドを制限したい場合には、図1のようなルールを設定します。(AppLockerの設定方法について詳しくは、マイクロソフトのWebサイトをご参照ください)[1])
また、AppLockerを有効にすると、設定で指定されたWindowsコマンドが実行された、または実行しようとして拒否された事象がイベントログに記録されるようになり、マルウエア感染後に攻撃者が実行したWindowsコマンドを調査することにも活用できます。
なお、AppLockerではWindowsコマンドの実行を制限せずに監査のみを行うこともできます[2]。監査のみの場合、意図しないWindowsコマンドの実行は防げませんが、イベントログに実行の記録が残ります。攻撃に用いられるWindowsコマンドを利用者自身も使っている場合には、監査のみとするのもよいでしょう。(なお、Windowsコマンドの実行を監視するにはローカルセキュリティポリシーで、「プロセス作成の監査」を有効にすることでも記録することができます。)
おわりに
標的型攻撃においては、攻撃者は、マルウエアに組み込まれた機能だけを使って目的を遂行するわけではなく、Windowsコマンドも多用しています。そうした行為を阻むことができれば、比較的早い段階でインシデントの拡大を抑止することができます。とは言え、すぐにWindowsコマンドの使用を制限するのは難しいと思いますので、まずはAppLockerなどを使用して実行プロセスのログを取得することから始めてみるとよいでしょう。
分析センター 朝長 秀誠
参考情報
[1] Microsoft - Windows AppLocker
https://technet.microsoft.com/ja-jp/library/dd759117.aspx
[2] Microsoft - 監査を使用してどのアプリケーションが使用されているかを追跡する
https://technet.microsoft.com/ja-jp/library/dd723693%28v=ws.10%29.aspx
Appendix A 攻撃グループ別の実行コマンド一覧(攻撃グループA)
表4: 初期調査(攻撃グループA)
順位 | コマンド | 実行数 | オプション |
1 | tasklist | 119 | /s /v |
2 | ver | 92 | |
3 | ipconfig | 58 | /all |
4 | net time | 30 | |
5 | systeminfo | 24 | |
6 | netstat | 22 | -ano |
7 | qprocess | 15 | |
8 | query | 14 | user |
9 | whoami | 14 | /all |
10 | net start | 10 | |
11 | nslookup | 4 | |
12 | fsutil | 3 | fsinfo drives |
13 | time | 2 | /t |
14 | set | 1 |
表5:探索活動(攻撃グループA)
順位 | コマンド | 実行数 | オプション |
1 | dir | 903 | |
2 | net view | 226 | |
3 | ping | 196 | |
4 | net use | 193 | |
5 | type | 118 | |
6 | net user | 74 | |
7 | net localgroup | 35 | |
8 | net group | 19 | |
9 | net config | 16 | |
10 | net share | 11 | |
11 | dsquery | 6 | |
12 | csvde | 5 | /f /q |
13 | nbtstat | 5 | -a |
14 | net session | 3 | |
15 | nltest | 3 | /dclist |
16 | wevtutil | 2 |
表6:感染拡大(攻撃グループA)
順位 | コマンド | 実行数 | オプション |
1 | at | 98 | |
2 | reg | 29 | add export query |
3 | wmic | 24 | |
4 | netsh advfirewall | 4 | |
5 | sc | 4 | qc query |
6 | wusa | 2 |
Appendix B 攻撃グループ別の実行コマンド一覧(攻撃グループB)
表7: 初期調査(攻撃グループB)
順位 | コマンド | 実行数 | オプション |
1 | tasklist | 29 | /m /svc |
2 | whoami | 6 | |
3 | ipconfig | 5 | /all |
4 | net start | 4 | |
5 | netstat | 3 | -ano |
6 | nslookup | 3 | |
7 | ver | 2 | |
8 | time | 1 | /t |
表8: 探索活動(攻撃グループB)
順位 | コマンド | 実行数 | オプション |
1 | dir | 62 | |
2 | net user | 21 | /domain /add |
3 | net view | 9 | /domain |
4 | ping | 4 | |
5 | net localgroup | 4 | /add |
6 | tree | 3 | /F |
7 | type | 2 | |
8 | net group | 1 | /domain |
表9: 感染拡大(攻撃グループB)
順位 | コマンド | 実行数 | オプション |
1 | at | 5 | |
2 | wusa | 5 | |
3 | reg | 2 | |
4 | rundll32 | 2 |
Appendix C 攻撃グループ別の実行コマンド一覧(攻撃グループC)
表10: 初期調査(攻撃グループC)
順位 | コマンド | 実行数 | オプション |
1 | systeminfo | 16 | |
2 | ipconfig | 13 | /all /? |
3 | tasklist | 7 | |
4 | netstat | 5 | -ano |
5 | whoami | 2 | |
6 | net start | 2 | |
7 | arp | 1 | -a |
8 | chcp | 1 | |
9 | net time | 1 | |
10 | ver | 1 |
表11: 探索活動(攻撃グループC)
順位 | コマンド | 実行数 | オプション |
1 | dir | 11 | |
2 | net user | 1 | /all /? |
3 | net view | 1 | |
4 | qwinsta | 1 | -ano |
※ 攻撃グループCは、感染拡大を行わなかったため、感染拡大のコマンドについては省略しています。