安全研究员Mohaned Baset在Facebook上发现一个漏洞,这个漏洞会暴露了页面管理员的邮件和其他信息。

Facebook最近解决了一个信息泄露漏洞,也就是安全研究员Mohamed Baset发现的那个暴露页面管理员信息的漏洞。

据Baset所说,这个缺陷是一个“逻辑错误”,是在他收到一个类似于Facebook页面的邀请后发现的。

Facebook-administrator-Like-message.png

这个专家在发表的博客中说:“有一天,我给某个页面上的某一个帖子点了赞,但是我没有点赞或者跟踪这个页面本身,在几天之后,我收到一个来自Facebook的邮件通知,就是我曾经点赞的那个帖子所在的页面发来的,邀请我为这个页面本身点赞,我对这个功能表示惊讶,随后我意识到,这是一个针对非粉丝用户的功能,于是我开始思考这个新功能将会产生什么问题呢?”

 

“在我正在做的一个关于办公室欺诈和钓鱼邮件的调查中,我总是盲目的显示原始信息。”

研究员们分析了在互联网中发送的邮件源码然后发现了邮件源码中包含页面管理员的名字和其他信息。

Facebook-administrator-Like-message-2.png

 

这个研究员把这个问题报告给Facebook,Facebook接受了这个问题,而且作为它们bug基金的一部分,决定奖励发现这个问题的人2500美金。

 

Facebook宣布,为黑客提交的400个漏洞,已经花费了超过880,000美金。

 

你们中的许多人会认为这个问题并不是很严重,其实恰恰相反,因为数据泄露会在特定环境中对用户的隐私构成威胁。

 

在商业或者社区页面的情况下,暴露了管理员的身份,攻击者就会通过信息和评论获取他们的目标。

 

Sophos的博客中写道:“对于许多个人的Facebook页面而言,管理员和页面将会分享同一个身份,所以把管理员的名字放在页面的邮件并没有真的泄露很多信息。但是对于会有很多联合管理员的商业或者社区页面,你不会希望Facebook会展示除了页面名称以外的其他信息,最起码不是主动透露信息。即使发现这个问题不会泄露其他的信息,那至少也可以保护员工个人免受评论和提问的轰炸。”

*参考来源:security affairs,丁牛网安实验室小编EVA编辑,如需转载请标明来自FreeBuf.com。

本文作者:MSTLab-EvilChen

0×00 前言

首先,本来想写NDK的,但是还是先把这个流程过一遍吧,这个流程是必不可少的。
其次,RMB真的是一个好东西。

导航

由于本人为了节省时间,不想贴太多的代码,所以总结了一个导航栏目。并且在栏目中有内容的说明。帮助了解。希望一起进步。
博客系列导航
为了练习方便,顺便把apk进行了一个整理。
练习传送门

内容

1.内购基础

0×01 内购知识

基本知识

什么是内购?

内购就是游戏内部购买。

SDK厂商

1.移动
2.电信
3.联通
4.支付宝
5.微信
6.其他

其他破解

拇指玩
网侠手机站
7723
爱吾
7yw趣游
软天空
西西软件园
葫芦侠三楼

游戏平台

1.某咕游戏

0×02 经验总结

关键点通用总结

通用1

最古老的方法就是搜索关键字:
“成功“
“失败”

绕过通用

switch

(1)覆盖switch失败转为成功。
(2)更改switch跳转
(3)最后一种我最喜欢作用,思路最明确,使用goto进行跳转。跳转到成功即可。

某咕游戏总结

方法 :onResult

移动总结

onbillingfinish()
dobilling()
onresult()

联通总结

payCallback()
PayResult()

电信总结

paySuccess()

支付宝总结

支付失败
9000
ResultStaus

0×03 某咕游戏破解实例

也不能说是因为篇幅问题吧,就是有点犯懒,不想截取一些简单的步骤。所以能简写就简写,这样能多分析几个实例。

实例是我刚找的。

原版apk:练习传送门在这里找,编号:2001

实例分析(1)

暂停:2018年2月12日00:34:05
原因:吵到我爸睡觉了。

开始时间: 2018年2月12日14:58:17

第一步:试玩。

自己玩

1.png

第二步:反编译,搜索关键字。

1.搜索“成功”

这里搜索到了三条数据

2.png

点进去之后是这样一个方法:

