的五大身份验证安全隐患-API (的五大身份验证怎么弄)

教程大全 2025-07-15 00:44:05 浏览

最近一连串的 api 安全事件(Peloton、Experian、Clubhouse 等)无疑迫使许多安全和开发团队仔细检查他们的 API 安全状况,以确保它们不会成为下一个被攻击对象。创建面向外部受众的所有API的清单是组织在组合或重新评估API安全程序时最常见的出发点。有了这个清单,下一步是评估每个暴露的 API 的潜在安全风险,比如弱身份验证或以明文形式暴露敏感数据。

OWASP API安全Top 10为评估API清单的风险类型提供了一个良好的框架。它们被列在前10位是有原因的,最常见和最严重的都排在前面。例如,列表中的前两个处理身份验证和授权,这两个都可以追溯到上面提到的一些最近的API事件,这在安全公司的客户环境中很常见。

未经身份验证的 API

未经身份验证的 API 是迄今为止在面向公众的 API 中检测到的最糟糕的事情,对于处理基本业务信息的 API 尤其如此,这些信息可能包含遵守PCI或PHI法规的信息。

在处理必要业务数据的面向公众的 API 中缺乏身份验证的一个常见原因是,该 API 过去故意不进行身份验证,以支持不支持身份验证的遗留应用程序。以前可能是这样,但这并不意味着API应该保持开放。今天,许多用户(包括外部和内部)将完全开放地访问API。了解旧限制历史的人可能已经离开了公司,因此,企业现在需要努力填补这一差距。为这些例外情况打开大门是绝对不能接受的,因为很少有人在以后的某个时间点再回去关闭大门。

API

最佳实践:永远不要部署未经验证的API,无论是内部的还是面向公众的。

使用非空值身份验证令牌的 API

尽管很难想象,但通常会发现 API 根本不使用 auth 令牌实现任何身份验证,而是仅检查请求中是否存在一个。这个问题通常比 API 中缺少身份验证更令人震惊,因为这允许用户仅通过在 API 请求中传递身份验证令牌来访问资源。令牌的实际值并不重要,因为应用程序仅检查请求中是否存在身份验证令牌(任何身份验证令牌)。

很难想到用这种方法开发 API 的充分理由。也许他们缺乏在后端应用程序中实现身份验证逻辑所需的时间?不幸的是,攻击者无需花费太多精力或时间即可利用这些 API。他们只需要为 auth 令牌发送一个非空值,API 请求就会被成功处理。绝不应允许使用非空值令牌。曾经。它带来了“暂时”使用但永远不会被删除的重大风险。

最佳实践:始终为内部或面向公众的 API 分配令牌值。

API经过身份验证,但未经授权

只有身份验证而没有授权的 API 是另一个常见的漏洞。部分原因是实现用户身份验证“足够好”的概念,通过验证用户的授权权限几乎没有什么好处。缺点是这允许用户访问不属于他们的资源。

例如,假设一个用户登录来检查他们的配置文件,而后端没有强制执行强授权检查。通过更改用户标识符,用户将能够“嗅探”并通过相同的API获取信息。在这种非常常见的API风险中,通过身份验证的用户可以通过简单地枚举标识符来获取许多其他用户的信息。

如果标识符是简单的数值,例如攻击者可以轻松枚举的 6 位数字,则此问题会变得更糟。最基本的建议是使用随机生成的字母-数字标识符,至少可以缓解(但不能消除)此类枚举攻击的风险。

最佳实践:始终实施强授权机制来补充强身份验证。

API令牌扩散

应用程序开发团队通常支持不同类型的身份验证集成与其 API 的不同使用者。这最终导致 API 的身份验证方法分散,应用程序所有者难以管理。

例如,消费者 A 可能会在请求标头中发送一个名为 X-api-token 的 API 令牌,以向应用程序验证自己的身份。相反,拥有相同API的消费者B可能会以一个名为API -key的请求参数发送他们的API令牌,第三个消费者C可能会在Authorization头中发送他们的信息。

这种不同的方法导致 API 以多种方式接受身份验证令牌,这些方法中的任何一个潜在漏洞,类似于我们上面看到的那些,都可能危及所有这些方法的访问。我们的建议是强制API定义(如Swagger规范)的一致性,然后在发布之前对结果进行测试以缓解风险。至少,在运行时发现API 并检测它们中是否存在这样的碎片验证问题是很重要的。

