illuminate Deprecated

Deprecated. Use Analyst1 integration instead.

Data Enrichment & Threat Intelligence · Analyst1

Details

IDilluminate
ProviderRenaissance Learning
CategoryData Enrichment & Threat Intelligence
From Version5.0.0
Docker Imagedemisto/python3:3.9.5.21272

README

Overview


Deprecated. Use Analyst1 integration instead.

This integration was integrated and tested with version 1.8.7 of illuminate

illuminate Playbook


illuminate Basic Indicator Enrichment: This is a simple playbook that can apply on top of an incident created from an indicator that will determine the indicator type and then properly enrich it with the associated illuminate integration command.

Use Cases


  • When you wish to have more information on a given indicator
  • When you use both Cortex XSOAR and illuminate and wish to have easy linking between the two

Configure illuminate on Cortex XSOAR


  1. Navigate to Settings > Integrations > Servers & Services.
  2. Search for illuminate.
  3. Click Add instance to create and configure a new integration instance.
    • Name: a textual name for the integration instance.
    • illuminate API Credentials (username/password)
    • Domain of illuminate server to use
    • Trust any certificate (not secure)
    • Use system proxy settings
  4. Click Test to validate the URLs, token, and connection.

Commands


You can execute these commands from the Cortex XSOAR CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.

  1. domain
  2. email
  3. ip
  4. file
  5. illuminate-enrich-string
  6. illuminate-enrich-ipv6
  7. illuminate-enrich-mutex
  8. illuminate-enrich-http-request
  9. url

1. domain


Queries the illuminate REST API and enriches the given domain with illuminate Indicator data

Base Command

domain

Input
Argument Name Description Required
domain The domain for which to return information. Required
Context Output
Path Type Description
Domain.Name string The domain name, for example, “google.com”.
Illuminate.Domain.ID number The indicator’s unique ID in illuminate.
Illuminate.Domain.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Domain.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Domain.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Domain.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Domain.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Domain.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Domain.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Domain.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Domain.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.Domain.Malwares.Name string Each matched malware name in illuminate.
Illuminate.Domain.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Domain.Actors.Name string Each matched actor name in illuminate.
Illuminate.Domain.IlluminateLink string The URL of the matched indicator in illuminate.
Illuminate.Domain.IpResolution string The resolved IP address for this domain.
DBotScore.Indicator String The indicator that was tested.
DBotScore.Score Number The actual score.
DBotScore.Type String The type of indicator.
DBotScore.Vendor String The AlienVault OTX vendor.
Command Example

!domain domain=abc.com

Context Example
{
    "Illuminate.Domain": {
        "LastHit": null, 
        "ReportedDates": [
            "2018-06-12"
        ], 
        "Indicator": "abc.com", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [], 
        "EvidenceCount": 1, 
        "Actors": {}, 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/2043650", 
        "ID": 2043650
    }, 
    "Domain": {
        "Malicious": {
            "Vendor": "illuminate", 
            "Description": "illuminate has determined that this indicator is malicious via internal analysis."
        }, 
        "Name": "abc.com"
    }, 
    "DBotScore": {
        "Vendor": "illuminate", 
        "Indicator": "abc.com", 
        "Score": 3, 
        "Type": "domain"
    }
}
Human Readable Output

illuminate Domain Information

Active EvidenceCount ID IlluminateLink Indicator ReportedDates
true 1 2043650 https://partner.analystplatform.com/indicators/2043650 abc.com 2018-06-12

2. email


Queries the illuminate REST API and enriches the given email with illuminate indicator data.

Base Command

email

Input
Argument Name Description Required
email The email for which to return information. Required
Context Output
Path Type Description
Email.From string The sender of the email.
Illuminate.Email.ID number The unique identifier of the given Indicator in illuminate
Illuminate.Email.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Email.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Email.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Email.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Email.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Email.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Email.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Email.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Email.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.Email.Malwares.Name string Each matched malware name in illuminate.
Illuminate.Email.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Email.Actors.Name string Each matched actor name in illuminate.
Illuminate.Email.IlluminateLink string The URL of the matched indicator in illuminate.
DBotScore.Indicator String The indicator that was tested.
DBotScore.Score Number The actual score.
DBotScore.Type String The indicator type.
DBotScore.Vendor String The AlienVault OTX vendor.
Command Example

