浏览器的自动填充功能真的安全吗?我看未必!

12人阅读 评论(0) 收藏 举报
分类:

浏览器的自动填充功能真的安全吗?我看未必!在今天这个“芯片当道”的时代,信用卡数据被盗事件的发生概率也一直在上升,因为攻击者可以利用各种各样的方法来窃取信用卡数据,而一块小小的芯片并不能保证信用卡在网络环境中的安全。

\

中间人攻击、恶意软件以及Rootkit攻击出现的频率越来越高,攻击者甚至还可以利用目标用户设备中的安全漏洞远程/本地窃取数据。当攻击者成功访问到目标数据后,他们会将盗窃来的信用卡数据发送到自己的远程服务器中,然后利用这些信息进行匿名支付或在地下黑市中出售以谋取非法利益。

在这篇文章中,我们将跟大家攻击者如何利用目前四大热门浏览器(Internet Explorer (IE)、Microsoft Edge、Google Chrome以及Mozilla Firefox)来窃取信用卡数据,并讨论相应浏览器所面临的安全风险。

表单自动填充功能

现代浏览器可以保存用户的各种信息(包括信用卡数据在内),而这种功能也可以给用户的日常使用提供便捷,但与此同时这种功能也带来了很多安全问题。让我们先看一看浏览器的“自动填充”功能,并了解其工作机制。

浏览器可以存储HTML表单数据,并在需要使用这些信息的时候自动填充到正确的表单字段中,这样可以避免让用户重复输入各种数据,并加快在线表单的填写速度。

IE、Edge、Chrome和Firefox都会调用这种自动填充功能,但不幸的是,它们存储敏感信息的方法是存在安全问题的。在下图中,你可以看到自动填充功能的一个例子:

\

映射自动填充存储内容

根据不同版本的操作系统,浏览器会将自动填充数据存储在不同的位置。接下来,我们一起映射出这些位置所存储的数据。

IE和Edge会将自动填充数据存储在下列注册表键值中:

HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\IntelliForms\FormData

HKEY_CURRENT_USER\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\

AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\IntelliForms\FormData

HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\IntelliForms\Storage1

HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\IntelliForms\Storage2

Chrome会将这些数据存储在一个SQLite数据库文件中:

%LocalAppData%\Google\Chrome\UserData\Default\Web Data

Firefox同样会将这些数据存储在一个SQLite数据库文件中:

%AppData%\Mozilla\Firefox\Profiles\{uniqString}.default\formhistory.sqlite

需要注意的是,IE、Edge、Chrome和Firefox在存储自动填充数据之前,都会利用Windows DPAPI(数据保护应用编程接口)来对自动填充数据进行加密,并在使用之前利用DPAPI进行数据解密。

问题就在于,会在用户环境下调用DPAPI,在加密数据时,完全不需要用户干预或输入额外密码。而此时任何脚本或代码都可以运行在同一用户环境下(不需要特殊权限或提权),因此恶意代码就可以模仿浏览器调用DPAPI来对数据进行加密解密了。

当然了,我们也有更安全的DPAPI使用方法,但在解密过程中需要用户干预,我们待会儿再讨论。

Firefox在存储自动填充数据时,完全不会对数据进行加密。本文针对的主要是信用卡数据,但浏览器中还会存储各种其他的敏感信息,例如用户名、密码和隐私链接等等,而这些数据都会存储在同一文件或注册表键值之中。

机密数据提取

为了从IE、Edge、Chrome和Firefox浏览器中提取信用卡数据,我们需要先了解下列两个东西:

1. SQLite数据库结构;

2. 如何使用DPAPI来解密信用卡数据;

SQLite是一款热门的嵌入式数据库,主要用于应用程序实现在本地/客户端的数据存储。很多操作系统、嵌入式系统或Web浏览器都会用它来存储本地数据,而且SQLite还可以支持多种编程语言。

DPAPI的CryptUnprotectData函数

\

重要参数解释:

pDataIn[in]

指向DATA_BLOB结构体的指针,该结构体存储了加密数据。

ppszDataDescr[out, optional]

指向加密数据描述字符串的指针

pOptionalEntropy[in, optional]

指向DATA_BLOB结构体的指针,该结构体存储了密钥或其他的熵。

pPromptStruct[in, optional]

指向CRYPTPROTECT_PROMPTSTRUCT结构体的指针,包含提示窗口所显示的时间、位置和内容,该参数应该设置为NULL.。

pDataOut[out]

指向DATA_BLOB结构体的指针,负责接收解密数据。

机密数据提取-Chrome

Chrome SQLite存储文件

下图显示的是Chrome的自动填充数据(Web Data SQLite文件,查看工具为“DB Browser for SQLite”),需要注意的是,Chrome会在单独的数据库表(”credit_cards”)中存储信用卡数据:

\

你可以看到,除了card_number域是以加密BlodData存储的之外,所有其他的数据都是以明文形式存储的。下图显示的是其他的自动填充表,这些数据都是没有进行加密的:

\

Chrome的DPAPI调用

Chrome允许用户使用设置菜单或访问chrome://settings/AutoFill来查看存储的信用卡数据:

\

大家剋看到,这里存储的信用卡号为“4916 4182 7187 7549”,当我们请求查看信用卡数据或浏览器需要使用自动填充功能填写表单域时,DPAPI函数将会被调用(解密数据)。

下图中,Chrome API调用了DPAPI函数- CryptUnProtectData(),参数pDataOut->pbdata指向的是返回的解密数据(信用卡号-“4916 4182 7187 7549”):

