Author Archives: Vancir

ZESTI论文阅读笔记

A. 彻底对敏感操作进行测试 ZESTI将程序输入替换成符号值, 并在同时记录相应的具体输入值, 在遇到分支时使用具体输入来导向程序执行流程. 在执行程序时, ZESTI会收集路径条件并用于验证潜在的错误操作. 例如, 只要程序访问符号内存地址, ZESTI就会检查对于所有满足当前路径条件的输入而言, 该操作是否安全. 1: int v[100]; 2: void f ( int x) { 3: if (x > 99) 4: x = 99; 5: v[x] = 0; 6 : } 上例代码存在bug: 当输入的x是负数时是可以访问非法内存的. 测试套件可以使用不同的参数调用此函数并验证函数行为, … Continue reading

Posted in papers, symbolic execution | Leave a comment

KLEE中Seed模式流程解析

main.cpp cl::list<std::string> SeedOutFile(“seed-out”); cl::list<std::string> SeedOutDir(“seed-out-dir”); 在main.cpp中首先会对ReplayKTestDir和ReplayKTestFile做判断. 如果用户有指定, 那么会继续判断SeedOutDir和SeedOutFile是否为空. if (!ReplayKTestDir.empty() || !ReplayKTestFile.empty()) { assert(SeedOutFile.empty()); assert(SeedOutDir.empty()); … // replay ktest 文件模式 } else { // 没有指定replay ktest模式 // 直接从SeedOutFile读取seed for(){ KTest *out = kTest_fromFile(it->c_str()); } seeds.push_back(out); } 最终读取到的seed都保存在std::vector<KTest *> seeds中. 然后判断是否有读取到seed … Continue reading

Posted in symbolic execution | Leave a comment

KLEE中Seed模式相关选项介绍

测试使用的命令为: klee -seed-out=./klee-out-0/test000002.ktest -only-seed -only-replay-seeds get_sign.bc 测试结果: varas@varas-virtual-machine:~/Downloads/klee/examples/get_sign$ klee -seed-out=./klee-out-0/test000002.ktest -only-seed -only-replay-seeds get_sign.bc KLEE: output directory is “/home/varas/Downloads/klee/examples/get_sign/klee-out-6” KLEE: Using STP solver backend KLEE: KLEE: using 1 seeds KLEE: seeding done (0 states remain) KLEE: done: total instructions = 21 … Continue reading

Posted in symbolic execution | Leave a comment

VulDeePecker: 基于深度学习的漏洞检测系统

首先需要找到适用于深度学习的软件程序的表示, 论文还有code gadgets来表示程序并将其转换成向量(code gadgets在向量中是许多行(不一定连续)的, 语义相关的代码). 并据此设计实现了VulDeePecker检测系统. 评估结果表明, 在使用第一类漏洞数据集时在误报率合理的条件下有着更小的漏报率. 论文的主要主要贡献 开启了使用深度学习检测漏洞的先河 初步确定了: 软件程序的表示, 检测粒度, 特定神经网络的选用 设计并实现了VulDeePecker. 并根据以下方面进行评估 VulDeePecker可以同时处理多类漏洞吗? -> VulDeePecker使用漏洞模式(vulnerability patterns, 由神经网络训练学得) 人类的专业知识可以帮助提高VulDeePecker表现吗? VulDeePecker同其他漏洞检测方法相比效率如何? 提出了第一个用于评估VulDeePecker和其他漏洞检测系统的数据集 论文结构: 第二节讲述一些初步的原则 第三节讨论VulDeePecker的设计 第四节描述VulDeePecker的实验评估结果 第五节讨论VulDeePecker的局限以及未来研究的一些问题 第六节讲述前人相关工作 第七节对论文进行总结

Posted in deep learning, papers | Leave a comment

UNVEIL: 一种大规模检测勒索软件的自动化方法

尽管勒索软件早已不是什么新奇的概念(这种攻击甚至可以追溯到20世纪80年代), 但这种类型的恶意软件最近开始复苏变得流行起来. 事实上, 近几年以来已经报道了数起备受瞩目的勒索软件攻击, 例如对索尼的大规模攻击导致了索尼不得不推迟发布电影<>. 勒索软件通常会锁定受害者桌面, 使用户无法访问系统, 或是加密, 覆写, 删除用户文件, 以此来勒索钱财. 然而, 虽然现今已经提出了许多通用的恶意软件检测系统, 但没有一个检测系统有尝试专门解决勒索软件的检测问题. 在本论文中, 我们提出了一种名为UNVEIL的新型动态分析系统, 专门用于检测勒索软件. 而分析的关键依据就是, 勒索软件要想成功实行攻击, 就必定会去篡改用户的文件或桌面. UNVEIL会生成一个伪造的用户环境, 并检测勒索软件与用户数据的交互时间, 同时还会跟踪系统桌面上发生的可能是由勒索软件行为造成的变化. 我们的评估结果显示, UNVEIL 显著地提高了现有技术水平, 并能够检测出以往反病毒公司未能检测出的在野勒索软件.

Posted in malware, papers | Leave a comment

编写YARA规则检测恶意软件

简介 我们都知道, 黑掉漏洞百出的代码比修补代码有趣得多. 但只会入侵的黑客并不一定能满足雇主的需求. 一些公司就希望安全研究人员能够基于他们收集和发现的恶意软件样本或泄露数据进行补丁. 本文适合人群: 新手和爱好者 阅读本文需要的知识 其实并不需要太多知识要求, 当你对恶意软件分析和逆向工程理解越深, 你就越有独特的方式捕获恶意软件. 不过这并不妨碍你写出惊人的yara规则出来. 我所见过的大部分规则都相当基础. 大部分看上去就像5分钟就能写好的python脚本. 编写规则, yara规则本身十分简单, 真正的技巧和细节都在分析部分 . 熟悉GNU Linux 熟悉C语言语法(不作要求, 但十分有用) 正则表达式 (同上, 不作要求, 但很有用)

Posted in malware | Leave a comment