Tag: 安全

如何保护iOS中的大数据文件?

策略是保护大文件,将文件数据分成小块并以随机顺序合并,因此文件将被破坏。 将这些随机顺序保存在安全的环境中 使用相同的随机顺序将文件分成多个块,并按原始顺序排列它们,以将原始文件转换为原始格式。 源代码。 在第一个例子中 我们使用了简单的加密和解密,因为它消耗了将近100%的cpu和无效的内存量。 在第二个例子中 我们使用了加密和解密文件的方式,这在内存消耗和CPU方面都给人留下了深刻的印象。 结果可以在左侧调试导航器中看到。 源代码。在模拟器中运行项目构建,如您所见,有两个按钮,此POC应用程序沙箱中的大文件将尝试对其进行加密和解密。 当我们点击加密按钮时,此操作将把大文件拆分为数据部分,然后将这些数据部分混洗并合并为一个文件。 保存这些改组顺序以使用加密算法保存环境。 如果任何人发现此文件,则损坏的文件将无法读取。 要以原始格式返回,请点击解密按钮。 动作时将按顺序重排,然后再次将此损坏的文件划分为相同的数据块,并按原始顺序合并它们以恢复原始顺序。 让我们检查一下源代码, –(IBAction)encryptFile:(UIButton *)sender { NSUInteger偏移量= 0; NSString * filepath = [[NSBundle mainBundle] pathForResource:LARGE_DATA_FILE ofType:LARGE_DATA_FILE_EXTENSION]; NSFileHandle * handle = [NSFileHandle fileHandleForReadingAtPath:filepath]; unsigned long long totolSize = [处理seekToEndOfFile]; NSUInteger chunkSize = 0; chunkSize =(NSUInteger)totolSize / 10; [handle seekToFileOffset:0]; NSData * data = […]

RememBear会为您记住所有密码

记得。 熊。 隧道熊。 得到它? 多年以来,我尝试了很多密码管理器-LastPass,Dashlane,1Password,Bitwarden,但是,我始终不虔诚地使用其中的任何一个。 但是,有了RememBear,我可以看到自己终于使用密码管理器作为习惯。 对于那些想知道是什么促使我写出积极构架的密码管理器评论的人,不,这不是付费评论。 RememBear是由TunnelBear(著名的已建立的VPN服务)的人员构建的。 该产品是跨平台的,适用于Android,Windows,macOS和iOS。 尽管目前不允许在应用程序内部(在Android上)截取屏幕截图,但我会尽全力在文字帮助下向您传达我的经验。 创建新帐户后,RememBear会要求您提供指纹印象(如果您的手机配备了指纹读取器/如果您使用的是带有指纹读取器的MacBookPro)以及自动填充密码的权限。 进入应用程序后,您会看到一个FAB按钮,可让您添加信用卡或登录详细信息。 您可以在此处添加所有用户名,密码和/或卡信息。 尽管该应用程序配备了专用的浏览器,恰当地命名为“ RememBear浏览器”,但是只要您在外部浏览器(例如Chrome Dev)上打开“登录”页面,就会显示一个浮动的RememBear按钮,您可以使用该按钮添加密码或自动填充密码。 通过RememBear应用程序中存在的设置,可以选择退出浏览器,选择退出使用“指纹登录”,更改电子邮件,甚至更改主密码。 在此阶段,该应用程序没有像某些已经建立的付费密码管理器那样的精美功能,例如,可以从密码管理器内部更改专用站点的密码的功能,但是嘿,这是一项绝对免费的服务。

让我们编写Swift代码来拦截SSL固定HTTPS请求

在iOS应用中检查HTTPS请求的一种流行方法是中间人 ( MITM )攻击。 此技术要求将一台机器用作客户端的代理服务器。 为此,客户端必须将代理服务器的证书安装到设备全局信任存储中。 通过这样做,客户端将证书列入白名单,因此允许与代理服务器进行HTTPS通信。 这是一个用于检查CNN iOS应用程序的mitmproxy的示例。 在此之前,我已经在设备上安装了代理服务器的证书。 可以在mitmproxy网站上找到说明 SSL证书固定 保护您的应用免受MITM侵害的一种方法是使用SSL证书固定。 这涉及将可信任服务器证书的副本打包到您的iOS应用程序中,以及一些其他代码,以确保该应用程序仅与使用该特定证书的服务器通信。 当SSL证书固定功能处于活动状态时,该应用程序将不允许任何请求发送到任何不受信任的服务器。 因此,由于请求不是通过安全网络通道发送的,因此MITM代理服务器将无法接收请求。 Twitter iOS应用将SSL证书固定作为安全功能,用于发送到https://api.twitter.com的请求。 像mitmproxy和Charles Proxy这样的MITM工具将无法检查任何Twitter api请求。 解决SSL证书固定问题的一种解决方案是尝试在通过安全HTTPS通道发送请求之前拦截请求。 此技术要求我们将代码植入应用程序中,以便我们可以直接访问要检查的URLRequest对象。 因此,让我们首先访问Apple的URL加载系统。 URLProtocol —苹果的URL加载系统 在Apple的URL加载系统中,定义了不同的URLProtocol来处理不同类型的URL。 这是创建我们自己的自定义URLProtocol子类的步骤。 1.每个URLProtocol子类别都应至少定义以下内容 嗯,我想我不喜欢某人的Tinder个人资料。 api请求“通过”某人。 您还将注意到,Tinder也向Facebook Api发送了请求。 这是因为Tinder在应用程序中嵌入了FacebookSDK并使用了登录功能。 遗憾的是,未在Tinder应用程序上启用SSL证书固定。 任何人都可以轻松使用MITM工具来检查所有请求。 因此,让我们找到另一个应用程序。 Twitter的API请求 如前所述,由于SSL证书固定,MITM工具将无法在控制台上看到任何api.twitter.com请求。 由于该应用引发验证错误并且不允许通过网络发送请求,因此尝试登录Twitter将会失败。 注入我们的框架并禁用我们的代理后,我们可以看到登录api请求“ /auth/1/xauth_password.json”,其中包括我们的ID和密码值(请参阅Slack频道消息中显示的第二行) )。 请注意,成功登录Twitter后,该应用程序崩溃,原因是该应用程序检测到我正在使用自己的开发配置文件对应用程序进行签名,并且该应用程序的签名与KeyChain安全性发生冲突。 这是一个微不足道的问题,但是对于这篇中等职位,我不希望在我们的主要主题之外进一步分享特定于应用程序的漏洞。 技术讲座2018 这是我于2018年5月30日在新加坡发表的iOS Dev Scout Meetup演讲。 最后,我展示了即使SSL固定处于活动状态时如何检查Twitter应用程序的HTTPS请求。 拦截网络请求– iOS Dev Scout […]

带有协议和keyPath()的更安全的Swift应用程序设置

协议+ #keyPath +计算属性=强大的用户设置💪 保持应用程序设置同步,持久化以及分配默认值可能会变得混乱。 UserDefaults是一种存储非敏感应用程序设置的好方法。 但是,由于其本质是键值结构,因此我们需要诉诸使用字符串存储数据的方法。 FL红旗! 这是一个等待发生的问题。 简单的拼写错误可能会导致我们访问无效值,或者无法正确更新值。 使UserDefaults更安全👷 Swift 3及更高版本配备了出色的#keyPath()表达式。 这可以使我们避免以类型安全的方式在UserDefaults中使用字符串。 #keyPath()仍使用Objective-C运行时,并将解析为其引用的路径的字符串。 因此,密钥需要通过@objc装饰器公开给Objective-C。 将密钥包装在协议中可以使我们公开整个协议并干净地访问它们: 越来越好… 好。 所以这可行。 目前可能看起来有些令人费解,但是使用协议将使我们可以为下一步使用一个干净的接口。 添加计算属性 “正在计算…” –🤖 使用此约定,我们可以让协议定义我们的设置,无论它们是Bools,String还是其他。 然后,我们可以创建一个符合协议的对象AppSettings ,并使用计算的属性,可以安全地直接从UserDefaults设置和获取变量! 编译器还将强制执行协议,以确保您不会忘记实现所有设置! 👍 哦,看起来很好 我们的设置现在真的开始变得生动起来了。 您还将注意到,如果UserDefaults中不存在,我们的useAmbientLight变量将被设置为false -这是我们可以为每个设置指定默认值的方式! 设置可以轻松检索! 十分简单。 更深入 大! 我们有一种方法可以轻松安全地存储,设置和检索变量。 但是其他类型,例如字符串呢? 如果您有很多设置怎么办? 破坏我们的协议并使用扩展可以帮助清理我们的课程。 使用上面编写的value(for key:)函数,我们可以轻松获取任何其他UserDefault支持的对象(如String),甚至是Optionals的设置! 完整的例子 包起来 #keyPath,协议和计算属性的组合是为您的Swift应用程序中的设置提供强大功能的强大功能组合。 添加设置就像将其添加到现有协议或创建新协议一样容易。 如果您忘记实现一个,编译器甚至会警告您。 希望这种有趣的实现设置的方式在您的应用中同样有用useful。

iOS App安全性-3

现在在子菜单中打开“拦截”选项卡并启用拦截。 为什么? 通常,如果您只想听http请求,则不必这样做。 但是既然我想弄各种各样的东西。 我们必须以某种方式进行中间人入侵。 好。 我们现在准备好了。 下一步是准备我们的iPhone。 打开您的wifi设置并添加HTTP PRoxy。 这必须是您在Burp中设置的监听器IP和端口。 让我们做最后一步,向iPhone添加证书。 您可以按照portswigger网站上提供的说明进行操作: 在…中安装Burp的CA证书 在计算机上运行Burp的情况下,在iOS设备浏览器中访问http:// burp,然后单击“ CA证书”链接… support.portswigger.net 现在,让我们玩得开心。 我试图检查谷歌地图,以查看所有的流量。 因此,下次您设计REST api时,请考虑一下,也许有人可以从中获取信息。

iOS应用程序的请求和响应

介绍 我们都准备从监视和分析应用程序与服务器之间的通信开始。 在完成流量分析的设置之后,我们将不再等待开始。 请参阅上一篇文章,以获取有关设置Burp Suite的帮助。 关于HTTP的简介 HTTP是Internet的语言。 正如我们与人交流一样,iOS应用程序也与应用程序服务器进行交流。 一个简单的区别是,一个人只能提出问题(请求),而另一个人只能回答那些问题(请求)。 所有这些通信都必须使用共同商定的语言(HTTP)进行。 让我们直接了解我们所要求和回应的意思。 资料来源: http : //www.steves-internet-guide.com/http-basics/ 上图显示了应用程序发送到服务器的HTTP请求的典型格式以及作为响应收到的响应。 响应由应用程序分析,必要的行为会在UI上向用户显示内容。 要了解有关HTTP基础知识的信息,请参阅 http://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html。 移动应用程序的典型工作流程 这些天,其他所有移动应用程序都遵循如下所述的工作流程: 登录前屏幕 —这些信息可能包括诸如搜索页面,关于页面,联系页面,注册页面等信息。 登录屏幕 -应用程序可以向用户提供任何数量或类型的登录过程。 最常见的登录过程使用手机号码,电子邮件地址或用户ID,并将其与单点登录密码,OTP或任何其他参数结合在一起以标识用户。 应用程序功能 -包括应用程序为其最终用户提供的主要功能。 它可能涉及交易,社交网络,电子商务等。 注销功能 -应用程序还可以提供可选的注销或类似功能,以结束用户在移动设备上的会话。 恢复功能 -此功能对于开发人员也是可选的。 它可能被标记为忘记密码或任何其他类似的名称。 识别请求和响应参数 一旦了解了目标应用程序的工作流程,我们就可以推动自己揭开应用程序工作流程背后的秘密。 “秘密”是指使功能成为可能的请求的输入和输出。 用技术术语来说,这些“秘密”被称为参数。 因此,我们有请求参数和响应参数。 典型的请求参数可能是以下之一: PATH参数 :它们出现在URL本身中。 考虑下面的请求行。 GET / api / profile / users / 2 HTTP / 1.1 […]

iOS App安全性-4

现在让我们进入app: cycript -p processNumber(对我来说是405) 让我们开始乐趣吧。 现在,您可以使用Objc + JScripts命令。 我将尝试打印键盘窗口的所有子视图。 您可以访问Cycript网站阅读手册。 [[[[UIWindow keyWindow] rootViewController] _printHierarchy] 所以只是为了好玩,我想将徽章添加到礼物标签栏项。 在列表中,我找到标签栏。 为了保持tabbarcontroller的存在,我定义了一个变量 var tabbarController =新实例( 0x15fc1c00) 现在我尝试找到标签栏 [[tabbarController视图]子视图] var tabbar =新实例( 0x1602f980 ) var gift = tabbar.items [3] gift.badgeValue = @“ 10” 这仅仅是个开始。 学习类转储和使用逆向工程工具将为我们带来更多乐趣。

Samsung Health:帐户同步和备份

在Samsung Health的初始设置过程中,很多人倾向于跳过整个帐户登录过程。 虽然这不会影响应用程序的日常使用,但从长远来看,不登录三星帐户肯定会产生一些影响。 假设您已经使用Samsung Health数周了; 登录您的锻炼,每日步数,睡眠时间,计划的食物摄入量。 您正在领导一种均衡,健康的生活方式,该应用程序可帮助您跟踪一切并提供宝贵的见解。 然后一个晴朗的早晨,您醒来看到您的设备无法打开…? 恐惧在意识到您的保险可能会覆盖它之前就设置了i0n。 您起床,度过一天,从服务中心修好手机,并开始进行常规锻炼,您会意识到以前的所有数据都已耗尽,所有进度都丢失了。 手机受影响的任何情况都可能导致数据丢失。 即使在应用程序中进行了重大更新,无论多么不可能,都可能导致所有数据重置。 对于大多数用户而言,这只是个小麻烦。 对于某些用户,尤其是那些正在努力实现体重或运动目标并依赖于应用程序来监控其热量摄入或活动数据的人们,数据丢失可能会产生影响,并可能严重影响其决心和动力。 如果您现在只是后悔跳过该帐户登录,请不要担心; 事情还没有丢失。 您仍然可以登录到三星帐户,所有当前数据将立即同步并备份。 您可以通过两种方式登录: 方法一: 转到Samsung Health应用中的“ 更多”选项卡 2.点击设置 3.在常规选项卡下,您将找到三星帐户 4.这将引导您进入Samsung Domain; 在这里,输入您的电子邮件 (或电话号码)和P 密码 。 5.选中记住我的密码框 6.点击登录 7. Voila,就这样,您将登录到 三星账户 方法二: 点击右上角的“个人资料” 2. 我的页面标签将打开,其中详细说明了您的所有个人信息 3.点击添加帐户 4.重复方法一中的 步骤4–6 。 现在,如果您认为您的所有工作都已完成,那么您将完成一半。 您已经看到,既然您已登录三星帐户,则必须确保数据与云同步。 为了确保所有数据都将被备份到您的三星帐户中,您必须按照以下两种方法的步骤1-3进入帐户设置。 在这里,只需点击立即同步,即可将手机上的所有数据与服务器同步 ,然后启用自动同步 ,以免将来丢失数据。 您可以在这里轻松而又轻松地确保所有健康和活动数据得到安全可靠的备份。 作为一项额外的奖励,确保您已登录三星帐户也将使您能够快速发送错误报告,分享任何疑虑并从应用程序中提出任何问题,请与我们联系。

保护iOS应用程序

我们喜欢开发使用户满意并花费大量时间来计划UI / UX,功能,提高性能的iOS应用程序。 但是在大多数情况下,安全性和隐私是一个经常被忽视的方面。 通过本文,我想强调一些要点,这些要点可以解决应用程序中最常见的漏洞。 免责声明 :这里提到的这些点绝不是详尽的。 还有许多其他方法可以保护应用程序安全。 在给定的时间和资源的情况下,可能会忽略上述要点。 保存数据: 收集所有保存在应用程序中的数据的详细信息。 重新考虑保存数据的需求。 在某些情况下,我们需要处理数据并仅存储结果,而不存储实际信息。 关键审查领域: 使用钥匙串 :这是Apple提供的用于保存敏感数据的安全容器。 但是,如果设备遭到破坏(越狱),则可以将项目转储到钥匙串中,从而使存储的数据可见。 因此,存储在钥匙串中的数据也必须进行加密。 此外,请继续阅读。 数据存储 :如果在应用程序中使用SQL Lite或Core Data来存储数据,请考虑使用诸如SQL Cipher或Encrypted Core Data之类的解决方案对其进行加密。 必须对加密和解密所需的密钥进行管理,例如,可以将其保存在钥匙串中,也可以对其进行混淆。 使用可靠加密技术的应用程序有义务遵守App Store中的发行规定。 代码中的机密字符串 :避免在代码库中为机密密钥,用于Web服务的Eg API密钥,社交平台令牌等使用纯文本字符串。使用混淆处理可以隐藏这些文本,以免对应用程序二进制文件进行逆向工程显示。 此外,请继续阅读。 在应用程序中创建的文件 :使用NSFileManager API的NSFileProtectionComplete键。 在Xcode中启用数据保护功能。 此外,请继续阅读。 无论如何,都不应该使用NSUserDefaults来存储任何机密信息。 保护传输中的数据: 几乎每个移动应用程序都通过网络进行通信以提供丰富的用户体验。 Apple通过设置默认值来强制通过HTTPS通过网络进行所有通信,从而推动了通过网络安全传输数据的要求。 强烈建议不要在info.plist中禁用此功能。 安全API :所有API均应使用HTTPS和基于标准AES 256的加密。 让我们加密是一个免费的证书颁发机构,可以帮助您免费切换到HTTPS。 此外,每个API都需要在需要时进行标识,认证和授权。 证书固定 :我们使用SSL固定的目的是确保应用仅与指定的服务器通信,并防止基于MITM的攻击。 可以通过在应用程序包中保存目标服务器的SSL证书来完成。 在会话配置中定义固定证书时使用此证书。 诸如AFNetworking,Alamofire之类的第三方框架使此操作变得容易。 此外,请继续阅读。 用户身份验证/登录 […]

移动应用程序的密钥管理方法

你们中的一些人知道,而有些人却不知道,但是我们所有人都无法构建安全的移动应用程序。 今天我们将讨论密钥管理。 我们一步一步地开始我们的旅程:发现基础结构布局,挖掘威胁,信任和密钥的想法。 讨论密钥管理系统:什么是密钥生成,如何访问和撤销密钥以及许多其他令人兴奋的理论知识! 但是,当然,我们会将这些知识应用于移动应用程序。 看视频 通常,我们在服务器,移动设备,通过公共渠道传输的数据等方面建立信任。 我的意思是真实的东西。 像电缆之类的东西。 是的,我们的基础架构充满了密钥和数据,所有这些都通过电缆实现。 这些电缆很重要-它们不受您的控制,无论您到达办公室外的任何地方-您都依赖这些生物。 为什么我们需要信任? –为了保护这些电缆中的数据,邪恶的CIA和坏蛋饼干正在那里寻找您的秘密。 通过使用特殊的超级数学技术,我们为与受信任的密钥或机密绑定的受保护数据提供了机密性,真实性和完整性保证。 如果您正确地管理密钥,这是可证明的且不可破解的。 由于“密钥是我们信任的东西”,并且它们控制着系统中的信任,因此管理密钥就是管理信任。 因此,让我们谈谈密钥管理。 按键 –什么是钥匙? –这是一个字节数组。 根据正在进行的过程,我们需要具有不同属性的不同字节数组: 1.我们对对称密码使用秘密密钥。 2.非对称密码的公钥/私钥对 3.密码是您可以记住的字符串。 顺便说一句,这是一个糟糕的钥匙。 我们应该使用KDF代替用户密码本身。 4.一次性PIN很小,并且易于转移具有风险属性的密钥。 这是一个额外的信任令牌,就像您在登录银行系统时通过短信从银行获得的东西。 –我们在闪亮的iOS世界中知道哪些键? 应用令牌,服务器令牌,用户密码,证书,以及类似的东西,不是吗? 它们都是钥匙。 –我们需要它们做什么? 按键保护数据! 它们使您可以访问数据,验证数据的真实性和完整性。 当然,大多数情况下,我们会处理用户将其放入应用程序中的用户生成的数据。 但是,我们还关心访问外部资源(例如第三方服务或Web服务器)以及我们应用中其他用户的可识别数据(例如,来自喜欢您的推文的用户的信息,如果有的话)。 –我们如何保护数据? 哦,您知道,我们能够也无法应对所有这些威胁。 就像数据篡改和泄漏一样,中间人,主动和被动,当然还有橡胶软管密码分析之类的常见问题。 密钥是存储在某处的字节数组,它们解锁受保护的数据并促进信任。 当然,攻击者想要它们。 基本上,密钥是一小部分数据,它们也容易受到威胁。 密钥是一小部分数据,也应该受到保护! 按键会发生什么? 1.攻击者可以窃取密钥,这很糟糕(原因显而易见,不是吗?)。 2.更糟糕的是,被盗的密钥可以重播 -可以用来访问受保护的内容。 3.而且,如果攻击者足够幸运,而您却不是,那么甚至可以替换密钥:攻击者可以抛出自己的邪恶密钥来访问资源。 因此,我们需要构建一个保护和管理密钥的系统。 关键管理系统:目标和行动 在密钥管理中,有一个实际目标:保留信任和安全性,但系统仍然可用。 如果不这样做,您将得到另一个没人愿意使用的超安全超偏执端到端系统system 任何密钥管理系统都包含多个过程,这些过程按顺序链接:从生成到交换,从交换到存储和访问,通过吊销来控制受害和过时的密钥,以及旋转以确保密钥的寿命。 有时,该系统也应包含服务流程:例如备份和对加密数据的管理员访问。 产生与交流 […]