Advanced Get Reputation Example

This sample demonstrates invoking the McAfee Threat Intelligence Exchange (TIE) DXL service to retrieve the reputation of a file and certificate (as identified by their hashes). Further, this example demonstrates using the constants classes in the dxltieclient.constants package to examine specific fields within the reputation responses.

Prerequisites

  • The samples configuration step has been completed (see Samples Configuration)
  • A McAfee Threat Intelligence Exchange (TIE) Service is available on the DXL fabric

Running

To run this sample execute the sample/advanced/advanced_get_reputation_example.py script as follows:

c:\dxltieclient-python-sdk-0.3.0>python sample/advanced/advanced_get_reputation_example.py

The output should appear similar to the following:

File reputation response:
    Global Threat Intelligence (GTI) trust level: 99
    Enterprise prevalence: 242
    First contact: 2016-10-19 11:46:42

Full file reputation response:
{
    "1": {
        "attributes": {
            "2120340": "2139160704"
        },
        "createDate": 1480455704,
        "providerId": 1,
        "trustLevel": 99
    },
    "3": {
        "attributes": {
            "2101652": "242",
            "2102165": "1476902802",
            "2111893": "251",
            "2114965": "4",
            "2139285": "73183493944770750"
        },
        "createDate": 1476902802,
        "providerId": 3,
        "trustLevel": 99
    }
}

Certificate reputation response:
    Global Threat Intelligence (GTI) trust level: 99
    Enterprise prevalence: 12
    First contact: 2016-10-12 17:28:34

Full certificate reputation response:
{
    "2": {
        "attributes": {
            "2108821": "94",
            "2109077": "1454912619",
            "2117524": "0",
            "2120596": "0"
        },
        "createDate": 1476318514,
        "providerId": 2,
        "trustLevel": 99
    },
    "4": {
        "attributes": {
            "2109333": "12",
            "2109589": "1476318514",
            "2139285": "73183493944770750"
        },
        "createDate": 1476318514,
        "providerId": 4,
        "trustLevel": 0
    }
}

The sample outputs the reputation information for a file and a certificate.

In addition to dumping all of the reputation information received, this sample pulls out three specific properties for the file and certificate:

  • The Global Threat Intelligence (GTI) trust level
  • The prevalence of the file or certificate within the enterprise
  • The first time the file or certificate was found within the enterprise

Details

The majority of the sample code is shown below:

# Create the client
with DxlClient(config) as client:

    # Connect to the fabric
    client.connect()

    # Create the McAfee Threat Intelligence Exchange (TIE) client
    tie_client = TieClient(client)

    #
    # Perform the file reputation query
    #
    reputations_dict = \
        tie_client.get_file_reputation({
            HashType.MD5: FILE_MD5,
            HashType.SHA1: FILE_SHA1,
            HashType.SHA256: FILE_SHA256
        })

    print("File reputation response:")

    # Display the Global Threat Intelligence (GTI) trust level for the file
    if FileProvider.GTI in reputations_dict:
        gti_rep = reputations_dict[FileProvider.GTI]
        print("\tGlobal Threat Intelligence (GTI) trust level: " + \
              str(gti_rep[ReputationProp.TRUST_LEVEL]))

    # Display the Enterprise reputation information
    if FileProvider.ENTERPRISE in reputations_dict:
        ent_rep = reputations_dict[FileProvider.ENTERPRISE]

        # Retrieve the enterprise reputation attributes
        ent_rep_attribs = ent_rep[ReputationProp.ATTRIBUTES]

        # Display prevalence (if it exists)
        if FileEnterpriseAttrib.PREVALENCE in ent_rep_attribs:
            print("\tEnterprise prevalence: " + \
                  ent_rep_attribs[FileEnterpriseAttrib.PREVALENCE])

        # Display first contact date (if it exists)
        if FileEnterpriseAttrib.FIRST_CONTACT in ent_rep_attribs:
            print("\tFirst contact: " + \
                  FileEnterpriseAttrib.to_localtime_string(
                      ent_rep_attribs[FileEnterpriseAttrib.FIRST_CONTACT]))

    # Display the full file reputation response
    print("\nFull file reputation response:\n" + \
          MessageUtils.dict_to_json(reputations_dict, True))

    #
    # Perform the certificate reputation query
    #

    reputations_dict = tie_client.get_certificate_reputation(
        CERTIFICATE_BODY_SHA1, CERTIFICATE_PUBLIC_KEY_SHA1)

    print("\nCertificate reputation response:")

    # Display the Global Threat Intelligence(GTI) trust level for the certificate
    if CertProvider.GTI in reputations_dict:
        gti_rep = reputations_dict[CertProvider.GTI]
        print("\tGlobal Threat Intelligence (GTI) trust level: " \
            + str(gti_rep[ReputationProp.TRUST_LEVEL]))

    # Display the Enterprise reputation information
    if CertProvider.ENTERPRISE in reputations_dict:
        ent_rep = reputations_dict[CertProvider.ENTERPRISE]

        # Retrieve the enterprise reputation attributes
        ent_rep_attribs = ent_rep[ReputationProp.ATTRIBUTES]

        # Display prevalence (if it exists)
        if CertEnterpriseAttrib.PREVALENCE in ent_rep_attribs:
            print("\tEnterprise prevalence: " \
                + ent_rep_attribs[CertEnterpriseAttrib.PREVALENCE])

        # Display first contact date (if it exists)
        if CertEnterpriseAttrib.FIRST_CONTACT in ent_rep_attribs:
            print("\tFirst contact: " + \
                  CertEnterpriseAttrib.to_localtime_string(
                      ent_rep_attribs[CertEnterpriseAttrib.FIRST_CONTACT]))

    # Display the full certificate response
    print("\nFull certificate reputation response:\n" + \
          MessageUtils.dict_to_json(reputations_dict, True))

Once a connection is established to the DXL fabric, a dxltieclient.client.TieClient instance is created which will be used to communicate with the TIE DXL services.

To request the reputation of the file, a call is made to the dxltieclient.client.TieClient.get_file_reputation() method of the dxltieclient.client.TieClient instance along with the hash values that are used to identify the file.

To request the reputation of the certificate, a call is made to the dxltieclient.client.TieClient.get_certificate_reputation() method of the dxltieclient.client.TieClient instance along with the hash values that are used to identify the certificate.

Once reputations are received, the constants classes in the dxltieclient.constants module are used to examine specific fields within the reputation responses.