.method public static d()V
    .locals 4

    const/4 v3, 0x1

    const/4 v2, 0x0

    sget v0, Lcom/xy/kom/d/bk;->i:I

    invoke-static {v0}, Lcom/xy/kom/g/p;->b(I)Z

    sget v0, Lcom/xy/kom/d/bk;->h:I

    invoke-static {v0}, Lcom/xy/kom/g/p;->c(I)Z

    sget-boolean v0, Lcom/xy/kom/d/bk;->G:Z

    if-eqz v0, :cond_4

    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->m:Lcom/xy/kom/g/p;

    invoke-virtual {v0}, Lcom/xy/kom/g/p;->x()Ljava/util/ArrayList;

    move-result-object v0

    invoke-static {}, Lcom/xy/kom/g/f;->l()Lcom/xy/kom/g/f;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object ;) Z

    :goto_0
    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->m:Lcom/xy/kom/g/p;

    invoke-virtual {v0}, Lcom/xy/kom/g/p;->t()V

    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->r:Lcom/xy/kom/d/ei;

    if-eqz v0, :cond_0

    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->r:Lcom/xy/kom/d/ei;

    invoke-virtual {v0, v2}, Lcom/xy/kom/d/ei;->a(I)V

    :cond_0
    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    const/4 v1, 0x6

    invoke-virtual {v0, v1}, Lcom/xy/kom/GameActivity;->a(I)V

    invoke-static {}, Lcom/xy/kom/d/bk;->h()V

    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    const-string v1, "\u8d2d\u4e70\u6210\u529f\uff01\u9053\u5177\u5df2\u53d1\u653e"

    invoke-static {v0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

    sget-object v0, Lcom/xy/kom/GameActivity;->N:Lcom/xy/kom/e/a;

    invoke-virtual {v0, v3}, Lcom/xy/kom/e/a;->a(I)V

    sput-boolean v3, Lcom/xy/kom/GameActivity;->M:Z

    invoke-static {}, Lcom/xy/kom/a/h;->f()I

    move-result v0

    const/16 v1, 0xd

    if-ne v0, v1, :cond_2

    sget v0, Lcom/xy/kom/GameActivity;->h:I

    const/4 v1, 0x2

    if-ne v0, v1, :cond_2

    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->m:Lcom/xy/kom/g/p;

    invoke-virtual {v0}, Lcom/xy/kom/g/p;->w()Ljava/util/ArrayList;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->size()I

    move-result v1

    sget-object v2, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v2, v2, Lcom/xy/kom/GameActivity;->m:Lcom/xy/kom/g/p;

    invoke-virtual {v2}, Lcom/xy/kom/g/p;->l()I

    move-result v2

    if-ne v1, v2, :cond_1

    sget-object v1, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v1, v1, Lcom/xy/kom/GameActivity;->r:Lcom/xy/kom/d/ei;

    invoke-interface {v0}, Ljava/util/List;->size()I

    move-result v2

    add-int/lit8 v2, v2, -0x1

    invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/xy/kom/g/f;

    invoke-virtual {v1, v0}, Lcom/xy/kom/d/ei;->b(Lcom/xy/kom/g/f;)V

    :cond_1
    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->r:Lcom/xy/kom/d/ei;

    sget-object v1, Lcom/xy/kom/d/bk;->d:Lcom/xy/kom/g/f;

    invoke-virtual {v0, v1}, Lcom/xy/kom/d/ei;->a(Lcom/xy/kom/g/f;)V

    invoke-static {}, Lcom/xy/kom/d/bk;->m()V

    :cond_2
    sget-boolean v0, Lcom/xy/kom/d/bk;->G:Z

    if-nez v0, :cond_3

    const/4 v0, 0x0

    sput-object v0, Lcom/xy/kom/d/bk;->d:Lcom/xy/kom/g/f;

    :cond_3
    return-void

    :cond_4
    sget-object v0, Lcom/xy/kom/GameActivity;->A:Lcom/xy/kom/GameActivity;

    iget-object v0, v0, Lcom/xy/kom/GameActivity;->m:Lcom/xy/kom/g/p;

    invoke-virtual {v0}, Lcom/xy/kom/g/p;->x()Ljava/util/ArrayList;

    move-result-object v0

    sget-object v1, Lcom/xy/kom/d/bk;->d:Lcom/xy/kom/g/f;

    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object ;) Z

    goto/16 :goto_0
.end method

3.png

这里找到一个调用成功的方法。我们继续溯源查看。

发现是一个onResult方法。

4.png

解决方法:
(1)覆盖switch失败转为成功。
(2)更改switch跳转
(3)最后一种我最喜欢作用,思路最明确,使用goto进行跳转。跳转到成功即可。

恩,改完之后汇编,整个游戏就破解好了。
没什么好说的。

测试成果。

是成功的,懒的玩。不想发图,自己测试吧,有疑问可以找我。

实例分析(2)

之前没有找好,现在去找找。
找练习的APK的时候主要注意三点。
(1)最好是单机
(2)选择大小的时候选小一点的,恩,反编译快。我们的目的是为了练习。
(3)无壳,现阶段可定脱不了壳。

找到了一个什么酷跑什么的游戏。
三步走

第一步 试玩

原版apk:练习传送门在这里找,编号:2002

拿到游戏,首先就要玩一下是不,人家怎么购买的你总要知道吧。说不定会有新的发现。

5.png

反编译破解

搜索关键字“成功失败”

6.png

点开之后进去,发现,原来还是一个onResult。

.method public onResult(ILjava/lang/String;Ljava/lang/Object;)V
    .locals 3
    .param p1, "paramAnonymousInt"    # I
    .param p2, "paramAnonymousString"    # Ljava/lang/String;
    .param p3, "paramAnonymousObject"    # Ljava/lang/Object;

    .prologue
    goto :pswitch_0
    .line 26
    packed-switch p1, :pswitch_data_0

    .line 37
    const-string v0, "Unity"

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "\u8d2d\u4e70\u9053\u5177\uff1a["

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "]\u53d6\u6d88\uff01"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    .line 38
    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$0()Ljava/lang/String;

    move-result-object v0

    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$1()Ljava/lang/String;

    move-result-object v1

    const-string v2, "cancel"

    invoke-static {v0, v1, v2}, Lcom/unity3d/player/UnityPlayer;->UnitySendMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

    .line 41
    :goto_0
    return-void

    .line 29
    :pswitch_0
    const-string v0, "Unity"

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "\u8d2d\u4e70\u9053\u5177\uff1a["

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "]  \u6210\u529f\uff01"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    .line 30
    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$0()Ljava/lang/String;

    move-result-object v0

    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$1()Ljava/lang/String;

    move-result-object v1

    const-string v2, "success"

    invoke-static {v0, v1, v2}, Lcom/unity3d/player/UnityPlayer;->UnitySendMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_0

    .line 33
    :pswitch_1
    const-string v0, "Unity"

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "\u8d2d\u4e70\u9053\u5177\uff1a["

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "] \u5931\u8d25\uff01"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    .line 34
    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$0()Ljava/lang/String;

    move-result-object v0

    invoke-static {}, Lcom/huibang/paopao/MainActivity;->access$1()Ljava/lang/String;

    move-result-object v1

    const-string v2, "fail"

    invoke-static {v0, v1, v2}, Lcom/unity3d/player/UnityPlayer;->UnitySendMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_0

    .line 26
    nop

    :pswitch_data_0
    .packed-switch 0x1
        :pswitch_0
        :pswitch_1
    .end packed-switch
.end method

7.png

咪咕整个支付流程大概就是这个样子。(我猜的)

原本游戏(隐藏不可见)—咪咕支付接口(可见)——咪咕支付处理(不可见)——返回结果(可见)——回馈给原本游戏(不可见)

我们搞的其实就是在返回结果上动手脚。

测试

测试我做了,但是截图不了,有兴趣的可以自己去做下尝试。

总结

咪咕游戏最明显的一个特征就是 onResult()这个方法,只要改了这个方法,那么就可以轻松搞定了。当然你也可以通过其他手段找到它的特征。不过经验是可以提高效率哒嘛。

0×04 结束语

说明

这些只是对方法的一个总结,在总结的时候,可能没有时间整理实例了,但是在之后有时间或者遇到的话,那么我们就可以从这里找到方法去破解内购等。当然也包括了二次破解等说明。
之后如果需要则进行补充。

