[转载]DEVCORE 红队的进化,与下一步

[转载]DEVCORE 红队的进化,与下一步

Scroll Down

前言

    「红队演练」近年来渐渐开始被大家提及,也开始有一些厂商推出红队服务。不过关于在台湾红队是怎么做的就比较少人公开分享,身为第一个在台湾推红队演练的公司,我想就根据这两年多来的实战经验,分享为什么我们要做红队、我们面临到的问题、以及在我们心中认为红队成员应该具备的特质。最后再分享我们现阶段看到的企业资安问题,期望未来我们也可以透过红队演练来帮助企业补足那些问题。

   这一篇是我在DEVCORE Conference 2019所分享的主题。研讨会事前调查想听内容时有些朋友希望我们能介绍DEVCORE的红队,还有运作方式和案例,所以我抽出一些素材整理成这场演讲。下面是投影片连结,其中有些内部系统画面不对外公开,仅在研讨会分享敬请见谅。

DEVCORE 红队的进化,与下一步- Shaolin (DEVCORE CONF 2019)

为什么要红队演练?

    一言以蔽之,就是我们渐渐体会到:对大企业而言,单纯的渗透测试并不是最有效益的。从过去上百次渗透测试经验中,我们往往能在专案初期的侦查阶段,发现企业边界存在严重弱点,进而进入内网绕过层层防御攻击主要目标。越是庞大的企业,这种状况会越明显,因为他们通常有很多对外的网站、网路设备,每一个都可能是风险,即使主要网站防护很完备,骇客只需要从这么多目标中找到一个问题,就可以对企业造成伤害。今天就算企业对每个服务都独立做了一次渗透测试,在真实世界中,还是有可能从第三方服务、厂商供应链、社交工程等途径入侵。所以有可能投注很多资源做测试,结果还是发生资安事件。

    于是,我们推出了红队演练,希望透过真实的演练帮助企业找到整体架构中脆弱的地方。因此,这个服务关注的是企业整体的安全性,而不再只是单一的网站。

    红队演练目标通常是一个情境,例如:骇客有没有办法取得民众个资甚至是信用卡卡号?在演练过程中红队会无所不用其极的尝试验证企业在乎的情境有没有可能发生。以刚刚的例子来说,我们会想办法找到一条路径取得存放这些讯息的资料库,去验证有没有办法取得个资及卡号。一般来说,卡号部分都会经过加密,因此在拿下资料库后我们也会尝试看看有没有办法还原这些卡号。有时候除了找到还原的方法,我们甚至会在过程中发现其他路径可取得卡号,可能是工程师的debug 资讯会记录卡号,或是备份档在NAS 里面有完整卡号,这些可能是连资安负责人都不知道的资讯,也是企业评估风险的盲点。

    到这边,红队演练的效益就很明显了,红队能协助企业全盘评估潜在的重大风险,不再像过去只是单一面向的测试特定网站。除了找到弱点,红队更在乎帮企业验证入侵的可行性,方便企业评估风险以及拟定防御策略。最后,红队往往也能够在演练过程当中找出企业风险评估忽略的地方,例如刚刚例子提到的备份NAS,就可能是没有列入核心系统但又相当重要的伺服器,这一块也是DEVCORE这几年来确实帮助到客户的地方。

DEVCORE 红队的编制

    基本上,DEVCORE 的红队成员都是可以独当一面的,在执行一般专案时成员间并没有显著差异。但在演练范围比较大的状况下,就会开始有明显的分工作业,各组也会专精技能增加团队效率。目前我们的编制共分为五组:

简单介绍职责如下:

  • Intelligence (侦查),负责情报侦查,他们会去收集跟目标有关的所有资讯,包括IP 网段、网站个别使用的技术,甚至是泄漏的帐号密码。
  • Special Force (特攻),有比较强大的攻击能力,主要负责打破现况,例如攻下第一个据点、拿下另一个网段、或是主机的提权。
  • Regular Army (常规),负责拿下据点后扫荡整个战场,尝试横向移动,会尽量多建立几个据点让特攻组有更多资源朝任务目标迈进。
  • Suppert (支援),重要的后勤工作,维持据点的可用性,同时也要观察记录整个战况,最清楚全局战况。
  • Research (研究),平时研究各种在红队中会用到的武器,演练时期碰到具战略价值的系统,会投入资源开采0-day。