!email email=001toxic@gmail.com

Context Example
{
    "DBotScore": {
        "Vendor": "illuminate", 
        "Indicator": "001toxic@gmail.com", 
        "Score": 3, 
        "Type": "email"
    }, 
    "Illuminate.Email": {
        "LastHit": null, 
        "ReportedDates": [
            "2018-02-05"
        ], 
        "Indicator": "001toxic@gmail.com", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [], 
        "EvidenceCount": 1, 
        "Actors": [
            {
                "id": -2, 
                "name": "Unknown"
            }
        ], 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/1637756", 
        "ID": 1637756
    }, 
    "Email": {
        "Malicious": {
            "Vendor": "illuminate", 
            "Description": "illuminate has determined that this indicator is malicious via internal analysis."
        }, 
        "From": "001toxic@gmail.com"
    }
}
Human Readable Output

illuminate Email Information

Active Actors EvidenceCount ID IlluminateLink Indicator ReportedDates
true id = -2, name = Unknown 1 1637756 https://partner.analystplatform.com/indicators/1637756 001toxic@gmail.com 2018-02-05

3. ip


Queries the illuminate REST API and enriches the given IP address with illuminate indicator data.

Base Command

ip

Input
Argument Name Description Required
ip The IP address for which to return information. Required
Context Output
Path Type Description
IP.Address string The IP address.
Illuminate.Ip.ID number The indicator’s unique ID in illuminate.
Illuminate.Ip.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Ip.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Ip.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Ip.FirstHit date The first date this this indicator was seen in a source scanned by illuminate.
Illuminate.Ip.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Ip.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Ip.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Ip.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Ip.Malwares.ID number Each matched malware unique identifier in illuminate
Illuminate.Ip.Malwares.Name string Each matched malware name in illuminate
Illuminate.Ip.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Ip.Actors.Name string Each matched actor name in illuminate.
Illuminate.Ip.IlluminateLink string The URL of the matched indicator in illuminate.
DBotScore.Indicator String The indicator that was tested.
DBotScore.Score Number The actual score.
DBotScore.Type String The type of indicator.
DBotScore.Vendor String The AlienVault OTX vendor.
Command Example

!ip ip=0.154.17.105

Context Example
{
    "IP": {
        "Malicious": {
            "Vendor": "illuminate", 
            "Description": "illuminate has determined that this indicator is malicious via internal analysis."
        }, 
        "Address": "0.154.17.105"
    }, 
    "Illuminate.Ip": {
        "LastHit": null, 
        "ReportedDates": [
            "2014-01-04"
        ], 
        "Indicator": "0.154.17.105", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [], 
        "EvidenceCount": 1, 
        "Actors": {}, 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/51469", 
        "ID": 51469
    }, 
    "DBotScore": {
        "Vendor": "illuminate", 
        "Indicator": "0.154.17.105", 
        "Score": 3, 
        "Type": "ip"
    }
}
Human Readable Output

illuminate Ip Information

Active EvidenceCount ID IlluminateLink Indicator ReportedDates
true 1 51469 https://partner.analystplatform.com/indicators/51469 0.154.17.105 2014-01-04

4. file


Queries the illuminate REST API and enriches the given file with illuminate indicator data.

Base Command

file

Input
Argument Name Description Required
file The file for which to return information. Required
Context Output
Path Type Description
File.MD5 String The MD5 hash of the file.
File.SHA1 String The SHA1 hash of the file.
File.SHA256 String The SHA256 hash of the file.
Illuminate.File.ID number The indicator’s unique ID in illuminate.
Illuminate.File.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.File.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.File.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.File.FirstHit date The first date this this indicator was seen in a source scanned by illuminate.
Illuminate.File.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.File.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.File.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.File.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.File.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.File.Malwares.Name string Each matched malware name in illuminate
Illuminate.File.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.File.Actors.Name string Each matched actor name in illuminate.
Illuminate.File.IlluminateLink string The URL of the matched indicator in illuminate.
DBotScore.Indicator String The indicator that was tested.
DBotScore.Score Number The actual score.
DBotScore.Type String The type of indicator.
DBotScore.Vendor String The AlienVault OTX vendor.
Command Example

!file file=00000000000000000000000000000000

