关于源代码:代码泄漏无感知代码安全审计构筑企业核心资产安全防线

一个不眠之夜“叮叮叮,叮叮叮”,一阵短促的微信音讯声将正在熟睡中的小安吵醒,小安下意识的拿起枕边的手机一看,凌晨三点半,手机屏幕上满满的都是源代码托管服务器发来的告警,他连忙查看告警详情,内容都是:用户:小蓝,IP:192.168.0.100,正在克隆xx仓库。 多条告警显示,小蓝正在大量克隆公司外部我的项目仓库。起初,小安认为是源代码仓库受到了歹意攻打,然而认真一看用户信息,显著是公司内部人员,而且只克隆与公司近期研发的 AI 医疗相干的仓库,其余产品线的并未克隆,小安认为公司内部人员不会在日上三竿还进行产品研发。 来不及多想,为了保障公司代码平安,小安将 IP 和用户名纳入了代码仓库治理的黑名单中,告警戛然而止,代码托管服务器日志也没有其余异样。小安悬着的心终于落地了,带着纳闷小安又眯了一会儿,期待下班。 第二天下班,小安将昨晚的事件通知了 SRE 团队的其余成员,顺便说起了那个用户 ID,后果其中一位共事说,那个 ID 是一个外围研发的,他始终在负责公司翻新我的项目 AI 医疗的研发工作,据说前段时间,有一家初创企业给了难以回绝的待遇,所以近期曾经在办理到职了。小安感觉事件不简略,于是立马将此状况向平安合规经理进行了汇报。平安合规经理非常重视这件事,立马和研发负责人进行沟通。 预先得悉,小蓝行将退出一家初创公司,他想把本人已经编写的一些算法代码带过来,而这也是他高薪待遇的一个条件,于是小蓝在早晨大家都进入梦乡的时候,用本人尚有权限的账号将过往的代码克隆下来,没想到克隆刚开始不久忽然账号就被封闭,无奈执行任何操作。 在月度平安合规复盘的时候,小安因为敏锐的安全感和及时采取的止损措施受到了平安合规经理的褒扬,小安有些腼腆地说:都是源代码托管平台的平安审计帮了忙。 源代码托管:最容易被从外部攻破的堡垒下面小安公司遇到的状况就是软件研发畛域十分常见的源代码透露事件。现如今随着企业数字化转型的逐渐深刻,软件曾经成为撑持企业数字化转型的重要支点,而作为软件原材料的源代码天然也成为了企业的外围资产,源代码的透露或者受损也就意味着企业外围资产的受损。 然而,企业源代码透露的事件却频繁产生,比方 2018 年,某国内出名电子产品生产厂商产生了源代码透露事件,起因是一名实习生在到职的时候带走了局部源代码,而后将其分享给了做平安钻研的敌人,随后敌人将代码上传到了 GitHub 仓库下面,最终导致源代码透露,影响了大量应用该公司电子产品的用户;再比方 2022 年,某国内出名汽车厂商产生了重大的数据透露事变,多达 300,000 万的客户数据被透露,外面蕴含大量的集体敏感信息,预先剖析得悉,数据透露的起因是分包商不小心将代码上传到了公共仓库,而这些代码蕴含了重要的敏感信息,从而影响了 2017 - 2022 年间注册了厂商某 App 的所有客户。 源代码的平安防护是一个重要话题,须要采取多种手段来构建平面的防护机制,比方用户登陆认证受权(事先)、用户拜访权限管制(事中)以及平安审计(预先)等。针对下面的几个代码透露事件,如果用好源代码托管的审计事件性能,是能够进行躲避的。 审计事件,构建源代码平安防护的“最初一道防线”所谓审计事件是对重要事件进行追踪,通过对事件操作行为的剖析来及时阻止不合规的操作,最终保障事务主体的安全性。 对于源代码托管来讲,审计事件次要是对于源代码托管平台的操作进行追踪,诸如用户增删、代码仓库权限及拜访等,以便及时发现不合规的操作,防止源代码遭逢透露。 源代码托管审计事件三要素源代码托管的审计事件的要害因素是三个“W”: Who:事件的操作主体。次要指对源代码进行操作的用户;When:事件产生的工夫。次要指用户对源代码托管平台执行某些操作时的具体工夫;What:操作主体做了什么具体操作。次要指对代码仓库的一些具体操作,诸如代码克隆、推送及拉取,仓库的可见性变更及用户增加和删除等。源代码托管审计事件的价值审计事件是构建源代码托管平台平安防护网的重要一环,残缺的审计事件具备以下价值: 防患于未然,及时止损:通过剖析用户的行为,及时发现不合规的操作,比方短时间内大量克隆代码仓库、将公有仓库改为公共仓库等,而后采取对应的措施来阻止不合规操作对应源代码的进一步操作,防止造成源代码透露或受损;找事件真因,疾速定位:如果产生了源代码透露或者受损的状态,能够借助审计事件进行事变回溯,在过往的审计事件中找到可疑的人员、可疑的操作,再通过疾速排查来找到事变产生的真正起因;立平安警钟,防止后患:残缺的平安审计流程能够通知内部人员,任何不合规操作都会被发现,如果触碰公司平安合规红线,就会受到公司的相应处罚,让所有公司人员造成平安合规意识,独特爱护公司外围资产平安。极狐GitLab 审计事件性能极狐GitLab 作为一体化的 DevSecOps 平台,具备残缺的审计事件体系,蕴含从实例级到群组级再到我的项目级,而且笼罩用户治理、认证受权、项目管理、代码写作、CI/CD 等方面。截止到 16.2 版本,极狐GitLab 共有 132 项审计事件,而且还有局部审计事件在踊跃开发中。 极狐GitLab 审计事件性能特点极狐GitLab 审计事件性能是极狐GitLab 平安合规能力的重点性能之一,是付费性能(仅在业余及以上版本中可用),具备以下特点: 开箱即用:极狐GitLab 审计事件性能开箱即用,用户无需进行额定配置,只须要导入付费版许可证即可开启应用,在对应的门路下即可查看针对实例、群组及我的项目相干的审计事件;事件丰盛:极狐GitLab 审计事件涵盖的范围广,蕴含的审计事件类型丰盛,如上图所示,截止 16.2 版,已有 132 项可用的审计事件,可能建设起一个很欠缺的审计防护体系;迭代更新:极狐GitLab 采取月度发版机制,可能对审计事件性能进行继续地迭代更新,据统计,在最近一年的发版(12 个版本)中,大概有 13+ 个与审计事件相干的重大改良公布,进一步改良了审计事件的性能;极狐GitLab 审计事件性能应用针对实例级别的审计事件,能够通过管理中心 → 监控 → 审计事件来查看。比方能够在实例级别的审计事件中看到 SSH key 增加、集体拜访令牌创立、群组/我的项目创立、删除等事件。 ...

