深入浅出:软件研发或嵌入式开发源代码如何加密?

软件研发或嵌入式研发行业,其核心部分往往就是源代码,如何做好源代码的管理至关重要。根据软件研发或嵌入式研发行业的从业者现状,总结出研发从业人员有以下特点:

1.学历较高,都非常聪明,非常懂电脑。

2.每个研发人员都有能力写程序,甚至可以通过写程序,进行各种数据变形。例如:文件读写(输出日志)、socket通信、内存映射,常驻服务等,对于Web开发者,经由IIS或TomCat等web服务器的代码变形更是轻而易举。

3.研发人员的个性较强,比较难管理

而我们软件研发或嵌入式行业特点要求必须对研发成果—源代码进行安全管理。但是现实的工作必须环境特点为:

1、大家必须有局域网,才能协同工作;

2、需要能访问互联网,方便查找资料;

3、必须通过U口串口网口等端口连接外部设备进行调试。

对于一些企业有的采用物理隔离,有的上虚拟化,有的上文档级加密软件,监控软件基本上都是形同虚设。例如常见的物理隔离,就是网络和外网断开,然后禁止使用U盘(软件或机箱),看上起很美好,但是对于懂电脑的研发人员来说,影响了工作效率,还是无法达到安全。

对于软件禁止U盘的,搞个U盘PE,然后直接从U盘启动绕开操作系统的管控做任何事。

插拔墙上的网线头直连自己的笔记本电脑进行数据传输。

对于不能封U口/串口的嵌入式调试环境更简单,直接可以把数据通过U口串口写出来。

……

另外,对于虚拟化,所有数在服务器端,看上去很完美,但是只要外网可用,外设可用,基本上没什么安全可言。

作为一个软件嵌入式研发公司的信息安全管理者,应该如何呢?

我们先了解一下,嵌入式开发的特性:

(1)连接外设,联网调试

手机品种繁多,不可能做到针对每种设备类型、品牌的兼容;

网口调试时,调试地址不断变更,无法锁定具体调试位置,数据很容易泄密;

数据不能以密文形式烧录至设备,否则设备无法识别,但这样往往最容易造成数据外泄。

(2)开发者水平较高,会各种破解

一个代码开发人员,可以轻松写一个把代码输出到日志或control的程序,类似这种研发场景还有研发设计人员自编socket,内存,管道,com,web解析器发布中转,内存映射,常驻服务等至少30多种。

(3)数据被各种变形,渗透外发

改变文件名称、后缀,压缩起来,跟随项目一起打包,很容易流失。

目前,市场上比较流行几种防泄密手段,均是从外表看来可以满足需求,但终究无法做到真正的防泄密。

1、内外网隔离

将涉密数据存储在公司内网,内网不允许连接互联网,看似数据只能保存在公司里,但任然有很多其他泄密风险,比如外设接口拷贝数据;重装OS时,U盘PE绕开操作系统的管控从WinPE中拷贝数据;外带电脑直连内网中任意一台PC机,数据对拷。

也有人说直接将外设接口全部封掉,用一个铁箱子将电脑机箱锁起来。这样虽然是保障了机箱数据安全,但是不便连接需要外设调试的设备,而且对于开发人员来说,互联网是不可缺少的查资料资源,如果另外配备查资料的电脑,再加上之前的铁箱子成本,也是不小的开销。

2、虚拟化

虚拟化在最近几年越来越热,优点也越来越被人们发觉,比如减少服务器数量、简化服务器部署、提高服务器资源利用率等等。但是将虚拟化与数据安全(防泄密)扯到一起,未免有些牵强。牵强在哪里,简单总结一下,就是通过互联网泄密和外设接口数据传输。而且,虚拟化的软硬成本,是一套加密软件的10倍左右。

虚拟化用于数据防泄密

3、文档透明加密

早在10年前,人们开始关注数据安全这一块时,文档加密的诞生帮助大多数的生产商,发展至今很多人对加密的见解就是:一个文件在公司内网打开正常,拿到外部打开乱码,效果明显直观。

我们也承认此项技术在业界发展至今,技术之成熟与优秀之处。但如今时代已然不同,更多的需求倾向于嵌入式开发、源代码型数据加密,而这就难倒文档级的透明加密,这种抓进程、绑后缀的加密方法终究止步于源代码开发防泄密需求。在众多开发人员面前,轰然倒塌,溃不成军。

我们来简单列举一些文档透明加密在源代码防泄密需求面前的一些不足之处。

1、U口数据线连手机:数据通过U口连接手机泄密。

2、U口数据线连设备:数据通过U口连接设备泄密。

3、串口数据线连设备:数据通过串口连接设备泄密。

4、网口数据线连设备:数据通过网口连接设备泄密。

5、控制台程输出内容保护:研发人员编写控制台程序,把涉密内容输出到控制台上然后另存。

6、日志内容保护:研发人员编写程序把代码等涉密内容保存到日志文件中然后把日志文件拷贝走。