Context Example
{
    "Illuminate.File": {
        "LastHit": null, 
        "ReportedDates": [
            "2019-06-25", 
            "2020-01-09"
        ], 
        "Indicator": "00000000000000000000000000000000", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [
            "2018-08-02", 
            "2019-09-01"
        ], 
        "EvidenceCount": 2, 
        "Actors": [
            {
                "id": -4, 
                "name": "Multiple Actors Extracted"
            }, 
            {
                "id": 150, 
                "name": "FIN8"
            }
        ], 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/1527155", 
        "ID": 1527155
    }, 
    "DBotScore": {
        "Vendor": "illuminate", 
        "Indicator": "00000000000000000000000000000000", 
        "Score": 3, 
        "Type": "file"
    }, 
    "File": {
        "Malicious": {
            "Vendor": "illuminate", 
            "Description": "illuminate has determined that this indicator is malicious via internal analysis."
        }, 
        "MD5": "00000000000000000000000000000000"
    }
}
Human Readable Output

illuminate File Information

Active ActivityDates Actors EvidenceCount ID IlluminateLink Indicator ReportedDates
true 2018-08-02,
2019-09-01
id = -4, name = Multiple Actors Extracted,
id = 150, name = FIN8
2 1527155 https://partner.analystplatform.com/indicators/1527155 00000000000000000000000000000000 2019-06-25,
2020-01-09

5. illuminate-enrich-string


Queries the illuminate REST API and enriches the given string with illuminate indicator data

Base Command

illuminate-enrich-string

Input
Argument Name Description Required
string The string for which to return information. Required
Context Output
Path Type Description
Illuminate.String.ID number The unique identifier of the given Indicator in illuminate
Illuminate.String.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.String.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.String.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.String.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.String.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.String.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.String.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.String.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.String.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.String.Malwares.Name string Each matched malware name in illuminate
Illuminate.String.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.String.Actors.Name string Each matched actor name in illuminate.
Illuminate.String.IlluminateLink string The URL of the matched indicator in illuminate.
Command Example

!illuminate-enrich-string string=??

Context Example
{
    "Illuminate.String": {
        "LastHit": null, 
        "ReportedDates": [
            "2014-12-12", 
            "2014-12-14", 
            "2014-12-19", 
            "2014-12-20"
        ], 
        "Indicator": "??", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [
            "2014-12-11", 
            "2014-12-14", 
            "2014-12-19", 
            "2014-12-20"
        ], 
        "EvidenceCount": 15, 
        "Actors": [
            {
                "id": -2, 
                "name": "Unknown"
            }
        ], 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/90548", 
        "ID": 90548
    }
}
Human Readable Output

illuminate String Information

Active ActivityDates Actors EvidenceCount ID IlluminateLink Indicator ReportedDates
true 2014-12-11,
2014-12-14,
2014-12-19,
2014-12-20
id = -2, name = Unknown 15 90548 https://partner.analystplatform.com/indicators/90548 ?? 2014-12-12,
2014-12-14,
2014-12-19,
2014-12-20

6. illuminate-enrich-ipv6


Queries the illuminate REST API and enriches the given IP address with illuminate indicator data.

Base Command

illuminate-enrich-ipv6

Input
Argument Name Description Required
ip The IP address for which to return information. Required
Context Output
Path Type Description
Illuminate.Ipv6.ID number The unique identifier of the given Indicator in illuminate
Illuminate.Ipv6.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Ipv6.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Ipv6.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Ipv6.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Ipv6.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Ipv6.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Ipv6.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Ipv6.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Ipv6.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.Ipv6.Malwares.Name string Each matched malware name in illuminate
Illuminate.Ipv6.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Ipv6.Actors.Name string Each matched actor name in illuminate.
Illuminate.Ipv6.IlluminateLink string The URL of the matched indicator in illuminate.
Command Example

!illuminate-enrich-ipv6 ip=16::

Context Example
{
    "Illuminate.Ipv6": {
        "LastHit": null, 
        "ReportedDates": [
            "2015-05-13"
        ], 
        "Indicator": "16::", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [
            "2018-09-08"
        ], 
        "EvidenceCount": 1, 
        "Actors": {}, 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/2623838", 
        "ID": 2623838
    }
}
Human Readable Output

illuminate Ipv6 Information

