考证- AWS SAA-C03 学习笔记

要成为一个国际范的甲方安全工程师,熟悉基于AWS云的基础架构绝对是一个必要选择。让我们一步一步学习吧~

SAA:全名叫做 AWS Certified Architect – Associate(AWS认证架构师助理级)。以前考试内容叫做C02,现在叫做C03,具体区别不是太清楚。先关注C03的考试吧~

先来看看AWS的官方要求,备考主要分为四个大块,分别是:

1)Design Secure Architectures – 设计安全的架构 占比30%

2) Design Resilient Architectures – 设计带容灾的架构 占比26%

3) Design High-Performing Architectures – 设计高性能的架构 占比 24%

4)Design Cost-Optimized Architectures – 设计成本优化的架构 占比 20%

设计安全架构

任务1:设置安全访问AWS的基础设施

需要如下知识:

  • 跨账号的权限控制
  • AWS用作访问控制和身份认证的服务(eg: IAM, AWS SSO)
  • AWS全球的基础设施
  • AWS的安全最佳实践(eg:最低权限的原理)
  • AWS责任共担模型

需要技能:

  • AWS安全最佳实践 – IAM User/Root User MFA
  • 设计一个灵活的权限控制模型:包括IAM Users,groups,roles,policies
  • 设计一个基于权限的访问控制策略。(eg: AWS STS & 跨账号访问)
  • 决定为AWS资源设置设计合适的访问policie
  • 决定在IAM Role设置时候何时使用 Directory Service(组策略?)

Task2: 设计安全的负载和应用

需要知识:

  • 应用配置和证书安全
  • AWS 服务的Endpoint
  • 控制AWS上的端口、权限、网络流量
  • 加固应用访问途径
  • 选用合适的安全服务(eg: GuardDuty, Macle)
  • AWS 上的攻击向量

技能

  • 设计VPC的安全架构(eg: 安全组,路由表等)
  • 设计网络,给网络分段
  • 使用AWS自带的服务提升安全性(eg: waf, Shield, SSO)
  • AWS外部网络的安全(eg: VPN, AWS Direct Connect)

Task3: 数据安全的控制

知识:

  • 数据访问和治理
  • 数据恢复
  • 数据保留和分类
  • 加密和密钥管理

技能:

  • 使用AWS技术,满足合规需求
  • 使用数据加密(自动的),eg: AWS KMS
  • 使用数据加密(手动的),eg: ACM
  • 实现加密密钥的权限管理
  • 实现数据备份和副本
  • 实现数据的访问策略,生命周期,和保护
  • 实现密钥和证书的Renew

10-11搂一眼 CrowdStrike EDR

EDR: Endpoint Detect & Response. 基于端点的检测与响应,属于企业安全防护体系里的重要一环。CrowdStrike是全球EDR产品中的佼佼者。学习一下CrowdStrike在AWS的宣传白皮书。以加深对EDR在云端的主要卖点和部署方式。

材料链接:https://d1.awsstatic.com/Marketplace/solutions-center/downloads/CrowdStrike-Falcon-Discover-datasheet.pdf

云上挑战

1)资产可见行 : 发现所有账号使用的EC2,并将其纳入管理。

2)上下文:威胁分析时,需要终端信息。

3)一致性:IT架构复杂,EC2应当和传统服务器保持管理上的一致。

4)效率:安全团队事情太多了。

5)容易部署:如何融入DevOps流程中。

CrowdStrike 使用场景

1. 富化告警信息和上下文

提供终端侧的告警数据和VPC间的基于终端的信息。

2. 寻找未纳管EC2

CS 的Falcon Discover平台提供功能,可以支持跨AWS账号导入EC2资产,并提供各种检索条件。

3. 提高安全的视野

CS的Dashboard,提供所需的任何信息。

4. Review EC2的生命周期

其他的,在我看来的核心优势:

1) 和AWS云高度集成,这个很重要

我看到的几家私有化托管的EDR,主要还是Agent+带Dashboard Server的模式。如果在云中使用的话,这种可见行似乎是缺乏的,这个可以和乙方的同学再聊一下。

对甲方团队而言,如果引入这种不带资产管理的EDR设备,后续还有大量的适配工作要做,比如上面提到的对AWS机器的可见性和管理。国内是否有针对同类的EDR产品, 提供类似的云账号集成的功能?

我部署了EDR之后想收获什么?

1)资产管理&可见。和现在的网络资产可见类似。多少IP/多少域名,覆盖率如何。趋势如何。