Android P ,预计在此平台功能上的体验也较为整洁,从技术上来说可以通过阻止APP在后台运行,从而阻止你手机上APP违规操作,如:通过手机上的相机和麦克风监视你。

你会通过盖上你的摄像头镜头来尝试不被偷窥或监视吗?你应该会,而且每一个品牌商都会配置有一个产品配件,用来照顾你的感受。

不幸的是,想要遮盖你手机上的摄像头并不容易,你在非视频会议场景下使用的时候,甚至你把手机放入你的口袋或者背包里的时候,你也无法保证你的摄像头完全是听命于自己手机主人的。包括你在使用摄像功能的时候,你自己也不敢保证你所用此摄像功能的时间长短。就像大部分手机安全需求,我们依赖软件,但是幸运的是,谷歌正在加紧处理这个问题。下一个手机系统的版本,Android P,预计会有一个简洁的功能,来阻止在后台运行的应用程序通过手机上的摄像头或麦克风监视你。

在2014年,Edward Snowden最惊人的发现之一就是NSA有通过手机麦克风和相机监视目标的能力。到了2017年,像Chrysaor,Lipizzan和SonicSpy这些用于手机的恶意软件,为黑客提供了相似的功能。甚至有 “合法” 的应用被推销给那些过度关心的父母和夫妻, 因为他们觉得有必要对他们的家庭成员进行监视。这些技术和能力现在已经司空见惯了, 这不仅是偏执狂应该关注的问题, 所有关心隐私的人都应该考虑他们手机中存在的威胁。

在大多数情况下,恶意软件通常把它隐藏在用户真正想要下载的东西下面。举个例子,一个黑客从流行的Telegram messageing应用开始,绑定SonicSpy恶意软件,之后在不同的应用商店里分发恶意软件。用户享受他们下载的通讯软件的好处,没有意识到到它同样也监视他们的一举一动。当安装这个应用时,安卓会弹出一个警告请求访问你的相机和麦克风,联系人等。但是这对一个通讯软件来说似乎是可以接受的。但是比较阴险的地方是,即使你关闭了通信应用,它仍然在后台继续运行,并通过照相机和麦克风监视你。而这,就是Android P将要解决的问题。

 

仔细检查了Android Open Source Project(AOSP)代码所有的变化的xdadevelopers人员,是第一批认识这些变化并确定它的影响的人。当一个Android上安装应用时,它会分配一个不变的用户ID(UID),Android会利用这一新的隐私变化。

 

Kyle Wiggers解释说:“在Android P中,当相机服务检测到UID“空闲”时 ,也就是说,当设备处于闲置打盹状态时,后台应用程序对CPU和网络密集型服务的访问受到限制 – Android会产生错误并停止访问相机。来自不活跃的UID相机的后续请求,就会立刻产生一个错误”。

 

换言之,当一个你没有发觉的APP应用试图访问你的照相机时,你的手机会告诉你。这儿可能会有这样一种相关信息提示,当你想要允许一个后台APP访问你手机上的照相机和麦克风,你就需要自己去设定,并且对相关的事情有一定了解。即将到来的Android P 能够帮助保护你的手机个人隐私。

CVE-2016-3862-android-flaw.jpg

 

虽然它可能在预计于今年五月举行的谷歌 I/O会议上做一个开发人员预览,但是Android P的正式出厂日期还没有宣布。希望我们可以看到这些预期变化在现实生活中的效果。

*参考来源security affairs,丁牛网安实验室小编EVA编辑,如需转载请标明来自Freebuf.com。

开放Web应用程序安全项目(OWASP)将威胁建模描述为一种结构化的方法,用于识别、量化和处理与应用程序相关的安全风险。它本质上涉及在构建或部署一个系统时战略性地考虑威胁,因此在应用程序生命周期的早期就可以实现对预防或减轻威胁的适当控制。

威胁建模不是一个新的概念,但是很少有组织以一种有意义的方式实现它。威胁模型的最佳实践仍在涌现,威胁建模软件的创始人兼首席执行官Archie Agarwal说:“最大的问题是缺乏对威胁建模的理解。”

 

有多种方法可以进行威胁建模,而公司在构建的过程中常常会遇到麻烦。应该弄清楚威胁建模的整体过程构建,以及如何进行扩展,目前大部分人在这方面仍然不够明确。

 

根据Archie Agarwal和其他人的说法,在进行威胁建模时,你可能会犯以下7个错误:

 

1、专注于以应用程序为中心

 

Agarwal说,组织构建威胁模型时最常犯的错误之一就是只关注应用程序本身。对于威胁建模,你应该试着理解整个场景,而不仅仅是孤立的应用程序,。

 

考虑基础设施、数据库、共享组件、第三方交互和部署环境。威胁可以根据应用程序是on-premises还是在云中运行,或者可以通过移动设备和其他计算端点访问。

 

如果要移动到云,你需要一个云的威胁模型。应用程序和数据会在专用的基础设施或共享服务器和数据库上运行吗?Agarwal说,关键是要记住:当威胁建模时,不仅需要查看应用程序,还需要查看涉及到它的所有内容。开发人员在构建应用程序和部署应用程序时需要处理的操作时,需要考虑到一些修复时会遇到的问题。

 

2、关注其脆弱的地方而不是威胁

 

国际数据公司(IDC)的分析师Pete Lindstrom表示,一个错误的组织可能会把过多的注意力放在漏洞上,而忽视了威胁。查看数据流和控制流,了解应用程序中可能存在哪些漏洞,这一点非常重要。此外,您需要更明确地查看威胁,并识别可能存在风险的输入和输出。您需要考虑攻击者阻止您的控件影响机密性、完整性、可用性、生产力和数据的专有属性的所有机会。

 

Pete Lindstrom说:“现在我们谈论的是熔毁和幽灵对机密的攻击。但是可用性呢?是否有办法让攻击者操纵这些内存表或插入数据?仅仅因为对某个特定的漏洞进行了控制,并不意味着攻击者就不会找到利用漏洞的新方法。”

 

3、过于关注特定的威胁

 

SANS Institute的新兴安全趋势主管John Pescatore认为,在建立威胁模型时不要急于应对最新的威胁或过于关注特定的威胁行为者或行为类型。Ransomware和cryptomining软件可能会对你的安全造成当前最大的威胁。不要专门针对这些威胁进行建模,而是集中于控制,以减轻对系统的机密性、完整性和可用性的任何威胁。

 

