来自哥伦比亚大学的研究人员开发了一个定制化的工具——CRYLOGGER,可以动态分析安卓应用程序,确定是否安全地运行了加密代码。研究人员用CRYLOGGER工具对33个应用商店中最流行的1780个安卓应用进行了测试,并在其中306个应用中发现了安全漏洞。
CRYLOGGER工具
CRYLOGGER工具包含logger和checker 2部分,其中logger扩展了加密库来追踪对加密算法的API 调用;对于每个调用,都会记录相关的参数并用于检查加密规则。Logger会保存应用选择用于消息摘要(SHA1)和对称加密(AES)的算法名。应用执行后,checker会线下检查log信息,并生成应用违反加密规则的列表。为了检查这些规则,checker 使用了一个检查的步骤,每个步骤中都包含许多的加密规则。
CRYLOGGER工具
在CRYLOGGER工具中共定义了26个基本的加密规则,如下所示:
· 规则1:不使用已被攻破的哈希函数,比如SHA1、MD2、MD5等;
· 规则2:不使用已被攻破的加密函数,比如RC2、DES、IDEA等;
· 规则3:在大于1个数据块的情况下不适用ECB模式;
· 规则4:在C/S场景下不适用CBC模式;
· 规则5:加密时不使用静态(常数、不变的)密钥;
· 规则6:加密时不使用易推导的密钥;
· 规则7:加密时不使用静态(常数、不变的)初始向量;
· 规则8:加密时不使用易推导的初始向量;
· 规则9:不重用初始向量和密钥对;
· 规则10:密钥推导时不使用静态(常数、不变的)盐;
· 规则11:密钥推导时不使用小于64位的盐;
· 规则12:不重用盐于不同目的;
· 规则13:密钥推导时循环不小于1000轮;
· 规则14:不使用弱口令;
· 规则15:不使用NIST 拉黑的口令;
· 规则16:不多次重用口令;
· 规则17:不为PRNG使用静态seed;
· 规则18:不使用不安全的PRNG,比如java.util.Random;
· 规则19:RSA 密钥不小于2048位;
· 规则20:不直接使用RSA 原始算法;
· 规则21:不使用PKCS1-V1.5;
· 规则22:不死用HTTP URL连接,使用HTTPS;
· 规则23:不存储静态密码;
· 规则24:不以复杂的方式在SSL中验证host name;
· 规则25:不以复杂的方式在SSL中验证证书;
· 规则26:不手动修改hostname 验证。
测试结果
研究人员利用该工具对33个应用商店中最流行的1780个安卓应用进行了测试,发现其中306个应用中存在违反以上加密规则的情况,其中部分app违反了1条规则,部分app 违反了多条。
违反最多的3条规则是:
· 规则18:有1775个app违反该规则;
· 规则1:有1764个app违反该规则;
· 规则4:有1076个app违反该规则。
开发者回应
研究人员对测试发现问题的app逐一联系了开发者,但只有18位开发者回复了研究人员的邮件,只有8位开发者与研究人员进行了多次沟通。
由于这些加密漏洞是存在于应用代码中,一些常见的漏洞存在于Java库中。因此,研究人员联系了6个主流的安卓库开发者,但只收到了2位开发者的回复。
由于没有开发者修复有漏洞的app和库,因此,研究人员暂不公开相关app和库的名字。
该研究成果已被安全顶会IEEE SP 2021录用,论文下载地址:
https://www.computer.org/csdl/pds/api/csdl/proceedings/download-article/1mbmHwIxTb2/pdf
工具也已开源,参见GitHub地址:https://github.com/lucapiccolboni/crylogger
本文翻译自:https://www.zdnet.com/article/academics-find-crypto-bugs-in-306-popular-android-apps-none-get-patched/如若转载,请注明原文地址: