Tag: 安全性

什么是SSL固定? (介绍)

在讨论SSL固定之前,我们需要讨论安全的Web连接。 当诸如移动应用程序或Web浏览器之类的客户端应用程序开始与服务器进行安全会话时,客户端和服务器必须达成三点共识。 1.如何交换钥匙 2.如何加密数据 3.如何将邮件标记为真实 服务器可以决定使用RSA交换密钥AES 256来加密数据,并使用SHA-1签名消息。 如果客户端可以支持这些消息,则客户端向服务器请求证书链。 一旦客户端验证了证书链,便从证书中提取公钥。 这就是SSL固定起作用的地方。 开发人员可以将公钥编译为应用程序代码。 这实际上将密钥固定到了应用程序中。 当客户端从服务器接收到公共密钥时,它将把该密钥与应用程序中的固定密钥进行比较。 密钥应该匹配。 如果密钥不匹配,则客户端终止会话。 现在有三种类型的SSL固定。 1.公钥固定(如上所述) 2.证书固定 3. SPKI固定 这涉及固定整个证书,而不是仅固定公用密钥。 证书过期时,我们必须先使用新证书更新客户端应用程序,然后再更新服务器上的证书。 因此,公钥固定是首选的固定方法。 由于证书已正确更新,因此公钥不会更改,我们也不必更新我们的应用程序。 主题公共密钥信息(SPKI)是最新的固定类型。 使用此方法,将公钥和其他元数据的哈希固定到应用程序。 不使用SSL固定的应用程序容易受到中间人攻击。 这是攻击者秘密中继并可能更改消息的时候。 SSL固定允许开发人员在其应用程序中添加额外的安全层。 而且很容易通过诸如iOS的AFNetworking和Android的OkHttp之类的库来实现。

在不解锁iPhone的情况下使用Siri,有人可以窃取您的个人信息以及如何防止其发生

如果您正在关注上周与iPhone有关的流行新闻,那么作为iPhone用户,您应该感到非常害怕的一个话题是,没有解锁iPhone的某人如何仅通过询问Siri就能获得您的个人信息详细信息。 以及这种假设如何发生? 而您可以采取哪些措施来防止这种情况? 通读。 别人如何激活Siri? 在Apple拥有称为“嘿Siri”的通过语音的Siri通话功能之前,很早就可以通过按下iPhone主屏幕按钮3秒钟来激活Siri。 因此,您和/或其他人可以在不解锁设备的情况下在iPhone上激活Siri。 别人如何提取/窃取您的个人信息? 从iOS 9或10(不确定哪个)开始,Siri会确认您的声音。 但这并不意味着Siri仅会在您的语音命令下听到和工作。 当其他声音未知的人向Siri发出命令时,它仍然会响应。 通过说出某些命令,Siri将帮助任何人提取个人数据而无需解锁iPhone。 检查以下命令,查看Siri响应什么。 问Siri:我的电话号码是多少? Siri会回答:“您需要先解锁iPhone”。 使用这个问题,Siri不会给任何人您的电话号码。 问Siri:“我的电话号码是什么?”,您一无所获 问Siri:我是谁? 然后Siri会回答:“您是。 使用此问题,Siri会向任何人提供您的详细信息和电话号码,包括您的家庭住址-如果您将详细信息放在姓名上。 问Siri:“我是谁?”,您将获得个人信息详细信息

了解24kpwn

