zoukankan      html  css  js  c++  java
  • Cuckoo架构

    cuckoo在部署阶段,只在Guest系统里塞了一个agent,这个agent在运行阶段负责与Host端程序进行通信,从Host端接收sample, 整个客户端程序,以及配置文件。

    在Host端主要的源文件为:

    ./lib/cuckoo/core/scheduler.py
    
    class AnalysisManager(Thread):
        def acquire_machine(self):
    // 获得虚拟机    
        def build_options(self):
    //生成.conf配置文件
        def launch_analysis(self):
    //启动分析过程
        def process_results(self):
    //生成分析结果报告

    launch_analysis会调用:

    agent/agent.py
        def add_malware(self, data, name):
        def add_config(self, options):
        def add_analyzer(self, data):
        def execute(self):

    执行analyser.py,由Host上传到Guest上的分析程序包含如下结构:

    .
    └── windows
        ├── analyzer.py
        ├── bin
        │   └── execsc.exe
        ├── dll
        │   ├── cuckoomon_bson.dll
        │   ├── cuckoomon.dll
        │   └── cuckoomon_netlog.dll
        ├── lib
        │   ├── api
        │   │   ├── __init__.py
        │   │   ├── process.py
        │   │   └── screenshot.py
        │   ├── common
        │   │   ├── abstracts.py
        │   │   ├── constants.py
        │   │   ├── defines.py
        │   │   ├── errors.py
        │   │   ├── exceptions.py
        │   │   ├── __init__.py
        │   │   ├── rand.py
        │   │   └── results.py
        │   ├── core
        │   │   ├── config.py
        │   │   ├── __init__.py
        │   │   ├── packages.py
        │   │   ├── privileges.py
        │   │   └── startup.py
        │   └── __init__.py
        └── modules
            ├── auxiliary
            │   ├── disguise.py
            │   ├── human.py
            │   ├── __init__.py
            │   └── screenshots.py
            ├── __init__.py
            └── packages
                ├── applet.py
                ├── bin.py
                ├── cpl.py
                ├── dll.py
                ├── doc.py
                ├── exe.py
                ├── generic.py
                ├── html.py
                ├── ie.py
                ├── __init__.py
                ├── jar.py
                ├── pdf.py
                ├── vbs.py
                ├── xls.py
                └── zip.py

    具体的inject方法在该包的api/process.py下面

    def inject(self, dll=None, apc=False):

    inject方法支持两种注入方式:

    QueueUserAPC
    CreateRemoteThread

    这两种方式的原理都是一样的,都是用LoadLibrary来替换回调函数,同时将需要加载的dll名称作为回调的参数传递给回调函数,这样回调函数一执行,相应的dll就被加载到了进行的地址空间中。

    在./analyser/windows/modules/packages/下面有对于各个文件格式的sample的启动代码,基本上都是:

    p = Process()
    p.execute()
    p.inject(dll)
    p.resume()
    p.close()

    基本上就是,先找到启动某一类型文件的程序,然后启动它,并且注入dll进行监控。

    对于shellcode,使用execsc.exe执行这段shellcode。

    execsc.exe的主要源码为:

    // jump into shellcode
    int (*func)();
    func = (int (*)()) buf;
    (int)(*func)();
  • 相关阅读:
    Java 对象初始化
    Java 栈和堆
    值得细品
    磁盘的分区、格式化与挂载
    VirtualBox预存空间不足
    做个备忘
    SQL查数据库有哪些触发器,存储过程...
    SQL 中 CASE
    FMX的Style中的Effects的注意问题
    Python图像处理库(2)
  • 原文地址:https://www.cnblogs.com/long123king/p/3603595.html
Copyright © 2011-2022 走看看