技术员的安全修养

Table of Contents

最后更新:2017-07-05

1 邮箱选择

  • 选择口碑较好的邮箱,比如腾讯、Gmail。口碑源于厂商对待安全事故处理的态度上。
  • 按用途使用多个邮箱
  • 个人域名邮箱

对于个人域名邮箱,我比较喜欢把admin@xxx.com、root@xxx.com送给别人使用,倘若遇到被人社工,这或许能让黑客迷失方向。曾经有人在被泄露的密码库中找到我送别人用的管理邮箱,让他社工错了方向。

2 密码安全

  • 测试环境和生产环境密码不要一致
  • 避免弱口令密码
  • 可使用密码管理软件,如1password

3 安全开发

  • 测试环境也需要安全措施,如数据库有较强的密码、不要任何人可访问测试环境
  • 开发机、测试环境不要随便监听0.0.0.0,尤其是一些在做Web开发时会监听0.0.0.0(尤其注意咖啡厅等公共环境),这样内网其他机器很轻松就访问到,开发中的代码可能安全性并不高。
  • 安全也是需求。在制定项目需求、做架构设计时,应当把安全也考虑进去,如:密码加密存储、后台不可外网访问、授权机制、操作日志记录等。
  • 将安全引入开发环节中。不过这对团队要求相对较高一些,依赖团队是否有懂安全的人。如:制定安全编码规范、代码review时做安全审计、在测试环境中做黑盒渗透测试、上线后做渗透测试等。

3.1 编码安全

提供一些指导方向:

  • 学习安全知识,至少掌握常见的攻击方式,如SQL注入、XSS等
  • 任何输入都有可能有问题、任何输出也可能有问题,不要绝对信任输入和输出
  • 函数单一原则,不要做功能本身以外的事情
  • 需要权限认证的地方,一定要做好权限控制
  • 用户的密码加密存储
  • 不使用来路不明、无人维护的框架和库
  • 代码架构明确,不要养成copy and paste习惯,若一段代码出了安全问题,但代码分散严重,可能会修复不完整

4 正确使用安全产品

有很多公司听了安全厂商的夸大宣传,会把整体的安全依赖在某些安全产品上,这是很大的问题,比如:

  • 安全产品能力有限,不保护得了所有范围,最大的问题还是人;
  • WAF、防火墙等安全产品是在本身安全的情况下增加的附加东西,如果产品本身就存在安全问题,仍然保护不了自身;
  • 很多安全产品本身也有安全问题。

安全产品只能一定程度上提高攻击的成本,但无法完全阻止攻击,所以要正确使用安全产品,而不是去完全依赖它。

5 警惕版本控制

  • 不要将Git的user.name和user.email全局设置为公司或团队的帐号

避免被社工。当新项目做git init初始化时,手动设置user.name和user.email。有很多人将这些信息设置为全局的,当在Github上提交自己的项目时,就会不小心泄露公司邮箱。

  • 注意配置文件、代码中是否泄露敏感信息

比如公司内网服务器地址、数据库权限、内网验证服务器、私钥、API key等信息。

  • 勿将shell配置文件(如~/.bashrc)、Emacs/Vim配置、~/.ssh等上传到仓库中
  • push代码时,多看看diff,清楚所有的变更

有一些黑客在渗透了别人开发服务器时,会在代码中插入后门,当代码push到仓库后,并且部署在生产环境中时,后门也同时生效。

6 容器、虚拟机和软件镜像

  • 避免来源未知的Docker镜像、虚拟机镜像,因为你不知道镜像中安全情况,尤其是不要部署在生产环境。
  • 虚拟机中不要用常用密码和证书。人们通常用虚拟机做测试或学习使用,往往忽视了虚拟机的安全,认为外界是无法接触的,一旦不小心让虚拟机从外界可访问(比如在同一网络环境中),那么虚拟机就是安全的短板。你放在虚拟机中的配置文件、证书以及系统密码,都有可能被黑客拿走。

6.1 软件镜像

上面说到避免来源未知的Docker镜像,这个原则也适用于其他软件镜像,在下载安装的时候有确认合法性吗?建议参考这篇文章:《被忽视的攻击面:Python package 钓鱼》

7 养马甲

  • 至少一个马甲邮箱
  • 至少一个马甲QQ
  • 可以考虑马甲手机号

8 社工自己

善用搜索引擎搜索你的密码、邮箱、QQ等。

一个例子: 2011年时在淘宝充值过优酷会员(需要提供密码),不久之后出现了大量观看记录,然后在Google中搜索我密码,发现店主把我的优酷帐号当作免费福利发到他自己论坛上。

9 日常习惯

  • 离开后锁屏电脑
  • BIOS加密
  • 重要资料加密存储,如使用VeraCrypt
  • 使用正版操作系统

一个例子:2005年有个叫“电脑公司特别版Windows XP”的盗版系统,自带一个叫“new”的管理帐号,系统默认开启远程桌面。用扫描器扫B段IP,一个下午最多可以收获百余台肉鸡。

  • 善用虚拟机运行来路不明的软件和解压压缩包

10 资产管理

当零日漏洞爆发时,哪些地方需要升级?

你要清楚你或你们团队的软件资产,比如:有多少台服务器、服务用的什么操作系统、部署了哪些环境(如Java、WordPress?)、部署了什么服务(Nginx?Tomacat?等等)、业务代码中用了哪些三方组件。

开发团队中,应当清楚了你们的软件资产,才能在爆发漏洞时做出更及时的响应。

一旦公司规模变大、业务变多时,不注重软件资产管理,就会在漏洞爆发时失控。举个简单的例子:Strust2远程代码执行漏洞爆发时,一个大公司的运维升级了线上主要的业务,但却不知道哪些团队同样也用了Strust2(选用Strust2的原因往往是公司层面的技术选型要求)在外网环境,所以并且没有及时做更新,导致出现安全问题。

案例:

《我是如何轻松拿到Google $1337现金奖励的》

10.1 个人资产

当新闻曝光许多互联网大厂商被拖库时,作为个体的我们,应该及时修改密码。修改完密码以后还要考虑这个密码是否有在其他地方使用过?此时你的密码已经不安全了,尤其是部分厂商采用明文存储密码,并被黑客窃取。

密码是我们个人的主要资产,发生安全威胁时哪些地方的帐号需要修改?绝大多数的人无法准确排查完,因为很多人没有管理自己的密码资产。

我对公司某同事进行社工过,只用了他的名字在Google搜索,就成功进入了他的代码仓库、邮箱、OA等。方法很简单,就是利用了网上泄露的密码库。

建议使用KeepPass一类的密码管理软件管理好自己的密码,并且尽可能不要用太通用的密码。

个人资产,还包括了重要的文件、代码等,必要的应当加密存储,使用诸如VeraCrypt一类的加密软件。

还有我们用的操作系统、安装的常用软件等,都是个人软件资产。

11 选用三方软件/库的原则

  • 谨慎不了解的插件,很多安全问题就出现在插件上,如WordPress的插件
  • 选用安全性较高的程序(如WordPress)
  • 避开小众程序,除非自己有能力修补漏洞
  • 选用的组件有专业团队维护
  • 及时更新