24kpwn也称为“ 0x24000段溢出漏洞”,是iOS历史上的第一个越狱事件。 你们中的许多人以前可能听说过越狱,也许有人正在对此进行研究。 关于我自己的一些简介,我是一名安全研究员。 去年,我在Facebook Inc.中发现了一个bug,Facebook为此奖励了我。 这样,我就可以使用我的第一台iDevice。 我一直对移动安全感到好奇,然后Luca Todesco(@qwertyoruiopz)为64位设备的iOS 10开发了越狱软件。 从那时起,我开始学习有关iOS安全的知识。 我阅读书籍,文章,帖子,PoC和观看的视频。 但是由于资源较少,很难进入iOS安全领域。 我发现在线资源不多,如何上手以及指向何处。 因此,对于那些想加入该领域的人来说。 我建议他们从Binary Exploitation开始。 这就是我的开始方式,“ iOS Hackers Handbook”是一本很棒的书。 无论如何,您在这里不是为了我的故事而了解24kpwn。 因此,让我们开始吧,在开始之前,让我先介绍一些术语,以免引起您的混淆。 LLB — 底层BootLoader SRAM — 静态随机存取存储器 IMG3- iOS启动期间使用的新版本的 IMG2 。 S5L8720 — 应用处理器 S5L8920 — 应用处理器 NOR — NOR闪存(可通过电擦除和重新编程的存储器) IDB — 调试过程 SoC — 片上系统 我想我介绍了我将在本文中使用的所有术语。 什么是24kpwn? 24kpwn也称为0x24000段溢出 ,一些研究人员在第一个iPod Touch 2G中发现了24kpwn ,该溢出允许绕过LLB上的bootrom签名检查并最终获得不受限制的越狱。 […]

如何在iOS应用程序中集成Stripe Payment网关

您将如何构建一个接受付款的移动应用程序? 无论是旅行应用还是电子商务,您都需要找到一些方法来接受客户需要购买的产品的电子付款。 拥有一个可以轻松在您的移动应用程序内部运行的支付网关的基本知识。 它提供了一个平台来完成客户和供应商之间的交易。 这类付款方式可能同样会影响访问者对您品牌的看法,并成为他们是否进行购买的主要原因。 因此,拥有支付网关是不够的,但它应该是安全且高度可靠的。 有多种付款网关,使您能够通过其API处理信用卡交易的信息。 在流行的金融交易生态系统中,Stripe是众所周知的支付网关之一。 Stripe是由Collison兄弟于2011年推出的一种易于使用的在线信用卡处理解决方案,是一种对开发人员友好的支付系统,其设计采用了一系列合并的API和工具,可迅速使企业接受和管理在线支付。 安装库 使用CocoaPods安装库,该库是Objective-C项目的依赖管理器。 配置API 使用可发布的API密钥配置Stripe。 理想的情况是安排Appdelegate的方法,目标是在应用程序的整个生命周期内对其进行设置。 添加接受用户信用卡信息的Stripe Control 要进行交易,您的应用程序应收集客户的信息,例如持卡人姓名,帐号,CVV号等。 在Stripe付款网关中,建议通过Apple Pay收集用户存储的付款信息。 为了利用Apple Pay,您必须在Xcode的应用程序中包括“ Apple Pay”功能。 这需要在Apple上设置商家ID,一旦设置,您就必须生成PKPaymentRequest才能提交到Apple服务器。 您必须将paymentSummaryItems属性设置为P KPaymentSummaryItems数组。 发出请求后,检查设备以确保Apple Pay是否可访问。 然后,您应该创建并显示付款请求viewcontroller 。 您可能已经看到ViewController是PKPaymentAuthorizationViewControllerDelegate 。 您将通过使用此协议来处理付款批准控制器返回的PKPayment 。 添加代码以生成令牌 收到PKPayment之后 ,可以使用基本方法调用将其转换为一次性使用的Stripe令牌。 将令牌发送到您的服务器 您为createToken提供的块将在Stripe带令牌返回的任何点被调用。 您必须将令牌发送到服务器。 这是您从服务器端代码向卡收取费用并将成功或失败信息返回给应用程序的最后一步。 这样就可以有效地从客户的信用卡中扣除他们在应用程序中进行的购买的费用! 基本上,Stripe考虑到市场需求为您提供信用卡服务。 通过高度安全的支付网关集成,您可以轻松地从客户那里获得即时付款,该集成将您的移动应用程序转变为POS终端。 您可以在几分钟内启动并运行所有内容,而不必浪费时间来设置商家帐户和使用令人困惑的客户付款网关。

Criptografia para dispositivos iOS

