避免博客泄露个人信息

本文介绍了在博客写作中如何保护个人隐私,避免敏感信息泄露的实用技巧和最佳实践。

常用的免费开源平台 GitHub Pages 比较受欢迎,许多博客使用 GitHub Pages 进行发布。
但其免费版要求公开仓库才允许公开访问。而仓库公开后,一些标记为草稿的文章也可以从 Git 仓库访问到。 尽管公开的文章较少包含敏感信息, 但开源博客的源库可能会泄露个人信息,以下是一些常见的信息泄露关键词,欢迎评论补充。

敏感词

中文关键词 英文关键词
密码 password
账号 account
身份证 id
银行卡 card
支付宝 alipay
微信 wechat
手机号 phone
家庭住址 address
工作单位 company
社保卡 card
驾驶证 driver
护照 passport
信用卡 credit
密钥 key
配置文件 ini
凭证 credential
用户名 username

正则搜索:

(密码|账号|身份证|银行卡|支付宝|微信|手机号|家庭住址|工作单位|社保卡|驾驶证|护照|信用卡|username|password|passwd|account|key\s*:|\.ini|credential|card|bank|alipay|wechat|passport|id\s*:|phone|address|company)

如果使用 VSCode 作为博客编辑器,可以使用正则搜索快速进行全站搜索,检查可能泄露信息的位置。

Git 历史

Git 历史可能包含信息泄露,通过简单的脚本即可扫描开源博客的历史提交信息。

如果是自己的仓库,可以通过以下方式清除历史。如果需要保留历史信息,则不要清除。

请务必确认理解命令含义,它会清理历史, 请谨慎操作,操作前请备份重要数据。

git reset --soft ${first-commit}
git push --force

其它扫描仓库方式

https://github.com/trufflesecurity/trufflehog

  • Find, verify, and analyze leaked credentials
  • 17.2k stars
  • 1.7k forks

img

其它发布博客方式

  • Github Pro 支持将私有仓库发布到 Pages, Pro 四美元每月
  • 设置为私有仓库, 发布到 Cloudflare Pages
  • 分库, 一个私有库存放正在编辑的文章, 一个公开库存放可发布的文章

如果你的博客使用giscus这样依赖 github 的评论系统, 那就仍然需要一个公开仓库.

良好的习惯 vs 良好的机制

在讨论开源博客泄露个人信息的问题时, 有许多人认为, 只要注意不将敏感信息上传到仓库, 就不会有问题.

这是一句无用的废话, 如同要求程序员不要写 bug 一样, 正确但是无用. 靠习惯来保护个人信息, 是不可靠的. 别轻易相信一个人的习惯, 他可能随时会忘记.

写作有时会有一些临时的语句, 特别是程序员的技术博客, 简短的脚本可能随手就写了, 未必会时时记住使用环境变量, 因此留下敏感信息的可能性一定存在.

相信多数人能明白好的习惯是什么, 因此这里不讨论良好的习惯, 主要分享如何通过机制来避免泄露个人信息.

首先是分库, 手稿库和发布库分开, 所有发布在 Github Pages 上的文章都是经过审核的, 且不会有 draft 状态的文章泄露.

还可以通过 Github Action, 在每次提交时, 扫描敏感信息, 如果有敏感信息, 则不允许提交, 参阅trufflehog

本文分享的正则搜索, 只是一个简单的示例, 未集成到任何流程中, 你可以根据自己的需求, 做更多的定制化工作, 将其集成到流程中.

参考

snort

  • snort

Snort

https://www.snort.org/

Protect your network with the world’s most powerful Open Source detection software.

What is Snort? Snort is the foremost Open Source Intrusion Prevention System (IPS) in the world. Snort IPS uses a series of rules that help define malicious network activity and uses those rules to find packets that match against them and generates alerts for users.

Snort can be deployed inline to stop these packets, as well. Snort has three primary uses: As a packet sniffer like tcpdump, as a packet logger — which is useful for network traffic debugging, or it can be used as a full-blown network intrusion prevention system. Snort can be downloaded and configured for personal and business use alike.

snort配置

snort作防护工具使用的配置文件是默认的, 但是可以通过配置文件进行修改.

可信设计

