静态分析

静态代码扫描原理

旧巷老猫 提交于 2020-01-15 12:45:04
静态代码扫描存在的价值 研发过程,发现BUG越晚,修复的成本越大 缺陷引入的大部分是在编码阶段,但发现的更多是在单元测试、集成测试、功能测试阶段 统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的 以上三点证明了,静态代码扫描在整个安全开发的流程中起着十分关键的作用,且实施这件事情的时间点需要尽量前移,因为扫描的节点左移能够大幅度的降低开发以及修复的成本,能够帮助开发人减轻开发和修复的负担,许多公司在推行静态代码扫描工具的时候会遇到 大幅度的阻力 ,这方面阻力主要来自于开发人员,由于工具能力的有限性,会产生大量的误报,这就导致了开发人员很可能在做BUG确认的工作时花费了大量的无用时间。因此选择一款合适的静态代码分析工具变得尤为重要,合适的工具能够真正达到降低开发成本的效果。 静态代码分析理论基础和主要技术 静态代码分析原理分为两种:分析源代码编译后的中间文件(如Java的字节码);分析源文件。主要分析技术如下: 缺陷模式匹配 事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行匹配,从而完成软件安全分析。优点:简单方便;缺点:需要内置足够多的缺陷模式,容易产生误报。 类型推断/类型推断 类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。

RN bundle自动化静态扫描

梦想与她 提交于 2020-01-15 01:42:18
背景 起因是在排查公寓找室友bundle过大问题时,发现house-middle-sdk体积异常,逐个删减引用得出结论是引用了node-forge库导致,通过这次手动排查经历演化出做一个bundle自动化静态扫描的想法。 介绍 安装 npm i house-cli -g 使用 根目录添加metro.config.js文件 //里面引用全局路径(这个后面优化一下) module.exports = require('/Users/haojie/WorkSpace/house-cli/scripts/index.js') house-explorer 功能点 输出 bundle总大小、按包统计模块大小并显示百分比、按包输出所有js文件的module文件 原理 基于metro的Serialization环节捕获到每个module,然后将其分析。原本打算侵入源码分析,但难度过大,因为涉及到react-native-cli以及react-native和metro源码的调用,所以最后折中采取在processModuleFilter环节分析的做法。缺陷在于目前没有做包的依赖库分析。 公寓找室友扫描结果分析 左侧为公寓数据、右侧为找室友数据 从分析数据来看总bundle大小相差200kb,业务代码均占比很高基本在40%或以上,把node-forge库优化后业务代码占比会更高

静态时序分析计算方法

二次信任 提交于 2020-01-14 06:04:54
时序就是时钟序列,给寄存器作为数据的传递 时钟和复位是属于异步的关系 LUT查找表,所以的组合逻辑都是靠它生成,时序逻辑是靠触发器生成 一个LAB(单元)里面有16个LE(根据器件不同应该不同吧) RAM是FPGA里面的硬件资源 自分频的时钟是没法布到全局时钟网络 全局时钟网络可以降低时钟偏斜 reg1是源端寄存器,reg2是目标寄存器 Ts建立时间是指采样寄存器即目标寄存器用来采样,采样时钟上升沿到达数据的起始位置,描述了采样时钟上升沿和数据的相位关系 Tsetup建立时钟门限在采样时钟的上升沿到了之前,最小的数据保持稳定时间。 建立时间余量skew = 建立时间-建立时间门限 >= 0 Th保持时间,上升沿和数据的结束位置 Thold保持时间门限,数据采样结束后的最小保持时间 保持时间余量skew = 保持时间 - 保持时间门限 >= 0 保持时间违例:如果数据和数据传输时候延时都非常小 建立时间违例: 数据路径延迟大 建立时间门限和保持时间门限只能通过换器件进行改变 触发器的建立时间要求为:T_setup,保持时间要求为:T_hold 路径①延时为:T1 ; 路径②延时为:T2;路径③延时为:T3 时钟周期为T_cycle Ts = (T_cycle + ΔT) - T1 Th =T1-ΔT ΔT = T3 - T2,则 条件1.如果T_setup < Ts,即T_setup

用Fortify SCA分析代码漏洞

