沙箱与宿主机交互信息过程

沙箱的作用就是跑出样本的行为,供威胁分析模块分析检测是否有威胁。
系统交互简图:沙箱与宿主机交互信息过程_第1张图片
沙箱与宿主机交互信息过程:
分为两个方向:1 (宿主机—>沙箱)沙箱获取任务,拿到任务后拼接完整样
本存储路径,然后去拿原样本
2 (沙箱—>宿主机)沙箱拿到样本后会在本地执行样本,在样本执行
过程中我们的get_log程序会抓取该样本的所有行为并记录在本地
Test.log的文件中(log放在本地是没用的,需要传到宿主机让威胁分
模块解析判断是否有威胁),把该log信息传到宿主机去。
详细过程:
这个过程中(沙箱与宿主机)运行的程序有:
沙箱中跑的程序:ExeAngrt.exe(负责取任务GET、拿样本GET、执行样本)
Getlog.exe (负责抓取样本的行为信息)
xxx 发送log的程序
宿主机的服务程序:httpd(有两个作用 1、80和443端口提供web界面的使用,
8080端口提供沙箱GET响应。)
Gettask.fcgi (当8080端口收到get请求时,开启该程序。
处理该响应、判断是哪类型沙箱的请求,去相映
Redis队列确认是否有任务,然后给出响应)
Sendreuslt.fcgi(当8080端口收到post消息时会开启该进程,
将该post消息中的样本log信息放到redis
中的aba_l队列,供后续abaserver程序检测)
Thttpd (自己开发的类httpd服务,开放8081端口只用
来响应沙箱拿样本,根目录是/home/bds/sample)

具体信息的交互顺序是:
1 沙箱中ExeAnget.exe会自动启动,不停的向宿主机发送get请求
(http://192.168.122.1:8080)确认宿主机是否有待检测的样本。
2 宿主机的httpd服务从8080端口收到get请求后,会开启gettask.fcgi进程
先识别哪类沙箱在要任务,然后去redis队列中查看相映的队列是否有任务,
无任务就回复沙箱等待,有任务就从对应的队列中pop一条任务,把该任务的
Samples_id与其他信息封装到200ok的回应包给沙箱。
3 沙箱收到200ok的响应后,会解析里面的内容、拿到sample_id后拼接成任务样本的存储路径,get该样本,这里是thttpd服务。
(http://192.168.122.1:8081/xxx/sample_id.dat)
4 拿到任务样本后会在本地执行该样本,getlog.exe会记录该样本的所有行为并存储在test.log的文件中,同时某程序监控这该文件,如果有记录产生就将该记录post到宿主机的8080端口。
5 宿主机的8080端口收到post消息后会开启sendrueslt.fcgi的进程,该进程的作用是把post消息中的样本行为log信息放到redis队列的aba_l队列中去,供abaserver(威胁分析)程序判断是否恶意。这就是沙箱与宿主机一个完整交互信息的过程,往后都是重复该过程(每次重复的时候加沙箱恢复快照)。

附图:
1 ExeAgent.exe 截图

2 http的8080虚拟主机配置

3 沙箱get任务日志信息,tail -f /var/log/httpd/bds-access-2017-02-08.log

4 沙箱上传样本行为log的post消息日志
tail -f /var/log/httpd/bds-access-2017-02-08.log

5 宿主机与虚拟机的通信pcap包(tcpdump -vv -nn -i virbr0 -w getpost2.cap)

你可能感兴趣的:(网络安全-APT,ATP检测产品,网络安全)