Threat Intelligence Exchange (TIE) File Reputation Sample¶
This sample demonstrates invoking the McAfee Threat Intelligence Exchange (TIE) DXL service to retrieve the reputation of files (as identified by their hashes).
Prerequisites¶
- The samples configuration step has been completed (Samples Configuration)
- A TIE Service is available on the DXL fabric
To run this sample execute the sample\tie\file_rep_sample.py
script as follows:
c:\dxlclient-python-sdk-5.6.0.4>python sample\tie\file_rep_sample.py
The output should appear similar to the following:
Notepad.exe reputation: { "props": { "serverTime": 1451505556, "submitMetaData": 1 }, "reputations": [ { "attributes": { "2120340": "2139160704" }, "createDate": 1451502875, "providerId": 1, "trustLevel": 99 }, { "attributes": { "2101652": "17", "2102165": "1451502875", "2111893": "21", "2114965": "0", "2139285": "72339069014638857" }, "createDate": 1451502875, "providerId": 3, "trustLevel": 0 } ] } EICAR reputation: { "props": { "serverTime": 1451505556, "submitMetaData": 1 }, "reputations": [ { "attributes": { "2120340": "2139162632" }, "createDate": 1451504331, "providerId": 1, "trustLevel": 1 }, { "attributes": { "2101652": "11", "2102165": "1451504331", "2111893": "22", "2114965": "0", "2139285": "72339069014638857" }, "createDate": 1451504331, "providerId": 3, "trustLevel": 0 } ] }
The sample outputs the file reputation for two files.
The first file queried in the TIE service is "notepad.exe". The McAfee Global Threat Intelligence (GTI) service
is identified in the results as "providerId" : 1
. The trust level associated with the GTI response
("trustLevel": 99
) indicates that the file is known good.
The second file queried in the TIE service is the "EICAR Standard Anti-Virus Test File". The trust level associated
with the GTI response ("trustLevel": 1
) indicates that the file is known bad.
The major functionality provided by the sample resides in the get_tie_file_reputation()
method as shown
below:
def get_tie_file_reputation(client, md5_hex, sha1_hex): """ Returns a dictionary containing the results of a TIE file reputation request :param client: The DXL client :param md5_hex: The MD5 Hex string for the file :param sha1_hex: The SHA-1 Hex string for the file :return: A dictionary containing the results of a TIE file reputation request """ # Create the request message req = Request(FILE_REP_TOPIC) # Create a dictionary for the payload payload_dict = { "agentGuid" : "myagent", "hashes" : [ { "type" : "md5", "value" : base64_from_hex(md5_hex) }, { "type" : "sha1", "value" : base64_from_hex(sha1_hex) } ] } # Set the payload req.payload = json.dumps(payload_dict).encode() # Send the request and wait for a response (synchronous) res = client.sync_request(req) # Return a dictionary corresponding to the response payload if res.message_type != Message.MESSAGE_TYPE_ERROR: return json.loads(res.payload.decode(encoding="UTF-8")) else: raise Exception("Error: " + res.error_message + " (" + str(res.error_code) + ")")
This method creates a dxlclient.message.Request
message that will be delivered to the
file reputation request topic (/mcafee/service/tie/file/reputation
) of a TIE service on the fabric.
The required payload for a "TIE File Reputation" request is set on the message.
The request message is delivered to the fabric via the dxlclient.client.DxlClient.sync_request()
method on
the DXL client.
The payload of the dxlclient.message.Response
message received is converted to a Python dictionary
object and returned to the caller of the method.