检测漏洞
对于无法完全防止引入一类漏洞的现有源代码,例如,由于编程语言和/或API的选择是由其他因素决定的,应用技术来检测是有用的在软件的开发、测试和/或维护阶段,代码中存在漏洞。
检测漏洞的技术必须在检测技术可以具有的以下两个良好属性之间进行权衡:
•如果检测技术可以正确得出结论,给定程序没有该类别的漏洞,则检测技术对于给定类别的漏洞是合理的。另一方面,不健全的检测技术可能有假阴性,即检测技术无法发现的实际漏洞。
•对于给定类别的漏洞,如果检测到的任何漏洞是实际漏洞,则检测技术是完整的。另一方面,不完整的检测技术可能存在误报,即它可能会检测到并非实际漏洞的问题。
权衡是必要的,因为根据赖斯定理(对于非平凡的漏洞类别)没有一种检测技术既健全又完整。
实现健全性需要对程序的所有执行进行推理(通常是无限多个)。这通常是通过对程序代码进行静态检查来完成的,同时对执行进行适当的抽象以使分析终止。
通过执行程序的实际、具体执行来实现完整性,该程序见证了报告的任何漏洞。这通常是通过动态检测完成的,其中分析技术必须为触发漏洞的程序提供具体的输入。一种非常常见的动态方法是软件测试,其中测试人员编写具有具体输入的测试用例,并对相应的输出进行特定检查。
在实践中,检测工具可以使用静态和动态分析技术的混合组合,以实现健全性和完整性之间的良好权衡。
然而,必须指出的是,一些检测技术本质上是启发式的,因此没有为它们精确定义健全性和完整性的概念。例如,检测违反安全编码实践的启发式技术(如2.3中所述)正在检查是否符合非正式定义的规则和建议,并且并不总是能够明确定义误报。或假阴性。此外,这些方法可能会突出“漏洞”,这些漏洞目前可能无法利用,但仍然应该修复,因为它们是“差点错过”,即将来的维护错误可能很容易被利用。
静态和动态程序分析技术在计算机科学的其他领域被广泛研究。本主题重点介绍与软件安全最相关的分析技术。
检测漏洞的另一种重要方法是执行手动代码审查和审核。这些技术在安全软件生命周期CyBOKKnowl边缘领域[1]中有所介绍。使用工具支持的静态检测时,调整此类后续代码审查和其他验证活动是有意义的。例如,如果静态检测对于给定类别的漏洞是合理的,那么可以考虑在以后的阶段不审查或测试该类别的漏洞。
静态检测
静态检测技术分析程序代码(源代码或二进制代码)以查找漏洞。与动态技术相反,静态技术的优点是它们可以对(尚)不可执行的不完整代码进行操作,并且可以在单个分析中进行操作。运行它们尝试涵盖所有可能的程序执行。粗略地说,人们可以区分两类重要的技术,它们的主要目标不同。
启发式静态检测
首先,有一些静态分析技术可以检测违反规则的情况,这些规则是安全编程实践启发式的正式编码。静态分析技术构建了程序的语义模型,例如,包括抽象语法树,以及程序中数据流和控制流的抽象。基于此模型,该技术可以标记违反简单语法规则的行为,例如,不要使用此危险的API函数,或者仅将此API函数与常量字符串一起使用。参数。
漏洞存在的一个重要指标是(可能是恶意的)程序输入可能会影响风险操作中使用的值(例如,索引到数组中,或连接字符串以创建SQL查询)。污点分析(有时也称为流分析)是一种分析技术,用于确定值是否来自程序输入(或更一般地来自指定的污点源))可以影响此类风险操作中使用的值(或者更一般地说,影响流入受限接收器的值)。相同的分析还可用于检测程序中的机密或敏感信息流向公共输出通道的情况。
存在许多静态污点分析的变体。重要的变化包括(1)代码的牵引力,例如,路径敏感与路径不敏感,或上下文敏感与上下文不敏感分析,以及(2)是否由程序控制流而不是程序引起的影响考虑数据流(通常通过使用术语污点分析与信息流分析来区分)。
为了减少误报的数量,污点分析可以考虑程序执行的清理。由指定的清理功能处理的污染值(假设用于验证这些值对进一步处理无害)将删除其污点。
一个重要的挑战是,必须为污点分析配置正确的源、水槽和消毒剂。在实践中,这种配置目前经常手动进行,尽管最近的一些工作增加了工具辅助,例如,机器学习用于支持安全分析师完成这项任务。
声音静态验证
其次,有一些静态分析技术旨在针对明确定义的漏洞类别保持合理性(但通常在实践中仍然会做出妥协并放弃对漏洞的合理性某种程度上)。对于可以理解为违反规范或合同的漏洞类别,主要挑战是正式表达此底层规范。完成此操作后,在计算机科学其他领域开发的大量静态分析和程序验证知识可用于检查是否符合规范。三种主要的相关技术是程序验证、抽象解释和模型检查。
程序验证使用程序逻辑来表达程序规范,并依赖于程序员/验证器以以下形式提供程序的充分抽象:归纳循环不变量或函数前置和后置条件,以便能够构造涵盖所有程序执行的证明。对于具有动态内存分配的命令式语言,分离逻辑[26]是一种程序逻辑,可以表示不存在内存管理和竞争条件漏洞(对于存储单元上的数据争用),以及符合程序员提供了程序API的合同。检查是否符合分离逻辑规范通常不是自动的:它通过交互式程序验证完成,其中程序注释用于提供不变量、前置条件和后置条件。但是,如果一个人只对没有内存管理漏洞感兴趣,有时可以推断出这些注释,使该技术自动进行。此外,避免使用某些语言功能(例如指针),并坚持适合验证的编码风格,有助于使验证自动化。
抽象解释是一种自动技术,通过将程序操作的运行时值映射到足够的有限抽象域,从具体程序进行抽象。对于不使用动态分配或递归的命令式程序,抽象解释是一种成功的技术,可以自动有效地证明不存在内存管理漏洞。
模型检查是一种自动技术,它详尽地探索程序的所有可访问状态,以检查是否没有状态违反给定规范。由于状态爆炸问题,模型检查只能穷尽地探索非常小的程序,在实践中需要使用绑定探索的技术,例如,通过限制程序循环的次数执行。有界模型检查不再合理,但仍能发现许多漏洞。
这些分析技术的大多数实际实现在某种程度上放弃了合理性。为了既合理又终止,静态分析必须过度近似它所分析的程序的可能行为。过度逼近会导致误报。真正的编程语言具有很难在不导致不可接受的误报数量的情况下过度近似的功能。因此,实际实现必须进行工程权衡,并且会低估某些语言功能。这使得实现不合理,但在减少误报数的意义上更有用。这些工程权衡在“声音宣言”中得到了很好的总结[27]。
动态检测
动态检测技术执行程序并监视执行以检测漏洞。因此,如果足够高效,它们也可用于实时漏洞缓解(请参阅主题4)。动态检测有两个重要且相对独立的方面:(1)应该如何监视执行以检测到漏洞,以及(2)执行多少程序以及执行哪些程序(3)即应该监控哪些输入值?
监测
对于可理解为违反单个执行的指定属性的漏洞类别(请参阅主题1.6),可以通过监视违反该规范来执行完整检测。对于其他类别的漏洞,或者当监视违反规范的成本太高时,可以定义近似监视器。
对内存管理漏洞的监视已经进行了深入研究。原则上,可以构建完整的监视器,但通常需要花费大量的时间和内存。因此,现有工具探索了执行速度、内存使用和完整性方面的各种权衡。现代C编译器包括用于生成代码以监视内存管理漏洞的选项。在动态分析是近似分析的情况下(如静态分析),它也可能生成误报或漏报,尽管它对具体的执行跟踪进行操作。
对于结构化输出生成漏洞,一个挑战是生成的输出的预期结构通常是隐式的,因此没有可以监视的显式规范。因此,监视依赖于合理的启发式方法。例如,监视器可以使用细粒度的动态污点分析[25]来跟踪不受信任的输入字符串的流,然后在不受信任的输入对生成的解析树产生影响时标记违规。输出。
软件构建的合同设计方法[18,c3]支持的断言,前置条件和后置条件可以编译到代码中,以便在测试时提供API漏洞的监视器,即使这些编译的运行时检查的成本可能太高而无法在生产代码中使用它们。
监控竞争条件很困难,但存在一些用于监控共享内存单元上数据争用的方法,例如,通过监视所有共享内存访问是否遵循一致的锁定规则。
生成相关执行
动态检测技术的一个重要挑战是沿着导致发现新漏洞的路径生成程序的执行。这个问题是软件测试中系统地为被测程序选择适当输入的一般问题的一个例子[18,c4]。这些技术通常由模糊测试或模糊测试的总称描述,可分为:
•黑盒模糊测试,其中输入值的生成仅取决于被测试程序的输入/输出行为,而不取决于其内部结构。已经提出了许多不同的黑盒模糊测试变体,包括(1)纯随机测试,其中输入值从适当的值域中随机采样,(2)模型基于模糊测试,其中在生成输入值期间考虑输入值的预期格式(通常以语法形式)的模型,以及(3)基于突变的模糊测试,其中模糊器提供一个或多个典型输入值,并通过对提供的输入执行小突变来生成新的输入值值。
•白盒模糊测试,分析程序的内部结构以帮助生成适当的输入值。主要的系统白盒模糊测试技术是动态符号执行。动态符号执行执行具有具体输入值的程序,并同时构建路径条件,这是一个逻辑表达式,用于指定程序采用此特定执行路径必须满足的那些输入值的约束。通过求解不满足当前执行路径条件的输入值,模糊器可以确保这些输入值将程序驱动到不同的执行路径,从而提高覆盖率。