DEVCORE 红队的进化

    所谓的进化,就是碰到了问题,想办法强化并且解决,那我们遇到了哪些问题呢?

如何找到一个突破点?

    这是大家最常碰到的问题,万事起头难,怎么样找到第一个突破点?这个问题在红队演练当中难度会更高,因为有规模的企业早已投入资源在资安检测和防护上,我们要怎么样从层层防御当中找到弱点?要能找到别人找不到的弱点,测试思维和方法一定要跟别人不一样。于是,我们投入资源在侦查、特攻、研究组:侦查部分研究了不同的侦查方法和来源,并且开发自己的工具让侦查更有效率;我们的特攻组也不断强化自己的攻击能力;最重要的,我们让研究人员开始针对我们常碰到的目标进行研究,开发红队会用到的武器或技巧。

    这边特别想要分享研究组的成果,因为我们会去开采一些基础设施的0-day,在负责任的揭露后,会将1-day用于演练中,这种模式对国外红队来说算是相当少见。为了能帮助到红队,研究组平时的研究方向,通常都是找企业外网可以碰到的通用服务,例如邮件伺服器、Jenkins、SSL VPN。我们找的弱点都是以不用认证、可取得伺服器控制权为优先,目前已公开的有:Exim、Jenkins、Palo Alto GlobalProtect、FortiGate、Pulse Secure。这些成果在演练当中都有非常非常高的战略价值,甚至可以说掌控了这些伺服器几乎就能间接控制企业的大半。

而这些研究成果,也意外的被国外所注意到:

  • PortSwigger连续两年年度十大网站攻击技术评选冠军( 2017 , 2018 )
  • 连续三年DEFCON & Black Hat USA发表( 2017 , 2018 , 2019 )
  • 台湾第一个拿到PWNIE AWARD奖项:Pwnie for Best Server-Side Bug (年度最佳伺服器漏洞) ( 2018入围 , 2019得奖 )

目标上万台,如何发挥红「队」效益?

    前面靠了侦查、特攻、研究组的成果取得了进入点。下一个问题,是在我们过去的经验中,有过多次演练的范围是上万台电脑,我们要怎样做才能发挥团队作战的效益呢?会有这个问题是因为数量级,如果范围只有十个网站很容易找目标,但是当网站变多的时候,就很难标注讨论我们要攻击的目标。或是当大家要同步进度的时候,每个人的进度都很多,很难有个地方分享伺服器资讯,让其他人能接续任务。

    过去我们使用类似Trello 的系统记录每台伺服器的状况,在范围较小的时候很方便好用,但是当资料量一大就会显得很难操作。

    因此,我们自行开发了系统去解决相关问题。分享一些我们设计系统的必要原则供大家参考:

  • 伺服器列表可标签、排序、全文搜寻,火力集中的伺服器必须要自动在显眼处,省去额外搜寻时间。
  • 要可自动建立主机关系图,方便团队讨论战况。
  • 储存结构化资讯而非过去的纯字串,例如这台机器开的服务资讯、拿shell 的方式、已渗透的帐号密码。方便快速厘清目前进度以及事后分析。
  • 建立shell 主控台,方便成员一键取得shell 操作。

    另外还有一个问题,红队成员这么多,战场又分散,如果想要把我们做过的测试过程记录下来,不是会很复杂吗?所以我们另外写了plugin 记录web 的攻击流量、以及记录我们在shell 下过的指令和伺服器回传的结果,这些记录甚至比客户的access_log 和bash_history 还详细。此外,针对每个目标伺服器,我们也会特别记录在上面所做过的重要行为,例如:改了什么设定,新增或删除了什么档案,方便我们还有客户追踪。要做这样的客制化记录其实是很繁琐的,对那些习惯于自动化解决事情的骇客更是,但我们就是坚持做好这样的纪录,即使客户没有要求,我们还是会详实记录每个步骤,以备不时之需。

