Skip to content

Commit e1524dd

Browse files
authored
Merge pull request GreedyBear-Project#562 from intelowlproject/develop
1.6.7
2 parents e05920d + 251994c commit e1524dd

13 files changed

Lines changed: 111 additions & 21 deletions

File tree

.env_template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ COMPOSE_FILE=docker/default.yml:docker/local.override.yml
1313
#COMPOSE_FILE=docker/default.yml:docker/local.override.yml:docker/elasticsearch.yml
1414

1515
# If you want to run a specific version, populate this
16-
# REACT_APP_INTELOWL_VERSION="1.6.6"
16+
# REACT_APP_INTELOWL_VERSION="1.6.7"

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
frontend/* @drosetti

.github/dependabot.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@ updates:
77
interval: "weekly"
88
day: "tuesday"
99
target-branch: "develop"
10-
reviewers:
11-
- mlodic
1210

1311
- package-ecosystem: "npm"
1412
directory: "/frontend"
1513
schedule:
1614
interval: "weekly"
1715
day: "tuesday"
1816
target-branch: "develop"
19-
reviewers:
20-
- drosetti
2117

2218

2319
- package-ecosystem: "docker"
@@ -26,8 +22,6 @@ updates:
2622
interval: "weekly"
2723
day: "tuesday"
2824
target-branch: "develop"
29-
reviewers:
30-
- mlodic
3125

3226

3327
- package-ecosystem: "github-actions"
@@ -36,5 +30,3 @@ updates:
3630
interval: "weekly"
3731
day: "tuesday"
3832
target-branch: "develop"
39-
reviewers:
40-
- mlodic

docker/.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
REACT_APP_GREEDYBEAR_VERSION="1.6.6"
1+
REACT_APP_GREEDYBEAR_VERSION="1.6.7"

greedybear/admin.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.contrib import admin, messages
66
from django.db.models import Q
77
from django.utils.translation import ngettext
8-
from greedybear.models import IOC, CommandSequence, CowrieSession, GeneralHoneypot, MassScanners, Sensors, Statistics
8+
from greedybear.models import IOC, CommandSequence, CowrieSession, GeneralHoneypot, MassScanners, Sensors, Statistics, WhatsMyIP
99

1010
logger = logging.getLogger(__name__)
1111

@@ -23,6 +23,13 @@ class StatisticsModelAdmin(admin.ModelAdmin):
2323
search_help_text = ["search for the IP address source"]
2424

2525

26+
@admin.register(WhatsMyIP)
27+
class WhatsMyIPModelAdmin(admin.ModelAdmin):
28+
list_display = ["domain", "added"]
29+
search_fields = ["domain"]
30+
search_help_text = ["search for the domain"]
31+
32+
2633
@admin.register(MassScanners)
2734
class MassScannersModelAdmin(admin.ModelAdmin):
2835
list_display = ["ip_address", "added", "reason"]

greedybear/celery.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,9 @@ def setup_loggers(*args, **kwargs):
126126
"schedule": crontab(hour=4, minute=3, day_of_week=0),
127127
"options": {"queue": "default"},
128128
},
129+
"get_whatsmyip": {
130+
"task": "greedybear.tasks.get_whatsmyip",
131+
"schedule": crontab(hour=4, minute=3, day_of_week=6),
132+
"options": {"queue": "default"},
133+
},
129134
}

greedybear/cronjobs/attacks.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from greedybear.cronjobs.base import ElasticJob
1414
from greedybear.cronjobs.scoring.scoring_jobs import UpdateScores
1515
from greedybear.cronjobs.sensors import ExtractSensors
16-
from greedybear.models import IOC, GeneralHoneypot, MassScanners, Sensors
16+
from greedybear.models import IOC, GeneralHoneypot, MassScanners, Sensors, WhatsMyIP, iocType
1717
from greedybear.settings import EXTRACTION_INTERVAL, LEGACY_EXTRACTION
1818

1919

@@ -68,10 +68,27 @@ def _add_ioc(self, ioc, attack_type: str, general=None):
6868
ioc_record.number_of_days_seen = len(ioc_record.days_seen)
6969
ioc_record.scanner = attack_type == SCANNER
7070
ioc_record.payload_request = attack_type == PAYLOAD_REQUEST
71-
ioc_record.save()
72-
self.ioc_records.append(ioc_record)
73-
self._threatfox_submission(ioc_record, ioc.related_urls)
74-
return ioc_record
71+
72+
filtered = False
73+
if ioc_record.type == iocType.DOMAIN:
74+
filtered = self._filter_whatsmyip(ioc_record.name)
75+
76+
if filtered:
77+
return None
78+
else:
79+
ioc_record.save()
80+
self.ioc_records.append(ioc_record)
81+
self._threatfox_submission(ioc_record, ioc.related_urls)
82+
return ioc_record
83+
84+
def _filter_whatsmyip(self, domain):
85+
try:
86+
WhatsMyIP.objects.get(domain=domain)
87+
except WhatsMyIP.DoesNotExist:
88+
return False
89+
else:
90+
self.log.info(f"{domain=} is a whats-my-ip domain. Filtering it.")
91+
return True
7592

7693
def _threatfox_submission(self, ioc_record: "IOC", related_urls: list):
7794
# we submit only payload request IOCs for now because they are more reliable
@@ -101,7 +118,7 @@ def _threatfox_submission(self, ioc_record: "IOC", related_urls: list):
101118
if ioc_record.log4j:
102119
seen_honeypots.append("log4pot")
103120
for honeypot in ioc_record.general_honeypot.all():
104-
seen_honeypots.append(honeypot)
121+
seen_honeypots.append(honeypot.name)
105122
seen_honeypots_str = ", ".join(seen_honeypots)
106123

107124
json_data = {

greedybear/cronjobs/cowrie.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ def _get_scanners(self):
3636
ioc.cowrie = True
3737
self.log.info(f"found IP {ioc.name} by honeypot cowrie")
3838
ioc = self._add_ioc(ioc, attack_type=SCANNER)
39-
self.added_scanners += 1
40-
self._extract_possible_payload_in_messages(ioc.name)
41-
self._get_sessions(ioc)
39+
if ioc:
40+
self.added_scanners += 1
41+
self._extract_possible_payload_in_messages(ioc.name)
42+
self._get_sessions(ioc)
4243

4344
def _extract_possible_payload_in_messages(self, scanner_ip):
4445
# looking for URLs inside attacks payloads

greedybear/cronjobs/whatsmyip.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import requests
2+
from greedybear.cronjobs.base import Cronjob
3+
from greedybear.models import IOC, WhatsMyIP
4+
5+
6+
class WhatsMyIPCron(Cronjob):
7+
def run(self) -> None:
8+
r = requests.get("https://raw.githubusercontent.com/MISP/misp-warninglists/refs/heads/main/lists/whats-my-ip/list.json", timeout=10)
9+
json_file = r.json()
10+
for domain in json_file["list"]:
11+
try:
12+
WhatsMyIP.objects.get(domain=domain)
13+
except WhatsMyIP.DoesNotExist:
14+
self.log.info(f"added new whatsmyip domain {domain=}")
15+
WhatsMyIP(domain=domain).save()
16+
self._remove_old_ioc(domain)
17+
18+
def _remove_old_ioc(self, domain):
19+
try:
20+
ioc = IOC.objects.get(name=domain)
21+
except IOC.DoesNotExist:
22+
pass
23+
else:
24+
ioc.delete()
25+
self.log.info(f"deleted whatsmyip {domain=}")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 4.2.20 on 2025-07-18 17:45
2+
3+
import datetime
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("greedybear", "0021_massscanners_greedybear__ip_addr_2aa484_idx"),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name="WhatsMyIP",
16+
fields=[
17+
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
18+
("domain", models.CharField(max_length=256)),
19+
("added", models.DateTimeField(default=datetime.datetime.now)),
20+
],
21+
options={
22+
"indexes": [models.Index(fields=["domain"], name="greedybear__domain_f89b04_idx")],
23+
},
24+
),
25+
]

0 commit comments

Comments
 (0)