Active ActivityDates EvidenceCount ID IlluminateLink Indicator ReportedDates
true 2018-09-08 1 2623838 https://partner.analystplatform.com/indicators/2623838 16:: 2015-05-13

7. illuminate-enrich-mutex


Queries the illuminate REST API and enriches the given mutex with illuminate indicator data.

Base Command

illuminate-enrich-mutex

Input
Argument Name Description Required
mutex The mutex to query information for Required
Context Output
Path Type Description
Illuminate.Mutex.ID number The unique identifier of the given Indicator in illuminate
Illuminate.Mutex.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Mutex.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Mutex.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Mutex.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Mutex.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Mutex.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Mutex.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Mutex.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Mutex.Malwares.ID number Each matched malware unique identifier in illuminate.
Illuminate.Mutex.Malwares.Name string Each matched malware name in illuminate
Illuminate.Mutex.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Mutex.Actors.Name string Each matched actor name in illuminate.
Illuminate.Mutex.IlluminateLink string The URL of the matched indicator in illuminate.
Command Example

!illuminate-enrich-mutex mutex=??

Context Example
{
    "Illuminate.Mutex": {
        "LastHit": null, 
        "ReportedDates": [
            "2015-01-07", 
            "2015-01-14", 
            "2015-02-23", 
            "2017-08-05", 
            "2017-08-06"
        ], 
        "Indicator": "??", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [
            "2015-01-06", 
            "2015-01-07", 
            "2015-01-14", 
            "2015-02-23", 
            "2017-08-05", 
            "2017-08-06"
        ], 
        "EvidenceCount": 6, 
        "Actors": [
            {
                "id": -2, 
                "name": "Unknown"
            }
        ], 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/95267", 
        "ID": 95267
    }
}
Human Readable Output

illuminate Mutex Information

Active ActivityDates Actors EvidenceCount ID IlluminateLink Indicator ReportedDates
true 2015-01-06,
2015-01-07,
2015-01-14,
2015-02-23,
2017-08-05,
2017-08-06
id = -2, name = Unknown 6 95267 https://partner.analystplatform.com/indicators/95267 ?? 2015-01-07,
2015-01-14,
2015-02-23,
2017-08-05,
2017-08-06

8. illuminate-enrich-http-request


Queries the illuminate REST API and enriches the given HTTP request with illuminate indicator data.

Base Command

illuminate-enrich-http-request

Input
Argument Name Description Required
http-request The HTTP request for which to return information. Required
Context Output
Path Type Description
Illuminate.Httprequest.ID number The unique identifier of the given Indicator in illuminate
Illuminate.Httprequest.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Httprequest.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Httprequest.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Httprequest.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Httprequest.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Httprequest.HitCount number The total number of times this indicator was seen in a source scanned by illuminate.
Illuminate.Httprequest.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Httprequest.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Httprequest.Malwares.ID number Each matched malware unique identifier in illuminate
Illuminate.Httprequest.Malwares.Name string Each matched malware name in illuminate.
Illuminate.Httprequest.Actors.ID number Each matched actor unique identifier in illuminate.
Illuminate.Httprequest.Actors.Name string Each matched actor name in illuminate.
Illuminate.Httprequest.IlluminateLink string The URL of the matched indicator in illuminate.
Command Example

!illuminate-enrich-http-request http-request=/~

Context Example
{
    "Illuminate.Httprequest": {
        "LastHit": null, 
        "ReportedDates": [
            "2020-01-06"
        ], 
        "Indicator": "/~", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [], 
        "EvidenceCount": 1, 
        "Actors": {}, 
        "ConfidenceLevel": "high", 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/2885382", 
        "ID": 2885382
    }
}
Human Readable Output

illuminate Httprequest Information

Active ConfidenceLevel EvidenceCount ID IlluminateLink Indicator ReportedDates
true high 1 2885382 https://partner.analystplatform.com/indicators/2885382 /~ 2020-01-06

9. url


Queries the illuminate REST API and enriches the given URL with illuminate indicator data.

Base Command

url

