Account Takeover Detection User Guide


Account Takeover Detection Overview

Introduction

Fraudsters are increasingly using social engineering and techniques such as SIM Swap and SIM jacking to take over phone numbers belonging to legitimate customers. When successful this enables fraudsters to intercept SMS and other mobile channels, enabling them to access One Time PIN codes and other messages sent to customers.

Enterprises can protect themselves and their customers by using Account Takeover Detection and other Syniverse services such as Multi-Factor Authentication, Phone Number Verification and Right Party Verification.

Service Overview

Account Takeover Detection enables Enterprises to reduce fraud and increase security when communicating with their customers.  Common scenarios where Enterprises use ATO Detection are when authenticating end users using a SMS One Time PIN code, or sending fraud alerts via SMS.

It also protects other channels / methods that use a mobile number, such as voice, WhatsApp and Rich Communication Services

The ATO Detection API is a REST-like server-to-server API and requires Enterprises to host the end-user-facing user interface and obtain end-user consent.

Enterprises call this API to find out if an end-user’s mobile channel may be compromised before deciding to either let the end-user continue in the regular flow or to step up authentication using another channel (e.g. knowledge or inherence factors). This is made possible by Syniverse  analyzing phone signals around the end-user’s SIM and giving the Enterprise an indicator whether the mobile channel has any recent changes that violate a Enterprise’s pre-defined risk tolerance.

API Call

Function

simCheck

This API call is used to determine if the mobile channel of an end-user has had recent SIM changes (or call forwarding enabled) indicating possible risk of an account takeover.

 

Integration

Security and Encryption

Since Syniverse’s Mobile Identity platform handles sensitive end-user information, utmost care is taken to safeguard this information at all times. Syniverse implements multiple layers of security between the Enterprise system and Syniverse’s system.

1.      Secure Communication Channel: All communication between the Enterprise’s system and Syniverse’s system takes place over HTTPS (TLS version 1.2 or above).

2.      IP Address Whitelisting: Enterprise system’s IP addresses are whitelisted before any API calls can be made to Syniverse’s production environment.

3.      API Request Validation: Enterprise is assigned a Merchant ID, an optional submerchant ID and an API Secret. The Secret is an alphanumeric string and is shared with the Enterprise during the onboarding process. Enterprise must send the API Secret in the header for all API requests. Syniverse processes the request only if it comes with a valid API Secret. Please contact Syniverse’s Support team to know the validity of the API Secret – the Support team will issue a new one prior to the expiry of the current value.

Security Credentials

The following lists all possible credentials provided by Syniverse to ensure authentication of APIs, security and privacy of the end-user information.

 

API Call

Security Values

Utilization

Key Length

simCheck

 

API Secret

Key to use in the request header (Authorization) of all APIs. Shared with Enterprise at onboarding.

Up to 128 characters

 

Constructing Requests

Syniverse exposes easy-to-use REST-like APIs and requests should be sent as JSON objects. Enterprises can use standard libraries to create the requests. Below table shows the request header details .

Request header details

Parameter Description Required
Accept

Media type for the response.

       Only application/json is supported. Example Accept: application/json

Yes
Content-Type

Media type sent in the request. Only application/json is supported.

       Example Content-Type: application/json

Yes
Authorization

The security key to use for Syniverse APIs, which was shared during the onboarding process.

       Example Authorization: qPrOHV9HuUaicXrK9I9hM5pmR2QG

Yes
RequestTime

Current date time when request is sent.

      Request time in ISO 8601 format: YYYY-MM-DDThh:mm:ss.ffffff

Example RequestTime: 2017-03-21T19:28:53+09:00

Yes

 

Processing Response

The Syniverse Mobile Identity platform returns response values as JSON objects. Enterprises should use a JSON parser to extract the information. Below table shows Response header details.

Response header details

Parameter

Description

Content-Type

       Media type sent in the response.

       Example Content-Type: application/json

 

Sandbox

During integration the Enterprise will use the Mobile Identity sandbox to develop and test against. The sandbox provides dummy data to simplify testing of different scenarios and test cases.

Access details & credentials for the sandbox will be provided by Syniverse during onboarding.

Service Configuration

Syniverse's Account Takeover Detect works by returning a Y/N indicator to a timestamp challenge. Enterprise determines that they want to know if there has been a Account Takeover or SIM change within a pre-defined timeframe, for example the last 48 hours (SIM change is defined as a new association between a MSISDN and an IMSI or SIM Identifier). Syniverse will return a Yes (Y) or No (N) response if a SIM change has taken place based on the time of the request.

Additionally, if the Enterprise plans to use voice OTP (One Time Passcode) as a method to verify device possession by an end-user, then Syniverse will also look into whether call forwarding is enabled for the end-user’s phone number. The API response will still return only one Y/N response to notify the Enterprise if the end-user’s mobile channel has seen one either a SIM change or call forwarding enabled, indicating a possible risk for the Enterprise if they continue to authenticate using this channel.

If data (SIM change and call forwarding if configured) is not available for an end-user’s phone number, then Syniverse will return an error code -5061(please refer to Appendix A) instead of Y/N.

