写点什么

网络安全中 API 常见漏洞

  • 2023-01-30
    河南
  • 本文字数:2725 字

    阅读完需:约 9 分钟

据 Bleeping Computer 网站披露,近 20 家汽车制造商和服务机构存 API 安全漏洞,这些漏洞允许黑客进行远程解锁、启动车辆、跟踪汽车行踪,窃取车主个人信息的恶意攻击活动。据悉,出现 API 漏洞的品牌包括但不限于宝马、罗尔斯、奔驰、法拉利、保时捷、捷豹、路虎、福特、起亚、本田、英菲尼迪、日产、讴歌、现代、丰田和创世纪等其知名汽车品牌。此外,漏洞还影响汽车技术品牌 Spireon 和 Reviver 以及流媒体服务 SiriusXM。这些 API 漏洞是被 Sam Curry 领导研究小组发现,更详细的漏洞报告可以参考他们发布的博客文章(Web Hackers vs. The Auto Industry: Critical Vulnerabilities in Ferrari, BMW, Rolls Royce, Porsche, and More)。

现如今 API 的应用随处可见,API 之所以能在现代软件开发过程中被广泛使用,是因为随着物联网极其软件规模扩大,公开的 API 数量巨大,开发人员通过调用 API 快速构建项目,节省了大量的时间。例如:GEF(graphical editing framework)作为一个常用的 Eclipse 的图形类库,就涉及 6 万多个 API 方法。但是随着 API 的大规模使用,API 网络安全漏洞问题也在逐步攀升。

一、什么是 API 及 API 的广泛运用 API 是软件库提供的一组可访问的接口,软件库通过 API 向外提供服务,开发人员通过使用 API 实现代码复用,提高生产效率。

1968 年,在 NATO 软件工程会议上,Mcllroy 首次提出了软件复用的概念,软件开发人员开始有意识地使用标准化组件设计并构建程序。1972 年,Parnas 的经典论文探索了使用模块化编程的标准。1992 年,Plauger 提出了关于 C 语言 15 个接口的完整定义和详细说明。随着面向对象技术以及互联网技术的快速发展,为软件复用提供了更全面的技术支持,API 技术快速发展,被视为解决软件危机、提高软件生产效率和质量的现实可行的途径。

API 被广泛使用有以下原因:

①API 提供了一种代码复用机制,开发人员直接复用已有的程序,节省了大量的时间。

②API 提供了一种信息隐藏的机制,用户不需要知道具体的实现细节,直接调用 API 完成相应的功能。

③API 提供了访问某些资源的接口,用户只有通过设备驱动、操作系统 API 等接口才能够访问到某类资源。

不同的组织或者开发人员使用了不同的术语来表示 API,并没有形成统一的标准:

(1)类库,如 C 语言的标准库,Math 库等

(2)框架,如.Net 框架,Eclipse 框架等

(3)工具包,如 Google Web Toolkit,GIMP Toolkit 等

(4) API,如 Win32 APIs,Google Maps APIs 等

二、网络安全中 API 常见的漏洞

API 对应着的是操作系统的某些底层功能,一个 API 函数要满足上层应用程序的各种各样的要求,必然会带来某些特殊的制约因素,为系统带来潜在的风险,在特定条件下就成为系统的安全漏洞。具体来说有以下几种情况:

1.API 本身存在的缺陷

①缺少必要的约束检查。在执行某个操作之前,系统必须保证该操作能够分配到所需的资源如需要访问的地址、文件等等。最常见的情况就是程序设计时忽略了完整性检查与边界检查,从而存在缓冲区溢出漏洞错误,不仅会导致系统崩溃,甚至可以使攻击者执行任意代码,获得系统的最高权限。

例如“CodeRcdII”蠕虫病毒利用的“微软 Index Servcr(.ida/idq)ISAPI 扩展远程溢出漏洞(MS01-033)”,就是因为 ISAPI 在处理某些 URI,请求时存在一个未经检查的缓冲区。当攻击者提供一个精心构造的特殊格式的 URL 时,引发缓冲区溢出,使得攻击者可以改变程序执行流程,执行任意代码远程获取“Local Systcm”权限。