最佳实践:使用 API 规范框架强制执行一致性,并使用基于功能的测试计划超越基本的渗透测试。

带有不正确授权逻辑的API

具有不正确授权逻辑的 API 允许通过接受在低权限环境(例如 dev 或 staging)中生成的身份验证令牌来访问高权限环境,例如生产环境。如果用户可以轻松访问生产环境中的敏感业务数据,这可能会迅速升级为一个重大漏洞。

精明的攻击者可能能够从较低的环境中获取身份验证令牌并将其重播到生产 服务器 。身份验证的糟糕实现将允许此类访问,因为身份验证令牌本身可能是有效的,但适用于错误的环境。为了修复这种风险,需要将 auth 令牌的授权范围适当限制在允许访问的资源范围内。

最佳实践:使用 OAuth Scopes 或其他工具来创建和实施设计良好的授权后端。

总结

API 身份验证令牌实际上是你的应用程序中的关键。这 5 个身份验证漏洞都在客户环境中发现,使他们的 API 容易受到攻击者入侵他们的应用程序并泄露他们无权访问的信息的攻击。

创建清单并分析面向公众的 API 以在攻击者发布或发现它们之前找到身份验证漏洞非常重要。


什么是PE病毒?

PE病毒是指所有感染windows下PE文件格式文件的病毒. PE病毒大多数采用Win32汇编编写. PE病毒对于一个热衷于病毒技术的人来说,是必须掌握的. 只有在PE病毒中,我们才能真正感受到高超的病毒技术. 编写Win32病毒的几个关键 Api函数的获取 不能直接引用动态链接库 需要自己寻找api函数的地址,然后直接调用该地址 一点背景:在PE Loader装入我们的程序启动后堆栈顶的地址是是程序的返回地址,肯定在Kernel中! 因此我们可以得到这个地址,然后向低地址缩减验证一直到找到模块的起始地址,验证条件为PE头不能大于4096bytes,PE header的ImageBase值应该和当前指针相等. 病毒没有段,变量和数据全部放在段 编写Win32病毒的几个关键 偏移地址的重定位 Call delta delta: pop ebp sub ebp,offset delta 那么变量var1的真正偏移地址为:var1+ebp 对PE文件格式的了解 编写Win32病毒的几个关键 病毒如何感染其他文件 在文件中添加一个新节 该新节中添加病毒代码和病毒执行后的返回Host程序的代吗 修改文件头中代码开始执行位置(ADDRessOfEntryPoint)指向新添加的节,以便程序运行后先执行病毒代码. PE病毒感染其他文件的方法还有很多,譬如PE病毒还可以将自己分散插入到每个节的空隙中等等,这里不在一一叙述. PE文件格式一览 Section n Section ... Section 2 Section 1 Section table PE header DOS stub DOS MZ header PE header Pe header 由三部分组成 字串 PE\0\0(SigNATure) 映像文件头(FileHeader) 可选映像头(OptionalHeader) 字串 PE\0\0 Signature 一dword类型,值为50h, 45h, 00h, 00h(PE\0\0). 本域为PE标记,我们可以此识别给定文件是否为有效PE文件. 这个字串在文件中的位置(e_lfanew),可以在DOS程序头中找到它的指针,它占用四个字节,位于文件开始偏移3CH字节中. 映像文件头 该结构域包含了关于PE文件物理分布的信息, 比如节数目,文件执行机器等. 它实际上是结构IMAGE_FILE_HEADER的简称. 映像文件头结构 IMAGE_FILE_HEADER STRUCT ___ Machine WORD ___ NumberOfSections WORD ___ TimeDateStamp dd ___ PointerToSymbolTable dd ___ NumberOfSymbols dd ___ SizeOfOptionalHeader WORD ___ Characteristics WORD IMAGE_FILE_HEADER ENDS 映像文件头的基本信息 关于文件信息的标记,比如文件是exe还是dll 2 Characteristics * 7 可选头的大小 2 SizeOfOptionalHeader 6 符号数目 4 NumberOfSymbols 5 COFF符号表的偏移 4 PointerToSymbleTable 4 生成该文件的时间 4 TimeDataStamp 3 文件中节的个数 2 NumberOfSection ** 2 机器类型,x86为14ch 2 Machine * 1 描述 大小(字节) 名字 顺序 可选映像头 optional header 结构是 IMAGE_NT_HEADERS 中的最后成员.包含了PE文件的逻辑分布信息.该结构共有31个域,一些是很关键,另一些不太常用.这里只介绍那些真正有用的域. 这儿有个关于PE文件格式的常用术语: RVA RVA 代表相对虚拟地址.它是相对虚拟空间里的一个地址 . 举例说明,如果PE文件装入虚拟地址(VA)空间的h处,且进程从虚址h开始执行,我们可以说进程执行起始地址在RVA 1000h.每个RVA都是相对于模块的起始VA的. 可选映像头 文件中节对齐的粒度. FileAlignment 内存中节对齐的粒度. SectionAlignment PE文件的优先装载地址.比如,如果该值是h,PE装载器将尝试把文件装到虚拟地址空间的h处.若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址. ImageBase PE装载器准备运行的PE文件的第一个指令的RVA.若要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行. AddressOfEntryPoint * 描述 名字 可选映像头 NT用来识别PE文件属于哪个子系统. Subsystem 一IMAGE_DATA_DIRECTORY 结构数组.每个结构给出一个重要数据结构的RVA,比如引入地址表等. DataDirectory 所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸.可以以此值作为PE文件第一节的文件偏移量. SizeOfHeaders 内存中整个PE映像体的尺寸. SizeOfImage win32子系统版本.若PE文件是专门为Win32设计的,该子系统版本必定是4.0否则对话框不会有3维立体感. MajorSubsystemVersion MinorSubsystemVersion 描述 名字 DataDirectory数据目录 一个IMAGE_DATA_DIRECTORY数组,里面放的是这个可执行文件的一些重要部分的RVA和尺寸,目的是使可执行文件的装入更快,数组的项数由上一个域给出_DATA_DIRECTORY包含有两个域,如下: IMAGE_DATA_DIRECTORY VitualAddress DD Size DD IMAGE_DATA_DIRECTORY ENDS 节表 节表其实就是紧挨着 PE header 的一结构数组.该数组成员的数目由 file header (IMAGE_FILE_HEADER) 结构中 NumberOfSections 域的域值来决定.节表结构又命名为 IMAGE_SECTION_HEADER. 结构中放的是一个节的信息,如名字,地址,长度,属性等. IMAGE_SECTION_HEADER 本节原始数据在文件中的位置 4 PointerToRawData * 5 本节的原始尺寸 4 SizeOfRawData * 4 这个值+映像基地址=本节在内存中的真正中无意义. 4 Virtual * 3 OBJ文件用作表示本节物理地址EXE文件中表示节的真实尺寸 4 PhysicalAddress或VirtualSize 2 节名 8 Name * 1 描述 大小(字节) 名字 顺序 IMAGE_SECTION_HEADER 节属性 4 Characteristics * 10 本节在行号表中的行号数目 2 NumberOfLinenumbers 9 本节要重定位的数目 2 NumberOfRelocations 8 行号偏移 4 PointerToLinenumbers 7 OBJ中表示该节重定位信息的偏移EXE文件中无意义 4 PointerToRelocations 6 描述 大小(字节) 名字 顺序 节 节(Section)跟在节表之后,一般PE文件都有几个节.比较常见的有: 代码节 已初始化的数据节 未初始化的数据节 资源节 引入函数节 引出函数节 代码节 代码节一般名为或CODE,该节含有程序的可执行代码. 每个PE文件都有代码节 在代码节中,还有一些特别的数据,是作为调用映入函数之用.如: Call MessageBoxA的调用,反汇编后该指令被换为call A,而地址A仍在中,它放有一个跳转指令jmp dword ptr[c],即这条跳转指令的目的地址处于节中的C处,其中放的才是MessageBoxA的真正地址,如下图: 已初始化的数据节 这个节一般取名为或DATA 已初始化的数据节中放的是在编译时刻就已确定的数据.如Hello World 中的字符串Hello World!. 未初始化的数据节 这个节的名称一般叫. 这个节里放有未初始化的全局变量和静态变量. 资源节 资源节一般名为 这个节放有如图标,对话框等程序要用到的资源. 资源节是树形结构的,它有一个主目录,主目录下又有子目录,子目录下可以是子目录或数据. 都是一个IMAGE_RESOURCE_DIRECTORY结构.结构如下: IMAGE_RESOURCE_DIRECTORY 结构 以ID标识的资源数 2 NumberOfldEntries 6 以名字标识的资源数 2 NumberOfNamedEntries 5 次版本号 2 MinorVersion 4 主版本号 2 MajorVersion 3 资源生成时间 4 TimeDateStamp 2 通常为0 4 Characteritics 1 描述 大小(字节) 名字 顺序 引入函数节 一个引入函数是被某模块调用的但又不在调用者模块中的函数 这个节一般名为,也叫引入表. 它包含从其它(系统或第三方写的)DLL中引入的函数,例如,等. 它的开始是一个IMAGE_IMPORT_DESCRIPTOR数组.这个数组的长度不定,但他的最后一项是全0,可以以此判断数组的结束. 引出函数节 什么是引出函数节 引出函数节是用来向系统提供导出函数的名称,序号和入口地址等信息,以便Windows装载器通过这些信息来完成动态链接的过程. 了解引出函数节对于学习病毒来说,是极为重要的. Api函数地址的获取与引出函数节息息相关. 引出函数节 通过Api函数名查找其地址 (1)定位到PE文件头 (2)从PE文件头中的课选文件头中取出数剧目录表的第一个数据目录,得到导出表的地址. (3)从导出表的NumberOfNames字段得到以命名函数的总数,并以这个数字做微循环的次数来构造一个循环. (4)从AddressOfNames字段指向的函数名称地址表的第一项开始,在循环中将每一项定义的函数名与要查找的函数名比较,如果没有任何一个函数名符合,说明文件中没有指定名称的函数. (5)如果某一项定义的函数名与要查找的函数名符合,那么记住这个函数名在字符串地址表中的索引值,然后在AddressOfNameOrdinals指向的数组中以同样的索引值去除数组项的值,假如该值为m. (6)以m值作为索引值,在AddressOfFunctions字段指向的函数入口地址表中获取的RVA就是函数的入口地址,当函数被装入内存后,这个RVA值加上模块实际装入的基址(ImageBase),就得到了函数真正的入口地址.