苏马里奥 Neste发布了Vamos Discutir的声音: Segurançados Sistemas苹果。 安全飞地。 Aplicaremos没有使用iOS。 数据保护。 Demonstração做数据保护trabalhando com arquivos。 简介 苹果公司在苹果公司的股份购买权,或者存在于苹果公司的股票。 请在iOS上使用possuem或posposem,然后在comadod上添加is fos semper um ponto positivo和semper citado。 Essasafirmaçõessãoverdadeiras? 像pessoas semper falaram isso dos produtos苹果一样有动机吗? 犯罪或刑事诉讼法? Todos estestópicosserãoabordados aqui,sevocêtiveralgumadúvidasobre criptografia ou outraquestãosobre essestópicospode sana-las aqui na 3xbit Academy 。 Segurançados Sistemas苹果 软件和硬件的安全性,以及iOS设备的基本组件,包括软件的处理过程,以及软件的安全性,以及软件的安全性。 苹果公司对产品的响应是一种易于使用的发行方式,它可以集成硬件和软件,并且可以在iOS设备上分配适当的成本,而在iOS上则要花费很多时间。公证人制度的必要条件。 旨在简化软件安装和安装的软件,软件的硬件和软件,以及软件的通用性。 Entsãocom isso podemos响应者nossa primeira pergunta,或说lembra:“操作系统在iOS上还是在seguros上?”。 Podemos dizeratéaqui que sim,在科摩罗动员代表,在sóque […]

使用适用于iOS的Keychain保护用户数据

在本文中,我将讨论使用Apple的钥匙串服务在iOS应用中安全地持久存储数据。 我将向您介绍Keychain Services API的功能,并说明通过实现包装程序在应用程序中开始使用Keychain功能的快速简便的方法。 钥匙串提供了一种安全的替代方法,可以使用NSUserDefaults,plist或类似方法来保存敏感数据,例如用户名和密码。 您可能已经知道,NSUserDefaults简单有效,可以将小的,简单的数据位(例如NSNumbers或NSStrings)保存到设备的文件系统中。 但是这些数据绝不能安全地存储,因为黑客可以很容易地从设备访问它。 苹果提供了Keychain Services API来解决此问题,并帮助开发人员构建可安全处理密码和其他敏感信息的应用程序。 Apple文档中将钥匙串定义为: “……一个加密的容器,代表应用程序和安全服务安全地存储小块数据。” 和 “…只是存储在文件系统中的数据库。” 钥匙串之所以出色,是因为在将数据加密存储到文件系统之前,它会自动进行处理,因此无需浪费时间来构建加密算法。 可以将OS和iOS中的钥匙串配置为锁定。 锁定后,将无法访问和解密存储的钥匙串项目。 对于iOS,钥匙串在设备锁定时被锁定,在设备解锁时被解锁。 即使已解锁,除非另有配置,只有创建项目的应用程序才能访问它。 钥匙串还提供其他功能,例如:在应用程序之间访问钥匙串项目。 通常,一个应用程序只能访问其创建的项目,但是可以进行配置以使其访问一组指定应用程序内的数据。 实施钥匙串API 使用钥匙串直接存储和检索数据并非易事。 不幸的是,Keychain API使用起来有些折磨。 它是用C编写的,需要大量耗时的配置。 幸运的是,Apple和许多其他贡献者创建了更高级别的包装程序,以隐藏令人费解的C代码,并从底层组织推动事情发展。 如果您想直接使用API​​,似乎这是最好的教程(尽管已经过时了):Ray Wenderlich在iOS 5中的基本安全性。 Apple API参考文档的这一页也是查看如何直接在您的应用程序中实现钥匙串的好方法。 包装器实施 苹果自己的钥匙串包装器称为GenericKeychain,可在Objective C和Swift的示例代码中找到。 其他包装器作为Cocoapods或Github和其他依赖项管理站点上的扩展库存在。 这是我推荐的一些钥匙扣包装纸: Jason Rendel(jrendel) 的Swift的 SwiftKeychainWrapper 。 https://cocoapods.org/pods/SwiftKeychainWrapper或https://github.com/jrendel/SwiftKeychainWrapper Sam Soffes为目标C设计的SAMKeychain.https://cocoapods.org/pods/SAMKeychain 马修·帕尔默 ( Matthew Palmer)的《 锁匠》( Swift) (查看视频教程)https://github.com/matthewpalmer/Locksmith 大多数包装器都包含三种方法:一种添加钥匙串项,一种编辑钥匙串项,一种删除它,并通过一行代码即可访问和编辑钥匙串项。 分步指南:使用包装器实施钥匙串 让我们在Jason […]