7、内存保护:研发人员编写程序把代码等涉密内容保存制定内存中,然后再通过另一个程序等把内存内容读走。

8、web解析器保护:研发人员编写程序把代码等涉密内容文件修改成Html文本样式,然后通过IIS或tomcat等web解析器发布成网页,然后用浏览器另存成明文拷贝走。

9、管道保护:研发人员编写管道程序把代码等涉密内容传走。

10、网络通信保护:研发人员编写socket通信程序把代码等涉密内容传走。

11、消息保护:研发人员编写发消息程序把涉密内容发走。

12、屏幕截图保护:由于截图插件等很多,只针对QQ进程是远远不够的。

13、开发进程追踪困难:开发软件在调试过程中,有些插件的进程在后台一闪而逝,无法捕捉添加到绑定进程,后期导致整个调试过程出错。

14、坏文件:文件透明加密发展至今无法逾越的沟渠,原理是加密软件在给源文件写密钥时突然断电或者程序崩溃,导致密钥只完成一半。最后计算机无法识别这个文件。

从加密的整个行业来看,最早的是APIhook应用层,发展至文件过滤驱动透明加密,一直到现如今智能手机、平板电脑普及率原来越广,APP开发者越来越多,嵌入式开发也越来越多,文件过滤驱动透明加密已渐渐不能满足开发商们的需求。开发商们需要一款真正能经得起技术员“推敲”的防泄密软件。而随着这种需求的越来越强烈,沙盒加密也开始在大家的视线里出现。

为什么说沙盒加密能满足源代码级别、嵌入式开发的防泄密需求?

2012年,某全球知名通信设备生产销售商,深圳总部的研发人员向沙盒加密提出这类需求。在当初整个加密市场,这一块还是一片空白。沙盒加密商安全专家组讨论研究,给出适合的解决办法。在后几年实施使用中愈加完善,发展至今可以完全解决这一类难题。

什么是沙盒?

沙盒生效时,接管整个操作环境,文件本身在沙盒环境内如何处理、修改、编译、调试都与沙盒无关,沙盒不会去过问这些行为。然而当这些文件想要从系统里拿出时,受到沙盒严格管控,无论是网络出口,还是硬件接口出入,管理员不授权,所有文件均无法带走。

我们把沙盒当做一间房屋,把数据当做进出这个房屋的人。人在房屋里干了什么,变成刘德华还是周杰伦,变成男的或者女的,变成动物还是植物,房屋都不会去管他,房屋真正控制的是进出的“门”!

沙盒管控的就是这个“门”!

沙盒加密的优势在于不改变文件、不改变动作、不影响开发调试结果,不用刻意定义需要加密的文件后缀,不用担心开发者绕过沙盒造成泄密;安全隔离上网,加密与非加密划分两个区域,互不干涉;沙盒在对服务器保护的同时,也不会对服务器文件做加密处理,方便系统管理员存储、备份、运维;沙盒也可以与ERP、OA、PDM等服务器,与SVN、VSS等版本管理工具无缝集成。

沙盒加密用于嵌入式开发有以下几大特点:

(1)沙盒客户端、服务器的数据在沙盒内受管控,未经授权无法被带走;

(2)调试接口受管控,未经授权,任何调试接口都被拒绝;

(3)打开对外调试接口,并对接口进行约束:只能访问固定的IP、只能从固定的端口调试、只能访问固定的Mac地址;

(4)指定需要调试的沙盒客户端节点,对其只打开U口调试权限、只打开网口调试权限、只打开串口调试权限;

(5)指定需要调试的沙盒客户端节点,所有从这台客户端节点接口出去调试的数据,均由沙盒备份至服务器,方便后期审计与追溯;

(6)对放开调试接口的客户端节点进行摄像头监控,以此作为辅助,约束调试人员,保障数据安全。

如下图所示:

沙盒加密用于嵌入式开发示意图

总结:术业有专攻。在图纸和office办公文档加密需求为前提下,沙盒过于庞大笨重,有点小题大做的感觉,用户的体验度也比沙盒加密体验度高。但是对于源代码加密和嵌入式开发需求来说,确实只有沙盒可以满足需求。沙盒加密发展至今也就几年时间,体验度、方便率什么的,也给他们一点发展时间,相信后期会有比较好的改善。

文档透明加密与沙盒加密有本质上的区别,本文只针对“源代码、嵌入式开发源代码加密”话题做探讨,无针对的含义在里面。请相关人员不要对号入座,文章只是就事论事。大家也可以自己去调查研究,去解惑事实的真相。如果有写的不够详细的地方,也欢迎大家补充。

时间: 2024-10-12 02:37:40

深入浅出:软件研发或嵌入式开发源代码如何加密?的相关文章

深入浅出:嵌入式开发行业该怎么挑选加密?

