Tag: 安全性

如何保护您的iOS工作流程

如果您是iOS的专业用户,那么您肯定会将Workflow用于日常任务; 如果没有,请立即执行。 今天,我只想分享一个非常简单的工作流程,最新的应用程序更新使之成为可能:可以从另一个内部运行一个工作流程。 今日小工具的功能是即使不解锁设备也能直接从锁屏运行操作; 不幸的是,这意味着如果一个陌生人带走了您的设备,他可以无限制地运行所有程序。 通常,这些工作流程并不危险,但是我确实有几个敏感的WF,其中包含敏感信息。 例如,只需单击一下,我就可以使用银行的API检查我的银行余额。 如何保护这些工作流程? 密码保护 这是一个非常轻巧的工作流程,仅需要PIN即可保护您的私人数据。 设置仅需几个步骤: 下载工作流程 设置您的个人PIN(仅数字,没有长度限制) 在您要保护的wf中添加操作“运行工作流程”,并将其指向“ PIN保护” 在上一个操作之后,添加“是否”检查,如果条件为“等于错误”作为条件,结果为“退出工作流程” 做完了! 现在,在运行工作流程时,您将需要输入密码。 如果引脚正确,则wf会照常运行,但是如果引脚错误,则会出现错误(请参见下面的屏幕截图),并且工作流程将退出。

Aplicaciones seguras en iOS,第1部分:Certificados SSL

中止集体法令的必要性。 Sin decir nombres(布宜诺斯艾利斯,布加勒斯特州:Sc ********,Ba *****),西班牙国家邮政局,西班牙邮政局,巴西邮政局,Verificar不可抗力,结局,结语,简介。 在网络上浏览。 Llevarlo a unaaplicaciónmóviles una pesadilla para nuestros usuarios。 公众意见:Es en la plataformamóvildonde conmásfacilidad nos conectamos an WiFipúblicoy,por lo tanto,estamosmásexpuestos a servíctimasde unataque MITM。 El objetivo de esos控制着标识所识别的网络安全性和安全性。 禁止在任何情况下使用原产地标记的禁运令,例如,禁止不记名的中间人,不适当的人,限制使用权的人等。 Séque parece magia –无处分。 La llavepúblicade un certificado 无需提供SSL证书:无条件,不负责任的访客访问网络,以及无任何隐私权。 Cuando mandamos nuestros datos privados a un servidor(脸书),nuestro navegador se encarga […]

监控iOS HTTPS网络流量

为了探索Apple的“查找我的朋友” API,我被引导监视来自我的iPhone 6s的网络请求,并实际上找到一些相当有趣的响应。 对于本指南,我已使用Mac OSX和iPhone 6s的Charles应用程序,尽管本指南和Charles应用程序可以应用于任何其他OS和硬件。 使用说明 步骤1:下载 在https://www.charlesproxy.com/cn/download/上下载副本并安装在您的计算机上。 请注意,此应用程序的价格为50美元(包括4个许可),但可以免费试用30天。 首次运行时,您将开始看到SSL请求以其加密形式发送,我们将需要对自己执行SSL“中间人攻击”以查看未加密的数据 步骤2:在Mac上安装根证书颁发机构(CA) 去: 帮助> SSL代理>保存Charles Root证书 双击安装证书,这将打开“钥匙串访问”,然后搜索“ Charles Proxy CA”,右键单击证书>“获取信息”,打开“信任”菜单,然后从下拉列表中选择“使用此证书时”为“永远信任”。 返回到Charles App并转到菜单 代理> SSL代理设置… 将主机“ *”和端口“ *”添加到“位置”列表。 确保重新启动浏览器 ,使其现在使用新的根证书。 这将允许您监视Charles在计算机上的SSL请求! 步骤3:设定手机 您将需要通过电子邮件将上面保存的证书发送到iOS设备上的有效电子邮件帐户, 并使用Apple Mail App(不幸的是,未安装Safari中建议的http://chls.pro/ssl不会安装证书)。 单击电子邮件中的附加证书,然后将显示以下视图,安装配置文件: 接下来,找出您计算机的IP(将在网络设置中),并确保您的iOS和台式机计算机设备都连接到同一网络,然后导航到 设置应用> Wi-Fi> WifiName设置> HTTP代理>手动 然后输入服务器:10.xxx(在上面找到计算机的本地地址)和端口:8888 然后回到Charles App并在弹出窗口中单击“允许”以寻求许可 现在,您应该看到来自设备的请求!