Swift中的禁止@inline属性

最初发布于 swiftrocks.com 。 @inline属性是Swift中那些晦涩的事物之一-在苹果的文档中找不到它,它不能帮助您编写更@inline代码,也无济于事,只能帮助编译器做出优化决策,但这与一个非常重要的问题有关。应用性能的一个方面。 在编程中, 函数内联是一种编译器优化技术,它通过直接用方法的内容替换对某些方法的调用来消除调用某些方法的开销,基本上是假装该方法根本就不存在。 这极大地提高了性能。 例如,考虑以下代码: func calculateAndPrintSomething() { var num = 1 num *= 10 num /= 5 print(“My number: \(num)”) } print(“I’m going to do print some number”) calculateAndPrintSomething() print(“Done!”) 假定在其他任何地方都没有使用calculateAndPrintSomething() ,那么很明显,该方法不需要存在于已编译的二进制文件中,其目的只是为了使代码更易于阅读。 通过函数内联,Swift编译器可以通过将其替换为内容来消除调用无用方法的开销: //The compiled binary version of the above example print(“I’m going to do print some number”) var num = […]

在CoreData中使用ValueTransformer加密用户的敏感信息

简单的方法! 对于那些正在使用核心数据并且: 有一天,您公司的某个部门要求您更改存储在SQLite中的所有字符串以进行加密 或者只是希望您的用户数据能从越狱的设备中安全 如果正确使用Core Data,它将是一个非常方便的应用程序框架。 但是大多数时候人们没有! 这就是为什么您听到有人喊着让我们开始使用Realm的原因,甚至从根本上说,为什么不编写我们自己的SQLite包装器。 好吧,将我们的希望投向新技术并认为新的lib可以解决当前的所有问题始终是我们的本性。 如果您正在使用具有多个人的应用程序,并且经常更新模型文件,那么幸运的是,轻量级迁移,映射模型崩溃会早晚找到您! 这将在我的下一篇文章中进行解释! 现在,让我们解决我们的问题! 为了简单起见,使用最少的代码即可达到我在此所讲的内容,我们将首先从模板创建一个新的Master and Detail App,然后在Xcode 9中检查核心数据。 检查您的核心数据模型应该是这样的。 继续并在模拟器中运行此代码,并在其中添加少量数据。 今天早上,您的安全部门说,如果不对用户数据进行加密,我们就永远不要将其存储在SQLite中,因为如果它是越狱的设备,那么任何人都可以看到该数据! 首先,苹果设备不容易被黑客入侵! 如果是越狱的设备,大多数情况下只有/曾经/希望越狱的用户! 好吧,可能还有其他情况,让我们仅加密织补数据! 让我们开始创建数据模型的下一个版本! 创建新版本的核心数据模型! 可转换意味着将其存储为数据,与二进制的区别在于调用了上下文的save:和fetch:,可转换将在过程中使用ValueTransformer进行额外的操作。 在这里,我们使用一个名为“ EncryptionTransformer”的类。 现在,让我们验证我们的工作是否有效,打开SQLite文件,我们应该看到这些基数为64的“ ==”: 工作完成了! 我开始写一些可以在iOS开发中使用的隐藏技巧。 苹果没有告诉您的内容(WADTY)。 告诉我你们最想知道的内容也将很有帮助! 敬请关注! (只需点击跟随按钮!)

安全编码-如何在Xcode Project中保护您的安全信息

