代码审计,想必搞安全的同学再熟悉不过了,和标题中的IDE 插件有什么关系呢?莫不是标题党?
偶然挖洞闲暇时,发现了陌陌安全SRC的一个公告SAST开源,赶紧去撸一波源码,最终以看不懂为由挂机了。因此我决定从IDE插件开发学起,撸光它的码子。安全行业难能可贵的是开源精神,谢谢大厂。有请今天的主角momo-code-sec-inspector-java。大家可以先看着源码,看不懂了我们在来看看我下面的从0到1学开发插件。
上一篇介绍完IDEA插件开发的环境准备以及之一个插件开发,从本篇内容开始就对审计不同漏洞类型的代码进行分析,如下表,本篇为1001 拼接SQLi
编号 | 规则名称 | 修复建议 | 一键修复 |
---|---|---|---|
1001 | 多项式拼接型SQL注入漏洞 | T | |
1002 | 占位符拼接型SQL注入漏洞 | T | |
1003 | Mybatis注解SQL注入漏洞 | T | T |
1004 | Mybatis XML SQL注入漏洞 | T | T |
1005 | RegexDos风险 | T | T |
1006 | Jackson反序列化风险 | T | T |
1007 | Fastjson反序列化风险 | T | T |
1008 | Netty响应拆分攻击 | T | T |
1009 | 固定的随机数种子风险 | T | T |
1010 | XXE漏洞 | T | T |
1011 | XStream反序列化风险 | T | T |
1014 | 脆弱的消息摘要算法 | T | |
1015 | 过时的加密标准 | T | |
1016 | XMLDecoder反序列化风险 | T | |
1017 | LDAP反序列化风险 | T | T |
1018 | 宽泛的CORS Allowed Origin设置 | T | |
1019 | SpringSecurity关闭Debug模式 | T | T |
1020 | 硬编码凭证风险 | T | |
1021 | "@RequestMapping" *** 应当为 "public" | T | T |
1022 | Spring 会话固定攻击风险 | T | T |
1023 | 不安全的伪随机数生成器 | T | T |
1024 | OpenSAML2 认证绕过风险 | T | T |
1025 | IP地址硬编码 | T |
java_sec_code
提供了java漏洞代码示例,非专业程序猿请勿模仿,这是漏洞代码,漏洞代码,漏洞代码
代码审计官方示例
提供代码审计模板,可以git clone下来以此为模板
PSI理解
PSI是IDEA 插件开发里面一个特殊命名(Program Structure Interface)
PSI负责解析文件并创建语法和语义代码模型,以支持jetbrains的所有产品语言
通俗的来讲,PSI文件就是一棵大树,那这棵大树就是文件,大树上有很多枝丫,这些枝丫就是PSI element,枝丫上的所有小枝丫都是element
PsiViewer 插件安装
这个插件便于我们理解代码中重写 *** 的选择,也是IDEA开发获取psi element的一个辅助工具PsiViewer
也可以在plugin中搜索安装
官方SDK文档
SDK文档
1、从plugin.xml 读取功能类及相关介绍描述
2、功能类继承IDEA 相关API,例如代码审计需继承
查看功能类
进入BaseSQLi,这个类是检测SQL注入的一些前置条件,可以通过里面的 *** 来检测sql语句是否满足这些条件
进入MomoBaseLocalInspectionTool后2个父类就是LocalInspectionTool
3、功能类遍历正在浏览/编辑的java文件,利用我们重写的功能类 *** 匹配来发现有问题代码
4、将问题代码高亮显示,并提供问题详情和修复建议
5、使用ALT + ENTER 自动修复
修复后代码样例
下面是漏洞代码
下面是功能类
变量
如果匹配了代码审计规则,就会代码高亮,并显示问题msg
变量
如果有修复方案,ALT + ENTER会显示修复 msg
变量
修复建议提示名称(alt + enter后的名称)和帮助提示
*** 是用来访问PSI 文件的一个父类 *** ,返回PSI element,所有审计代码都在重写这个 *** 。
就是当前查看/编辑文件对象,也就是 LocalInspection类的实例,通过 *** 里面的rule来找到有问题的代码段后返回。
PSI 元素中拼接的String(拼接的必须带变量) ,约定元素名为: PsiPolyadicExpression
所以重写的 *** 为:来寻找拼接SQLi
中的局部变量List exps是MoExpressionUtils类的实例,将拼接语句split 后分为3段,保存进 list。
是exps利用stream() *** 将list 元素转换为 string
①判断转换后的expstr是否是sql 语句,如果是sql 格式,②则再判断 exps LIST中的元素type是否为String,如果是则将String s append 进入 StringBuilder *** 中,通过for循环最终将 *** 添加到List sql_segments中。如果segments为空则idea告警为(字符串拼接有多种方式String.format也可以拼接),否则为拼接型SQLi
①判断代码 BaseSQLi.java
②判断代码先判断是否在定义的三个类型 type中
使用PsiViewer来查看 exps的type类型
对判断结果进行告警
本篇讲的是拼接型SQLI 审计讲解,陌陌安全代码中还判断了是否是占位符型的SQLi,其实是多余了,因为在重写的 *** 后,接收的expression 只有 PsiPolyadicExpression, 占位符SQL注入的类型是PsiMethodCallExpression。如有不对之处还请大家评论区帮忙更正,谢谢!我下一节讲占位符SQLi类型,请关注我,及时看到更新哦。
《社会保险法》中有那么一段话,沒有雇佣工人的个体户,非全日制劳动力的员工和灵活就业人员工作人员能够报名参加基础社会养老保险,自身担负基础养老保险金。 表明在我国法律法规容许灵活就业人员工作人员...
近日一则“电动车大爷撞上保时捷当场转账”的消息让很多网友都很服气!很多人遇到这种情况都是希望交警能够从中协调,尽量将赔偿降到最低,而这位大爷不顾交警的劝阻,非要赔偿保时捷车主一万五千米,大爷还表示自己...
2019年10月31日,为及时准确掌握相关线索,教育部发布不良“校园贷”案件线索征集,在“中国学生资助”微信公众号开通“不良‘校园贷’举报通道”,向广大师生、家长征集不良“校园贷”线索。希望广大学生和...
火线特攻(火线特攻到底谁是凶手) 尔帕西诺”的传奇故事,既然提起了“阿尔帕西诺”,就不能不提“罗伯特德尼罗”,同一时代的两个巨星,同是“教父”代言人。他们二人,总是被影迷们拿来做比较,谁更好?谁更牛...
野马怎么样(24万的野马跑车值不值的买)hello,各位好!!检车家在这儿和大伙儿碰面了!热烈欢迎大伙儿观看当期二手车检测有趣的事,我是检车家小高高的,我曾经是一名汽车维修工,现在是检车家的一名二...
本系列文章将从最简单的概念开始,逐步讲解推荐系统的发展历程和最新实践。以产品经理的视角,阐述推荐系统涉及的算法,技术和架构。本章是第三章,将系统性地介绍推荐系统的基石之一:大数据。 大数据是数据智能...