期末选题3已做app安全性分析实验.docx
《期末选题3已做app安全性分析实验.docx》由会员分享,可在线阅读,更多相关《期末选题3已做app安全性分析实验.docx(15页珍藏版)》请在冰豆网上搜索。
期末选题3已做app安全性分析实验
1.
实验报告如有雷同,雷同各方当次实验成绩均以0分计。
2.当次小组成员成绩只计学号、姓名登录在下表中的。
3.在规定时间内未上交实验报告的,不得以其他方式补交,当次成绩按0分计。
4.实验报告文件以PDF格式提交。
院系
班级
组长
学号
学生
实验分工
秦睿哲
实验原理理解,实验App编写,实验报告写作。
期末选题3app安全性分析实验
【实验题目】
自行编写一个app,该app具有用户/口令登录功能,并可供使用者注册。
注册时口令只作长度限制(如8位长度),但强度暂不作要求。
用户名/口令保存在手机上,口令保存时作加密处理(自行选择加密算法)。
为简单起见,该app功能比较简单,界面上有一链接,链接到“本科教务系统”上,可点击退出。
通过在手机上运行此app,注册若干个账号,口令设置时有强口令,也有弱口令,然后分析其安全性。
【问题分析】
实验需要解决的问题有:
1.用户隐私
∙检查是否在本地保存用户密码,无论加密与否
∙检查敏感的隐私信息,如聊天记录、关系链、银行账号等是否进行加密
∙检查是否将系统文件、配置文件明文保存在外部设备上
∙部分需要存储到外部设备的信息,需要每次使用前都判断信息是否被篡改
2.文件权限
∙检查App所在的目录,其权限必须为不允许其他组成员读写
3.网络通讯
∙检查敏感信息在网络传输中是否做了加密处理,重要数据要采用TLS或者SSL
4.运行时解释保护
∙对于嵌有解释器的软件,检查是否存在XSS、SQL注入漏洞
∙使用webiew的App,检查是否存在URL欺骗漏洞
5.Android组件权限保护
∙禁止App内部组件被任意第三方程序调用。
∙若需要供外部调用的组件,应检查对调用者是否做了签名限制
【实验内容】
1)腾讯有一个自动化测试app的工具WeTest,上传app就可以直接对app进行安全测试,可以扫描出一部分安全问题。
将设计调试好的app到该平台进行测试。
2)分析测试结果,重新将源代码加固,如强、弱口令安全性上的区别。
3)重新到WeTest平台上测试app。
4)将app安装到手机上使用,测试“问题分析”中所列的问题。
【实验要求】
(1)运用综合知识完成实验(抓包、截图、协议分析、命令等等),注意叙述的条理性。
编写思路:
本次实验要求自行编写app,可以有注册功能并且对注册的信息进行加密处理。
由于本次需要处理的信息较为简单(账号和密码),因此可以使用比较简单的键值对(SharedPerference)来存储账号和密码信息。
本次app设计思路为首先让用户自行设计密码,在用户确认的密码和首次输入的密码相匹配之后,使用加密算法对密码进行加密处理,并且同时对用户账号(根据注册先后进行编号)进行加密存储入SharedPerference中。
之后用户输入的密码将会在加密处理后和数据库中加密后密码进行匹配,当匹配成功后,界面成功跳转至中山大学本科教务系统官方网页。
App设计基本流程框架
使用软件:
AndroidStudio(API:
27SDKPlatform:
26.0.0)
测试移动端:
小米mix2s
为了达成app的安全性和保密性,SharedPerference属性设定为PRIVATE模式,初始界面设定为两种(如果是第一次使用app,将会进入注册界面。
当已经注册之后,便会进入登陆界面,无需再进行注册)。
针对界面中的按钮进行设置说明:
OK按钮表示将信息进行输入匹配,而CLEAR按钮表示将输入的信息全部删除,在AndroidStudio中编写如下:
关于OK按钮的编写
关于CLEAR按钮的编写
若用户第二次输入的密码和第一次输入的密码匹配成功,则密码被记为有效,对密码进行加密处理,
加密算法使用MD5加密方法:
知识原理:
MD5的全称是Message-DigestAlgorithm5为信息摘要算法的一种,通过将大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,使用的基础是获得一个随机长度的信息并产生一个128位的信息摘要。
虽然这些算法的结构或多或少有些相似,但MD5的设计与前代完全不同,因为MD5面向的是32bit或64bit的电脑。
建立在更高强度的运算能力上,编码也会因此变得更为复杂。
MD5的原理为首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数,填充方法是附一个1在消息之后,后接所要求的多个0,然后在其后附上64位的消息长度。
这两步的作用是使消息长度恰好是512的倍数,同时确保不同的消息在填充后不相同。
在初始化连接变量后进行算法的主循环,循环次数是消息中512位消息分组的数目,主循环进行四轮,分别对四个连接变量进行操作,最后将结果相加并向右环移一个不定的位数,作为加密后结果。
MD5加密算法数学推导
首先编写MD5加密函数:
之后将匹配成功密码进行以上函数加密,并存入SharedPerference。
由于作为工程作业,设计了一个有效即时观察SharedPerferences中存储的加密密码端口,在密码匹配成功后将作为Toast提示信息输出加密信息。
当用户登陆成功后,界面跳转向中山大学本科教务系统,网站的容载通过AndroidStudio中包含的webview方法来达成:
定义webview并设置其基本性质
对Leave_Button进行设置,设计为当点击按钮将退出整个程序:
至此主要代码编写部分叙述完毕。
软件检测:
在和同学分析讨论后,我们使用了XX提供的自动化app测试工具,并对安全问题进行了深度扫描,初始扫描结果如下:
根据上述要求在代码中重新加入release中的签名部分,app初始设定中不可修改部分并将webview中多余端口删除,进行了之后的多次测试。
最终得出结果:
对代码进行的修改部分
问题分析:
根据AndroidStudio自带的ADB模拟器和AndroidDeviceMonitor,我通过使用PowerShell中对模拟器进行adbshell,相当于对手机进行root处理成功解除权限,可以看到手机中的信息,在data/data/com.Roger.application2/shar_pref中:
通过以上在外部设备找到的信息可以看出:
1)信息的确在本地被保存了。
2)信息经过了加密。
3)系统文件和配置文件都被明文的保存在了外部文件上,包括授权签名。
4)在多次打开app即登陆后再次进入后台数据库,发现数据没有被改动,较为安全。
根据检验报告已经得出此问题,首先通过在AndroidStudio中Manifest中对只读性进行了修正:
并且对于核心数据库SharedPerference的性质描述也使用了PRIVATE模式:
之前在未进行adbshell操作时,AndroidDeviceMonitor给出的关于data权限如图:
可以看出对于执行者本身拥有着读写权限,但是对于其他用户只有执行权限(x),没有读写权限(rw)符合要求,其他组成员没有读写权力。
通过以上SharedPerference数据内容可以看出:
对于重要的密码Encrypt已经进行了加密处理,由于本app使用建立在密码加密在本地执行,没有使用到网络层和传输层,因此以web作为主要平台进行工作的TLS和SSL不适合作为本次加密工具,我们通过解释并使用上述的MD5加密方式对用户输入的密码进行了加密处理,效果良好。
强弱口令安全性分析:
在本次实验中,对于密码的设置,采取了复杂程度渐进的方式进行设置,由单一成分,到单一成分复杂,到多成分,到多成分复杂。
并对加密结果进行了分析,得出结论如下:
在难度逐渐提升中,加密结果的位数会逐渐提升,可以看出在最简单的密码时,加密位数最少,变化最低易于破解,在逐渐提升密码复杂度后加密结果位数也变得越来越长。
通过对加密结果的分析,我们组给出的结论是:
加密的优先级是根据密码位数、数字、字母、符号的顺序进行加密。
密码位数多的不论复杂与否加密长度一定最长,同长度密码中数字比例最大的加密长度较长,字母其次,符号最短。
MD5根据以上推理出的优先级的关系进行加密运算,保护了个人隐私信息的安全。
在本次实验中,我们在自动检测软件中发现了对应的问题,并在Manifest中给了解决方法,即添加android:
allowBackup=”false”和android:
debuggable=”false”两句性质说明,让程序不可修改且只读,防止了注入漏洞,最后一次安全性检验也得以通过。
在我们使用webview时,也出现了对应URL欺骗漏洞的报警,我们根据提示把webview中多余的端口全部删除,并去除了默认的URL更改授权,让恶意URL不能通过URL欺骗用户更改基本信息,消除了漏洞。
在本次实验中,在webview中进行了对浏览器授权的解除,即使用webview时进行点击不会跳转到浏览器中。
并且本次实验使用release模式进行APK的生成,对本程序自身进行了签名限制,并在对应端口中设定为所有需要调用者都必须进行签名的查看才能使用的限制:
至此实验内容部分全部说明完毕。
(2)实验体会与感想。
本次实验在于通过以创建app为基础探索用户账号安全性及改善。
核心在于匹配密码后进行加密处置并存入数据库。
由于本次仅仅对帐号密码进行处理,数据处理量级比较小,我使用了SharedPerference进行数据的保存。
关于显示本科教务系统网页,通过一段时间的自学webview也可以满足实验的要求。
在本次实验的过程中,我们对当前许多的加密算法历史和推演过程进行了了解,对比较热门新式的加密算法进行了自学。
在大概理解其数学含义或逻辑编译原理后进行代码的编写。
能够满足实验的需求。
在本次实验中使用到了之前没有使用过的,通过腾讯或XX自动化进行app安全性的考量,这次进行了尝试,按照测试结果进行多次迭代改正最后达到了一个比较好的结果,过程非常的有趣,体会了当前科技的先进。
并在本次实验中,出现了许多之前通过AndroidStudio编写程序时没有考虑或忽略的问题,比如签名授权,防止其他人对文件进行篡改,私人化数据结构等,这次这些问题才是重中之重,因此在针对性的进行了编写后,之前苦恼许久的华为手机未授权软件不许安装的窘况竟也消失了。
这也让我们感受到了作为一个程序,一个app,安全性永远在功能性之上,只有满足安全性的考虑。
我们才有基础,才有空间进行功能性的考虑。
本次实验按照要求进行讨论学习,针对所给出的实验内同和实验分析进行了逐条的理解实现,算是一次比较充实的实验精力,学习到了许多知识。
了解了安全性的绝对重要性,并在之后的学习中加大对程序安全性的考虑,这或许也是这门课给我最大的,恒久的教导。
(3)参考文献。
[1]利用adb修改设备中SharedPerference配置文件:
---liuwons
[2]关于Fragment设置与aboutOnErrorfalse
---王世晖
[3]android如何创建配置文件和读配置文件
---louyxlovess
[4]AndroidWebView的一些使用总结和遇到过的坑
---小马快跑
[5]快速集成Android最常用加密算法
---Songlcy
[6]SharedPreferences存储和读取数据
---Ancy贝贝
[7]关于跨程序读取程序的SharedPreferences
---tianshi4851
[8]AndroidWebView的基本使用
---安辉就是我
【交实验报告】
上传实验报告:
ftp:
//222.200.180.109/截止日期(不迟于):
第18周之前完成
上传小组实验报告。
上传文件名格式:
小组号_防火墙管理实验.pdf(由组长负责上传)
例如:
文件名“6_网络攻击分析实验.pdf”表示第6组的网络攻击分析实验报告