Input
Argument Name Description Required
url The URL for which to return information. Required
Context Output
Path Type Description
URL.Data String The URL.
Illuminate.Url.ID number The unique identifier of the given Indicator in illuminate
Illuminate.Url.EvidenceCount number The number of evidence reports of the given indicator in illuminate.
Illuminate.Url.Active boolean Whether the given indicator is noted as active in illuminate.
Illuminate.Url.ConfidenceLevel string The confidence level of the data in illuminate.
Illuminate.Url.FirstHit date The first date this indicator was seen in a source scanned by illuminate.
Illuminate.Url.LastHit date The most recent date this indicator was seen in a source scanned by illuminate.
Illuminate.Url.HitCount number The total number of this indicator was seen in a source scanned by illuminate.
Illuminate.Url.ReportedDates date The dates this indicator was reported on in illuminate.
Illuminate.Url.ActivityDates date The dates this indicator had reported activity in illuminate.
Illuminate.Url.Malwares.ID number Each matched malware unique identifier in illuminate
Illuminate.Url.Malwares.Name string Each matched malware name in illuminate.
Illuminate.Url.Actors.ID number Each matched actor unique identifier in illuminate
Illuminate.Url.Actors.Name string Each matched actor name in illuminate.
Illuminate.Url.IlluminateLink string The URL of the matched indicator in illuminate.
DBotScore.Indicator String The indicator that was tested.
DBotScore.Score Numbe The actual score.
DBotScore.Type String The type of indicator.
DBotScore.Vendor String The AlienVault OTX vendor.
Command Example

!url url=104.218.120.128/check.aspx

Context Example
{
    "URL": {
        "Malicious": {
            "Vendor": "illuminate", 
            "Description": "illuminate has determined that this indicator is malicious via internal analysis."
        }, 
        "Data": "104.218.120.128/check.aspx"
    }, 
    "Illuminate.Url": {
        "LastHit": null, 
        "ReportedDates": [
            "2019-07-04"
        ], 
        "Indicator": "104.218.120.128/check.aspx", 
        "Malwares": {}, 
        "FirstHit": null, 
        "ActivityDates": [
            "2018-12-08"
        ], 
        "EvidenceCount": 1, 
        "Actors": [
            {
                "id": 178, 
                "name": "APT33"
            }
        ], 
        "ConfidenceLevel": null, 
        "Active": true, 
        "HitCount": null, 
        "IlluminateLink": "https://partner.analystplatform.com/indicators/2699554", 
        "ID": 2699554
    }, 
    "DBotScore": {
        "Vendor": "illuminate", 
        "Indicator": "104.218.120.128/check.aspx", 
        "Score": 3, 
        "Type": "url"
    }
}
Human Readable Output

illuminate Url Information

Active ActivityDates Actors EvidenceCount ID IlluminateLink Indicator ReportedDates
true 2018-12-08 id = 178, name = APT33 1 2699554 https://partner.analystplatform.com/indicators/2699554 104.218.120.128/check.aspx 2019-07-04

Configuration parameters

  • credentials — illuminate API Credentials (username/password) (required)
  • server — Domain of illuminate server to use (format - server.that_you_use.com - No http/https) (required)
  • insecure — Trust any certificate (not secure)
  • proxy — Use system proxy settings

Commands (9)

  • domain

    Queries the illuminate REST API and enriches the given domain with illuminate Indicator data

  • email

    Queries the illuminate REST API and enriches the given email with illuminate indicator data.

  • file

    Queries the illuminate REST API and enriches the given file with illuminate indicator data.

  • illuminate-enrich-http-request

    Queries the illuminate REST API and enriches the given HTTP request with illuminate indicator data.

  • illuminate-enrich-ipv6

    Queries the illuminate REST API and enriches the given IP address with illuminate indicator data.

  • illuminate-enrich-mutex

    Queries the illuminate REST API and enriches the given mutex with illuminate indicator data.

  • illuminate-enrich-string

    Queries the illuminate REST API and enriches the given string with illuminate indicator data

  • ip

    Queries the illuminate REST API and enriches the given IP address with illuminate indicator data.

  • url

    Queries the illuminate REST API and enriches the given URL with illuminate indicator data.

import demistomock as demisto
from CommonServerPython import *
from CommonServerUserPython import *

''' IMPORTS '''
import requests
import traceback
from typing import Dict, Optional, List, Any, Callable, Collection

# Disable insecure warnings
requests.packages.urllib3.disable_warnings()

