TF-A之供应链威胁模型分析

news2024/11/14 15:38:45

目录

一、简介

二、TF-A 概述

2.1、TF-A 存储库

2.2、外部依赖

2.3、附加二进制文件

2.4、TF-A工具链

2.5、基础设施

三、TF-A数据流

四、攻击树

五、威胁评估与缓解

5.1、影响和可能性评级

5.2、威胁和缓解措施

六、附录


一、简介

软件供应链攻击旨在向软件产品注入恶意代码。恶意代码可以通过几种方式注入到软件产品(开源项目)中。这些方式包括:

恶意代码提交:这种攻击直接将代码注入到项目库(repository)中。例如,可以通过开发者/维护者凭证劫持或恶意外部贡献者来实现这一点。

恶意依赖项:在这种情况下,恶意代码通过项目依赖的其他代码或软件包引入到项目中。例如,通过typosquatting attack,攻击者创建一个与通用软件包名称非常相似的恶意软件包,并将其托管在通用的软件包库上。

恶意工具链:这涉及通过被攻击的资源引入的恶意代码,这些资源在开发和/或构建过程中使用,如编译器和集成开发环境(IDE)。

本博客提供了对TF-A项目软件供应链攻击威胁的分析。

二、TF-A 概述

下图显示了围绕TF-A项目的不同软件组件。下面提供了每个组件的简要描述。

a648dbd98134476fa30a5fe6e04b5649.png

2.1、TF-A 存储库

TF-A存储库包含由TF-A贡献者提供的通用和平台代码,以及从其他开源项目导入的库,如上图中的内部依赖项所示。这些库包括:

libfdt:libfdt是用于读取和操作设备树二进制(DTB)文件的实用程序库。它是设备树编译器(DTC)工具链的一部分。DTC用于在主机机器上的构建过程中构建DTB文件。libfdt用于在启动时解析DTB文件。

zlib:zlib是从zlib Home Site导入的数据压缩库。

compiler-rt:这是来自LLVM编译器基础设施项目的一组运行时库。我们导入了builtins库,该库提供了来自compiler-rt的低级别、特定于目标的编译器builtins。

TF-A存储库还包括用于补充TF-A构建过程的主机工具的源代码。这些工具包括:

fiptool:此工具用于创建固件镜像包(FIP),允许将引导加载程序镜像打包到一个单一的archive中,TF-A可以从非易失性平台存储加载。

cert_create:此工具用于为二进制镜像生成证书。

encrypt_fw:此工具以明文固件镜像为输入,并生成加密的固件镜像,然后可以将其作为输入传递给fiptool utility以创建FIP。

sptool:此工具用于构建安全分区包。

2.2、外部依赖

这些软件组件不是TF-A存储库的一部分,但它们是构建TF-A二进制文件和主机工具所必需的。

Mbed TLS库:这是来自trustedfirmware.org(tf.org)的密码学库。在需要密码学功能的TF-A二进制文件(例如可信引导(Trusted Board Boot))构建中需要它。

OpenSSL库:这是TF-A主机工具(fiptool、cert_create和encrypt_fw)使用的另一个加密库。

下表列出了TF-A的依赖项,包括依赖项的来源。

Dependency

Location of Dependency

Original Source

libfdt

Local copy

dtc/dtc.git - The Device Tree Compiler

zlib

Local copy

zlib Home Site

compiler-rt

Local copy

"compiler-rt" Runtime Library

Mbed TLS

External

Mbed TLS

OpenSSL

External

/index.html

2.3、附加二进制文件

这些是用于测试基于TF-A系统的二进制文件。以下是每个组件的简要描述及其来源。

SCP固件:在我们的测试中,我们使用Arm SCP团队提供的SCP固件二进制文件,这些二进制文件是从GitHub存储库中构建的源代码获取的。

OP-TEE:来自tf.org的可信执行环境(TEE),作为Secure EL1运行。根据测试配置,我们使用从源代码构建或与Arm参考平台一起提供的OP-TEE二进制文件。

EDK2 UEFI:来自EDK2项目的正常世界引导加载程序。我们使用托管在tf.org服务器上的EDK2 UEFI二进制文件进行测试。

用于测试TF-A的其他软件组件包括U-Boot、Linux内核、RSS、MCP和文件系统,所有这些都来自Arm参考平台团队。

2.4、TF-A工具链

TF-A项目使用多种工具来构建、分析和测试TF-A源代码。

2.4.1、Node.js工具

