脚本查杀——攻防

本文介绍了恶意程序分析中的脚本查杀技术,如脚本木马的特点、下载者木马的功能、JS脚本运行机制,以及如何动态调试和识别连接网址。讨论了特征码查杀的优缺点和启发式查杀的概念,通过代码示例展示了如何使用正则表达式检测和区分恶意脚本文件。
摘要由CSDN通过智能技术生成

本篇博客记录学习姜晔老师在恶意程序分析与高级对抗中“脚本查杀”一节,欢迎大家一起去学习!

恶意程序分析与高级对抗技术 - Windows - 看雪学苑-看雪-安全培训|安全招聘|www.kanxue.com

Q:脚本木马有什么特点?

A:编写简单,易于免杀,难以封堵

静态查杀

Q:下载者木马的功能有哪些?

A:连接网站执行下载操作;运行下载下来的文件

Q:如何对下载者木马样本进行处理?

A:

1.确定连接的网站,将网站加入黑名单

2.分析下载下来的文件,归类并提取特征

3.将JS木马样本分类,提取特征

4.分析恶意网站归属,结合社工库,找出木马的编写者

Q:js脚本文件是依托什么运行的呢?

A:wscript.exe

Q:如何在OD中动态调试js文件呢?

A:首先在OD中载入wscript.exe,然后选择 调试——》参数,输入js脚本的路径之后,重新载入

Q:如何确定连接的网址呢?

A:1.在关键函数处下断点,比如说UrlCanonicializeA,该函数用于将url转换为规范格式

2.通过动态监控(wireshark或火绒剑)其网络行为来确定连接的url

JS躲避查杀的方法:

js文件的图标一般无法更改,所以一般在文件名下手,

诸如:invoice、payment、booking、schedule等与财务或行政相关的词汇

针对非安全人员以及需要处理很多业务文件 的员工来说迷惑性就比较高

Q:常见的伪装手段包括哪些?

A:多重后缀,RLO转义字符

Q:如何避免呢?

A:显示文件后缀名,显示文件的详细信息

特征码查杀

Q:特征码查杀常见的两种方式?

A:1.直接对病毒样本进行哈希运算,将哈希值加入病毒库,这也是云查杀技术采用的方式

缺点:即使病毒容易躲避查杀,即使很小的变化也会影响最后的哈希结果

2.在病毒内部提取特征码,结合相应的偏移进行查找

缺点:如果只针对某一局部的偏移很容易被黑客使用注释或其他手段实现修改偏移量,从而躲避掉查杀

解决方案:对文件进行切割,从多个部分来提取特征码

黑客新攻击方法:编写脚本程序在文件中的多处添加注释

启发式查杀

Q:什么是启发式查杀?

A:分析程序指令出现的顺序,或者特定的组合情况以及调用的函数一家参数等是否属于恶意行为特征,来判断目标程序是不是病毒程序。

静态启发查杀本质:可以字符串的选取与匹配工作

实战

import re

def remove_comments(code):
    # 正则表达式匹配注释并替换为空字符串
    pattern = r"(\".*?\"|\'.*?\')|(/\*.*?\*/|//[^\r\n]*$)"
    code = re.sub(pattern, lambda m: m.group(1) if m.group(1) else '', code)
    return code

def remove_quotes_plus(code):
    # 去除双引号和加号
    code = code.replace('"', '').replace('+', '')
    return code

def convert_ascii(code):
    # 将存在的ASCII转化为字符
    code = re.sub(r'\b(\d{1,3})\b', lambda m: chr(int(m.group(1))), code)
    return code

def check_for_keywords(code):
    # 判断是否存在关键字
    keywords = ['get', 'http']
    for keyword in keywords:
        if keyword in code:
            return True
    return False

def detect_trojan(filename):
    with open(filename, 'r') as file:
        code = file.read()
        code = remove_comments(code)
        code = remove_quotes_plus(code)
        code = convert_ascii(code)
        if check_for_keywords(code):
            print("The file {} contains a trojan.".format(filename))
        else:
            print("The file {} is clean.".format(filename))

# 测试
detect_trojan('trojan')

注意以上代码知识简单的判断文件中是否存在get和http字符

Q:没有把过滤混淆之后的文件保存,且正常的下载程序中也存在下载操作,也会涉及到get和http关键字,如何把恶意程序和正常下载程序区分开呢?如何减少误报率呢?

A:由于正常的脚本文件不会采用五花八门的混淆手段,而恶意的脚本文件中存在大量混淆,在去混淆之后文件的大小发生了显著的变化,因此可以对比解密前后文件的大小,此处认为如果相差是被以上就认为混淆技术存在。

# -*- coding: utf-8-*- 
import sys
import re
import os

# 利用正则表达式修改脚本文件
def RegularModify(fileName):
	# 正则表达式匹配注释(/**/)
	pattern_notes = re.compile(r'/\*{1,2}[\s\S]*?\*/')
	# 正则表达式匹配双引号和加号(“+”)
	pattern_plus = re.compile(r'"[\s\S]{0,1}\+[\s\S]{0,1}"')
	# 正则表达式匹配ASCII码(\x)
	pattern_ascii= re.compile(r'(\\x([0-9][0-9A-Za-z]))')
	# 打开原始文件
	oriFile = open(fileName)
	# 读取原始文件
	s = oriFile.read()
	# 删除原始文件中的注释 
	s = pattern_notes.sub('',s)
	# 删除原始文件中的双引号和加号
	s = pattern_plus.sub('',s)
    # 将文件中的ASCII码转换为字符
	generateFile = open(fileName + "_Gen",'w')
	ret = pattern_ascii.findall(s)
	for i in ret:
		s = s.replace(i[0], chr(int(i[1],16)))
	generateFile.write(s)
	generateFile.close()
	oriFile.close()

# 文件判定
def FileDetect(fileName):
	ori = os.path.getsize(fileName)
	after = os.path.getsize(fileName + "_Gen")
	generateFile = open(fileName + "_Gen",'r')
	download = 0; file = 0;
	# 对生成的文件进行关键字的匹配
	for lines in generateFile:
		if lines.find('GET') != -1 and lines.find('http') != -1:			
			download += 1
		elif lines.find('.exe') != -1 and lines.find('%TEMP%') != -1:
			file += 1	
	# 依据上述对比结果来判断文件是否为木马
	if download and file and (ori/after>10):
		print (fileName + "  detected  HEUR:Trojan-Downloader.JS.Notes.gen")
	else:
		print (fileName + "  Clean")
	generateFile.close()
	
def Main():
	filename = 'Trojan'  # 文件名
	RegularModify(filename)
	FileDetect(filename)

Main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tntlbb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值