当前位置:首页 > 科技资讯 > 正文

揭秘开发者面试骗局:一次险些中招的“代码测试”

回顾那次精心设计的“面试骗局”,拥有8年自由开发经验的David Dodda至今仍心有余悸。

近日,David Dodda在社交媒体上分享了自己遭遇的定向开发者攻击。一名伪装成区块链公司高管的骗子,通过远程面试的幌子,试图在“编程测试”中植入恶意代码。幸运的是,David在最后时刻警觉,避免了潜在的灾难。

从“正规邀约”到“代码测试”:骗局的巧妙布局

故事始于LinkedIn上的一条看似普通的工作消息。David收到了一条来自“Symfa公司首席区块链官Mykola Yanchii”的私信,邀请他加入一款名为BestCity的房地产工作流程转型平台的开发工作。

在职业习惯驱使下,David首先核查了Mykola Yanchii的身份。LinkedIn上的履历完美无瑕,包括完整的职业经历、Symfa首席区块链官的头衔,以及大量的真实好友连接。这些“官方”信息进一步增强了对方的可信度。

不仅如此,Symfa公司的LinkedIn主页同样无懈可击:专业的品牌设计、多名员工信息和业务介绍,甚至发布了多个“用区块链改造房地产行业”的项目动态。这一切都让David相信,这是一家正常运营的公司。

对自由开发者而言,这类邀约并不罕见。发件人的礼貌和专业表达,没有提出不合理要求,仅约定通过线上面试进一步沟通,这些都强化了“可信度”。

“我从事自由职业8年了,做过Web应用、各种项目、代码审查也不少。我自认为安全意识很强——至少我是这么认为的。而这次看上去也很靠谱,所以我同意了电话面试。”

随后,Mykola Yanchii以“提前评估技术能力、节省沟通时间”为由,发来了一个Bitbucket代码库链接,要求David在30分钟内完成React/Node项目的简单优化。这几乎是技术面试中最常规的“Take-Home测试”。

30分钟的“时间陷阱”:差点忽视的安全风险

然而,一个关键细节为后续的“危险操作”埋下伏笔。当时,距离约定的电话面试时间仅剩30分钟,这对David而言时间有些紧张。

“正常情况下,我会先把代码放到Docker容器里隔离运行,确认没有问题再开始优化。”他坦言,多年的开发经验让他养成了“沙箱运行未知代码”的习惯,但这次的时间紧迫感打乱了节奏。

为了赶在面试前完成测试,David直接在本地环境打开了代码库,快速排查出几处明显的语法Bug,补充了缺失的docker-compose文件,还优化了部分冗余代码。整个过程与常规测试无异。

正当他准备输入“npm start”运行项目时,多年的安全直觉突然“警报响起”。“哪怕再急,运行未知代码前至少要扫一遍关键文件。”

抱着“多花1分钟检查”的想法,David将代码片段复制到了Cursor AI助手中,并发送了一条简单的查询指令:

“在我运行这个程序之前,你能看看这个代码库中是否有任何可疑代码吗?比如读取不该读取的文件、访问加密钱包等。”

没想到,AI给出的反馈让他瞬间冷汗直流。在server/controllers/userController.js文件中,隐藏着一段高度混淆的恶意代码:

  • //Get Cookie
  • (async () => {
  • const byteArray = [
  • 104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105,
  • ...

这段代码采用字节数组隐藏了一个远程URL,通过axios.get获取恶意负载,并使用JavaScript的Function构造函数执行。最重要的是,这段代码巧妙地嵌在管理功能之间,一旦访问到相应的admin路由,就能以完整的服务器权限执行。

David立即解码了那个字节数组:https://api.npoint.io/2c458612399c3b2031fb9。不出所料,这个URL指向的是一个恶意payload:一旦运行,将自动读取本地文件系统、抓取浏览器Cookie、访问加密钱包客户端等。

“哪怕我平时再谨慎,这次也差点中招”

事后David复盘了整个事件,发现这场骗局的“专业性”远超普通网络攻击。从心理诱导到技术伪装都经过了精心设计,专门针对开发者的工作习惯弱点。

例如,在心理层面:熟悉的面试流程、权威感、时间压力和社会证明等因素叠加在一起让一直自诩“安全意识很强”的David差点直接在主机执行了恶意代码。

“哪怕我平时再谨慎这次也差点中招。”David感慨道骗子完全摸清了开发者的工作场景:每天要处理大量GitHub仓库、npm包、测试代码很难对每一份文件都进行全面的安全扫描而‘面试测试’的场景又进一步降低了心理防线。

好在David在按下回车前多想了一秒把代码丢给AI检查了一下。这短短的一秒阻止了一个可能导致生产环境凭证泄露、个人钱包被清空的灾难。