跟風遠走 提交于 2020-01-11 03:20:26
   hyddd原创,转载请说明。   上次介绍了用FindBugs辅助分析代码漏洞,这次换了一个工具:Fortify SCA Demo 4.0.0。Fortify是一个在安全方面挺出名的公司,这里就不多说了。先介绍一下主角:Fortify SCA Demo 4.0.0,虽然现在不知道Fortify SCA的版本是多少,但可以肯定的是,Fortify SCA Demo 4.0.0是一个比较旧的Fortify SCA分析器了,并且还是Demo版的,所以无论是界面还是功能上都是比较简陋的。由于Fortify SCA不是开源的工具,这里就不提供下载了,大家可以上Fortify主页申请:>。   这次演示的是用Fortify SCA静态分析Java代码,和FindBugs不同的是Fortify SCA还可以静态分析C/C++,.NET和PL/SQL等代码。 一.Fortify SCA静态分析原理   由于我不是写这个东东的人,并且接触这个工具时间也有限,所以对它的工作原理认知比较浅,很多是通过它的说明文档得来的。   Fortify SCA静态分析分两个阶段:   1.Translation:     把各种语言的源代码转为一种统一的中间语言代码。   2.Analysis:     根据中间代码分析代码漏洞,并得出报告。   Fortify有很多个语言转换器,但核心的静态分析引擎只有一套

【Android内存机制分析】了解Android堆和栈