安全架构与设计原则

安全三要素与安全设计原则

  • 完整性 Integrity
  • 可用性 Availability
  • 机密性 Confidentiality

开放设计原则

Open Design

  • 设计不应该是秘密, 开放设计更安全.
  • 安全不依赖保密.

失败-默认安全原则

Fail-safe defaults

  • 访问决策基于"允许", 而不是"拒绝".
  • 默认情况下不允许访问, 保护机制仅用来识别允许访问的情况.
  • 失败安全: 任何一个复杂系统应该有功能失效后的应急安全机制, 另外对错误消息和日志要小心, 防止信息泄露.
  • 默认安全: 系统在初始状态下, 默认配置是安全的, 通过使用最少的系统和服务来提供最大的安全性.

权限分离原则

Separation of Privilege

  • 一种保护机制需要使用两把钥匙来解锁, 比使用一把钥匙要更健壮和更灵活.
  • 权限分离的目的
  • 防止利益冲突, 个别权力滥用
  • 对某一重要权限分解为多个权限, 让需要保护的对象更难被非法获取, 从而也更安全.
  • 分离不同进程的权责

系统可以默认设置 3 个角色, 角色间系统账号权限相互独立, 权责分离:

  • 系统管理员: 负责系统的日常用户管理, 配置管理.
  • 安全管理员: 负责对用户状态, 安全配置的激活, 去激活管理.
  • 安全审计员: 负责对前面二者的操作做日志审计, 并拥有日志导出权限, 保证系统用户所有操作的可追溯性.

最小权限原则

Least Privilege

  • 系统的每一个用户, 每一个程序, 都应该使用最小且必须的权限集来完成工作.
  • 确保应用程序使用最低的权限运行.
  • 对系统中各用户运行各类程序, 如数据库, WEB 服务器登, 要注意最小权限的账户运行或连接, 不能是系统最高权限的账号.
  • 新建账号时, 默认赋给最小权限的角色.

经济使用原则

Economy of Mechanism

  • 保持系统设计和代码尽可能简单, 紧凑.
  • 软件设计越复杂, 代码中出现 bug 的几率越高, 如果设计尽可能精巧, 那么出现安全问题几率越小.
  • 删除不需要的冗余代码和功能模块, 保留该代码只会增加系统的攻击面.
  • 设计可以重复使用的组件减少冗余代码.
  • 经济适用: 简单, 精巧, 组件化.
  • 不要过设计

最小公共化原则

Least Common Mechanism

  • 尽量避免提供多个对象共享同一资源的场景, 对资源访问的共享数量和使用应应尽可能最小化.
  • 共享对象提供了信息流和无意的相互作用的潜在危险通道, 尽量避免提供多个对象共享同一资源的场景.
  • 如果一个或者多个对象不满意共享机制提供的服务. 那他们可以选择根本不用共享机制, 以免被其它对象的 bug 间接攻击.
  • 共享内存最小化
  • 端口绑定最小化
  • 减少连接, 防御 Dos 攻击

完全仲裁原则

Complete Mediation

  • 完全仲裁原则要求, 对于每个对象的每次访问都必须经过安全检查审核.
  • 当主体试图访问客体时, 系统每次都会校验主体是否拥有该权限.
  • 尽可能的由资源所有者来做出访问控制决定, 例如如果是一个 URL, 那么由后台服务器来检查, 不要在前端进行判断.
  • 特别注意缓存的使用和检查, 无法保证每次访问缓存的信息都没有被黑客篡改过. eg. DNS 缓存欺骗.

心理可承受原则

Psychological Acceptability

  • 安全机制可能为用户增加额外的负担, 但这种负担必须是最小的而且是合理的.
  • 安全机制应该尽可能对系统用户友好, 方便他们对系统的使用和理解.
  • 如果配置方法过于复杂繁琐, 系统管理员可能无意配置了一个错误的选项, 反而让系统变得不安全.
  • 该原则一般与人机交互, UCD(User Centered Design)界面相关.

纵深防御原则

Defense in Depth 纵深防御是一个综合性要求很高的防御原则, 一般要求系统架构师综合运用其他的各类安全设计原则, 采用多点, 多重的安全校验机制, 高屋建瓴地的从系统架构层面来关注整个系统级的安全防御机制, 而不能只依赖单一安全机制.

