黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 Windows常见特洛伊木马任务(4)沙箱检测

news/2024/11/15 5:28:15/

黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 Windows常见特洛伊木马任务(4)沙箱检测


文章目录

  • 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 Windows常见特洛伊木马任务(4)沙箱检测
  • 写在前面
  • 构建sandbox_detect.py脚本
    • 构建Detector类
    • 添加detect方法
  • 小试牛刀
  • 写在后面


写在前面

防病毒解决方案越来越多地采用某种形式的沙箱来确定可疑样本的行为。无论这个沙箱是在越来越流行的网络周界上运行,还是在目标机器本身上运行,我们都必须尽力避免向目标网络上的任何防御措施倾斜。
我们可以使用一些指标来确定特洛伊木马是否在沙箱中执行。我们将监视目标机器以获取最近的用户输入。然后我们将添加一些基本的智能来查找击键、鼠标点击和双击。典型的机器在启动的一天有许多用户交互,而沙箱环境通常没有用户交互,因为沙箱通常用作自动恶意软件分析技术。我们的脚本还将尝试确定沙箱操作符是否重复发送输入(例如,可疑的、快速的连续鼠标点击),以便尝试响应基本的沙箱检测方法。最后,我们将比较用户最后一次与机器交互的时间与机器运行的时间,这将让我们很好地了解我们是否在沙箱中。然后,我们可以决定是否继续执行木马程序。

构建sandbox_detect.py脚本

接下来让我们开始研究一些沙箱检测代码。创建并打开sandbox_detect.py脚本,并输入以下代码:

from ctypes import byref, c_uint, c_ulong, sizeof, Structure, windll
import random
import sys
import time
import win32apiclass LASTINPUTINFO(Structure):fields = [('cbSize', c_uint),('dwTime', c_ulong)]def get_last_input():struct_lastinputinfo = LASTINPUTINFO()struct_lastinputinfo.cbSize = sizeof(LASTINPUTINFO)windll.user32.GetLastInputInfo(byref(struct_lastinputinfo))run_time = windll.kernel32.GetTickCount()elapsed = run_time - struct_lastinputinfo.dwTimeprint(f"[*] It's been {elapsed} milliseconds since last event.")return elapsedwhile True:get_last_input()time.sleep(1)

我们定义了必要的导入,并创建了一个LASTINPUTINFO结构,它将保存系统上检测到最后一个输入事件的时间戳(以毫秒为单位)。接下来,我们创建一个函数get_last_input,以确定最后一次输入。请注意,在进行调用之前,必须将cbSize变量初始化为结构的大小。然后我们调用GetLastInputInfo函数,它通过时间戳填充struct_lastputinfo.dwTime字段。下一步是使用GetTickCount函数调用确定系统运行了多长时间。经过的时间是机器运行的时间减去上次输入的时间。最后一小段代码是简单的测试代码,它允许我们运行脚本,然后移动鼠标,或者在键盘上点击一个键,然后查看这段新代码的实际效果。

构建Detector类

值得注意的是,运行系统的总时间和上次检测到的用户输入事件可能会因我们的特定植入方法而异。例如,如果我们使用网络钓鱼策略植入了我们的有效载荷,很可能用户必须点击链接或执行其他操作才能被感染。这意味着在最后一两分钟内我们才会看到用户输入。但是,如果我们看到机器已经运行了10分钟,并且最后一次检测到的输入是10分钟前,那么我们可能在一个尚未处理任何用户输入的沙箱中。这些判断调用都是一个良好的特洛伊木马程序的一部分。
当轮询系统以查看用户是否空闲时,我们可以使用相同的技术,因为我们可能只想在用户积极使用机器时开始截屏。同样,当用户看起来离线时,我们可能只想传输数据或执行其他任务。例如,我们还可以随着时间跟踪用户,以确定他们通常在线的日期和时间。
记住这一点,接下来我们定义三个阈值,在决定我们不再处于沙箱中之前,我们必须检测这些用户的输入值。删除最后三行测试代码,并添加一些额外的代码来查看击键和鼠标点击。这次我们将使用纯ctypes解决方案,而不是PyWinHook方法。当然我们也可以轻松地将PyWinHook用于此目的,但工具箱中有几个不同的技巧总是有帮助的,因为每种防病毒和沙箱的技术都有自己的方法来发现这些技巧。现在我们开始编码:

