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)();
總結
- 上一篇: linux系统编程之特权(Capabil
- 下一篇: 华为设备常用命令(Updating...