Pescatore说,同样地,如果你的威胁来自中国、俄罗斯或塞尔维亚的演员,那也无关紧要。对归因和国家资助的黑客和犯罪团伙的关注不那么重要,因为他们知道如何防范他们所代表的威胁。

 

重点应该是建立可重复的过程,以便每次发生变化时都有充足的准备。关键是要有一个标准的流程或方法,不管威胁的新程度如何,每次都以同样的方式进行。你需要知道你想要保护的是什么、从哪里开始。

 

4、对威胁建模的威胁映射

 

如果你建立一个威胁模型的想法是,列出所有威胁并查看你的应用是否有具备威胁,你所做的就是威胁地图。“假设你有一个网上银行应用程序,你会问一组问题,比如‘你用的是Flash吗?’”或者“你在用Java吗?”或者“你在做认证吗?”,你在这里所做的不是威胁建模,因为威胁周围的环境没有联系,你不知道如何使用Flash或你正在使用它。

 

类似地,仅仅因为有一个数据库并不意味着必须担心SQL注入作为攻击向量。只有当一个从外部源接收输入的web应用程序时,SQL注入才成为潜在的关注点。当采用检查清单的方法来评估威胁时,这种细微的差别很容易被忽略。

 

为了构建一个适当的威胁模型,架构图是至关重要的。它应该向用户显示数据库、web服务器、操作系统层和应用程序正在运行的基础设施,并通过这些基础设施访问它。它应该显示所有数据和通信流的位置,入口点在哪里,以及从这些入口点输入什么类型的输入,架构图显示了全局和边缘情况。

 

5、不让用户进入威胁模型

 

有这样一种东西,它太过于关注对手如何攻击你的代码,而在其他方面却没有足够的能力来处理你的应用程序和数据。Pescatore说:“威胁模型如何攻击代码是一个好主意。但对钓鱼攻击的保护并不是你可以在应用程序中构建的。”

 

需要将用户引入威胁模型,并考虑用户操作可能影响安全性的不同方式;需要查看特权管理和基于角色的访问。Pescatore说,当用户通过云或移动应用程序访问应用程序时,你需要考虑潜在的威胁,这可能是更重要的电子商务计划的一部分。

 

6、采取一次完成的方法进行威胁建模

 

威胁模型不能是静态的。不能够在一个关键的应用程序上面做一个威胁模型,然后假设你已经完成了。大多数组织进行持续的开发活动,随着应用程序的改变,它的威胁配置也会改变。这意味着你当前的威胁模型将在三个月内被淘汰。你的威胁模型应该是一个活生生的文件,阿加瓦尔说:“不能只是建立一个威胁模型,然后忘记它,应用程序还活着。”

 

7、不考虑你的系统如何影响他人

 

当构建一个威胁模型时,最好考虑一下数字可信度。一旦你了解了你所面临的所有威胁,并找出控制或减轻它们的方法,看看你的组织的系统如何可能会影响到与他们接触的其他人。

 

你需要注意你的输出可能会影响他人的安全态势,例如,你可以在一个黑市网站上,或者有人劫持域名,或将DDoS数据包从IoT系统中弹出;你可能不接受广告拦截器,但是如果站点上的恶意广告感染了客户系统会发生什么?当你把内容放到网上时,你的责任是保持它们干净,使游使用不会受到使用你系统的影响。这种努力需要成为威胁建模的一部分,无论是从数字可信度还是责任角度来看。

 

作为威胁建模练习的一部分,确保您了解与开源软件和第三方组件相关的风险,不仅仅是针对你的组织,也包括服务的下游用户。例如,如果提供mashup,需要考虑数据或服务如何影响其他的输出。如果其他人依赖于你的GPS数据,你需要考虑这些数据的完整性和可靠性。

0×1 概述

shim是Windows系统用于修补应用程序的小型数据库(.sdb),可以透明地拦截原程序API调用、修改参数并进行其他操作,常用于解决应用程序与操作系统不兼容问题。电脑管家近期发现蓝光宝盒、极客虚拟光驱、悦动天地超级录屏等多款软件包含利用shim机制的木马,导致用户主页被劫持,自动下载不明程序。

1.png

(图1:木马传播流程图)

0×2 shim原理

shim常用于解决应用程序与操作系统不兼容问题,微软也曾用于修复漏洞。当某应用程序被安装shim后,可以修改IAT表中的windows函数地址,将其替换为shim中替代函数的指针。

2.png

(图2:shim原理示意图)

shim安装后会在AppPatch目录添加sdb文件,并在注册表中记录待修补的程序以及对应的sdb文件。安装完成后,每次被修补的程序启动,都会加载执行sdb文件中记录的修补模块。

3.png

(图3:shim数据库存放目录)

4.jpg

(图4:shim数据库注册表项)

值得注意的是,由于shim在安装时系统没有对其做安全性校验,因此存在被恶意程序利用的风险。

0×3 恶意利用样本分析

1. QianSet.exe木马

(样本md5: E3AE7D26ACB0B4193226B48254BCDF13)

QianSet.exe释放的updat_xx.exe运行后释放随机名VzQqgi.dll到AppPatch目录,并将其安装为desktopmgr.exe、lsass.exe、mxstart.exe、services.exe的shim。

木马安装shim后生成SDB写入注册表:({429E4075-95CE-4E90-8AA9-E56C4C199DCF}.sdb)

5.jpg

(图5:安装shim写注册表)

Sdb指定修补模块VzQqgi.dll

6.jpg

(图6:sdb文件内容)

2. VzQqgi.dll木马

(样本md5:01D9A5781CBEF2D60BC3177F6DFA3B64)

先从内存中解密出PE文件,然后获取PE中的start函数并调用,最终hook CreateProcess函数并篡改浏览器进程的参数,并下载执行文件执行其他文件。

7.png

(图7:shim木马DLL主要功能)

将数据异或0×35得到内存中的PE文件

8.png

(图8:解密内存PE文件)

内存中的PE导出Start和Stop函数

9.png

(图9:解密后的PE)

获取Start函数地址并执行

10.png

(图10:获取Start函数地址)

Start中对CreateProcess进行hook

11.png

111.png

(图11:hook CreateProcess)

木马执行网络下载

12.png

122.png

(图12:木马网络下载)

0×4木马溯源

1. 传播源

