Skip to content

Commit 59233ce

Browse files
committed
Added run KQL query to azure sentinel
1 parent 0f12c43 commit 59233ce

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

azure-sentinel/1.0.0/api.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,4 +238,32 @@ actions:
238238
returns:
239239
schema:
240240
type: string
241+
- name: run_query
242+
description: Runs a KQL query in your tenant
243+
parameters:
244+
- name: query
245+
description: The query to run
246+
multiline: false
247+
example: "SecurityEvent | where EventID == \"4688\" | where CommandLine contains \"-noni -ep bypass $\""
248+
required: true
249+
schema:
250+
type: string
251+
- name: query_category
252+
description: The comment to add
253+
multiline: false
254+
example: "Hunting Queries"
255+
required: true
256+
schema:
257+
type: string
258+
- name: query_name
259+
description: The name to use for the query
260+
multiline: false
261+
example: "HuntingRule02"
262+
required: true
263+
schema:
264+
type: string
265+
returns:
266+
returns:
267+
schema:
268+
type: string
241269
large_image: data:image/svg+xml;base64,PHN2ZyBpZD0iYTc1ZTNmM2EtMjY2MS00MTBiLTgyZmItZDMwMGQzN2RlYTJkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImFmZjYwZGRmLWVlYzEtNDBiZi04YmY1LWYzZTNiNTBlODgxOCIgeDE9IjkiIHkxPSIxNi4yMSIgeDI9IjkiIHkyPSIwLjYyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWI5M2ViIiAvPjxzdG9wIG9mZnNldD0iMC4yMSIgc3RvcC1jb2xvcj0iIzIwOTVlYiIgLz48c3RvcCBvZmZzZXQ9IjAuNDQiIHN0b3AtY29sb3I9IiMyZTljZWQiIC8+PHN0b3Agb2Zmc2V0PSIwLjY5IiBzdG9wLWNvbG9yPSIjNDVhN2VmIiAvPjxzdG9wIG9mZnNldD0iMC45NSIgc3RvcC1jb2xvcj0iIzY0YjZmMSIgLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM2YmI5ZjIiIC8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPkljb24tc2VjdXJpdHktMjQ4PC90aXRsZT48cGF0aCBkPSJNMTYsOC40NGMwLDQuNTctNS41Myw4LjI1LTYuNzMsOWEuNDMuNDMsMCwwLDEtLjQ2LDBDNy41NywxNi42OSwyLDEzLDIsOC40NFYyLjk0YS40NC40NCwwLDAsMSwuNDMtLjQ0QzYuNzcsMi4zOSw1Ljc4LjUsOSwuNXMyLjIzLDEuODksNi41MywyYS40NC40NCwwLDAsMSwuNDMuNDRaIiBmaWxsPSIjMWI5M2ViIiAvPjxwYXRoIGQ9Ik0xNS4zOCw4LjQ4YzAsNC4yLTUuMDcsNy41Ny02LjE3LDguMjVhLjQuNCwwLDAsMS0uNDIsMGMtMS4xLS42OC02LjE3LTQuMDUtNi4xNy04LjI1di01QS40MS40MSwwLDAsMSwzLDNjMy45NC0uMTEsMy0xLjgzLDYtMS44M1MxMS4wNSwyLjkzLDE1LDNhLjQxLjQxLDAsMCwxLC4zOS40WiIgZmlsbD0idXJsKCNhZmY2MGRkZi1lZWMxLTQwYmYtOGJmNS1mM2UzYjUwZTg4MTgpIiAvPjxwYXRoIGQ9Ik05LDYuNTNBMi44OCwyLjg4LDAsMCwxLDExLjg0LDlhLjQ5LjQ5LDAsMCwwLC40OS40aDEuNGEuNDkuNDksMCwwLDAsLjUtLjUzLDUuMjYsNS4yNiwwLDAsMC0xMC40NiwwLC40OS40OSwwLDAsMCwuNS41M2gxLjRBLjQ5LjQ5LDAsMCwwLDYuMTYsOSwyLjg4LDIuODgsMCwwLDEsOSw2LjUzWiIgZmlsbD0iI2MzZjFmZiIgLz48Y2lyY2xlIGN4PSI5IiBjeT0iOS40IiByPSIxLjkxIiBmaWxsPSIjZmZmIiAvPjwvc3ZnPg==

azure-sentinel/1.0.0/src/app.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,43 @@ def add_comment(self, **kwargs):
242242

243243
return res.text
244244

245+
def run_query(self, **kwargs):
246+
247+
# Get a client credential access token
248+
auth = self.authenticate(
249+
kwargs["tenant_id"], kwargs["client_id"], kwargs["client_secret"]
250+
)
251+
if not auth["success"]:
252+
return {"error": auth["message"]}
253+
254+
query_url = f"{self.azure_url}/subscriptions/{kwargs['subscription_id']}/resourceGroups/{kwargs['resource_group_name']}/providers/Microsoft.OperationalInsights/workspaces/{kwargs['workspace_name']}/savedSearches"
255+
256+
#providers/Microsoft.SecurityInsights/incidents/{kwargs['incident_id']}/comments"
257+
258+
#PUT https://management.azure.com/subscriptions/{subscriptionId} _
259+
#/resourcegroups/{resourceGroupName} _
260+
#/providers/Microsoft.OperationalInsights/workspaces/{workspaceName} _
261+
#/savedSearches/{savedSearchId}?api-version=2020-03-01-preview
262+
263+
264+
params = {"api-version": "2020-01-01"}
265+
266+
comment_id = str(uuid.uuid4())
267+
comment_data = {
268+
"properties": {
269+
"Category": kwargs["query_category"],
270+
"DisplayName": kwargs["query_name"],
271+
"Query": {kwargs['query']},
272+
}
273+
}
274+
275+
276+
res = self.s.put(f"{comment_url}/{comment_id}", json=comment_data, params=params)
277+
if res.status_code != 200:
278+
raise ConnectionError(res.text)
279+
280+
return res.text
281+
245282

246283
if __name__ == "__main__":
247284
AzureSentinel.run()

0 commit comments

Comments
 (0)