这些是可选的质量保证和开发人员实用工具,通过Node.js软件包管理器安装。它们被固定到TF-A存储库根目录中的package.json文件描述的特定版本,并且它们的依赖关系在安装时从互联网上下载。这些工具可以在开发者的本地机器上安装,并在某些CI作业中安装在Docker容器中。目前,这些工具包括:

• Commitlint

• Commitizen

• Husky

2.5、基础设施

TF-A使用trustedfirmware.org(tf.org)和Arm基础设施来托管源代码、审查代码和运行测试。附录部分提供了tf.org基础设施的安全分析。

三、TF-A数据流

下图显示了TF-A的数据流程图。红虚线表示信任边界。

d353ea3fe38344929b38b62b7ce17519.png

四、攻击树

611e94f9e0c04e3fb988262024d9db9e.png

五、威胁评估与缓解

5.1、影响和可能性评级

Rating

Impact

Likelihood

HIGH

如果被利用,将对整个组织或单个业务线产生重大影响。攻击者相对容易利用威胁,只需很少的努力和技巧。

MEDIUM

如果被利用,对业务线有明显的影响。专业攻击者可以毫不费力地利用这种威胁。

LOW

如果被利用,则会造成轻微损害,或者可以与其他漏洞一起使用来执行更严重的攻击。利用这种威胁需要相当大的努力和资源。

5.2、威胁和缓解措施

威胁命名约定:

  • SC – Supply Chain

  • SRC – Source

  • DEP – Dependency

  • TOOL – Toolchain

  • REPO – Repository

  • MAIN – Maintainer

  • CONT – Contributor

Threat: TFA-SC-SRC-MAIN-01

Description

攻击者可以在泄露维护者的凭证后冒充维护者提交并合并恶意代码。

Impact

HIGH

Likelihood

MEDIUM

Threat and impact

在 TF-A 代码审查流程中,所有提交的更改都会由代码所有者和维护者进行审查。如果更改被接受,将由维护者将其合并(集成)到一个集成分支中。维护者有权进行代码所有者审查、维护者审查和合并提交的更改。

tf.org 用户(包括维护者)通过 GitHub 进行身份验证。凭据泄露的可能性取决于多个因素。如果遵循推荐的最佳实践,GitHub 的身份验证机制就很强大,使凭据泄露的可能性降低。GitHub(因此 tf.org)允许使用双因素身份验证登录,需要密码和用户身份验证代码的访问权限。根据密码的强度和维护者是否在服务之间重复使用密码等因素,泄露的可能性可能更高。

如果攻击者成功地窃取了维护者的凭据,并冒充维护者,他们理论上可以提交恶意更改(作为维护者或贡献者),给予所有必要的审查并合并更改。

Mitigations

- 强制执行GitHub推荐的最佳实践
- 不允许提交者自我审查和合并他们提交的补丁。要实现提交,攻击者将需要损害至少两个凭证(审阅者和维护者)。

Mitigations implemented?

我们没有禁止自我审查/合并补丁

Threat: TFA-SC-SRC-MAIN-02

Description

攻击者可以通过社会工程技术成为维护者,并提交、合并恶意代码。

Impact

HIGH

Likelihood

LOW

Threat and impact

根据TF项目维护流程,TF-A的维护者是由同行根据功绩选择的。成为维护者的一些标准包括至少在项目中担任活跃成员一段时间,并贡献了大量非平凡且高质量的补丁。然而,该流程存在一些弱点:

  • 除了同行的推荐之外,没有建立与维护者的信任关系的结构化机制。

  • 没有对维护者状态进行持续监控(例如,维护者可能从一个组织转移到另一个组织)。

要执行这样的攻击,除了成为维护者外,攻击者还必须应对维护者面临的所有限制。

Mitigations

-与维护者建立信任的结构化机制
-不允许提交者自我审查和合并他们提交的补丁。要实现提交,攻击者将需要损害至少两个凭证(审阅者和维护者)。

Mitigations implemented?

有一个结构化的机制来与维护者建立信任,但是补丁的自我审查/合并是不允许的

Threat: TFA-SC-SRC-CONT-01

Description

攻击者可以作为贡献者提交恶意代码补丁。

Impact

HIGH

Likelihood

LOW

Threat and impact

TF-A接受外部对通用代码和平台代码的贡献。与维护者不同,贡献者没有维护者审查或合并权限,因此作为贡献者注入恶意代码的可能性较低。然而,尽管不太可能,恶意提交仍然有可能在代码审查和验证过程中被忽略而不被察觉。