木马传播的源头为蓝光宝盒、极客虚拟光驱、悦动天地系列软件等。蓝光宝盒本是装机渠道和软件分发平台,却被不法分子利用下载木马QianSet.exe;极客虚拟光驱软件子文件imhelp.exe下载木马XXUpdat_x.exe;QianSet.exe和XXUpdat_x.exe作为母体释放木马DLL并安装为shim。悦动天地系列软件2017年编译的版本安装后均会释放木马DLL并安装为shim。

1)蓝光宝盒

http://down.gsie.cn/xiangmu1/qian/20171204/QianSet.exe(现已失效),与蓝光宝盒升级组件和推装软件的下载地址一致。

13.png

(图13:蓝光宝盒组件更新地址)

2) 极客虚拟光驱

14.png

(图14:极客虚拟光驱网站)

3) 悦动天地系列软件

15.png

(图15:悦动天地系列软件网站)

2. 木马作者

从文件PDB信息来看,蓝光宝盒QianSet.exe与极客虚拟光驱imhelp.exe作者均为“maguojun”

16.png

(图16:QianSet.exe的PDB信息)

17.png

(图17:imhelp.exe的PDB信息)

作者邮箱:[email protected]

18.png

(图18:域名邮箱反查)

kyan.com.cn实际指向木马最终锁定的主页,结合木马的PDB信息可以看出,木马作者与jicer.cn软件作者为同一人。

19.png

(图19:kyan.com.cn网站信息)

从作者博客可以看出其比较擅长windows技术

20.png

(图20:作者博客)

悦动天地软件释放的木马DLL与蓝光宝盒释放的木马DLL代码风格类似,最终锁定的主页也相同。

21.png

(图21:蓝光宝盒VzQqgi.dll部分代码)

22.png

(图22:悦动天地acfow.dll部分代码)

0×5 安全建议

1. 检查是否有不明来源的shim数据库文件:

32位:“C:\Windows\AppPatch\Custom” 

64位:“C:\Windows\AppPatch\Custom\Custom64”

2. 检查是否存在下列可疑注册表项:

“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom”“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB

3. 保持腾讯电脑管家等安全软件的运行状态,实时拦截恶意木马利用。

23.png

开放Web应用程序安全项目(OWASP)将威胁建模描述为一种结构化的方法,用于识别、量化和处理与应用程序相关的安全风险。它本质上涉及在构建或部署一个系统时战略性地考虑威胁,因此在应用程序生命周期的早期就可以实现对预防或减轻威胁的适当控制。

威胁建模不是一个新的概念,但是很少有组织以一种有意义的方式实现它。威胁模型的最佳实践仍在涌现,威胁建模软件的创始人兼首席执行官Archie Agarwal说:“最大的问题是缺乏对威胁建模的理解。”

 

有多种方法可以进行威胁建模,而公司在构建的过程中常常会遇到麻烦。应该弄清楚威胁建模的整体过程构建,以及如何进行扩展,目前大部分人在这方面仍然不够明确。

 

根据Archie Agarwal和其他人的说法,在进行威胁建模时,你可能会犯以下7个错误:

 

1、专注于以应用程序为中心

 

Agarwal说,组织构建威胁模型时最常犯的错误之一就是只关注应用程序本身。对于威胁建模,你应该试着理解整个场景,而不仅仅是孤立的应用程序,。

 

考虑基础设施、数据库、共享组件、第三方交互和部署环境。威胁可以根据应用程序是on-premises还是在云中运行,或者可以通过移动设备和其他计算端点访问。

 

如果要移动到云,你需要一个云的威胁模型。应用程序和数据会在专用的基础设施或共享服务器和数据库上运行吗?Agarwal说,关键是要记住:当威胁建模时,不仅需要查看应用程序,还需要查看涉及到它的所有内容。开发人员在构建应用程序和部署应用程序时需要处理的操作时,需要考虑到一些修复时会遇到的问题。

 

2、关注其脆弱的地方而不是威胁

 

国际数据公司(IDC)的分析师Pete Lindstrom表示,一个错误的组织可能会把过多的注意力放在漏洞上,而忽视了威胁。查看数据流和控制流,了解应用程序中可能存在哪些漏洞,这一点非常重要。此外,您需要更明确地查看威胁,并识别可能存在风险的输入和输出。您需要考虑攻击者阻止您的控件影响机密性、完整性、可用性、生产力和数据的专有属性的所有机会。

 

Pete Lindstrom说:“现在我们谈论的是熔毁和幽灵对机密的攻击。但是可用性呢?是否有办法让攻击者操纵这些内存表或插入数据?仅仅因为对某个特定的漏洞进行了控制,并不意味着攻击者就不会找到利用漏洞的新方法。”

 

3、过于关注特定的威胁

 

SANS Institute的新兴安全趋势主管John Pescatore认为,在建立威胁模型时不要急于应对最新的威胁或过于关注特定的威胁行为者或行为类型。Ransomware和cryptomining软件可能会对你的安全造成当前最大的威胁。不要专门针对这些威胁进行建模,而是集中于控制,以减轻对系统的机密性、完整性和可用性的任何威胁。

 

Pescatore说,同样地,如果你的威胁来自中国、俄罗斯或塞尔维亚的演员,那也无关紧要。对归因和国家资助的黑客和犯罪团伙的关注不那么重要,因为他们知道如何防范他们所代表的威胁。

 

重点应该是建立可重复的过程,以便每次发生变化时都有充足的准备。关键是要有一个标准的流程或方法,不管威胁的新程度如何,每次都以同样的方式进行。你需要知道你想要保护的是什么、从哪里开始。

 

4、对威胁建模的威胁映射

 

如果你建立一个威胁模型的想法是,列出所有威胁并查看你的应用是否有具备威胁,你所做的就是威胁地图。“假设你有一个网上银行应用程序,你会问一组问题,比如‘你用的是Flash吗?’”或者“你在用Java吗?”或者“你在做认证吗?”,你在这里所做的不是威胁建模,因为威胁周围的环境没有联系,你不知道如何使用Flash或你正在使用它。

 

类似地,仅仅因为有一个数据库并不意味着必须担心SQL注入作为攻击向量。只有当一个从外部源接收输入的web应用程序时,SQL注入才成为潜在的关注点。当采用检查清单的方法来评估威胁时,这种细微的差别很容易被忽略。

 

为了构建一个适当的威胁模型,架构图是至关重要的。它应该向用户显示数据库、web服务器、操作系统层和应用程序正在运行的基础设施,并通过这些基础设施访问它。它应该显示所有数据和通信流的位置,入口点在哪里,以及从这些入口点输入什么类型的输入,架构图显示了全局和边缘情况。

 

