LoRexxar's Blog | 信息技术分享

人与代码的桥梁-聊聊SAST

自从人类发明了工具开始,人类就在不断为探索如何更方便快捷的做任何事情,在科技发展的过程中,人类不断地试错,不断地思考,于是才有了现代伟大的科技时代。

在安全领域里,每个安全研究人员在研究的过程中,也同样的不断地探索着如何能够自动化的解决各个领域的安全问题。其中自动化代码审计就是安全自动化绕不过去的坎。

而SAST作为自动化代码分析的一种,有着其特有的定位以及作用,这篇文章我们就来聊聊静态分析的一些发展历程和思路。

本篇文章其实在2年前曾经写过一次,在2年后的今天处于偶然的契机正好要写一篇相关的文章,所以重写了这部分内容,其中修正了不少在这期间内探索获取的新理念和思路,希望有价值。

Joern In RealWorld (3) - 致远OA A8 SSRF2RCE

致远OA是国内最有名的OA系统之一,这个OA封闭商业售卖再加上纷繁复杂的版本号加持下,致远OA拥有大量无法准确判断的版本。

这篇文章的漏洞源于下面这篇文章,文章中提到该漏洞影响A8, A8+, A6等多个版本,但很多版本我都找不到对应的源码,光A8就有一万个版本,下面我们尽可能的复现漏洞和探索Joern的可能性

Joern In RealWorld (2) - Jumpserver随机数种子泄露导致账户劫持漏洞(CVE-2023-42820)

Jumpserver是一个开源的django架构的堡垒机系统,由lawliet & zhiniang peng(@edwardzpeng) with Sangfor在上个月报送了这个漏洞

漏洞原理其实比较神奇,一个常用的第三方组件库django-simple-captcha泄露随机数种子的问题,再配合Jumpserver使用了错误的随机数方案导致了最终的漏洞。

Joern In RealWorld (1) - Acutators + CVE-2022-21724

这个系列会记录我用Joern复现真实漏洞的一些过程,同样也是对Joern的深入探索。

这里我选用Java-sec-code的范例代码做第一部分,这篇文章记录了两个比较经典的漏洞

  • Springboot Acutators导致命令执行
  • postgreSQL jdbc反序列化漏洞(CVE-2022-21724)

Joern分析Java代码可以选择用代码文件夹也可以选择直接分析jar包

1
importCode("../../java-sec-code/target/java-sec-code-1.0.0.jar")
深入浅出Joern(三)Joern和Neo4j常用语法大全

前两篇文章主要讲了Joern相关技术的设计原理,以及CPG的实际表现

在研究Joern和Neo4j的过程中,我遇到了一个相当大的问题,就是由于我对OverflowDB包括scala和cypher语言都不熟。Joern和Neo4j分别支持这几种冷门语言,而相应的文档其实没有解决我的问题。

所以在继续研究Joern之前,先花时间简单记录一些Joern和Neo4j实用的语法和范例,给自己当个字典随时可以查阅。

深入浅出Joern(二)CPG与图数据库

在上篇文章里,我们从Joern入手大致介绍了CPG(Code Property Graph)的设计理念和简单逻辑

但实际上来说,如果想要更深入的了解Joern,CPG和图数据库是绕不开的一个话题。CPG作为一种代码属性图,就必须寻找一种图数据库作为载体,就像我们常用的数据和SQL数据库的关系一样。

旧版本的Joern使用的Gremlin,但后来的开发中换成了OverflowDB,在joern中也完全支持使用OverflowDB的查询语法

但属性图本身没有什么特异性,比较常见的比如Neo4J,OrientDB或者JanesGraph都支持CPG的表现形式。

但,在这之前,我们首先需要知道,为什么是图?

深入浅出Joern(一)Joern与CPG是什么?

从人们开始探索代码扫描这件事情开始,市面上就在不断地诞生着各种各样的工具,经过了几年的演变以及发展,对于白盒代码扫描这件事情来说,大家的观念也在逐渐趋同。

无论是基于IR(Intermediate Representation)AST(abstract syntax trees)CFG(control flow graphs)PFG(program dependence graphs),又或者是其他的什么中间态。白盒代码扫描工具都在这个基础上做模拟执行、污点传播等等方案来分析挖掘漏洞。

而随着CodeQL的概念逐渐被大家接受之后,现在的代码扫描工具越来越趋近于将底层和上层拆解开来,由底层的引擎将代码统一化处理,然后使用者在上层通过编写规则或者语句就可以。主流的CodeQL、Checkmarx其实都使用了类似的方案。今天要说的Joern也是如此。

今天介绍的Joern有什么特殊的呢?