如果成功,其影响可能从低到高,这取决于注入的代码。例如,攻击者可以故意插入一个在代码审查中难以察觉并且不会被验证过程检测到的内存损坏漏洞。这种漏洞本身可能影响较小,但如果与其他漏洞结合使用,则可能产生重大影响。

Proposed Mitigations

  • 代码审查和验证

  • 静态分析试图找出通常以某种形式的攻击向量结束的问题

Mitigations implemented?

是的,贡献要经过彻底的审查、验证,以及通过CI自动化的静态分析过程。

Threat: TFA-SC-DEP-01

Description

攻击者可以将恶意代码注入TF-A的内部依赖项中。

Impact

HIGH

Likelihood

LOW

Threat and impact

TF-A有两种类型的依赖关系:一种是复制到TF-A存储库并作为TF-A代码的一部分进行发布的依赖关系(以下称为内部依赖关系),另一种是从外部存储库下载并在构建TF-A时使用的依赖关系(以下称为外部依赖关系)。

 

目前,TF-A有三个内部依赖关系:libfdt、zlib和compiler-rt库。这些库定期通过从它们的源存储库复制而进行更新。尽管不太可能,但贡献者有可能从错误的(潜在恶意的)存储库复制这些库。例如,GitHub上已经存在多个libfdt(DTC)的分支。除此之外,官方存储库也不免受到上述威胁(TFA-SC-SRC-MAIN-01、TFA-SC-SRC-MAIN-02和TFA-SC-SRC-CONT-01)。

 

与外部依赖关系相比,通过内部依赖关系对TF-A进行攻击的可能性较低,原因如下:

  • 内部依赖关系在升级过程中经过正常的代码审查流程

  • 一旦升级,内部依赖关系将保持不变,直到下一次升级。升级窗口通常很长(例如,过去4年中libfdt仅更改了4次),这减少了攻击者向依赖关系注入恶意代码的机会窗口。

Proposed Mitigations

  • 显式地记录版本和依赖项的官方来源

  • 在TF-A树中保留一个固定版本的源代码副本,这样只有当我们升级依赖项时,才会出现从依赖项中获得恶意代码的风险

  • 监控来自GitHub的脆弱依赖的警报

Mitigations implemented?

是的,我们显式地记录版本和依赖的官方来源,保留固定版本的源代码副本,并监控Python和Node.js的脆弱依赖警报,但我们无法对C依赖做这些。

Threat: TFA-SC-DEP-02

Description

攻击者可以将恶意代码注入TF-A外部依赖项中。

Impact

HIGH

Likelihood

MEDIUM

Threat and impact

与内部依赖关系不同,外部依赖关系是由最终用户从外部存储库下载的。虽然TF-A文档提供了有关测试使用的依赖版本的信息和存储库链接,但是由最终用户决定从哪里获取依赖关系。因此,与内部依赖关系相比,通过外部依赖关系进行攻击的可能性更高。

攻击的影响范围从低到严重不等,这取决于受影响的依赖关系及其哪些部分受到影响。例如,影响MbedTLS中签名验证功能的恶意代码被认为是严重的,因为它可以用于绕过TF-A的TBB过程。

Proposed Mitigations

  • 显式地记录版本和依赖项的官方来源

  • 提供脚本和构建选项来自动获取外部依赖项的最新稳定版本

Mitigations implemented?

我们明确地记录版本和依赖的官方来源,但还没有提供脚本和构建选项来自动获取外部依赖的最新稳定版本

Threat: TFA-SC-REPO-01

Description

攻击者可以通过破坏tf.org或GitHub上管理员帐户的凭据上传恶意版本的TF-A。

Impact

HIGH

Likelihood

LOW

Threat and impact

这种攻击类似于TFA-SC-SRC-MAIN-01,但两种攻击的可能性和影响不同。

假设管理员和维护者都使用相似强度的身份验证方法,那么妨害管理员凭据的可能性要低于妨害维护者的可能性,因为管理员的数量比维护者少。另一方面,影响会更大,因为管理员比维护者拥有更多的特权:

• 管理员可以上传恶意的TF-A贡献,而其他审阅者可能未能察觉到。

• 管理员有可能重写存储库的历史记录以逃避检测。

Proposed Mitigations

强认证(遵循GitHub推荐的最佳实践)

Mitigations implemented?

是的,强身份验证是通过推荐的最佳实践实现的

