5分钟搞定ReLU
|
为了高速且低功耗地执行各种应用中的人工智能任务,我们需要加速器。光计算系统也许能够满足这些领域特定的需求,但即便已经历半个世纪的研究,通用型光计算系统仍还未发展成一项成熟的实用技术。但是,人工智能推理(尤其是用于视觉计算应用的推理)也许能为基于光学和光子学系统的推理提供机会。 本文将回顾用于人工智能的光学计算的近期研究成果并探讨其潜力和挑战。 计算系统的能力正与它们试图理解的飞速增长的视觉数据进行军备竞赛。在自动驾驶、机器人视觉、智能家居、遥感、显微技术、监控、国防和物联网等多种应用中,计算成像系统都会记录和处理前所未有的巨量数据。对这些数据的解读不可能由人类完成,而是要使用基于人工智能(AI)构建的算法。 在这些应用之中,深度神经网络(DNN)正快速发展成为视觉数据处理的标准算法方法。这主要是因为 DNN 在许多基准上都取得了当前最佳的结果,而且往往超出其它方法一大截。深度学习近来的这些突破性进展主要得益于现代图形处理单元(GPU)的强大处理能力和并行计算能力以及大规模视觉数据集的可用性,这些进展让 DNN 可以高效地使用监督式机器学习策略执行训练。
但是,高端 GPU 和其它运行日趋复杂的神经网络的加速器的功耗和带宽需求非常高,它们需要大量处理时间而且具有尺寸庞大的外形。这些限制让人难以在边缘设备中使用 DNN,比如相机、自动化载具、机器人或物联网外围设备。以自动汽车中的视觉系统为例,其必须要能使用有限的计算资源实时地做出稳定可靠的决策。当汽车在高速行驶时,瞬间的决策关乎人的生死。事实上,如果计算成像系统能做到更精简,那么几乎所有边缘设备都能从中受益,这能带来更低的延迟以及尺寸、重量和功耗方面的改进。 简单地说,格式字符串错误是一类错误,其中攻击者将自己的格式字符串数据提供到格式化函数中,例如printf(attacker_controll)。然后,他们可以滥用对受控格式说明符的处理,以实现对目标进程空间的读写原语。 对此类漏洞的实际攻击主要依赖于滥用%n和%hn类格式说明符的能力。这些格式符会命令格式化函数将打印字符的当前运行计数分别写入整型(%n)或短整型(%hn)变量中,例如printf(“abcd%n”,&count)将通过指针参数将值4写入整型变量count中。 同样,在格式化函数的输出对攻击者可见的情况下,攻击者只需提供期望打印变量值(例如printf("%x%x%x%x"))的格式标识符,即可转储内存内容。当将预期的目标指针值与其%n个对应值对齐时,这种“吃掉”堆栈的能力也变得非常重要。 如果攻击者能够向格式化函数的调用堆栈提供受控数据(通常是通过恶意格式字符串本身来实现的),并禁用所有编译器缓解措施,则攻击者可以将对写入字符计数器的控制与对%n/%hn将写入的指针值的控制相结合,这样的话,他们就可以将自己控制的值写入指定的内存位置了。 通过使用诸如在格式说明符上设置精度/宽度等技巧,将写入字符计数器设置为特定值,并在支持的情况下设置直接参数访问索引,即使是少量的格式的字符串输入也能转化为攻击者强大的攻击原语。 C语言格式化函数中的直接参数访问(DPA)特性,允许我们指定用于格式标识符的参数的索引。例如printf("%2$s %1$sn", "first", "second") 将打印“ second first”,因为第一个字符串格式标识符指定了参数 2 (2$) ,第二个字符串格式标识符指定了参数1(1$)。同样,从攻击者的角度来看,使用DPA可使您直接偏移到存放给定%n/%hn写入所需的目标指针值的堆栈位置。理解DPA的用途对于回顾历史上的Perl示例非常重要。 小结
通常情况下,在高级语言的内存管理功能的实现代码中,往往存在着相对脆弱的基于C/C++的攻击面。这种问题可能存在于语言本身的核心实现中,也可能存在于将向高级语言提供基于C/C++的库的第三方语言生态系统中。本文中,我们为读者介绍了与此紧密相关的C格式字符串漏洞方面的知识,在下一篇文章中,我们将为读者介绍这些底层实现是如何影响解释型语言的安全性的。 (编辑:柳州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

