Skip to content

Commit

Permalink
adjusts to default domain reputation visualizer + analyzers urls and …
Browse files Browse the repository at this point in the history
…abstractmethods (intelowlproject#2250)

* little adjusts

* adjust

* refactored base_url in url to enable healthchecks

* adjust

* added update abstract method

* added logging of intel_owl package
  • Loading branch information
mlodic authored and g4ze committed Apr 11, 2024
1 parent e401562 commit cd940e2
Show file tree
Hide file tree
Showing 44 changed files with 220 additions and 112 deletions.
8 changes: 6 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/auth0.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@

class Auth0(classes.ObservableAnalyzer):
name: str = "Auth0"
base_url: str = "https://signals.api.auth0.com/v2.0/ip"
url: str = "https://signals.api.auth0.com/v2.0/ip"

_api_key_name: str

@classmethod
def update(cls) -> bool:
pass

def run(self):
headers = {"X-Auth-Token": self._api_key_name}
url = f"{self.base_url}/{self.observable_name}"
url = f"{self.url}/{self.observable_name}"
response = requests.get(url, headers=headers)
response.raise_for_status()

Expand Down
12 changes: 8 additions & 4 deletions api_app/analyzers_manager/observable_analyzers/binaryedge.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,14 @@


class BinaryEdge(classes.ObservableAnalyzer):
base_url: str = "https://api.binaryedge.io/v2/query/"
url: str = "https://api.binaryedge.io/v2/query/"

_api_key_name: str

@classmethod
def update(cls) -> bool:
pass

def config(self, runtime_configuration: Dict):
super().config(runtime_configuration)
self.headers = {"X-Key": self._api_key_name}
Expand All @@ -23,12 +27,12 @@ def run(self):
if self.observable_classification == self.ObservableTypes.IP:
try:
response_recent_ip_info = requests.get(
self.base_url + "ip/" + self.observable_name, headers=self.headers
self.url + "ip/" + self.observable_name, headers=self.headers
)
response_recent_ip_info.raise_for_status()

response_query_ip = requests.get(
self.base_url + "search?query=ip:" + self.observable_name,
self.url + "search?query=ip:" + self.observable_name,
headers=self.headers,
)
response_query_ip.raise_for_status()
Expand All @@ -43,7 +47,7 @@ def run(self):
elif self.observable_classification == self.ObservableTypes.DOMAIN:
try:
response_domain_report = requests.get(
self.base_url + "domains/subdomain/" + self.observable_name,
self.url + "domains/subdomain/" + self.observable_name,
headers=self.headers,
)
results = response_domain_report.json()
Expand Down
4 changes: 2 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/censys.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Censys(classes.ObservableAnalyzer):
def update(self):
pass

base_url = "https://search.censys.io/api/v2"
url = "https://search.censys.io/api/v2"

censys_analysis: str
_api_id_name: str
Expand All @@ -33,7 +33,7 @@ def run(self):
"Supported is IP"
)
response = requests.get(
self.base_url + uri,
self.url + uri,
auth=(self._api_id_name, self._api_secret_name),
headers={
"Accept": "application/json",
Expand Down
6 changes: 3 additions & 3 deletions api_app/analyzers_manager/observable_analyzers/checkphish.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@


class CheckPhish(classes.ObservableAnalyzer):
base_url: str = "https://developers.checkphish.ai/api/neo/scan"
status_url: str = base_url + "/status"
url: str = "https://developers.checkphish.ai/api/neo/scan"
status_url: str = url + "/status"

polling_tries: int
polling_time: float
Expand All @@ -25,7 +25,7 @@ def run(self):
"urlInfo": {"url": self.observable_name},
}

response = requests.post(CheckPhish.base_url, json=json_data)
response = requests.post(CheckPhish.url, json=json_data)
response.raise_for_status()

job_id = response.json().get("jobID")
Expand Down
3 changes: 2 additions & 1 deletion api_app/analyzers_manager/observable_analyzers/crowdsec.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@

class Crowdsec(ObservableAnalyzer):
_api_key_name: str
url: str = "https://cti.api.crowdsec.net"

def run(self):
headers = {
"x-api-key": self._api_key_name,
"User-Agent": f"crowdsec-intelowl/{settings.VERSION}",
}
url = f"https://cti.api.crowdsec.net/v2/smoke/{self.observable_name}"
url = f"{self.url}/v2/smoke/{self.observable_name}"
response = requests.get(url, headers=headers)
if response.status_code == 404:
result = {"not_found": True}
Expand Down
8 changes: 6 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/crxcavator.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@

class CRXcavator(classes.ObservableAnalyzer):
name: str = "CRXcavator"
base_url: str = "https://api.crxcavator.io/v1/report/"
url: str = "https://api.crxcavator.io/v1/report/"

@classmethod
def update(cls) -> bool:
pass

def run(self):
try:
response = requests.get(self.base_url + self.observable_name)
response = requests.get(self.url + self.observable_name)
response.raise_for_status()
except requests.RequestException as e:
raise AnalyzerRunException(e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@


class DocGuard_Hash(classes.ObservableAnalyzer):
base_url: str = "https://api.docguard.net:8443/api/FileAnalyzing/GetByHash/"
url: str = "https://api.docguard.net:8443/api/FileAnalyzing/GetByHash/"

_api_key_name: str

@classmethod
def update(cls) -> bool:
pass

@property
def hash_type(self):
hash_lengths = {32: "md5", 64: "sha256"}
Expand All @@ -43,7 +47,7 @@ def run(self):
uri = f"{self.observable_name}"
if self.observable_classification == self.ObservableTypes.HASH:
try:
response = requests.get(self.base_url + uri, headers=headers)
response = requests.get(self.url + uri, headers=headers)
response.raise_for_status()
except requests.RequestException as e:
raise AnalyzerRunException(e)
Expand Down
4 changes: 2 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/emailrep.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


class EmailRep(classes.ObservableAnalyzer):
base_url: str = "https://emailrep.io/{}"
url: str = "https://emailrep.io/{}"

_api_key_name: str

Expand All @@ -32,7 +32,7 @@ def run(self):
f" Supported: generic"
)

url = self.base_url.format(self.observable_name)
url = self.url.format(self.observable_name)

response = requests.get(url, headers=headers)
response.raise_for_status()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,20 @@
class FileScanSearch(ObservableAnalyzer):
"""FileScan_Search analyzer"""

base_url: str = "https://www.filescan.io/api/reports/search"
url: str = "https://www.filescan.io/api/reports/search"
_api_key: str

@classmethod
def update(cls) -> bool:
pass

def run(self):
"""Runs the FileScan_Search analyzer"""
observable_name_base64 = base64.b64encode(
self.observable_name.encode()
).decode()
endpoint = "?query={input}"
url = f"{self.base_url}/{endpoint.format(input=observable_name_base64)}"
url = f"{self.url}/{endpoint.format(input=observable_name_base64)}"
try:
response = requests.get(url, headers={"X-Api-Key": self._api_key})
response.raise_for_status()
Expand Down
6 changes: 3 additions & 3 deletions api_app/analyzers_manager/observable_analyzers/ha_get.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@


class HybridAnalysisGet(ObservableAnalyzer):
base_url: str = "https://www.hybrid-analysis.com"
api_url: str = f"{base_url}/api/v2/"
sample_url: str = f"{base_url}/sample"
url: str = "https://www.hybrid-analysis.com"
api_url: str = f"{url}/api/v2/"
sample_url: str = f"{url}/sample"

_api_key_name: str

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@


class HaveIBeenPwned(classes.ObservableAnalyzer):
base_url: str = "https://haveibeenpwned.com/api/v3/breachedaccount/"
url: str = "https://haveibeenpwned.com/api/v3/breachedaccount/"

truncate_response: bool
include_unverified: bool
Expand All @@ -26,7 +26,7 @@ def run(self):
headers = {"hibp-api-key": self._api_key_name}

response = requests.get(
self.base_url + self.observable_name, params=params, headers=headers
self.url + self.observable_name, params=params, headers=headers
)
response.raise_for_status()

Expand Down
16 changes: 10 additions & 6 deletions api_app/analyzers_manager/observable_analyzers/honeydb.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@


class HoneyDB(classes.ObservableAnalyzer):
base_url = "https://honeydb.io/api"
url = "https://honeydb.io/api"
# set secrets
_api_key_name: str
_api_id_name: str
honeydb_analysis: str

@classmethod
def update(cls) -> bool:
pass

def config(self, runtime_configuration: Dict):
super().config(runtime_configuration)
self.headers = {
Expand Down Expand Up @@ -53,15 +57,15 @@ def run(self):

def _request_analysis(self, endpoint):
if endpoint == "scan_twitter":
url = f"{self.base_url}/twitter-threat-feed/{self.observable_name}"
url = f"{self.url}/twitter-threat-feed/{self.observable_name}"
elif endpoint == "ip_query":
url = f"{self.base_url}/netinfo/lookup/{self.observable_name}"
url = f"{self.url}/netinfo/lookup/{self.observable_name}"
elif endpoint == "ip_history":
url = f"{self.base_url}/ip-history/{self.observable_name}"
url = f"{self.url}/ip-history/{self.observable_name}"
elif endpoint == "internet_scanner":
url = f"{self.base_url}/internet-scanner/info/{self.observable_name}"
url = f"{self.url}/internet-scanner/info/{self.observable_name}"
elif endpoint == "ip_info":
url = f"{self.base_url}/ipinfo/{self.observable_name}"
url = f"{self.url}/ipinfo/{self.observable_name}"
else:
logger.error(f"endpoint {endpoint} not supported")
return
Expand Down
10 changes: 6 additions & 4 deletions api_app/analyzers_manager/observable_analyzers/hunter_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@


class Hunter_Io(classes.ObservableAnalyzer):
base_url: str = "https://api.hunter.io/v2/domain-search?"
url: str = "https://api.hunter.io/v2/domain-search?"

_api_key_name: str

@classmethod
def update(cls) -> bool:
pass

def run(self):
url = (
f"{self.base_url}domain={self.observable_name}&api_key={self._api_key_name}"
)
url = f"{self.url}domain={self.observable_name}&api_key={self._api_key_name}"
response = requests.get(url)
response.raise_for_status()

Expand Down
4 changes: 2 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/inquest.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


class InQuest(ObservableAnalyzer):
base_url: str = "https://labs.inquest.net"
url: str = "https://labs.inquest.net"

_api_key_name: str
inquest_analysis: str
Expand Down Expand Up @@ -104,7 +104,7 @@ def run(self):
"Supported are: 'dfi_search', 'iocdb_search', 'repdb_search'."
)

response = requests.get(self.base_url + uri, headers=headers, timeout=30)
response = requests.get(self.url + uri, headers=headers, timeout=30)
response.raise_for_status()
result = response.json()
if (
Expand Down
4 changes: 2 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/ip2location.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@


class Ip2location(classes.ObservableAnalyzer):
base_url: str = "https://api.ip2location.io/"
url: str = "https://api.ip2location.io/"
_api_key_name: str
api_version: str

def get_response(self, payload):
return requests.get(self.base_url, params=payload)
return requests.get(self.url, params=payload)

def run(self):
try:
Expand Down
8 changes: 6 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/ipinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,18 @@


class IPInfo(classes.ObservableAnalyzer):
base_url: str = "https://ipinfo.io/"
url: str = "https://ipinfo.io/"

_api_key_name: str

@classmethod
def update(cls) -> bool:
pass

def run(self):
try:
response = requests.get(
self.base_url + self.observable_name,
self.url + self.observable_name,
params={"token": self._api_key_name},
)
response.raise_for_status()
Expand Down
4 changes: 2 additions & 2 deletions api_app/analyzers_manager/observable_analyzers/koodous.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@


class Koodous(classes.ObservableAnalyzer):
base_url: str = "https://developer.koodous.com/apks/"
url: str = "https://developer.koodous.com/apks/"
query_analysis = "/analysis"

_api_key_name: str
Expand All @@ -19,7 +19,7 @@ def get_response(self, url):
)

def run(self):
common_url = self.base_url + self.observable_name
common_url = self.url + self.observable_name

apk_info = self.get_response(common_url)
apk_info.raise_for_status()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@


class MnemonicPassiveDNS(classes.ObservableAnalyzer):
base_url: str = "https://api.mnemonic.no/pdns/v3/"
url: str = "https://api.mnemonic.no/pdns/v3/"

cof_format: bool
limit: int

def run(self):
if self.cof_format:
self.base_url += "cof/"
self.url += "cof/"
response = requests.get(
self.base_url + self.observable_name, data={"limit": self.limit}
self.url + self.observable_name, data={"limit": self.limit}
)
response.raise_for_status()

Expand Down
Loading

0 comments on commit cd940e2

Please sign in to comment.