Threat: TFA-SC-REPO-02

Description

攻击者可以利用tf.org或GitHub上的漏洞,在获得对存储库的写访问权后,上传恶意版本的TF-A。

Impact

HIGH

Likelihood

LOW

Threat and impact

目前没有关于有人利用GitHub或tf.org上的漏洞上传恶意贡献的报告。然而,有一些漏洞的例子允许在流行的托管服务上执行任意代码。这些漏洞可能被用来上传恶意软件包。除了难以利用之外,像GitHub这样的流行托管网站上的漏洞通常会很快被检测到,使得这种攻击的机会窗口很小。

Proposed Mitigations

  • 监视可能影响TF-A存储库的任何漏洞警报

  • 确保tf.org安装了最新的安全补丁

Mitigations implemented?

是的,对漏洞的警报进行监控,并确保tf.org与最新的安全补丁保持同步

Threat: TFA-SC-REPO-03

Description

攻击者可以在攻击者控制的存储库上托管恶意版本的TF-A,并欺骗最终用户从该存储库下载。

Impact

HIGH

Likelihood

MEDIUM

Threat and impact

对于攻击者来说,创建一个类似于tf.org的网站并看起来与其相似(网站仿冒),并托管一个恶意的TF-A源代码存储库并不困难。同样,攻击者可以在GitHub上创建TF-A存储库的镜像,并在其中插入恶意代码。然而,要使此攻击成功,攻击者需要诱使最终用户使用由攻击者控制的存储库。

Proposed Mitigations

  • 用户在访问网站之前应该仔细检查网站的URL,在签出之前应该仔细检查存储库的URL

  • 接受对tf.org进行欺骗攻击的报告,并向合作伙伴广播警告

Mitigations implemented?

我们接受对tf.org进行欺骗攻击的报告,并将向合作伙伴广播警告

Threat: TFA-SC-TOOL-01

Description

恶意代码可以通过恶意工具在构建时注入。

Impact

HIGH

Likelihood

LOW

Threat and impact

TF-A的最终用户使用make(或cmake)、编译器和链接器(如armgcc、armclang或LLVM)来构建TF-A二进制文件。虽然TF-A文档指定了用于构建TF-A的工具的版本和官方来源,但用户可能会被诱使使用非官方的、恶意的工具链。类似的攻击过去曾被用来向最终产品中注入恶意代码。

Proposed Mitigations

  • 明确地记录版本和工具链的官方来源

  • 提供脚本来自动获取工具链的最新稳定版本

Mitigations implemented?

我们明确地记录了工具链的版本和官方来源,但还没有提供脚本来自动获取工具链的最新稳定版本

Threat: TFA-SC-TOOL-02

Description

恶意代码可以在安装时通过恶意Node.js依赖被开发人员的工具执行。

Impact

HIGH

Likelihood

LOW

Threat and impact

使用Node.js工具的用户,包括CI,可能会接触到被Node.js依赖审计程序所忽略的恶意依赖。当使用这些工具时,用户可能会执行恶意代码,这可能允许恶意行为者对存储库进行悄无声息的修改或者获取用户凭据。

如果成功,其影响可能从低到高不等,取决于用户的凭据。如果用户是管理员,这可能意味着TFA-SC-REPO-01。

Proposed Mitigations

  • 将Node.js工具限制为一组最小的可信包

  • 将Node.js包固定到已知版本

  • 更新Node.js审计员报告已知cve的依赖项

  • 只能从可信容器内执行CI中的Node.js工具

Mitigations implemented?

是的,Node.js工具仅限于一组最小的可信包,包被固定到已知版本,当有已知cve报告时,依赖项会更新,Node.js工具只在CI中的可信容器中执行

六、附录

trustedfirmware.org安全概述:

Software/ System

Source and integrity

Credential and permission management

Security incident response plan

Jenkins (including plugins)

  • Jenkins是使用基于官方Jenkins docker镜像的Dockerfile构建的

  • Jenkins插件是使用官方的install- plugins.sh构建的

  • 只从Github使用oauth

  • 密码强度遵循Github策略

  • 不强制使用双因素身份验证

  • Jenkins使用矩阵认证,允许用户使用Jenkins job Builder管理“作业”级别的ACL

  • 未启用API令牌

  • Jenkins使用内置的凭证存储,我们存储LAVA, Jenkins Job Builder, DockerHub, AWS和Gerrit令牌的凭证。凭据作为秘密存储在Jenkins凭据存储库中。这些凭证可以通过Jenkins作业访问,但是必须有人通过Gerrit审查来推动Jenkins作业。Gerrit为此维护ACL,并且只有管理员和项目审批人可以+2审查。

  • 每月监测CVE并更新Jenkins LTS

  •  

    保持插件更新。但是维护插件取决于插件所有者。