2)终端信息收集。Agent定时任务、CPU占用率、运行进程、开放端口等基础信息。

3)风险发现。强大的、与时俱进的漏洞库,强的AV能力,强的告警能力。

4)阻断能力。自动解决掉一些高频安全风险,比如挖矿木马自动隔离,端口反弹自动kill进程等。

还有其他需求吗?等继续思考之后再补充,狗命要紧,洗漱睡觉去~

其他的遐想:

1)腾讯云主机安全有网络的告警列表,是基于Agent做的吗?其他的产品似乎大家都没有这个功能。如果大家都有这个功能,部署之后能否开放运营,基于流量在主机上做热补丁拦截?

2)数据可见行,能否开放全部数据到我们?拿到日志数据之后,日志数据的理解成本会不会很高?

10.09安全随想,我们需要什么样的安全产品?

最近从乙方跳槽到了甲方。开始从用户视角去接触一些安全产品,也有了机会去和多个乙方的厂商做产品的交流。

看到几个奇怪的现象,分别是:

1)乙方似乎确实存在产品过剩的问题:IAST的产品里竟然集成了镜像安全的功能。

2)产品的同质化高:以主机安全比如WAPP或者EDR为例,从大家的白皮书来看,基本看不出来差异化的亮点。

3)还是产能过剩:前司比较刻苦,投入了一些自身的安全专家左右互搏,攻防互促提(nei)升(juan)产品能力。但是这个功能对我们公司安全建设的现状来说,应该是用不上的。说明我们还亟需努力,补补上之前缺掉的功课。

又想起来在前司遛弯时候,云鼎的一个好伙计给我说的:“从甲方出来的一线员工其实很适合做安全产品的产品经理,因为他们知道客户真正想要什么”。想一想也很有道理,IAST里为什么要内置一个容器镜像安全的功能呢?

所以我给自己抛了一个命题:我们需要什么样的安全产品?如果能够花1~3年的时间,把这个问题想明白的话,我想我的市场竞争力也还是有的。

仰望星空,脚踏实地。现公司需要什么安全能力?我能做什么?做得最好能做成什么样子?我能做出来什么差异化的事情?(我艹,是不是内卷起来了)

也许应该找时间和新公司的同时聊一聊 努力工作和内卷的区别,听听大家的意见。

10.09(入职新公司day3)

毕业四年记

有些大佬半年就会写个复盘记录,锦旭这边比较落后,四年才写一次。忙中偷闲,周日下午远离老婆(没有孩子),跑到北京大兴郊区的一处咖啡馆,带上公司配发的高级锄头:搭配M1 Pro 32GB 内存 1TB SSD的Macbook,点了一杯超大杯冰美式,陷入了对往事的追忆。。。

概览,主要分为

1. 过去四年的回顾
2. 2022 的收获
3. 2022的困惑
4. 展望人类文明的未来

最近四年我一直在xx互联网公司效力,回顾下历史,我为公司创造了这些东西。

  1. 一个漏洞预警系统
  2. 一个资产测绘平台 CyberSpace
  3. 一个自动化的资产收集工具 Athena
  4. 一个安全产品评测工具 WeAttack

以及期间还做了若干需要翻历年OKR才能想起来的小项目,就不写到这里了。

说来神奇,我做的这四个系统,至今还没能交接出去,但是还好没有死掉(除了因为合规被关停的Cyberspace之外),其他一直在为部门的安全事业贡献自己力量。

和组里的老前辈不同,有些老前辈做完一个事儿之后,马上呼啦哗啦文档一搞,就交接出去了,自己继续探索新事业。锦旭的项目则不然,写完了之后(可能是因为代码只有jinxu自己能看懂的原因),往往维护了很长的时间。

在2021年,我感觉到项目太多了,基本处于每个半年开个新坑的状态。逐渐感觉到维护成本过高了。

现在再看回顾一下这些项目,没有交接出去的原因主要有:

1. 代码多,涉及很多的技术组件

以CyberSpace为例,架构十分复杂,交接起来十分费力气。

  • 包含了全球扫扫扫的匿名主机
  • 包含快速应用层探测的go扫描工具
  • 包含通过匿名网盘辗转回国的rclone通道
  • 包含pyspark的规则&回包解析模块
  • 包含一个入库ES / Clickhouse / Hive的脚本工具 等等等
  • 一个前后端分离的Web系统

换一个比如说漏洞预警系统,整个系统由四个git 项目构成。

不论是交接还是维护,都是比较麻烦的事情。关于为什么会产生这个问题, 我一会儿再详细说。

