Mar 12, 2017

アドネットワークを使ってハイジャックする話

概要

追記:MediaMathさんが解決してくれたよ!

なんとなく日経さんの昔の記事を読みたくなってアンドロイド上で読もうとしたら2秒程して変なページに飛ばされた。危うくクリックするところだった。
昔の記事:http://trendy.nikkeibp.co.jp/article/col/20030924/106051/?ST=trnmobile_f
変なページ



珍しいなーと思ってちょっと調べてみたら、アメリカの大手広告代理店経由で変なスクリプトを実行されていたというお話。
広告が広告主のコンテンツを食うなんて下克上みたいですね。ブランドイメージを毀損されてしまうので、広告主からしたら大問題だと思うのですが、それなりに放置されているのでまとめてみました。
なお、ユーザーリポートは飛んでるようです。 https://productforums.google.com/forum/#!msg/chrome/AzyvOJ1xcYg/L354tQk1BAAJ
「そもそもなんで飛ばされるの?」「なんでChromeはブロックしないの?」という2点について調べたり考えてみたりしました。


リクエストを追って何が起きているか確認してみる


該当ページを見たときのHARはこちら
ざっとみると上記画像の「COMUMXドットSITE」さんを含むEC2インスタンスからのレスポンスがありまして。 下記のJSなんかが問題を引き起こしているようです。
function(){top.window.location='http://comumx[dot]site/lpde1/index.php?s1=mas_jiami_de&pubid=B22CD7E7954F3EED828B3172748A31FA&bid=354163f6a3a632c304e2b91277de2f3b';}
詳しく見ると下記の順で各ドメインへリクエストを投げているようです。
  1. trendy.nikkeibp.co.jp
  2. www.googletagservice.com
  3. securepubads.g.doubleclick.net
  4. ads.rubiconproject.com
  5. optimized-by.rubiconproject.com
  6. tags.mathtag.com
  7. ec2-52-23-195-173.compute-1.amazonaws.com ( this responses with problematic javascript )
どうしてページ遷移が発生しているかはこれで明らかになりました。わーい。 ページ遷移自体はJavascriptで完結する話なのでこれだけで危険なコードを実行されているわけではないと認識してます。


Chromeがスクリプトを実行してしまう理由


さて、とりあえずドメインをWHOISベースで調べて会社名をマッピングしてみます。
  1. NIKKEI (trendy.nikkeibp.co.jp)
  2. Google (www.googletagservice.com)
  3. Google (securepubads.g.doubleclick.net)
  4. Rubicon project (ads.rubiconproject.com)
  5. Rubicon project (optimized-by.rubiconproject.com)
  6. MediaMath (tags.mathtag.com)
  7. ec2-52-23-195-173.compute-1.amazonaws.com ( this responses with problematic javascript )
NIKKEIは日経でGoogle ADのユーザーさん。
Rubicon ProjectはADnetworkのパートナーみたいなもんですね。IABにも参加しているようですので、こういう広告を配信してしまうのはどうなのかなと思いますが。 https://www.iab.com/news/iab-names-googles-jonathan-bellack-rubicon-projects-jay-sears-advertising-technology-council-co-chairs
MediaMathは広告代理店のようです。 (https://www.crunchbase.com/organization/mediamath#/entity) 実際ここが"*.mathtag.com"の所持者のようですね。 i.e. https://github.com/search?utf8=%E2%9C%93&q=org:MediaMath+mathtag.com&type=Code&ref=searchresults
Rubicon Project のHTTP responseを覗くとMedia Mathとの関係が見えてきます。
{
    "pingdom_id": "2117306",
    "ttl": 7,
    "img": "http://pixel.mathtag.com/sync/img?redir=http%3A%2F%2Ftap.rubiconproject.com%2Foz%2Ffeeds%2Fmediamath-pub%2Ftokens%3Fafu%3D%5BMM_UUID%5D",
    "secure": {
 "img": "https://pixel.mathtag.com/sync/img?redir=https%3A%2F%2Ftap.rubiconproject.com%2Foz%2Ffeeds%2Fmediamath-pub%2Ftokens%3Fafu%3D%5BMM_UUID%5D"
    },
    "partner": "mediamath-pub"
}
どうやら取引先のようですね。MediaMathが入稿してRubicon Projectのネットワークに載せる感じでしょうか。
ちなみにこのpixel[dot]mathtag[dot]com経由で、以前から色々と問題があるケースがあったようです。(注:「ちなみにこのpixel[dot]mathtag[dot]comは色々以前からやらかしているようです。」という表現を修正しました。)
まとめます。
  • 悪意ある広告製作者がスクリプトをEC2上に設置
  • 悪意ある広告製作者がMediaMathを通じて上記スクリプトを入稿
  • RubiconProjectがGoogle Adnetworkを通じて上記スクリプトをばらまく
  • NikkeiがGoogleAdnetworkを使うことにより日経Trendyの記事を読みにきたユーザーを変なサイトに無条件で飛ばす
恐らくGoogle-Rubicon Project, Rubicon Project - MediaMath間はCORSでもホワイトリスト方式で通してしまうんだろうなーと。 つまりMediaMathがスクリプトをきちんと確認しない限りどうしようもないんじゃないだろうか。 というわけで近日中に問い合わせてみます。

おわりに


この分野はシロウトなので、もし間違い誤解などがあったらコメントなりに残していただければ幸いです。