Gerrit (including plugins)

  • Gerrit包是从Linaro的顶级角色安装的,它有一个md5sum检查

  • Gerrit插件是通过Ansible playbook从官方的Gerrit CI安装的。这些插件是从https://gerrit-ci.gerritforge.com/下载的。

  • 不检查每个插件md5sum

  • 只从Github使用oauth

  • 密码强度遵循Github策略

  • 不强制使用双因素身份验证

  • Gerrit在每个项目级别的UI中设置了ACL

  • 未启用API令牌

  • 为获取Jenkins的评论而创建的ci-bot用户

• 保持插件更新。但是维护插件取决于插件所有者。

Git

  • 包是来自Linaro OBS(开放构建服务)与一对“Linaro修改”。(参考:Ansible playbook和git repo)

  • 没有特别的完整性检查

所有凭据都使用GitHub。所以密码强度等是基于GitHub策略
  • 监控所有CVE并立即应用,每月更新服务器

  • 安全事件响应计划正在进行中

Mailman

  • 从Ubuntu-分发包安装

  • 没有特别的完整性检查(回复APT安全性)

  • 它有各种邮件列表的管理员密码

  • 未指定密码强度

• 计划监测CVE,但目前没有时间表

Website

该网站建立在IT Services的CI/CD服务器bamboo.linaro.org上,来自GitHub上存储的Jekyll git存储库没有与网站本身相关联的凭证。bamboo执行其任务所需的任何权限都是通过AWS实例角色权限提供的
  • 网站本身是托管在AWS S3上的静态文件,由AWS CloudFront缓存

  • 用于构建网站的软件都是开源的,当检测到问题时,Linaro偶尔会从GitHub获得报告。如果可用,应用修复程序。这包括任何可能在网页中使用的Javascript框架

ReadTheDocs

  • 每个项目一个webhook ID被TF CI用于构建ReadTheDocs托管的文档

  • 作为webhook post构建的一部分提供的秘密令牌

  • 更新后的内容自动上线

  • 文档管理使用一个TF-A账号,其密码存储在工程密码数据库中

  • 访问数据库需要访问请求

  • 用于CI的Jenkins webhook令牌在Jenkins内部使用秘密凭证存储,并且只能通过ReadTheDocs管理页面查看

  • 保持数据库访问列表的更新

  • 监控安全通告

参考:11.2. TF-A Supply Chain Threat Model — Trusted Firmware-A 2.10.0 documentation

 

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

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

相关文章

《深入浅出 Spring Boot 3.x》预计3月份发版

各位,目前本来新书《深入浅出 Spring Boot 3.x》已经到了最后编辑排版阶段,即将在3月份发布。 目录: 现在把目录截取给大家: 主要内容: 本书内容安排如下。 ● 第 1 章和第 2 章讲解 Spring Boot 和传统 Spri…

IT资讯——全速推进“AI+鸿蒙”战略布局!

文章目录 每日一句正能量前言坚持长期研发投入全速推进“AI鸿蒙”战略 人才战略新章落地持续加码核心技术生态建设 后记 每日一句正能量 人总要咽下一些委屈,然后一字不提的擦干眼泪往前走,没有人能像白纸一样没有故事,成长的代价就是失去原来…

【东京都立大学主办多重会议奖项】第六届计算机通信与互联网国际会议

ICCCI 2024 - Hosted by Tokyo Metropolitan University, Japanhttps://www.iccci.org/ 会议简介 第六届计算机通信与互联网国际会议将于2024年6月14-16日在日本东京都立大学举行。ICCCI 2024由东京都立大学主办,华中师范大学和美国科学工程学会联合赞助、并得到了…

Curfew e-Pass 管理系统存在Sql注入漏洞 附源代码

免责声明:本文所涉及的信息安全技术知识仅供参考和学习之用,并不构成任何明示或暗示的保证。读者在使用本文提供的信息时,应自行判断其适用性,并承担由此产生的一切风险和责任。本文作者对于读者基于本文内容所做出的任何行为或决…

使用备份工具xtrabackup进行增量备份详细讲解