软件研发或嵌入式研发行业,其核心部分往往就是源代码,如何做好源代码的管理至关重要.根据软件研发或嵌入式研发行业的从业者现状,总结出研发从业人员有以下特点: 1.学历较高,都非常聪明,非常懂电脑. 2.每个研发人员都有能力写程序,甚至可以通过写程序,进行各种数据变形.例如:文件读写(输出日志).socket通信.内存映射,常驻服务等,对于Web开发者,经由IIS或TomCat等web服务器的代码变形更是轻而易举. 3.研发人员的个性较强,比较难管理 而我们软件研发或嵌入式行业特点要求必须对研发成果

想学嵌入式开发怎么学?看这份超详细的嵌入式学习路线

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 嵌入式学习的几种线路图 1.嵌入式linux上层应用,包括QT的GUI开发 2.嵌入式linux系统开发 3.嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE.VxWorks等等 Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式. 你可以尝试以下路线: (1) C语言是所有编程语言中的强者,单片机.DSP.

学习嵌入式开发板的Android平台体系结构和源码结构

本文转自迅为论坛资料:http://www.topeetboard.com 推荐学习嵌入式开发板平台:iTOP-4412开发板 下面这张图出自Google官方,展示了Android系统的主要组成部分. 可以看出,Android系统架构由5部 分组成,分别是:Linux Kernel.Android Runtime.Libraries.Application Framework.Applications.其实这部分SDK文档已经帮我们做得很好了,要做的就是拿来主义,然后再加上自己理解.接下来拿起手

嵌入式开发中常见3个的C语言技巧

Hey,大家好!我是CrazyCatJack.今天我来说几个在嵌入式开发中常用的C语言技巧吧.也许你曾经用过,也许你只是见到过但是没有深入理解.那么今天好好补充下吧^_^ 1.指向函数的指针 指针不光能指向变量.字符串.数组,还能够指向函数.在C语言中允许将函数的入口地址赋值给指针.这样就可以通过指针来访问函数.还可以把函数指针当成参数来传递.函数指针可以简化代码,减少修改代码时的工作量.通过接下来的讲解大家会体会到这一点的. /*函数指针简单讲解 *通过指向函数的指 *针调用比较两个数 *大小

计算机三级嵌入式开发技术

一单项选择题 1. 世界上第一台计算机研制成功的年代是( C ) Α.1944年 B.1945年 C.1946年 D.1947年 2. 十进制数235,用二进制表达为( A ) Α.11101011 B.11101010 C.11101001 D.11101110 3. ARM采用定长指令格式,所有指令都是32位,Bit[31:28]为( B ) Α.目标寄存器编码 B.条件执行 C.指令操作符编码 D.永远是0 4. 8080处理器是( C ) Α.32位处理器 B.16位处理器 C.8位处理

嵌入式开发-写在这里作为参照

第一部分:Linux平台搭建与环境熟悉 了解linux系统:区分各种版本的Linux系统,以便于拓展 Linux视野.1.Linux 简介:2.Linux 系统的主要特点:3.Linux 的组成:4.主要的 Linux 版本:5.嵌入式 Linux简介与发展 第二部分虚拟机安装和LINUX系统安装 1.虚拟机安装:2.Linux系统的安装:3.Linux系统的常用软件的安装:4.Linux快速入门5. 熟悉运用 Linux环境下,常用命令的操作与系统设置,如常用的 Shell:掌握基本的 She

源代码安全加密系统对软件开发企业的重要性

关键词:源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统.源代码加密系统. 科技的发展让互联网遍步世界的各各角落,而随着各种信息泄密事件曝光,让信息安全概念在意识里也有了全新的认识,而企业的信息安全更为关乎企业的生存发展. 1.      可以保障企业内部源代码加密数据安全 源代码安全加密系统通过B/S架构应用于企业内部进行安全数据管理,它

第一章- 嵌入式开发概述

嵌入式系统的概念 嵌入式系统在术语上被定义为:以应用为中心.以计算机技术为基础.软件硬件可裁剪.适用于应用系统,对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统.它的特点在于两方面:嵌入.专用. 从20世纪70年代起,微型机以小型.价廉.高速数值计算等特点迅速走向市场,它所具备的智能化水平在工业控制领域发挥了作用,常被组装成各种形状,"嵌入"到一个对象体系中,进行某类智能化的控制.这样一来,计算机便失去了原来的形态与"通用"的功能,为区别于通用计算机系统,将

[转]QT 4.5.2 嵌入式开发平台的搭建

原文 QT 4.5.2 嵌入式开发平台的搭建系统环境:ubuntu 9.04编译环境:crosstool 0.43 安装后生成4.1版本的arm-linux-GCC在配置之前,sudo apt-get install build-essential 来安装基本的开发环境Qtx11(源码安装) 安装准备 建议直接下二进制程序安装.1.安装依赖的库,你也可以不转,再安装出错的时候补上.sudo apt-get install libxrender-dev libxrandr-dev libxcurs