V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AoEiuV020
V2EX  ›  程序员

记一次 github 泄漏 accessKey

  •  
  •   AoEiuV020 ·
    AoEiuV020 · 2021-04-19 10:41:49 +08:00 · 5669 次点击
    这是一个创建于 1074 天前的主题,其中的信息可能已经有所发展或是发生改变。

    突然看到阿里云的 accessKey 泄漏邮件才发现自己不小心把 key 传到 github 上了,

    赶紧从床上爬起来开电脑准备删文件,第一反应就是用 filter-branch 彻底删除历史中的这个文件,强制推送覆盖 github 上的版本,

    命令随便就能搜到,

    git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
      --prune-empty --tag-name-filter cat -- --all
    

    但是,但是从阿里云给的泄漏地址打开居然还能打开泄漏 key 的文件,

    仔细一看阿里云打开的是特定版本的文件,哪怕这个版本已经不在最终仓库里了,github 还是能打开的,

    也就是说光自己删除数据是没用的,这看起来是 github 缓存已经删除了的 commit,

    肯定要想办法删除这些缓存才行,

    于是找到 github 官方文档,

    https://docs.github.com/cn/github/authenticating-to-github/removing-sensitive-data-from-a-repository

    其中第 8 点明确说了要联系 GitHub 支持删除缓存之类,

    赶紧设置成 private 仓库,然后睡觉去了,

    第二天起来发支持工单,让 github 帮忙删除,

    04.18 11:39

    标题:

    Removing sensitive data from a repository

    内容:

    I submitted sensitive data to these two commits,

    https://github.com/AoEiuV020/LetsEncryptManualHook/tree/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx https://github.com/AoEiuV020/LetsEncryptManualHook/tree/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    I found that I cannot delete them completely,I have used filter-branch to completely delete sensitive data and force push, But these two commits can still be accessed, Please help me to delete these two commits completely,

    04.18 22:19

    收到工单回复,说缓存清除了,

    Hi 啊 o 额 iu 鱼,
    
    Thank you for contacting GitHub Support!
    
    I have gone ahead and cleared the cache for you.
    
    Please let me know what else I can assist with!
    
    Cheers,
    J.J.
    

    至此才完成彻底删除 github 上的敏感数据,光等工单就等了十个半小时,

    大家要是有删除过 github 上的却没有发工单的可以试一下删除了的 commit 还能不能打开的,

    notion

    30 条回复    2021-04-20 12:11:37 +08:00
    learningman
        1
    learningman  
       2021-04-19 10:44:20 +08:00   ❤️ 18
    你知道有多少 bot 在扫 GitHub 吗。。。
    正确做法是销毁对应的 key 吧,你把 git 历史删了不是掩耳盗铃
    yanqiyu
        2
    yanqiyu  
       2021-04-19 10:49:25 +08:00
    accessKey 一旦泄露就应该吊销,因为泄露的范围不可预知
    AoEiuV020
        3
    AoEiuV020  
    OP
       2021-04-19 10:49:38 +08:00
    @learningman 因为我看阿里云 accessKey 泄漏点处理推荐做法就是手动删除泄露代码,其次才是重置 key, 我就信了,
    而且同时泄露的不只阿里云一个 key,感觉不是很必要全部重置,
    我想着就算有 bot 扫到,也不会知道我这 key 是啥吧,而且应该也不至于有 bot 把 github 上所有项目所有 commit 包括已经删除了的都缓存起来分析,
    Rheinmetal
        4
    Rheinmetal  
       2021-04-19 10:51:13 +08:00
    警告:将提交推送到 GitHub 后,应考虑其包含的任何数据都将受到影响。如果您提交了密码,请更改密码! 如果您提交了密钥,请生成新密钥。

    为什么不能修改 或者再生成 还是生成过了 但是还是洁癖?
    AoEiuV020
        5
    AoEiuV020  
    OP
       2021-04-19 10:55:32 +08:00
    @Rheinmetal 也有道理,我还是去重置一下吧,主要是泄露了不只一个 key,所以第一个想法是删除泄露代码而不是重置,
    AoEiuV020
        6
    AoEiuV020  
    OP
       2021-04-19 11:12:45 +08:00   ❤️ 1
    好了,全部重置了,确实放心一些,就是有些麻烦,尤其国内的平台,动 key 都要额外的验证,
    yiXu
        7
    yiXu  
       2021-04-19 11:13:52 +08:00
    @AoEiuV020 我最近有使用 GitHub action 然后,不小心把 GitHub 的 token 传到了仓库中,在上传通过后,GitHub 直接邮件告知我该 token 被吊销。应该是 GitHub 自动检测到了自家生成的 token 。感觉这种直接吊销才更好点。
    AoEiuV020
        8
    AoEiuV020  
    OP
       2021-04-19 11:21:34 +08:00
    @yiXu 阿里云的 key 检测甚至有白名单功能,可以把泄露的 key 添加到白名单就不会检测了,不知道什么场景会用到这个白名单,但既然做了,应该有人需要吧,公开后继续生效的情况,
    ck65
        9
    ck65  
       2021-04-19 11:29:43 +08:00
    最近不小心在 GitHub 提交历史里泄了个废弃很久了的 ssh key,于是我把那台主机删掉了(
    AoEiuV020
        10
    AoEiuV020  
    OP
       2021-04-19 11:31:33 +08:00
    特地建了个没权限的 key 故意泄露一次再看看,果然阿里云这里是有手动删除建议,单选的,
    虽然已经重置了,但我确实也觉得马上彻底删除了应该就可以了的,
    laoyur
        11
    laoyur  
       2021-04-19 11:40:53 +08:00 via Android
    Hi 啊 o 额 iu 鱼

    笑出声
    konnnnn
        12
    konnnnn  
       2021-04-19 12:15:12 +08:00
    “啊 o 额 iu 鱼”这个 id,c4driod 吧?
    AoEiuV020
        13
    AoEiuV020  
    OP
       2021-04-19 12:19:59 +08:00
    @konnnnn 哇,居然还有人记得,好多年了,现在我贴吧基本只逛游戏吧了,
    WishMeLz
        14
    WishMeLz  
       2021-04-19 12:27:55 +08:00
    直接私有最简单
    whileFalse
        15
    whileFalse  
       2021-04-19 13:13:31 +08:00   ❤️ 1
    @AoEiuV020 你根本想不到国内用户会提出什么样的需求……
    而国内厂商也很难站着把钱挣了。
    q197
        16
    q197  
       2021-04-19 13:33:28 +08:00
    感觉 GitHub 网页版功能太少了,删除 commit,删除敏感信息泄露都只能用 git 操作,一看教程那么复杂,只好删库重开或者改私有库了。
    seki
        17
    seki  
       2021-04-19 13:38:49 +08:00
    @AoEiuV020 有时候还是会用到的。比如你写了一个脚本用来检测代码里面是否有 token 泄露,然后写测试的时候就需要有一个泄漏了 token 的样例代码文件
    Felldeadbird
        18
    Felldeadbird  
       2021-04-19 14:10:26 +08:00
    上次我推送就把 小程序的 key 丢上去了。github 马上就提示我泄露信息了。 我第一时间是去小程序后台 修改了 key 。然后强推版本。

    不过我发现貌似强推后,只要有之前的值,还是可以查到历史的 commit 信息。
    AoEiuV020
        19
    AoEiuV020  
    OP
       2021-04-19 14:17:31 +08:00
    @Felldeadbird 是的,我说的就是这个问题,要彻底删除只能工单联系 github 的人,等他们处理,
    cco
        20
    cco  
       2021-04-19 14:21:09 +08:00
    建议重写生成吧。
    Lemeng
        21
    Lemeng  
       2021-04-19 14:25:46 +08:00
    重置了事
    slert
        22
    slert  
       2021-04-19 14:27:12 +08:00
    所以阿里云怎么知道你泄漏了?
    AoEiuV020
        23
    AoEiuV020  
    OP
       2021-04-19 14:32:31 +08:00
    @slert 肯定是有机器人 24 小时不断扫描 github 上所有新提交吧,上传私钥几秒内就收到邮件提醒泄露了,
    learningman
        24
    learningman  
       2021-04-19 16:49:28 +08:00 via Android
    @AoEiuV020 你去找一个 gitmemory 的网站。。。为啥你会觉得没人全量扫 GitHub
    AoEiuV020
        25
    AoEiuV020  
    OP
       2021-04-19 16:59:40 +08:00
    @learningman 看了下 gitmemory 也都是爬最新数据做分析的吧,并没有保存已经删除了的数据,甚至我项目改名他就搜不到老名字了,
    sudoy
        26
    sudoy  
       2021-04-19 17:00:48 +08:00   ❤️ 1
    对于公开的仓库我坚持使用.env 文件保存敏感信息,然后加到 gitignore
    learningman
        27
    learningman  
       2021-04-19 17:11:34 +08:00 via Android
    @AoEiuV020 这只是一个例子,你想想,阿里云能扫,别人也能扫
    AoEiuV020
        28
    AoEiuV020  
    OP
       2021-04-19 17:15:16 +08:00
    @sudoy 我一般也会记得把项目要用的私密文件添加 ignore,这次泄露是搞了个临时文件写着把私密文件内容存在一个变量里,以便复制到服务器上跑测试个脚本用,然后一不小心就忘记删除和其他修改一起上传了,
    文件大概长这样,
    key='secret=xxxx'
    显然不是正常会用到的,也就没想着 ignore 什么的,
    AoEiuV020
        29
    AoEiuV020  
    OP
       2021-04-19 17:18:08 +08:00
    @learningman 这个我是知道的,我想说的是,大家只会扫最新的内容,分析之后保存自己想要数据,secret 也只是个 base64,正常扫到不会认出这是什么,应该不至于有第三方把 github 泄露过的所有东西全部保存起来需要时再都调出来查,
    liangch
        30
    liangch  
       2021-04-20 12:11:37 +08:00
    重置 key 多简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3348 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:23 · PVG 21:23 · LAX 06:23 · JFK 09:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.