华为可信概念

  • 华为可信概念

  • 安全性(Security):产品有良好的抗攻击能力,保护业务和数据的机密性、完整性和可用性。

  • 韧性(Resilience):系统受攻击时保持有定义的运行状态(包括降级),遭遇攻击后快速恢复并持续演进的能力。

  • 隐私性(Privacy):遵从隐私保护既是法律法规的要求,也是价值观的体现。用户应该能够适当地控制他们的数据的使用方式。信息的使用政策应该是对用户透明的。用户应该根据自己的需要来控制何时接收以及是否接收信息。用户的隐私数据要有完善的保护能力和机制。

  • 安全性(Safety):系统失效导致的危害不存在不可接受的风险,不会伤害自然人生命或危及自然人健康,不管是直接还是通过损害环境或财产间接造成的。

  • 可靠性和可用性(Reliability& Availability):产品能在生命周期内长期保障业务无故障运行,具备快速恢复和自我管理的能力,提供可预期的、一致的服务。

ref:

华为.我们提供什么

华为内网网络安全分析

  • 华为内网网络安全分析

华为公司内部有很多不错的学习资料,自己也总结了很多知识经验,一直想着如何导入到自己的知识库。我清楚的明白这些通用化的知识是不涉密不敏感的,但信息安全警钟长鸣,让人心痒又不敢越雷池一步。经过一些测试,我发现公司的网络安全保护比较难突破。本文将对研发区黄区作一点粗略解析。绿区属于自由区域,默认无重要信息,一般为外围工作人员的网络。红区为超高级别的网络防护,目前尚未有长时间深入接触,简单接触到的红区位于网络设备实验室,存放各种大型交换机框架,是公司内网的枢纽,攻破红区的话就相当于攻破了区域网络,至少一栋楼的网络是可以瘫痪一段时间的。

路由器防火墙方式

加密:加密使用公钥,什么是公钥,简单理解为钥匙,这把钥匙可以人手一把,但只能上锁,不可以开锁。以上是极为具现化的表达,下边会稍微抽象一点,公钥是一个数字 A,有一条信息 M,用 A 对 M 进行加密操作$$f(A, M)$$,得到的信息无法轻易反向解密,类似对数字求平方和求开方的难度区别,合并同类项和因式分解的难度区别。反向解密会非常困难且耗时,使用超级计算机也需要数年乃至数十年。

解密:服务端使用私钥揭秘,四面八方汇聚来的已加密信息可以使用同一把私钥解密。

中间人:中间人角色类似传话筒,对客户端它是服务端,在服务端看来它是一个普通用户。因为传声筒的角色,双方的信息它都一览无余。简单描述的话,华为自身扮演了一个非常强大的中间人,所有外发的网络流量都会经过其扫描,不使用 80/443 端口的流量会全部拦截。

如何破解:由于黄区只有特定端口可以走代理服务器进出公网,对其它端口默认全封,那么严格来说网络流量就没有漏洞。我们可以手动生成密钥,在内网手动加密,再在外网手动解密,这样至少中间人看到的信息无法真正解析。加密器如何发送至内网,邮件/welink/网页都可以,但都会留下痕迹,其中通过网页直接秘密发送影响最小,痕迹最不明显。或者直接把密钥抄纸上,公司电脑保存起来,完全无法察觉,除了公司内遍布的摄像头。github 上的 ssh 贴心的支持 ssh over 443,经过测试发现也行不通,毕竟代理作为防火墙可以轻易识别这样的高风险网站。根据自身体验,公司的防火墙是基于白名单,而非黑名单,也就是即便是自建 ssh 服务器,也会被代理拦住。在浏览器中访问未知网站会有跳转页面提示“后果自负”,在终端窗口中直接就显示链接被关了。

华为毕竟是搞网络起家,搞网络的能人异士众多,技术上几乎无法突破,恐怕唯有社会工程能突破了。

本地防火墙方式

Windows 系统会安装安全应用,用户无法随意更改配置,配置由管理员统一下发。应用的网络访问权限可能是黑白名单方式,部分应用无法访问网络。vscode 的新版无法走代理通道。

DoS防范

DDoS 防范

DDoS 定义

两种 DoS 攻击方式:

  • 使服务崩溃
  • 使网络拥塞

攻击类型

攻击类型 攻击方式 应对方式
Distributed DoS 多台独立 IP 的机器同时开始攻击 1. 降级服务 2. 黑名单 3. 关闭网络设备
Yo-yo attack 悠悠球攻击 对有自动扩展资源能力的服务, 在资源减少的间隙进行攻击 黑名单
Application layer attacks 应用层攻击 针对特定的功能或特性进行攻击,LAND 攻击属于这种类型 黑名单
LANS 这种攻击方式采用了特别构造的 TCP SYN 数据包(通常用于开启一个新的连接),使目标机器开启一个源地址与目标地址均为自身 IP 地址的空连接,持续地自我应答,消耗系统资源直至崩溃。这种攻击方法与 SYN 洪泛攻击并不相同。 黑名单
Advanced persistent DoS 高级持续性 DoS 反侦察/目标明确/逃避反制/长时间攻击/大算力/多线程攻击 降级服务
HTTP slow POST DoS attack 慢 post 攻击 创造合法连接后以极慢的速度发送大量数据, 导致服务器资源耗尽 降级服务
Challenge Collapsar (CC) attack 挑战 Collapsar (CC) 攻击 将标准合法请求频繁发送,该请求会占用较多资源,比如搜索引擎会占用大量的内存 降级服务,内容识别
ICMP flood Internet 控制消息协议 (ICMP) 洪水 大量 ping/错误 ping 包 /Ping of death(malformed ping packet) 降级服务
永久拒绝服务攻击 Permanent denial-of-service attacks 对硬件进行攻击 内容识别
反射攻击 Reflected attack 向第三方发送请求,通过伪造地址,将回复引导至真正受害者 ddos 范畴
Amplification 放大 利用一些服务作为反射器,将流量放大 ddos 范畴
Mirai botnet 僵尸网络 利用被控制的物联网设备 ddos 范畴
SACK Panic 麻袋恐慌 操作最大段大小和选择性确认,导致重传 内容识别
Shrew attack 泼妇攻击 利用 TCP 重传超时机制的弱点,使用短暂的同步流量突发中断同一链路上的 TCP 连接 超时丢弃
慢读攻击 Slow Read attack 和慢 post 类似,发送合法请求,但读取非常慢, 以耗尽连接池,通过为 TCP Receive Window 大小通告一个非常小的数字来实现 超时断连,降级服务,黑名单
SYN flood SYN 洪水 发送大量 TCP/SYN 数据包, 导致服务器产生半开连接 超时机制
泪珠攻击 Teardrop attacks 向目标机器发送带有重叠、超大有效负载的损坏 IP 片段 内容识别
TTL 过期攻击 当由于 TTL 过期而丢弃数据包时,路由器 CPU 必须生成并发送 ICMP 超时响应。生成许多 ​​ 这样的响应会使路由器的 CPU 过载 丢弃流量
UPnP 攻击 基于 DNS 放大技术,但攻击机制是一个 UPnP 路由器,它将请求从一个外部源转发到另一个源,而忽略 UPnP 行为规则 降级服务
SSDP 反射攻击 许多设备,包括一些住宅路由器,都在 UPnP 软件中存在漏洞,攻击者可以利用该漏洞从端口号 1900 获取对他们选择的目标地址的回复。 降级服务, 封禁端口
ARP 欺骗 将 MAC 地址与另一台计算机或网关(如路由器)的 IP 地址相关联,导致原本用于原始真实 IP 的流量重新路由到攻击者,导致拒绝服务。 ddos 范畴

防范措施

  1. 识别攻击流量
    • 破坏服务
      • 识别流量内容
    • 拥塞服务
      • 记录访问时间
  2. 对攻击流量进行处理
    • 丢弃攻击流量
    • 封禁攻击 ip
      • ipv4 ip 数量有限, 容易构造黑名单
      • ipv6 数量较多, 不容易构造黑名单. 可以使用 ipv6 的地址段, 但有错封禁的风险
    • 控制访问频率

开源工具

攻击工具

防御工具

流量监控