Cuckoo架构
cuckoo在部署階段,只在Guest系統(tǒng)里塞了一個(gè)agent,這個(gè)agent在運(yùn)行階段負(fù)責(zé)與Host端程序進(jìn)行通信,從Host端接收sample, 整個(gè)客戶端程序,以及配置文件。
在Host端主要的源文件為:
./lib/cuckoo/core/scheduler.py
class AnalysisManager(Thread):
def acquire_machine(self):
// 獲得虛擬機(jī)
def build_options(self):
//生成.conf配置文件
def launch_analysis(self):
//啟動(dòng)分析過(guò)程
def process_results(self):
//生成分析結(jié)果報(bào)告
launch_analysis會(huì)調(diào)用:
agent/agent.py
def add_malware(self, data, name):
def add_config(self, options):
def add_analyzer(self, data):
def execute(self):
執(zhí)行analyser.py,由Host上傳到Guest上的分析程序包含如下結(jié)構(gòu):
.
└── 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來(lái)替換回調(diào)函數(shù),同時(shí)將需要加載的dll名稱作為回調(diào)的參數(shù)傳遞給回調(diào)函數(shù),這樣回調(diào)函數(shù)一執(zhí)行,相應(yīng)的dll就被加載到了進(jìn)行的地址空間中。
在./analyser/windows/modules/packages/下面有對(duì)于各個(gè)文件格式的sample的啟動(dòng)代碼,基本上都是:
p = Process()
p.execute()
p.inject(dll)
p.resume()
p.close()
基本上就是,先找到啟動(dòng)某一類型文件的程序,然后啟動(dòng)它,并且注入dll進(jìn)行監(jiān)控。
對(duì)于shellcode,使用execsc.exe執(zhí)行這段shellcode。
execsc.exe的主要源碼為:
// jump into shellcode
int (*func)();
func = (int (*)()) buf;
(int)(*func)();
總結(jié)
- 上一篇: linux系统编程之特权(Capabil
- 下一篇: 华为设备常用命令(Updating...