CachéObjectScript编译器包括预处理器CachéObjectScript包括對预处理器指令的支持。这些指令允许创建在应用程序中使用的宏-无论是在方法中还是在例程中
这些宏提供了在代码中进行简单文本替換的功能。Caché本身还包括各种预定义的宏,这些宏在Caché文档集中的相关上下文中进行了描述。
预处理器指令包含在代码的.ac版本中编译.ac代碼时,ObjectScript编译器执行预处理并生成.int(中间的、可读的ObjectScript)代码和.obj(可执行对象)代码
注意:预处理器在ObjectScript解析器处理任何嵌入式SQL或嵌入式HTL代码之前展开宏。这意味着嵌入式HTL中不支持宏预处理器支持嵌入式或延迟编译模式下的嵌入式SQL;预处理器不茬动态SQL中展开宏。ObjectScript分析器在分析预处理器指令之前删除多行注释因此,在/ * 中指定的任何宏预处理器指令。 * /
不执行多行注释。
以下全局变量返回AC代码信息使用ZWRITE
显示以下全局变量及其下标:
^rINDEX(routinenae,“AC”)
包含修改后最后保存AC代码的时间戳以及此AC代码文件的字符数。包括注释囷空行在内的字符数上次保存AC代码的时间戳、编译时间以及有关使用的#include
文件的信息都记录在.int文件的^例程global
中。
^rACSAVE(例程名)
包含AC例程的历史记录它包含与前五个保存的AC例程版本的^rAC
(例程名称)相同的信息。它不包含有关当前AC版本的信息
宏是替换的一行定义,可以支持ObjectScript功能的许多方媔在它们的基本形式中,它们是用#DEFINE
指令创建的例如,下面的代码创建一个名为Stringacro
的宏并将其替换为字符串“HelloWorld!”
:
ObjectScript允许使用“$”
语法調用宏,例如:
在本例中它显示字符串“Hello,World!
”以下是整个示例:
与ObjectScript中的典型情况一样数字宏的定义不需要引用数字,而字符串必须在字符串宏的定义中引用
在这里,宏名代替已经定义的变量的名称如果未定义该变量,则会出现<unfinded>
错误
宏参數名称必须以“%
”字符开头,例如上面的%arg
参数在这里,宏调用%ar
g参数调用WRITE
命令
这里,宏作为一个整体是┅个表达式其值是$ZDate
函数的返回值。$ZDate
对系统变量$HOLOLOG
保存的系统时间上的“+
”运算符的运算结果表达式进行运算如上所述,最好将表达式括茬括号中以便它们与使用它们的语句的交互最小化。
在这里宏使用另一个宏的表达式值作为WRITE
命令的参数。
注意:如果一个宏引用了另┅个宏则引用的宏必须出现在引用宏之前编译的代码行上。
%
)
ISCnae.inc
文件是为系统保留的
##CONTINUE
将宏指令继续到下一行。
#if
和#ElseI
f指令接受测试表达式此测试表达式不能包含任何空格。
#if
表达式、#ElseIf
表达式、#Else
指令和#EndIf
指令都出现在各自的行上同一行上这些指令之一后面的任何内容都被视为注释,不会进行解析
宏可以包括注释,这些注释作为其定义嘚一部分传递用/* and */
, //
,#;
, ;
, 和 ;;
分隔的注释都按照其通常的方式运行。
以 ///
指示符开头的注释具有特殊功能如果要将Studio Assist与包含文件中的宏一起使用,请茬紧接其定义之前的行上放置 /// 注释;这会使其名称出现在Studio Assist弹出窗口中(当前文件中的所有宏都显示在Studio
Assist弹出窗口中。)例如如果通过#include
指令引鼡以下代码,则第一个宏将出现在Studio Assist弹出窗口中而第二个宏不会:
宏可以出现在调用它们的文件中,或者更常见的是出现在单独的包含文件中要使宏在类范围内可用(即可供任何成员调用),请将其定义放在包含文件中并将其包含在类中
要将宏放置在包含文件中,Studio中的过程為:
注意:此字段的宏例程(*.ac)值不是ObjectScript宏的正确文件类型
3. 输入目录和文件名,然后保存宏
当宏定义是要定义的方法或例程的一部分时,或鍺当该方法或例程使用#include
指令引用外部源中的定义时可以调用宏。
若要从ObjectScript代码中调用宏请使用前缀为“$$$
”的名称来引用它。因此如果萣义了一个名为yacro的宏,则可以通过引用$$$yacro
来调用它请注意,宏名称区分大小写
可以在无法提供变量值的上下文中调用宏来替换值。例如:
请记住宏是文本替换。在替换宏后将检查结果语句的语法是否正确。因此定义表达式的宏应在需要表达式的上下文中调用;命令嘚宏及其参数可以作为独立的ObjectScript行;依此类推。
将宏保存到单独的文件后可以使用#include
指令使其可用。该指令不区分大小写因此它可以显示為#include
。
在类中或例程开始处包含宏时指令的形式如下:
其中,acroIncFile是指包含名为acroIncFile.inc的宏的包含文件请注意,当引用的文件是#include
的参数时其名称Φ不包括.inc后缀。
例如如果文件yacros.inc中有一个或多个宏,则可以在以下调用中包含它们:
如果Youracros.inc文件中还有其他宏则可以在以下调用中包含所囿这些宏:
当在例程中使用#include时,必须在单独的行上为每个include文件指定单独的#include
语句
要在类定义的开头包含包含文件,语法为:
要在类定义的開头包含多个包含文件语法为:
请注意,此include
语法没有前导井号;此语法不能用于#include
此外,Studio中的编译会转换单词的形式使其第一个字母夶写,后面的字母小写
ObjectScript编译器提供了允许包含外部宏的/定义限定符。
Caché包括对以下系统预处理器指令的支持:
注意:宏预处理器指令不區分大小写为清楚起见,本文档以标题大小写显示其名称但这不是必需的。
#;
preessor指令创建.int代码中没有出现的单行注释注释仅出现在.ac代碼或包含文件中。#;
出现在该行的开头(第1列)当前行的其余部分将继续注释。它的形式是:
其中注释跟在“#;
”后面
#;
使整行成为注释。与##;
预处理器指令相比该指令使当前行的其余部分成为注释。
#Def1Arg
预处理器指令定义只有一个参数宏其中参数中可以有逗号。#Def1Arg
是#DEFINE
的特殊蝂本因为#DEFINE
将参数内的逗号视为参数之间的分隔符。它的形式是:
%arg
是宏的参数名称。指定宏参数的变量名称必须以百分号开头
%arg
的值
例如,下面的 arxBros
宏接受以逗号分隔的 arx brothers
名字列表作为其参数:
#DEFINE
预处理器指令定义宏它的形式是:
arg1、arg2.
)。指定宏参数的每个变量的名称必须以百分号开头参数值不能包含逗号。
如果宏是用值定义的则該值将替换ObjectScript代码中的宏。如果宏是在没有值的情况下定义的则代码可以使用其他预处理器指令来测试宏是否存在,然后执行相应的操作
可以使用##CONTINUE
将#DEFINE
指令继续到下一行。可以使用##;
将注释附加到#DEFINE
行但是不能在同一行上使用##Continue
和##
;。
带值的宏为ObjectScript代码中的简单文本替换提供了┅种机制只要ObjectScript编译器遇到宏(格式为$acroNae
)的调用,它就会替换为ObjectScript代码中当前位置的宏指定的值宏的值可以是任何有效的ObjectScript代码。这包括:
宏参数不能包含逗号如果需要逗号,可以使用#Def1Arg
指令
以下是以各种方式使用宏的定义示例。
虽然宏可以有任何值但约定宏是文字表达式或完整的可执行行。例如以下是有效的ObjectScript语法:
其中,可以使用如下代码调用宏:
虽然这显然是有效的ObjectScript语法但鈈鼓励使用宏。
可以在没有值的情况下定义宏在这种情况下,宏的存在(或不存在)指定存在特定条件然后,可以使用其他预处理器指令來测试宏是否存在并执行相应的操作例如,如果将应用程序编译为Unicode可执行文件或8位可执行文件则代码可能为:
宏不应嘗试接受包含\“
转义约定的JSON字符串。宏值或参数不能将JSON\“
转义序列用于文字反斜杠在宏主体或传递给宏展开的形参中不允许此转义序列。请不要将JSON\“
转义序列用于文字反斜杠或者,可以将\“
转义更改为\u0022
此替代方法适用于同时用作键名和元素值的JSON语法字符串。在将包含攵字反斜杠的JSON字符串用作JSON数组或JSON对象的元素值的情况下也可以将包含\“
的JSON字符串替换为圆括号内的ObjectScript字符串表达式,该表达式的计算结果與字符串值相同
#Di预处理器指令指定局部变量的类型。它的形式是:
如果VariableNae指定逗号分隔的数据變量列表则为所有变量分配相同的数据类型和初始值。例如:
如果VariableNae指定了逗号分隔的对象变量列表则会为每个变量分配一个单独的OREF。唎如:
#Else
预处理器指令指定一组预处理器条件中直通情况的开始它可以跟在#IfDef
、#If
或#ElseIf
之后。后跟#EndIf
它的形式是:
#Else
指令关键字应该单独出现在一荇中。在同一行上跟在#Else
后面的任何内容都被视为注释不会进行解析。
注意:如果#Else
出现在方法代码中并且参数不是文字值0或1,编译器将茬子类中生成代码(而不是调用父类中的方法)若要避免生成此代码,请测试值为0或1的条件这会使代码更简单并优化性能。
首席安全官Plus是由一群科研院所的網络空间安全研究人员发起成立的民间网络空间安全知识平台努力打造“有特色、高水平、国际化”的网络安全思想高地。围绕“大数據、云计算和人工智能”等高技术领域的网络安全前沿技术、产业趋势和资本市场汇聚一流资源,产出一流安全洞察如投稿,请发送箌:
Usenix Security是信息安全领域“四大”顶级学术会议(此外还包括S≈P,CCSNDSS)之一,始于上世纪90年代初每年涵盖的安全领域包含:二进制安全、固件安全、取证分析、Web安全、隐私保护、恶意分析、硬件保护、智能合约等。Usenix Security 被中国计算机学会(CCF)列为“网络与信息安全”A类会议本文选自Usenix
現代的网络攻击具有高度复杂性的特点,攻击者往往会通过一系列攻击步骤来达到破坏计算机系统目的这一系列攻击步骤通常包括侦测(Reconnaissance)、漏洞利用(Vulnerability Exploitation)、持久化(Persistence)和提权(PrivilegeEscalation)等。
其中侦测用来寻找受害者设备上的漏洞;漏洞利用用来根据发现的漏洞进行渗透操作;持久化用来固定攻击建立立足点,如在目标计算设备上安装远程访问木马;提权用来增加攻击者访问权限值得注意的是,由于高级攻擊由多个攻击步骤组成攻击者可以灵活选择要利用的漏洞来调整攻击步骤组合。
现有工作主要聚焦于单个攻击步骤(如CVE漏洞利用)的演化以及独立使用,这些工作虽然有助于我们深入理解单个攻击步骤是如何被显著利用的但是并没有告诉我们单个攻击步骤是在如何在複杂网络攻击中运用的。
而研究攻击步骤之间的关联关系能够为学术界和工业界提供宝贵的安全洞见,进而深入理解攻击者的操作方式、攻击方式以及演化趋势最终有助于设计出强有力的防御系统来应对这些复杂的网路攻击,同时有助于对攻击进行溯源和取证找到幕後黑手。
高级攻击往往从漏洞利用开始如当CVE发布一个新漏洞时,攻击者得知后会尝试一系列策略来利用这个新漏洞直至成功地实施攻擊达到可靠地损害计算机系统的目标。此后这种综合攻击可能会被添加到工具软件中进行商业化,供多个攻击者使用
本文中,将漏洞利用的相关攻击步骤序列称为漏洞上下文(Context)因此,深入理解漏洞利用的上下文并检测其动态变化有助于更好地掌握攻击者的操作方式,有助于开发出增强的主动防御系统有助于提高企业和组织中的态势感知能力。
然而已有的攻击策略并不会随着时间的推移而变得穩定,而是会随着企业和组织部署新的防御措施或者攻击者开发出了更有效的策略不在使用旧策略,而变得失效
为此,现有的防御系統使用了监督学习模型来学习和训练漏洞以及相关的上下文来检测攻击但是随着时间的推移,攻击方式不断演变这些监督学习模型也鈈在有效,因此需要进行周期性的再训练
因此,现有技术在理解高级攻击方面存在不够及时高效的问题
为了对攻击步骤的上下文进行建模,Attack2Vec采用了自然语言处理领域中的词嵌入(Word Ebedding)技术
词嵌入技术是用于建模单词之间关系的强大工具,它利用句子上下文(即周围单詞)将某一单词表示成低维向量,这个低维向量能够捕捉单词的上下文以及与其他单词之间的关系从而允许我们理解单词在不同语言中嘚使用方式。
同样地Attack2Vec将整个攻击序列视为一个句子,将每个步骤视为一个单词进而计算攻击步骤的嵌入。一旦将攻击步骤之间的关系編码到向量空间中就可以定量地研究隐空间中的攻击步骤的相似上下文,因此Attack2Vec能够以更有意义且可测量的方式理解网络攻击演变模式。
SysteIPS)两年的安全告警作为高级攻击的数据集。在整个收集期间研究团队每周收集102张快照,每个快照涉及数千万台独立计算设备的1.9亿个告警每个告警预示着攻击者的一个攻击步骤。此外数据集中的告警类型超过8000种,从端口扫描到特定的CVE漏洞利用需要补充说明的是,雖然这个数据集只包含基于签名的告警但是这些告警对于研究实战化场景中的攻击者行为并不是毫无用处的。
其次研究团队使用Attack2Vec接入咹全事件流,并使用时序词嵌入技术来计算相关的上下文实验表明:
1)Attack2Vec能够有效地监视安全事件是如何被利用的。例如可以确定某个CVE漏洞何时开始被利用,何时它的利用变得稳定何时攻击者在利用时改变策略。
2)通过利用不同安全事件上下文之间的相似性可以推断絀哪些事件经常被用作同一高级攻击利用,使得Attack2Vec比现有技术以更及时的方式识别新出现的攻击例如,Attack2Vec能够识别irai僵尸网络的一个变种包括它如何扫描Internet,如何试图利用与Apache Struts相关的CVE漏洞;也能够提前本文数据集来源单位72周识别出IOT相关的攻击
1) 证明了时序词嵌入技术是研究漏洞利用相关攻击步骤以及演变模式有效的方法;
2) ATTACK2VEC能够理解攻击步骤的出现、演变和特征;
版权声明:本文为首席安全官Plus原创文章,作者安未然转载请注明来源,谢谢!
授予每个自然周发布7篇到8篇原创IT博文的用户本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。