2. 倾注了我的大量心血,感情还是有了

这里有点小心思,具体来说指的其实是CyberSpace。这个测绘系统是我一手做起来,大量时间在试错和反复验证。最后用很少的服务器成本,在某些维度能够和商业化的厂商做正面PK。还是花了很大精力的。

“自己孩子,还是不要被别人抱走了~~~” — 这个大概是我工作第二年时候的想法。

3. 远程工作,还是有些沟通不畅的情况

比如和同事的同事们朝夕相处的话,可能一些项目和坑,手把手就带会了。

魔幻的 2022

好了好了,回顾了一下过往的项目,有点负能量,迫不及待想要分享一些最近的收获。

2022 – Less Is More

2022在公司内部论坛里看到一个让我记忆深刻的回帖,叫做

代码不是资产/财富,代码是负债。代码实现的那个背后的需求才是资产/财富。

从这个角度看,很多事情是没有必要做的。事情做完之后,往往背后并没有实现什么需求 / 解决什么问题。

我在今年H1有过一段什么都不想做的迷茫阶段。这个事情不做会有什么影响呢?好像也没有什么影响。于是开始不知道干什么了。

但是大家都知道,今年H1外部环境风云变幻,每天被各种负面消息环绕。于是,我焦虑了。

焦虑的一个外在表现是有段时间产生了burnout。burnout的一个表现是到了晚上干不动活了。后来,后来我开始7点下班,7点下班之后回家写一会儿代码,或者看看外网的文章,然后在9点左右下楼和家人做做运动。自感状态恢复得不错。

焦虑的另外一个表现是没有办法深度思考,半天只能解决一个明确的问题。对于其他的一些需要抽丝剥茧,在多条路径里做出路径选择的场景里,没有办法做推理和决策。

2022H1没有开新坑,Less is more.


2022 – 把一件事情做好,可以把项目当作产品来运作

作为中后台的团队,Leader会从他的角度,给项目一些指引。有时候,会停留在满足Leader需求的层面。现在来看,这个是不对的。

作为项目负责人,没有人比我更了解产品的技术细节和能力上限。如果仅仅满足leader的需求,会很大限制项目的发展。事实上,跟着Leader的节奏走,走完之后回过头再看,可能就会出现,哎哈,怎么就这?

事实上,可以有更多的思考,比如漏洞预警系统,离VPT还有多远?比如云上的蜜罐的数据,还能有什么用法?等等的。

这是个比较复杂的问题,H1看到一个话比较有共鸣,叫做 “::有了锤子,哪里都是钉子::”。如何提升投入产出比,这是一个比较难搞的问题。

但是可以确定的是,基于要实现的功能,当作产品来做,会更有想象力和成就感。

  • 比如Athena,我在H1申请了easm.cloud的域名,大大小小迭代了好几个版本。我觉得很不错,不出意外的话接下来也会继续维护,因为这个能力每年都能用上。

2022 – 协作 Cooperation,和队友并肩作战

和足球赛一样,每个队员都有明确的分工,相互之间互相信任互相补位。又像部队作战,有人负责冲锋陷阵,有人负责后场做饭。

在协作的方面,我还需要补补课。

比如WeAttack项目初期,投入人力较多,是否可以从技术细节里抽身出来,承担产品经理的角色?把控项目走向和汇报思路。把手头的活儿更多交给团队的“新”人来做。

但是历史没有假设哈,可能我承担产品经理角色之后,搞不好也会把大家带偏了🐶

回过头来看,WeAttack整体还是乱的,尤其是前端部分,投入了不少人力。但是现在打开,仍然像一个运营工具,不像一个产品。

怎么样才算一个产品呢?

产品解决的问题,一定是一句话就能说清楚的,WeAttack,可能是“以供促防”,或者是“攻防靶场”。但是还是不像个产品。形态也比较难变成产品。

H1调研过不少BAS的内容,也希望H2能够把WeAttack变成产品。解决实际的问题,给部门赚点钱。

如果H2能够推动能力产品化的话,我希望能够全力投入进去,然后像老板一样,“::一定要搞定,搞不定就自己走人::”。

说远了,回到和队友并肩作战。H1因为疫情没有和团队见面,H2有机会多去深圳。(部门差旅费用要顶住啊)


2022 – 编程要 Kiss,Keep It Simple & Stupid

代码能够实现非常多的事情。如果不对代码加以限制的话,很容易在代码里写出来一个元宇宙 -》然后变得不可维护。

