一句话:提出 OTP-Lint 工具,在无源码条件下评估 Android 应用 SMS OTP 的伪随机数生成,并发现大量可预测 OTP 漏洞。
SMS 一次性密码(OTP)的安全性依赖每次登录生成不可预测的伪随机数,但 Android 应用常将伪随机数生成器(PRNG)放在服务端,源码不可见,难以审计。本文提出 OTP-Lint:通过逆向工程识别使用 SMS OTP 的应用,自动触发登录流程获取 OTP 值,并评估其随机性以发现脆弱 PRNG。作者对 Google Play 和腾讯应用宝的 6,431 个商业 Android 应用进行大规模分析,识别出 399 个生成可预测 OTP 的脆弱应用;其中 194 个仅依赖 SMS OTP 且无额外安全机制,因而易受猜测和重放攻击。该工作揭示了移动认证中随机数实现缺陷的普遍性与风险。
A fundamental premise of SMS One-Time Password (OTP) is that the used pseudo-random numbers (PRNs) are uniquely unpredictable for each login session. Hence, the process of generating PRNs is the most critical step in the OTP authentication. An improper implementation of the pseudo-random number generator (PRNG) will result in predictable or even static OTP values, making them vulnerable to potential attacks. In this paper, we present a vulnerability study against PRNGs implemented for Android apps. A key challenge is that PRNGs are typically implemented on the server-side, and thus the source code is not accessible. To resolve this issue, we build an analysis tool, OTP-Lint, to assess implementations of the PRNGs in an automated manner without the source code requirement. Through reverse engineering, OTP-Lint identifies the apps using SMS OTP and triggers each app's login functionality to retrieve OTP values. It further assesses the randomness of the OTP values to identify vulnerable PRNGs. By analyzing 6,431 commercially used Android apps downloaded from Google Play and Tencent Myapp, OTP-Lint identified 399 vulnerable apps that generate predictable OTP values. Even worse, 194 vulnerable apps use the OTP authentication alone without any additional security mechanisms, leading to insecure authentication against guessing attacks and replay attacks.
DOI 原文 · arXiv · PDF(开放获取) · DBLP
@inproceedings{MaLKBNO021,
title = {Fine with “1234”? An Analysis of SMS One-Time Password Randomness in Android Apps},
author = {Siqi Ma and Juanru Li and Hyoungshick Kim and Elisa Bertino and Surya Nepal and Diethelm Ostry and Cong Sun},
booktitle = {ICSE},
year = {2021},
doi = {10.1109/icse43902.2021.00148}
}