Skip to content

Commit f87c3ae

Browse files
ui,popups: improved checksums verification
Verify the checksum of complex rules. Previously we only verified rules of type Simple.
1 parent f230b70 commit f87c3ae

File tree

2 files changed

+48
-29
lines changed

2 files changed

+48
-29
lines changed

ui/opensnitch/dialogs/prompt/__init__.py

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -360,36 +360,53 @@ def _set_cmd_action_text(self):
360360
def _display_checksums_warning(self, peer, con):
361361
self.messageLabel.setStyleSheet('')
362362
self.labelChecksumStatus.setText('')
363+
is_valid = True
364+
checksums = con.process_checksums
365+
expected_list = []
363366

364367
records = self._rules.get_by_field(peer, "operator_data", con.process_path)
365368

366369
if records != None and records.first():
367-
rule = Rule.new_from_records(records)
368-
validates, expected = _checksums.verify(con, rule)
369-
if not validates:
370-
self.messageLabel.setStyleSheet('color: red')
371-
self.messageLabel.setText(
372-
QC.translate("popups", "WARNING, bad checksum (<a href='#warning-checksum'>More info</a>)"
373-
)
374-
)
375-
self.labelChecksumNote.setText(
376-
QC.translate("popups", "<font color=\"red\">WARNING, checksums differ.</font><br><br>Current process ({0}):<br>{1}<br><br>Expected from the rule:<br>{2}"
377-
.format(
378-
con.process_id,
379-
con.process_checksums[Config.OPERAND_PROCESS_HASH_MD5],
380-
expected
381-
)))
382-
383-
self.comboChecksumRule.clear()
384-
self.comboChecksumRule.addItem(rule.name)
385-
while records.next():
386-
rule = Rule.new_from_records(records)
387-
self.comboChecksumRule.addItem(rule.name)
388-
389-
return "<b>WARNING</b><br>bad md5<br>This process:{0}<br>Expected from rule: {1}<br><br>".format(
390-
con.process_checksums[Config.OPERAND_PROCESS_HASH_MD5],
391-
expected
392-
)
370+
rules_names = []
371+
while True:
372+
if not records.next():
373+
break
374+
rule = Rule.new_from_records(records)
375+
376+
if not rule.enabled:
377+
continue
378+
rules_names.append(rule.name)
379+
validates, expected = _checksums.verify(checksums, rule)
380+
if not validates:
381+
expected_list.append(expected)
382+
is_valid &= validates
383+
384+
if is_valid:
385+
return ""
386+
387+
self.messageLabel.setStyleSheet('color: red')
388+
self.messageLabel.setText(
389+
QC.translate("popups", "WARNING, bad checksum (<a href='#warning-checksum'>More info</a>)"
390+
)
391+
)
392+
self.labelChecksumNote.setText(
393+
QC.translate(
394+
"popups",
395+
"<font color=\"red\">WARNING, checksums differ for at least one rule.</font><br><br>Current process ({0}):<br>{1}<br><br>Expected from the rule:<br>{2}"
396+
.format(
397+
con.process_id,
398+
checksums[Config.OPERAND_PROCESS_HASH_MD5],
399+
expected_list
400+
))
401+
)
402+
403+
self.comboChecksumRule.clear()
404+
self.comboChecksumRule.addItems(rules_names)
405+
406+
return "<b>WARNING</b><br>bad md5<br>This process:{0}<br>Expected from rule: {1}<br><br>".format(
407+
checksums[Config.OPERAND_PROCESS_HASH_MD5],
408+
expected
409+
)
393410

394411
return ""
395412

ui/opensnitch/dialogs/prompt/_checksums.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from opensnitch.config import Config
33
from opensnitch.rules import Rule
44

5-
def verify(con, rule):
5+
def verify(checksums, rule):
66
"""return true if the checksum of a rule matches the one of the process
77
opening a connection.
88
"""
@@ -13,12 +13,14 @@ def verify(con, rule):
1313

1414
# checksum will be empty if the daemon failed to calculate it.
1515
# in this case assume that it's ok (ignore it).
16-
if con.process_checksums[Config.OPERAND_PROCESS_HASH_MD5] == "":
16+
if checksums[Config.OPERAND_PROCESS_HASH_MD5] == "":
1717
return True, ""
1818

19+
if not rule.enabled:
20+
return True, ""
1921
for ro in rule.operator.list:
2022
if ro.type == Config.RULE_TYPE_SIMPLE and ro.operand == Config.OPERAND_PROCESS_HASH_MD5:
21-
if ro.data != con.process_checksums[Config.OPERAND_PROCESS_HASH_MD5]:
23+
if ro.data != checksums[Config.OPERAND_PROCESS_HASH_MD5]:
2224
return False, ro.data
2325

2426
return True, ""

0 commit comments

Comments
 (0)