CN1809812A - 用于源代码检测源代码中弱点的方法和装置 - Google Patents
用于源代码检测源代码中弱点的方法和装置 Download PDFInfo
- Publication number
- CN1809812A CN1809812A CNA2004800171635A CN200480017163A CN1809812A CN 1809812 A CN1809812 A CN 1809812A CN A2004800171635 A CNA2004800171635 A CN A2004800171635A CN 200480017163 A CN200480017163 A CN 200480017163A CN 1809812 A CN1809812 A CN 1809812A
- Authority
- CN
- China
- Prior art keywords
- dot matrix
- weakness
- variable
- routine
- model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Abstract
一种检测源代码中弱点的方法和系统。源代码被解析为中间表达。(例如以点阵的形式)导出用于编码中的变量、以及结合例程调用而使用的变量和/或表达式的模型。然后结合有关例程的预定规则来分析模型,以确定例程调用是否具备一个或多个预选弱点。
Description
技术领域
本发明涉及计算机系统安全,尤其涉及检测可能造成安全风险的计算机源代码弱点的方法和系统。
背景技术
与开发计算机程序相关联的问题之一是检测程序中的“弱点”的困难。当在此使用时,术语“弱点”是指在执行时有可能使外部输入能导致不适当的或非预期的运行的用户源代码的一部分。典型的弱点包括缓冲器溢出、紊乱情况、特许升级,其中每一个都会给程序的期望受控运行造成弱点。查看源代码以找出弱点是一个困难而又费时的过程。它需要对全部潜在弱点、怎样发现它们,以及怎样修复它们有全面的理解。
检测源代码中的弱点的现有方法包括实施源代码的词法分析。这涉及实施对众所周知的弱点的搜索,并将其指为潜在弱点。该方法的一个问题在于它会产生太多的假阳性。另一种方法需要实施对代码的人工的逐行分析。但是,这种方法劳动强度太大。
发明内容
本发明提供一种用于检测源代码中的弱点的方法和系统。
本发明的一方面中,提供了一种检测源代码中的弱点的方法和系统,包括以下步骤:分析源代码中的变量并且创建模型,其中每个模型指定有关每个变量的预定特征;使用变量模型来源代码创建源代码中例程调用的自变量模型;并且结合相应例程调用的预定标准使用该自变量模型,来确定例程调用是否具有因自变量和已知例程行为而引起的弱点。
本发明的另一方面中,提供了一种检测源代码中弱点的方法和系统,包括以下步骤:产生描述有关例程流的某些特征的模型,并且结合相应例程的预定标准使用该模型,来确定例程调用是否具有因该例程流引起的弱点。
本发明的又一方面中,提供了一种检测源代码中弱点的方法,包括以下步骤:产生描述有关要在例程中执行的动作的某些特征的模型,并且结合相应例程的预定标准使用该模型,来确定例程调用是否具有可使例程中的动作在期望设计外执行的弱点。
附图说明
在附图中,
图1示出根据本发明一实施例的系统和方法的各个步骤的流程图;
图2示出整数点阵的一个示例;
图3示出存储器尺寸点阵的一个示例;
图4示出数据尺寸点阵的一个示例;
图5示出无效终止点阵的一个示例;
图6示出存储器位置点阵的一个示例;
图7示出字符串值点阵的一个示例;
图8示出数据源点阵的一个示例;
图9示出根据本发明一实施例的流非敏感分析(Flow-Insensitive Analysis)所执行的各个步骤的流程图;
图10A-B示出根据本发明一实施例的流非敏感分析的在处理表达式中所执行的各个步骤的流程图;
图11A-B示出根据本发明一实施例的调用点分析(Call Site Analysis)的在处理表达式中所执行的各个步骤的流程图;
图12示出根据本发明一实施例的控制流图表;
图13示出本发明一实施例的系统和方法的各个步骤的流程图。
具体实施方式
本发明的较佳实施例提供了用于检测源代码中弱点的方法和系统。此处所用的术语“弱点”是指在执行时有可能使外部输入能导致不合适或不期望的执行的用户源代码的一部分。
本发明的较佳实施例提供了用于检测诸如缓冲器溢出、紊乱情况和特许升级的弱点的方法和系统。
图13是示出用于分析计算机程序以检测诸如缓冲器溢出、紊乱情况和特许升级的弱点的示例性逻辑的流程图。该处理有两个基块:语言特定处理和弱点分析。语言特定处理分析源代码并创建模型。语言特定处理首先以语言解析器136开始,它接收要分析的源代码134并从中创建中间表达(IR)。IR是本领域众所周知的,因而在此不描述解析逻辑。
模型138被创建来描述源代码的某些特征,并且该模型在弱点评估140中结合弱点数据库142使用,以确定是否有弱点存在。
图1是示出根据本发明某些实施例的用于为缓冲器溢出弱点分析计算机程序的示例性逻辑的流程图。该处理有两个基块:语言特定处理和弱点分析。
该语言特定处理分析源代码并建模用于调用选择过程、函数或例程的自变量。该模型使用称为“弱点点阵”的独特结构。该弱点点阵用于指定有关诸如其存储器尺寸、存储器类型等的自变量(不论是变量或表达式)的某些相关信息。该点阵规范是语言无关的。
弱点分析使用弱点点阵和其它信息来分析带有这种自变量的这种例程调用的影响。该分析是语言无关的。该分析应用规则来确定,源代码中的给定例程调用,包括该调用中使用的自变量,是否造成了某些错误类型的内在弱点或风险。例如,该分析可确定,在源代码中给定位置的带有特定自变量的特定例程调用产生了缓冲器溢出错误的潜在可能。
语言特定处理和弱点评估都利用点阵结构来建模和分析可用作例程自变量的变量或表达式。作为背景,点阵表示有关实体的值的认知的明确表达。图2示出整数值的整数点阵22的一个示例。在点阵顶部的顶端值()表示不知道该值。在点阵底部的底端值()表示一未知值(例如,没有对有关应当应用哪个可能值的解析)。在顶端值和底端值之间的各个值表示实体的可能值。在图2所示的整数点阵中,整数0、1、2、3、4和5是实体的可能值。
创建自变量的弱点点阵以选择例程的语言特定处理
语言特定处理首先以语言解析器12开始,它接收要分析的源代码10并从中创建中间表达(IR)。
流非敏感分析14分析该IR,并导出有关代码中每个变量的模型。这些模型以点阵形式指定并被称为弱点点阵。(这些点阵一般是众所周知的。)在较佳实施例中,弱点点阵(在下面的段落里有时也称为“表达式点阵”)包括描述变量或表达式(取决于该弱点点阵是否与变量或表达式相关联)的重要特征的多个其它点阵。更具体地,弱点点阵提供有关如下的信息:
·存储器尺寸;
·数据尺寸;
·数据是否无效终止;
·存储器块中包含的存储器种类;
·存储器块的一个或多个常量字符串值:以及
·数据源。
当确定应如何设置或修改点阵时,流非敏感分析逻辑将预定合并规则应用于各种点阵类型。这在例如分析表达式时使用。
流非敏感分析逻辑还利用整数点阵来描述整数类型变量(仍以点阵形式)。
图3示出存储器尺寸点阵24的示例。存储器尺寸点阵24是包括值高、低以及一对非负整数值的点阵,这些值直接地或通过指针引用来指示存储器块尺寸的可能范围。该点阵用来确定某些存储器操作是否溢出可用的存储。存储器尺寸点阵24的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值:
·低值()和任何其它值的合并,其结果是一个低值;以及
·两个存储器范围点阵值的合并,其结果如下:
例如,用C或C++声明的数组
char a[100]
具有100字节尺寸,是一个条目(1字节)乘以数组中元素的数量(100)的尺寸。
作为另一示例,表示尺寸值范围的存储器尺寸点阵是有用的:
char a[100]
char b[200]
char*c=(i==0)?a:b;
在该情形中,取决于选择数组a还是数组b,由变量c所指向的存储器块的尺寸可以是100字节或者200字节,而这种选择又取决于另一个变量i是否是0。用于该变量的存储器尺寸点阵结果可指定尺寸的最大值为200字节,最小值为100字节。
图4示出了数据尺寸点阵26的示例。数据尺寸点阵直接地或通过指针引用来指示在存储器块内已知数据尺寸的可能范围。该点阵用作确定某些存储器操作是否溢出可用的存储器。特别地,它通常用来指示无效终止字符串的尺寸,该无效终字符串尺寸可比包含其的存储器块要小。数据尺寸点阵26的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值;
·低值()和任何其它值的合并,其结果是一个低值;以及
·两个存储器范围点阵值的合并,其结果如下:
·范围最大化←范围1最大化
范围2最大化
图5示出无效终止点阵28的示例。无效终止点阵指示是否已知数据要被无效终止,例如,具有作为最终条目的指示数据结束的值0。它通常结合字符串结构使用。数据的范围包括指定它是无效终止的还是非无效终止的。无效终止点阵的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值;
·低值()和任何其它值的合并,其结果是一个低值:
·两个相等的非高、非低点阵值的合并,其结果是相同的点阵值;以及
·两个不同的非高、非低点阵值的合并,其结果是低点阵值()。
图6示出存储器位置点阵30的示例。存储器位置点阵指示包含存储器块的存储器种类,例如,堆栈存储器、堆阵存储器、静态存储器、和常量存储器。也可指定其它种类的存储器。存储器位置点阵30的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值;
·低值()和任何其它值的合并,其结果是一个低值;
·两个相等的非高、非低点阵值的合并,其结果是相同的点阵值;以及
·两个不同的非高、非低点阵值的合并,其结果是低点阵值()。
图7示出字符串值点阵32的示例。字符串值点阵指示存储器块的一个或多个常量字符串值。字符串值点阵的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值;
·低值()和任何其它值的合并,其结果是一个低值;
·两个相等的非高、非低常量字符串的合并,其结果是该常量字符串作为点阵值;以及
·两个不同的非高、非低常量字符串的合并,其结果是低点阵值()。
图8示出数据源点阵34的示例。数据源点阵指示数据的源,例如,指定该数据是在内部产生的(与所分析例程相关)还是在外部产生的。未知源的数据具有低值。数据源点阵的合并规则如下:
·高值()和任何其它值的合并,其结果是其它值;
·低值()和任何其它值的合并,其结果是一个低值;
·两个相等的非高、非低点阵值的合并,其结果是相同的点阵值;以及
·两个不同的非高、非低点阵值的合并,其结果是低点阵值()。
“弱点点阵”表示非整数类型变量(或表达式)的属性。在较佳实施例中,它结合了存储器尺寸点阵24、数据尺寸点阵26、无效终止点阵28、存储器位置点阵30、字符串值点阵32、以及数据源点阵34。
图9示出了在本发明较佳实施例的流非敏感分析14中执行的各个步骤的流程图。该流非敏感分析14导出每个非整数类型变量或表达式的弱点点阵以及每个整数类型变量或表达式的整数点阵。此处所用术语表达式点阵,是指在非整数变量或表达式情形下的弱点点阵,以及在整数类型变量和表达式情形下的整数点阵。
该流始于初始测试36,以确定所分析的变量是否为数组或结构。如果是,则该变量与弱点点阵相关联。然后在步骤38做出测试以确定该变量是否对其它例程可见或者作为一自变量传递到其它例程中。
如果该变量对其它例程可见或者作为一自变量传递到其它例程中,则在步骤40设置该变量的弱点点阵,以指定具有设置为该变量尺寸的值的存储器尺寸点阵。在步骤40中将该弱点点阵的所有其它值设置为低。虽然未在本流程图中示出,但如果该变量是一常量初始化变量,则数据尺寸点阵、无效终止点阵、以及字符串值点阵被设置为指示该变量的初始化值。
如果该变量对其它例程不可见或没有作为自变量传递到其它例程中,则存储器尺寸点阵被设置为变量尺寸的值。在步骤42中该弱点点阵中的所有其它值被设置为高。
如果步骤36的结果为“假”(表示变量不是数组或结构),则流程进入步骤44。在步骤44中,执行一检测以确定所分析的变量是否是一指针。如果是,则逻辑进入步骤46以确定该指针变量是否对其它例程可见,或者它是否已作为自变量被传递到其它例程中。
如果该变量对其它例程可见或作为自变量传递到其它例程中,则在步骤49中,该指针变量与弱点点阵相关联,并且弱点点阵的所有值被设置为低。
如果该变量对其它例程不可见或没有作为自变量传递到其它例程中,则在步骤48中,该指针变量与弱点点阵相关联,并且弱点点阵的所有值被设置为高。
如果步骤44的结果为“假”(表示变量不是数组、结构或指针),则流程进入步骤50。在步骤50中,执行一检测以确定所分析的变量是否是一个整数类型变量。整数类型变量与整数类型点阵相关联。如果是,逻辑进入步骤52以确定整数变量是否对其它例程可见,或者它是否作为自变量被传递到其它例程中。
如果该变量对其它例程可见或已作为自变量传递到其它例程中,则在步骤56中,该整数类型变量与整数点阵相关联,其中所有值被设置为低。
如果该变量对其它例程不可见或没有作为自变量传递到其它例程中,则在步骤54中,整数点阵中的值被设置为高。
在流非敏感分析14导出例程中每个变量的弱点点阵或者整数点阵之后,流非敏感分析14访问例程中的每一语句。该访问可以任何顺序进行。语句中的每个表达式都以该顺序被访问,从而在处理该表达式之前,已处理所有作为输入(即从属性)的所有表达式。例如,在表达式中:
a=(b+c)+d;
其部分、或者子表达式b或c必须在处理表达式(b+c)之前处理。类似地,子表达式(b+c)和d必须在处理表达式(b+c)+d之前处理。
图10A-B示出用于处理例程中每个表达式的较佳实施例的流非敏感分析逻辑的流程图。该流程始于初始化测试58,来确定所分析的表达式是否是用于变量的地址。如果是,则在步骤60中,进行一测试以确定该变量是否是数组或结构、或确定该变量是否是一常量字符串。如果是,则在步骤64中,弱点点阵与该表达式相关联,其存储器尺寸点阵被设置为变量尺寸,并且其存储器位置点阵被设置为所引用变量的存储器种类。如果该变量具有常量(const)属性并且是字符串,则数据尺寸点阵被设置为字符串尺寸,并且无效终止点阵被设置为无效终止。字符串值点阵被设置为字符串值。数据源点阵被设置成指定数据源是内部的。如果表达式指向变量地址、但该变量并非常量字符串,则在步骤62中,弱点点阵与表达式相关联,其存储尺寸点阵设置为变量尺寸,且其存储器位置点阵设置为所引用变量的存储器种类。其它点阵条目被设置为低值。此外,由于该变量是地址明示的(即,指向它的指针存在、并且它可由写入该指针的任何指针修改),所以在步骤62中,取得地址的弱点点阵使数据尺寸点阵、无效终止点阵、字符串值点阵、以及数据源点阵设置为低(其中存储器尺寸点阵和存储器位置点阵保持不变)。
如果步骤58的结果是“假”(表示表达式不指向变量地址),则流程进入步骤66。在步骤66中,进行一测试以确定该表达式是否用作变量值。如果是,则在步骤68中,该弱点点阵与该表达式相关联、且所有的点阵条目被设置为低。
如果步骤66的结果是“假”(表示表达式不指向变量的地址或值),则流程进入步骤70。在步骤70中,进行一测试以确定该表达式是否用作常量字符串。如果是,则在步骤72中,弱点点阵与该表达式相关联、且其存储器尺寸点阵被设置成包括无效终止字节的常量字符串的尺寸;其数据尺寸点阵被设置成包括无效终止字节的常量字符串的尺寸;其无效终止点阵被设置成指示它是无效终止的;其存储器位置点阵被设置成指示常量存储器;其字符串值点阵被设置为字符串的内容;以及其数据源点阵被设置为内部的。
如果步骤70的结果是“假”(表示表达式不指向变量的地址或值、也不指向常量字符串),则流程进入步骤74。在步骤74中,进行一测试以确定该表达式是否用作整数常量(即整数)。如果是,则在步骤76中,整数点阵与该表达式相关联,且其值被设置为整数值。
如果步骤74的结果是“假”(表示表达式不指向变量的地址或值、也不指向常量字符串或整数常量),则流程进入78。在步骤78中,进行一测试以确定该表达式是否是“问号/冒号运算”。问号/冒号运算的通常形式是<表达式1>?<表达式2>:<表达式3>。如果是,则在步骤80中,弱点点阵与该表达式相关联、且其点阵条目被设置为合并弱点点阵<表达式2>和<表达式3>(已预先设置)而得到的结果。
如果步骤78的结果是“假”,则流程进入步骤82。在步骤82中,进行一测试以确定该表达式是否是赋值运算,即将该表达式赋给变量。如果是,则在步骤84中,更新目标(即被赋值的)变量的表达式点阵。具体地,表达式点阵的先前各值与赋给目标变量的表达式的表达式点阵合并。
如果步骤82的结果是“假”,则流程进入步骤86。在步骤86中,进行一测试以确定该表达式是否用于整数运算。如果是,则在步骤88中,该运算的每个输入的整数值点阵被用来计算结果整数点阵和该表达式的值。
如果步骤86的结果是“假”,则流程进入步骤90。在步骤90中,进行一测试以确定该表达式是否用于“尺寸”运算,即形式为尺寸(size of)(<变量或类型>)。如果是,则在步骤92中,整数点阵与表达式相关联,且其值是变量(或类型)的尺寸。
如果步骤58、66、70、74、78、82、86和90的测试都为假,则在步骤94进行默认赋值,其中表达式点阵的所有值都被设置为低。
以下示例是要通过流非敏感分析逻辑分析以确定缓冲流弱点是否存在的示例性代码分段。每一个代码分段后面都有流非敏感分析逻辑如何用上述各种点阵来对变量和表达式建模的描述。
示例1:
void testl(int i){
char buf[100];
char*p;
switch(i){
case 1:
p=“1”;
break;
case 2:
p=“12”;
break
default:
p=“123”;
break;
}
strcpy(buf,p);
}
void testl(int i){
创建了变量i的整数点阵,因为它被声明为“int”类型、且其整数点阵值设置为低:←
char buf[100];
弱点点阵与变量“buf”相关联,并且因为它是一个数组,所以其存储器尺寸点阵被设置为结构的尺寸:buf←100。由于该变量是局部的,并且对其它例程不可见或者没有作为自变量传递,所有其它的点阵都被设置为高:←,参见图9的步骤42。
char*p;
弱点点阵与变量p相关联。因为它是一个指针并且对其它例程不可见或者没有作为自变量传递,所以所有的点阵都设置为高:←,参见图9的步骤48。
Switch(i){
“i”的整数点阵具有值,参见以上内容。
case 1:
p=“1”;
这是一个赋值运算,因而将会触发图10A-B的步骤82和84。结果,所赋值的变量的表达式点阵是变量点阵的先前值(在该情形中为高)与赋值给该变量的表达式的表达式点阵(在该情形中表达式是“1”)的合并结果。表达式“1”具有点阵:
存储器尺寸点阵←2
数据尺寸点阵←2
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←“1”
合并规则的结果用于p的弱点点阵,并如下:
存储器尺寸点阵←2
数据尺寸点阵←2
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←“1”
break;
case2:
p=“12”;
这也是一个赋值操作,因而触发图10A-B的步骤82和84的逻辑。结果,所赋值的变量的表达式点阵是变量点阵的先前值(见上面)与赋值给该变量的表达式的表达式点阵(在该情形中表达式是“12”)的合并结果。表达式“12”具有点阵:
存储器尺寸点阵←3
数据尺寸点阵←3
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←“12”
合并规则的结果用于p的弱点点阵,并如下:
存储器尺寸点阵←2到3的范围
数据尺寸点阵←2到3的范围
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←
break;
default:
p=“123”;
这还是一个赋值运算,因而触发图10A-B的步骤82和84的逻辑。结果,所赋值的变量的表达式点阵是变量点阵的先前值与赋值给该变量的表达式的表达式点阵(在该情形中表达式是“123”)的合并结果。表达式“123”具有点阵:
存储器尺寸点阵←4
数据尺寸点阵←4
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←“123”
合并规则的结果用于p的弱点点阵,并如下:
存储器尺寸点阵←2到4的范围
数据尺寸点阵←2到4的范围
无效终止点阵←无效终止
存储器位置点阵←常量存储器
数据源点阵←内部的
字符串值点阵←
break;
}
strcpy(buf,p);
由于buf的地址被隐含地用作自变量,所以步骤62的逻辑被触发、并且buf的弱点点阵被修改以将数据尺寸点阵、存储器尺寸点阵、字符串值点阵和数据源点阵设置为未知。
由于表达式p指向变量的值,所以步骤68的逻辑被触发,并且表达式p的弱点点阵中的所有值被设置为未知。
示例2:
static char y[100];
void test2(char*z){
strcpy(y,z);
}
static char y[100];
弱点点阵与数组y相关联。其存储器尺寸设置为100,其存储器种类点阵设置为静态,并且所有其它点阵设置为低:←。
这样做是因为变量y对其它例程可见,参见图9的步骤40。
void test2(char*z){
弱点点阵与指针变量z相关联。所有点阵设置为低:←。这样做是因为变量z作为自变量传递到其它例程中,参见图9的步骤49。
strcpy(y,z);
由于y的地址被隐含地用作自变量,所以步骤62的逻辑被触发,并且y的弱点点阵被修改以将数据尺寸点阵、存储器尺寸点阵、字符串值点阵和数据源点阵设置为未知。
由于表达式z指向变量的值,所以步骤68的逻辑被触发,并且表达式z的弱点点阵中的所有值被设置为未知。
在执行流非敏感分析之后,调用点分析逻辑16被调用。调用点分析16导出在所分析例程内调用点上传递的每个变量或表达式自变量的弱点点阵(“调用点”是在代码内调用例程的位置)。自变量可以是变量或者表达式。在较佳实施例中,调用点分析仅限于对选择例程、过程、或者函数的调用,因为并非所有的例程都会造成弱点风险。
在较佳实施例中,调用点分析16要求每个调用点都必须访问;但是,无需以任何特定的顺序进行。调用的每个自变量都要分析,从而首先处理任何子表达式的相关性;即,例如,在处理构成自变量的表达式之前,要处理作为该表达式输入的所有子表达式。
调用点分析逻辑类似于流非敏感分析逻辑。但是,与流非敏感分析逻辑不同的是,在调用点分析逻辑中,引用变量值的任何表达式使该变量的弱点点阵与做出该引用的表达式相关联。此外,对变量的任何赋值运算不改变该变量的弱点点阵。
图11A-B示出在调用点分析16中表达式分析所执行的各个步骤的流程图。该流程始于初始化测试96,以确定所分析的表达式是否用作变量地址。如果是,则在步骤98中,进行一测试以确定该变量是否是数组或结构,或者确定该变量是否是一常量字符串。如果是,则在步骤102中,弱点点阵与该表达式相关联,其存储器尺寸点阵被设置为变量尺寸,并且其存储器位置点阵被设置为所引用变量的存储器种类。如果该变量具有常量(const)属性并且是字符串,则数据尺寸点阵被设置为字符串尺寸、且无效终止点阵被设置为无效终止。字符串值点阵被设置为字符串值。数据源点阵被设置以指定数据源是内部的。如果表达式指向变量的地址、但该变量并非常量字符串,则在步骤100中,弱点点阵与表达式相关联,其存储器尺寸点阵设置为变量尺寸,且其存储器位置点阵被设置为所引用变量的存储器种类。其它点阵条目被设置为低值。
如果步骤96的结果是“假”,则流程进入步骤104。在步骤104中,进行一测试以确定该表达式是否用作变量值。如果是,则在步骤106中,弱点点阵与该表达式相关联、且所有的点阵条目被设置为与该变量相关联的点阵值。
如果步骤104的结果是“假”,则流程进入步骤108。在步骤108中,进行一测试以确定该表达式是否用作常量字符串。如果是,则在步骤110中,弱点点阵与该表达式相关联、且所有存储器尺寸点阵设置为包括无效终止字节的常量字符串尺寸;其数据尺寸点阵设置为包括无效终止字节的常量字符串尺寸;其无效终止点阵设置为指示它是无效终止的;其存储器位置点阵设置为指示常量存储器;其字符串值点阵设置为字符串的内容;以及其数据源点阵设置为内部的。
如果步骤108的结果是“假”,则流程进入步骤112。在步骤112中,进行一测试以确定该表达式是否用作整数常量(即整数)。如果是,则在步骤114中,整数点阵与该表达式相关联,并且其值设置为整数值。
如果步骤112的结果是“假”,则流程进入116。在步骤116中,进行一测试以确定该表达式是否是“问号/冒号运算”。如果是,则在步骤118中,弱点点阵与该表达式相关联、且其点阵条目被设置为合并弱点点阵<表达式2>和<表达式3>(已预先设置)而得到的结果。
如果步骤116的结果是“假”,则流程进入步骤120。在步骤120中,进行一测试以确定该表达式是否是赋值运算,即将该表达式赋值给变量。如果是,则在步骤122中目标(即被赋值的)变量的表达式点阵与该变量的先前表达式点阵保持相同。
如果步骤120的结果是“假”,则流程进入步骤124,在步骤124中,进行一测试以确定该表达式是否用于整数运算。如果是,则在步骤126中该运算的每个输入的整数值点阵被用来计算结果整数点阵和该表达式的值。
如果步骤124的结果是“假”,则流程进入步骤128。在步骤128中,进行一测试以确定该表达式是否用于“尺寸”运算。如果是,则在步骤130中,整数点阵与表达式相关联、且其值是变量(或类型)的尺寸。
如果步骤96、104、108、112、116、120、124和128是假,则在步骤94中,进行默认赋值,其中所有表达式点阵的值都被设置为低。
回顾结合流非敏感分析逻辑而分析的示例性代码分段,发生如下处理。
示例1:
void test1(int i){
char buf[100];
char*p;
switch(i){
case 1:
p=“1”;
break;
case 2:
p=“12”;
break
default:
p=“123”;
break;
}
strcpy(buf,p);
}
对strcpy的调用使其自变量为点阵值进行分析。自变量1具有值buf,它具有如下的弱点点阵值:
存储器尺寸点阵←100
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←堆栈存储器
数据源点阵←
自变量2具有值p,它具有如下的弱点点阵值:
存储器尺寸点阵←2到4的范围
数据尺寸点阵←2到4的范围
无效终止点阵←无效终止
字符串值点阵←
存储器位置点阵←常量存储器
数据源点阵←内部的
}
示例2:
static char y[100];
void test2(char*z){
strcpy(y,z);
}
对strcpy的调用使其自变量为点阵值进行分析。自变量1具有值y,它具有如下的弱点点阵值:
存储器尺寸点阵←100
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←堆栈存储器
数据源点阵←
自变量2具有值z,它具有如下的弱点点阵值:
存储器尺寸点阵←
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←
数据源点阵←
}
根据本发明一实施例,创建了库调用点的那些自变量的弱点点阵,这些库调用点是已经知道具有潜在弱点的。可在数据库20中标识库调用点。
选择调用点中弱点点阵的语言无关分析
一旦自变量的弱点点阵被创建来选择例程调用,就会再以一种语言无关方式来分析源代码,以确定源代码是否具有应该已指出的弱点。本发明的较佳实施例操作用弱点数据库20的弱点评估逻辑18,来执行该分析。
弱点数据库20是包含有关多个预识别例程的信息的数据库。在其中它指定可导致弱点的条件。这些条件被指定为对传递给例程的自变量的弱点点阵的限制。
弱点评估逻辑18操作如下。检查源代码中由调用点分析16分析的每个调用点,但无需以任何特定顺序进行。这些所调用例程的名称,以及可能有关其自变量类型的信息,被用来创建例程查找名称。该例程查找名称在弱点数据库20中用作关键值,以发现该调用点是否可能是易损的。
如果该查找未能发现相应的条目,则调用点被确定为不易受损,因为该例程名称没有数据库20中所指定的已知弱点。
如果该查找发现了一个相应条目,则检查该条目,以找出用作是评估特定调用的规则的匹配行动列表。这些匹配行动以特定顺序提供。每个匹配行动与每个自变量的弱点点阵作比较,以确定来自自变量的弱点点阵是否与匹配行动的要求相匹配。如下述示例所示,如果匹配发生,则该行动报告所检查调用点的弱点。然后该报告可由开发人员用来确定潜在弱点。对一个特定的调用点可检测出多个弱点。
回顾结合语言特定处理逻辑而分析的示例性代码分段,在弱点评估中进行如下处理:
示例1:
这是具有如下语言特定代码的示例:
strcpy(buf,p);
该调用的调用点分析产生第一自变量buf的下述弱点点阵:
存储器尺寸点阵←100
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←堆栈存储器
数据源点阵←
该调用点分析还产生第二自变量p的以下弱点分析:
存储器尺寸点阵←2到4的范围
数据尺寸点阵←2到4的范围
无效终止点阵←无效终止
字符串值点阵←
存储器位置点阵←常量存储器
数据源点阵←内部的
从数据库20中返回的匹配行动指定要应用于评估对例程strcpy()的调用的弱点点阵的某些规则。在调用strcpy()的特定情形中,这些规则检查第一自变量具有大于或等于第二自变量最大数据尺寸的最小存储尺寸。这样,这些规则(匹配行动)确定该特定调用是否产生了缓冲溢出的风险。在该情形下,假设涉及了源代码的有效语义分析,则不可能有溢出。
自变量1(100)的最小存储器尺寸大于或等于自变量2(4)的最大数据尺寸,因此缓冲不可能溢出。自变量2的数据源是内部的,因此它不可能是一个弱点。该调用不会被标记为弱点。
示例2:
这是具有下述语言特定代码的示例:
strcpy(y,z);
该调用的调用点分析产生第一自变量y的下述弱点点阵:
存储器尺寸点阵←100
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←堆栈存储器
数据源点阵←
该调用点分析还产生第二自变量z的下述弱点分析:
存储器尺寸点阵←
数据尺寸点阵←
无效终止点阵←
字符串值点阵←
存储器位置点阵←
数据源点阵←
从数据库20中返回的匹配行动指定要应用于评估对例程strcpy()的调用的弱点点阵的某些规则。在调用strcpy()的特定情形中,这些规则检查第二自变量的最大数据尺寸为,因而未知。因此,有缓冲溢出的可能性。类似地,第二自变量的数据源为,因而未知。因此,有再次出现弱点的可能性。(如果输入是未知的或者是外部的,就有出现尺寸太小、或输入并非来自于内部源的可能性,这将产生弱点。)在调用strcpy()的特定情形中:自变量2的最大数据尺寸为,因此缓冲溢出。自变量2的数据源为,因此是一弱点。该调用被标记为弱点。
上述的实施例涉及检测缓冲溢出弱点的方法。如上所述,该方法可用于检测其它诸如紊乱情况和特许升级的弱点。
紊乱情况
在此所用的术语“紊乱情况”是指在一个程序中相继发生一对例程调用,并且如果不能原子地执行(即,不被机器上的其它线程和进程中断),则可变成一个弱点。典型的示例是对确定文件访问权的调用,以及对基于该访问来读或写该文件的后续调用。如果该过程在两个调用之间被中断,并且其文件属性在中断期间被修改,则第二个调用可能读取错误的信息或者写入不当文件。
以下是代码分段要分析以确定是否有紊乱情况存在的示例性代码分段。它使用access()和fopen()来示出可能易受损的一对相关调用。
示例3:
…部分代码A…
1)r=access(filename,…)
…部分代码B…
2)if(r)then
…部分代码C…
3)foppen(filename,…)
…部分代码D…
在该示例中,有对特定文件名的access()调用,随后是对来自access()的返回值的测试。如果测试继续,则对同一文件名调用fopen()。占位符被列出,用于可能在已编号语句周围出现的任意代码。fopen()调用是从access()调用可及的;这就表示在两个调用之间对该文件没有其它操作,且如果测试继续,fopen()将会紧随access()。
尽管本示例将access()和fopen()的自变量示为单独的变量名称,但是自变量有可能是任意表达式,诸如文件名_列表[1](名称数组中的一个条目),或者全路径+基本长度(指向全路径的字符串基本长度字符的指针)。重要的是:该自变量的运行时间值对于两个调用是相同的。
如上述缓冲溢出条件的实施例中,词汇分析器用来产生要分析代码的紊乱情况的IR。在该实施例中,IR包括有关程序中声明的信息,并且记录与程序中识别符有关的诸如其类型的信息。它可以区分函数声明和函数调用。
提供了控制流图表,以示出基块结构以及在确定程序控制流的各块之间的分支。在图12中示出了控制流图表的示例。矩形实体140是基块(没有分支的连续直线语句,表示“if”、“while”等);椭圆形142是内部有任意控制流的代码区域;以及箭头144表示在基块或代码区域之间的控制流程。
使用控制流图表,系统从包含open()调用的块起反向遍历之前的各个块。在所示示例中,它去到包含access()调用的块,并且作标记access()调用在open()调用之前。知道了这些调用是相关的,它检查每个调用的自变量列表,关注对应于文件名的自变量。作为一种探索法,它比较相应表达式的结构。在该示例中,它会发现两个表达式都是对同一变量的引用,并且它可得到结论:两个调用都是引用同一文件,结果将标记一个紊乱情况弱点。
在用于检测紊乱情况弱点的另一实施例中,可以结合上述系统使用数据流分析,以便提供与在程序中不同点的变量值有关的信息。例如,它可确定变量文件名在access()调用和fopen()调用中是否具有相同的值。数据流分析还可用来确定描述为全路径+基本长度的access()的自变量是否具有与描述为文件名的fopen()的自变量的相同值。
特许升级
当具有高水平系统特许的应用可用来执行预期设计之外的动作时,特许升级弱点就会产生,允许外部一方获得否则不具备的对系统的特许访问。
以下是用于特许升级检测的示例性代码分段。
示例4:
void somefunc(){
…SetSecurityDescriptorDacl(&descriptor,TRUE,NULL/*ACL*/,FALSE);
}
在本示例中,WindowsAPI调用设置资源的安全属性。弱点在于:资源的ACL(访问控制列表)永远不能设置为空,因为这样的话资源就可被未经授权的用户所访问或修改。
在上述实施例中,语言解析器用来创建来自源代码的IR。IR提供包括在文件中声明的所有类型、常数、变量和函数的信息的符号表。函数‘somefunc’的信息包括对‘somefunc’语句的引用。IR的语句包括可应用语言(C或C++中的“if”,“while”,“for”等)以及表达式(包括赋值、函数调用、算法运算等)的控制流程语句。函数调用信息包括所调用例程的符号表格条目,以及对应于自变量的表达式列表。提供了可能易损调用的数据库。
IR被遍历,其中每个函数定义及该定义内的语句被访问。在函数调用节点上调用的例程与数据库信息相匹配。当出现匹配时,函数调用将进行更详细地查看。
使特定调用易损的特定条件已被预先确定。在上述示例中,已经知道潜在的问题在于:SetSecurityDescriptionDacl()的第三自变量不应为NULL。在调用例程时,该调用的IR应指向SetSecurityDescriptorDacl,并且在自变量的表达式列表中应该有四个条目。第一个条目是变量‘descriptor’的地址,其余三个是TRUE、NULL、和FALSE的IR常量。
找到与SetSecurityDescriptorDacl的匹配将触发对该调用的自变量的进一步检查。在这种情形中,有关SetSecurityDescriptorDacl的潜在弱点的认知将导致对第三自变量的检查。IR将其直接描述为NULL,并且该调用点将被标记为易损的。
如上所述,本发明的较佳实施例分析了源代码本身的某些语义特征,以确定是否可能存在弱点。例如,根据有关例程的一些已知行为(例如,例程将一个自变量拷贝到由另一个自变量所指向的缓冲器),对例程的自变量进行算法分析,以检测有问题的调用。这种方法避免了在现有技术方法和提案中发现的许多假阳性。
到此为止,安全专家使用已知规则来分析代码以查找弱点,但是这是劳动强度大而且易出错的。本发明最大化对诸如缓冲溢出、紊乱情况、以及特许升级的弱点的语义分析。它还提供了一个框架,从而当发现其它弱点时,用于检测这些弱点的匹配行动可被指定并且结合到较佳系统中。
在上述实施例中,源代码是(a)用在ANSI标准X3J11中所述的ANSI语言写成的可执行程序的部分或全部文本,并且具有常用扩展,诸如由微软和GNU编译器所提供的扩展,或者(b)用在ANSI标准X3J16中所描述的ANSI C++语言写成的可执行程序的部分或全部文本,并且具有常用扩展,诸如由微软和GNU编译器提供的扩展。然而,可以理解,本发明还可用来分析由其它语言写成的源代码。
虽然本发明结合某些较佳实施例得到了描述,但是可以理解,并非要将本发明限定在这些特殊的实施例中。相反地,旨在涵盖所有可能包括在附加权利要求中的变化、修改和等效体。提出了一些特定数字和源代码语言,但是可以理解,这些数字和源代码语言仅仅是作为示例给出,并非以任何方式来限制本发明的范围。
Claims (23)
1.一种检测源代码中弱点的方法,包括:
分析源代码中的变量并从中创建模型,其中每个模型指定与每个变量有关的预定特征;
使用所述变量模型创建所述源代码中例程调用的自变量的模型;
结合所述相应例程调用的预定标准来使用所述自变量模型,以确定所述例程调用是否具备因所述自变量和已知例程行为引起的弱点。
2.如权利要求1所述的方法,其特征在于,所述模型指定变量的存储器尺寸。
3.如权利要求1所述的方法,其特征在于,所述模型指定一变量的数据尺寸。
4.如权利要求1所述的方法,其特征在于,所述模型对字符串值类型的变量指定所述变量是无效终止字符串还是非无效终止字符串。
5.如权利要求1所述的方法,其特征在于,所述模型指定所述变量的存储器类型。
6.如权利要求1所述的方法,其特征在于,所述模型对字符串值类型的变量指定字符串值。
7.如权利要求1所述的方法,其特征在于,所述模型对变量指定数据源。
8.如权利要求1所述的方法,其特征在于,所述自变量模型指定可变自变量的特征。
9.如权利要求1所述的方法,其特征在于,所述自变量模型指定表达式自变量的特征。
10.如权利要求1所述的方法,其特征在于,所述模型被指定为点阵。
11.如权利要求10所述的方法,其特征在于,所述点阵值包括表示不知道的值、表示不一致认知的值、以及表示认知的明确表达的值。
12.如权利要求11述的方法,其特征在于,表示认知的明确表达的所述值包括指定特定值范围的值。
13.如权利要求1所述的方法,其特征在于,相应例程的所述预定标准包括与所述例程的语义行为有关的规则。
14.如权利要求1所述的方法,其特征在于,所述弱点是缓冲溢出。
15.一种检测源代码中弱点的方法,包括:
产生描述与例程的流有关的某些特征的模型;以及
结合相应例程的预定标准使用所述模型,以确定所述例程调用是否具备因所述例程的流引起的弱点。
16.如权利要求15所述的方法,其特征在于,所述弱点是紊乱情况。
17.一种检测源代码中弱点的方法,包括:
产生描述与要在例程中执行的行动有关的某些特征的模型;以及
结合相应例程的预定标准使用所述模型,以确定所述例程调用是否具备弱点,所述弱点可使例程中的行动可在所述预期设计之外执行。
18.如权利要求17所述的方法,其特征在于,所述弱点是特许升级。
19.一种检测源代码中弱点的方法,包括:
分析源代码以创建所述源代码中例程调用的自变量的模型;以及
结合相应例程调用的预定标准使用所述模型,以确定所述例程调用是否具备因所述自变量和所述例程行为引起的弱点。
20.一种检测源代码中弱点的系统,包括:
计算机实现逻辑,用于分析源代码中的变量并从中创建模型,其中每个模型指定与每个变量有关的预定特征;
计算机实现逻辑,用于使用所述变量模型来创建源代码中例程调用的自变量的模型;以及
计算机实现逻辑,结合相应例程调用的预定标准使用所述自变量模型,以确定所述例程调用是否具备因所述自变量和已知例程行为引起的弱点。
21.如权利要求20所述的系统,其特征在于,结合相应例程调用的预定标准使用所述模型以确定所述例程调用是否具备因所述自变量和已知例程行为引起的弱点的计算机实现逻辑,包括一个基于对所述自变量模型的分析来指定检测弱点的规则的数据库。
22.一种用于检测源代码中弱点的系统,包括:
计算机实现逻辑,用于产生描述与例程流的某些特征有关的模型;以及
计算机实现逻辑,结合相应例程的预定标准使用所述模型,以确定所述例程调用是否具备因所述例程流引起的弱点。
23.一种用于检测源代码中弱点的系统,包括:
计算机实现逻辑,用于产生描述与要在例程中执行的行动的某些特征有关的模型;以及
计算机实现逻辑,结合相应例程的预定标准使用所述模型,以确定所述例程调用是否具备弱点,所述弱点使例程中的行动可在所述预期设计之外执行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US46401903P | 2003-04-18 | 2003-04-18 | |
US60/464,019 | 2003-04-18 | ||
US10/825,007 | 2004-04-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1809812A true CN1809812A (zh) | 2006-07-26 |
Family
ID=36840966
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2004800171635A Pending CN1809812A (zh) | 2003-04-18 | 2004-04-15 | 用于源代码检测源代码中弱点的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7418734B2 (zh) |
CN (1) | CN1809812A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222017A (zh) * | 2010-04-13 | 2011-10-19 | 英特尔公司 | 通过不可见接口实现不符合abi特征的方法和系统 |
Families Citing this family (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7516446B2 (en) * | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
US9118708B2 (en) | 2003-07-01 | 2015-08-25 | Securityprofiling, Llc | Multi-path remediation |
US20070113272A2 (en) | 2003-07-01 | 2007-05-17 | Securityprofiling, Inc. | Real-time vulnerability monitoring |
US9118711B2 (en) | 2003-07-01 | 2015-08-25 | Securityprofiling, Llc | Anti-vulnerability system, method, and computer program product |
US9350752B2 (en) | 2003-07-01 | 2016-05-24 | Securityprofiling, Llc | Anti-vulnerability system, method, and computer program product |
US9118710B2 (en) | 2003-07-01 | 2015-08-25 | Securityprofiling, Llc | System, method, and computer program product for reporting an occurrence in different manners |
US9118709B2 (en) | 2003-07-01 | 2015-08-25 | Securityprofiling, Llc | Anti-vulnerability system, method, and computer program product |
US9100431B2 (en) | 2003-07-01 | 2015-08-04 | Securityprofiling, Llc | Computer program product and apparatus for multi-path remediation |
US8984644B2 (en) | 2003-07-01 | 2015-03-17 | Securityprofiling, Llc | Anti-vulnerability system, method, and computer program product |
US7437718B2 (en) * | 2003-09-05 | 2008-10-14 | Microsoft Corporation | Reviewing the security of trusted software components |
US7975306B2 (en) * | 2004-06-04 | 2011-07-05 | Hewlett-Packard Development Company, L.P. | Apparatus and method for monitoring secure software |
US20050273859A1 (en) * | 2004-06-04 | 2005-12-08 | Brian Chess | Apparatus and method for testing secure software |
KR101150653B1 (ko) * | 2004-06-04 | 2012-05-29 | 포티파이 소프트웨어 엘엘씨 | 보안 소프트웨어 개발, 테스팅 및 모니터링 장치 및 방법 |
US20050273860A1 (en) * | 2004-06-04 | 2005-12-08 | Brian Chess | Apparatus and method for developing, testing and monitoring secure software |
US7207065B2 (en) * | 2004-06-04 | 2007-04-17 | Fortify Software, Inc. | Apparatus and method for developing secure software |
JP4183192B2 (ja) * | 2004-12-28 | 2008-11-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | アプリケーション・プログラムの開発支援方法、プログラム、情報処理装置 |
US8984636B2 (en) * | 2005-07-29 | 2015-03-17 | Bit9, Inc. | Content extractor and analysis system |
US8272058B2 (en) * | 2005-07-29 | 2012-09-18 | Bit 9, Inc. | Centralized timed analysis in a network security system |
US20070028291A1 (en) * | 2005-07-29 | 2007-02-01 | Bit 9, Inc. | Parametric content control in a network security system |
US7895651B2 (en) * | 2005-07-29 | 2011-02-22 | Bit 9, Inc. | Content tracking in a network security system |
US8347392B2 (en) * | 2005-08-25 | 2013-01-01 | Hewlett-Packard Development Company, L.P. | Apparatus and method for analyzing and supplementing a program to provide security |
US20070079372A1 (en) * | 2005-10-05 | 2007-04-05 | Microsoft Corporation | Method for collecting and reporting privilege elevation pathways in a computing environment |
US8196178B2 (en) * | 2005-10-05 | 2012-06-05 | Microsoft Corporation | Expert system analysis and graphical display of privilege elevation pathways in a computing environment |
US8020194B2 (en) * | 2005-10-06 | 2011-09-13 | Microsoft Corporation | Analyzing cross-machine privilege elevation pathways in a networked computing environment |
US7849509B2 (en) * | 2005-10-07 | 2010-12-07 | Microsoft Corporation | Detection of security vulnerabilities in computer programs |
US7937692B2 (en) * | 2005-11-30 | 2011-05-03 | Red Hat, Inc. | Methods and systems for complete static analysis of software for building a system |
US8127413B2 (en) * | 2006-07-11 | 2012-03-06 | Georgia Tech Research Corporation | System and method for preventing race condition vulnerability |
US7617489B2 (en) * | 2006-09-15 | 2009-11-10 | Ounce Labs, Inc. | Method and system for detecting interprocedural vulnerability by analysis of source code |
EP2092424B1 (en) | 2006-10-19 | 2015-12-30 | Checkmarx Ltd. | Locating security vulnerabilities in source code |
US8185875B2 (en) * | 2007-01-24 | 2012-05-22 | Nec Laboratories America, Inc. | Fast and accurate static data-race detection for concurrent programs |
US8527975B2 (en) * | 2007-11-02 | 2013-09-03 | Hewlett-Packard Development Company, L.P. | Apparatus and method for analyzing source code using memory operation evaluation and boolean satisfiability |
US8209646B2 (en) * | 2007-11-02 | 2012-06-26 | Hewlett-Packard Development Company, L.P. | Apparatus and method for analyzing source code using path analysis and Boolean satisfiability |
US8141082B2 (en) * | 2008-02-28 | 2012-03-20 | Intel Corporation | Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation |
CN101551836B (zh) * | 2008-04-03 | 2011-08-24 | 西门子(中国)有限公司 | 一种代码审计的方法及装置 |
US8527965B2 (en) * | 2008-04-14 | 2013-09-03 | Oracle America, Inc. | Layered static program analysis framework for software testing |
JP5186443B2 (ja) * | 2009-06-30 | 2013-04-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 文字列の妥当性を判定するシステム、方法及びプログラム |
US8584246B2 (en) * | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
US8468605B2 (en) * | 2009-11-30 | 2013-06-18 | International Business Machines Corporation | Identifying security vulnerability in computer software |
US8499304B2 (en) * | 2009-12-15 | 2013-07-30 | At&T Mobility Ii Llc | Multiple mode mobile device |
US8996866B2 (en) * | 2009-12-22 | 2015-03-31 | Microsoft Technology Licensing, Llc | Unobtrusive assurance of authentic user intent |
US8402547B2 (en) * | 2010-03-14 | 2013-03-19 | Virtual Forge GmbH | Apparatus and method for detecting, prioritizing and fixing security defects and compliance violations in SAP® ABAP™ code |
US10025688B2 (en) | 2010-03-14 | 2018-07-17 | Virtual Forge GmbH | System and method for detecting data extrusion in software applications |
US8528095B2 (en) | 2010-06-28 | 2013-09-03 | International Business Machines Corporation | Injection context based static analysis of computer software applications |
US9141806B2 (en) | 2010-08-24 | 2015-09-22 | Checkmarx Ltd. | Mining source code for violations of programming rules |
US8904541B2 (en) * | 2010-08-26 | 2014-12-02 | Salesforce.Com, Inc. | Performing security assessments in an online services system |
US8667584B2 (en) | 2010-12-15 | 2014-03-04 | International Business Machines Corporation | Formal analysis of the quality and conformance of information flow downgraders |
US8914890B2 (en) * | 2011-01-31 | 2014-12-16 | International Business Machines Corporation | Determining the vulnerability of computer software applications to privilege-escalation attacks |
US8769696B2 (en) | 2011-09-29 | 2014-07-01 | International Business Machines Corporation | Automated detection of flaws and incompatibility problems in information flow downgraders |
US9021592B2 (en) * | 2012-07-12 | 2015-04-28 | International Business Machines Corporation | Source code analysis of inter-related code bases |
US9262282B2 (en) * | 2012-09-04 | 2016-02-16 | Opshub, Inc. | System and method for synchornisation of data and recovery of failures during synchronization between two systems |
US9753723B2 (en) * | 2013-09-06 | 2017-09-05 | SourceGraph, Inc. | Systems and methods for generating, linking, and presenting computer code representations from diverse sources |
US20150095894A1 (en) | 2013-09-30 | 2015-04-02 | International Business Machines Corporation | Detecting race condition vulnerabilities in computer software applications |
US20150121532A1 (en) * | 2013-10-31 | 2015-04-30 | Comsec Consulting Ltd | Systems and methods for defending against cyber attacks at the software level |
US10120781B2 (en) | 2013-12-12 | 2018-11-06 | Intel Corporation | Techniques for detecting race conditions |
US9807101B1 (en) * | 2016-04-29 | 2017-10-31 | Oracle International Corporation | Inferring security-sensitive entities in libraries |
US10127386B2 (en) | 2016-05-12 | 2018-11-13 | Synopsys, Inc. | Systems and methods for adaptive analysis of software |
CN107085533B (zh) * | 2017-03-27 | 2019-09-06 | 北京北大软件工程股份有限公司 | 一种指针修改影响的分析方法和系统 |
IL259201B (en) | 2017-05-10 | 2021-12-01 | Checkmarx Ltd | Using the same query language for static and dynamic application security testing tools |
US10379825B2 (en) | 2017-05-22 | 2019-08-13 | Ab Initio Technology Llc | Automated dependency analyzer for heterogeneously programmed data processing system |
US10872156B2 (en) * | 2017-08-11 | 2020-12-22 | Jpmorgan Chase Bank, N.A. | Typescript security scanner |
US10540255B2 (en) * | 2017-10-31 | 2020-01-21 | Oracle International Corporation | Staged refinement for static analysis |
US10984098B2 (en) | 2018-04-06 | 2021-04-20 | Palo Alto Networks, Inc. | Process privilege escalation protection in a computing environment |
US11036866B2 (en) | 2018-10-18 | 2021-06-15 | Denso Corporation | Systems and methods for optimizing control flow graphs for functional safety using fault tree analysis |
US10628286B1 (en) | 2018-10-18 | 2020-04-21 | Denso International America, Inc. | Systems and methods for dynamically identifying program control flow and instrumenting source code |
US20210073391A1 (en) * | 2019-11-27 | 2021-03-11 | Intel Corporation | Methods and apparatus to improve security of computer programs using code abstraction |
US11836258B2 (en) | 2020-07-28 | 2023-12-05 | Checkmarx Ltd. | Detecting exploitable paths in application software that uses third-party libraries |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5440723A (en) | 1993-01-19 | 1995-08-08 | International Business Machines Corporation | Automatic immune system for computers and computer networks |
US6343371B1 (en) * | 1999-01-14 | 2002-01-29 | Compaq Computer Corporation | System and method for statically detecting potential race conditions in multi-threaded computer programs |
US7073198B1 (en) * | 1999-08-26 | 2006-07-04 | Ncircle Network Security, Inc. | Method and system for detecting a vulnerability in a network |
US6654782B1 (en) * | 1999-10-28 | 2003-11-25 | Networks Associates, Inc. | Modular framework for dynamically processing network events using action sets in a distributed computing environment |
US6973417B1 (en) * | 1999-11-05 | 2005-12-06 | Metrowerks Corporation | Method and system for simulating execution of a target program in a simulated target system |
IL132915A (en) * | 1999-11-14 | 2004-05-12 | Networks Assoc Tech Inc | Method for secure function execution by calling address validation |
US6817009B2 (en) * | 2000-11-30 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | Method and apparatus for verifying data local to a single thread |
US6832302B1 (en) * | 2001-10-24 | 2004-12-14 | At&T Corp. | Methods and apparatus for detecting heap smashing |
US7752459B2 (en) * | 2001-12-06 | 2010-07-06 | Novell, Inc. | Pointguard: method and system for protecting programs against pointer corruption attacks |
CA2372034A1 (en) * | 2002-02-14 | 2003-08-14 | Cloakware Corporation | Foiling buffer-overflow and alien-code attacks by encoding |
US20040168078A1 (en) * | 2002-12-04 | 2004-08-26 | Brodley Carla E. | Apparatus, system and method for protecting function return address |
US7051322B2 (en) * | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US20050015752A1 (en) * | 2003-07-15 | 2005-01-20 | International Business Machines Corporation | Static analysis based error reduction for software applications |
-
2004
- 2004-04-15 CN CNA2004800171635A patent/CN1809812A/zh active Pending
- 2004-04-15 US US10/824,684 patent/US7418734B2/en not_active Expired - Fee Related
- 2004-04-15 US US10/824,685 patent/US7398516B2/en not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222017A (zh) * | 2010-04-13 | 2011-10-19 | 英特尔公司 | 通过不可见接口实现不符合abi特征的方法和系统 |
US8464230B2 (en) | 2010-04-13 | 2013-06-11 | Intel Corporation | Methods and systems to implement non-ABI conforming features across unseen interfaces |
CN102222017B (zh) * | 2010-04-13 | 2014-03-19 | 英特尔公司 | 通过不可见接口实现不符合abi特征的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US7418734B2 (en) | 2008-08-26 |
US7398516B2 (en) | 2008-07-08 |
US20040255277A1 (en) | 2004-12-16 |
US20050010806A1 (en) | 2005-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1809812A (zh) | 用于源代码检测源代码中弱点的方法和装置 | |
CN1273888C (zh) | 成像装置、信息处理装置、程序执行方法及程序生成方法 | |
CN1253790C (zh) | 指令调度方法和指令调度设备 | |
CN1655145A (zh) | 最优化行级别数据库安全的系统和方法 | |
CN1151456C (zh) | 特征文字序列抽取及相似文书检索方法和装置 | |
CN1875345A (zh) | 在编译过程中表示和检查程序组件的一致性的可扩展类型系统 | |
CN1190477A (zh) | 修改现有数据库以反映相应对象模型变化的方法和装置 | |
CN1558348A (zh) | 将基于模式的分级数据结构转换成平面数据结构的方法以及系统 | |
CN1758221A (zh) | 程序处理装置 | |
CN1290889A (zh) | 程序对象的串行化和解串行的版本适应 | |
CN1781078A (zh) | 硬件加速器个性编译器 | |
CN1271545C (zh) | 语言翻译系统 | |
CN1977531A (zh) | 程序生成装置、程序测试装置、程序执行装置及信息处理系统 | |
CN1910601A (zh) | 限制条件解决方法、限制条件解决装置、以及限制条件解决系统 | |
CN1664779A (zh) | 软件开发基础架构 | |
CN1645328A (zh) | 编译装置及编译方法 | |
CN1498367A (zh) | 信息处理装置、存储器管理装置、存储器管理方法及信息处理方法 | |
CN1677365A (zh) | 通过属性控制的测试实例继承 | |
CN1834889A (zh) | 软件认证系统和软件认证程序及软件认证方法 | |
CN1758222A (zh) | 程序处理装置 | |
CN1776621A (zh) | 程序变换方法 | |
CN1873625A (zh) | 一种基于功能覆盖率的随机激励的自动产生方法 | |
CN101044450A (zh) | 处理器 | |
CN1934570A (zh) | 文本挖掘装置和其方法以及程序 | |
CN1889039A (zh) | 基于xml实现通用浏览器工具条的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |