在我们考取 ICS 的认证之后,是需要通过 CPE(Countinuing Professional Education) 来进行证书的维持的。以 CISSP 为例,3年是需要 120 CPE 来进行证书的维持的。官方的文档已经详细说明了获取 CPE 的各种途径,如果按照官方的说明,满足要求的难度是比较低的。我在取得 CISSP 认证之后,不到一年的时间已经获得 98 CPE 了,距离要求已经很接近了。所以就分享自己一些获取 CPE 的手段来进行分享。
Webinars # 基本上是一些讲座或者分享之类的,听一次基本都可以获取一个 CPE。而且现在目前 ISC 上面大多数在线的会议或者课程学习,如果可以获取 CPE 的话,你只要填了你的 ID 的话,过一段时间就会帮你自主申报,不需要你自己来申报的。不过这种在线分享,一般很多没有在线字幕,而且内容也比较杂,所以我就听说一两次,不是特别的感冒。我自己的话不是特别推荐,虽然说这是获取 CPE 的手段之一,但好歹自己也在这个过程中学点东西,这样也更有价值。
Professional Development Institute # 这是我最为推荐的部分。在 PDI 里面提供了各种各样的课程,这些课程一般是英文为主,涉及的方向也比较多,比如应用安全、安全运营之类的,制作一般都比较精良。虽然里面的内容大多数都是偏理论的居多,但是如果拿去写材料什么的还是比较好的。课程可能会随着内容的多少,其 CPE 分值也不相同,有的 5 分,有的可能只有 1 分。不过这些课程都需要经过考试的,基本上分数达到 70% 以上就可以过关了。
其它 # 其它像回答 InforSecurity Professional 杂志上面的 quiz 也可以去获取 CPE 的,不过我觉得还挺麻烦的,因为答案可能还不太好找。参加一些安全会议也是可以获取 CPE 的。另外值得分享的是,参加 ISC 的一些志愿活动也是可以获取 CPE 的。我有次参加了一次志愿活动,一共持续了 3 天,一次性给了 21 个 CPE,还是比较多的。
原文:Vulnerability Management for Go
译者:madneal
welcome to star my articles-translator, providing you advanced articles translation. Any suggestion, please issue or contact me
LICENSE: MIT
我们很高兴地宣布 Go 对漏洞管理的新支持,这是我们帮助 Go 开发人员了解可能影响他们的已知漏洞的第一步。
这篇文章概述了当前可用的内容以及该项目的后续计划。
概述 # Go 提供工具来分析你的代码库来发现已知漏洞。该工具由 Go 漏洞数据库提供支持,该数据库由 Go 安全团队规划。Go 的工具通过仅显示代码实际调用的函数中的漏洞来减少结果中的噪音。
Go 漏洞数据库 # Go 漏洞数据库 (https://vuln.go.dev) 是有关公共 Go 模块中可导入包中已知漏洞的综合信息源。
漏洞数据来自现有来源(例如 CVE 和 GHSA)以及来自 Go 包维护者的直接报告。Go 安全团队会审查这些信息并将其添加到数据库中。
我们鼓励包维护者在他们自己的项目中提供有关公共漏洞的信息,并更新其 Go 包中漏洞的现有信息。我们的目标是使报告过程成为一个非常容易的过程,因此请向我们反馈任何改进的建议。
Go 漏洞数据库可以在浏览器中的 pkg.go.dev/vuln 中查看。 有关数据库的更多信息,请参阅 go.dev/security/vuln/database。
使用 govulcheck 检测漏洞 # 新的 govulncheck 命令是一种低噪音、可靠的方式,让 Go 用户了解可能影响他们项目的已知漏洞。 Govulncheck 分析你的代码库并仅根据代码中的哪些函数传递调用易受攻击的函数来发现实际影响你的漏洞。 要开始使用 govulncheck,你可以从项目中运行以下命令:
本文首发于安全客平台,https://www.anquanke.com/post/id/266237
笔者作为某公司的安全开发独自一人负责安全运营平台的开发,经过数个月的折腾以及其他安全同学的合作,目前该平台已经运营了几百个安全漏洞以及一些安全事件,其它一些安全能力也在慢慢地接入中。在之前的公司,笔者也是作为安全工程师负责平台架构部门的安全运营,当时我们也有几个开发来负责安全运营平台的开发。安全运营平台其实可以作为一个公司偏向应用安全的基建之一,或许可以将它看做偏向于应用安全的 SIEM。所以,基于本文,也想分享一下在安全运营平台建设和开发的过程中的经验。在整个建设过程,开发工作只是一部分,体系的建设和实现也不可或缺,所以很多做法也是需要结合公司的实际情况,并一定就能够完全通用。
开发 # 安全运营平台的开发技术选型其实和其它后台业务类型的系统并不会有太大的区别。目前大多数应用系统都是采用前后端分离的方式,前端大多数是类似于 vue-admin 类型的技术方案。后端框架见仁见智,选择适合内部开发的语言即可。笔者之前最早实习的时候就是干前端开发的,后来干安全也是经常会写安全工具的代码,所以常用的语言也是都略懂一些,所以也就扛起了这个平台的开发工作。
最初的技术选型是想选择 gin-vue-admin,这是个前后端分离方案。后端基于 go 的 gin 框架,前端是和 vue-admin 比较类似的前端方案。这个轮子用起来不错,有很多开箱即用的功能,权限方面管理也非常方便。不过最终还是没有采取这个方案,因为内部的大多数应用都是基于内部自研的 go 微服务框架,其部署运维也与该方案息息相关。如果不使用内部的框架在部署方面则会麻烦很多,考虑到后期的运维,最终还是选择了基于内部的微服务框架开发。不过,这样做的最大的问题就是学习成本,因为这个内部框架与外部的 web 框架差异较大,而且作为安全的唯一开发也是两眼一抹黑,只能跟在开发大佬后面跪舔,才慢慢把应用的雏形搭建起来。前端框架比较简单,主要是基于 element 的 Vue 框架。
其实在开发过程中要说技术难度有多大也不见得,和其它的业务系统其实没有太大的区别。主要就是各种和头发丝一样琐碎细小的业务需求,所以开发过程就好比把这些头发丝一根根捡起来捋直了,所以有时候也是比较痛苦的过程。前端的用户体验和设计也是痛点之一,本身安全在开发就比较缺乏,尤其是设计方面。不过安全运营平台主要面向的也是内部的用户,主要就是安全工程师和开发,所以和面向外部客户的应用相比,要求也会稍微低一点。
需求建设 # 对于安全运营平台的大致规划是按照下面的框架来进行划分的,大多数公司的安全运营平台也会比较类似。安全运营平台的核心是应用安全的运营,漏洞管理作为安全运营平台的核心之一,也往往是安全运营平台被开发所熟知的方面之一。另外一方面就是集成各种安全工具的数据,包括像扫描工具,包括 SAST 以及 DAST 的扫描,将这些数据能够转换成实际的漏洞来推动。
漏洞管理 # 漏洞管理作为安全运营平台的最基础的一方面,同时也是其核心。漏洞的本质其实也是一个 bug,只不过它被赋予了安全这一属性,摇生一变被称为漏洞。那么漏洞自然就和开发日常处理的 bug 会稍微有一些不同。Bug 的处理流程相对来说会简单一点,测试把 bug 提给开发,开发确认之后修复完成,测试验证通过就可以了。安全漏洞的处理过程其实也是基于这一个过程的演化,这也是因为安全漏洞的特殊性,安全漏洞是一种特殊的 bug。一方面,安全漏洞的机密性要求更高,漏洞的可见范围越小越好,一般仅限定为要处理的人及它的直属领导,而不是任意一个人都可以查看漏洞,这样也是为了避免万一有人通过漏洞信息来进行利用。另外一方面,漏洞的处理流程相对来说会更复杂一点。在现实业务中,可能会有各种各样的场景。正常来说,一个应用应该具备测试环境、UAT 环境、生产环境。漏洞应该在之前的环境中被验证通过后,再进行下个环境的验证,这样的好处也是避免一开始就没有修复,导致返工,也降低了风险。但是往往也有不少应用并不同时都有这些环境,比如第三方采购的应用,一般都没有前两个环境,大多数是布在生产上的。也有的应用可能也没有 UAT 环境,就只有测试环境和生产环境。我们的做法是有提供两种模式给开发选择,开发可以选择默认模式,则这三种环境都有,开发也可以选择不带 UAT 环境的。针对于只有一种环境,我们的做法是把主动权交给安全工程师,安全工程师在复测完成后可以直接关闭漏洞,不过这个的弊端就是有时候安全工程师忘记直接关闭这个漏洞。
漏洞在被确认之前可能还有一些例外情况,包括像漏洞的忽略以及漏洞的接受。漏洞的忽略主要是漏洞的一些误报,这个主要是安全工程师可能对于业务有些了解还不充分导致的一些信息差,另外还有就是有些漏洞可能就是正常的业务需求。漏洞的接受则是这的确是一个漏洞,但往往漏洞修复非常困难,或者漏洞修复对业务的影响非常大,但是漏洞的危害程度没有达到高危及以上的那种程度。其实对于这种情况一般有两种处理,一种就是安全把漏洞提给开发,但是开发就是不太愿意修复这个漏洞,这个漏洞状态就一直保持着,如果哪天开发憋不住了,或者状态场景发生了变化,他们就完成了这个漏洞的修复。另外一种情况就是业务方接受漏洞并且不修复,这种可以理解为风险接受。其实在 CISSP 中的风险管理中就有这样的概念,如果采取安全措施的代价大于资产的实际价值,那么业务方可以选择接受风险。不过对于这种情景,是需要经过业务方领导的审批,确保业务方能够明确意识到这个漏洞潜在的风险。
漏洞另外一个重要的内容就是和资产的联动。一个成熟的 cmdb 对于安全来说真的太重要了。因为这可以帮助安全迅速的定位到明确的责任人,从而确保漏洞的及时修复,其实这也涵盖其它的安全内容,包括像安全事件,甚至在安全应急响应中,好的 cmdb 对于安全来说真的非常重要。不过,安全往往不是作为 cmdb 的第一责任人,一般 cmdb 的运维职责是落在运维方,安全起到的作用是反馈和治理。安全在使用数据的过程中,及时反馈,从而帮助数据修正,这样达到一个良性进化的过程。
事件管理 # 事件管理和漏洞管理也不太相同,所以事件管理的流程会被单独作为另外一个流程来进行管理。事件不同于漏洞,它往往也没有上文提到的各种的环境。事件的处理往往也是一个点对点的过程,安全工程师确认了安全事件,将事件上报给对应的处理人,处理人处理完毕,安全工程师验证没有问题,安全事件就可以关闭了。目前的安全事件的功能还是比较弱化的,主要还是用于事件的处理流程。不过未来事件流程最重要的方面是和其它安全平台的对接,包括与 SIME、IDS 等安全产品对接,并且能够将事件直接分发给对应的处理人,提高事件的处理效率。
安全能力 # 作为安全运营平台,SAST 以及 DAST 也是作为应用安全重要的补充能力。SAST 以及 DAST 市面上都有很多成熟的产品,也有很多公司采取自研方案。对于这两种产品最重要的能力就是数据的打通,如何将这两种产品扫描出来的漏洞直接转化为实际有效的漏洞。前期对于这种漏洞比较好的处理方式,可能是先同步数据,然后安全运营平台作为一个审核平台,这些数据经过安全工程师的审核和加工,有效的数据将转化为漏洞进行上报。另外一个重要的方面就是组件成分分析,这也是近几年非常火的一个概念。因为目前的软件开发都是大概率依赖于第三方组件,不管是商业的还是开源的、前端的、后端的以及各种语言的,这些组件的风险都有可能会对你自己应用带来风险。做好应用的组件分析,知道应用的依赖关系,能够快速地在紧急安全漏洞爆发初做到较快的响应处置。当然,这些都建立在资产都能够与这些信息打通的基础上,这样才能做联动响应,根据资产去盘点漏洞,同时也能够根据漏洞去看哪些资产受影响。
GShark has beem maintained for alomost two years as an open source sensitive infomation detection tool. This tool is utilized in my own company and sparetime, multi information sensi
GShark 作为一款开源的敏感信息监测工具其实差不多维护也有两年多的时间。这款产品其实笔者在自己的公司或者平常都在使用,也通过这个工具发现多多起内部的信息泄露事件以及外部的一些的信息泄露事件。其实这种类似的开源工具数不胜数,大家的核心功能其实就是监控 Github 上面的信息,但是笔者要想把这种产品做得更好一点,就要从功能性、易用性角度来做进一步拓展。最近,对 GShark 做了较大的重构,前后端都完成了比较大的重构,之前老的版本也有写过文章介绍,所以关于这个工具的起源就不多介绍了,主要对这次重构和新的架构做介绍。
架构 # 目前 GShark 已经是一个前后端分离的项目,之前因为前端通过后端模板直接渲染的,所以在前端的功能性以及美观性都会差很多。新的重构是基于 gin-vue-admin,技术栈是后端通过 gin 实现,前端通过 vue-elemment 来实现。
所以架构主要就分为前端和后端两个部分,而后端则分为 web 服务以及敏感信息的扫描服务。新的架构具有以下特点:
细粒度的权限控制,更好的安全性,包括菜单的权限设置以及 API 的权限设置 丰富的前端功能,CRUD 更简单 搜索源和之前保持一致,支持 github, gitlab 以及 searchcode 部署 # 之前就有想使用 GShark 的同学来和我反映,其实之前的编译就已经很简单了。但是因为有些人不太熟悉 go,所以觉得编译还是有一些问题。这一次,笔者专门写了一个脚本来发布三个操作系统下的工具包,所以直接使用即可,开箱即用,即使你不安装 go 也无所谓。
rm -rf ./releases/* cd web npm run build cd ../ # build for mac cd server GOOS=darwin GOARCH=amd64 go build cd ../releases mkdir gshark_darwin_amd64 cd gshark_darwin_amd64 mv ../../server/gshark . cp -rf ../../server/resource . cp ../../server/config-temp.yaml config.yaml cd ../../ cp -rf ./web/dist ./releases/gshark_darwin_amd64 7z a -r ./releases/gshark_darwin_amd64.zip ./releases/gshark_darwin_amd64/ # build for windows cd server GOOS=windows GOARCH=amd64 go build cd ../releases mkdir gshark_windows_amd64 cd gshark_windows_amd64 mv ../../server/gshark.exe . cp -rf ../../server/resource . cp ../../server/config-temp.yaml config.yaml cd ../../ cp -rf ./web/dist ./releases/gshark_windows_amd64 7z a -r ./releases/gshark_windows_amd64.zip ./releases/gshark_windows_amd64/ # build for linux cd server GOOS=linux GOARCH=amd64 go build -o gshark cd ../releases mkdir gshark_linux_amd64 cd gshark_linux_amd64 mv ../../server/gshark . cp -rf ../../server/resource . cp ../../server/config-temp.yaml config.yaml cd ../../ cp -rf ./web/dist ./releases/gshark_linux_amd64 7z a -r ./releases/gshark_linux_amd64.zip ./releases/gshark_linux_amd64 rm -rf ./releases/gshark*/ 这个是 build 的脚本,主要是实现跨平台的编译并且将前端文件夹打包进去,然后拿到这个安装包解压即可使用。目前 GShark 的发布应该只需要两个前提条件:
近几年由于 Github 信息泄露导致的信息安全事件屡见不鲜,且规模越来越大。就前段时间华住集团旗下酒店开房记录疑似泄露,涉及近5亿个人信息。后面调查发现疑似是华住的程序员在 Github 上上传的 CMS 项目中包含了华住敏感的服务器及数据库信息,被黑客利用导致信息泄露(这次背锅的还是程序猿)。
起源 # 对于大型 IT 公司或者其他行业,这种事件发生的概率实在是太常见了,只不过看影响的范围。现在大家看到的,也仅仅只是传播出来的而已。企业没办法保证所有人都能够遵守规定不要将敏感信息上传到 Github,尤其是对于那种特别依赖于外包的甲方企业,而甲方的开发人员也是一无所知,这种事件发生也就是司空见惯了。
废话说了一大通(可能是最近看安全大佬的文章看多了),终于要介绍一下我的这个项目,GShark。这个工具主要是基于 golang 实现,这也是第一次学习 golang 的项目,结合 go-macron Web 框架实现的一个系统。其实最初我是看到小米安全开源的 x-patrol 项目。网上这种扫描 Github 敏感信息的工具多如皮毛,我看过那种 star 数上千的项目,感觉实现方式也没有很好。因为说到底,大家都是通过 Github 提供的 API 结合相应的关键字来进行搜索的。但是,x-patrol 的这种实现方式我觉得是比较合理的,通过爬虫爬取信息,并对结果进行审核。所以,最初我是一个 x-patrol 的使用者。使用过程中,也遇到过一些问题,因为这个库似乎就是小米的某个固定的人维护的,文档写的不是特别清晰。中间我有提过 PR,但都被直接拒绝掉了。后来,我就想基于 x-patrol 来实现一套自己的系统,这也就是 GShark 的来由了。目前,这个项目与 x-patrol 已经有着很大的变化,比如移除了本地代码的检测,因为这个场景没有需求,其实我本身自己也实现了一个基于 lucene 的敏感信息检索工具。另外,将前端代码进行了梳理,并使用模板引擎来做模板的嵌套使用。基于 casbin实现基于角色的权限控制等等。
原理 # 讲完了起源,接着讲一讲这个系统的原理。基本上,这类工具都是首先会在 Github 申请相应的 token 来实现,接着通过相应的 API 来进行爬取。本项目主要是基于 Google 的 go-github。这个 API 使用起来还是比较方便的。通过这个 API 我们可实现在 Github 来进行搜索,其实这基本上等同于 Advanced Search。因为 API 提供的搜索能力肯定就是 Github 本身所具有的搜索能力。最基本的包括关键及,以及一些 owner 信息以及 star 数等等。
另外一点就是 Github 的搜索是基于 elasticsearch 的,因此也是支持 lucene 语法的。GShark 的黑名单过滤其实就是通过这个规则来实现的。