5、不让用户进入威胁模型

 

有这样一种东西,它太过于关注对手如何攻击你的代码,而在其他方面却没有足够的能力来处理你的应用程序和数据。Pescatore说:“威胁模型如何攻击代码是一个好主意。但对钓鱼攻击的保护并不是你可以在应用程序中构建的。”

 

需要将用户引入威胁模型,并考虑用户操作可能影响安全性的不同方式;需要查看特权管理和基于角色的访问。Pescatore说,当用户通过云或移动应用程序访问应用程序时,你需要考虑潜在的威胁,这可能是更重要的电子商务计划的一部分。

 

6、采取一次完成的方法进行威胁建模

 

威胁模型不能是静态的。不能够在一个关键的应用程序上面做一个威胁模型,然后假设你已经完成了。大多数组织进行持续的开发活动,随着应用程序的改变,它的威胁配置也会改变。这意味着你当前的威胁模型将在三个月内被淘汰。你的威胁模型应该是一个活生生的文件,阿加瓦尔说:“不能只是建立一个威胁模型,然后忘记它,应用程序还活着。”

 

7、不考虑你的系统如何影响他人

 

当构建一个威胁模型时,最好考虑一下数字可信度。一旦你了解了你所面临的所有威胁,并找出控制或减轻它们的方法,看看你的组织的系统如何可能会影响到与他们接触的其他人。

 

你需要注意你的输出可能会影响他人的安全态势,例如,你可以在一个黑市网站上,或者有人劫持域名,或将DDoS数据包从IoT系统中弹出;你可能不接受广告拦截器,但是如果站点上的恶意广告感染了客户系统会发生什么?当你把内容放到网上时,你的责任是保持它们干净,使游使用不会受到使用你系统的影响。这种努力需要成为威胁建模的一部分,无论是从数字可信度还是责任角度来看。

 

作为威胁建模练习的一部分,确保您了解与开源软件和第三方组件相关的风险,不仅仅是针对你的组织,也包括服务的下游用户。例如,如果提供mashup,需要考虑数据或服务如何影响其他的输出。如果其他人依赖于你的GPS数据,你需要考虑这些数据的完整性和可靠性。

0×1 概述

shim是Windows系统用于修补应用程序的小型数据库(.sdb),可以透明地拦截原程序API调用、修改参数并进行其他操作,常用于解决应用程序与操作系统不兼容问题。电脑管家近期发现蓝光宝盒、极客虚拟光驱、悦动天地超级录屏等多款软件包含利用shim机制的木马,导致用户主页被劫持,自动下载不明程序。

1.png

(图1:木马传播流程图)

0×2 shim原理

shim常用于解决应用程序与操作系统不兼容问题,微软也曾用于修复漏洞。当某应用程序被安装shim后,可以修改IAT表中的windows函数地址,将其替换为shim中替代函数的指针。

2.png

(图2:shim原理示意图)

shim安装后会在AppPatch目录添加sdb文件,并在注册表中记录待修补的程序以及对应的sdb文件。安装完成后,每次被修补的程序启动,都会加载执行sdb文件中记录的修补模块。

3.png

(图3:shim数据库存放目录)

4.jpg

(图4:shim数据库注册表项)

值得注意的是,由于shim在安装时系统没有对其做安全性校验,因此存在被恶意程序利用的风险。

0×3 恶意利用样本分析

1. QianSet.exe木马

(样本md5: E3AE7D26ACB0B4193226B48254BCDF13)

QianSet.exe释放的updat_xx.exe运行后释放随机名VzQqgi.dll到AppPatch目录,并将其安装为desktopmgr.exe、lsass.exe、mxstart.exe、services.exe的shim。

木马安装shim后生成SDB写入注册表:({429E4075-95CE-4E90-8AA9-E56C4C199DCF}.sdb)

5.jpg

(图5:安装shim写注册表)

Sdb指定修补模块VzQqgi.dll

6.jpg

(图6:sdb文件内容)

2. VzQqgi.dll木马

(样本md5:01D9A5781CBEF2D60BC3177F6DFA3B64)

先从内存中解密出PE文件,然后获取PE中的start函数并调用,最终hook CreateProcess函数并篡改浏览器进程的参数,并下载执行文件执行其他文件。

7.png

(图7:shim木马DLL主要功能)

将数据异或0×35得到内存中的PE文件

8.png

(图8:解密内存PE文件)

内存中的PE导出Start和Stop函数

9.png

(图9:解密后的PE)

获取Start函数地址并执行

10.png

(图10:获取Start函数地址)

Start中对CreateProcess进行hook

11.png

111.png

(图11:hook CreateProcess)

木马执行网络下载

12.png

122.png

(图12:木马网络下载)

0×4木马溯源

1. 传播源

木马传播的源头为蓝光宝盒、极客虚拟光驱、悦动天地系列软件等。蓝光宝盒本是装机渠道和软件分发平台,却被不法分子利用下载木马QianSet.exe;极客虚拟光驱软件子文件imhelp.exe下载木马XXUpdat_x.exe;QianSet.exe和XXUpdat_x.exe作为母体释放木马DLL并安装为shim。悦动天地系列软件2017年编译的版本安装后均会释放木马DLL并安装为shim。

1)蓝光宝盒

http://down.gsie.cn/xiangmu1/qian/20171204/QianSet.exe(现已失效),与蓝光宝盒升级组件和推装软件的下载地址一致。

13.png

(图13:蓝光宝盒组件更新地址)

2) 极客虚拟光驱

14.png

(图14:极客虚拟光驱网站)

3) 悦动天地系列软件

15.png

(图15:悦动天地系列软件网站)

2. 木马作者

从文件PDB信息来看,蓝光宝盒QianSet.exe与极客虚拟光驱imhelp.exe作者均为“maguojun”

16.png

(图16:QianSet.exe的PDB信息)

17.png

(图17:imhelp.exe的PDB信息)

作者邮箱:[email protected]

18.png

(图18:域名邮箱反查)

kyan.com.cn实际指向木马最终锁定的主页,结合木马的PDB信息可以看出,木马作者与jicer.cn软件作者为同一人。

19.png

(图19:kyan.com.cn网站信息)

从作者博客可以看出其比较擅长windows技术

20.png

(图20:作者博客)