''' CONSTANTS '''
# Integration information
INTEGRATION_NAME = 'illuminate'
INTEGRATION_CONTEXT_BRAND = 'Illuminate'
MALICIOUS_DATA: Dict[str, str] = {
    'Vendor': 'illuminate',
    'Description': 'illuminate has determined that this indicator is malicious via internal analysis.'
}

''' HELPER FUNCTIONS '''


class IdNamePair(object):
    def __init__(self, unique_id: int, name: str):
        self.id = unique_id
        self.name = name

    def __str__(self):
        return f'id = {self.id}, name = {self.name}'


class EnrichmentOutput(object):
    def __init__(self, illuminate_context_data: dict, raw_data: dict, indicator_type: str) -> None:
        self.illuminate_context_data = illuminate_context_data
        self.raw_data = raw_data
        self.indicator_type = indicator_type
        self.reputation_context: dict = {}

    def get_human_readable_output(self) -> str:
        human_readable_data = self.illuminate_context_data.copy()
        human_readable_data['Actors'] = [IdNamePair(d['id'], d['name']) for d in human_readable_data['Actors']]
        human_readable_data['Malwares'] = [IdNamePair(d['id'], d['name']) for d in human_readable_data['Malwares']]

        return tableToMarkdown(
            t=human_readable_data,
            name=f'{INTEGRATION_NAME} {self.indicator_type.capitalize()} Information',
            removeNull=True
        )

    def build_illuminate_context(self) -> dict:
        return {
            f'{INTEGRATION_CONTEXT_BRAND}.{self.indicator_type.capitalize()}(val.ID && val.ID === obj.ID)':
                self.illuminate_context_data
        }

    def generate_reputation_context(
            self,
            primary_key: str,
            indicator_value: str,
            indicator_type: str,
            reputation_key: str,
            extra_context: Optional[dict] = None
    ):
        if self.has_context_data():
            reputation_context: Dict[str, Any] = {primary_key: indicator_value}

            if extra_context is not None:
                reputation_context.update(extra_context)

            malicious = Client.is_indicator_malicious(self.raw_data)
            if malicious:
                reputation_context['Malicious'] = MALICIOUS_DATA

            self.add_reputation_context(
                f'{reputation_key}(val.{primary_key} && val.{primary_key} === obj.{primary_key})',
                reputation_context
            )

            self.add_reputation_context('DBotScore', {
                'Indicator': indicator_value,
                'Score': 3 if malicious else 1,
                'Type': indicator_type,
                'Vendor': INTEGRATION_NAME
            })

    def build_all_context(self) -> dict:
        all_context = {}
        all_context.update(self.build_illuminate_context())
        if len(self.reputation_context) > 0:
            all_context.update(self.reputation_context)

        return all_context

    def return_outputs(self):
        # We need to use the underlying demisto.results function call rather than using return_outputs because
        # we need to add the IgnoreAutoExtract key to ensure that our illuminate links are not marked as indicators
        entry = {
            "Type": entryTypes["note"],
            "HumanReadable": self.get_human_readable_output(),
            "ContentsFormat": formats["json"],
            "Contents": self.raw_data,
            "EntryContext": self.build_all_context(),
            "IgnoreAutoExtract": True
        }

        demisto.results(entry)

    def add_illuminate_context(self, key: str, data: Any):
        self.illuminate_context_data[key] = data

    def add_reputation_context(self, key: str, context: dict):
        self.reputation_context[key] = context

    def has_context_data(self):
        return len(self.illuminate_context_data) > 0


class Client(BaseClient):
    def __init__(self, server: str, username: str, password: str, insecure: bool, proxy: bool):
        # NB: 404 is a valid response since that just means no entries, and we want the UI to respect that and show "No Entries"
        super().__init__(
            base_url=f'https://{server}/api/1_0/',
            verify=not insecure,
            proxy=proxy,
            auth=(username, password),
            ok_codes=(200, 404)
        )

    def indicator_search(self, indicator_type: str, indicator: str) -> dict:
        params = {'type': indicator_type, 'value': indicator}
        return self._http_request(method='GET', url_suffix='indicator/match', params=params)

    def perform_test_request(self):
        data: dict = self._http_request(method='GET', url_suffix='')
        if data['links'] is None:
            raise DemistoException('Invalid URL or Credentials. JSON structure not recognized')

    def enrich_indicator(self, indicator: str, indicator_type: str) -> EnrichmentOutput:
        raw_data: dict = self.indicator_search(indicator_type, indicator)
        if raw_data is None:
            return EnrichmentOutput({}, {}, indicator_type)

        context_data = self.get_context_from_response(raw_data)
        return EnrichmentOutput(context_data, raw_data, indicator_type)

    @staticmethod
    def get_data_key(data: dict, key: str) -> Optional[Any]:
        return None if key not in data else data[key]

    @staticmethod
    def get_nested_data_key(data: dict, key: str, nested_key: str) -> Optional[Any]:
        top_level = Client.get_data_key(data, key)
        return None if top_level is None or nested_key not in top_level else top_level[nested_key]

    @staticmethod
    def get_data_key_as_date(data: dict, key: str, fmt: str) -> Optional[str]:
        value = Client.get_data_key(data, key)
        return None if value is None else datetime.fromtimestamp(value / 1000.0).strftime(fmt)

    @staticmethod
    def get_data_key_as_list(data: dict, key: str) -> List[Any]:
        data_list = Client.get_data_key(data, key)
        return [] if data_list is None or not isinstance(data[key], (list,)) else data_list

    @staticmethod
    def get_data_key_as_list_of_values(data: dict, key: str, value_key: str) -> List[Any]:
        data_list = Client.get_data_key_as_list(data, key)
        return [value_data[value_key] for value_data in data_list]

    @staticmethod
    def get_data_key_as_list_of_dicts(data: dict, key: str, dict_creator: Callable) -> Collection[Any]:
        data_list = Client.get_data_key_as_list(data, key)
        return {} if len(data_list) == 0 else [dict_creator(value_data) for value_data in data_list]

    @staticmethod
    def is_indicator_malicious(data: dict) -> bool:
        benign = Client.get_nested_data_key(data, 'benign', 'value')
        return False if benign is None or benign is True else True

    @staticmethod
    def get_context_from_response(data: dict) -> dict:
        result_dict = {
            'ID': Client.get_data_key(data, 'id'),
            'Indicator': Client.get_nested_data_key(data, 'value', 'name'),
            'EvidenceCount': Client.get_data_key(data, 'reportCount'),
            'Active': Client.get_data_key(data, 'active'),
            'HitCount': Client.get_data_key(data, 'hitCount'),
            'ConfidenceLevel': Client.get_nested_data_key(data, 'confidenceLevel', 'value'),
            'FirstHit': Client.get_data_key_as_date(data, 'firstHit', '%Y-%m-%d'),
            'LastHit': Client.get_data_key_as_date(data, 'lastHit', '%Y-%m-%d'),
            'ReportedDates': Client.get_data_key_as_list_of_values(data, 'reportedDates', 'date'),
            'ActivityDates': Client.get_data_key_as_list_of_values(data, 'activityDates', 'date'),
            'Malwares': Client.get_data_key_as_list_of_dicts(data, 'malwares', lambda d: {'id': d['id'], 'name': d['name']}),
            'Actors': Client.get_data_key_as_list_of_dicts(data, 'actors', lambda d: {'id': d['id'], 'name': d['name']}),
            'Benign': Client.get_nested_data_key(data, 'benign', 'value'),
            'IlluminateLink': None
        }

        links_list = Client.get_data_key_as_list(data, 'links')
        result_dict['IlluminateLink'] = next((
            link['href'].replace("api/1_0/indicator/", "indicators/")
            for link in links_list
            if 'rel' in link and link['rel'] == 'self' and 'href' in link
        ), None)

        return result_dict


def build_client(demisto_params: dict) -> Client:
    server: str = str(demisto_params.get('server'))
    proxy: bool = demisto_params.get('proxy', False)
    insecure: bool = demisto_params.get('insecure', False)
    credentials: dict = demisto_params.get('credentials', {})
    username: str = str(credentials.get('identifier'))
    password: str = str(credentials.get('password'))

    return Client(server, username, password, insecure, proxy)


''' COMMAND EXECUTION '''


def perform_test_module(client: Client):
    client.perform_test_request()


