Windows ストア アプリでマルウェアを作ってみよう!?
この記事は Windows 8 Store apps Advent Calendar の2日目のエントリです。
- 前日: @tanaka_733 さんの 「Bing Maps SDK for Windows Store apps を使ってみる (1)」
- 翌日: @coelacanth さんの 「分割アプリケーションとグリッドアプリケーション」
- 翌々日: @CH3COOH さん
注意: この記事は、 思考実験として書かれたものです。 実際にマルウェアの作成を勧めるものではありません。
世界中のクラッカーが、Windows ストアにマルウェアを載せてやろうと、きっとやっきになってると思います。 なんせ、 世界中の何億台という PC にバラ撒けるんですからねぇ。 狙わなかったら、 おかしい。
てことで、 マルウェアをどうやって作ってバラ撒くか、 ひとつ考えてみたいと思うわけです。
まず、 マルウェアのアプリを作らねばなりません。 こんなアプリを作りたいですねw
- キーロガーを仕込んだり、 画面をキャプチャしたりして、 ID とパスワードなどを盗む。
- アドレス帳を読み取って、 秘密のサーバーに送信する。
- 任意のファイルを読み出して、 P2P に放流する。
可能かどうか、 検討していきましょう。
★ こっそり動作させる
キーロガーは、他のアプリが動作してるときにキー入力を取得します。 てことは、 バックグラウンドで動かないといけませんね。
ところが Windows ストア アプリは、 バックグラウンドに回ると実行を止められてしまいます。 ユーザーに気付かれないようにこっそり動作し続けるアプリは、 作れません。 でも、 一定間隔 (15分以上に1回) なら、 バックグラウンド タスクとして作ることができます。 キーロガーは無理でも、 一定間隔で画面キャプチャを撮っていれば、 運良く ID とパスワード入力中の画面が手に入るかもしれません。 Win8 では、 パスワード入力欄をユーザーは平文で表示させることができますからね。
★ 画面をキャプチャする
てことで、 画面キャプチャです。 が、 なんと、 そういう API の用意がない!
これは何度もフォーラムで話題になってます。たとえばこれ → "How to capture screen in Metro app??"
まったく困ったもんですねw
無ければ、 Win32 API を呼べばいいのよ~♪
★ Win32 API を使う
画面キャプチャやファイル読み出しを、 Win32 APIを使ってやっちまえば、 なんでも出来ちゃうよね♪
てことで、 作ってみると見事に動きます。 やった~! (^^)
ところがどっこい。
使っていい Win32 API の一覧がここにあります → "Win32 and COM for Windows Store apps (Windows)"
で、 載っていない API の定義をアプリに含めていると、 しっかり WACK (Windows App Cert Kit, Windows アプリ検証キット) に引っ掛かります。
※ この画像は LCMapStringW() の場合だが、 他の API でも同様。
WACK に引っ掛かるということは、 ストアの審査の予備段階で落とされるってことです。
★ アドレス帳を読み取る
アドレス帳データを扱う API は Windows.ApplicationModel.Contacts 名前空間に用意されています。
ぉお、 これで列挙すればいいじゃん♪
ところがどっこい、 列挙用のメソッドは用意されていません。
どうやら、 「連絡先ピッカー」 を使ってユーザーに選択させることしかできないっぽい。 これでは、 こっそりアドレス帳を抜き取ることができません。
★ 他のアプリを利用して…
と思っても、 プロセス間通信はできません。
なんと、 Localhost にループバックすることさえ、 禁じられています。
※ Win8 のレジストリを書き換えれば、 ループバック可能です。 あ、 もちろんですが、 Windows ストア アプリからレジストリはいじれません。 ⇒ 「metro-desktop 間のループバックには CheckNetIsolation コマンドで設定する」
★ 動的に実行ファイルを作っちゃえばいいのよ~
どうにも Windows ストア アプリの中から直接やるのはムリっぽいです。
それじゃ、 データとして持っておいて、 実行ファイル (exe, bat, ps1 等) として書き出して、 LaunchFileAsync() で動かしてやれば!!
しかしなんたるちゃ、 Launcher クラスはブラックリストを持っていて、 実行ファイルは受け付けてくれません orz ⇒ http://twitpic.com/9p89eo
★ まぁ、 ユーザーを騙してやれば!
…ってことですね。
ユーザーを騙して、 コンタクト ピッカーで全アドレスを選択するように仕向けたり、 ID とパスワードを入力するように仕向けたりすれば! (^^)
☆ ☆ ☆
さて、 ユーザーを騙すマルウェア アプリが完成しました♪ (…としましょうw)
ストアに登録しようぜ!
★ ストアの審査をかいくぐる
これもかなり難しそう。 なんせ向こうは、 ディスアセンブルして全コードを読めますからね。 まぁ、 そこまでは普通はチェックしないだろうけど、 隠し画面なんかは XAML で作ってると間違いなく見つかりそうです。
※ ストアにアップロードするパッケージの中身。 XAML ファイルは丸見えになっている。
ともあれ、 審査では動作しないように時限式にでもしておいて、 あとは見つからないようにいかに巧妙にコーディングするか、ですな。 f(^^;
さぁ、ストアで公開された! やったぜ!!
…おっと、 ちょっと待ったぁ~っ!!
マルウェアはそのうちに存在が露見することを想定しておかねばなりません。 いつか誰かが気付くでしょう。
作者は自分でござい、ってバカ正直に表示してたら、 あっというまに逮捕、 です。 なので、 匿名でストアに登録しないといけません。
★ 匿名で開発者登録をする
Microsoft アカウント (旧 Windows Live ID) はメールアドレスさえあれば取得できるので、 捨てメアドで作れば OK♪
ところが、 ストアに開発者登録するときには、 クレジットカードを要求されちゃいます。
たとえ何かのキャンペーンで無料になったとしても、 一旦クレジットカードから引き落として後から返金する、 という手続きが行われます。これによって身元確認をしているんですな。
つまり、 匿名でクレジットカードを作れるか、 ということになるわけです。
この最後の難関まで突破する術があれば、 Windows ストア アプリでマルウェアを作ってバラ撒くことができるのです。
☆ ☆ ☆
いかがだったでしょうか。
Windows ストア アプリでマルウェアを作るには、 少なくともこれだけの壁を突破しなければなりません。 また、 もしもこの一連の壁に穴が見つかったとしたら、 Microsoft は即座に塞ぐことでしょう。
いかに安全で安心な Windows ストア アプリのエコシステムを Microsfot は築こうとしているのか、 それは次のブログ記事でも分かります。
- 「信頼できる Metro スタイル アプリを提供する」 Windows エンジニアリング チームによるブログ 2012/5/24
- 「Windows 8 セキュリティ特集 #5 Windows ストア アプリ」 日本のセキュリティチーム 2012/11/28
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「-PC・インターネット ( Windows 8 )」カテゴリの記事
- 【Windows ストア アプリ】4月の認定要件の変更により、これまでに 1,500本以上のアプリが削除された #win8dev_jp(2014.08.29)
- 【Windows 8.1 質問箱】 Update 1 を当てたのに、スタート画面に電源ボタンが表示されません!? #win8jp #surfacejp(2014.04.06)
- 【Windows 8.1】 Windows ストア アプリの「閉じる」と「終了させる」(2014.03.04)
- 【青空文庫リーダー・ライト】全集をスタート画面に! #win8jp(2014.01.28)
- 【青空文庫リーダー・ライト】青空文庫形式ファイルをダウンロードする「裏ワザ」(2014.01.21)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。
コメント
良記事。
投稿: | 2013年1月18日 (金) 10時57分