文章目录:
-
一.Powershell恶意代码检测
1.Light-Weight Deobfuscation and Semantic-Aware Attack Detection(CCS19 反混淆)
2.字符级CNN(AsiaCCS18)
3.AMSI-Based Detection Using Contextual Embeddings(Token-Char架构 AsiaCCS20)
4.FC-PSDS检测方法(RF+DNN 信安学报)
5.基于混合特征的检测模型(Neurocomputing21)
6.AA-PSFC检测方法(BiGRU 武大学报)
7.POSTER(AST+DNN CCS18)
8.PSDEM(反混淆 ISCC18)
9.PowerDrive(动静态反混淆 DIMVA19)
-
二.抽象语法树之deobshell
-
三.AST抽取实例操作
1.环境部署
2.AST提取
3.代码解析及结果
-
四.总结
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正。同时,前期翻译提升为主,后续随着学习加强会更多分享论文的精华和创新,在之后是复现和论文撰写总结分析。虽然自己科研很菜,但喜欢记录和分享,也欢迎大家给我留言评论,学术路上期待与您前行,加油~
前文推荐:
-
[AI安全论文] 05.RAID-Cyber Threat Intelligence Modeling Based on GCN
-
[AI安全论文] 06.NDSS2020 UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats
-
[AI安全论文] 14.S&P2019-Neural Cleanse 神经网络中的后门攻击识别与缓解
-
[AI安全论文] 15.Powershell恶意代码检测论文总结及抽象语法树(AST)提取
一.Powershell论文总结
1.Light-Weight Deobfuscation and Semantic-Aware Attack Detection (CCS19 反混淆)
- https://dl.acm.org/doi/pdf/10.1145/3319535.3363187
- 浙江大学,最经典的一篇Powershell论文,详细介绍解混淆工作
2.字符级CNN (AsiaCCS18)
- BGU、微软
- https://dl.acm.org/doi/pdf/10.1145/3196494.3196511
3.AMSI-Based Detection Using Contextual Embeddings (Token-Char架构 AsiaCCS20)
- BGU、微软(上篇相同团队)
- https://dl.acm.org/doi/pdf/10.1145/3320269.3384742
-
Token-Char模型架构
4.FC-PSDS检测方法 (RF+DNN 信安学报)
- 中科院信工所刘老师团队
-
原始数据处理
-
特征组合
-
模型训练与分类识别
5.基于混合特征的检测模型 (Neurocomputing21)
- 四川大学黄老师团队
- https://www.sciencedirect.com/science/article/pii/S0925231221005099
-
首先,PowerShell的脚本被FastText嵌入。
-
然后添加从抽象语法树中提取的 PowerShell 代码的文本特征、标记特征和节点特征。
-
最后,脚本的混合特征将由随机森林分类器进行分类。
6.AA-PSFC检测方法 (BiGRU 武大学报)
- 武汉大学国家网络安全学院彭老师团队
7.POSTER (AST+DNN CCS18)
- CSAIL, MIT, USA
- https://dl.acm.org/doi/10.1145/3243734.3278496
-
学习PowerShell AST节点向量
-
按照家族类型对恶意脚本进行分类
-
探索嵌入式程序向量表示
8.PSDEM (反混淆 ISCC18)
- 中科院信工所
- https://ieeexplore.ieee.org/document/8538691
9.PowerDrive (动静态反混淆 DIMVA19)
- University of Cagliari
- https://link.springer.com/chapter/10.1007/978-3-030-22038-9_12
二.抽象语法树之deobshell
-
Deobshell
https://github.com/thewhiteninja/deobshell
-
Microsoft. Ast Class(System. Management. Automation. Language)
https//docs.microsoft.com/enus/dotnet/api/system.management.automation.language.astview=powershellsdk-7.0.0.
-
这是一个 PoC …仅支持 Powershell 的一个子集
-
data.zip 受密码保护,使用包含恶意软件样本的存档的通用密码
-
删除空节点
-
删除未使用的变量
-
删除未初始化变量的使用
-
简化表达式
-
加入、加、格式化、替换运算符
-
拆分、反向、调用表达式
-
类型转换为类型、字符串、字符、数组
-
用它们的值替换常量变量
-
修复特殊单词大小写
-
…
<BinaryExpressionAst Operator="Format" StaticType="System.Object">
<StringConstantExpressionAst StringConstantType="DoubleQuoted" StaticType="string">{0}{1}</StringConstantExpressionAst>
<ArrayLiteralAst StaticType="System.Object[]">
<Elements>
<StringConstantExpressionAst StringConstantType="SingleQuoted" StaticType="string">c</StringConstantExpressionAst>
<StringConstantExpressionAst StringConstantType="SingleQuoted" StaticType="string">AcA</StringConstantExpressionAst>
</Elements>
</ArrayLiteralAst>
</BinaryExpressionAst>
<StringConstantExpressionAst StringConstantType="SingleQuoted" StaticType="string">cAcA</StringConstantExpressionAst>
$mRSp73 = [ChaR[] ]" ))43]raHc[]gNIRtS[,)38]raHc[+98]raHc[+611]raHc[((eCAlper.)421]raHc[]gNIRtS[,'5IP'(eCAlper.)'$',)09]raHc[+99]raHc[+701]raHc[((eCAlper.)93]raHc[]gNIRtS[,'vzW'(eCAlper.)'
2halB.tcejboZck tuptuO-etirW
7halB.tcejboZck +'+' 6halB.tcejboZck + halB.tc'+'ejboZck '+'= 2galFFT'+'C:'+'vneZck
SYt!eciNSYt = 1galFFTC:vneZck
SYt...aedi dab yre'+'v'+' ,yre'+'v a yllacipyt svzWtaht ,ton fI .ti gninnur erofeb siht detacsufbo-ed uoy epoh ISYt eulaV- 2halB emaN- '+'ytreporPetoN epy'+'TrebmeM- rebmeM-ddA 5IP tcejboZck
SYt'+'.uoy tresed dna dnuora nur annog reveNSYt eulaV- 9hal'+'B emaN- ytreporPetoN epyTrebmeM- rebmeM-ddA 5'+'IP tcejboZck
SYt.nwod uo'+'y tel annog '+'re'+'veN .'+'pu uoy evig annog reveNSYt eulaV- 8halB emaN- ytreporPetoN epyTrebm'+'eM- rebmeM-d'+'dA 5IP tcejboZck
SYt}f1j9kdSYt eulaV- 7halB emaN- y'+'treporPetoN ep'+'yTrebmeM- rebmeM-ddA 5IP tcejboZck
SYtg4lf_3ht_t0nSYt eulaV- 4halB emaN- yt'+'reporPetoN epyTrebmeM- rebmeM-ddA 5IP tcejboZck
SYt1#f!J{SYt eulaV- 6halB emaN- ytreporPetoN epyTrebmeM- rebmeM-'+'ddA 5IP tcejboZck
SYtgalF,ehT,toN,oslASYt eulaV- 5halB emaN- ytreporPetoN epyTrebmeM- rebmeM-ddA 5IP tcejboZck
SY'+'t}fdjfkslfdSYt eulaV- 3halB emaN- ytrepor'+'PetoN e'+'pyTrebmeM- rebmeM-ddA 5IP tcejboZ'+'ck
SYtgalfSYt eulaV- halB em'+'aN- ytreporPetoN e'+'pyTrebmeM- rebmeM-ddA 5IP tcej'+'boZck
tc'+'ejbO'+'SP tcejbO-weN = tc'+'ejboZck'( ()''nioJ-'x'+]3,1[)eCNERefErpESoBreV$]GniRTS[( (. " ;[aRRAy]::REVerse($MrSp73);. ( 'IeX') ( -JoiN$MrSp73)
$object = New-Object PSObject;
$object | Add-Member NoteProperty Blah "flag";
$object | Add-Member NoteProperty Blah3 "dflskfjdf}";
$object | Add-Member NoteProperty Blah5 "Also,Not,The,Flag";
$object | Add-Member NoteProperty Blah6 "{J!f`#1";
$object | Add-Member NoteProperty Blah4 "n0t_th3_fl4g";
$object | Add-Member NoteProperty Blah7 "dk9j1f}";
$object | Add-Member NoteProperty Blah8 "Never gonna give you up. Never gonna let you down.";
$object | Add-Member NoteProperty Blah9 "Never gonna run around and desert you.";
$object | Add-Member NoteProperty Blah2 "I hope you de-obfuscated this before running it. If not, that''s typically a very, very bad idea...";
$env:CTFFlag1 = "Nice!";
$env:CTFFlag2 = $object.Blah + $object.Blah6 + $object.Blah7;
Write-Output $object.Blah2;
三.AST抽取实例操作
1.环境部署
海象运算的规则如下:
2.AST提取
-
python main.py deob -i test001.deob.ps1
-
ast.py
# coding=utf-8
import os
import subprocess
# noinspection PyPep8Naming
import xml.etree.ElementTree as ET
from modules.logger import log_info, log_debug, log_err
def read_ast_file(filename):
log_info(f"Reading input AST: {filename}")
try:
ast = ET.parse(filename)
return ast
except IOError as e:
log_err(e.args[1])
return None
except Exception as e:
log_err(str(e))
return None
def create_ast_file(ps1_file):
log_info(f"Creating AST for: {ps1_file}")
cmd = ["PowerShell", "-ExecutionPolicy", "Unrestricted", "-File",
os.path.abspath(os.path.join("tools", "Get-AST.ps1")),
"-ps1", os.path.abspath(ps1_file)]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
for line in result.stdout.splitlines():
log_debug(line)
return result.returncode == 0
3.代码解析及结果
-
main.py
# coding=utf-8
import os
import pathlib
import sys
from modules.ast import create_ast_file, read_ast_file
from modules.logger import set_log_level, LogLevel
from modules.optimize import Optimizer
from modules.rebuilder import Rebuilder
from modules.utils import welcome
OPTIONS = {}
def usage():
print("Usage: " + os.path.basename(sys.argv[0]) + ' [options]')
print()
print("Command:")
print(" deob : Deobfuscate PowerShell script")
print(" format : Format PowerShell script")
print()
print("Options:")
print(" -h, --help : Show help")
print(" -i, --in : Input .ps1 file")
print()
sys.exit(0)
def parse_args():
global OPTIONS
i = 1
while i < len(sys.argv):
if sys.argv[i] in ["-h", "--help"]:
usage()
elif sys.argv[i] in ["-i", "--in"]:
OPTIONS["input"] = sys.argv[i + 1]
i += 1
else:
OPTIONS["command"] = sys.argv[i]
i += 1
def deob(ps1_file):
p = pathlib.Path(ps1_file)
if create_ast_file(p):
if ast := read_ast_file(p.with_suffix(".xml")):
o = Optimizer()
o.optimize(ast)
with open(p.with_suffix(".deob.xml"), "wb") as output:
ast.write(output)
r = Rebuilder(p.with_suffix(".deob.ps1"))
r.rebuild(ast.getroot())
def format(ps1_file):
p = pathlib.Path(ps1_file)
if create_ast_file(p):
if ast := read_ast_file(p.with_suffix(".xml")):
r = Rebuilder(p.with_suffix(".formatted.ps1"))
r.rebuild(ast.getroot())
def main():
cmd = OPTIONS.setdefault("command", None)
if cmd == "deob":
deob(OPTIONS['input'])
elif cmd == "format":
format(OPTIONS['input'])
else:
usage()
if __name__ == '__main__':
welcome()
set_log_level(LogLevel.DEBUG)
parse_args()
print("main")
main()
四.总结
-
一.Powershell基础
-
二.Powershell恶意代码检测
1.Light-Weight Deobfuscation and Semantic-Aware Attack Detection(CCS19 反混淆)
2.字符级CNN(AsiaCCS18)
3.AMSI-Based Detection Using Contextual Embeddings(Token-Char架构 AsiaCCS20)
4.FC-PSDS检测方法(RF+DNN 信安学报)
5.基于混合特征的检测模型(Neurocomputing21)
6.AA-PSFC检测方法(BiGRU 武大学报)
7.POSTER(AST+DNN CCS18)
8.PSDEM(反混淆 ISCC18)
9.PowerDrive(动静态反混淆 DIMVA19) -
三.抽象语法树之deobshell
-
四.AST抽取实例操作
1.环境部署
2.AST提取
3.代码解析及结果 -
五.总结
-
https://powershell.one/powershell-internals/parsing-and-tokenization/abstract-syntax-tree
-
https://github.com/lzybkr/ShowPSAst
-
https://github.com/thewhiteninja/deobshell
-
https://github.com/pan-unit42/public_tools/tree/master/powershellprofiler
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论