我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一个正经开发人员的安全意识

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一个正经开发人员的安全意识

作为交付业务的开发人员来说,安全从来都是一个重要的话题,并且如果是从事健康、金融等相关领域,在北美的合规性上更是尤甚。除了从业务上对安全做的一些考虑,比如密码强度,Multi-Factor Authentication(MFA),更多的安全相关性可能对于一个正经开发人员来说,可能很难面面俱到的考虑周全。在此,想借用一个和健康医疗相关的项目来对项目上所面临的安全需求以及实践进行介绍。

[[434646]]

背景

除了在业务上我们满足用户的安全需求,以及一些对常规的离散的安全了解(TLS,injection,DoS等),我们没有一个全局的系统的安全方面的考虑,再加上客户也提出了一条条没有组织没有结构的安全需求,在与客户对话之前需要做大量的讨论和研究。

对于计算机安全的定义来说,机密性、隐私性和完整性是三个关键目标,如果从计算机安全模型来说,又包括硬件、软件和通信等。对于这样的分类和定义,如果我们能很好的做出威胁建模,那么结果可能是比较全面,但是问题又来了,在组内大多数成员没有威胁建模的经验下,我们又很难做好一个威胁建模,这样我们的结论也可能达不到我们想要的目标。

那么这样的话,从一个比较直观并且概括的层面,能让大家了解我们可能面对的保护和攻击,可以在最基本的面上有个大概了解。

应用 Application

认证授权

  • 所有需要认证的请求会通过Gateway Ambassador,通过 Ambassador 提供的 Filter 和 FilterPolicy 来控制到认证的接口上
  • 不同接口会有不同的权限,这一层是在应用层上实现
  • 所有的用户只能访问属于自己的 tenant 内的资源,这也是在应用层上实现

漏洞

对于这类攻击其实我们经常能听到很多,比如 SQL injection, XSS 等等。这些攻击在我们目前使用的通用框架中其实已经帮助我们做了很好的保护,比如现在的 ORM 框架早已有 Parameterized queries 来防止 injection(前提是我们不要去拼接 query),Spring Security 也提供了 CSP header 来保护 XSS。

再比如CSRF,在目前我了解到的使用 Spring 的应用中,都是disable的状态。因为其实如果我们是使用的JWT token来做认证,而不是基于 cookie 来做认证,那么我们也不用做更多来防止 CSRF。

日志

在我们的实施方案中,我们对日志进行了不同的分类。一类是基本的服务应用日志,主要便于生产环境的问题识别;另一类是审计日志,主要是记录用户的行为,包括哪个用户从某个 IP 做了什么样的请求操作,也可以防止用户抵赖(Repudiation of Action)。

GCP 中的日志服务提供了 Log buckets,我们对以上两类日志分别放到了不同的 bucket 里面,这样也可以对于不同的日志设置不同的 retention period。

邮件

邮件的安全可能是我们容易忽略的一个问题,在邮件上设计到的安全有DMARC, SPF 和 DKIM。因为项目上使用的是邮件服务Sendgrid,所以对于 DMARC, SPF 和 DKIM 是在邮件服务中实施的。在这里是想让大家可以了解到即便是邮件功能,也不能忽略其安全的地位。

基础设施 Infrastructure

网络

如果实在信赖的 VPC 之内,我们可以将 TLS 在 Load Balancer 就终止,任何在这个 VPC 内的流量都是以解密之后传输的。但其实在 cluster 内服务和服务之间的安全也是需要保证的。

Firewall 的正确配置,开启 DNSSEC,配置 Egress 到信任的外部服务,利用 WAF 来控制服务的访问等等,这些都是在网络上我们可以考虑的安全要素,因为网络安全是一个比较大的另一个话题,并且我知识也有限,就不展开讲更多。

Security Posture Monitoring

我们需要知道我们服务的资产,并且哪些资产在业务上有重要意义,我们还需要知道我们做了哪些安全措施来保护我们的资产。

部署在 GCP 之上的资产,GCP 的 Security Command Center 可以帮助我们了解和修补 GCP 的安全和风险。其提供了不同等级的服务,详细的可以参考 Security Command Center。

密码秘钥轮训

定期或者主动去轮换现有的密码。