我有很多的项目都很复杂,上面提到的四个项目,如果去看代码量的话,其实都不少。代码量多一定会带来高昂的维护成本和非常费脑的理解难度。

尤其是在一个安全为中心的团队里,复杂的代码结构带来的就是,不敢动,啥feature,没用过?

我正在重构雅典娜,我希望Athena可以成为一个我认为很 Kiss的项目。比如:

class DomainWorker:
    def __init__(self, domain):
        self.domain = domain

    def domain2subdomains(self):
        return [i for i in self.plugin_results if i.event_type.linked_model == 'subdomain']

不用关注底层细节了,好用就行,不好用你给我提bad case,我来改。需求理清楚之后,我觉得就能开发得很顺溜了。

这样代码也方便后人接手,如果哪天我离开公司了,我的队友看到我的代码之后也不会骂娘。

2022的一些负能量事情

我喜欢瞎琢磨,也喜欢和人聊天,我和大家聊天时都比较掏心掏肺,不藏着掖着,我感觉大家对我也是一样。有些小事情一直记在心上。也许他们都是对的。在这里也记录一下,过几年看能不能解开这些个心结。

安全的天花板

和一个安全专家聊天。安全这个东西,很难搞出新的东西。全球最牛逼的人都在研究安全,你要是想呼啦啦啦搞出来一个横空出世的东西,基本上不可能。

事实上也是,H1关注到Mandiant被Google云花重金收购了。感觉这家公司无比牛逼,于是查了一下资料。我也在做EASM(投入人力很少),人家也做EASM。感觉大家没有区别。底层技术都是一样的。一看演示视频里的数据结构,更加确信了这一点,::确实没什么区别::。。

那人家为什么能被Google收购呢?

我觉得有一个重要的原因是 LongTimeRun:长期的安全运营,Mandiant已经成立18年了。对安全投入也非常舍得砸人。

Mandiant Threat Intelligence deploys 300+ intelligence analysts and researchers located in 23 countries. We collect up to 1 million malware samples per day from more than 70 different sources.

那么,中国为啥没出来Mandiant呢?和另外一个专家聊天时给我解了惑。大概是国内安全盘子太小,钱不够,撑不起来这个建设成本。

所以说回天花板:

国内安全行业的天花板 -〉取决于企业能给安全投入多少钱 -〉企业能给安全投入多少钱则又取决于企业收入和预算情况。

有了行业天花板 -〉剩下就是各自厂商争抢份额的事情了。

经济下行的趋势下,安全不会太好做。安全缺乏的想象空间,在于不能出海。海外认可度低。

海外厂商做一功能,全球用户来买单,国内厂商一做,只有国内厂商买单,这个客观差距还是在的。

::当然了,这事儿也不用锦旭着急,天塌下来有大老板顶着。::

公司的行动也是比较明确,降本增效。要求业务团队健康可持续。健康可持续,就是要能自己养活自己。

生存 是文明的的第一要义

上半年出现了很多糟心的事情。都可以用这个三体里的话来解释。

比如 公司为何要裁员:公司要生存。出于生存做的考量:裁员有助于公司的生存。所以裁员。

比如 疫情防控和加码:xxxxxxxxx,所以要加码。

比如 俄罗斯为什么打乌克兰:再不开打北约要把武器放到俄罗斯国界线边上了。俄罗斯要生存,所以要开战。

再比如:美国为什么要制裁中国。

再往回看:日本为什么要发动甲午战争。

其实都是一样的,都能用这个思维模型来解释。

在公司里搬砖,也要想想关于生存的事情。

“一个组织存在的意义和价值是什么,然后层层分解到个人…”


最后再分享一个好消息

人类文明一定是向前发展的

万丈高楼平地起,不论朝代的兴衰。万丈高楼会留给我们的子孙后代。我们在安全领域和前沿科学的探索,也会传给后代。

假如哪天公司倒闭了,公司大厦会被另外一个更牛逼的公司买下来,然后入驻。

假如哪天锦旭离开公司了,会有一个更牛逼的人替代我的位置,为人类文明的发展带来贡献。

我坚信所有的困难都是暂时的,一代又一代人的努力,终将会推动人类文明走向新的高潮!

最后还有一个好消息:即使躺着不动人类文明也会滚滚向前。

在推动社会前行的同时也注意身体健康,让我们一起见证这波澜壮阔的历史吧!

加油,多看书,少浪费时间 ;-)

我们每天都会遇到很多的问题,要解决这些问题需要扎实地一步一步推进。

思考固然重要,但是往前推进也很重要。如果每个事情都要100%考虑清楚才行动的话,就太没有意思了。

应该要找到行动本身的意义,方向正确的事情都是我们应该要花时间去做的。

加油锦旭,2021留给我们的时间不多了。时间过得很快,生命也过得很快。

做事情都有弯路,应该从这些弯路中思考、去做一些推理和辩证。而不是在没有开始时就去想绕过弯路。毕竟,弯路都没有来,怎么去绕过?

加油,多看书,少浪费时间 😉

2021-09 畅想未来

一个很确定是事情是,未来的不确定性会带给人焦虑感。刚看到一个统计数据, 中国有9000万的人有抑郁症。不怕大家笑话,有些事情会给我的的心里带来压力。有一个可以确定的事情是,随着时间的推移,都会变好的。让我们一起畅想未来吧~

房子可能是北漂/深漂/上漂一族的一大难题。我也是为了买房这个事情搞得比较头疼。主要原因是北京好房子太贵了,“老破小”的房子又不想买。但是多好算是好呢?好像也比较难说。

让我来大胆地提出对未来的房子的想法吧!


书房:首先是要有一个书房,书房放一个午睡用的凉床和一个可舒适办公的环境。希望有地方可以放HiFi一点的音响。书房定位是一个独处的空间,独处的时候经常会有灵思泉涌的感觉,希望家里能够有一个独处的空间。


要有一个书架,书架上放一些纸质的书籍(可能平时也不看,但是有些纸书能带给我安全感)。书架上也要放一些酒,我比较喜欢喝酒,放些啤酒和白酒吧~


衣帽间:要有一个衣帽间。和张美丽讨论过衣帽间的事情,衣帽间似乎是小姑娘们追求的东西。我在一次住酒店的时候体验过衣帽间,发现把所有的衣服和帽子都放在同一个房间里真是太省心了。


储物间:想要一个储物间。我喜欢硬件设备。想在家里搭建一个homelab,homelab有两个问题。

第一个问题是噪音和热量,一台满载的服务器产生的噪音和热量都不是普通家庭所能给承受的… 所以我希望能够把服务器放到储物间里,配合一个传感器(或许通过智能家居)就可以实现根据储物间的温度开关空调里。

第二个问题是耗电的问题,我现在只有一台服务器,空载的工具在100w左右,如果以后组一个机柜服务器的话,空载可能都要1kw了。可能电费会有点吃力但是加油应该没问题的。

其他的就没有啦~我不太关注学区的问题,希望采光能好一点,希望离地铁站近一点….

时间,没有时间是个大问题。我希望未来能多一点点时间。如果科学足够发达的话,我恨不得能把一天变成48个小时。

我时常感到忏悔🧎‍♂️,工作之后写了很多不好维护的代码或者还有很多可以再继续优化的代码,但是因为时间的原因,一直都没有来得及做。这样的项目越积越多越积越多,也给心里造成了一些负担,希望未来人类的科技能够取得一些突破性的进展。最近冒出来的元宇宙能够解决一天只有24个小时的问题,帮助大家把一天的时间变长,然后有时间做更多的事情。

计算力,计算力也让我感到苦恼。可能是因为时间的关系,也可能因为我水平太菜了。我总是感觉到我需要很大的算力(或者存储空间)。即使我不能明确地说出来我为什么需要这么多的计算力。就像我试图在家里组件homelab一样。我希望摩尔定律继续有效,在若干年之后我们的计算成本能够进一步降低。

我对外来还有很多不切实际的碎碎念,以后再来写吧~

毕业三年记

今天收到了HR助手推送的入职贺卡,不知不觉已经毕业三年了。

和所有的怀旧一样,三年时间,说起来不长也不短。赶上中午午休用文字的方式和大家闲聊两句,也记录下现在的状态,毕业四年的生活再来做append。

1. 这三年过得怎么样?

如果满分是10分的话这三年我只能给7分,这三年我的状态并没有调整到非常好,甚至不如我在交大时候工作的状态。

交大时候的工作状态我可以给自己8分,那种忘我的、全身心投入、不顾得失的工作状态,让我非常想念。

在这三年里每年都有不一样的感悟,有些感悟当时没记下来,感觉很是遗憾。趁着现在还有点印象,抓紧记录下来。

毕业第一年我感觉是生活在象牙塔里的。在公司踏实干活,发了工资之后踏实花钱然后月光。和女友也处在异地的状态,每次见面都感觉像是最后一次见面,爱情的花花绽放在2018~2019年的深圳的蓝天上。