增量备份 第一次修改数据 mysql> insert into tb_user values (4,sxx,0); Query OK, 1 row affected (0.01 sec)mysql> select * from tb_user; ------------------- | id | name | sex | ------------------- | 1 | Tom | 1 | | 2 | Trigger | 0 | | …

深入学习TS的高阶语法(泛型、类型检测、内置工具)

文章目录 概要一.TS的类型检测1.鸭子类型2.严格的字面量类型检测 二.TS的泛型1.基本使用2.传递多个参数3.泛型接口4.泛型类5.泛型约束6.映射类型(了解) 三.TS的知识扩展1.模块的使用-- 内置类型导入 2.类型的查找3.第三方库的类型导入4.declare 声明文件…

深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本?

深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入…

思维导图教你工作日报怎么写?

工作日报撰写秘诀:轻松提升效率,让你的每一天都闪闪发光 在快节奏的现代工作中,如何高效地规划和管理工作任务成为了职场人士必须面对的挑战。思维导图作为一种强大的思维工具,正逐渐受到越来越多人的青睐。本文将探讨为什么使用…

MySQL 索引原理以及 SQL 优化

索引 索引:一种有序的存储结构,按照单个或者多个列的值进行排序。索引的目的:提升搜索效率。索引分类: 数据结构 B 树索引(映射的是磁盘数据)hash 索引(快速锁定内存数据)全文索引 …

opencv的图像上下、左右和对角线翻转—flip函数

在OpenCV中,flip函数用于翻转图像。你可以沿x轴、y轴或两者同时翻转图像。这个函数非常直接,可以用于创建镜像图像或旋转图像。 void flip(InputArray src, OutputArray dst, int flipCode);src:输入图像。 dst:翻转后的输出图像…

安卓系统和iOS系统的手机备忘录同步数据方法

在这个智能手机时代,安卓与iOS系统犹如两位王者,各自拥有庞大的用户群体。有人钟情于安卓的开放与多样,有人偏爱iOS的流畅与稳定。甚至,有些人为了满足不同需求,同时使用着两个系统的手机。我就是其中的一员。 工作中…

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…

RAW 编程接口 TCP 简介

一、LWIP 中 中 RAW API 编程接口中与 TCP 相关的函数 二、LWIP TCP RAW API 函数 三、LwIP_Periodic_Handle函数 LwIP_Periodic_Handle 函数是一个必须被无限循环调用的 LwIP支持函数,一般在 main函数的无限循环中调用,主要功能是为 LwIP各个模块提供…

LeetCode | 整数反转 C语言

Problem: 7. 整数反转 文章目录 思路解题方法Code结果 思路 运算部分 while(x > 0) {y x % 10;y * 10;x / 10; } y / 10;对于大于32位的数要用long int类型的变量保存用pow算-2的31次方和2的31次方-1。 解题方法 由思路得 Code int reverse(long int x){long int y …

bat 查找文件所在

脚本 在批处理文件(.bat)中查找文件所在的目录,你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例,演示如何在批处理文件中查找指定文件并输出其所在目录: echo off setlocal enabledelayedexpansio…

预训练大模型LLM的PEFT之——LORA

简介 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS,直接翻译过来就是大模型的低秩适配 2021年微软提出的LoRA,它的灵感来自于 Li和 Aghajanyan等人的一些关于内在维度(intrinsic dimension)的发现:模型是过参…

[HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

大型语言模型的语义搜索(一):关键词搜索

关键词搜索(Keyword Search)是文本搜索种一种常用的技术,很多知名的应用app比如Spotify、YouTube 或 Google map等都会使用关键词搜索的算法来实现用户的搜索任务,关键词搜索是构建搜索系统最常用的方法,最常用的搜索算法是Okapi BM25&#x…

post请求向服务器发送JSON格式数据设置Content-Type

情景:与后台联调接口时,后台要求传递JSON格式的数据。 处理:我们进行XHR请求时需要设置请求头的Content-Type值为application/json,如下图所示。 浏览器查看具体请求与参数格式(形式)如下:

ubuntu20.04安装实时内核补丁PREEMPT_RT

参考: Ubuntu 18.04安装 RT-PREEMPT 实时内核及补丁【过程记录】_ubuntu18.04 preempt rt linux 5.6.19-CSDN博客 https://github.com/UniversalRobots/Universal_Robots_ROS_Driver/blob/master/ur_robot_driver/doc/real_time.md当前内核:5.15.0-94-ge…