悦动天地软件释放的木马DLL与蓝光宝盒释放的木马DLL代码风格类似,最终锁定的主页也相同。

21.png

(图21:蓝光宝盒VzQqgi.dll部分代码)

22.png

(图22:悦动天地acfow.dll部分代码)

0×5 安全建议

1. 检查是否有不明来源的shim数据库文件:

32位:“C:\Windows\AppPatch\Custom” 

64位:“C:\Windows\AppPatch\Custom\Custom64”

2. 检查是否存在下列可疑注册表项:

“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom”“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB

3. 保持腾讯电脑管家等安全软件的运行状态,实时拦截恶意木马利用。

23.png

19300001143928130311509350352.jpg

为了促进微博客信息服务健康有序发展,国家互联网信息办公室依据《中华人民共和国网络安全法》等相关法律法规制定了《微博客信息服务管理规定》。该规定共18条,包括微博客服务提供者主体责任、真实身份信息认证、分级分类管理、辟谣机制、行业自律、社会监督及行政管理等条款,于3月20日起施行。

维护微博客信息安全,建立健全辟谣机制

在微博客信息服务管理方面,该规定明令微博客服务提供者应当落实信息内容安全管理主体责任。包括建立健全各项管理制度,具有安全可控的技术保障和防范措施,配备与服务规模相适应的管理人员。制定平台服务规则,与微博客服务使用者签订服务协议,明确双方权利义务。按照“后台实名、前台自愿”原则,对使用者进行真实身份信息认证,并保障使用者个人信息安全等。

为维护网络新闻信息安全,该规定要求,向社会公众提供互联网新闻信息服务的,应当依法取得互联网新闻信息服务许可,并在许可范围内开展服务,禁止未经许可或超越许可范围开展互联网新闻信息服务活动。

在治理虚假信息方面,该规定强调,微博客服务提供者应当建立健全辟谣机制,发现微博客服务使用者发布、传播谣言或不实信息,应当主动采取辟谣措施,从根源上保证信息真实性;另一方面,将举报的权利赋予了全体网民,要求平台需要接受社会监督,设立便捷举报入口。

规定全文

相关阅读

15171070648911497.jpg

除此之外,今年1月,北京市网信办约谈新浪微博:热搜榜等版块暂时下线一周整改。

​​1月27日,国家互联网信息办公室指导北京市互联网信息办公室针对新浪微博对用户发布违法违规信息未尽到审查义务,持续传播炒作导向错误、低俗色情、民族歧视等违法违规有害信息的严重问题约谈该企业负责人,责令其立即自查自纠,全面深入整改。

根据网络安全法等规定,任何个人和组织使用网络应当遵守法律和公共秩序,尊重社会公德,不得有传播暴力、淫秽色情信息等行为。网络运营者不能以仅提供平台服务作为挡箭牌,需要尽到审查和监管义务,发现有发布或传输违规信息的,应立即停止传输该信息,采取消除影响等处置措施。

新浪微博负责人表示,将严格落实网信部门管理要求,对问题突出的热搜榜、热门话题榜、微博问答功能、热门微博榜明星和情感版块、广场头条栏目情感版块暂时下线一周进行整改。下线时间从2018年1月27日21时至2月3日21时。

来源:[正义网] [澎湃新闻] [人民网]

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

The Zed Attack Proxy (ZAP) 是一个开源工具,由 Open Web Application Security Project (OWASP) 维护,拥有庞大的开发人员社区,可快速提供新模块或附加组件。

ZAP的特性和功能有助于在web上执行手工渗透测试以及自动扫描。在本文中,我将介绍一些在任何安全测试中使 ZAP 成为首选工具的功能。

ZED Attack Proxy-1.png

AJAX 爬虫

在渗透测试期间,AJAX 爬虫可以发现丰富的基于 AJAX 的 web 资源,这是使用常规爬虫工具无法发现的。 AJAX 爬虫窗口可通过 ZAP -> Tools ->AJAX Spider (在 ZAP 的菜单栏) 访问。该工具支持参数配置,比如最大爬取深度,最大爬取状态,最长持续时间和其他选项,以防止无限爬取。

01_ajax_spidering.jpg

在我们的渗透测试中,我们首先使用常规的抓取工具来确定正在测试的应用程序的URL。在常规抓取后运行 AJAX 爬虫帮助我们获得了范围内所有应用程序资源的更精确的站点地图。 ZAP提供了使用 Selenium 通过浏览器自动打开应用程序的选项,并通过事件驱动的动态爬取引擎来探索应用程序。这减轻了手动遍历应用程序以捕获AJAX请求的需要。

Fuzzing

模糊测试工具是一种用于注入各种有效载荷以迫使应用程序进入不可预期状态的安全工具,可能会暴露出潜在的安全漏洞。在ZAP中,测试人员可以通过ZAP中内置的Dirbuster,FuzzDB和JbroFuzz等广泛的开源模糊负载列表中进行选择,这使得挖掘漏洞比以往更容易。

02_Fuzzing.png

渗透测试人员可以选择手动上传有效载荷列表或通过编写自己的自定义脚本来生成有效载荷。 ZAP 模糊测试工具 还可以通过对模糊测试位置(在请求中),并发线程数量,延迟模糊等多种控制方式进行高度自定义。模糊测试工具还可以根据每个请求重新生成 Token 时在应用中自动刷新 Anti-CSRF Token。 当检测到Anti-CSRF Token 时,ZAP会自动记录 Token 和相关的 URL,从而在必要时重新生成 Token,防止 Token 出现丢失或无效的错误。

Websocket 测试

在如今,Websockets 的测试对于跨应用程序的普遍实现非常重要。使用ZAP,拦截,分析或修改客户端和服务器之间的websocket流量不能再简单了! Websocket 消息编辑器可通过ZAP菜单下的 Tools>>WebSocket Message Editor 访问。 该编辑器可用于修改字节码,目标地址或信息并发送回服务器。ZAP 还提供了每条消息的字节码的详细信息 – Text,Binary,Close,Ping 或 Pong。然后可以根据字节码或通道过滤消息以供进一步仔细检查。 websocket 消息也可以发送给模糊测试工具以供后续的有效载荷注入。

03_webSockets.png

例如,我们曾经测试过一个客户的视觉协作平台,它是一个基于websockets的应用程序。 通过修改消息的目标并通过消息编辑器修改消息中的参数,我们能够鉴别出应用程序中的一个漏洞,可导致使用该应用程序接口的所有用户完全拒绝服务。