19年年中我来到北京找张美丽,月光的危害开始显现。通过贷款才把压一付二加一个月中介费共三万块钱交上。因为在中关村上班而且公司不管午饭,经济上压力十分之大。温室里栽培的花朵终于受到北京物价的毒打,结束了在深圳一周一蹦迪、周周下馆子的生活。彼时还想着在20年的结婚的事情,背着一屁股债,还得想着要怎么才能解决彩礼的问题。

20年疫情袭来。压力更大了。20年上半年在家办公了一段时间。用英文来讲叫WFH。在家办公人都快抑郁了。在家办公需要自己做饭,需要自己掌握工作的节奏,以及到了晚上十点会忽然想到一个主意然后忍不住想打开电脑来做一些验证。以后再也不想WFH了,WFH并不好玩。以及20年还清了19年欠的钱,生活压力比之前小了一些。

时间到了21年,21年我觉得压力比20年小一些,但仍然有很多挑战。

2. 这三年有啥收获?

毕业第一年活在象牙塔里,现在一想压力小的时候成长也小。没有什么可总结的…

毕业第二年压力很大,为了排解这个压力我读了一些佛法的书。宗教排解了一些我的烦恼。

毕业两年半的时候我开始运动,原因是身体开始不健康,抵抗力直线下降。

3. 说点好的吧!

  1. 和张美丽在一起是一件非常开心的事情!我们一起度过了一段非常有趣的日子,之后我们组建了一个(现在看起来是)很幸福的小家庭。三年来张美丽包容了我N多的小毛病(这些小毛病背后有一颗火热的爱她的❤️),这三年犯了一些单拎出来都致命错误,张美丽包容了我。
  2. 好朋友是非常难得、需要珍惜的人!(感谢来参加我婚礼的每一个人!谢谢你们!)
  3. 钱是一个好东西,但是快乐和钱关系不大。¥1000的酒和¥100的酒、¥1000的日料和¥100的烤串 等等给人带来的快乐我觉得没有太多区别。
  4. 要成为一个有理想、有志气、有抱负的年轻人。理想、志气和抱负不应该和钱搭上关系。
  5. 平台很重要,能在腾讯工作也是一件非常幸运的事情!
  6. 时间很宝贵,巴菲特有很多钱,但是他已经老了(而我才23岁),我们不要浪费时间。大部分的不能带给人成长的事情都是在浪费时间。
  7. 健康很重要,健康的身体是一切一切一切的基础,我们都要成为健康的人。
  8. 有一个打牌的理论:“人生像一场牌局,每个决策可能都影响未来手里的牌,多多学习多多思考,勇敢地出牌,持续的局部最优解会导向全局最优解。如果一直不出牌的话人生就不好玩了。”
  9. 文明的发展需要时间。年轻人的发展也需要时间,很多事情急不得,我们一起认真打牌。
  10. “今我所说,皆为非法,皆不可说,皆不可取” – 这个是佛祖的话。生活有很多法门,每个法门都指向通向真理的道路。上面瞎聊了一些我的想法,给大家介绍一下我找法门的历程。

4. 人生路很长,我们一起加油💪

橘子洲头的夕阳

那些一起写过的代码 – 7年编码环境变化记

我是一个IT行业工作者,从大一开始写代码到现在已经快7年了,找了一些编程环境的老照片,和大家分享一下我的成长历程。

(为了避免给大家造成麻烦,本文不提及任何人名。)

2014年 – 宿舍编码

我就读于山东大学计算机学院,可能是因为学校和政府的一些校区租赁关系,我们学校大门一直是“山东大学齐鲁软件学院”,这给市民朋友和我们同学们都造成了很多诸如 “齐鲁软件学院到底是个三本还是个专科”这样的疑惑。

现在回想起来,软件园的学习环境十分一般,大一刚入学的时候还有文史哲的妹子们在这,后来就全部搬到中心校区了,让本来就没太有生机的校园变得更加缺乏活力。文史哲的妹子们走了之后就只剩下计算机学院、软件学院和新成立的一个微电子学院… 一听这些名字就感觉真是苦哈哈,一群大老爷们天天摆弄电子仪器,咔咔咔写代码的即视感。

大学住的是六人宿舍,条件十分有限,三个人共用一张桌子,我在宿舍写了有大约两年的代码。刚入学时候写的是Java,后来感觉C语言更帅,以及有一个做Linux底层研发的表哥感染了我,于是哼哧哼哧开始写Linux下的C语言编程。