②缺少输入的有效性检查:对运行程序的任何直接俞入,如参数的类型和数量等等,都必须对其进行有效性检查。常见的情况就是 API 在使用诸如 syslem(). popen().xeclp(). cxeevp()等函数的过程中,只要求给出文件名,而不要求指定文件路径,使得入侵者可以欺骗系统去执行不同的文件。例如“尼姆达”病毒传播时利用的 Microsoft IIS 5.0 系统文件列表权限提升漏洞”,就是利用这类缺陷,使得病毒能够在 IIS 进程空间中以父进程通常是系统权限)的权限被执行。

2.底层 API 的功能没有被公开或不被编程人所知

底层 API 的功能没有被公开或不被编程人所知的 API 接口在设计调试过程中往往会为测试时留下一些临时性代码,这些代码不会公开,但它们会产生什么影响,则很难预测。另一种情况就是操作系统设计时故意留下了一些用户不可知的接口或“后门”,使设计者通过某种手段就可能拥有电脑的控制权。如有可能在特殊条件下通过这种手段远程控制电脑、窃取用户数据等等。更严重的是,一旦这些后门被攻击者预先知道,那么用户的电脑无疑是对攻击者敞开了大门,这种威胁尤其对于政府组织等重要部门是非常危险的。

3.API 设计与实际使用的环境不同

API 一般都会经过各种各样的测试,然后发布。然而,有时候测试通过的 API,在实际使用的过程中会出现与调试时不一样的情况。当 API 没能正确处理具体运行环境时,这些事先没有考虑到的特殊情况往往就会导致系统缺陷的产生。

例如在 Solaris 系统中,SSH 1 版中客户端的安全 RPC 的特点是使用系统给定的密码来加密 SSH 的私钥文件,而不是要求用户提供一个独立的密码。当用户使用这一特性时,SSH 使用名叫 key_encryptsession 的 API 函数来根据用户的公钥和私钥计算出一个“加密密钥”,并用它来加密用户的私钥文件。安全 RPC 的密钥由名叫 keuserv 的进程管理,该进程在用户通过安全 RPC 认证之后,将用户的公钥保存在内存中。如果用户没能通过认证,那么 key_encryptsession 并不能得到他的私钥。但如果 keyscrv 启动时使用了参数“-d”,key_encryptsession 函数将试图使用“无人私钥”来取代用户的私钥并计算"加密密钥”。这样该“加密密钥”就很可能被攻破,并用来恢复出 SSH 的私钥。而运行在非 Solaris 系统的其他版本的 SSH 客户端没有此类漏洞。

4.多个 API 联合使用

不同 API 采用不同的机制实现不同的系统功能,一个 API 单独使用时不会出现问题,然而多个 API 联合使用时便会因为各自的机制不同而产生安全问题。例如: Lolus Noles 中允许用户在数据库中建立文档和对象之间的连接。虽然这些对象看起来是文档的一部分,但实际上它们是作为单独的文件存储的。数据库的 ACL 控制着对文档和对象的访问,Lotus Notes 中使用 R&A(Reader and Author)列表还可以对个人文档做进一步的访问限制。但是 R&A 列表仅仅修改对文档的访问限制,而不限制文档所连接的对象,因此一个没有文档访问权限的入侵者一旦知道文档的 ID,就可以通过 NotesAPI 打开未授权访问文档中关联的对象。当然对于这些情况也是常见的,但发现及解决的难度更大。因为这种情况发生后产生的异常情况的报警往往并不能真正地显示出错位置。而且一般的调试只能够针对某一系统程序,而这种出错一般都会涉及多个程序。如何发现及解决这种错误,还有待解决。

结论:

API 是应用程序的基础,自然也就成为网络安全中个最基础的部分,全面的了解系统 API 及 API 对网络系统安全的影响将有助于在实际应用中正确合理地使用 API 进而开发出更安全、有效的API应用程序

用户头像

全球高精准IP地址实时定位技术领航者 2020-02-15 加入

一个终生致力于网络空间地图测绘技术创新应用的开拓者

评论

发布
暂无评论
网络安全中API常见漏洞_API漏洞_郑州埃文科技_InfoQ写作社区