突然出现的2018年5月消息包含了似乎无害的视频文件以及14字节小的恶意代码块
14字节中可能包含哪些恶意代码?似乎没有足够的空间来容纳《纽约时报》文章概述的逻辑。文章指出,收到消息后不久,电话开始发送大量数据。
#1 楼
是的,它可以。它可能只是触发漏洞,它将数据加载到电影中特定区域的内存中并执行。恶意部分可能很小,有效载荷可能存储在其他位置。提取并执行有效负载后,可以下载其他模块,而不仅仅是下载程序。
就像大多数恶意软件感染的工作方式一样:首先执行一个名为“ dropper”的小组件,然后执行下载并执行其他模块,直到下载并执行整个恶意软件为止。这14个字节可能非常容易丢失。
在这种特定情况下,这14个字节可以将电影的部分内容加载到内存中,将其地址加载到寄存器中,然后跳转到寄存器中。仅检查视频不会显示任何可疑内容,因为代码看起来像是视频数据(或元数据),但是从加载器读取的14个字节会很突出。
评论
@Anders:就不必从网站上下载内容,而是“下载”任何内容。它所要做的只是指向视频文件中的某个位置,在该位置中有一些较大的可执行代码嵌入在元数据中或图像的某些看上去有些吵杂的部分中。
–vsz
20 Jan 23'10:44
@Anders wget ti.ny /éř3A。实际的wget要求将协议包含在URL中,ti.ny不是实际的URL缩小符,并且即使使用unicode,URL ID的四个字节也很少...但是这个主意在那里...或者我可以只需调用四个字节的nc-1,然后让外界完成其余的工作。
– John Dvorak
20 Jan 23'10:56
@JohnDvorak我不希望视频播放器中的漏洞采取bash命令,而是采用机器代码。但这对我而言可能不是一个合理的假设。
–安德斯
20年1月23日在11:42
@Anders我对此假设表示共鸣,但是机器代码可以调用OS函数。在过去的DOS时代,这是通过软件中断来完成的,如今,这更可能是一个有趣的调用。那么...要调用外壳程序OS方法的1 + 4个字节,字符串指针函数参数的4个字节,shell命令本身的最大8个字节,字符串终止符一个字节?虽然很合身,但还是很合身。
– John Dvorak
20 Jan 23'11:48
请记住,IPv4地址仅需要4个字节;您不需要域名。
–丹克鲁姆
20年1月23日在22:11
#2 楼
它确实取决于编程语言和将代码注入其中的上下文。有关在很少的代码空间中可以完成的操作的示例,请访问Code Golf Stack Exchange网站。 。
评论
恶意程度太差很难客观地评估,否则这个问题将变得越发棘手。
– HAEM
20年1月23日在14:34
公平地讲,这些答案中的许多答案都是使用高尔夫语言,而手机上极有可能没有该语言。
– Findusl
20年1月23日在16:04
@findusl:有些人使用x86机器代码打高尔夫球,例如x86 / x64机器代码中打高尔夫球的技巧。或更不常用的ARM机器代码,例如我发布的ARM Thumb-2机器代码中的40字节Adler-32:计算Adler-32校验和。当然,漏洞利用通常是使流程中的现有代码完成某件事,因此只需将args设置为库函数,而不是注入实现算法的新代码。
– Peter Cordes
20 Jan 24 '20 at 0:53
@PeterCordes是的,他们使用机器代码编程,但通常不会得到最短的答案。我看了一下当前高尔夫球的顶级代码问题,有不少答案都用13个字节以下,但没有一个答案是在没有解释器的情况下可以在iPhone上运行的语言。
– Findusl
20年1月24日在8:02
@findusl:您是否错过了我说过在机器代码中实现算法通常不是漏洞利用的部分?相反,只需将args传递给现有函数。或者在更可能的ROP攻击中,有效负载主要是返回地址,而根本没有代码。 (机器代码注入很难; W ^ X正确地击败了它。)并且可以肯定的是,即使x86机器代码通常也不会像打高尔夫球的源代码那么小,但是在某些问题上它是相等或更好的。例如x86为8字节的GCD,13为色度键
– Peter Cordes
20年1月24日在8:46
#3 楼
它绝对适合。例如,此CTF挑战解决方案攻击执行约12个字节的二进制文件。发送的有效负载是:0: 54 push rsp
1: 5e pop rsi
0000000000000002 <y>:
2: 31 e2 xor edx,esp
4: 0f 05 syscall
6: eb fa jmp 2 <y>
(假设所有寄存器都清零了)
对于一个完整的pwn来说,这只有8个字节,因此您可以代码执行,然后导致远程shell。
当然,这是高度针对性的,但它只是一个示例。
评论
那是x86机器代码,但是如果您避免使用任何长指令,则ARM Thumb2机器代码也是每条指令2个字节。 (开始时的push / pop只是复制64位寄存器的2字节方法,而mov rsi和rsp则需要REX前缀)。 Thumb2具有2字节的mov reg,reg,我想即使是mov r1,sp也会将堆栈指针复制到第二个syscall-arg-passing寄存器。)
– Peter Cordes
20 Jan 25'15:41
#4 楼
正如我假设视频文件中的14个字节会触发一些内存漏洞一样,正如Peter Cordes所说,这14个字节是机器代码!这是一个非常重要的事实,因为很多人在这里回答考虑源代码,字符等。所有这些大约需要8位/每个字符1个字节。因此,使用14个字符,一个人可能做不到那么多。
但是那14个字节肯定是二进制的!因此,考虑到ARM CPU,其中一条指令为32位宽(包括自变量),而IP地址为32位。有足够的空间将该IP地址放入内存并执行系统调用。
评论
它更可能是Thumb2代码,因此每条指令2个字节。特别是因为有14个字节,而不是12或16个字节。
–糊状
20年1月23日在17:22
14个字节可能足以用有限的参数设置单个Syscall,但是您将不得不花很多时间才能使用它来在移动设备上泄露应用程序数据。
–eckes
20年1月23日在22:16
x86将比thumb2更加紧凑
–phuclv
20年1月24日在15:04
#5 楼
真正的(可执行机器代码的)代码注入通常可以很好地通过不可执行的堆栈和一般的W ^ X(写xor exec)页面权限来防御。如果我们在谈论缓冲区溢出,更典型的现代有效载荷是一些ROP攻击的返回地址。这不是传统意义上的代码,只是内存中已经存在的代码片段的地址。 (如果我们谈论的是ARM Thumb2模式,则可能是4字节指令的最后2个字节,因为这是一部手机。)
例如如果可以找到将正确的数据存入寄存器然后返回的代码,则可以将其地址,然后是libc中的
system()
的地址放到堆栈上。因此执行到达system()
时,在正确的位置指向一个字符串的指针,以将其视为第一个arg。代码部分的有效负载。当信息被科技新闻界稀释到目前为止时,很难猜测它到底在说什么或排除任何可能性。
#6 楼
对于要执行的消息中的十四个(或任何数量)字节,可能会要求OS中存在错误。但是,如果执行,它肯定会调用系统中已经存在的其他代码(
或者,在JPEG中,嵌入式预览可能包含更多的十四个字节调用的代码。
评论
与预期的间谍代码不完全相同……我曾经在我们大学池中可供学生使用的一台计算机上找到一个18字节的“ .com”可执行文件。不用考虑太多-所有带入的磁盘等都必须进行病毒扫描-我执行了该文件.. lo,瞧瞧..它擦掉了系统驱动器c:....对于在那里工作的技术人员,幸运的是,没有真正的数据丢失,因为这些数据全部在网络共享上,但是重新安装操作系统和应用程序花费了半个工作日。rm -rf /为8字节,在某些情况下可能被认为是恶意的。
@ 8bittree sudo rm -rf / \ nis正好为14(将\ n视为一字节的Unix / Linux换行符,而不是DOS / Windows CR + LF组合键)。
:(){:|:&};:\ n也有14个字符。
遗憾的是它不是13个字节...本来是真的...很不幸。