早在2016年,我就曾写过某些人会购买ɢoogle.com
域名,用于钓鱼攻击。
这些同形字符看起来像ASCII字符,但它们的编码方式不同,肉眼很难第一时间看出来。
而我也很快和谷歌进行过交流:
同形异义词引发的钓鱼欺诈可能不会欺骗到所有人,这和所采用的策略有关,可能会遇到安全、网络和其他系统方面的各种挑战。
我当时就想:
1.每年都有新的顶级域名,以前的钓鱼案例可以重复么?
2.从头开始创建一个精致的谷歌钓鱼网站有多难?
3.我可以获得该域名的SSL证书吗?
4.谷歌会监视到任何涉及ɢoogle
的域名吗?
5.我可以在Google Domains购买钓鱼域名吗?域名注册商会有什么提示么?
6.我能在谷歌用户和谷歌服务器之间进行一次成功的中间人攻击吗?
顶级域名
其实找到和ɢoogle
相关的域名并不复杂,很多域名服务商都有数据。
以下主要以Google Domains
,NameCheap
和GoDaddy
为主。
我购买了以下域名:
ɢoogle.company(针对company.google.com)
ɢoogle.email(针对mail.google.com)
ɢoogle.tv (针对tv.google.com)
ɢoogle.life(针对life.google.com)
ɢoogle.live(针对live.google.com)
ɢoogle.news(针对news.google.com)
ɢoogletranslate.com(针对translate.google.com)
以上这些域名是自动推荐的,我甚至不需要创造性地去找它们。有意思的是,Google Domains亲自给我ɢoogletranslate.com
!顺便说一下,价格很便宜。
我还能说什么呢。我在注册使用的整个过程中使用了一个假身份,并将Not Google :)
作为组织名称。
使用SSL证书
1.在cloud中启动一个VPS(AWS、谷歌云、Azure等)
2.将DNS路由到该服务器。
3.安装Nginx/Apache等HTTP服务器。
4.请求一个LetsEncrypt证书(LetsEncrypt是全球知名的免费SSL证书提供商)。
sudo certbot — nginx certonly — dry-run -d “xn — oogletranslate-u5f.com”
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Cert not due for renewal, but simulating renewal for dry run
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for xn — oogletranslate-u5f.com
Waiting for verification…
Cleaning up challenges
IMPORTANT NOTES:
— The dry run was successful.
接下来,为了通过“Google”查看客户端的流量,我们需要以下nginx代理:
server {
location / {
proxy_pass https://translate.google.com/;
add_header NOT-GOOGLE-HEADER OK;
}
listen 80;
server_name www.xn--oogletranslate-u5f.com;
server_name xn--oogletranslate-u5f.com;
server_name *.xn--oogletranslate-u5f.com;
listen 443 ssl; # managed by Certbot
ssl_certificate <cert path> # managed by Certbot
ssl_certificate_key <cert path> # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
你应该注意到了,我为每个发回的谷歌响应添加了一个HTTP头:
NOT-GOOGLE-HEADER OK # You can check it in your browser's dev tools.
现在,我们可以在https://
的掩护下提供钓鱼内容。
看看以下链接,它会把你重定向到我的钓鱼域名
https://xn--oogletranslate-u5f.com/#view=home&op=translate&sl=auto&tl=en&text=This%20is%20not%20really%20Google%2C%20you%20are%20proxied%20by%20%C9%A2oogletranslate.com.%0AYou%20made%20an%20SSL%20handshake%20with%20%C9%A2oogletranslate.com%2C%20but%20you%20use%20Google%20Translate%20normally.
使用代理的一个好处在于我的域链接预览,在不同的网络平台中,我发出的钓鱼链接既展示了谷歌翻译的准确描述,又指向了我的域名。以Whatsapp为例:
一切仅需几分钟,无需编码。
而且,Chrome浏览器认为这个域是“安全”的。
此外在移动设备上,我的“ɢ”看起来就像一个真正的“G”。
谷歌的javascript可以在我的域中正常运行,我不需要做任何模仿谷歌网站的工作。
得到流量
通过一些社会工程学,我们可以让用户点击这些域名,截取到受害者的流量。
我想在一些和网络安全相关的网站上发布钓鱼链接,以证明即使是安全意识强的人也可能被这些域名误导。
某些网站的预览具有欺骗性,但也有效果较差的。Reddit和Hacker News为例:
最终,我看到了数百个独立访问者(不包括机器人和扫描器)的流量。
我们能做些什么?
在现在的情况下,我的钓鱼域名处于用户与谷歌之间,因此可以进行中间人攻击。我可以改变谷歌的回复,获取一些敏感的信息。
我们想要获取的最珍贵的数据可能是登录凭证或令牌。
而Google会使用accounts.Google.com
进行身份验证。
例如,我可以覆盖HTML文件中的所有<a>
标签,让它们指向ɢoogletranslate.com
域中的自定义钓鱼登录页面。
我们也可以覆盖页面内的所有链接,将其指向accounts.ɢoogletranslate.com(修改登录按钮的href属性),窃取用户的Google的凭据。
还可以在HTTP正文中插入恶意的<script>
,以在客户端浏览器上执行恶意js代码。
很少有人可以及时更新浏览器。网络中出现的和浏览器有关的1day漏洞都可以为我所用。
怎样才能阻止这种攻击?
1.看清URL中的字母。
2.2016年也出现过同样的事,ɢoogle.com
已被列入黑名单,但这不是解决问题的正确方法,每一个顶级域名都有可能出现这种情况,所有包含“ɢoogle”甚至“oogle”的域名都应加入黑名单。
3.Google Domains别给人推荐钓鱼域名了。
4.限制这些域名请求LetsEncrypt证书的能力。
5.谷歌的js文件应该检查引用它们的域名是否正确。例如在我们的案例中,Referrer
是:https://xn--oogletranslate-u5f.com/
。
6.安全流量分析软件或许也应该把这些域名加入黑名单。
谷歌的回应
谷歌的确认真对待我的安全报告,一直在持续和我讨论其中的风险。
但这个问题不是谷歌特有的,每个大公司或服务都面临这种问题,它们必须花费一定的资金来保护自己的域名和资产。
我不是第一个攻击者,也不会是最后一个。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@avi_59283/poc-for-google-phishing-in-10-minutes-%C9%A2oogletranslate-com-dcd0d2c32d91