IOK rules allow you to detect (potential/likely/confirmed) phishing sites by matching on various properties of the website like the text on the page, the cookies set, and the filenames of the assets loaded.
hostname
The hostname of the site.
e.g. www.phish.domain
title
The title of the site as shown in a browser. If multiple titles are set (e.g. by JavaScript), this contains all of them.
e.g. Login | My Bank
html
The contents of the page HTML (as returned by the server).
e.g. <html><head>....</html>
dom
The contents of the page HTML after loading (e.g. after javascript has executed and modified the page).
e.g. <html><head>....</html>
js
Contents of JavaScript from the page (includes inline scripts as well as scripts loaded externally).
e.g. !function(e,t){"object"==typeof module&&
css
Contents of CSS from the page (includes inline stylesheets as well as externally loaded stylesheets)
e.g. .redTitle {color: red;}
cookies
Cookies from the page. Each is in the form cookieName=value
e.g. PHPSESSID=el4ukv0kqbvoirg7nkp4dncpk3
headers
Headers sent by the server. Each is in the form Header-Name: value
e.g. X-Powered-By: PHP/7.4.33
requests
URLs of requests made by the page (and assets loaded by the page).
e.g. https://www.phish.domain/css/style.css
title: Example rule
description: |
This should describe what the rule detects.
You can use markdown syntax
# The level setting determines whether you'll be alerted
# about matches or if this site is just monitored for changes
level: likely_malicious
# This is where your rule logic lives
# It is formed of a set of properties and a condition
detection:
propertyOne:
html|contains: "a string"
propertyTwo:
requests|endswith: "/logo.png"
# The condition combines the properties using and/or/not
condition: propertyOne and not propertyTwo
contains
True if the field contains the string.
startswith
True if the field starts with the string.
endswith
True if the field ends with the string.
all
Requires this matches all provided values, not just one.