这是一个相当奇怪的故事,我想分享以防它源自某种黑客行为,这样我们就可以更好地识别攻击的签名。
我是一名 Web 开发人员,我运行 Ubuntu 20.04,我在我的机器上的 docker 中运行奇怪的东西,我有 VSC,其中有许多质量可疑的开发扩展。我到处使用 ansible Python venvs 等。我使用 ssh 代理,我的 ssh 密钥受密码保护,并且在自动登录后我不会解密 ssh 密钥。
昨天我照常工作,晚上关掉了电脑。今天我无法使用此消息通过 ssh 连接到我的远程计算机。
sign_and_send_pubkey: signing failed for RSA "/home/xxxxx/.ssh/id_rsa" from agent: agent refused operation
[email protected]: Permission denied (publickey).
经过一番摆弄后,我检查了我的私钥,令我惊讶的是它被毁了。
$ cat ~/.ssh/id_rsa
-e
-e
是文件的内容,不是最快乐的时刻,但是我有冷备份,所以过了一会儿我就恢复了工作。
但我无法入睡,不知道这是怎么发生的。最近我没有生成任何新密钥,也没有.ssh/
手动操作文件。
上的时间戳id_rsa
是我工作期间的昨天中午,也known_hosts
具有相同的时间戳,其中的其他文件.ssh/
具有合法的历史时间戳。大约在我通过 ssh 连接到一些旧机器上的时候,所以我看不出有什么理由去触摸known_hosts
文件。
谁能想到一种情况会导致id_rsa
用诸如此类的无意义覆盖-e
?我偏执地认为我使用的某些工具中存在恶意代码。或者当然是我的人为错误,但我通常都很警惕。感谢您的想法。
编辑:
我的
bash_history
不完整,因为我的配置不是最优的bash
,tmux
请参阅 https://askubuntu.com/questions/80371/bash-history-handling-with-multiple-terminals/80882。因此不幸的是不可能追踪特定的命令。基于回答我发现 VSCode 创建了很多以 开头的文件
-
,例如~/.config/Code/User/History/-707c1648
.另外,我最近遇到了一些 linters 的性能问题(运行了几秒钟),并且我看到在处理的文件旁边创建了一些临时文件。这让我假设 VSCode 中 git 命令和临时创建的文件之间可能存在冲突。这需要额外的关注来追踪。
答案1
不,这不是攻击。是某个地方出错了。
对于攻击者来说,用无效内容替换私钥文件并不是一个理想的目标。攻击者可能想要读私钥,但是更改用于身份验证的私钥是没有意义的,更不用说通过用一些无效文本替换它来销毁它了。这不会给攻击者带来任何优势,并且很容易被检测到。攻击者可能想要覆盖known_hosts
,但只想添加自己的公钥:销毁自己的公钥也不会给攻击者带来任何优势。如果这是一次攻击,那么它会以一种非常奇怪的方式失败,而且攻击者甚至没有尝试清理。当然,这并不违反物理定律,但完全难以置信。
作为-e
内容,很可能是某些 shell 命令中的错误,该命令-e
本来是作为选项,但被解释为内容。在同时修改其他文件的情况下,可能的罪魁祸首是某些文件内容替换命令:例如find … | xargs perl -i -p -e …
,由于错误引用或复制粘贴错误或文件名中存在杂散空格或意外字符等,该命令最终运行的文件数量超出了预期。
检查您是否有一个以破折号开头的文件名(locate /-
如果它是公开可见的,则会找到它,否则find ~ -name '-*'
)。或者可能是带有空格后跟破折号(locate ' -'
或find -name '* -*'
)的文件名。这可能是导致神秘效果的罪魁祸首,该命令是由于命令传递文件名时不使用 using --
,并且带有空格,不使用变量扩展周围的引号或使用xargs
without -0
。如果您设法找到罪魁祸首,并且发现它位于您编写的 shell 命令中,请参阅为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?和忘记在 bash/POSIX shell 中引用变量的安全隐患。如果事实证明它是在其他人编写的 shell 命令中,请报告错误并向他们指出这些资源。在您的情况下,这是偶然的,但是可以控制文件名的攻击者可以利用该错误来做有用的事情。