class Detector:def __init__(self):self.double_clicks = 0self.keystrokes = 0self.mouse_clicks = 0def get_key_press(self):for i in range(0, 0xff):state = win32api.GetAsyncKeyState(i)if state & 0x0001:if i == 0x1:self.mouse_clicks += 1return time.time()elif i > 32 and i < 127:self.keystrokes += 1return None

我们创建了一个Detector类,并将点击和按键计数初始化为零。get_key_press方法告诉我们鼠标点击的次数、鼠标点击的时间以及目标发出的击键次数。这通过在有效输入键的范围内迭代来实现;对于每个键,我们使用GetAsyncKeyState函数调用检查它是否被按下。如果键的状态显示它被按下(state & 0x0001为真),我们检查其值是否为0x1,这是鼠标左键点击的虚拟键代码。我们增加鼠标点击的总次数并返回当前时间戳,以便稍后执行计时计算。我们还检查键盘上是否有ASCII按键,如果有,只需增加检测到的按键总数。

添加detect方法

现在,我们将这些函数的结果合并到我们的主沙箱检测循环中,将以下方法添加到sandbox_detect.py:

    def detect(self):previous_timestamp = Nonefirst_double_click = Nonedoubule_click_threshold = 0.35max_double_clicks = 10max_keystrokes = random.randint(10, 25)max_mouse_clicks = random.randint(5, 25)max_input_threshold = 30000last_input = get_last_input()if last_input >= max_input_threshold:sys.exit(0)detection_complete = Falsewhile not detection_complete:keypress_time = self.get_key_press()if keypress_time is not None and previous_timestamp is not None:elapsed = keypress_time - previous_timestampif elapsed <= doubule_click_threshold:self.mouse_clicks -= 2self.double_clicks += 1if first_double_click is None:first_double_click = time.time()else:if self.double_clicks >= max_double_clicks:if (keypress_time - first_double_click <= (max_double_clicks*doubule_click_threshold)):sys.exit(0)if (self.keystrokes >= max_keystrokes and self.double_clicks >= max_double_clicks and self.mouse_clicks >= max_mouse_clicks):detection_complete = Trueprevious_timestamp = keypress_timeelif keypress_time is not None:previous_timestamp = keypress_timeif __name__ == '__main__':d = Detector()d.detect()print('okay.')

注意这些代码块中的缩进!我们首先定义一些变量来跟踪鼠标点击的时间,以及三个阈值,这三个阈值用来确定我们在考虑自己在沙箱之外运行之前,有多少次击键、鼠标点击或双击是我们期望的。我们在每次运行时随机化这些阈值,但当然可以根据自己的测试设置自己的阈值。
然后,我们检索自某种形式的用户输入在系统上注册以来所经过的时间,如果我们觉得已经很久没有看到输入了(根据前面提到的感染发生的方式),我们就会退出,木马就会死亡。特洛伊木马不会在这里死亡,它可以执行一些无害的活动,例如读取随机注册表项或检查文件。在我们通过这个初始检查之后,我们继续进行主要的击键和鼠标点击检测循环。
我们首先检查按键或鼠标点击,如果函数返回一个值,则是按键或鼠标单击发生的时间戳。接下来,我们计算鼠标点击之间的时间间隔,然后将其与阈值进行比较,以确定是否是双击。除了双击检测之外,我们还想看看沙箱操作者是否将点击事件流式传输到沙沙箱中,以尝试伪造沙箱检测技术。例如,在典型的计算机使用过程中,看到连续100次双击是相当奇怪的。如果已经达到了双击的最大次数,并且它们快速连续发生,我们就会退出。我们的最后一步是看看我们是否通过了所有检查,并达到了点击、按键和双击的最大次数;如果是这样,我们就突破了沙箱检测功能。

小试牛刀

