人脸识别百亿蓝海之下还需要解决什么
复杂,但我们只需要关注以下几点:_dl_fixup是如何通过与我们控制的linkmap中的三个主要指针进行交互,来解析和重定位函数地址的,所有这些指针都是从linkmap的l_info数组中提取的:
Elf二进制文件中的.dynamic段用于保存解析器需要获取的各个段的信息。在我们的例子中,.dynstr (STRTAB)、.dynsym (SYMTAB)和.rela.plt (JMPREL)段都是解析和重定位函数所需要的。
动态条目(Dynamic entry)的结构如下所示: 诸如pylint的Python或eslint的JavaScript之类的linter非常适合通用的广泛语言标准。但是代码审查中的常见问题呢,例如使用打印语句而不是记录程序,或者在for循环(特定于Go)中使用defer语句,或者多层嵌套循环等。 大多数开发人员没有使用语言解析的经验。因此,在中小型团队中看到自定义Lint规则并不常见。尽管没有哪一种Linter或语言比其他Linter复杂得多(全都是AST操作),但是学习每种语言Linter的AST和框架要付出很小的代价。 semgrep规则的一个优点是,可以学习semgrep模式匹配语法(这非常简单),然后可以为想要为其编写规则的任何语言编写规则。 Semgrep使用代码的标准表达进行模式匹配,而无需复杂的查询或者正则。可用于在DevSecOps各个阶段:代码编写,代码提交或者CI运行时发现Bug和漏洞。其精确的规则看起来就像要搜索的代码,无需遍历抽象语法树或与正则表达式死扛。与传统的正则表达式(和传统的grep)不同,它可以找到递归模式。这使其特别有用,可以作为学习查找任何语言模式的工具。 Semgrep还支持容器化方式部署和运行,由emgrep官方注册表中,有Semgrep社区维护的包安全性,正确性,性能,代码质量和Bug等各方面的1000多规则可直接拿来使用。 Semgrep软件安全公司r2c开发并提供商业支持。目前已经有大量的企业用于生产环境中,也有很多工具比如NodeJsScan之类底层支持引擎。 基本准备
本文中我们所有的例子都需要运行docker,并基于semgrep基本镜像returntocorp/semgrep。docker安装和配置过程我们不在介绍,首先从docker官方拉一个最新的镜像备用: 当然,这个技术还存在其他变体,例如在内存中的已知位置提供一个完全精心制作的linkmap,用相对寻址来伪造重定位和符号数据。这里的目标同样是滥用运行时解析器,从已知的内存位置偏移到攻击者想要转移执行的位置。 然而,虽然在我们的例子中,我们能够提供一个精心制作的linkmap,但我们并不能控制运行时解析器的参数。此外,我们也还没有掌握执行控制权,而是旨在“策反”运行时解析器,通过我们精心制作的linkmap数据,以绕过ASLR机制并实现执行重定向。由于堆的基地址是随机的,而且我们是通过PNG文件来攻击进程的,所以,我们没有办法泄露linkmap的位置,因此我们只能基于非PIE节点二进制文件来进行内存布局和内容假设。
为了更好地了解如何实现攻击者的目标,让我们来看看_dl_fixup的工作原理。在这里,所有的代码引用都来自glibc-2.27。 (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |