解决风险代码:System Information Leak
Abstract
揭示系统数据或调试信息可帮助攻击者了解系统并制定攻击计划
Explanation
当系统数据或调试信息通过输出流或者日志功能流出程序时,就会发生信息泄漏。 示例 1: 以下代码会将一
个异常写入标准错误流:
try {
…
} catch (Exception e) {
e.printStackTrace();
}
依据这一系统配置,该信息可转储到控制台,写入日志文件,或者显示给远程用户。例如,凭借脚本机制,
可以轻松将输出信息从“标准错误”或“标准输出”重定向至文件或其他程序。或者,运行程序的系统可能具有将
日志发送至远程设备的远程日志记录系统,例如“syslog”服务器。在开发过程中,您无法知道此信息最终可能
显示的位置。 在某些情况下,该错误消息会告诉攻击者该系统易遭受的确切攻击类型。例如,数据库错误消
息可以揭示应用程序容易受到 SQL Injection 攻击。其他错误消息可以揭示有关该系统的更多间接线索。在
Example 1 中,泄露的信息可能会暗示有关操作系统类型、系统上安装了哪些应用程序以及管理员在配置程
序时采取了哪些保护措施的信息。 这是另一种情况,特定于移动世界。大多数移动设备现在执行的是“近场通
信”(NFC) 协议,以便使用无线电通信在设备之间快速共享信息。它在设备极为贴近或互相接触时有效。即使
NFC 的通信范围仅局限于几厘米,也可能发生窃听、修改数据以及各种其他类型的攻击情况,因为 NFC 本
身并不能确保通信安全。 示例 2: Android 平台提供对 NFC 的支持。以下代码将创建一条消息,该消息会被
发送给所在范围内的其他设备。
…
public static final String TAG = “NfcActivity”;
private static final String DATA_SPLITTER = “:DATA:”;
private static final String MIME_TYPE = “application/my.applications.mimetype”;
…
public NdefMessage createNdefMessage(NfcEvent event) {
TelephonyManager tm =
(TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
String VERSION = tm.getDeviceSoftwareVersion();
String text = TAG + DATA_SPLITTER + VERSION;
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
return msg;
}
…
NFC 数据交换格式 (NDEF) 消息包含类型化数据、 URI 或自定义应用程序有效负载。如果该消息包含与应用
程序有关的信息(如其名称、 MIME 类型或设备软件版本),则此信息可能会泄露给窃听者。在Example 2
中, Fortify Static Code Analyzer( Fortify 静态代码分析器)会在返回语句中报告 System Information Leak
漏洞。
Recommendation
编写错误消息时,始终要牢记安全性。在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消
息。 限制生成与存储繁复的输出数据可帮助管理员和程序员诊断问题。调试踪迹有时可能出现在不明显的位
置(例如,嵌入在错误页 HTML 的注释中)。 即便是并未揭示栈踪迹或数据库转储的简短错误消息,也有可
能帮助攻击者发起攻击。例如, “Access Denied”(拒绝访问)消息可以揭示系统中存在一个文件或用户。 如
果您担心 Android 设备上的系统数据会通过 NFC 泄露,那么您可以采取以下三种措施之一。不要将系统数据
包括在发送到范围内其他设备的消息中,或加密消息负载,或在更高层中建立安全通信通道
示例1
未处理前产生的问题
解决后如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!