事件驱动系统的安全风险

事件驱动系统

事件驱动系统的目的是高效地管理同时执行并相互交互的多个对象和环境。一个事件驱动系统是一个由对象组成的系统,它们使用消息传递机制相互交互。这个机制由一个独立的组件控制,通常称为事件调度程序,它充当对象之间的中介。

  • 被传递的数据称为事件,它们可以以未经处理的形式(原始事件)来自输入设备,也可以是对象之间通信的结果。
    • 对象以事件消息的形式接收事件,通常由固定长度的事件类型标识符和事件参数组成。
  • 每个对象都有一个指定的编程过程,称为事件过程,它为每种类型的事件消息调用个别的事件处理程序。
  • 自定义事件消息被定义为可能将其字段设置为任何值的事件消息。受害者可以是已经运行的应用程序,也可以是由攻击者发起并通过发送适当的事件消息进行控制的应用程序。

例子:假设在一个用户界面中,用户点击绘图应用程序窗口的客户区域的左键。这会生成一个包含鼠标位置和那一刻按下的鼠标按钮的原始事件。事件调度程序接收原始事件,并添加诸如目标应用程序的信息,创建一个事件消息,并将其放入队列中,以供接收应用程序获取。接收应用程序检查新消息并找到它。随后,执行事件过程,并选择适当的事件处理程序来处理特定的鼠标事件消息。

事件驱动系统攻击者的能力

不同的事件驱动系统在事件处理方面具有不同的特点,因此攻击者在攻击过程中可能具有以下几个能力中一个或者多个。

  1. 枚举:要求对象必须能够枚举(遍历)事件驱动系统的对象并检索可帮助进行攻击的描述性信息。枚举对象是一种常见的功能,通常没有对可以枚举的对象施加任何限制。例如,EnumWindows命令可以设置回调函数,并将其传递给系统以便为每个可用窗口执行迭代。这个函数可以使用第二个参数将窗口的识别信息返回给主程序。
  2. 发送:要求对象必须能够向其他对象发送事件消息,包括可能是自定义事件消息的非特权对象向至少一种更高特权对象发送事件。在事件驱动系统中,无需任何访问控制即可将事件发送给任何接收方的能力是常见的。具体来说,要向另一个对象发送事件,应用程序调用事件调度程序的导出过程,将事件放入系统的事件队列中。事件调度程序检查其队列中的未调度消息,并将它们分发给各个对象队列。当攻击者具有发送能力,这相当于,将消息放置在事件调度程序的消息队列中的方法不会检查消息的来源。例如,PostMessage命令向受害者进程发送一个事件消息,可以强制其终止。
  3. 拦截:要求对象必须能够拦截来自其他对象的事件消息,包括非特权对象拦截高特权对象的事件。拦截功能通常用于调试目的和帮助自动化软件测试。例如,SetWindowsHookEx命令设置一个钩子,一个能够在实际接收者之前接收所有与键盘相关的消息的过程。

潜在的风险

事件驱动模型的拒绝服务攻击

在一个绘图应用程序中,用户可以通过按住鼠标按钮、拖动鼠标然后释放鼠标按钮来画一条线。在这个三步骤的过程中,绘图应用程序从鼠标设备接收到以下消息:

“WM_LBUTTONDOWN -> WM_MOUSEMOVE -> WM_MOUSEMOVE -> WM_MOUSEMOVE -> WM_LBUTTONUP”。

攻击者可以在鼠标按钮实际释放之前发送第二个WM_LBUTTONDOWN,程序员可能不会检查源代码的有效性。如果使用计数器(而不是标志)来跟踪鼠标按钮的按下或松开状态,那么应用程序可能会混淆,并且认为鼠标按钮一直按下。

运行应用程序的修改

如果应用程序希望将文本框的状态从启用更改为禁用,以显示它不再使用,它会向特定组件发送一个禁用消息。在安装应用程序时,通常会向用户显示一个最终用户许可协议(EULA),用户必须遵守该协议才能继续安装。这个协议显示在一个通常是只读的文本框中,以防止被修改。为了继续安装,用户别无选择,只能选择接受单选按钮,隐式接受显示的许可协议。然而,攻击者可以轻易地向EULA文本框发送一个精心构造的事件消息,将其转换为可修改的状态。然后,在选择接受并继续之前,可以任意编辑。这种修改过程的存在并不使许可协议无效,因为攻击者故意修改了许可内容。

未经授权访问对象

当满足条件枚举和发送时,任何对象都可以向任何其他对象发送事件。因此,一个非特权对象可以通过发送事件来操作一个特权对象。