首先CodeQL本身不开源只能使用,偏偏微软还做了商业化限制,以微软喜欢秋后算账的风格来讲,实在无法确定深入研究CodeQL是否值得。

除此之外,市面上的很多白盒扫描工具其实是非静态的,扫描的时候不但需要配置复杂的运行环境,而且本身可能依赖编译过程,无论是自己使用还是商业化这都非常不实用。

个人认为白盒工具有着几个很重要的点

  • 静态扫描静态扫描的优势和便利程度才是白盒比较优势的一环,毕竟白盒不是灰盒,如果对编译环境和运行环境有依赖那为什么不使用更准确的灰盒
  • 扫描速度,虽然这点是很多商业化白盒软件的通病,但无论在哪家公司的DevSecOps中,最终目标肯定是把安全检测加载上线前,那么无论是1分钟、3分钟还是5分钟,扫描速度会是第一优先级,比如CheckMarx动辄几小时的扫描肯定是不现实的
  • 可diy性,当然对于大部分人来说这点其实并不是很重要,但能对引擎进行深入改造会是优化开发非常重要的一点,joern是开源的,在这方面他有很大的优势
  • 可拓展性,市面上大部分的白盒扫描工具动辄支持几十种语言,比如说snoarqube这种,但实际上大部分拓展语言只支持非常简单的正则拓展,我一直觉得现代白盒软件很重要的一条路就是走通用性,这也是比较有名的一些白盒工具都选择的路,在白盒扫描过程中会刻意将统一结构拆分出去再做分析扫描。

今天介绍的joern的其实就是这类工具的一员,他最大的特点其实就是开源。

打造自己的AIGC应用(一)入门篇

其实细数AI的发展历程非常之久,而让AI的应用一下子出现在人们眼前的其实就是ChatGPT的出现,这意味着AIGC应用已经从概念为王变的非常实用了。伴随着ChatGPT的出现,大量的开源大模型也如雨后春笋一样出现。就现在而言,打造一个自己的AIGC应用已经非常简单了

赛博偶像速成指南(三)- Midjourney

之前的几篇关于AI生成图片的文章讲的都是stable diffusion,虽然SD出现的更早而且开源免费,但其实在设计圈使用更广泛的是MidjourneyMidjourney最大的优点就是使用的便利性,任何一个不懂技术的设计都可以通Midjourney来快速完成设计,而且Midjourney的底层基础模型成熟度相当高,生成的图质量都很高。

赛博偶像速成指南(二)- SD进阶篇

在第一篇关于AI绘图的文章中,我主要介绍了stable diffusion的各种使用方法

在midjounry收费之后,除非你对AI绘图这个操作本身有强需求,否则在免费自建的stable diffusion上做拓展就成了现在最好的解决方案。

这篇文章就聊一些stable diffusion的一些进阶操作和关键点。其中有不少还是很有意思的。

从0到1的ChatGPT - 进阶篇(五)- Embeddings

在前面的文章中,无论是各种prompt技巧,又或者是对话技巧,更或者是各种数据集训练,都逃不开两个致命的问题。

1、ChatGPT只能处理文字

2、无论是上下文参考,还是单条对话都有token限制

所以在ChatGPT中,很多应用方向遇到的第一个问题就是如何把问题用文字的方式描述出来,其中最典型的场景就是代码分析。

所以ChatGPT也鼓励使用Embeddings来做类似搜索、分类或者异常检测的分析,这篇文章就讲讲这个。

从0到1的ChatGPT - 进阶篇(四)- 训练自己的ChatGPT

在之前的文章中曾经提到过,ChatGPT其实是不接受来自互联网的知识的,他的所有内容都是来自于至少3年前各种来源的知识库。但这并不意味着ChatGPT没有能力学习你的回答

首先ChatGPT一般会根据你和他的问答内容进行一定的上下文参考,其次,由于ChatGPT学习的内容之庞大,你通过一种直白的方式问不到的答案不一定是他不会,有可能是你问的方式不对。

在ChatGPT的官方文档中,他首先鼓励你通过提供多个示例来让ChatGPT更准确的寻找答案,他把这个方案称之为**“few-shot learning.”**

除此之外,当然他也允许你通过微调功能来对ChatGPT进行一定的训练,来获得一个更符合自己要求的ChatGPT,当然,这个功能是收费的。

img

但Fine-tuning这个功能目前只能应用于GPT3的基础模型,就目前而言,这个功能其实还不如很多市面上的其他大模型,openai并没有给出特别好的自定义方案给大家。但这篇文章还是先聊聊这个。

看上去不起眼的微信机器人以及公众号爬虫