September 7, 2023 · 1 min · jiezi

关于源代码:5-大手段打造单一可信源代码托管平台|极狐GitLab-DevSecOps-助力-SLSA-落地之源代码篇

什么是 SLSA? SLSA( Supply chain Levels for Software Artifacts) 是一个平安框架,一系列对于规范和管制的清单,用来避免篡改、进步完整性以及爱护我的项目、业务以及企业中软件包与根底设置的平安。 SLSA 平安框架基于行业共识创立,同时实用于软件生产者和软件消费者: 生产者:遵循平安规范让其研发的软件更平安;消费者:依据所应用软件包的平安状态来做出对应的决策。接下来,咱们将从「源代码」、「依赖」等方面来探讨极狐GitLab DevSecOps 如何助力 SLSA 落地。本文为「源代码」篇,Enjoy~ 可信的源代码托管平台是落地 SLSA 的要害SLSA 框架建设了三个信赖边界,激励用户采纳正确的规范和防护伎俩来增强零碎进攻。这三个信赖边界别离是:Source、Build 以及 Package。 而在每个边界处都有潜在的不平安操作,可能毁坏整个体系的安全性。例如在源代码托管局部,一个未经验证的用户提交或一次未签名的提交等,可能将存在安全隐患的代码提交到仓库,最终成为软件供应链中的「一颗雷」。 一个可信的源代码托管平台是保障软件供应链平安的第一因素,也是助力企业落地 SLSA 框架的要害。 极狐GitLab:繁多可信的源代码托管平台极狐GitLab 是一个一体化平安 DevOps 平台,源代码托管是其重要性能。在经验了十多年的倒退后,极狐GitLab 已成为具备多种平安防护伎俩的繁多可信源代码托管平台,下文将介绍其中 5 种平安伎俩: 认证与密码保护「认证」是爱护一个平台平安的最根本要求。就像一个人在进入一栋建筑物时,须要认证是否为受权人员;进入修建后,还要赋予对应权限,来容许其在不同区域进行对应的受权操作。 在认证阶段(进入修建),极狐GitLab 反对 2FA 以及弱密码保护。 2FA(Two-factor authentication)是极狐GitLab 为账号提供了另一层平安爱护,除了用户名明码外,还须要提供第二层认证因素(比方手机验证码)才能够登录账号。 用户只须要开启 2FA 配置即可: 2FA 可能无效避免用户在不小心失落用户名明码的状况下,极狐GitLab 账号被歹意登录应用。 此外,极狐GitLab 在 15.4 开启了弱明码阻止性能。如果明码与已知的 4500+ 弱明码相匹配、明码中蕴含用户名或蕴含 gitlab、devops 等字样,会导致明码批改、创立失败,防止弱明码隐患。 此外,还能够通过设置明码长度,来确保明码足够强壮。 精细化权限治理在受权阶段(进入修建后的受权操作),极狐GitLab 应用 RBAC 进行精细化权限治理。 当将某个用户增加到某个 Group/Project 中时,通过赋予的角色(Role)来决定用户对于该 Group/Project 下的仓库具备何种操作权限。 目前可用的 Role 有:Guest、Reporter、Developer、Maintainer 以及 Owner。不同的 Role 具备不同的可执行权。 ...