During implementation Syniverse will configure your account accordingly to set a pre-defined risk-tolerance timeframe in hours and enable inclusion of detecting call forwarding. Enterprises may have a range as short as 1 hour or a longer range of 14 days for example. If a range of 14 days is preferred by a Enterprise, then Syniverse would configure the Enterprise’s API with a Account Takeover range in the corresponding number of hours i.e., 336 hours. SIM change, call forwarding availability, and consent requirements may vary per carrier.

The production URL will also be confirmed by Syniverse as part of the implementation. This is because there are different geographic deployments used depending on the country.

API Specification

Account Takeover Detection

Request URL

https://Syniverseserverurl/cigw/v1/simCheck

The actual URL will be provided during onboarding.

Request parameter details

Parameter

Description

 

Required

merchantId

      A unique string assigned by Syniverse to identify the Enterprise. 

      This ID will be provided by Syniverse during the onboarding process.

      Max length: 30

      Example merchantId: 00DF00000015

Yes

subMerchantId

           Resellers Only

This unique ID is assigned to a reseller’s end Enterprise. This ID will be provided by Syniverse during the onboarding process.

Max length: 30

        Example subMerchantId: 00DF00000016

No

consentId

Enterprise passes a unique ID from capturing the consent from the end-user. It needs to be traceable back to the channel how the end-user had provided the consent. If Consent ID is not passed, only fields that are available without consent will be returned in the response.

Max length: 128

Example consentId: uyciydfoudqwg912863017

Yes

consentTimeStamp

Date and time when end-user consent was obtained. 

Format: yyyy-MM-ddTHH:mm:ss +00:00

Example consentTimeStamp: 2021-02-03T20:20:39+00:00

If Consent TimeStamp is not passed, only fields that are available without consent will be returned in the response.

Yes

msisdn

The end-user’s mobile number in E.164 international format.

Example msisdn: +14444441111

Yes

correlationId

Enterprise’s transaction identifier that can uniquely identify this particular transaction.

Min length: 8, Max length: 80

Example correlationId: 1310881973286793

Yes

 

Response parameter details, if API call is successful

Parameter

Description

results

This JSON object encapsulates the API response.

This object includes the elements listed below (each element is defined in the table below the sample). 

{       

        "simChangeDate": "2021-02-03T00:00:00Z", 

        “callForwardingEnabled”: “10”, 

        “changeDetected”: “Y”, 

        "correlationId": "1310881973286793", 

        "responseId": " 20210203234640M163C264030" 

         

 } 

 

Results object details

Parameter

Description

correlationId

Enterprise’s transaction identifier that can uniquely identify this particular transaction.

Min length: 8, Max length: 80

Example correlationId: 1310881973286793

responseId

Syniverse’s unique transaction reference identifier.

Max length: 30

Example responseId: 20200325234640M163C264030

changeDetected*

The indicator that tells the Enterprise if Syniverse saw a change event (and/or call forwarding enabled, if configured for Enterprise) in the mobile channel for the end-user during the preconfigured SIM change range. *

Max Length: 5

Example changeDetected: Y

simChangeDate**

If available from a carrier and if sharing is permitted, the exact date and/or timestamp when the last MSISDN-to-SIM pairing changed took place.

Example simChangeDate: 2020-08-15T19:20:30+00:00

callForwardingEnabled**

If available from a carrier and if sharing is permitted, this indicates if call forwarding has been set-up by the subscriber for the phone number. 10 indicates true and 0 indicates false.

Example callForwardingEnabled: 10

*changeDetected definitions:

Y: Yes, the mobile channel for the end-user has seen a change event or call forwarding enabled and Syniverse recommends the Enterprise should step up authentication for this end-user (e.g. either knowledge or inherence factors).

N: No, the mobile channel for the end-user has not seen a change event or call forwarding enabled and Syniverse recommends the Enterprise to allow the end-user to continue in the flow without added friction.

** simChangeDate, callForwardingEnabled:

These two fields are only available if a carrier is providing the information and sharing is permitted.

 

Response parameter details, if API call is not successful

Parameter

Description

error

This is the object that encapsulates the API response. Included in place of the results object if the call is not successful

correlationId

Enterprise’s transaction identifier that can uniquely identify this particular transaction, if available. The value from the request is echoed back.

Min length: 8, Max length: 80

Example correlationId: ABC0881973286793

responseId

Syniverse’s transaction identifier than can uniquely identify this particular transaction, if available.

Max length: 30

Example responseId: 20200325234640M163C264030

code

Indicates the reason the call failed.

Example code: -5001

description

Additional information regarding the error condition. Set only if error code is included in the response.

Max Length: 256

Example description: Authentication failed

 

Example request

POST https://serverurl/cigw/v1/simCheck

Accept: application/json

Content-Type: application/json

Authorization: qPrOHV9HuUaicXrK9I9hM5pmR2QG

RequestTime: 2021-02-04T19:28:53+00:00

