NuDetect

NuData, a subsidiary of Mastercard, integrates with 3DS verification and features an anti-bot system called nuDetect, similar to Akamai’s reliance on human behavioral analysis.

Understanding nuData’s Functionality

nuData operates through a website’s domain or server, using a fingerprinting script found in URLs containing /init/js/ or /sync/js/. For instance, Kohls.com uses the following URL for nuData integration: https://fc.kohls.com/2.2/w/w-552128/sync/js/, utilizing a customer ID for request identification.

The configuration of nuData is stored in a pageModeConfig property, and its fingerprinting script initializes a window property at window.ndsapi.

nuData’s Initial Analysis Process

nuData examines various properties, such as:

  • pageX, pageY coordinates of page elements, including the main document.
  • Scroll positions: document.body.scrollLeft & document.body.scrollRight.
  • Current time: Date.now().
  • Numerous Math operations, likely assessing the JavaScript VM.
  • Common properties like window._phantom, window.callPhantom, window.__phantomas, etc.
  • Screen details: window.screen.width, window.screen.height, window.screen.colorDepth.
  • Flash plugin presence.
  • Navigator attributes, including language and device timezone.
  • WebGL parameters:
    VERSION RENDERER SHADING_LANGUAGE_VERSION DEPTH_BITS MAX_VERTEX_ATTRIBS MAX_VERTEX_TEXTURE_IMAGE_UNITS MAX_VARYING_VECTORS MAX_VERTEX_UNIFORM_VECTORS MAX_COMBINED_TEXTURE_IMAGE_UNITS MAX_TEXTURE_SIZE MAX_CUBE_MAP_TEXTURE_SIZE NUM_COMPRESSED_TEXTURE_FORMATS MAX_RENDERBUFFER_SIZE MAX_VIEWPORT_DIMS ALIASED_LINE_WIDTH_RANGE ALIASED_POINT_SIZE_RANGE
  • Canvas fingerprinting and font metrics, using a specific script to draw and analyze text on a canvas using the following script:
          var b = document.createElement("canvas");
          b.width = 200;
          b.height = 40;
          b.style.display = "inline";
          var c = b.getContext("2d");
          c.fillText("aBc#$efG~ \ude73\ud63d", 4, 10);
          c.fillStyle = "rgba(67, 92, 0, 0.5)";
          c.font = "18pt Arial";
          c.fillText("aBc#$~efG \ude73\ud63d", 8, 12);
          a = b.toDataURL()

Behavioral Analysis by nuData

nuData tracks all page events, including keyboard (keyCode) and mouse movements (pageX, pageY), logging the sequence and timing of these events. This data suggests analysis of user interaction speed. The collected data is encoded in a proprietary format, for example:

"vce":"apvc,0,656p336o,2,1;fg,0,;zz,153,24r,2sn,;zzf,5r8,0...".

Bypassing nuData

Bypassing nuData security requires a nuanced approach, especially considering its reliance on GPU rendering information to determine the operating system and device type.

Here are some strategies:

  • GPU Rendering: Emulate consumer-grade GPUs rather than professional hardware, as nuData’s algorithms are tuned to recognize and differentiate between them.
  • Behavioral Analysis: Utilize tools like ghost-cursor (found at https://npmjs.com/package/ghost-cursor) to simulate human-like cursor movements and keystrokes. Timing is crucial here; movements or keystrokes that are too rapid can be flagged as suspicious.