这里我们加入了一些打印日志,以便能够看的更加清楚。
说明:实际实践过程中最好不要打印这些日志,否则就被别人发现了。
运行效果如下。
在这里插入图片描述

写在后面

我们鼓励调整和使用设置,以及添加其他功能,如虚拟机检测。追踪拥有的几台电脑(我们指的是实际拥有的电脑,而不是被黑客入侵的电脑)的鼠标点击、双击和按键的典型使用情况,看看目标的兴趣点在哪里。根据我们监控的目标,我们可能需要更多的偏执设置,或者我们可能根本不关心沙箱检测。
使用我们在本章中开发的工具可以作为在特洛伊木马中推出的基本功能层,并且由于我们的特洛伊框架的模块化,我们可以选择部署其中的任何一个。


http://www.ppmy.cn/news/520027.html

相关文章

灰鸽子--木马、后门实验

目录 实验目的 实验要求 实验原理 实验环境 实验步骤 实验目的 1.了解木马攻击的原理。 2. 掌握木马与后门工作机制 3. 掌握木马与后门的防范措施 实验要求 利用灰鸽子客户端配置服务器程序并生成服务端配置并生成服务器进行木马植入&#xff0c;通过灰鸽子客户端界面进行远…

信息安全原理与技术第七次实验:木马攻击与防范

信息安全原理与技术第七次实验&#xff1a;木马攻击与防范 前言一、实验目的二、实验原理三、实验环境四、实验内容五、思考题 前言 为了帮助同学们完成痛苦的实验课程设计&#xff0c;本作者将其作出的实验结果及代码贴至CSDN中&#xff0c;供同学们学习参考。如有不足或描述…

特洛伊木马程序_历史著名的特洛伊木马计,希腊的人造礼物

"攻其不备,出其不意。"说的就是这场战役了。希腊人和特洛伊人之间发的战争开始了。 希腊人联合起来攻打特洛伊城,但特洛伊城是个十分坚固的城市,希腊人攻打了9年也没有打下来。 第10年的一天早晨,希腊联军的战舰突然扬帆离去,平时喧闹的战场变得寂静无声。特洛伊…

python木马程序设计_基于HTTP的Python特洛伊木马程序,用于远程系统取证和特权转移

python木马程序设计 总览 (Overview) In this article, we will be building a python based trojan that does the following: 在本文中&#xff0c;我们将构建一个执行以下操作的基于python的木马&#xff1a; Download remotely unrelated code to the trojan and run it 将…

恶意代码防范技术原理-计算机病毒和特洛伊木马分析与防护

一、计算机病毒分析与防护 1.1 计算机病毒概念与特性 计算机病毒&#xff1a;是一组具有自我复制、传播能力的程序代码。它常依附在计算机的文件中&#xff0c;如可执行文件或Word文档等 计算机病毒表现的主要症状 计算机屏幕显示异常机器不能引导启动磁盘存储容量异常减少磁…

计算机木马与病毒

文章目录 一、病毒1、简介2、七个阶段3、七种特性4、类型5、传播途径 二、木马1、简介2、原理3、类型4、特征5、传播途径 三、病毒的简单实现1.无限弹框 四、木马的简单实现1、屏幕实时监控 一、病毒 1、简介 编制者在计算机程序中插入的破坏计算机功能或者破坏数据&#xff…

特洛伊木马程序_特洛伊木马Dridex的新变种可避免反病毒软件的检测

更多全球网络安全资讯尽在E安全官网www.easyaq.com 小编来报&#xff1a;著名特洛伊木马Dridex出现新变种&#xff0c;可避免传统的防病毒产品的检测。 据外媒报道&#xff0c;Dridex是著名的特洛伊木马&#xff0c;专门窃取网上银行凭证。该恶意软件于2014年被首次发现&#x…

远程shell特洛伊木马病毒

LinuxAid综述  2001年9月5日&#xff0c;Qualys发布了一个关于基于Linux病毒的安全报警。这个病毒叫作"远程shell特洛伊木马&#xff08;Remote Shell Trojan&#xff09;"&#xff0c;攻击Linux ELF格式的二进制可执行文件。它具有复制自己的能力&#xff1a;当被…