兰花之嗅:入侵检测的技术与策略
1. 线程队列与攻击检测
在入侵检测过程中,存在多个具有相同部分运行轨迹的线程,它们在同一个数据块中等待不同的转换。我们将位置 i 处的线程队列定义为一个 ≤i 排序的数据块列表,由这些线程组成。目前,这种以线程而非部分运行轨迹来组织数据块的方式,仅对核心算法进行了微小修改,但在后续会发挥重要作用。
此外,为了去除非最短运行轨迹的线程,会维护一个集合 Kill,其中包含已到达最终状态的部分运行轨迹的诞生日期。当读取事件 i + 1 时,会首先将 Kill 重置为空集。接着,会遍历数据块 B1, B2, …, Bm 中的线程 R,并进行两项修改:
- 当在新的数据块 B′j′(0 ≤ j′ ≤ 2m)中产生一个到达最终状态的线程,且其运行轨迹为 R′ 时,会将 R′ 的诞生日期 i1 添加到 Kill 中,这代表一个最短的完整运行轨迹。
- 当轮到处理数据块 B1, B2, …, Bm 中的线程时,如果其诞生日期在 Kill 中,会直接忽略这些线程,从而将它们“杀死”。
同时,还会忽略其他一些线程。实际的线程队列由相关数据块的子集组成,在每个事件编号 i 处都能保持 ≤i 排序,这确保了具有给定诞生日期和签名且能到达最终状态的唯一完整运行轨迹,确实具有最短的子流。
在到达最终状态时,可能会认为此时应发出报告,警告安全管理员攻击已成功完成,并采取积极的对策。但实际上,这是错误的,因为它混淆了最终状态的两个不同角色:
- 识别已收集到足够信息,可判定确实正在发生攻击。
- 终止监测,并杀死相应的线程。
以 ptrace 为例,实际使用的签名有更多状态。状态 7 并非最终状态,
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



