如今,网络犯罪分子如同企业一般运作,利用物联网连接和标准化平台扩大攻击规模,瞄准高价值资产,同时最大限度地降低成本。防御者必须像攻击者一样思考:识别有价值的资产和 STRIDE 威胁,绘制逆向工程、修改和自动化攻击阶段的流程图,然后通过分层、可更新的防御措施提高攻击者的成本。SPIDER 模型概述了完整性 (Integrity)、多样性 (Diversity)、纠缠 (Entanglement) 和可更新性 (Renewability),并提倡完整性检查、控制和数据流转换、混淆、白盒加密、反调试、反钩子、越狱检测、指纹识别和安全存储。结合软件和硬件保护措施,并不断更新多样化的防御实例,可以降低攻击成本,从而保护企业价值。
如今,计算机的不当行为最常以务实的方式进行。
本文首次发表于 2018 年伊斯坦布尔国际电梯和自动扶梯研讨会。 有关 3 年 4 月 2019 日至 XNUMX 日在拉斯维加斯举行的活动的更多信息和参与,请访问 www.elevatorsymposium.org.
“Inside the Mind of a Hacker”听起来有点像心理惊悚片的标题。 您可以将主角想象成一只孤狼,在清晨醒来,精心打造完美的黑客,在世界各地肆虐。 然而,现实却大不相同。 犯罪黑客的工作与任何其他业务一样,是商业网络(尽管是非法的)的一部分,具有明确的商业模式。 我们已经远离孤独的黑客刻板印象。
黑客业务正在蓬勃发展。 似乎每一天都没有发现私人数据泄露、僵尸网络、勒索软件攻击和零日漏洞的报告。 有许多因素在起作用,它们共同形成了完美的风暴:
- 从汽车到心脏起搏器等众多设备之间的连接性增强,为黑客入侵创造了更多机会。在许多情况下,互联网连接只是简单地添加到这些设备中,而没有过多考虑安全风险——无论是对设备还是生态系统它在其中运作。
- 随着连接性的增加,传统信息技术 (IT) 安全基础设施之外的设备也在激增。 这些设备构成了物联网 (IoT) 网络的边缘,但很容易被黑客访问。 一旦落入攻击者手中,他们就有大量时间来应用他们的工具和技术,并在设备中找到可扩展的攻击。
- 暗网等网络,甚至只是互联网,已经成为黑客业务的平台,因为它们消除了发起端到端攻击的复杂性。 相反,网络犯罪分子可以专注于价值链的一部分,例如创建僵尸网络并将其出售给出价最高的人。
- 通用芯片组或平台(如 Linux 和 Android)的标准化允许黑客使用他们的工具来对付许多产品,通常是针对截然不同市场的目标。 这使得他们的黑客可以在国家、行业、设备和云平台之间进行扩展和转移。
鉴于所有这些变化,令人惊讶的是,我们仍然像 20 年前一样处理软件安全:
- 仍然非常关注网络或外围安全,旨在防止外部人员访问软件。 但是,这与不可阻挡的推动一切联系直接背道而驰。 到了某个时候,就不会有“局外人”这样的东西了。
- 仍然有一个目标是从一开始就使某些东西“完全安全”,而很少考虑发展这种安全性。 但是这个模型忽略了软件的最大优势之一:它很容易更新。
在当今互联的世界中,您需要一种不同的方法,一种更加关注犯罪黑客试图实现的目标,一种从我们的软件在可访问的、因此是敌对的环境中运行的前提开始的方法。 您需要确定您最有价值的资产,探索为什么其他人对它们感兴趣,弄清楚它们如何被具有特权访问权限的人攻击,然后应用防御措施使这些攻击无利可图。 你需要开始像黑客一样思考。
黑客业务
一旦我们认识到犯罪黑客的运作方式就像一个企业,我们就会看到他们与任何其他企业的目标相同——最大化收入和最小化成本。
收入
黑客将追逐对他们最有价值的目标。 是否有可以获取的知识产权 (IP) 或专有算法? 可以在暗网上出售的个人数据? 一个可以妥协的安全系统? 有没有办法使系统瘫痪或损害公司或品牌以勒索赎金? 或者,更直接地说,是否存在可以操纵的资金流? 资产越有价值,回报就越大。 此外,弱点越常见,可以获得的收入就越多。
Cost
攻击设置得越快,其成本就越低,因此黑客往往会选择阻力最小的路径。 想象一下窃贼——他不会试图破坏前门的坚固安全装置或穿过安装有传感器的底层窗户。 他会用便宜的挂锁找到棚子,进入梯子,然后闯入上面的地板。 就像房子一样,软件永远不会是完全无法穿透的,但任何使黑客攻击太耗时或一次性攻击(因此成本太高)的事情都会鼓励黑客转向更容易的目标。
资产和威胁识别
像黑客一样思考首先问自己一个基本问题:“我有什么是黑客想要的?” 这些是必须保护的资产。 如上所述,这可能包括 IP、数字内容、个人数据等。
对于每项资产,您都会问:“黑客可以用它做什么?” 更具体地说,“他们将如何利用资产来增加收入?” 这些就是威胁,而且它们永远存在。 例如,犯罪黑客可能会从您的应用程序中提取有价值的 IP 并使用它来制造竞争产品,而无需重复您的大量研发投资。 只要您的产品处于活动状态,这种威胁(知识产权盗窃)就会一直存在。
对威胁进行分类的一种方法是由 Microsoft 开发的 STRIDE 模型。 STRIDE 代表一种将威胁分为六类的方法:
- 欺骗 - 冒充一个人或一个过程
- 篡改——修改资产
- 否认——否认某项行动发生
- 信息披露——泄露秘密
- 拒绝服务——影响系统的可用性
- 特权提升——未经授权的访问
这种模型有助于鼓励对威胁进行更全面的考虑。 如果犯罪分子没有窃取 IP 来销售竞争产品(信息披露),而是提供一项服务来禁用您软件中的许可证检查(篡改),从而允许其自由盗版,该怎么办? 如果犯罪分子想让您的公司难堪以通过卖空您的股票价格获利怎么办? 或者,如果犯罪分子实际上对攻击您的公司并不感兴趣,而是将您的产品视为针对您所有客户的大规模攻击媒介,该怎么办? 对于黑客来说,这些模式中的每一种都是完全不同的商业模式,但它们对您的业务的损害都一样。
攻击 识别
既然您已经确定了黑客想要什么以及他们想用它做什么,您就可以像黑客一样思考下一部分:“他们将如何获取我的资产?” 这些是针对您的软件的攻击。 在识别攻击时彻底是非常重要的,因为这是黑客的主要优势:他们只需要找到一种攻击,而您必须防御所有攻击。
本文重点讨论软件攻击,因为这条途径经常被忽视,但攻击识别还必须考虑硬件攻击、协议攻击、数据库攻击、网络攻击、云攻击等。
攻击阶段
了解几乎所有攻击开发都经历可预测的阶段非常重要:
- 逆向工程——分析代码和数据,寻找资产和漏洞(攻击路径)
- 修改——静态或动态篡改代码或数据以实现威胁
- 自动化——允许漏洞利用自动和重复地完成
对于某些攻击(例如,IP 盗窃),步骤 2 可能不是必需的。 但是,第 1 步至关重要,而第 3 步则允许犯罪分子将孤立的攻击转变为可扩展的业务。
为什么这个这么重要? 因为这是你的主要优势。 犯罪黑客必须执行攻击的所有阶段才能实现其业务目标。 您可以在每个阶段进行防御,从而增加黑客的成本。 有了足够的屏障,攻击不再划算,黑客就另寻他处。 我们将回到“纵深防御”的思想,采用多种技术使攻击的每个阶段都更加困难。
攻击 技术
接下来,我们描述了每个阶段的几种攻击技术。 一次成功的攻击通常结合了每个类别的一种或多种技术。
1.逆向工程
| 攻击技术 | 定义 |
| 运行时内存检查 | 将存储在易失性随机存取存储器中的内容复制到硬盘上以便以后分析的行为。 攻击者还可以分析断电后的内存内容。 目标包括秘密数据,例如未受保护的加密密钥。 |
| 拆卸 | 将二进制代码转换为汇编语言的行为,使其对攻击者更具可读性 |
| 差分攻击 | 比较相同软件和/或数据的两个变体的行为。 通过检测二进制差异,攻击者可以识别和定位已应用安全增强的代码。 |
| 共谋 | 一种攻击策略,其中两个或多个攻击者以商定的方式一起工作,以提高成功攻击的机会。 |
| 反向控制流 | 在指令级别跟踪程序执行以识别函数调用、循环和条件分支的位置的行为 |
| 交互式调试 | 使用交互式调试器以受控方式执行目标软件以破坏软件安全的行为 |
| 进程监听 | 所有逆向工程都可以在不中断现有流程的情况下执行。在启动期间,可能的目标包括“呼叫回家”功能、意外许可证和用户数据检查。 |
2. 修改
| 攻击技术 | 定义 |
| 数据提升 | 从应用程序的静态部分提取数据并将其链接或加载到不同应用程序中的行为 |
| 代码提升 | 从应用程序的静态部分提取代码的行为,通过显式指向特定代码所在的内存部分(就地代码提升),或通过反编译二进制文件的一个部分并将其重新编译为另一个二进制文件(out-异地代码提升) |
| 修改控制流 | 改变计算机程序原始行为的行为。 这涉及通过编写替代指令来更改计算机指令,以获得对原本不打算使用的功能的访问。 |
| 数据文件替换 | 用新数据替换与有限访问或执行权限相对应的原始数据文件的行为,允许攻击者获得最初无法访问的权限。 |
| 程序文件替换 | 用可能具有恶意副作用的文件替换作者打算使用的可动态加载的可执行文件的行为。 潜在的攻击目标包括提取受保护的高级媒体内容或绕过许可证检查。 |
| 指令替换 | 添加、修改或删除二进制指令的行为 |
| 分支干扰 | 改变条件的布尔结果,从而使运行时采用的条件的分支目标反转的行为 |
3。 自动化
| 攻击技术 | 定义 |
| 自动利用 | 自动修改应用程序以导致行为改变的行为 |
| 重新部署的数据文件 | 一旦攻击者了解解密内容所需的内容,即重新分发整个系统以解密内容的行为 |
| 动态库漏洞利用 | 利用动态库中的漏洞的行为 |
| 未经授权的调用 | 未经许可方启动或执行软件的行为 |
攻击分析
攻击分析过程涉及从针对资产的已识别威胁(可以视为攻击者的最终目标)向后工作,并确定可能使攻击者达到该最终目标的所有攻击。 对于针对每项资产的每个威胁都会重复此操作,以全面了解可能发生攻击的位置以及需要应用防御的位置。 这将为目标系统的所有者提供一套安全要求,以构建到其产品的架构和设计中。
令人沮丧的黑客
既然您已经像黑客一样思考并确定了可以发起哪些攻击以及它们将如何进行,您就可以系统地部署防御措施来挫败黑客的努力。 没有完美的解决方案可以将攻击者一直拒之门外。 相反,有一种多层次和动态的方法可以提高黑客的成本并降低收入。 通过打击犯罪黑客的伤害——他们的商业模式——你会让自己成为一个不那么有吸引力的目标。
我们有时使用的一个类比是:如果你试图到达一个目的地,你会选择能见度清晰的直线路径还是雾中的危险路径? 大多数人会选择简单的路径,大多数黑客也是如此。 通过以正确的方式应用正确的防御分层,您的软件将成为试图达到收入目的地的黑客的危险道路,他们将前往别处。
蜘蛛模型
一个好的纵深防御方法应该像一张网一样——不同的部分应该相互加强,没有单点故障。 我们将我们的特殊方法称为 SPIDER 模型,以加强这种保护网络的形象。 SPIDER 代表软件保护:完整性、多样性、纠缠性和可更新性。 让我们依次看看这些属性中的每一个:
- 完整性:完整性验证将确保您的软件未被篡改。 就像丝绸一样,它赋予软件保护网络以力量。 它在加载时很有用,但在动态时得到增强:在整个软件执行过程中检查软件完整性。 可靠且稳健/防篡改的完整性验证功能是建立软件信任根的重要元素,尤其是在硬件锚点不可用时。 从哲学上讲,完整性验证可以贯穿软件保护的每个组件; 例如,请参见下面的“纠缠”。
- 多样性:人们已经理解安全解决方案需要可更新和多样化以支持适当的安全生命周期。 在软件保护中,不同的软件实例可能会阻碍黑客了解正在发生的事情的努力,特别是当对随机种子的简单更改可以在算法代码和数据伪装中产生多样性时,使得实例之间具有很好的分离. 在蜘蛛的世界中,网络也会随着时间的推移而变化,通常是由于攻击、捕获错误或其他外部事件。 此外,蜘蛛网非常多样化,但是以可重复的算法方式构建的——就像良好的软件保护一样。
- 纠缠:作为软件加固的一部分,纠缠代码和数据是一种有效的技术,可以帮助加强软件的保护。 纠缠可以在算法上应用在 the source 级别,以便在不影响程序控制流的情况下无法修改任何内容。 这是软件保护就像蜘蛛网的另一个很好的例子——网络对落在丝绸上的虫子的干扰非常敏感。
- 可更新性:由于有效的软件保护对黑客生产力具有可衡量的影响,因此
- 预测“黑客攻击的时间”,并使用更新软件保护来故意阻挠黑客在中途的进展。 当检测到安全漏洞时,可以创建新的、多样化的实例,并结合应用一组不同的保护来实现有效的更新周期。 后一点与蜘蛛网非常相似,因为一旦破裂,它几乎保持完整并且很容易修复。
软件 保护: 它不仅仅是软件
我们相信一个完整的软件保护策略必须有一个基于软件的重要组件。 这有一个明显的原因:如果软件本身经过修改使其更难被攻击,那么就没有可以剥离的层来获得原始软件。 拥有基于软件的防御的另一个主要原因是可更新性。 如上所述,可更新性是软件保护的必要条件,而纯硬件解决方案太慢且成本太高而无法定期更新。 这就是为什么这里列举的防御都是基于软件的。
也就是说,当目标是保护您的业务时,您可以而且应该使用您可以使用的所有工具。 如果你的平台有一个可信的执行环境,使用它会显着提高
禁止逆向工程。 如果您可以访问真正的随机数生成器,这将关闭防止篡改随机数据的攻击的大门。 加密协处理器可以提高关键的安全性和性能
密码操作。 可以利用硬件锚定的安全启动来提供持续的完整性验证。
最好的软件保护来自于协同工作的基于软件和硬件的防御的组合。 同样,纵深防御是游戏的名称。
SPIDER 模型的组成部分
我们的 SPIDER 网络有三个锚点:
- 代码转换和混淆由转码器执行,转码器是一种源到源工具,可以使软件更难在不改变功能的情况下进行逆向工程和篡改。
- Whitebox Cryptography 提供标准加密算法的抗白盒攻击实施,为您最关键的资产之一、加密密钥和数据提供专门的保护。
- 完整性验证和相关技术使用应用程序编程接口 (API) 在程序功能和正在进行的安全检查之间创建链接,确保您的软件抵抗静态和动态攻击。
重要的是,所有这些部分协同工作,既可以相互保护,又可以提供纵深防御。 此外,每项技术都是高度数据驱动的,允许相当多的多样性和可更新性,只需用两个随机种子进行控制。
数据流是指程序中涉及数据的普通运动和计算。 它包括算术运算、布尔运算、赋值等。 数据流转换的目标是通过隐藏复杂数学转换和高度附加不确定性或熵背后的基本操作,使数据在整个数据流中保持受保护状态。 变量、常量和操作都扩散到程序流中,使得原始计算和数据极难确定。
即使是简单的编码也能提供一定程度的保护。 例如,考虑一个原始变量 x 转化为 x' = sx + d, 和一个原始变量 y 转化为 y' = ty + d. 转换计算 z = x + y,我们执行变换的加法 x' 到 y',给 z'作为 z' = vx' + wy' + b,在 Moku:Pro 上 v, w 和 b 是基于底层数据转换计算的常量。 即使在这个简单的例子中,计算的组合变换空间也超过 100 位。 实践中可用的数据流转换远远超出了上述简单的线性转换,并且可以结合多个数学域。
控制流转换
建议控制流防止反汇编、反向控制流、交互式调试、修改控制流和分支阻塞。 它指的是程序运行时所遵循的执行路径,并将控制权转移到各个语句块。 控制流转换旨在使恢复程序的原始控制流变得极其困难,这大大增加了尝试对应用程序进行逆向工程的攻击者的成本。
采用的最基本的控制流转换是“控制流扁平化”。 控制流扁平化将函数中的所有控制流(“if”语句、循环、跳转等)更改为单个 switch 语句,这允许变量或表达式的值通过搜索和映射来改变程序执行的控制流. 仅此一项就显着减少了攻击者可用的程序流信息。
额外的转换建立在控制流扁平化之上,添加虚拟分支(基于 switch 变量永远不会采用的值的路径)和 历史相关编码,这使得 switch 变量依赖于应用程序控制流的历史记录,并且需要通过条件正确导航才能正确执行应用程序。 此功能可抑制分析和篡改攻击,因为任何绕过分支的尝试都会对控制流的其余部分产生不可预测的影响。
分支保护
建议分支保护以防止修改控制流和分支干扰,并针对条件语句(ifs、循环等)进行有针对性的防篡改防御。 攻击者通常会尝试堵塞或绕过代码中的重要分支,以避开安全检查,或修改程序的原始流程。 分支保护通过添加代码来防止分支阻塞,如果分支阻塞,该代码会导致程序行为不正确。 通过分析分支中的条件,推导出某些属性,如果条件为真则成立,但如果条件为假则不成立。 基于这些属性,分支保护在条件和现有代码之间创建数学依赖关系。 这确保了如果攻击者跳转到特定分支,程序将处于不正确的状态。
字符串转换
建议针对数据提升和自动漏洞利用进行字符串转换。 这种特殊类型的数据转换适用于字符串文字。 他们的目标是使应用程序中的所有文字字符串变得毫无意义。 需要特殊处理,因为在应用程序中没有类似于数据流的“字符串流”。 因此,会生成额外的代码以在需要时正确解码文字,因此它们可以在错误消息等中正确呈现。
API 防护
建议使用 API 保护来防止代码提升和动态库利用。
功能 签名转换
函数调用代表了一个清晰的边界,攻击者可以利用它来深入了解您的程序。 特别是,查看传递给函数的参数可以提供有关该函数用途的信息。 函数签名转换通过将函数参数插入到与虚拟参数混合的类型掩码数组中来伪装函数参数。 结果是所有的函数调用看起来都同样模棱两可。
功能合并
函数合并利用上述统一签名通过将两个或多个函数的主体合并在一起来创建新函数。 这会在程序的不同部分之间创建错误的依赖关系,从而挫败攻击者理解功能的尝试。
函数间接
函数间接利用了一个简单的事实,即函数指针比函数调用更难跟踪。 它的工作原理是创建函数指针并用通过指针的间接调用替换标准调用。
安全内联
安全内联功能允许您在应用转换之前合并文件中单独的代码逻辑部分。 它类似于标准的函数内联,但其目的是去除函数边界并组合操作以掩盖程序逻辑。 安全内联可能会增加代码大小,但它通常会提高性能。
当与函数签名转换、函数合并和函数间接结合使用时,安全内联是最强大的。 总体结果是对程序功能边界的重大操纵。
白盒密码学
几乎所有与安全相关的应用程序都将使用密码学,无论是用于身份验证、机密性、完整性、不可否认性还是它们的组合。 加密实施的强度与关键安全参数的保密性直接相关,尤其是加密密钥。 这些密钥可以在存储和传输过程中受到保护,但在软件环境中,在攻击者的控制下,这些密钥在使用中特别容易受到攻击。 在这种所谓的“白盒攻击上下文”中,攻击者可以观察执行和解除密钥,完全否定系统的安全性。
我们的“白盒加密”库专为白盒攻击环境而设计,即使在使用时也能保护密钥。 建议防止数据提升和未经授权的调用。 凭借一整套加密原语,包括 AES 加密、RSA 加密和签名、ECC 加密和签名、SHA2 哈希、HMAC 消息身份验证代码和加密强度 PRNG,这些实现可用作 OpenSSL 等标准库的安全替代方案。
自 2002 年生产出第一个实用的白盒攻击抵抗 AES 实现以来,爱迪德一直在不断推进其技术以保持领先于最新威胁。 今天,它的白盒实现正在保护超过 XNUMX 亿台设备中的密钥。
文件加密和安全存储
除了保护传输中的数据外,白盒加密也可用于保护本地静态数据。 这可以通过文件加密来完成,为构成应用程序一部分的其他文件提供静态保护。 建议使用爱迪德的安全存储库来防止数据文件替换和未经授权的调用。 该库提供了一个简单的
用于持久存储任意数据的接口。 在这两种情况下,白盒密码术确保密钥永远不会被暴露。
完整性验证
建议对代码提升、数据文件替换、程序文件替换、指令替换、重新部署的数据文件和动态库漏洞进行完整性验证。 它是一种验证应用程序完整性的安全方法,它还可以确保与该应用程序交互的外部模块的完整性。 完整性验证可确保软件无法在未经检测的情况下静态或动态地被篡改。 这显着提高了防篡改的门槛,因为攻击者不仅必须对程序进行逆向工程并对二进制文件进行修改; 他还必须通过完整性检查。 爱迪德提供了两种完整性验证变体。
该公司的 Buildtime IV 组件是一种更安全的代码签名变体,可确保对不受信任的主机的信任。 客户在构建时签署模块,将目标模块的加密散列与最终应用程序一起存储。 在运行时,我们将目标模块的运行时哈希与
构建时的加密哈希。 此外,由于 Buildtime IV 库静态链接到应用程序并进行签名,因此它会持续监控自身的完整性。
爱迪德的 Runtime IV 组件适用于应用程序二进制文件未在构建时完成的环境,例如 iOS 位代码。 运行时 IV 使用深度防御来创建一个信任窗口,可以在运行时计算应用程序签名; 此后,它在功能上等同于 Buildtime IV。
Buildtime IV 和 Runtime IV 都使用回调集成到应用程序中。 每个 IV 调用都采用一个称为成功回调的函数指针。 如果检查通过,则调用成功回调,并继续正常执行。 如果检查失败,则不会调用回调,这意味着被篡改的程序不会遵循正确的程序流程。
反调试
调试器是黑客武器库中的宝贵工具,允许他们逐步执行程序并观察流经应用程序的数据。 因此,反调试技术是挫败逆向工程攻击的绝佳方式。 建议不要进行交互式调试,它们有三种变体:
- 基于时序的反调试 (TBAD) 的工作原理是将执行一系列指令的实际时间与预定的预期时间进行比较。 因为使用调试器单步执行指令比全速执行要慢几个数量级,所以这些时序检查在调试器环境中将失败。 负时序检查(预期会失败的检查)也可用于防止攻击者篡改系统时钟。
- 基于信号的反调试在 Android 和嵌入式 Linux 环境的用户模式下可用。 它的工作原理是拦截来自应用程序的所有信号并调用特殊处理程序来处理这些信号。 附加的调试器将以不同的方式处理信号,从而修改应用程序行为。
- 基于 Ptrace 的反调试仅适用于 iOS 系统。 应用程序一启动,就会调用 ptrace 系统函数来附加一个监控进程。 这可以防止任何其他进程(包括调试器)附加到应用程序,因此调试会话甚至无法启动。
防钩
上面列出的许多修改攻击都是使用“挂钩”来促进的。 通常,挂钩是一种通过修改 API 来检测和修改程序流的攻击技术。 我们提供专业技术来阻止挂钩。 建议针对程序文件替换、指令替换、自动漏洞利用和动态库漏洞利用。
越狱和根检测
希望获得对移动设备的完全控制作为应用程序分析和篡改的前兆的攻击者将利用几种公共工具之一来越狱 (iOS) 或生根 (Android) 设备。 (为简单起见,我们将在下文中使用“生根”作为一个笼统的术语。)随着每个新操作系统的发布,一些工具被击败,其他工具被更新,并出现新工具。
因此,爱迪德采用了一套不断发展的技术来检测设备是否已植根。 这包括查找属于流行 rootkit 的二进制文件、检查某些系统功能的行为等。 与反调试和完整性验证一样,回调用于确保这些检查作为正确程序流的一部分完成。
挂钩检测
在移动设备上,挂钩是使用挂钩框架(例如 Cydia Substrate)完成的。 爱迪德的挂钩检测技术会寻找这些框架的存在,并使用回调来确定适当的应用程序响应。
指印
建议针对重新部署的数据文件和未经授权的调用,指纹识别是从给定设备收集属性以唯一标识该设备的过程。 属性值合并为一个称为指纹的值; 目的是任何其他设备都会有不同的指纹。 爱迪德提供了一个库,允许用户选择他们想要收集的系统和应用程序属性。 它结合这些数据来生成特定于应用程序的指纹。 此外,使用秘密共享的变体来保护指纹计算,爱迪德可以支持先进的 m of n 方案,其中一些被查询的属性可以在不影响指纹计算的情况下改变。
指纹识别本身是一种身份特征,在挫败自动化攻击方面非常有用。 当与其他程序数据结合时,它可以用于“节点锁定”,确保数据仅在给定设备上可用,不能与其他人共享。
“网络犯罪是黑客占据优势的热门行业。 为了应对这种上升趋势,参与生态系统的所有公司都必须处于领先地位。”
多样性和可再生性
把你的防御想象成一个迷宫,你让攻击者导航以到达中心的奖品(一次成功的攻击)。 迷宫可能非常复杂(纵深防御),但是,只要有足够的时间和精力,攻击者就会成功——也就是说,除非迷宫不断变化。 这就是可更新性——每次软件更新时更改特定防御的选项,迫使攻击者从头开始。 更重要的是,花在导航一个迷宫上的所有时间并没有使导航第二个迷宫更容易。 这就是多样性——您可以选择拥有多个软件变体,从而大大增加发起广泛攻击所需的工作量。 除了可更新性外,还建议防止差异攻击、串通和自动漏洞利用。
使用爱迪德的技术,为您的程序创建不同的受保护实例非常容易:只需决定您想要的软件副本数量,剩下的由工具来完成。 可以通过向内部 PRNG 提供不同的种子来实现更新之间的可更新性; 结果将是不同的数据转换、控制流转换、功能转换和密钥保护。 如有必要,还可以将转换信息从一个版本移植到下一个版本以促进向后兼容。
重叠和相互作用的保护
虽然上述每种技术单独使用都很有效,但将它们结合使用时,才能完全缓解威胁。 一些例子:
- 爱迪德的所有库代码都使用转码器进行保护,这使得对安全技术本身进行逆向工程变得更加困难。
- Buildtime 和 Runtime IV 使用白盒加密来保护验证操作。
- 钩子检测增加了解决反调试的难度。
- 反调试使操纵回调以破坏完整性验证变得更加困难。
- 完整性验证会阻止尝试修改二进制文件并去除根检测检查。
结语
网络犯罪是黑客占优势的热门行业。 为了应对上升趋势,参与生态系统的所有公司都必须处于领先地位。 如果您开发联网设备或软件,您需要明智地选择将时间和预算花在何处。 “像黑客一样思考”将有助于将您的注意力从试图防御外围(因为它不存在)和试图使软件无法渗透(不可能),转移到针对网络犯罪分子最伤害他们的策略:通过打破他们的商业模式。
多层软件保护使入侵您的应用程序变得过于耗时和昂贵,因此可能成为您网络安全库中非常有价值的一部分。 以 SPIDER 模型为特征的 Cloakware 工具套件为您提供了一种强大、健壮和可更新的方式,使您的软件对黑客没有吸引力。
