IsItPhishing
Collaborative web service that provides validation on whether a URL is a phishing page or not by analyzing the content of the webpage.
Data Enrichment & Threat Intelligence · IsItPhishing
Details
| ID | IsItPhishing |
|---|---|
| Provider | Open Source |
| Category | Data Enrichment & Threat Intelligence |
| From Version | 5.0.0 |
| Supported Modules | Agentix XSIAM |
README
Collaborative web service that provides validation on whether a URL is a phishing page or not by analyzing the content of the webpage.
Configure IsItPhishing in Cortex
| Parameter | Description | Required |
|---|---|---|
| Server URL (e.g. https://192.168.0.1) | False | |
| Customer’s name | True | |
| Customer’s License | True | |
| Use system proxy settings | False | |
| Trust any certificate (not secure) | False | |
| Source Reliability | Reliability of the source providing the intelligence data. | False |
Commands
You can execute these commands from the 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.
url
Checks if URL is phishing
Base Command
url
Input
| Argument Name | Description | Required |
|---|---|---|
| url | URL to be checked if phishing. | Required |
| force | Set true to analyze URL, or false to check whether URL may cause collateral damage to the end user. Default is false. | Optional |
| smart | Set true to force checks on URLs that may cause collateral damage to the end user, or false to ignore the argument. Default is true. | Optional |
| area | The regional area to force using a proxy. | Optional |
| timeout | Timeout in milliseconds. Default value set to 10000, with a minimum value of 1000. Once timeout is reached, TIMEOUT response is returned. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| URL.Status | unknown | URL identification result. |
| URL.Url | unknown | The URL that was tested. |
| URL.Malicious.Vendor | unknown | For malicious URLs, the vendor that made the decision. |
| URL.Malicious.Description | unknown | For malicious URLs, the reason for the vendor to make the decision. |
| DBotScore.Indicator | unknown | The indicator that was tested. |
| DBotScore.Type | unknown | The indicator type. |
| DBotScore.Vendor | unknown | The vendor used to calculate the score. |
| DBotScore.Score | unknown | The actual score. |
Configuration parameters
url— Server URL (e.g. https://192.168.0.1)name— Customer's namelicense— Customer's Licensecredentials— Customer's nameproxy— Use system proxy settingsinsecure— Trust any certificate (not secure)integrationReliability— Source ReliabilityfeedExpirationPolicy—feedExpirationInterval—
Commands (1)
-
urlChecks if URL is phishing.
var auth = 'Bearer ' + btoa( params.credentials ? params.credentials.identifier + ':' + params.credentials.password : params.name + ':' + params.license ); var sendRequest = function(method, api, body) { var url = params.url; var requestUrl = url.replace(/[\/]+$/, '') + '/' + api; var res = http( requestUrl, { Method: method, Headers: { 'Authorization': [auth], 'Content-Type': ['application/x-www-form-urlencoded'] }, Body: encodeToURLQuery(body).substring(1) }, params.insecure, params.proxy ); if (res.StatusCode < 200 || res.StatusCode >= 300) { throw 'Request Failed.\nStatus code: ' + res.StatusCode + '.\nBody: ' + JSON.stringify(res) + '.'; } return res; }; var isPhishing = function(url, force, smart, area, timeout) { var urls = url.split(',') var results = new Array(urls.length) for (var i = 0; i < urls.length; i++) { var md; var body = { name: params.credentials ? params.credentials.identifier : params.name, license: params.credentials ? params.credentials.password : params.license, version: '2', force: force, url: urls[i], area: area, timeout: timeout }; if (!area) { delete body.area; } if (!timeout) { delete body.timeout; } var res = sendRequest('POST', 'check', body); var ec = { IsItPhishing: {Url: urls[i]}, DBotScore: { Indicator: urls[i], Score: 0, Type: 'url', Vendor: 'IsItPhishing', Reliability: params.integrationReliability } }; var resBody = res.Body.trim(); if (resBody.substring(0,17) == 'TOO_MANY_REQUESTS') { md = 'You have reached the maximum number of requests for your license. You must wait for the returned period of time' + resBody.substring(17) + 'before running requests again.'; ec.IsItPhishing.Status = 'TOO_MANY_REQUESTS'; } if (resBody.substring(0,5) == 'ERROR') { md = 'An error has occurred. Please refer to the description of the error indicated in the' + resBody.substring(0,5) + 'value.'; ec.IsItPhishing.Status = 'ERROR'; } switch (resBody){ case 'SPAM': md = 'URL was identified as spam.'; ec.IsItPhishing.Status = 'SPAM'; ec.DBotScore.Score = 2; addMalicious(ec, outputPaths.url, { Data: urls[i], Malicious: {Vendor: 'IsItPhishing', Description: 'URL found as spam by IsItPhishing'} }); break; case 'PHISHING': md = 'URL was identified as phishing.'; ec.IsItPhishing.Status = 'PHISHING'; ec.DBotScore.Score = 3; addMalicious(ec, outputPaths.url, { Data: urls[i], Malicious: {Vendor: 'IsItPhishing', Description: 'URL found as phishing by IsItPhishing'} }); break; case 'UNKNOWN': md = 'URL is clean.'; ec.IsItPhishing.Status = 'CLEAN'; ec.DBotScore.Score = 1; break; case 'TIMEOUT': md = 'Timeout for the request has been reached. No verdict was returned for the request, and the URL should be considered clean.'; ec.IsItPhishing.Status = 'TIMEOUT'; break; case 'NOT_EXPLORED': md = 'The URL was not analyzed as triggering the analysis may cause collateral damage (unsubscribe, order conformation, etc.)'; ec.IsItPhishing.Status = 'NOT_EXPLORED'; break; case 'NOT_AUTHORIZED': md = 'Authorization has failed for one of the following reasons:\n• Invalid customer name,\n• Invalid customer license.'; ec.IsItPhishing.Status = 'NOT_AUTHORIZED'; break; case 'REVOKED': md = 'The license provided is no longer valid for one of the following reasons:\n• Validity period has expired,\n• License has been revoked.'; ec.IsItPhishing.Status = 'REVOKED'; break; } results[i] = {Type: entryTypes.note, Contents: resBody, ContentsFormat: formats.text, HumanReadable: md, EntryContext: ec, HumanReadableFormat: formats.text}; } return results }; switch (command) { case 'test-module': return 'ok'; case 'url': return isPhishing(args.url, args.force, args.smart, args.area, args.timeout); default: }