下面这张照片拍摄于我大一的时候,彼时我用的是i3、4GB内存的联想G410笔记本,旁边的代码书应该是Java入门到精通一类的书。天天在床上哼哧哼哧,乐此不疲。

摄影师 – 睡我对面的x同学

写了一年代码之后,我开始面试XX实验室,比如当时的嵌入式实验室,我觉得非常厉害。有学长带,能和一群人一起写点有用的代码,以及找到一个团体能够接收我,更重要的是,当时学校给实验室分配了单独的教室,加入实验室就可以在4区的一个房间里有个自己的卡座,天天在床上写代码可不是个可持续发展的事情….

可能实验室的位置比较稀缺,没有实验室给我发offer…

2016~2017 学院实验室编码

后来机缘巧合接触到了安全行业,在大二参加了几个学长组织的网络安全的线下讨论会,以及找学校网站疯狂试手时候,学院一个做安全的老师老师向我抛出橄榄枝,我搬着我的笔记本开始在科研楼写代码。

实验室的办公环境

科研楼工作环境非常棒,有24*7的空调,有免费热水,有服务器资源。和实验楼也非常近,我在这里度过了一段十分快乐、非常存粹的时光。

在实验室度过了一年的快乐时光,转瞬到了大三下学期。到了大三下学期就面临着要考研还是找工作这样的选择。我复习了一个月,看完了高数一。然后痛改前非,发现自己实在不是考研的料:真的实在是太枯燥了。

2017~2018 上海交大网络信息中心

刚好机缘巧合,上海的一个老师向我抛出橄榄枝,给了我一个去交大实习的机会,于是在17年暑假我启程前往上海,开始在交大哼哧哼哧写代码…

交大的办公环境摄影

在交大的日子也十分快乐,在交大的生活像个乌托邦。感觉每天都在做自己喜欢的事情。以及有各种各样的漂亮小姑娘、有吃不完的食堂,学校环境非常非常好。类似于这样子的。我对交大的情感非常丰富,在这里不说太多了。

2018~至今 腾讯科技

大学毕业离开交大后,我到了腾讯就职,赶上腾讯930变革前夕入职腾讯,做安全研究相关的工作。腾讯办公环境也不错,关键是,someone pay for my code! 有人为我的代码买单了!

2018 ~ 2019

深圳大族的工作环境

2019~2021

家中的办公环境
北京新大厦的工作环境

最后

谨以这个小水文:

纪念逝去的时光

幸福生活来之不易,要过好现在的每一天。

感谢每一个帮助过我的人,感谢看文章的你。

未来很长,我们一起加油💪

惊呆,使用john+GPU 破解pfx密钥,竟然可以这么快!

众所周知,GPU的计算能力在某些特定场景对比CPU会有数量级的差异。 在密码破解这块更是如此。

john是一个开源的离线密码解密工具,合理利用gpu算力可以大幅度加快爆破速度。官方支持通过opencl进行爆破解密。

pfx 是一种密码归档文件,一般用来存放 证书链、私钥等内容。我们的爆破主要是爆破私钥的密文。

硬件配置

在云计算的时代,我们自然优先考虑云上算力,随用随开,用完即走,而且配合使用竞价实例,物美价廉。

如下图所示,40C160G 2NVIDIA T4的机器,只要不到¥5.5/h,堪称网吧级定价,超算级享受。

john安装

购买完CVM,使用ssh登录后,可以看到贴心的腾讯云已经为我们安装好了Nvidia驱动和CUDA加速包。

使用 nvidia-smi指令可以查看硬件信息,我购置的是 1/4 T4显卡的机型。

ubuntu@VM-1-3-ubuntu:~/john/src$ nvidia-smi
Fri Jun 11 15:17:26 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GRID T4-4C          On   | 00000000:00:08.0 Off |                    0 |
| N/A   N/A    P0    N/A /  N/A |    560MiB /  4096MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

因为john放弃掉了cuda的支持,采用了opencl进行加速,安装一下 opencl的开发包

sudo apt install ocl-icd-opencl-dev

接下来配置john

git clone https://hub.fastgit.org/openwall/john.git && cd ~/john/src/ && ./configure

不出意外的话可以看到OpenCL support ............................. yes,如果没有这个值的话则说明环境存在问题

image-20210611153819294

接下来 执行 make -j 4 && make install 就好了

安装完成之后,在 src 的同级目录可以看到 run文件夹

cd ../ && ./run/john

破解pfx密钥

下载测试pfx文件,先使用指令安装python依赖

