https://blog.csdn.net/weixin_39408343/article/details/95984062
污点跟踪分析技术
跟踪并分析污点信息在程序中的执行流程
什么是污点?
scanf("%d", &x);
通常来自于程序的外部输入,即hacker输入的点,标记为污点数据
通过跟踪和污点数据有关的程序执行流程,信息流向,可以知道是否会影响关键的程序操作,从而进行漏洞挖掘
产生点source点,污点信息的开端
制定并利用特定规则跟踪污点信息的传播流程
关键程序点 sink点 检测关键操作是否会收到污点信息的影响
数据依赖传播和控制依赖传播
数据依赖传播 即 显式信息流
控制依赖传播 即 隐式信息流
比如
if (x > 0)
y = 1;
else
y = 0;
y的值由x的值影响决定,若x为污染信息,y也是污染信息
String user = getUser();
String pass = getPass();
String sqlQuery =
"select * from login where user =
'" +user + "' and pass='" + pass + "'";
Statement stam = con.createStatement();
ResultSetrs = stam.executeQuery(sqlQuery);
if(rs.next())
success = true;
跟踪用户输入的user和pass,将其标记为污点信息,传入sqlQuery变量,sqlQuery变量也被感染为污点信息,进而程序被判定存在sql注入漏洞
Usage: codeql <command> <argument>...
Create and query CodeQL databases, or work with the QL language.
GitHub makes this program freely available for the analysis of open-source
software and certain other uses, but it is not itself free software. Type
codeql --license to see the license terms.
--license Show the license terms for the CodeQL toolchain.
Common options:
-h, --help Show this help text.
-v, --verbose Incrementally increase the number of progress
messages printed.
-q, --quiet Incrementally decrease the number of progress
messages printed.
Some advanced options have been hidden; try --help -v for a fuller view.
Commands:
query Compile and execute QL code.
bqrs Get information from .bqrs files.
database Create, analyze and process CodeQL databases.
dataset [Plumbing] Work with raw QL datasets.
test Execute QL unit tests.
resolve [Deep plumbing] Helper commands to resolve disk locations etc.
execute [Deep plumbing] Low-level commands that need special JVM options.
version Show the version of the CodeQL toolchain.
generate Commands that generate useful output.
github Commands useful for interacting with the GitHub API through CodeQL.
pack [Experimental] Commands to manage QL packages.
AST抽象语法树
源代码------》》》》 转换为 -----》》》》 AST
抽象语法树 abstract syntax code AST,是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,抽象语法树并不会表示出真实语法出现的每一个细节,例如
嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。
抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因些,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。
抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。
抽象语法树实例
从局部看起,从下网上看
迭代
消除左递归
递归分为立即左递归和非立即左递归
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。