计算机黑客
提起黑客,总是那么神秘莫测。 在人们眼中,黑客是一群聪明绝顶,精力旺盛的年轻人,一门心思地破译各种密码,以便偷偷地、未经允许地打入政府、企业或他人的计算机系统,窥视他人的隐私。 那么,什么是黑客呢?黑客(hacker),源于英语动词hack,意为“劈,砍”,引申为“干了一件非常漂亮的工作”。 在早期麻省理工学院的校园俚语中,“黑客”则有“恶作剧”之意,尤指手法巧妙、技术高明的恶作剧。 在日本《新黑客词典》中,对黑客的定义是“喜欢探索软件程序奥秘,并从中增长了其个人才干的人。 他们不象绝大多数电脑使用者那样,只规规矩矩地了解别人指定了解的狭小部分知识。 ”由这些定义中,我们还看不出太贬义的意味。 他们通常具有硬件和软件的高级知识,并有能力通过创新的方法剖析系统。 “黑客”能使更多的网络趋于完善和安全,他们以保护网络为目的,而以不正当侵入为手段找出网络漏洞。 另一种入侵者是那些利用网络漏洞破坏网络的人。 他们往往做一些重复的工作(如用暴力法破解口令),他们也具备广泛的电脑知识,但与黑客不同的是他们以破坏为目的。 这些群体成为“骇客”。 当然还有一种人兼于黑客与入侵者之间。 一般认为,黑客起源于50年代麻省理工学院的实验室中,他们精力充沛,热衷于解决难题。 60、70年代,“黑客”一词极富褒义,用于指代那些独立思考、奉公守法的计算机迷,他们智力超群,对电脑全身心投入,从事黑客活动意味着对计算机的最大潜力进行智力上的自由探索,为电脑技术的发展做出了巨大贡献。 正是这些黑客,倡导了一场个人计算机革命,倡导了现行的计算机开放式体系结构,打破了以往计算机技术只掌握在少数人手里的局面,开了个人计算机的先河,提出了“计算机为人民所用”的观点,他们是电脑发展史上的英雄。 现在黑客使用的侵入计算机系统的基本技巧,例如破解口令(password cracking),开天窗(trapdoor),走后门(backdoor),安放特洛伊木马(Trojan horse)等,都是在这一时期发明的。 从事黑客活动的经历,成为后来许多计算机业巨子简历上不可或缺的一部分。 例如,苹果公司创始人之一乔布斯就是一个典型的例子。 在60年代,计算机的使用还远未普及,还没有多少存储重要信息的数据库,也谈不上黑客对数据的非法拷贝等问题。 到了80、90年代,计算机越来越重要,大型数据库也越来越多,同时,信息越来越集中在少数人的手里。 这样一场新时期的“圈地运动”引起了黑客们的极大反感。 黑客认为,信息应共享而不应被少数人所垄断,于是将注意力转移到涉及各种机密的信息数据库上。 而这时,电脑化空间已私有化,成为个人拥有的财产,社会不能再对黑客行为放任不管,而必须采取行动,利用法律等手段来进行控制。 黑客活动受到了空前的打击。 但是,政府和公司的管理者现在越来越多地要求黑客传授给他们有关电脑安全的知识。 许多公司和政府机构已经邀请黑客为他们检验系统的安全性,甚至还请他们设计新的保安规程。 在两名黑客连续发现网景公司设计的信用卡购物程序的缺陷并向商界发出公告之后,网景修正了缺陷并宣布举办名为“网景缺陷大奖赛”的竞赛,那些发现和找到该公司产品中安全漏洞的黑客可获1000美元奖金。 无疑黑客正在对电脑防护技术的发展作出贡献。 2,黑客攻击一些黑客往往回采取一些几种方法,但是我很想说的是,一个优秀的黑客绝不会随便攻击别人的。 1)、获取口令这又有三种方法:一是通过网络监听非法得到用户口令,这类方法有一定的局限性,但危害性极大,监听者往往能够获得其所在网段的所有用户账号和口令,对局域网安全威胁巨大;二是在知道用户的账号后(如电子邮件@前面的部分)利用一些专门软件强行破解用户口令,这种方法不受网段限制,但黑客要有足够的耐心和时间;三是在获得一个服务器上的用户口令文件(此文件成为Shadow文件)后,用暴力破解程序破解用户口令,该方法的使用前提是黑客获得口令的Shadow文件。 此方法在所有方法中危害最大,因为它不需要像第二种方法那样一遍又一遍地尝试登录服务器,而是在本地将加密后的口令与Shadow文件中的口令相比较就能非常容易地破获用户密码,尤其对那些弱智用户(指口令安全系数极低的用户,如某用户账号为zys,其口令就是zys666、、或干脆就是zys等)更是在短短的一两分钟内,甚至几十秒内就可以将其干掉。 2)、放置特洛伊木马程序特洛伊木马程序可以直接侵入用户的电脑并进行破坏,它常被伪装成工具程序或者游戏等诱使用户打开带有特洛伊木马程序的邮件附件或从网上直接下载,一旦用户打开了这些邮件的附件或者执行了这些程序之后,它们就会象古特洛伊人在敌人城外留下的藏满士兵的木马一样留在自己的电脑中,并在自己的计算机系统中隐藏一个可以在windows启动时悄悄执行的程序。 当您连接到因特网上时,这个程序就会通知黑客,来报告您的IP地址以及预先设定的端口。 黑客在收到这些信息后,再利用这个潜伏在其中的程序,就可以任意地修改您的计算机的参数设定、复制文件、窥视你整个硬盘中的内容等,从而达到控制你的计算机的目的。 3)、WWW的欺骗技术在网上用户可以利用IE等浏览器进行各种各样的WEB站点的访问,如阅读新闻组、咨询产品价格、订阅报纸、电子商务等。 然而一般的用户恐怕不会想到有这些问题存在:正在访问的网页已经被黑客篡改过,网页上的信息是虚假的!例如黑客将用户要浏览的网页的URL改写为指向黑客自己的服务器,当用户浏览目标网页的时候,实际上是向黑客服务器发出请求,那么黑客就可以达到欺骗的目的了。 4)、电子邮件攻击电子邮件攻击主要表现为两种方式:一是电子邮件轰炸和电子邮件“滚雪球”,也就是通常所说的邮件炸弹,指的是用伪造的IP地址和电子邮件地址向同一信箱发送数以千计、万计甚至无穷多次的内容相同的垃圾邮件,致使受害人邮箱被“炸”,严重者可能会给电子邮件服务器操作系统带来危险,甚至瘫痪;二是电子邮件欺骗,攻击者佯称自己为系统管理员(邮件地址和系统管理员完全相同),给用户发送邮件要求用户修改口令(口令可能为指定字符串)或在貌似正常的附件中加载病毒或其他木马程序(据笔者所知,某些单位的网络管理员有定期给用户免费发送防火墙升级程序的义务,这为黑客成功地利用该方法提供了可乘之机),这类欺骗只要用户提高警惕,一般危害性不是太大。 5)、通过一个节点来攻击其他节点黑客在突破一台主机后,往往以此主机作为根据地,攻击其他主机(以隐蔽其入侵路径,避免留下蛛丝马迹)。 他们可以使用网络监听方法,尝试攻破同一网络内的其他主机;也可以通过IP欺骗和主机信任关系,攻击其他主机。 这类攻击很狡猾,但由于某些技术很难掌握,如IP欺骗,因此较少被黑客使用。 6)、网络监听网络监听是主机的一种工作模式,在这种模式下,主机可以接受到本网段在同一条物理通道上传输的所有信息,而不管这些信息的发送方和接受方是谁。 此时,如果两台主机进行通信的信息没有加密,只要使用某些网络监听工具,例如NetXray for windows 95/98/nt,sniffit for linux 、solaries等就可以轻而易举地截取包括口令和帐号在内的信息资料。 虽然网络监听获得的用户帐号和口令具有一定的局限性,但监听者往往能够获得其所在网段的所有用户帐号及口令。 7)、寻找系统漏洞许多系统都有这样那样的安全漏洞(Bugs),其中某些是操作系统或应用软件本身具有的,如Sendmail漏洞,win98中的共享目录密码验证漏洞和IE5漏洞等,这些漏洞在补丁未被开发出来之前一般很难防御黑客的破坏,除非你将网线拔掉;还有一些漏洞是由于系统管理员配置错误引起的,如在网络文件系统中,将目录和文件以可写的方式调出,将未加Shadow的用户密码文件以明码方式存放在某一目录下,这都会给黑客带来可乘之机,应及时加以修正。 8)、利用帐号进行攻击有的黑客会利用操作系统提供的缺省账户和密码进行攻击,例如许多UNIX主机都有FTP和Guest等缺省账户(其密码和账户名同名),有的甚至没有口令。 黑客用Unix操作系统提供的命令如Finger和Ruser等收集信息,不断提高自己的攻击能力。 这类攻击只要系统管理员提高警惕,将系统提供的缺省账户关掉或提醒无口令用户增加口令一般都能克服。 9)、偷取特权利用各种特洛伊木马程序、后门程序和黑客自己编写的导致缓冲区溢出的程序进行攻击,前者可使黑客非法获得对用户机器的完全控制权,后者可使黑客获得超级用户的权限,从而拥有对整个网络的绝对控制权。 这种攻击手段,一旦奏效,危害性极大。
如果卸载了‘金山软件基础服务’是不是不能够进行漏洞修复啊?
当然了!这是金山软件的基本组件啊要是卸载了不久有很多程序不能启动或者启动参数不正确了吗!不要卸载!
想知道网络安全该怎么去学习?
网络安全其实学的是理念,因为技术永远在前进,学些理论的知识对自己好处,黑客攻击的原理?发现目标网络或ip,扫描系统漏洞,扫描账户安全。 学会应用nmap,流光。 网络嗅探,
发表评论