企业有防御设备或机制?

    解决了突破点和多人合作的问题,接下来我们面临到第三个问题,企业有防护措施!在研讨会中我举了几个较客制的真实防御案例,说明我们除了常见的防御设备外也拥有很多跟防御机制交手的经验。我们会研究每种防御的特性加以绕过或利用,甚至会写工具去躲避侦测,最近比较经典的是团队做了在Windows 伺服器上的Web shell,它可以做到WAF 抓不到,防毒软体抓不到,也不会有eventlog 记录,利用这个工具可以无声无息收集伺服器上我们需要的资料。当然,我们不是无敌的,一些较底层的侦测机制还是会无法绕过。这边我直接讲我们进化到目前的准则:在面对伺服器防御机制,我们能隐匿的,一定做到绝对的隐匿,无法躲的,就把流程最佳化,缩短做事情的时间,例如控制在五分钟内提权拿到关键资料,就算被别人抓到也没关系,因为该拿的资料也拿到了。

红队成员应具备的特质

    要能够在红队演练中有突出成果,我觉得成员特质是满关键的一个点。以下整理了几个我从我们红队伙伴观察到的特质跟大家分享,如果将来有打算从事红队工作,或是企业已经打算开始成立内部红队,这些特质可能可以作为一些参考。

想像力

    第一个是想像力,为什么会提这个特质,因为现在资安意识慢慢强化,要靠一招打天下是不太有机会的,尤其是红队演练这么有变化的工作。要有成果一定要巧妙的组合利用或是绕过才有机会。

    直接举个例子,我们在公布Pulse Secure VPN的研究细节后,有人在twitter上表示那个关键用来RCE的argument injection点之前他有找到,只是无法利用所以官方也没有修。确实我们找到的地方相同,不过我们靠想像力找到了一个可利用参数并搭配Perl的特性串出了RCE。 另一个例子是Jenkins研究里面的一环,我们在绕过身分认证之后发现有一个功能是在检查使用者输入的程式语法正不正确。伺服器怎样去判断语法正不正确?最简单的方法就是直接去编译看看,可以编译成功就代表语法正确。所以我们研究了可以在『编译阶段』命令执行的方法,让伺服器在尝试判断语法是否正确的同时执行我们的指令。这个手法过去没有人提过,算是运用想像力的一个经典案例。

    关于想像力,其实还有一个隐藏的前提:基础功要够。我一直认为想像力是知识的排列组合,例如刚刚的两个例子,如果不知道Perl 语法特性和Meta-Programming 的知识,再怎么天马行空都是不可能成功RCE 的。有基础功再加上勇于联想和尝试,绝对是一个红队大将的必备特质。至于基础功需要到什么程度,对我们来说,讲到一个漏洞,心中就会同时跳出一个树状图:出现成因是什么?相关的案例、漏洞、绕过方式都会啵啵啵跳出来,能做到这样我想就已经是有所小成了。

追新技术

    会追新技术这件事情,似乎是资安圈的标配,我们的世界不只有OWASP TOP 10。更现实的说法是,如果只靠这么一点知识,在红队演练能发挥的效果其实并不大。分享一下我看到成员们的样子,对于他们来说,看新技术是每天的习惯,如果有资安研讨会投影片释出,会追。新技术里有兴趣的,会动手玩,甚至写成工具,我们很多内部工具都是这样默默补强的。还有一点,看新技术最终目的就是要活用,拿新技术解决旧问题,往往有机会发现一些突破方式。例如我们在今年八月BlackHat研讨会看到了HTTP Desync的攻击方式,回国之后马上就把这个知识用在当时的专案上,让我们多了一些攻击面向!(这个手法挺有趣的,在我们污染伺服器后,随机一个人浏览客户网页就会执行我们的JavaScript,不需要什么特殊条件,有兴趣可以研究一下:p )

相信…以及坚持

    最后一点,我想分享的是:在研究或者测试的过程当中,有时候会花费很多时间却没有成果,但是如果你评估是有机会,那就相信自己,花时间做下去吧!     我们有一个花费一个月的例子,是之前破解IDA Pro伪随机数的研究,这个事件意外在binary圈很有名,甚至还有人写成事件懒人包。这个研究是在探讨如果我们没有安装密码,有机会安装IDA PRO吗?结果最后我们想办法逆推出了IDA密码产生器的算法,知道伪随机数使用了哪些字元,和它的正确排序。这件事情的难度已经不只在技术上,而在于要猜出伪随机数使用的字元集顺序,还要同时猜出对方使用的演算法(至少有88种)。而且我们每验证一种排列组合,就会花半天时间和100GB的空间,累积成本满高的。但我们根据经验相信这是有机会成功的,并且投注资源坚持下去,最后有了很不错的成果。

    这里不是在鼓励一意孤行,而是一种心理素质:是在面临卡关的时候,有足够的判断力,方向错误能果断放弃,如果方向正确要有坚持下去的勇气。