sudo apt install python3-pip && pip3 install --user asn1crypto

执行 python3 run/pfx2john.py ./server.pfx > server.hash 将pfx文件转成john可识别的格式。

这个 pfx2john的脚本也很简单,把pfx密钥的加密格式、salt值等提取出来,用固定格式输出。

def parse_pkcs12(filename):
    data = open(filename, "rb").read()
    pfx = pkcs12.Pfx.load(data)

    auth_safe = pfx['auth_safe']
    if auth_safe['content_type'].native != 'data':
        raise ValueError(
            '''
            Only password-protected PKCS12 files are currently supported
            '''
        )

    mac_data = pfx['mac_data']
    if mac_data:
        mac_algo = mac_data['mac']['digest_algorithm']['algorithm'].native
        key_length = {
            'sha1': 20,
            'sha224': 28,
            'sha256': 32,
            'sha384': 48,
            'sha512': 64,
            'sha512_224': 28,
            'sha512_256': 32,
        }[mac_algo]

        salt = mac_data['mac_salt'].native
        iterations = mac_data['iterations'].native
        mac_algo_numeric = -1
        if mac_algo == "sha1":
            mac_algo_numeric = 1
        elif mac_algo == "sha224":
            mac_algo_numeric = 224
        elif mac_algo == "sha256":
            mac_algo_numeric = 256
        elif mac_algo == "sha384":
            mac_algo_numeric = 384
        elif mac_algo == "sha512":
            mac_algo_numeric = 512
        else:
            sys.stderr.write("mac_algo %s is not supported yet!\n" % mac_algo)
            return
        stored_hmac = mac_data['mac']['digest'].native
        data = auth_safe['content'].contents
        size = len(salt)
        sys.stdout.write("%s:$pfxng$%s$%s$%s$%s$%s$%s$%s:::::%s\n" %
                         (os.path.basename(filename), mac_algo_numeric,
                          key_length, iterations, size, binascii.hexlify(salt).decode(),
                          binascii.hexlify(data).decode(),
                          binascii.hexlify(stored_hmac).decode(), filename))

下载密码包

wget https://github.com/danielmiessler/SecLists/raw/master/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt

接下来使用john进行破解

ubuntu@VM-1-3-ubuntu:~/john$ ./run/john ./server.hash --format=pfx-opencl --wordlist=./10-million-password-list-top-1000000.txt
Device 1: GRID T4-4C
Using default input encoding: UTF-8
Loaded 1 password hash (pfx-opencl, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA-256/512) OpenCL])
Cost 1 (iteration count) is 2048 for all loaded hashes
Cost 2 (mac-type [1:SHA1 256:SHA256 512:SHA512]) is 1 for all loaded hashes
LWS=128 GWS=10240 (80 blocks)
Press 'q' or Ctrl-C to abort, almost any other key for status
123456789        (server.pfx)
1g 0:00:00:06 DONE (2021-06-11 16:04) 0.1594g/s 1633p/s 1633c/s 1633C/s 123456..jesus123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

可以看到,已经爆破成功啦~ 使用openssl工具可以查看信息

ubuntu@VM-1-3-ubuntu:~/john$ openssl pkcs12 -info -in ./server.pfx
Enter Import Password:
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: 5C 5B 4B 74 27 F1 5F DF 23 9C D6 47 5B 67 B9 66 C8 7A 2C D6
subject=C = cn, OU = custer, O = custer, CN = localhost

issuer=C = cn, ST = shanghai, L = shanghai, O = cluster, OU = cluster, CN = localhost

参考链接

烦恼

我年轻的时候烦恼比较少,年轻的时候我觉得:没有什么是非做不可的,喜欢什么做什么就好了。

这种状态贯穿了我的整个大学生活。所有我大学挂了很多科,考研也只坚持了一个月,但是依旧乐此不疲,充满了生命力。

踏入社会快三年了,我感觉到烦恼又慢慢变多了。这个时候脑子里又冒出来一句话来:“钱多了,烦恼也就来了”。我现在感觉到我的烦恼都是一些看得见摸得着的东西。比如不知道怎么推近我的婚礼,不知道怎么开始邀请朋友,没有准备一场精心设计的求婚。。。等等等等

穷困潦倒的时候比较开心,赚了一点钱之后反而烦恼又多了。真是个复杂的世界…

这几天看到道哥在日更公众号,依稀我当年握住道哥的手:“道哥我以后要向你一样牛逼。”,道哥:“好的,你要加油。”。

要加油啊朋友们。