网络层的安全隐患有哪些哦?

网络中的重要的安全设备如路由器、三层交换机等有可能存在着以下的安全威胁:(以最常用的路由器为例)路由器缺省情况下只使用简单的口令验证用户的身份,并且远程TELNET登录时以明文传输口令。 一旦口令泄密路由器将失去所有的保护能力。 路由器口令的弱点是没有计数器功能的,所有每个人都可以不限数的尝试登录口令,在口令字典等工具的帮助下很容易破解登录口令。 每个管理员都可能使用相同的口令,因此,路由器对于谁曾经作过什么修改,系统没有跟踪审计能力。 路由器实现的动态路由协议存在着一定的安全漏洞,有可能被恶意的攻击者利用来破坏网络的路由设置,达到破坏网络或为攻击作准备。 针对路由器的拒绝服务攻击或分布式拒绝服务攻击,发布假路由,路由欺骗,导致整个网络的路由混乱。

如何使用iPhone查询比特币挖矿进度?

iPhone查询比特币挖矿进度步骤:一、首先我们把自己在“BTC Guild”矿池网站上的 API Key 先复制下来,稍后会用到这个 Key 来关联我们的开采帐户。 登录“BTC Guild”矿池网站,点击顶部的“Setting”,找到“API Key”对应的一串由字母和数字组成的 Key,如图所示:注:也可以在 iPhone 上打开此网站,登录并复制 API Key:二、打开 iPhone 上的 App Store 应用,点击底部的“搜索”,如图所示:三、在搜索框中输入“btcguild”,然后点击右下角“搜索”,如图所示四、在搜索内容中找到“BTCGuild View Lite”,并点击“安装”按钮,如图所示注:第一次安装需要输入 Apple ID 的密码。 五、首次使用应用程序会显示软件声明,点击“Accept”继续,如图所示六、进入应用程序以后,请点击底部最右边的“Setting”图标,然后输入之前记录下我们在 “BTC Guild”矿池网站上的 API Key,如图所示:注:从这个界面点击打开网站,登录并复制 API Key,然后粘贴到 Setting 中。 七、等待应用程序连接好了以后,点击左边的“Overview”图标,可以看到我们当前挖掘金币的总数,如图所示八、如果想要查看矿工的具体信息,请点击底部的“Worker”图标。 然后选择矿工就可以看到当前矿工的挖掘速度和其它相关信息,如图所示:

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