在Windows操作系统中,如果管理员已登录,非特权的木马程序可以发送适当的事件序列来添加一个新的管理员账户。否则,木马程序可以暂时禁用个人防火墙以便与互联网通信。另外,攻击者可以在管理员尝试向服务进行身份验证时截取管理员的密码。身份验证过程通常涉及在两个文本框中输入用户名和密码。密码文本框具有一个属性,它会在密码键入的每个字符位置显示星号。另一个属性是,在此文本框上无法执行复制和粘贴操作。无法执行复制和粘贴操作是由于第一个属性隐藏了用户输入。攻击者可以通过发送消息暂时禁用密码隐藏属性来绕过这种保护,以执行复制和粘贴操作,然后再次使用消息启用它,这个操作发生得足够快,以至于受害者没有观察到视觉上的变化。

执行恶意代码。

事件消息是一个固定和有限长度的结构,人们期望它不允许传递恶意代码给受害者。

攻击者可以使用间接方法,例如让受害者对象去读取文件,来将恶意代码放入受害者的地址空间中。因此,可以构建自定义的事件序列执行此代码。另一种情况是与缓冲区溢出的结合。攻击者发送自定义的事件消息序列,以实现缓冲区溢出。在Windows 2000中,应用程序可以执行驻留在其地址空间中的代码。因此,攻击者可以找到受害者应用程序中已有的函数并执行它。

事件拦截。

能拦截发送给对象的事件使得攻击者能够突破对象与系统之间通信的机密性。在用户界面环境中,拦截键盘事件可以轻松地揭示使用键盘输入的身份验证详细信息。在另一种情况下,一些公钥算法中密钥对生成的随机性基于用户在屏幕上随机移动鼠标。拦截鼠标移动可能导致私钥的计算泄露。

成因

风险出现的原因有两个方面。

  • 首先,对于事件驱动系统的对象枚举、事件发送和事件拦截,通常没有访问控制机制。这主要是因为添加访问控制会导致性能下降,并增加了访问控制规则的处理复杂性。
  • 其次,很难有效控制发送给对象的错误事件的影响。对象通过与环境的交互来改变状态。如果其安全性受到损害,则是由于其内部逻辑无法有效地过滤输入。

对策

任何对策都应该集中在事件驱动系统的两点上。确定事件的起源和确保对象在接收到各种组合的事件时能正确运行的。

  1. 恶意对象攻击事件驱动系统,通常由于恶意对象能够枚举可用的事件对象,然后向系统发送事件。系统中应该有机制限制对象的枚举和发送事件,只允许特定请求的对象进行。

  2. 此外,应该对可用的事件类型进行安全审查,并标记那些潜在危险的事件,例如传递内存引用的事件。然后,在源代码的安全检查中,应该检查这些事件类型是否存在被利用的可能性。

  3. 此外,事件调度程序应该能够识别来自可信对象发送的事件与来自其他源(例如输入设备或系统本身)发送的事件的区别。对象用于发送消息的系统过程可以将它们标记为不安全,并将其转发给防火墙组件。或者,应用程序本身可以注意到特殊标志并相应地处理这些事件。

  4. 此外,在计算设备(如自动取款机)的安全评估中,应该进行注入恶意事件的威胁测试。

  5. 最后,可以通过过滤恶意事件消息提供一定程度的安全性。尽管这会降低性能。

术语关联

事件驱动:消息队列、事件触发
安全风险:攻击、漏洞、恶意事件

参考文献

[1] Xenitellis, Simeon. “Security vulnerabilities in event-driven systems.” Security in the Information Society: Visions and Perspectives (2002): 147-160.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 纵向顶部往下动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-top: isAnimating }"><!-- 元素内容 -->&…

八股文打卡day17——计算机网络(17)

面试题&#xff1a;拥塞控制是怎么实现的&#xff1f; 我的回答&#xff1a; 1.慢启动 在连接刚建立的时候&#xff0c;会缓慢调大滑动窗口的大小&#xff0c;从而加大网络传输速率&#xff0c;避免速率太快&#xff0c;造成拥塞。 2.拥塞避免 慢启动之后&#xff0c;会进入拥…

vue3(十)-基础入门之Swiper轮播与自定义指令

一、Swiper html : 注意&#xff1a; class“swiper-wrapper”、class“swiper-slide” 等类名不能写错 <body><!-- 导入下载好的包或通过 CDN 导入vue、swiper.js、swiper.css --><!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"&…

ROS安装PR2

一、PR2介绍 PR2是Willow Garage公司设计的机器人平台&#xff0c;也是目前科研领域经常用到的机器人之一。PR2有两条手臂&#xff0c;每条手臂七个关节&#xff0c;手臂末端是一个可以张合的夹爪&#xff1b;PR2依靠底部的四个轮子移动&#xff0c;在头部、胸部、肘部、夹爪上…

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口)