互联网发展零零散散都要20多年了,技术发展的重心也一直在演变。今天这篇文章很特别,起因是最近有一些关于微信机器人以及公众号爬虫的需求,本以为这种老透了需求其实现在根本不需要花什么时间精力去搞,结果没想到这个东西在过去的十几年里经过了很多次变化,于是决定记录下这篇文章,一方面是留个技术存档,另一方面也是想看看10年之前的技术相比现在和10年之后发生过又或者会发生什么的变化?

从0到1的ChatGPT - 进阶篇(三)- ChatGPT+?

在我们对ChatGPT的基础能力有了一定的了解之后,我们就要开始在ChatGPT的基础上探索更多的可能性。

而ChatGPT本身的问题也很多,ChatGPT在使用上最大也最明显的革命,其实是对自然语言的处理能力,抛开太多专业性的术语,你在使用的过程中也能明显感觉到,ChatGPT甚至在某些方面有着比正常人更厉害的解读能力,它可以把一段模糊的要求和文字解读成需求,最牛逼的是它还支持中文,毕竟理论上中文的自然语言处理难度是几个量级。

从0到1的ChatGPT - 入门篇(二) - 如何与ChatGPT对话?

在上篇文章的结尾,我提到了ChatGPT其实更像是一把铲子,在拥有这把铲子之前,我们只知道可以把土堆成房子,但是不知道用什么把土堆起来,但在有了这把铲子之后,铲土只是铲子最直白的利用,如何用铲子堆一个又大又漂亮的房子可能我们还不知道,但至少我们现在已经开始尝试做这样的事情了。

其实从ChatGPT诞生至今,所有从事相关研究的朋友都在努力的在ChatGPT上探索各种各样的使用方式,甚至现在已经诞生了所谓的prompt工程师。

这篇文章就聊聊很多现在已有的关于ChatGPT使用的技巧。

从0到1的ChatGPT - 入门篇

在2023年年初,ChatGPT像一颗流星一样突然出现在大家的面前,围绕ChatGPT的探索也以各种各样的方式出现在大家的面前。

相比基于ChatGPT的探索,openai的平台和国内的对抗反倒在潜移默化的升级,我没有了解过openai到底有什么样的背景导致一直执着于国内使用者的封禁,这篇文章就先讲讲我在这个过程的所有探索以及相应的解决方案吧。

赛博偶像速成指南

随着ChatGPT的爆火,最近和人工智能有关的各个部分也有一次爆火起来,由ai制成的美少女也是最近的一个爆火的话题,花了一点儿时间了解了一下,感觉还挺有意思的,现有的工具已经是非常成熟可用的东西了,接下来简单介绍一下怎么玩

CS Xss2Rce CVE-2022-39197分析与复现

前段时间这个漏洞被挖掘出来之后的时候还是引发了很多关注的,但是最初一直都没有什么像样的分析文章出来,最早看@漂亮鼠的文章之后才大体上对这个漏洞有了一个基本的认识。

https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ

但是不知道是我的java水平真的不够,又或者说这篇文章中隐去的部分太多了,我顺着文章研究了一段时间但是几个点都串不起来。后来又接二连三的看了几篇文章,直到看完@pang0lin才算是把逻辑串联起来许多

https://mp.weixin.qq.com/s?__biz=MzkzNjMxNDM0Mg==&mid=2247485450&idx=1&sn=5662a9f2c081fc8521eee651b357323f&chksm=c2a1dc83f5d655957cf2a1c88adf45cd0d028316f536e0a8a18c9e7cb0440869ed4077822ce8&mpshare=1&scene=1&srcid=1017PFOrquxivFM2ck4Prl9m&sharer_sharetime=1665993698480&sharer_shareid=8c0858e06fee9d607c68521b3949c3e9#rd

这篇文章不知道什么时候发出来,主要是记录一下整个复现分析的心路历程,以便以后需要的时候没处看。

SCA的困境和出路

SCA是什么?我想可能很多人都有这个问题。SCA的全称叫做Software Composition Analysis,有的朋友可能直接把他叫做软件成分分析,也可以叫他组件安全分析。现代的SCA大多数都是基于白盒的角度去做,也就是SAST中的一环,但是也有不少场景需求对二进制或者运行中软件做分析,当然这不是今天讨论的主要目标。这个东西最常见的地方就是github,github内置了一个简单的SCA扫描

img

今天我们主要聊聊白盒角度的SCA,SCA这个东西听名字好像很复杂,但是实际上把它聊的简单一点儿可以拆开两部分,一个是组件数据,另一个是漏洞数据,我们分开聊聊这两个部分。