{

    "merchantId":"00DF00000015",

    "subMerchantId":"00DF00000016",

    "consentId":"uyciydfoudqwg912863017",

    "consentTimeStamp":"2021-02-03T12:30:23+00:00",

    "correlationId":"ABC0881973286793",

    "msisdn":"+13333330001"

}

Example successful response 

HTTP/1.1 200 OK 

Content-Type: application/json 

{ 

"results": { 

     "simChangeDate": "2021-02-03T00:00:00Z ", 

      "callForwardingEnabled": "10", 

      "changeDetected": "Y", 

     "correlationId": "ABC0881973286793", 

     "responseId": " 20210203234640M163C264030" 

     } 

} 

 

Example error response 

HTTP/1.1 400 Bad Request 

Content-Type: application/json 

{ 

     "error": { 

     "correlationId":"ABC0881973286793", 

     "responseId":" 20210203234640M163C264030", 

     "code":"-5061", 

     "description":"Insufficient information to determine response" 

             } 

} 

 

Appendix A – Error Codes and Descriptions (Error Object)

Error Code

Error Description

Comments

Recommended Action

-5000

Access not allowed.

Access not allowed for the requested API.

Integration Issue. Contact Syniverse Support for help.

-5001

Authentication failed.

Enterprise authentication failed. Check the signature computation.

Integration Issue. Contact Syniverse Support for help.

-5002

Unsupported version.

Unsupported version used for the API request.

Integration Issue. Contact Syniverse Support for help.

-5003

Retry with missing parameter.

A required parameter is missing from the API request.

Integration Issue. Contact Syniverse Support for help.

-5004

An invalid parameter was passed.

An invalid parameter was passed in the API request.

Integration Issue. Contact Syniverse Support for help.

-5005

An internal error occurred.

An internal error has occurred.

Retry. If error persists, Contact Syniverse.

-5006

Retry with end-user identifier.

An end-user identifier such as the mobile number, authentication key or association key is missing from the API request.

Integration Issue. Contact Syniverse Support for help.

-5009

This phone number is not whitelisted.

Whitelisting is enabled and the phone number is not whitelisted.

Contact Syniverse Support to whitelist number.

-5010

Missing or Incorrect Submerchant Id.

A valid sub-merchant id is required for reseller Enterprises.

Integration Issue. Contact Syniverse Support for help.

-5013

Exceeded time to perform end-user identification.

The authentication key has expired before end-user identification could be completed.

Do not retry. Terminate transaction and exit.

-5017

Retry with passing consent in the input.

User consent is needed to make this API call in the current configuration.

Integration Issue. Contact Syniverse Support for help.

-5018

Please retry with both consentId and consentTimeStamp

Either consent id or consent timestamp was missing from the API request.

Integration Issue. Contact Syniverse Support for help.

-5020

Data is not available for this user

Data is not available for this user from any of the configured data sources.

Do not retry. Terminate transaction and exit.

-5022

Invalid Enterprise.

The Enterprise cannot be recognized.

Integration Issue. Contact Syniverse Support for help.

-5029

Data access not allowed. Please contact Customer Support.

The Enterprise is not configured for this API or for the Attribute Groups being requested.

Integration Issue. Contact Syniverse Support for help.

-5030

Data access not allowed. Please contact Customer Support.

Service providers are not configured for this Enterprise.

Integration Issue. Contact Syniverse Support for help.

-5033

Consumer identifier is invalid.

The end-user identifier such as the mobile number, authentication key or association key is invalid.

Do not retry. Terminate transaction and exit.

-5035

This Authentication Key has expired.

The authentication key has expired and cannot be used anymore.

Do not retry. Terminate transaction and exit.

-5037

Service provider error occurred. Please retry.

An error occurred while communicating with a service provider.

Retry. If error persists, Contact Syniverse Support.

-5046

No value was passed for consumerMdn and carrier.

No value was passed for consumerMdn and carrier.

Please retry by passing both the values.

-5049

No value was passed for consumerMdn or carrier.

No value was passed for consumerMdn or carrier.

Please retry by passing either of the values.

-5050

Data access not allowed. Please contact Enterprise Support.

Data access not allowed. Please contact Enterprise Support.

Integration Issue. Contact Syniverse Support for help.

-5053

Please retry with a valid MSISDN

Please retry with a valid MSISDN

Retry. If error persists, Contact Syniverse Support.

-5054

Please retry with valid Consent

Input consent parameters are not valid.

Retry. If error persists, Contact Syniverse Support.

-5055

Consent is no longer active

Consent is no longer active.

Please obtain new consent from the user and retry

-5056

Please retry with valid Consent

Consent is no longer active.

Please obtain new consent from the user and retry

-5057

Carrier not supported.

Syniverse has not integrated with the carrier and there is no access to other authoritative data sources for the MSISDN

Do not retry. Terminate transaction and exit.

-5061

Insufficient information to determine response

Syniverse did not obtain sufficient information from mobile carrier to determine a response.

Do not retry. Terminate transaction and exit.

-5062                             

Unable to identify carrier

Syniverse could not identify the carrier associated with the phone number. nxx are two digits used for internal tracking.

Do not retry. Terminate transaction and exit.