GCP 的 Secret Manager 配合 pubsub 和 CloudFunction 可以设置 rotation period 来帮助我们定期更改密码,但是我们的密码有些是集成了第三方系统的 api key 或者是 private key,这样不太方便使用 Secret Manager 提供的 rotation 功能。对于这样的第三方密码,还是需要运维人员手动在第三方服务中更新密码,或者使用其提供的 API 或者 Script 来重新生成密码,然后用 Terraform 控制 GCP Secret Manager 来帮助我们管理密码。

但这里有个问题是密码是不能明文存储在对应的 Terraform repo 中,所以目前我们在项目中只是将密码文件加密后再上传,对于 Terraform 来更新密码还是在本地执行 terraform apply,还没有一个比较有效的方式。

安全检查 / 测试 Security Check / Testing

静态扫描

我们可以使用很多静态扫描工具帮助我们提高代码质量,也可以帮助我们在代码层面上泄露安全风险。

这些工具会集成到我们的 CI 之上,比如 gitleaks 来帮助我们检查是否有硬编码的密码、私钥等信息,OWASP Dependency Check 来检查 vulnerability。

动态扫描

除了静态扫描外,动态扫描可以帮助我们检查出应用服务上的安全风险,比如之前提到的 XSS,injection 等等,都可以利用周期性的动态扫描来规避风险。

虽然不能完全依赖这类的扫描工具来保护我们的应用服务,但是这在一定程度上可以缓解风险的可能性。

Mobile

Run Application Self Protection RASP

对于大多数应用的外围保护来说,比如防火墙,IDS,这些保护都只是对运行环境的保护,但是设计到应用本身,这样的保护不会具有针对性,也就是说突破了这些保护的限制,一样能对应用造成威胁。

那么移动端App,不像服务端的应用部署在一个几乎完全受我们控制的环境中,它可能运行在一个已经过时很久,或者不太安全的版本的 OS 上。这时候需要一个能提供自我保护的应用。

在绿码项目中,我们使用的是客户合作的Promon SHIELD,其提供了比如 root detection, code obfuscation, code injection protection 和 screen reader protection 等等可配置的保护。

RASP 更多的是对应用本身提供保护,所以是其实现方式我理解无非是在应用内,比如针对应用特定场景的保护,或者是在应用外有一层保护膜,比如使用 Promon SHIELD 就是一层 wrapper,如下:

App Attestation

就如最开始提到的,我们在设计系统时就要考虑到攻击者最终会完全熟悉我们的系统。那么设想攻击者有了这些知识后,能不能做出一个和我们完全一模一样的App。

如果在这个时候我们怎样去防止这种类似钓鱼的攻击发生。对于 iOS 和 Android 都有方式去做 attestation。

在我们项目上,对于Android 采用的是 SafetyNet Attestation,而iOS是利用通知推送的机制的形式。虽然本身 Android 也有通知推送机制,但是其推送地址和这个合法的 App 之间的关系仅仅是 package name,然而iOS的推送机制是基于 push certificate,所以对于 Android 使用的是其提供的 SafetyNet 更为可靠。

以下是简单的流程图,感兴趣的同事可以进一步深究。

结语

在这里只是简单的从一个普通正经开发者的安全角度出发,列举了一些其他项目可能可以参考的安全实践。但是安全远远不止于此,并且涉及到的知识也是非常之广,以上提到的任何一点都可以有更深的讨论。

【本文是51CTO专栏作者“ThoughtWorks”的原创稿件,微信公众号:思特沃克,转载请联系原作者】

戳这里,看该作者更多好文

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一个正经开发人员的安全意识

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一个正经开发人员的安全意识

作为交付业务的开发人员来说,安全从来都是一个重要的话题,并且如果是从事健康、金融等相关领域,在北美的合规性上更是尤甚。

PHP 框架安全指南:如何教育开发人员有关安全性的知识?

php 框架安全指南:实施培训和教育计划,教授安全原则。代码审查流程可识别和修复安全漏洞,并使用安全清单指导审查。通过实施安全最佳实践,例如使用最新 php 版本、安全配置服务器和定期扫描,可以提高 php 框架应用程序的安全性。PHP 框
PHP 框架安全指南:如何教育开发人员有关安全性的知识?
2024-05-23

