最后更新于2023年4月7日(星期五)20:33:03 GMT
我不知道你怎么想, 但在过去的几周里, 我的信息流里满是unicode域名 phishing URLs. 使用unicode域名是使用国际域名(IDN)进行同形攻击的一个版本。.
潜在的问题是很难 visually 区分一些unicode字符和ASCII字符. 幸运的是,Chrome和Firefox 已停止转换域名 到浏览器中的unicode. 但是对于那些没有更新浏览器的人来说,他们将如何避免这个陷阱呢? 你的安全团队会抓住这种聪明的网络钓鱼伎俩吗?
今天的团队一直在分析域名,但他们能分辨出两者的区别吗 http://www.еріс.com for http://www.epic.com? 哪个是unicode域,哪个是ASCII域? (提示:第一个url翻译成 http://www.еріс.com)即使是经验最丰富的专业人士也会犯这个错误,而且代价高昂.
帮助我们的客户, 还有我们自己的安保团队, 我们在Komand中提出了一个解决方案,以促进unicode网络钓鱼域的发现. 这个例子将突出显示速度有多快 and easy it is to build a plugin, and 创建自动化工作流.
编写IDNA插件翻译Unicode域
在我们甚至可以跳到命令建立一个工作流之前, 我们需要一种方法来转换字符和从punycode. 让我们编写一个插件来实现这一点!
首先,我们从插件规范开始:
plugin_spec_version: v1
name: idna
title: "IDNA"
描述:“应用程序国际化域名”
version: 1.0.0
vendor: komand
标签:["idna", "domain", "punycode", "unicode"]
language: go
help: |
## About
IDNA处理ASCII (punycode)和unicode域名之间的转换.
## Actions
### To Punycode
此操作用于将unicode域名转换为ASCII (punycode)。.
#### Input
| | |类型名称默认Enum | | | |需要描述
|----|----|-------|--------|-----------|----|
|domain|string|无|True|Unicode域名|无|
#### Output
| | |名称类型需要| |描述
|----|----|--------|-----------|
|domain|string|True|ASCII (punycode)域名|
### To Unicode
此操作用于将ASCII (punycode)域转换为unicode.
#### Input
| | |类型名称默认Enum | | | |需要描述
|----|----|-------|--------|-----------|----|
|domain|string|无|True|ASCII (punycode)域名|无|
#### Output
| | |名称类型需要| |描述
|----|----|--------|-----------|
|domain|string|True|Unicode域名|
## Triggers
这个插件没有关联的触发器.
## Connection
没有与此插件关联的连接.
# #故障排除
此插件不包含任何故障排除信息.
## References
* [Unicode IDN实用程序](http://unicode.org/cldr/utility/idna.jsp)
* [Go IDNA Package](http://godoc.org/golang.org/x/net/idna)
actions:
to_ascii:
名称:“到ASCII”
描述:“到ASCII (punycode)”
input:
domain:
type: string
description:“Unicode域名”
required: true
output:
domain:
type: string
description: "ASCII (punycode)域名"
required: true
to_unicode:
描述:“到Unicode”
input:
domain:
type: string
required: true
description: "ASCII (punycode)域名"
output:
domain:
type: string
required: true
description:“Unicode域名”
接下来,我们使用下面的命令生成插件:
./ plugin-sdk-go——规范=规格/插件.spec.idna.yaml——包= github.com/komand/plugins/idna
这将生成如下所示的目录结构:
├── Dockerfile
├── Makefile
├── actions
│├──to_ascii.go
│├──to_ascii_custom.go
│├──to_unicode.go
│├──to_unicode_custom.go
├── cmd
│ └── main.go
├── connection
│ ├── cache.go
│├──├─├.go
│──connection_custom.go
├── plugin.spec.yaml
├── server
│ └── http
│├──├.go
│├──to_ascii.go
│├──to_unicode.go
├── types
│├──sdk_file . cat.go
现在我们可以填写我们的动作. 因为我们使用的是Go,所以我们将使用方便 idna package, and import it in our to_ascii_custom.go and to_unicode_custom.go files:
import "golang.org/x/net/idna”
In to_unicode_custom.go,我们填写第一个运行动作. It calls ToUnicode
从idna包中获取,并返回结果字符串. 如果由于某种原因失败,我们将返回错误.
// Run将在给定的连接上运行带有给定输入的操作
函数c (a *ToUnicodeAction)运行(conn *connection.连接,输入*ToUnicodeInput,日志plog.(*ToUnicodeOutput,错误){
域,err:= idna.ToUnicode(输入.Domain)
if err != nil {
返回nil, err
}
return &ToUnicodeOutput {
域:域,
}, nil
}
In to_ascii_custom.go,则填写第二个运行动作,使用 ToASCII
函数,并返回结果字符串. 如果由于某种原因失败,我们将返回错误.
// Run将在给定的连接上运行带有给定输入的操作
函数c (a *ToASCIIAction)运行(conn *connection.连接,输入*ToASCIIInput,日志plog.(*ToASCIIOutput, error) {
域,err:= idna.ToASCII(input.Domain)
if err != nil {
返回nil, err
}
return &ToASCIIOutput{
域:域,
}, nil
}
保存这两个文件,我们新创建的插件就可以导入到Komand中了! 你可以看到插件 这里是社区. 现在进入下一个阶段:在我们的工作流中添加unicode充实步骤.
在命令中自动丰富Unicode域
这个插件的一个常见用例是在网络钓鱼邮件调查期间. 安全团队已经调查了大量可疑的电子邮件和链接, 以及我们新的dna插件, 我们可以添加另一个要自动化的浓缩步骤. 让我们看看下面是什么样子的.
步骤1添加环路
因为我们会跳过一系列域名, 我们想要创建一个循环来重复列表中的每个项. 在这一步中,我们选择变量 Enrich URLs.urls
to repeat over. 这将创建一个 $item
变量来表示将在循环中使用的数组中的每一项.
步骤2转换为ASCII码
现在是有趣的部分:添加将任何域转换为ASCII的步骤. We will select IDNA 作为我们的插件,我们将使用 [在url上循环].$item
循环中的变量.
3 .创建工件
一旦我们翻译任何定义域, 我们要创建工件来显示一个漂亮的, 前一步输出的格式化视图. We'll use the [在url上循环].$item.domain
输出中的变量. 这将为每个已翻译的域生成一个单独的标记工件卡.
步骤4测试我们的工作流程
现在我们已经完成了浓缩步骤, 并在适当的位置生成一个工件, 我们可以进入测试. 在本例中,我只是使用了一个unicode域和一个ASCII域作为测试数据. 如下所示, 虽然它们在右边的面板上看起来是一样的, 左边的文物讲述了一个不同的故事.
Conclusion
你永远不知道什么时候会出现这样聪明的攻击, 所以预防是至关重要的, detect, 或者尽快做出回应. 使用Komand,我可以编写一个插件,向工作流添加几个步骤,并对所有内容进行测试 in 20 minutes. 此解决方案也可以应用于其他用例, 进一步的灵活性和功能的插件,我们在短时间内创建.
如果你对康曼的行动感兴趣, 您可以从我们最近的演示网络研讨会下载录音. Download here.