将Swift编译时安全变成用户安全

发生了什么? 从技术上讲,今天没有任何事情可以阻止您作为开发人员在未经用户确认的情况下无意或无意进行不可逆的更改(例如删除用户数据)。 当然,我们尝试尽可能地减轻这种风险,在各处编写UIAlertController代码(或者为此目的甚至制作基于可爱的便捷闭包的函数),但是我们编写的API并没有采取任何措施来防止这种情况的发生。 例如,假设我们有一个类Images ,它直接注入到我们的视图控制器中 最终课程图片{ 私人var图片:[UIImage] func图片(位于索引处:Int)-> UIImage { 返回图片[索引] } func add(_ image:UIImage){ images.append(image) } func delete(imageAt index:Int){ images.remove(at:index) } } 当用户点击“删除”按钮时,我们可以轻松地编写以下代码: @objc func didPressDeleteButton(sender:UIButton){ images.delete(imageAt:currentImageIndex) } 没有编译时错误(很明显),没有警告,什么都没有-因此,我们只是删除了一部分用户数据而没有任何确认。 这是不好的。 常规的解决方案是什么? 大多数时候,开发人员会尝试在视图层解决此问题,也就是在didPressDeleteButton UIAlertController那里创建并显示didPressDeleteButton 。 当然,这通常可以解决问题,但是它有明显的缺点: 开发人员可以忘记在某些地方编写此“安全措施”代码。 尽管如此,开发人员仍然可以不小心删除图像,而不是在视图层,而是在业务逻辑中的某个位置删除图像,而无需三思而后行。 那么什么是“正确”的解决方案? 我们真正想要的是我们的Images类,根本不允许未经用户确认而执行删除操作。 为了帮助我们实现该功能,让我们创建一个UserConfirmationRequired结构: struct UserConfirmationRequired { 私人让performDestructiveAction:()->() init(destructiveAction:@escaping()->()){ self.performDestructiveAction =破坏性动作 } func performWithUserConfirmation(alertTitle:字符串,alertMessage:字符串,alertDestructiveActionTitle:字符串,完成:@转义(Bool)->()){ //检索视图控制器以显示警报 保护让窗口= UIApplication.shared.delegate?.window else […]

这是避免被黑客入侵的最佳指南

保持应用更新 使用过时的应用程序会使您面临安全漏洞。 更新通常包含安全升级,可修补潜在的网络攻击的薄弱环节。 这不仅仅是决定最终在iPhone上下载iOS 11。 它也适用于路由器上的固件,以及几乎所有连接到互联网的产品。 使用智能密码 为了方便起见,人们太多次使用相同的密码。 在所有帐户上使用通用密码的问题在于,如果有人可以访问您的Spotify密码,那么他们也可以进入您的网上银行和电子邮件。 幸运的是,有一个简单的解决方案:使用浏览器或计算机的密码管理器! 它们可以帮助您为您创建强密码,并将它们存储在一个地方。 只要确保您的密码管理器的密码是安全的即可。 主板建议使用密码短语,而不是一系列大写字母,符号和数字。 他们的密码示例是:Floodlight午睡柯克桶截肢骰子 两要素认证 许多人可能已经在许多帐户中使用了此功能。 Facebook最近添加了此功能,银行也使用了双重身份验证(2FA)。 这不仅需要登录密码,而且还需要发送到手机的密码。 不要忘了移动数据安全性 智能手机的所有者平均每天花费2个小时15分钟使用应用程序。 每个应用程序都包含有关您的信息。 如果您丢失了电话,并且某人能够访问您的电话,那么他们就可以访问很多私人信息。 第一道防线是手机的密码。 不要用简单的代码来猜测,例如您的生日或地址。 网络安全专家说,iPhone是您可以获得的最安全的手机。 iOS应用具有复杂的审批流程,需要添加到应用商店中。 最近,Google的旗舰设备增强了Android的安全性。 请小心安装哪些应用程序,因为黑客已经使用Play商店发布了虚假应用程序。 不要打扰这些安全方法 PGP 相当好的隐私权(PGP)可能不值得花时间,因为它是如此令人讨厌。 PGP是用于消息,电子邮件和文件的加密程序。 在FBI或其他组织无法破解PGP加密文件的情况下,有许多已发布的实例。 虽然它可以正常工作,但创建者停止使用它,因为它在手机上不起作用。 私人电子邮件服务器 通常,即使对于Google而言,电子邮件也很难完全保护和加密。 创建自己的电子邮件服务器只会使事情复杂化,并使您更容易受到攻击。 使加密成为常态 “特朗普的中央情报局局长迈克·庞培(Mike Pompeo)认为,使用加密本身可能是一个危险信号。”主板解释说,即使您“无处藏身”,使用加密也可以帮助所有人安全。 如果加密不是一个危险信号,而是成为一种规范,那么每个人都将拥有更高的安全性。

适用于iOS的OWASP:M1-平台使用不正确,第1部分

此故事描述了iOS开发人员如何应对OWASP Mobile Top 10 2016中的M1类别漏洞。该类别涵盖了平台功能的滥用或平台安全控件的使用失败。 在第1部分中,我们将介绍Apple提供的加密工具以及iOS的其他一些与隐私相关的功能。 文件数据保护 Secure Enclave — A7和更高版本处理器中的协处理器,使用加密的内存和硬件随机数生成器为数据保护密钥管理和Touch ID提供加密操作。 UID —唯一标识符,融合到处理器和Secure Enclave中的AES 256位密钥,对于每个设备都是唯一的。 允许将数据绑定到设备。 文件系统上的所有文件均受数据保护技术保护(可用于文件和数据库API,包括NSFileManager,CoreData,NSData和SQLite): 每次在数据分区上创建文件时,Data Protection都会创建一个新的256位密钥(“每个文件”密钥),并将其提供给硬件AES引擎以对该文件进行加密。 每个文件密钥都用几个Data Protection类密钥之一包装(在Secure Enclave中),并与数据保护类的表示法一起存储在文件的元数据中。 所有文件的元数据都使用文件系统密钥加密,该文件系统密钥是在首次安装iOS或用户擦除设备后创建的。 删除此密钥,用户可以使所有文件不可解密。 数据保护类密钥受UID保护,对于某些类,还受用户密码保护 文件密钥永远不会暴露给处理器。 它们仅在跨系统运行时才用AES引擎和Secure Enclave已知的临时密钥包装。 应在项目设置(包括在权利中)中启用“文件数据保护”,但是默认情况下,对于所有应用程序,所有数据都会被加密,直到首次解锁。 钥匙串数据保护 iOS钥匙串 -存储在文件系统上的SQLite数据库,用于处理密码和其他简短但敏感的数据位。 securityd守护程序根据其“ keychain-access-groups”,“ application-identifier”和“ application-group”权利来确定每个应用程序可以访问哪些钥匙串项目。 从iOS9开始,钥匙串密码数据一直保存在Secure Enclave中(在iPhone 5S和更高版本上)。 钥匙串中有五组项目:通用密码,Internet密码,身份,证书和密钥。 除其他字段外,每个钥匙串项目均包含: 钥匙串组访问(kSecAttrAccessGroup) –允许开发人员的应用访问设备上共享的钥匙串项目; 应用程序必须共享可以在权利中设置的相同捆绑包种子ID。 数据保护等级 (kSecAttrAccessible)   —下一节将详细介绍。 iCloud钥匙串(kSecAttrSynchronizable)-允许用户在iOS设备和Mac计算机之间安全地同步其钥匙串项目,而无需将该信息暴露给Apple。 默认情况下,第三方应用添加的钥匙串项目不会同步。 该值应与兼容的数据保护类一起使用(一个不带… ThisDeviceOnly后缀)。 管理元数据,例如创建和上次更新的时间戳,版本号,使用保护类密钥包装的每个项目密钥, SHA-1散列的属性(例如帐户和服务器名称)用于查询项目而不解密每个项目 […]

使用URL方案查询canOpenURL

众所周知,Apple继续优先考虑用户的证券和隐私。 因此,毫不奇怪,Apple在iOS 9中带来了新的安全性和隐私。出于安全原因,对查询iOS 9中的canOpenURL进行了一些更改。 添加url方案以启用URL方案:-转到信息->打开url类型->添加类型。 我们通常使用openURL:函数打开外部应用程序。 通常,首先我们查询UIApplication的canOpenURL :(返回Bool)以检查URL方案的可用性,然后使用openURL:打开外部应用。 Swift代码段:- 让appURL = URL(string:“ thatapp://”) 如果UIApplication.shared.canOpenURL(appURL!){ //开放网址的代码 打印(“可以打开URL”) } 这是一个很好的功能,但是Facebook,Twitter等开发人员使用此机制获取设备中安装的应用程序列表。 苹果认为这是对隐私的侵犯,因此在iOS 9中限制了URL方案的查询。 如果您针对iOS 9 SDK进行构建和链接,则需要将应用将查询的方案列入白名单。 如果您在应用中运行上述代码,则会收到以下错误消息, -canOpenURL:URL失败:“ thatapp://” —错误:“此应用不允许查询方案thatapp” 这是因为您需要在LSApplicationQueriesSchemes项下的info.plist中将您的应用想要查询的URL方案白名单: 在info.plist中包含URL Scheme之后,一切都会好起来的。 在iOS 9中,没有50个URL方案的限制,与在iOS 8及之前版本中一样。您可以查询任意数量的应用程序,但必须在info.plist中声明它。 强烈是要在检查Apple的应用程序时检查URL方案的列表,如果他们发现该应用程序违反了安全性,他们可以拒绝该应用程序,这就是我所相信的。

涉足钥匙扣服务

如果您曾经构建过iOS应用程序,则可能遇到了必须代表用户存储敏感信息的情况。 为此,Apple的钥匙串服务就是您的最佳选择。 since自从iOS SDK的第一个公开版本(iOS 2.0)以来,钥匙串服务就已经成为Apple安全框架的一部分。 与UserDefaults不同,钥匙串为您提供了一种安全的方式来在加密的数据库中存储密码,信用卡信息甚至便笺。 在我职业生涯的早期,由于苹果提供的API不友好,我被告知要使用框架包装Keychain Services。 尽管我当时对第三方框架提供的界面感到非常满意,但我还是想了解该平台提供的服务的来龙去脉。 您可以在下面阅读有关我的学习内容。 钥匙串服务包括两个主要部分:一个加密的数据库(由SecKeychain类表示)和插入到数据库中的项(由SecKeychainItem类表示)。 在iOS中,只有一个钥匙串存储(封装了您的iCloud钥匙串),除了CRUD操作之外,没有API可以创建或操作默认钥匙串。 钥匙串会自动同时与设备锁定和解锁,因此无法进行未经授权的访问。 另一方面,在Mac OS中,您可以创建和管理自己的钥匙串存储(安装时会创建4个:登录,iCloud,系统,系统根-您可以在钥匙串访问应用程序中对其进行浏览)。 SecKeychainItems是隐藏在Security框架内的不透明类型,由两部分组成: 数据和一组属性 ,这些属性有助于标识和存储元数据或控制对存储项的访问。 当将要插入新项目时,钥匙串服务首先加密数据,然后将其与公共属性包装在一起。 请参见下图。 由于SecKeychainItems处于隐藏状态,因此Apple提供了一组API以使用CFDictionary类型与钥匙串进行交互。 您可以添加,修改,删除和搜索特定的钥匙串项,甚至可以修改其访问控制。 这些是特殊类型的属性,用于定义如何处理钥匙串项目。 截至2018年,共有5种物品类别: 通用密码项目 互联网密码项目 证书项目 加密关键项目 身份项目 每个类都支持一组特殊的属性。 您可以通过单击上面提供的链接来检出它们。 Apple定义了一组键值对,以帮助您使用字典为键链项目设置属性。 这些键值项按上述钥匙串项类型分类: 常规项目属性键 密码属性键 证书属性密钥 加密密钥属性密钥 认证类型值 关键类别值 同步性值 还有很多 … 现在,为了帮助您更好地理解这一点,我将向您展示如何将Internet密码存储在钥匙串中。 观察到我将密码用作钥匙串项目的数据,并使用了另外三个属性来提供其他信息。 在我的示例中, kSecClass告诉我们要存储在钥匙串中的项目的类型, kSecAttrServer是服务器地址属性,特定于Internet密码类型的项目,而kSecAttrAccount拥有特定Internet服务的帐户。 一旦将数据安全地存储在钥匙串中,您就可以通过它们的属性来查询这些项目。 存储有关特定元素的足够信息将帮助您将搜索结果范围缩小到要查找的内容。 使用kSecAttrLabel,您还可以标记商品,以便以后更好地找到它。 让我们看看如何检索数据。 要更新或删除项目,可以使用更简单的查询,而无需让Keychain返回任何属性( kSecReturnAttributes , kSecReturnData […]

适用于iOS的OWASP:M1-平台使用不正确,第2部分

此故事描述了iOS开发人员如何应对OWASP Mobile Top 10 2016中的M1类别漏洞。该类别涵盖了平台功能的滥用或平台安全控件的使用失败。 在第2部分中,我们将介绍其他iOS功能,这些功能可能会错误地破坏应用程序的安全性。 缓存的应用程序快照 从iOS 7开始,系统会在您的应用程序进入后台时获取并缓存用户界面的屏幕截图。 屏幕截图以.ktx(iOS9)或.png(iOS10)格式存储在Library / Caches目录中(该目录未通过iTunes或iCloud备份): (App Folder)/Library/Caches/Snapshots/com.bundle.id.of.your.app/ 接口快照映像可以包含敏感数据。 为避免泄漏,请使用图像视图覆盖它,清除文本字段,隐藏标签等。使用applicationWillResignActive(_:) to hide information并使用applicationDidBecomeActive(_:) to restore original view 。 今日扩展缓存(仅适用于iOS10) 如果您的应用程序具有“今天”扩展名,则它将在/private/var/mobile/Containers/Data/PluginKitPlugin/具有UUID命名的目录 与应用程序的快照不同,Today扩展通过在/Library/Caches/com.bundle.id.of.your.app.with.widget.suffix/Cache.db缓存最后一个相关数据来保留其状态。 自动更正和安全的UITextField UITextField符合UITextInputTraits协议,该协议具有以下属性: var autocorrectionType: UITextAutocorrectionType文本对象是否跟踪未知单词并向用户建议更合适的替换候选对象。 为了学习新单词,来自具有自动更正功能的文本对象的所有文本都缓存在路径/User/Library/Keyboard/dynamic-text.dat中 var isSecureTextEntry: Bool判断文本对象是否应禁用文本复制,隐藏正在输入的文本并防止文本被缓存。 为了防止将诸如用户名和密码之类的敏感信息存储在dynamic-text.dat中,如果文本不可见,则将UITextFields设置为isSecureTextEntry状态,如果文本可见,则将autocorrectionType关闭。 副作用是,iOS尝试自动更正其名称不会使您的用户感到困惑。 相信我,那真的很痛。 粘贴板 在某些情况下,用户不希望在应用程序外部访问复制到粘贴板的文本。 iOS10和macOS Sierra甚至可以通过“ 通用剪贴板传递”功能彼此共享剪贴板的内容,这可能会将用户数据泄漏到(可能是受到破坏的)设备。 UIPasteboard类允许创建应用内粘贴板。 要从Handoff中排除纸板,请使用localOnly选项调用setItems(_:options:)方法。 网络缓存策略 通过URLSession加载的任何HTTP和HTTPS请求都将由URLCache处理,后者提供内存和磁盘缓存机制。 缓存数据库存储在Library / Caches目录中(该目录未通过iTunes或iCloud备份): (App Folder)/Library/Caches/com.bundle.id.of.your.app/Cache.db URLRequest实例通过将缓存策略设置为NSURLRequest.CachePolicy值之一来指定如何使用本地缓存: useProtocolCachePolicy-默认 […]

如何停止通过多任务泄漏信息

当我们谈论有关iOS应用程序的安全性时,我们通常会考虑诸如SSL证书,将信息安全地存储在钥匙串中之类的事情。 这一切都很好,而且我们现在如此广泛地关注是一件非常了不起的事情。 但是,有一个小的罪魁祸首是许多应用程序制造商似乎忽略了,我不怪他们。 我说的是操作系统内置的多任务处理功能。 那么,是什么使它成为罪魁祸首? 好吧,基本上,如果用户决定退出您的应用程序,则操作系统将为当前视图控制器的当前状态制作快照,并将其保存为应用程序的占位符。 但是,如果您刚离开的屏幕上有一些您不想离开应用程序的个人信息,该怎么办。 也许您正在使用银行应用程序,而同事或朋友借用您的电话,则他或他将能够阅读您上次使用该应用程序查看的部分信息。 听起来好像我过度夸大或出于非问题而提出了问题。 也许吧,也许不是。 我所知道的是,如果我使用存储个人或敏感信息的应用程序,则希望它保留在该应用程序内,而不会以任何方式,形状或形式泄漏。 因此,这就是我们为应用程序增加一些额外安全性所做的工作。 因为我们不确切知道哪个屏幕应该安全或哪个屏幕可以显示,所以我们采取了尝试保护整个应用程序的路径。 这就是我们所做的。 在构建iOS应用程序时,您需要提供一个应用程序委托。 此类具有在我们的应用程序的上下文更改时被调用的方法。 我们将使用应用程序委托监听的两种情况是: func applicationDidBecomeActive( _ application:UIApplication) func applicationWillResignActive( _ application:UIApplication) 您可能已经知道很多,即使您不知道。 您可能会猜测何时调用这些方法。 当我们的应用程序变为活动状态时,第一个被调用,而当用户离开我们的应用程序时,第二个将被调用。 因此,为了增加一点安全性,我们将使用模糊的视图简单地覆盖当前窗口,以免撬开的眼睛看不到屏幕上正在显示的内容。 使用模糊功能不是最安全的选择,但是暂时,我们只希望在有人借用电话时将可以直接访问电话的人拒之门外。 如果需要更高的安全性,则可以显示应用程序启动屏幕或猫的图片。 由你决定。 聊够了,让我们看一下代码。 请记住,仅添加一点点的安全性是不够的,您可能想要添加一个密码屏幕并执行通常执行的所有其他与安全性相关的任务。 这只是为了防止您的应用向iOS上的多任务功能泄漏信息。