每个开发人员都应该掌握的TCP知识

通过TCP(例如HTTP)发送数据时,常见的误解是带宽与延迟无关。 但是,对于TCP,带宽是延迟和时间的函数。 让我们看看如何。

专为开发人员构建的个人知识管理工具 - Dendron

Dendron 建立在过去五年的编程语言和开发工具之上。我们将软件的关键经验应用于一般知识的管理。我们使管理通用知识(例如管理代码)和你的 PKM 像 IDE 一样。

软件开发人员的5个能力:如何识别好的程序员

软件只有在满足业务需求和有足够可操作性的情况下才能发挥作用。因此,我们需要评估能够让软件开发人员达到这些目标的能力。一个极客程序员在工作中能达到像实用工具那样的技术水平。每一种技术都是用语言表达的模式集合,而且大部分模式不是新的。如果我们了
开发程序员2024-11-30

员工的网络安全意识是个坎儿,企业一定要重视起来!

前言在企业内部,人为失误和缺少体系化的网络安全意识是企业数据泄露和安全威胁的首要原因。现阶段,网络安全意识虽然在培训方面取得了很大进展,但仍有很多企业并没有把员工网络安全培训放在首要位置,因此,强调网络安全意识的重要性并有效地做到这一点,还
2023-06-04

怎么才算一个成熟的Java开发人员?

因为Java语言具有多功能性,可以用来设计轻量级和快速的定制应用程序,并且能够服务于各种各样的目的。

五个面向经验丰富开发人员的高级 JavaScript 技巧

在今天的文章中,我将分享5 个高级技巧,它们将帮助您编写更高效、更优雅的代码。

开发人员在工作负载保护方面的五个安全问题

随着越来越多的工作负载迁移到云端,人们越来越关注以不同方式保护它们。以下是一些有用的提示,供开发人员在今年探索工作负载保护策略时牢记。

研究发现超 200 个针对 Azure 开发人员的恶意 NPM 包

JFrog 研究人员 Andrey Polkovnychenko 和 Shachar Menashe 在一份报告中指出,截至 3 月 21 日他们已观察到不少于 218 个恶意 NPM 包。据介绍,攻击人员使用的软件供应链攻击方法是 typ

一个数据开发人员使用的辅助工具

这是为数据开发人员使用的辅助工具,用于数据库之间的表同步,说同步并不严谨,因为不是实时更新的,更确切的说法是复制,可以方便的从一个数据库复制表到另一个数据库,以下遇到同步的词请理解为复制。

安全第一:CMS 主题开发中的安全注意事项

安全是 CMS 主题开发中至关重要的环节,本文提供了 CMS 主题开发中的安全注意事项,帮助您避免潜在的安全风险。
安全第一:CMS 主题开发中的安全注意事项
2024-02-11

Nuxt.js 3.0 正式发布!为每个人提供了一个愉快的 Vue 全栈开发体验

Nuxt 3.0.0 带有稳定的、生产就绪的 API 和 50 多个由社区和 Nuxt 团队使用 Nuxt Kit 构建的支持模块。
Nuxt3.0.0Vue2024-12-01

是否似曾相识?每个开发人员都犯过的十五个错误

犯错是人之常情,也是促进我们成长的关键,不必惧怕犯错。请试着从他人的错误中学习借鉴,以免今后重蹈覆辙。

软件开发人员最常犯的五大安全错误

应用开发安全面临严峻挑战,随着云计算、容器和API的普及,安全漏洞日益增多。

为什么开发人员掌握着云安全的关键

在使用内部部署数据中心和早期云应用的时代,应用程序开发人员、基础设施运营和安全的角色基本上是孤立的。在云计算时代中,这种分工增加了创新产品投入市场的时间,降低了生产率,并带来了不必要的风险。

成为一名优秀Java开发人员的七个步骤

如何成为一名优秀的Java开发人员呢?有七个步骤,我们一起来了解下都有哪些。

家用路由器真的安全吗?安全研究人员发现226个漏洞

近日,安全研究人员对市场上主流的6款热门路由器进行测试,报告显示,即使将固件版本更新至最新,还是发现了226个漏洞。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录