Java实现树结构&#xff08;为前端实现级联菜单或者是下拉菜单接口&#xff09; 我们常常会遇到这样一个问题&#xff0c;就是前端要实现的样式是一个级联菜单或者是下拉树&#xff0c;如图 这样的数据接口是怎么实现的呢&#xff0c;是什么样子的呢&#xff1f; 我们可以看看 …

初始SpringBoot:详解特性和结构

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、SpringBoot…

[情商-2]:理解情商最关注的要素 - 情绪,情绪,情绪,不是事情本身,不是逻辑推理,不是讲道理

前言&#xff1a; 情商最关注的要素是情绪&#xff0c;他人的情形&#xff0c;自己的情绪&#xff0c;情绪是一个完全不同于技术人员经常关注的逻辑推理、问题解决。对于技术人员而言&#xff0c;它是一个完全不同的领域&#xff0c;有着不同的行为模式。 因此&#xff0c;在…

k8s安装

K8s 安装教程 v1.24 第一步前置环境调试 第一步确定自己的内核版本高于3 uname -sr 第二步&#xff1a;使用elrepo源升级内核检查发现当前内核版本是3.10, 使用elrepo源升级内核 配置elrepo源&#xff0c;执行如下命令 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elre…

科普:敏捷估算为什么用斐波那契数列

被一个同学问&#xff1a;敏捷估算为什么用斐波那契数列&#xff1f;有什么意义&#xff1f; 简单说说我自己的简介&#xff1a; 敏捷开发中使用斐波那契数列来估算的原因是&#xff0c;斐波那契数列可以用于估算任务的难度级别&#xff0c;并帮助团队预测完成任务所需的时间…

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…

ubuntu设置显示应用程序

按住win键&#xff0c;可以搜索到想要的应用程序 或者是点击屏幕左下角的9个点图标&#xff0c;在应用程序列表中能看到这个的程序 设置android studio 在/usr/share/applications目录里&#xff0c;创建文件android-studio.desktop&#xff0c;内容如下&#xff1a; [Desk…

AI人工智能技术发现了拉斐尔名画背后的秘密:这幅画并非完全由大师本人完成

最近&#xff0c;一个先进的人工智能神经网络在拉斐尔的名画中发现了一个不寻常的地方&#xff1a;其中的一副面孔并非由拉斐尔本人绘制&#xff0c;而是出自其他艺术家之手。 详细文章网址链接&#xff1a;Deep transfer learning for visual analysis and attribution of pai…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡&#xff08;目标地址和端口交换&#xff09;…

[C#]使用ONNXRuntime部署一种用于边缘检测的轻量级密集卷积神经网络LDC

源码地址&#xff1a; github.com/xavysp/LDC LDC: Lightweight Dense CNN for Edge Detection算法介绍&#xff1a; 由于深度学习方法的快速发展&#xff0c;近年来&#xff0c;用于执行图像边缘检测的卷积神经网络&#xff08;CNN&#xff09;模型爆炸性地传播。但边缘检测…

【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

10 标准库的硬件I2C驱动mpu6050模块

阅读引言&#xff1a;本文只是给大家分享硬件I2C读取mpu6050加速度&#xff0c; 角速度&#xff0c; 温度的代码。 #ifndef __MPU6050_H #define __MPU6050_Hvoid MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data); uint8_t MPU6050_ReadReg(uint8_t RegAddress);void MPU6…

计算机视觉工程师就业前景如何

计算机视觉主要涵盖了图像处理、模式识别等多个领域&#xff0c;可以应用到很多行业中。随着人工智能技术的快速发展&#xff0c;计算机视觉作为其中的重要分支之一&#xff0c;其就业前景非常广阔。 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国…

Sensor Demosaic IP 手册PG286笔记

《 UG1449 Multimedia User Guide》中包含了大量的多媒体IP简介。 本IP 用于对bayer RGB&#xff08;每个pixel只有单个R/G/B&#xff09;做去马赛克处理&#xff0c;恢复成每个pixel点都有完整的RGB值。通过axi接口配置IP内部erg。 1、算法手册中的描述 提到了几种插值算法&…

MySQL基础笔记(1)基础理论

一.基本概念 DB&#xff1a;数据库&#xff0c;存储数据的仓库&#xff0c;数据是有组织地进行存储DBMS&#xff1a;操纵和管理数据库的大型软件 SQL&#xff1a;结构化查询语言&#xff0c;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库的统一标准 &…

ref和reactive的区别

理解&#xff1a; 1.ref是定义简单类型 和单一的对象 2.reactive 定义复杂的类型 梳理文档&#xff1a; ref和reactive都是Vue.js 3.x版本中新增的响应式API&#xff0c;用于实现组件的数据响应式更新。它们的主要区别如下&#xff1a; 1. 数据类型不同&#xff1a;ref用于包…