wnagzihxa1n

wnagzihxa1n

iOS/Android Security

© 2021

大土豆安全笔记 2020.07.06 活过来了

整个六月一共发了七篇文章,六月初的时候我尝试了一下日更安全笔记,结果是失败了

安全是一个需要耐心研究的领域,保持每天产出高质量原创内容有点难,所以我恢复了之前每周五更新本周的安全笔记,我要保证文章的质量

没发文的大半个月里我在做两件事情,重点在写一个移动端应用审计工具,主要是逻辑漏洞,然后研究一些其它领域的逻辑漏洞,扩展思路

最近一些不错的技术文章,学习完后感觉获益颇丰,跟各位分享一下自己的心得

TSRC出品的《红蓝对抗之Windows内网渗透》

  • https://security.tencent.com/index.php/blog/msg/154

从红蓝对抗的角度来说我应该属于蓝军,不过职责并不在这种内网渗透领域,这篇文章我学习完后感觉非常好,讲的极其详细,其中提到的一些点我感觉可以应用在日常审计中

如果之后产出较为不错,我会使用其它厂商的应用作为例子讲解一些实战操作

搞移动端业务安全,一定要深入业务场景,脱离业务场景的审计肯定是走不远的,漏洞只会掩盖在应用加固和代码混淆下面,迟早有一天会被人从冰下面挖出来吊打

《Almost 300 Windows 10 executables vulnerable to DLL hijacking》

  • https://www.bleepingcomputer.com/news/security/almost-300-windows-10-executables-vulnerable-to-dll-hijacking/

最近Windows平台的DLL劫持漏洞文章突然就多了起来

我想了想,这种漏洞在Android端好像是没有,但是像LoadLibary()LoadLibraryEx()这样的倒是有

Android平台加载Dex文件是使用类DexClassLoader,加载So文件是使用System.loadLibrary(),这两个都是指定路径去加载文件

可能存在的风险比如目标文件在SDCard可全局读写导致被劫持替换,加载的时候如果没有做好哈希校验就容易出现任意代码执行

《Automating DLL Hijack Discovery》

  • https://posts.specterops.io/automating-dll-hijack-discovery-81c4295904b0

《Hijacking DLLs in Windows》

  • https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows

不怕被大家笑话,我现在产出少了就会慌,看着其他师傅们每月各种致谢,动不动几十万刀的Bounty,说不羡慕是不可能的

所以手里有一些闲置计算资源的时候就会弄一些Fuzzer跑跑,万一就踩中了一个RCE呢?

我其实不是很喜欢DLL劫持这样的漏洞,我喜欢那种利用系统服务提供的接口,通过低权限进程给高权限进程发消息执行一些非预期行为

《CVE-2020-7454: KILLING TWO BIRDS WITH ONE BUG IN LIBALIAS》

  • https://www.thezdi.com/blog/2020/6/29/cve-2020-7454-killing-two-systems-with-one-bug-in-libalias

libalias是一个第三方库,用来给IP包进行aliasingde-aliasing,CVE-2020-7454存在于函数AliasHandleUdpNbtNS(),它会获取一个pmax字段,该字段直接根据偏移从数据包内获取

AliasHandleUdpNbtNS(...) 
{
    /* ... snip ... */
    /* Calculate data length of UDP packet */ 
    uh = (struct udphdr *) ip_next(pip); 
    nsh = (NbtNSHeader *) udp_next(uh); 
    p = (u_char *) (nsh + 1); 
    pmax = (char *)uh + ntohs(uh->uh_ulen); /* <--- (1) */  
    
    /* ... snip ... */
    if (ntohs(nsh->ancount) != 0) { 
        p = AliasHandleResource(ntohs(nsh->ancount), (NBTNsResource *) p, pmax, &nbtarg); 
    } 
    /* ... snip ... */
}

然后pmax传入AliasHandleResource()

AliasHandleResource(..., char *pmax, ...) 
{ 
    /* ... snip ... */
        switch (ntohs(q->type)) { 
        case RR_TYPE_NB: 
            q = (NBTNsResource *) AliasHandleResourceNB(q, pmax, nbtarg); 
            break; 
    /* ... snip ... */ 
}

再传入AliasHandleResourceNB()(2)循环判断的时候没判断pmax长度,导致(3)越界访问了,(4)还可以越界写

AliasHandleResourceNB(..., char *pmax, ...) 
{ 
    /* ... snip ... */
    while (nb != NULL && bcount != 0) { 
        if ((char *)(nb + 1) > pmax) { /* <--- (2) */
            nb = NULL; 
            break; 
        } 
        if (!bcmp(&nbtarg->oldaddr, &nb->addr, sizeof(struct in_addr))) { /* <--- (3)  /
            /* ... snip ... */ 
            nb->addr = nbtarg->newaddr; /* <--- (4) */
        } 
        /* ... snip ... */
        nb = (NBTNsRNB *) ((u_char *) nb + SizeOfNsRNB); 
    } 
}

ZDI这个代码标识非常漂亮,该省的省,清晰明了,我要好好学习一下

《FANS: Fuzzing Android Native System Services via Automated Interface Analysis》

  • https://www.usenix.org/system/files/sec20fall_liu_prepub.pdf

接下来我搞一下Android的系统服务,大概的研究方式和大佬是类似的,不过我不是去Fuzz,而是找到所有的接口之后,去做路径搜索,找一些敏感的行为操作,这个路径搜索可以参考k0师傅之前写过的一篇文章《A SIMPLE STORY OF DSSVC, “LIVE AND DIE”》

  • https://whereisk0shl.top/post/a-simple-story-of-dssvc

Always k0shl!

我也写了一个类似Jandroid的工具,可惜F-Secure那群人已经发了,我的就不开源了

最后推荐一篇奇安信的文章《“道贼”SDK:揭秘操控数百万Android手机的恶意营销插件》,对门的报告输出能力确实很好

  • https://mp.weixin.qq.com/s/zjG3zlJo1dSSb2mjY9QxDA

我一直想搞一个像这种样本大数据监控的系统,后面的扫描引擎实现难度其实不大,基于经验编写规则即可

我目前遇到的一个难点在于不知道如何建立一个大数据搜索系统

比如现在有一百万个应用,我需要先对其进行规则扫描,这个规则扫描可以基于很多方式,尽可能的获取其行为,并且做好存储

然后对扫描出来的数据做大数据分析,比如关键函数调用,对同一个执行路径做归类

以下面这个举例,我们可以搜索出大量拥有类似调用路径的不同SDK

com.evil.sdk.a.b.c->a()->b()->loadLibrary()

再对每一个SDK进行深入分析,比如数据流分析,看加载的文件来自哪里,从本地解密释放的,还是从服务器动态下载的

或者可以把包含同一个SDK的应用进行批量动态分析,补充动态行为,尤其是加载的插件行为

以上这一段只是我个人的想法,跟业界大佬们成熟的实现方案相比只是一个没牌面的玩具,如果有机会可以真正参与玩一把,我还是很乐意的

我不是想加入国家队,我喜欢自由,每天九点上班六点下班那种

最近股市行情不错,跑步入场吧