有时,在调试/构建应用程序时,我们可能需要在源代码中保留敏感信息。 它可以是密码,用户名,令牌,客户端ID,秘密值等 。 我们需要确保这些信息的安全性,以便您的开发团队以外的其他任何人都无法使用。 Apple iOS构建包机制是如此强大且安全,因此通常人们无法轻易地从appstore构建中提取源代码。 但是我们仍然不安全,因为开发人员使用git或任何其他存储库来处理其源代码。 在提交更改时,这些敏感信息也会随之发送。 这些数据可以随时被破坏。 在某些项目中,安全信息会保存在后端系统中,并在打包时与应用程序捆绑在一起。 无论如何,这里我将讨论一种简单的方法来确保您的敏感信息在Xcode项目中的安全。 创建一个名为Secrets.swift的快速文件,并添加一些常量(这是保存所有敏感信息的单个文件) 下一步,打开终端,然后移至创建Secrets.swift文件的文件夹。 $ cd /用户/文档/工作区/ SecretApp / SecretApp / 使用openssl有许多可用的加密方法。 您可以在下面的行中输入其他有效的密码名称值 $ openssl enc -h 在我们的示例中,我们使用AES-256加密。 现在在终端中输入以下行,然后按Enter $ openssl enc -aes-256-cbc -salt -in Secrets.swift -out Secrets.swift.enc 将会询问: 输入aes-256-cbc加密密码: 输入有效的密码来保护文件。 按下Enter键后,系统会要求您再次确认密码。 再次输入相同的密码,然后按Enter。 现在,如果您查看创建Secrets.swift的文件夹, 则可以看到另一个创建的文件: Secrets.swift.enc 。 该文件将是我们的安全加密文件。 接下来,创建一个空的txt文件(将其命名为Script)并将其保存在.xcodeproj文件所在的文件夹中。 打开文件夹,然后将文件重命名为Script.sh 。 系统将要求您确认更改 单击按钮Use.sh 现在,在文本编辑器中打开Script.sh文件,然后在下面的行中键入。 #! / […]

Okta身份验证第2部分

选择OAuth 2.0流程: 本部分可帮助您基于以下几点选择OAuth流程。 您需要的令牌类型。 您正在构建的客户端应用程序的类型。 您的应用程序需要ID令牌吗? 根据下表,您可以选择所需的OAuth流程。 您要建立什么样的客户? 下面的流程图可以快速帮助您确定要使用的OAuth流。 对于本机应用程序,Okta使用带有证明密钥的授权代码流进行代码交换(PKCE)。 带有PKCE流的授权码: 对于本机/移动应用程序,客户端机密无法存储在应用程序中,因为它很容易被公开。 因此,本机应用程序应使用代码交换证明密钥(PKCE),该密钥作为秘密使用,以确保授权代码流的安全。 验证码流程相似,不同之处在于它包含各种流程中的PKCE元素。 PKCE身份验证代码流要求您的应用程序生成一个称为“代码验证程序”的加密随机密钥。 从验证程序创建一个“代码质询”,并将其与授权码请求一起传递。 在访问令牌请求中发送了授权代码后,代码验证程序将作为请求的一部分发送。 授权服务器使用哈希算法重新计算代码挑战,并比较两个代码挑战和验证者匹配,以了解客户端发送的两个请求。 带有PKCE的授权代码流是标准代码流,在开头有一个额外的步骤,在结尾有一个额外的验证。 从总体上讲,该流程包含以下步骤: 您的应用程序将生成一个代码验证器,然后是一个代码质询。 您的应用程序将浏览器与生成的代码质询一起定向到Okta登录页面,然后用户进行身份验证。 Okta使用授权代码重定向回您的本机应用程序。 您的应用程序将此代码以及代码验证器发送到Okta。 Okta返回访问和ID令牌,以及可选的刷新令牌。 您的应用程序现在可以代表用户使用这些令牌来调用资源服务器(例如API)。 第3部分我将用示例解释OpenID Connect。 🙂 而已。 😃😃😃感谢您的阅读。 如果您想在社交媒体上关注我,这里有一些链接。 Linkedin , twitter , github 。 您可以 在这里 查看我的上一篇文章 。