我为MSSP工作,我们可以根据一些简单的if-then逻辑来处理我们处理的许多安全警报(尤其是针对新客户),而无需花费分析师时间进行研究。为了处理这类警报,我正在构建一个带有一系列逻辑测试的基本python程序,以查看给定的警报是否属于“已知”类别并且可以自动处理。
我希望的格式是为我们为组织目的服务的每个客户提供一个单独的python文件,并且在每个文件中包含一系列条件,并在满足条件时采取相应的措施。然后,管理脚本会提取警报数据,并通过相应客户端文件中的每个条件运行警报数据,当条件返回True
时,它将把数据传递到相应的动作函数中。所以我的问题是如何组织这个。
当前,在客户文件中,我有一个用于每个“已知”条件的类,带有两个@staticmethod
函数:condition()和action()。那么,管理脚本的逻辑实际上就是[pseudocode]:
for class in client_file:
if class.condition(alert_data):
class.action(alert_data)
在组织上,我喜欢这个。每个客户端都有一个文件,每个要查找的已知事物都有一个类。我很犹豫,我不确定这是“ pythonic”还是一般的犹太洁食。我之所以使用@staticmethod
,是因为我不需要这些类具有多个实例,我只是喜欢将功能分组到具有逻辑相关性的类中的组织能力,但是看起来还是有点奇怪,我担心可能会造成混乱。
所以我对社区的意见感兴趣,这对于我的应用程序来说似乎是一种不错的组织方法,或者您对保持一切整洁的更好方法有何建议?
示例类:
class HostIsWindows:
@staticmethod
def condition(alert_data):
if 'os_type' in alert and alert['os_type'] == 'windows':
return True
else:
return False
@staticmethod
def action(alert_data):
... do something ...
return "This is a result message."