def domain_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    domains: List[str] = argToList(args.get('domain'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for domain in domains:
        enrichment_data: EnrichmentOutput = client.enrich_indicator(domain, 'domain')
        if enrichment_data.has_context_data():
            extra_context = {}

            ip_resolution = Client.get_nested_data_key(enrichment_data.raw_data, 'ipResolution', 'name')
            if ip_resolution is not None:
                enrichment_data.add_illuminate_context('IpResolution', ip_resolution)
                extra_context['DNS'] = ip_resolution

            enrichment_data.generate_reputation_context('Name', domain, 'domain', 'Domain', extra_context)

        enrichment_data_list.append(enrichment_data)

    return enrichment_data_list


def email_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    emails: List[str] = argToList(args.get('email'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for email in emails:
        enrichment_data: EnrichmentOutput = client.enrich_indicator(email, 'email')

        if enrichment_data.has_context_data():
            enrichment_data.generate_reputation_context('From', email, 'email', 'Email')

        enrichment_data_list.append(enrichment_data)

    return enrichment_data_list


def ip_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    ips: List[str] = argToList(args.get('ip'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for ip in ips:
        enrichment_data: EnrichmentOutput = client.enrich_indicator(ip, 'ip')

        if enrichment_data.has_context_data():
            enrichment_data.generate_reputation_context('Address', ip, 'ip', 'IP')

        enrichment_data_list.append(enrichment_data)

    return enrichment_data_list


def file_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    files: List[str] = argToList(args.get('file'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for file in files:
        enrichment_data: EnrichmentOutput = client.enrich_indicator(file, 'file')

        if enrichment_data.has_context_data():
            hash_type = get_hash_type(file)
            if hash_type != 'Unknown':
                enrichment_data.generate_reputation_context(hash_type.upper(), file, 'file', 'File')

        enrichment_data_list.append(enrichment_data)

    return enrichment_data_list


def illuminate_enrich_string_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    strings: List[str] = argToList(args.get('string'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for string in strings:
        enrichment_data_list.append(client.enrich_indicator(string, 'string'))

    return enrichment_data_list


def illuminate_enrich_ipv6_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    ips: List[str] = argToList(args.get('ip'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for ip in ips:
        enrichment_data_list.append(client.enrich_indicator(ip, 'ipv6'))

    return enrichment_data_list


def illuminate_enrich_mutex_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    mutexes: List[str] = argToList(args.get('mutex'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for mutex in mutexes:
        enrichment_data_list.append(client.enrich_indicator(mutex, 'mutex'))

    return enrichment_data_list


def illuminate_enrich_http_request_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    http_requests: List[str] = argToList(args.get('http-request'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for http_request in http_requests:
        enrichment_data_list.append(client.enrich_indicator(http_request, 'httpRequest'))

    return enrichment_data_list


def url_command(client: Client, args: dict) -> List[EnrichmentOutput]:
    urls: List[str] = argToList(args.get('url'))
    enrichment_data_list: List[EnrichmentOutput] = []

    for url in urls:
        enrichment_data: EnrichmentOutput = client.enrich_indicator(url, 'url')

        if enrichment_data.has_context_data():
            enrichment_data.generate_reputation_context('Data', url, 'url', 'URL')

        enrichment_data_list.append(enrichment_data)

    return enrichment_data_list


''' EXECUTION '''


def main():
    commands = {
        'domain': domain_command,
        'email': email_command,
        'file': file_command,
        'ip': ip_command,
        'url': url_command,
        'illuminate-enrich-string': illuminate_enrich_string_command,
        'illuminate-enrich-ipv6': illuminate_enrich_ipv6_command,
        'illuminate-enrich-mutex': illuminate_enrich_mutex_command,
        'illuminate-enrich-http-request': illuminate_enrich_http_request_command
    }

    command: str = demisto.command()
    LOG(f'command is {command}')

    try:
        client = build_client(demisto.params())

        if command == 'test-module':
            perform_test_module(client)
            demisto.results('ok')
        elif command in commands:
            enrichment_outputs: List[EnrichmentOutput] = commands[command](client, demisto.args())
            [e.return_outputs() for e in enrichment_outputs]
    except Exception as e:
        err_msg = f'Error in {INTEGRATION_NAME} Integration [{e}]\nTrace:\n{traceback.format_exc()}'
        return_error(err_msg, error=e)


if __name__ in ['__main__', 'builtin', 'builtins']:
    main()