资安防护趋势与红队的下一步

    文章的最后一部分要谈的是红队演练的未来,也是这篇文章的重点,未来,我们希望可以解决什么问题?

    做为红队演练的领导厂商,从2017 年演练到现在我们进入台湾企业内网的成功率是100%。我们在超过六成的演练案中拿到AD 管理权限,这还不含那些不是用AD 来管理的企业。我们发现进入内网后,通常不会有什么阻碍,就好像变成内部员工,打了声招呼就可以进机房。想要提醒大家的是:对顶尖攻击团队而言,进入企业内网的难度并不高。如果碰上顶尖的骇客,或是一个0day,企业准备好了吗?这就是现阶段我们所发现的问题!

    在说到抵御攻击通常会有三个面向,分别是「预防」、「侦测」和「回应」。一般而言企业在「预防」这部份做的比较完善,对于已知的弱点都有比较高的掌握度。今天普遍的问题在「侦测」和「回应」上,企业能不能发现有人在对你进行攻击?或是知道被攻击后有没有能力即时回应并且根绝源头?这两件事情做得相对不好的原因并不是企业没有投入资源在上面,而是对于企业来说太难验证,很难有个标准去确定目前的机制有没有效或是买了设备有没有作用,就算有蓝队通常也没有建立完善的应对SOP,毕竟骇客入侵不会是天天发生的事情。

    所以,我们希望企业能从红队演练中,训练对攻击事件的侦测和反应能力。或是说,红队演练的本质就是在真实的演练,透过攻防帮助企业了解自己的弱项。过去台湾的红队服务都会强调在找出整个企业的弱点,找出漏洞固然重要,但碰到像我们一样很常找到0-day的组织,有侦测和回应能力才是最后能救你一命的硬技能。换个角度来看,目前世界上最完整的攻击战略和技术手法列表是MITRE ATT&CK Framework,一个对企业有伤害的攻击行动通常会是很多个攻击手法所组成的攻击链,而在这个Framework中,找到起始弱点这件事情仅占了整个攻击链不到一成,企业如果能够投注在其他九成手法的侦测能力上并阻断其中任一环节,就有机会让整个攻击行动失败而保护到资产。

    要说的是,我们红队演练除了找出企业漏洞能力顶尖之外,也累积了很丰富的内网渗透经验及技巧,我们很乐意透过演练协助企业加强真实的侦测和回应能力。渐渐的,未来红队会慢慢着重在和蓝队的攻防演练。会强调拟定战略,让企业了解自己对哪些攻击的防御能力比较弱,进而去改善。未来的红队也更需要强调与防御机制交手的经验,了解防御的极限,才有办法找到设备设定不全或是涵盖率不足的盲点。

    最后我们也有些规划建议给对资安防御比较成熟的企业如下,逐步落实可以将资安体质提升一个层次。(至少从我们的经验来看,有这些概念的企业都是特别难攻击达成目标的)

  • 如果外网安全已投资多年,开始思考「如果骇客已经在内网」的防御策略
  • 盘点出最不可以被泄漏的重要资料,从这些地方开始奉行Zero Trust概念
  • 企业内部需要有专职资安人员编制(蓝队)
  • 透过与有经验的红队合作,全盘检视防御盲点

后记

    研讨会内容到这边就结束了。写在最后的最后,是充满着感谢。其实无论渗透测试还是红队演练,在一开始都不是人人可以接受的,而测试的价值也不是我们说了算。一路走来,渐渐渐渐感受到开始有人相信我们,从早期比较多测试时与工程师和网管人员的对立,到近期越来越多open mind、就是想找出问题的客户,是满大的对比。非常感谢他们的信任,也因为这样的互信,我们得以节省时间完成更棒的产出。满乐见台湾资讯产业是这样正向面对问题,漏洞存在就是存在,不会因为视而不见而真的不见,意识到有问题解决了就好。所以我在演讲最后留下这样一句:『红队演练的精髓不是在告诉你有多脆弱,在于真正坏人闯入时你可以独当一面挡下』,希望越来越多人能正面对待问题,同时也传递我们想要做到的价值。

2019 DEVCORE CONF,谢谢过去合作的朋友们参与让DEVCORE 红队得以进化,希望下一步也能有你,我们明年见:)