Android静态安全检测 -> 初始化IvParameterSpec函数错误

初始化IvParameterSpec函数错误


一、API


1. 继承关系


【1】java.lang.Object

【2】javax.crypto.spec.IvParameterSpec


2. 主要方法


【1】构造方法:IvParameterSpec(byte[ ] iv)     返回初始化向量 iv(Initialization Vector)


【2】构造方法:IvParameterSpec(byte[ ] iv, int offset, int len)


【3】参考链接


https://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html


3. 示例


【1】iv的作用主要是用于产生密文的第一个block,以使最终生成的密文产生差异(明文相同的情况下),使密码攻击变得更为困难,除此之外iv并无其它用途,因此iv通过随机方式产生,是简便有效的途径




【2】参考链接


http://m.blog.csdn.net/article/details?id=52727918


二、触发条件


1. 定位IvParameterSpec初始化函数


【1】对应到smali语句中的特征

Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V


2. 判断方法中是否调用String.Bytes()方法


【1】对应到smali语句中的特征

Ljava/lang/String;->getBytes()[B


3. 判断方法中是否存在const-string v1, "1234"


【1】对应到smali语句中的特征

const-string.+, "[1-9]+"


三、漏洞原理


【1】使用固定初始化向量,结果密码文本可预测性会高得多,容易受到字典式攻击


【2】漏洞代码示例




【3】更多内容


http://wolfeye.baidu.com/blog/weak-encryption/


四、修复建议


【1】禁止使用常量初始化矢量参数构建IvParameterSpec


【2】建议IV通过随机方式产生




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章