657万1727件のツイートをセキュリティ視点で分析してみて分かったこと:統計で見るサイバーセキュリティ群像劇(3)(1/2 ページ)
筆者が独自に収集した統計データを基に、サイバーワールドの裏側を探る本連載。今回は657万1727件のツイートを分析してみました。
インターネットから得られるさまざまな統計データを基に、メディアや書籍ではあまり取り上げられることのないサイバーセキュリティの裏(?)世界を探訪する本連載。前回は中国のDNSサーバについてお話ししましたが、今回はTwitterから得られる統計情報を扱ってみたいと思います。
言わずもがな、Twitterは最も多くの人に利用されているSNSの1つです。2016年2月のTwitter Japanの発表によれば、Twitterの利用者は2015年12月時点で3億2000万人、うち約1割が日本国内からのアクセスだったそうです。また、2015年12月時点でのユーザーの増加率は、国別でみると日本が1位ということでした。
参考リンク:Twitterが国内ユーザー数を初公表 「増加率は世界一」(ハフィントンポスト)
ツイートできる文字数が1万字程度になるというウワサも聞きますが、今のところ、140文字というコンパクトな長さでいろいろ工夫するという点が日本人の性に合っているのかもしれません。
何にせよ、これだけのユーザー数がいるわけですから、掘り起こせば何らかのセキュリティに関する知見が得られそうです。そこで今回は、「Twitterで公開されているつぶやき(public streamと呼ばれることもあります)から、セキュリティ関連の情報を引き出す」ことを目標にしたいと思います。ちなみに、「Twitter×セキュリティ」というとAnonymousネタが1つの“鉄板“ですが、今回はあえて触れないことにします。
氾濫する「Social Media Attack」
まず、筆者はTwitterのようなSNSを使った攻撃がないのかを調べてみました。すると最近、「Social Media Attack」と呼ばれる攻撃が勢いを増していることが分かりました。2016年8月に、DARKReadingというサイトで、Social Media Attackに関する解説記事が公開されています
参考リンク:Anatomy Of A Social Media Attack(DARKReading)
この記事によれば、より先鋭化した攻撃として、マルウェアの配布やフィッシングにSNSが利用されるケースが出てきているようです。また、米国の投資家であるウォーレン・バフェット氏のような有名人のTwitterアカウントをかたる(または乗っ取る)ケースも紹介されています。
このように多用され始めているSocial Media Attackですが、他にも中国が発電技術を扱う米国企業American Superconductor(AMSC)のエンジニアをSNS経由でそそのかし、風力発電機のタービンを制御するソフトウェアを盗み取った例があります。このエンジニアは170万ドルを受け取り(その後収監されましたが)、AMSCは3期分の収益と半分の従業員、そして1億ドル以上の市場価値を失ったそうです。
参考リンク:Chinese firm paid insider to kill my company, American CEO says(NBC NEWS)
これはSNSを使ったソーシャルエンジニア色の強い事件ですが、本稿ではこうしたSocial Media Attackの中でも、「悪意のある短縮URLを踏ませる攻撃」に注目してみます。上述したDARKReadingの記事にもありますが、短縮URLは実際のURLを覆い隠し、リダイレクト先が悪意のあるサイトかどうかを判別するのが難しくなるため、攻撃に利用されることがよくあります。
Twitter上の短縮URLを集めてみる
短縮URLを使ったSocial Media Attackの実態を調べるため、本稿では、以下の手順で調査を行いました。
- セキュリティ関係のツイートを集める
- それらに含まれる短縮URLのリダイレクト先を調べる
1に関しては、特定のキーワードでツイートを検索できるTwitter APIを使うことにしました。Twitter APIは、streaming APIとも呼ばれます。具体的には、下記のURLを使います。
https://api.twitter.com/1.1/search/tweets.json
キーワードリストは”anonymous”などを含めた128語を用意しましたが、筆者が独自の基準で作ったものなので、ここでは紹介しません。どのようなキーワードを付加すればどのようなツイートやURLが集まるかについては、次回以降の話題にしたいと思います。
2に関しては、若干マニアックになりますが、Headlessブラウザと呼ばれる、コマンドベースでWebサイトにアクセスできるツールを用いました。Headlessブラウザには、CasperJSというものがあります。
CasperJSは、本来AJAXな(若干言い方が古いですが……)人やJSな人がWebサイトのテストのために使うものですが、たまにスクレイピングなどに利用しているツワモノもいます(筆者の知る限りでは、通販サイトからHeadlessブラウザを使って飲み物を注文している人がいました)。
今回は、PythonからCaspterJSを呼び出す形で次のように使いました。
#casperjs test.js --url="https://t.co/c2G1XDExVW" com_str = "casperjs test.js --url=" + "\"" + http_str + "\""
PythonからCasperJSを利用するコードは次のようになります。
casper.userAgent1 casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 '); casper.start(url,function(){ }); casper.then(function(){ this.wait(3000, function() { }); }); casper.then(function () { this.echo( this.getCurrentUrl()); }); casper.run();
CasperJSは、同じくHeadlessブラウザであるPhantomJSを使いやすくしたものです。上のプログラムでは、CasperJSは1行目から13行目まで順番に(逐次的に)処理していきます。1〜3行目で、アクセスしているブラウザを通知してサーバに接続します。4〜12行目にはこのスクリプトが行う処理をまとめてあります(接続後、3000ミリ秒=3秒間待機し、this.getCurrentUrl()で現在アクセスしているWebサイトの実際のURLを表示)。
そして13行目で、まとめた処理(3秒待機してからURLを表示)を実際に実行します。以上の2つのコードを実行することで、CasperJSが短縮URLの接続先へアクセスし、さまざまな情報を得ることができます。
Copyright © ITmedia, Inc. All Rights Reserved.