灵活的扫描策略管理

ZAP 提供了根据测试人员对每个应用程序的要求灵活组合扫描策略的功能。可以在菜单栏下的 Analyse>>Scan Policy Manager 中找到扫描策略管理器。

04_Scan_Policy.png

对于渗透测试人员来说,根据目标应用程序性能优化扫描器(而不导致DoS)至关重要。 因此,在设计扫描策略时考虑扫描人员的处理能力和带宽能力至关重要。

可以更改扫描策略以包含或排除要执行的测试类型。 诸如阈值(其定义了潜在的漏洞可能被标记的可能性)、强度(定义每个测试的请求数量)之类的参数可以在ZAP中配置。

很多时候,渗透测试人员需要测试他在目标应用程序中可能经常遇到的场景。 ZAP允许您设计自定义扫描策略,可以将其作为模板导出。 然后可以将此扫描策略模板导入ZAP并重新使用。

通过 REST API 以编程方式与 ZAP 进行交互

随着Web服务和微服务的增加,安全性从未如此重要。 ZAP 有一个定义和文档都非常好的 API,它可以通过各种工具,平台或自定义脚本以编程方式轻易的访问。ZAP API 可以直接通过浏览器或使用诸如Java,Python,Node JS,.NET,PHP和Go等编程语言使用。ZAP UI 可通过 http://zap 从浏览器中访问或通过 http://localhost:<proxy port> 从代理中访问。

05_ZAP_API.png

此功能特别有助于我们将ZAP的一些核心功能集成到我们的漏洞测试平台中。

ZAP Jenkins 插件

随着越来越多的公司转向 DevSecOps 或采用敏捷安全测试方法,将动态应用程序安全性测试工具集成到他们的持续集成/持续交付管道(如 Jenkins )中正成为一种常态。拥有插件对于这样的集成至关重要。

ZAP 的 Jenkins 插件 可以在 CI / CD pipeline 内集成安全测试。通过 Jenkins 插件,我们帮助客户将 ZAP 无缝集成到 DevOps pipeline 中,允许团队在每个版本中运行自动扫描。该插件可在流水线中启用多个 ZAP 操作,如 Spider Scans,AJAX Spidering,Active Scan,Managing Sessions,定义上下文和关联结果。

高度脚本化

许多安全测试可以通过脚本实现自动化,这可以减少花费在手动测试上的时间,同时让测试人员有更多时间专注于其他重要任务。

在支持允许 JSR 223 脚本的脚本语言的工具中,ZAP 是最具可扩展性/可脚本化的工具之一。ZAP 具有可以运行嵌入其中的脚本并通过 ZAP 脚本附加功能访问内部数据结构和功能的特性。它支持多种脚本语言,包括 Javascript,Zest,Python,Groovy 和 Ruby。脚本支持独立运行,通过主动扫描规则运行,通过代理规则运行等。我们使用 ZAP 的“录制脚本”功能创建 Zest 脚本,以执行应用程序的自动遍历,通过ZAP代理处理请求,运行扫描并导出结果以供后续 聚合和关联。

虽然这些功能可以在其他专用和公用的 DAST 工具中使用,但 ZAP 将这些功能(以及更多功能)封装在一个直观、高效的开源代码平台下,使其成为“即用型工具”以执行手动和自动安全扫描。

*参考来源:we45,Ultracoder编译,转载请注明来自FreeBuf.COM

两年之前,FBI 与苹果之间有一起闹得沸沸扬扬的的解锁 iPhone 事件 —— 2015年圣贝纳迪诺枪击案发生后,FBI 要求苹果解锁恐怖分子的iPhone获取内部数据,APPLE 方面都拒绝协助警方,以保护用户安全无法解密等理由拒绝。

随后,FBI 转向第三方企业寻找帮助,以超过 100 万美元的代价,解锁枪手 Tashfeen Malik 所持的iPhone 5c 设备。

而现在来看,美国联邦政府似乎再也不需要与苹果因“解锁iPhone”而展开苦恼的拉锯战了……

以色列移动取证公司 Cellebrite 据报道,已经找到了可以解锁几乎所有 iPhone 设备的方法,其中也可能包括最新的 iPhone X 。

455053852.jpg

这家企业 Cellebrite 成立于1999年,为其客户提供手机数字取证工具和软件。同时它是美国执法机构重要的安全承包商。

他们声称已经开发出一种全新的黑客工具可用于解锁运行 iOS 11 以及更早版本的所有iPhone设备。

在披露的文件中,该公司所提供的 “高级解锁与数据提取服务” 可以适用于 iOS 5 至 iOS 11 的所有版本 iOS设备,除了 iPhone 还可以应用在 iPad 和 iPod touch 上。

高级解锁与数据提取服务

除了苹果设备,Cellebrite 还能够解锁谷歌安卓系统的三星手机(如Galaxy和Note系列),Alcatel,Nexus, HTC, 华为等其他设备。

Cellebrite 高级解锁服务是业界唯一能够克服市场领先设备上多种复杂锁定方法的解决方案。 我们可以得到或者苹果 iOS 以及谷歌安卓设备上的 PIN ,模式,以及密码锁定或其他密码。

我们的高级付费解锁服务仅向全球执法机关提供授权,可以为政府部门提供给设备解锁和数据提取帮助。

如果 Cellebrite 的服务内容陈述是属实的,任何类似于 FBI 的执法机构都可以通过购买该公司的服务解锁设备。

屏幕快照 2018-02-28 上午11.19.42.png

技术方法尚不明确

在去年11月,美国国土安全局据悉曾经成功解锁过一部嫌疑人的 iPhoneX设备,目前看来也可能是在Cellebrite研究员的帮助之下完成的。

遗憾的是,目前并没有任何明确的报道,提及执法部门以及该企业解锁 iPhone 及其他设备时所应用的技术方法。

目前也还不清楚 Cellebrite 是如何突破 iOS 11的安全防线的。据知情人士称,该公司开发出了一些破解新技术,但是考虑到苹果在修复安全漏洞方面的快速反应,这可能与某个一直没有被公开过的漏洞有关。

对于目前的报道,苹果方面回应称,正在敦促用户及时更新到 iOS 最新版本以避免潜在的安全隐患。

*参考来源:thehackernewstech.qq,Elaine编译整理,转载请注明FreeBuf.COM