\

除了Chrome之外,IE和Edge都会使用相同的处理过程来完成表单域的自动填充。不同的是,IE和Edge会将自动填充数据以加密BlobData的形式随机存储在注册表键中。对于Firefox来说,你可以使用“DB Browser for SQLite”工具来查看未加密的自动填充数据。

数据提取代码

了解了解密过程之后,我们就要开始设计PoC了。

Chrome代码(C#)-

string SQLiteFilePath

=Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+"\\Google\\Chrome\\User

Data\\Default\\Web Data";

string tableName = "credit_cards";

string ConnectionString = "data source=" + SQLiteFilePath +";New=True;UseUTF16Encoding=True";

string sql = string.Format("SELECT * FROM {0} ", tableName);

SQLiteConnection connect = new SQLiteConnection(ConnectionString)

SQLiteCommand command = new SQLiteCommand(sql, connect);

SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);

DataTable DB = new DataTable();

adapter.Fill(DB);

IE& Edge代码(C++)-

DATA_BLOBDataIn;

DATA_BLOBDataVerify;

std::vectorRegKeys;

RegKeys.push_back(L"Software\\Microsoft\\InternetExplorer\\IntelliForms\\FormData");

RegKeys.push_back(L"Software\\Classes\\LocalSettings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppContainer\\Storage\\microsoft.microsoftedge_8wekyb3d8bbwe\\MicrosoftEdge\\IntelliForms\\FormData");

RegKeys.push_back(L"Software\\Microsoft\\InternetExplorer\\IntelliForms\\Storage1");

RegKeys.push_back(L"Software\\Microsoft\\InternetExplorer\\IntelliForms\\Storage2");

for(int i = 0; i 4; i++) // run as number of keys

{

//runover the RegKeys keys

RegOpenKeyEx(HKEY_CURRENT_USER,RegKeys[i], 0, KEY_QUERY_VALUE, &hKey)

//runover each key’s values and extracting the reg value (BlobData)

for(int j = 0; j 0, 0, (LPBYTE)dwReturn, &dwBufSize);

DataIn.cbData= dwBufSize;

DataIn.pbData= dwReturn;

decryptContentDPAPI(&DataIn,&DataVerify);

查看评论

html页面禁止自动填充浏览器记住的密码

现在的浏览器功能越来越强大,比如Chrome浏览器,在一个系统login的时候我们一般会记住密码,那么在整个系统中,浏览器一旦遇到 type="password"的控件,就会把密码自动填充到该控件。非...
  • dz45693
  • dz45693
  • 2016-11-05 11:03:29
  • 2464

阻止浏览器记住密码功能干扰表单填充

禁止表单自动填充
  • playboyanta123
  • playboyanta123
  • 2015-02-13 16:47:19
  • 22580

阻止浏览器对表单自动填充

当用户在进行登录等操作提交表单后,浏览器会提示是否允许浏览器记住密码。 记住用户名密码在一定程度上会给用户体验带来好处,比如,当用户在下一次打开此登录页面表单会自动填充,直接登录 然而,也会带来一...
  • HandMer
  • HandMer
  • 2015-01-19 19:57:53
  • 4440

火狐浏览器表单自动填充问题

问题:在含有表单元素的页面中,如input,有时候浏览器(火狐)会自动记录表单值,在刷新过后,将你填过的值自动填充进去 解决:如果需要禁止这种行为,可以使用autocomplete="off"属性,...
  • kongjunchao159
  • kongjunchao159
  • 2017-03-22 10:29:34
  • 1545

这么糟糕的代码,真的是我以前写的吗?

GitChat 作者:Zm 原文:日常开发与设计模式的那点事 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 前言 “很多程序员不知道怎么组织代码、怎么提升...
  • GitChat
  • GitChat
  • 2018-02-24 11:17:36
  • 308

禁止浏览器自动填充到表单

有一个登录页,有一个新建用户页。他们都有form表单,有username和password 两个input。 在登录页的时候浏览器记住了密码,如果去到新建用户页则 username 和 passwo...
  • u012903926
  • u012903926
  • 2016-08-18 22:18:29
  • 4520

解决浏览器自动填充密码框的问题

使用Chrome、Firefox和360等浏览器,在某个网站进行提交表单的操作时,浏览器会提示是否保存密码 如果选择了保存密码,之后在浏览这个网站的任何一个有密码输入框的的页面时,浏览器...
  • sunshineboy_oO
  • sunshineboy_oO
  • 2016-10-13 16:05:13
  • 2417

去除浏览器账号信息自动填充

web做新增用户,编辑用户时有部分浏览器因保存了用户名和密码,会自动填充,比如chrome,firefox。使用autocompleted="off",并不能解决自动填充的问题。曾尝试过直接给输入框v...
  • ranyang1992
  • ranyang1992
  • 2015-09-22 17:23:37
  • 1361

浏览器记住密码后,密码框自动填充功能禁用

大家在做修改密码功能的时候,需要手动输入原始密码来进行校验,然而浏览器记住密码后页面上的password框点击后会自动出现原始密码,这样即使不知道原始密码,也能进行密码的修改,是非常不安全的操作。参考...
  • a277632346
  • a277632346
  • 2017-06-13 13:38:07
  • 1035

解决浏览器会自动填充密码的问题

解决浏览器会自动填充密码的问题
  • chenguibing123
  • chenguibing123
  • 2015-09-12 11:32:06
  • 5022
    个人资料
    等级:
    访问量: 533
    积分: 286
    排名: 28万+
    文章存档
    最新评论