April 7, 2023 · 1 min · jiezi

关于源代码:通过源码分析RocketMQ主从复制原理

作者:京东物流 宫丙来 一、主从复制概述 RocketMQ Broker的主从复制次要包含两局部内容:CommitLog的音讯复制和Broker元数据的复制。CommitLog的音讯复制是产生在音讯写入时,当音讯写完Broker Master时,会通过独自的线程,将音讯写入到从服务器,在写入的时候反对同步写入、异步写入两种形式。Broker元数据的写入,则是Broker从服务器通过独自的线程每隔10s从主Broker上获取,而后更新从的配置,并长久化到相应的配置文件中。RocketMQ主从同步一个重要的特色:主从同步不具备主从切换性能,即当主节点宕机后,从不会接管音讯发送,但能够提供音讯读取。二、CommitLog音讯复制 2.1、整体概述 CommitLog主从复制的流程如下: 1.Producer发送音讯到Broker Master,Broker进行音讯存储,并调用handleHA进行主从同步; 2.如果是同步复制的话,参考2.6章节的同步复制; 3.如果是异步复制的话,流程如下: 1. Broker Master启动,并在指定端口监听;2. Broker Slave启动,被动连贯Broker Master,通过Java NIO建设TCP连贯;3. Broker Slave以每隔5s的间隔时间向服务端拉取音讯,如果是第一次拉取的话,先获取本地CommitLog文件中最大的偏移量,以该偏移量向服务端拉取音讯4. Broker Master 解析申请,并返回数据给Broker Slave;5.Broker Slave收到一批音讯后,将音讯写入本地CommitLog文件中,而后向Master汇报拉取进度,并更新下一次待拉取偏移量;咱们先看下异步复制的整体流程,最初再看下同步复制的流程,异步复制的入口为HAService.start(); public void start() throws Exception { //broker master启动,接管slave申请,并解决 this.acceptSocketService.beginAccept(); this.acceptSocketService.start(); //同步复制线程启动 this.groupTransferService.start(); //broker slave启动 this.haClient.start();}上面别离对下面的每一步做具体阐明。 2.2、HAService Master启动 public void beginAccept() throws Exception { this.serverSocketChannel = ServerSocketChannel.open(); this.selector = RemotingUtil.openSelector(); this.serverSocketChannel.socket().setReuseAddress(true); this.serverSocketChannel.socket().bind(this.socketAddressListen); this.serverSocketChannel.configureBlocking(false); this.serverSocketChannel.register(this.selector, SelectionKey.OP_ACCEPT);}在beginAccept办法中次要创立了ServerSocketChannel、Selector、设置TCP reuseAddress、绑定监听端口、设置为非阻塞模式,并注册OP_ACCEPT(连贯事件)。能够看到在这里是通过Java原生的NIO来实现的,并没有通过Netty框架来实现。 acceptSocketService.start()启动办法代码如下: while (!this.isStopped()) { try { //获取事件 this.selector.select(1000); Set<SelectionKey> selected = this.selector.selectedKeys(); if (selected != null) { for (SelectionKey k : selected) {//解决OP_ACCEPT事件,并创立HAConnection if ((k.readyOps() & SelectionKey.OP_ACCEPT) != 0) { SocketChannel sc = ((ServerSocketChannel) k.channel()).accept(); if (sc != null) { HAConnection conn = new HAConnection(HAService.this, sc); //次要是启动readSocketService,writeSocketService这两个线程 conn.start(); HAService.this.addConnection(conn); } } } selected.clear(); } } catch (Exception e) { log.error(this.getServiceName() + " service has exception.", e); }}选择器每1s解决一次解决一次连贯就绪事件。连贯事件就绪后,调用ServerSocketChannel的accept()办法创立SocketChannel,与服务端数据传输的通道。而后为每一个连贯创立一个HAConnection对象,该HAConnection将负责Master-Slave数据同步逻辑。HAConnection.start办法如下: ...

March 2, 2023 · 6 min · jiezi

关于源代码:如何阅读一份源代码

浏览源代码的能力算是程序员的一种底层根底能力之一,这个能力之所以重要,起因在于: 不可避免的须要浏览或者接手别人的我的项目。比方调研一个开源我的项目,比方接手一个其他人的我的项目。浏览优良的我的项目源码是学习别人优良教训的重要途径之一,这一点我本人深有体会。 读代码与写代码是两个不太一样的技能,起因在于“写代码是在表白本人,读代码是在了解他人”。因为面对的我的项目多,我的项目的作者有各自的格调,了解起来须要破费不少的精力。我从业这些年泛读、精读过的我的项目源码不算少了,陆陆续续的也写了一些代码剖析的文章,本文中就简略总结一下我的办法。 先跑起来 开始浏览一份我的项目源码的第一步,是先让这个我的项目可能通过你本人编译通过并且顺利跑起来。这一点尤其重要。 有的我的项目比较复杂,依赖的组件多,搭建起一个调试环境并不容易,所以并不见得是所有我的项目都能顺利的跑起来。如果能本人编译跑起来,那么前面讲到的情景剖析、加上调试代码、调试等等才有开展的根底。 就我的教训而言,一个我的项目代码,是否能顺利的搭建调试环境,效率大不一样。 跑起来之后,又要尽量的精简本人的环境,缩小调试过程中的烦扰信息。比方,Nginx 应用多过程的形式解决申请,为了调试跟踪 Nginx 的行为,我常常把 worker 数量设置为1个,这样调试的时候就晓得待跟踪的是哪个过程了。 再比方,很多我的项目默认是会带上编译优化选项或者去掉调试信息的,这样在调试的时候可能会有困扰,这时候我会批改 makefile 编译成 -O0 -g,即编译生成带上调试信息且不进行优化的版本。 总而言之,跑起来之后的调试效率能晋升很多,而在跑起来的前提之下又要尽量精简环境排除烦扰的因素。 明确本人的目标 只管浏览我的项目源码很重要,然而并不见得所有我的项目都须要从头到尾看的清清楚楚。在开始开展浏览之前,须要明确本人的目标:是须要理解其中一个模块的实现,还是须要理解这个框架的大体构造,还是须要具体相熟其中的一个算法的实现,等等。 比方,很多人看 Nginx 的代码,而这个我的项目有很多模块,包含根底的外围模块( epoll 、网络收发、内存池等)和扩大具体某个性能的模块,并不是所有这些模块都须要理解的十分分明,我在浏览 Nginx 代码的过程中,次要波及了以下方面: 理解 Nginx 外围的根底流程以及数据结构。理解 Nginx 如何实现一个模块。 有了这些对这个我的项目大体的理解,剩下的就是遇到具体的问题查看具体的代码实现了。总而言之,并不倡议毫无目标的就开始开展一个我的项目的代码浏览,无头苍蝇式的乱看只会耗费本人的工夫和激情。 辨别主线和干线剧情 有了后面明确的浏览目标,就能在浏览过程中辨别开主线和干线剧情了。比方: 想理解一个业务逻辑的实现流程,在某个函数中应用一个字典来保留数据,在这里,“字典这个数据结构是如何实现的”就属于干线剧情,并不需要深究其实现。 在这一准则的领导下,对于干线剧情的代码,比方一个不须要理解其实现的类,读者只须要理解其对外接口,理解这些接口的入口、进口参数以及作用,把这部分当成一个“黑盒”即可。 顺便一提的是,早年间看到一种 C++ 的写法,头文件中只有一个类的对外接口申明,将实现通过外部的 impl 类转移到 C++ 文件中,比方: 头文件: // test.hclass Test {public: void fun();private: class Impl; Impl *impl_;};C++文件: void Test::fun() { impl_->fun()}class Test::Impl {public: void fun() { // 具体的实现 }}这样的写法,让头文件清新了很多:头文件中没有与实现相干的公有成员、公有函数,只有对外裸露的接口,使用者高深莫测就能晓得这个类对外提供的性能。 ...

April 20, 2022 · 2 min · jiezi

关于源代码:墨菲安全正式发布-murphysec-开源项目让开发者更安全的使用开源代码

4 月 11 日,墨菲平安正式公布了其开源软件平安检测工具——murphysec 。据悉,该我的项目汇合了易用、业余、翻新等劣势,意在帮忙每一位开发者更平安的应用开源代码。 (开源地址:https://github.com/murphysecu...)产品官网:https://www.murphysec.com/ 墨菲平安最早于 2020 年 5 月开始正式启动(过后该项目标初命名为 gokusec,因为该名字曾经被业内公司所用,后改名为墨菲平安)。墨菲平安开创团队成员均来自百度、华为、贝壳的企业平安建设团队,团队成员多为企业平安建设和平安攻防钻研相干工作的十年“老兵”,简直每天都在和代码、破绽打交道,有着丰盛的“安全事件应急响应”、“破绽剖析”解决教训。 全新公布的 murphysec 我的项目通过对我的项目构建或间接对包管理文件进行解析,精确获取到我的项目的依赖信息,以此来满足应用不同语言/包管理工具的我的项目。我的项目的依赖信息会上传到服务端,并最终基于墨菲平安继续保护的破绽知识库来辨认我的项目中存在平安缺点的依赖。 murphysec 我的项目的外围性能包含化验、看病、医治“三位一体”,不仅能帮忙开发者精确的辨认软件中间接依赖和间接依赖的开源组件,还能精确辨认这些开源组件存在的安全漏洞及许可证合规危险,并为开发者提供简略高效的一键缺点修复能力。 性能方面,murphysec 我的项目反对破绽检测、一键修复以及实时检测,可检测 Java(Maven)、JavaScript(npm)、Go 代码中引入的缺点组件,不仅有清晰的修复计划,还能够通过此性能疾速修复,即便代码的依赖发生变化导致了平安问题也不必放心,插件会及时给您揭示进行解决。 语言方面,murphysec 我的项目临时仅反对 Java、JavaScript、Golang 、Python 语言我的项目的检测。后续,墨菲平安也会逐步反对其余的开发语言,敬请期待。 目前,murphysec 我的项目可实用于如 GitLab 代码库检测工具、Jenkins 集成平安检测能力等更多场景。 近年来,随着开源技术的一直倒退利用,软件供应链攻打问题威逼日趋严重。面临后疫情时代的寰球科技翻新倒退新格局,软件供应链平安危险话题逐步成为寰球关注的焦点。 墨菲平安团队此次公布的全新 murphysec 我的项目,也正是在这个大背景下开始应运而生的。 置信大家都还记得产生在去年 12 月的 Log4j2 破绽事件,过后间接引爆寰球科技圈触动,业界也纷纷开始器重对于开源软件及生态平安治理相干措施。 该事件之后的往年3月份,墨菲平安实验室也间断2天对Spark&Hadoop RCE破绽及 Spring Cloud 的表达式注入破绽做了寰球首发预警,与此同时,蚂蚁平安研究员对Spring 框架近程命令执行破绽进行发现并预警。 这些都要得益于基于墨菲平安开源检测工具而开发的 IDE 插件 ——IDE 检测插件,它可帮忙开发者在 IDE 中即可检测代码依赖的平安问题,轻松辨认代码中应用了哪些存在平安缺点的开源组件,通过精确的修复计划和一键修复性能,疾速解决平安问题。 (插件官网地址:https://plugins.jetbrains.com...) murphysec 我的项目:具体装置步骤如下: 拜访 GitHub Releases 页面下载最新版本的墨菲平安 CLI,或执行以下相干命令:在 Linux 上装置wget -q https://s.murphysec.com/insta... -O - | /bin/bash在 OSX 上装置curl -fsSL https://s.murphysec.com/insta... | /bin/bash在 WINDOWS 上装置powershell -Command "iwr -useb https://s.murphysec.com/insta... | iex"应用: ...

April 11, 2022 · 1 min · jiezi

关于源代码:源码泄露危机阿里云字节等大厂服务器疑似被海外黑客组织入侵源代码被出售

11 月 11日,海内黑客组织 “AgainstTheWest” (简称ATW)在 raidforums 论坛放猛料,声称他们窃取了中国服务器的源码,并疯狂将其泄露进去打包售卖。据悉,其攻打指标疑似已波及到国内阿里、腾讯及字节等科技“大厂”。 该音讯传入国内后,一时间引发科技圈“触动”。只管尚不得悉此次泄露数据和源代码事件的真实性,但对于该事件的探讨曾经开始发酵。 11月12日,ATW 持续在 raidforums 论坛发文声称他们入侵了阿里云的服务器并窃取了大量源码,窃取的源码以 5000 美元的价格打包售卖,领取形式为比特币或门罗币。 该 ATW 人士在论坛的发文中提到,他们透露了一些用于腾讯开发和测试平台的 SRC,并附上了当天透露的 SRC: 他们还扬言称,到目前为止曾经胜利地对中国许多公司施行了供应链攻打。同时示意,当初中国还没有对此事置评,将来还将持续透露更多 SRC。 据理解,该 raidforums 论坛发帖颁布材料的形式分为交易制和积分查看制。前者,卖家报价寻找心动买家,胜利交易之前买家无奈预览材料内容;后者是用户可通过花 8 点积分(人民币 29.234 元)来查看帖子附带的材料。 据相干报道,目前该 ATW 组织正在发售的疑似阿里云局部源代码如下图: 对于此次入侵事件,出名云平安服务商 Lace Work 的 云平安研究员也在其推特账号上发文对此事示意关注。推文中,Lace Work 别离附上了此次 ATW 组织对于入侵阿里云和腾讯的申明截图: 有报道显示,或者是因为该事件泄露材料的真伪临时无奈查明,因而以后 ATW 挂在交易制板块的材料一份都没卖出去,一些买家想要 ATW 颁布更多材料的细节信息,但未失去其回应。 而一些曾经花了积分查看帖子中附带材料的用户则大呼 ATW 这是在骗钱,因为这些所谓“泄露文件”基本就不是阿里云的源代码! 据相干信息显示,截止11月15日, ATW 组织入侵的国内科技企业疑似已波及CN 科技部、阿里云用户数据 、钉钉控制台数据、腾讯温江我的项目、微信用户音讯样本、字节跳动大量源码、中天科技、方正电子、滴普科技、渤海保险有限公司源码。 对于该事件及所谓泄露源代码的真伪,国内大厂们临时未予置评。对于该事件是否属实以及 ATW 组织的下一步动向,本站也会继续关注。入股您对此事有任何认识,欢送在评论区家交换互动。

November 16, 2021 · 1 min · jiezi