Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add rule to alert on known cryptomining ports in VPC flow logs #972

Merged
merged 11 commits into from
Nov 28, 2023
37 changes: 37 additions & 0 deletions global_helpers/panther_iocs.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,43 @@
"zer0day.ru",
}

# https://github.com/falcosecurity/rules/blob/64e2adb309b7e07953691eeb53347d28e361b0e3/rules/falco-sandbox_rules.yaml#L1367-L1374
CRYPTO_MINING_PORTS = {
egibs marked this conversation as resolved.
Show resolved Hide resolved
3333,
3334,
3335,
3336,
3357,
4444,
5555,
5556,
5588,
5730,
6099,
6641,
6642,
6666,
7777,
7778,
8000,
8001,
8008,
8080,
8118,
8333,
8888,
8899,
9332,
9999,
10300, # stratum
10343, # stratum ssl
14433,
14444,
18080, # monero p2p mainnet
18081, # monero rpc mainnet
45560,
45700,
}

# IOC Helper functions:
def ioc_match(indicators: list, known_iocs: set) -> list:
Expand Down
1 change: 1 addition & 0 deletions packs/aws.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ PackDefinition:
- AWS.Redshift.Cluster.Logging
- AWS.Redshift.Cluster.SnapshotRetention
- AWS.Redshift.Cluster.VersionUpgrade
- AWS.VPC.CryptoPorts
- AWS.VPC.FlowLogs
# AWS DataModels
- Standard.AWS.ALB
Expand Down
31 changes: 31 additions & 0 deletions rules/aws_vpc_flow_rules/aws_vpc_crypto_ports.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from ipaddress import ip_network

from panther_base_helpers import aws_rule_context
from panther_iocs import CRYPTO_MINING_PORTS

# List of allowed destination addresses
# with more commonly-used ports (e.g., 8080)
ALLOWED_DST_ADDRESSES = {}


def rule(event):
# Only alert on traffic originating from a private address
# and destined for a public address
if any(
[
not ip_network(event.get("srcaddr", "0.0.0.0/0")).is_private,
ip_network(event.get("dstaddr", "0.0.0.0/0")).is_private,
]
):
return False

return all(
[
event.get("dstport") in CRYPTO_MINING_PORTS,
event.get("dstaddr") not in ALLOWED_DST_ADDRESSES,
]
)


def alert_context(event):
return aws_rule_context(event)
53 changes: 53 additions & 0 deletions rules/aws_vpc_flow_rules/aws_vpc_crypto_ports.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
AnalysisType: rule
Filename: aws_vpc_crypto_ports.py
RuleID: "AWS.VPC.CryptoPorts"
DisplayName: "VPC Flow Logs Known Cryotomining Ports"
Enabled: false
LogTypes:
- AWS.VPCFlow
Tags:
- AWS
- Configuration Required
- Security Control
- Command and Control:Application Layer Protocol
Reports:
MITRE ATT&CK:
- TA0040:T1496
Severity: Low
Description: >
Alerts if a known cryptomining port is detected in outbound traffic.
Runbook: >
Investigate the host sending traffic over the known cryptomining ports for activity or signs of compromise or other malicious activity. Update network configurations appropriately.
Reference: https://unit42.paloaltonetworks.com/malicious-operations-of-exposed-iam-keys-cryptojacking/
SummaryAttributes:
- srcaddr
- dstaddr
- dstport
Tests:
-
Name: DstPortInKnownList-true
ExpectedResult: true
Log:
{
"dstport": 6641,
"dstaddr": "106.58.92.8",
"srcaddr": "10.0.0.1"
}
-
Name: DstPortTwoInKnownList-true
ExpectedResult: true
Log:
{
"dstport": 9332,
"dstaddr": "106.58.92.8",
"srcaddr": "10.0.0.1"
}
-
Name: DstPortNotInKnownList-true
ExpectedResult: false
Log:
{
"dstport": 443,
"dstaddr": "100.100.100.100",
"srcaddr": "10.0.0.1"
}