两盒软妹~` 提交于 2019-12-28 21:03:45
 昨天用Gallery做了一个图片浏览选择开机画面的功能,当我加载的图片多了就出现OOM问题。以前也出现过这个问题,那时候并没有深究。这次打算好好分析一下Android的内存机制。 因为我以前是做VC++开发,因此对C++在Window下的内存机制还是比较了解。不过转到Android后,一直都没有刻意去处理内存问题,因 为脑子里一直想着Java的GC机制。不过现在想想,自己对Android的GC和内存管理并不了解,自己写的代码在内存哪里运行都不清楚,心里不淡定 啊。 毕竟我以前写C++的时候,什么时候在哪里申请内存,什么时候释放内存,会不会栈溢出或者堆内存泄露都了如指掌。言归正传,今天打算先了解一下Android的堆和栈跟C++有何区别。 1、dalvik的Heap和Stack 这里说的只是dalvik java部分的内存,实际上除了dalvik部分,还有native。这个以后再说。 下面针对上面列出的数据类型进行说明,只有了解了我们申请的数据在哪里,才能更好掌控我们自己的程序。 2、对象实例数据 实际上是保存对象实例的属性,属性的类型和对象本身的类型标记等,但是不保存实例的方法。实例的方法是属于数据指令,是保存在Stack里面,也就是上面表格里面的类方法。 对象实例在Heap中分配好以后,会在stack中保存一个4字节的Heap内存地址,用来查找对象的实例

一款很好用的国产静态源代码扫描工具-DMSCA

蓝咒 提交于 2019-12-27 18:49:56
端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试团队快速、准确定位源代码中的安全漏洞、质量和业务逻辑缺陷等问题,并依据提供的专业中肯的修复建议,快速修复。提高软件产品的可靠性、安全性。同时兼容并达到国际、国内相关行业的合规要求。 DMSCA是端玛科技在多年静态分析技术的积累及研发努力的基础上,联合多所国内及国际知名大学、专家共同分析全球静态分析技术的优缺点后、结合当前开发语言的技术现状、源代码缺陷的发展势态和市场后,研发出的新一代源代码企业级分析方案,旨在从根源上识别、跟踪和修复源代码技术和逻辑上的缺陷。该方案克服了传统静态分析工具误报率(False Positive)高和漏报(False Negative)的缺陷。打断了国外产品在高端静态分析产品方面的垄断,形成中国自主可控的高端源代码安全和质量扫描产品,并支持中国自己的源代码检测方面的国家标准(GB/T34944-2017 Java、GB/T34943-2017 C/C++、GB/T34946-2017 C#),致力于为在中国的企业提供更直接,更个性化的平台定制和本地化服务。 DMSCA支持主流编程语言安全漏洞及质量缺陷扫描和分析,支持客户化平台界面、报告、规则自定义

微服务测试之静态代码扫描

本秂侑毒 提交于 2019-12-11 21:02:58
静态代码扫描为整个发展组织增加价值。无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险。 背景 微服务架构模式具有服务间独立,可独立开发部署等特点,独立开发诱发了技术上的分离,HTTP通信增加了问题诊断的复杂度,对系统的功能、性能和安全方面的质量保障带来了很大的挑战。 “ 微服务架构对测试的挑战 微服务架构模式下多个独立业务服务同时开展开发工作,每个系统都有各自的业务范围和开发周期要求,这样一来,下图所示的传统流程中产品经理提供需求,需求人员进行需求分析、开发人员进行开发,最后交给测试人员进行测试的方法,就无法满足测试覆盖和测试效率的要求。 相对于传统的单体模式而言,微服务模式下对测试带来的挑战总结起来包括以下内容: 1. 微服务系统模块层次化,需要保证模块内部代码的质量。这种场景下传统的端到端的测试无法满足测试要求; 2. 需要保证各个微服务系统内部模块间的正确性。系统模块间以及前端和后端通常会同时开展开发工作,模块间或者前后端通过接口(通常是Restful http接口)进行连接,而模块和后端往往没有界面,为了保证各个系统单个依赖系统的正确性,因此需要借助Mock技术隔离依赖的前提下进行接口级的测试; 3. 需要保证微服务系统中的接口一致性,即契约的一致性

嵌入式设备软件开发测试的关键技术 – 静态分析

大憨熊 提交于 2019-12-11 14:54:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近 Parasoft 做过一个关于测试工具尤其是静态分析技术的调查报告,收集大家对于测试工具的使用印象和技术总结。其中有一个经验丰富的资深软件工程师Brian,他在静态分析工具上颇有经验,但他反馈的结果是这些工具报告的很多问题总是类似“编译器警告”,并非绝对的潜在漏洞(bug)或软件缺陷。深入沟通交流后发现,他的这些印象最主要的原因是因为他所采用的测试工具大部分是免费软件,而且所接受的相关培训很多时候仅限于网络论坛,这样带来的结果必然是测试工具并不能实际解决问题,反而用于学习工具的时间超过了实际解决问题的时间,这有些本末倒置了。 所以,测试工具的要求(尤其是静态分析技术)除了通常大家所知的自动化属性,其实还需要更多考量测试报告结果的度量性和有效性,以用户角度去帮助客户快速应用先进测试技术并解决代码问题。众所周知,嵌入式行业的软件复杂性高,设计的平台丰富,各种不同的芯片和架构,纷繁的编译器种类等等。这必然要求一个成熟的开发测试平台体系,以及专业的技术支持服务,尤其是对于嵌入式行业。 静态分析结果的有效性 各大嵌入式行业如医疗、汽车、铁路、航空航天等的软件开发者每天都可能会遇到校验软件问题(bug)的有效性挑战,接受从客户、技术支持团队及质量测试部门的反馈结果并及时调查给予响应。对于开发人员来说

CodeSonar通过创新型静态分析增强软件可靠性

ⅰ亾dé卋堺 提交于 2019-12-11 14:47:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 为进一步提高软件的可靠性,GrammaTech公司正在与美国国土安全部(DHS)合作,并在“静态分析现代化程序(STAMP)”的指导下进行尖端研发。GrammaTech首席执行官Teitelbaum说:“DHS要求我们提供能够为静态分析领域增加具有价值的创新性想法。”三年来,GrammaTech提出了具有变革性的想法,其中最为主要的是使用机器学习检查开源社区中的大型代码库,以自动了解用户如何使用某些API。正如Teitelbaum指出的那样,这可以减轻手动、遗留方法相关联的缺点,这些遗留方法可以用来找出对API强制执行的规则,使用机器学习自动化规则创建过程,确保以更低的成本进行更多的程序错误检查。“我们从数千个开源程序中学习规则,并将其与CodeSonar和其他开源分析器进行集成,使开源社区也可以从我们的研究中受益。”Teitelbaum补充道。 软件开发生命周期中的重要性,特别是在网络安全方面,开发人员更有义务提高软件质量。这些年来,软件质量已逐渐成为开发人员的主要挑战。因此,网络威胁推动了高级代码分析工具的迅速发展。软件保障工具和先进的网络安全解决方案CodeSonar以其“核心创新”方法和强大的研究实力满足了这一全球性的需求。秉持着安全第一的软件设计理念,CodeSonar通过其稳健的代码分析平台

思考:一个系统的要能够被验证,能够被别的什么验证,或者系统本身支持自检,这样的系统才是一个功能可以保证准确的系统?

南笙酒味 提交于 2019-12-06 16:27:11
思考:一个系统的要能够被验证,能够被别的什么验证,或者系统本身支持自检,这样的系统才是一个功能可以保证准确的系统? 一个client server模式,那么client和server都要支持能够打印日志,并能把日志串起来,用来检测调用参数是否符合预期; 一个系统,要支持静态分析和动态分析,静态分析可以看日志,动态调试很分析可以通过一些工具,比如java可用阿里的 arthas 来源: https://www.cnblogs.com/big1987/p/11994404.html