又想入坑了?
大家好,我是轩辕。
很多小伙伴都在微信上问我:轩辕,搞安全开发,需要学什么编程语言呢?
今天就来详细说说这个话题,我打算从安全公司研发的产品这个角度来切入,看看都有哪些产品,以及都用到哪些语言。
安全公司的产品研发,主要是下面这些东西,下面分别来说一下。
WAF(Web网站应用防火墙) 数据库网关 防火墙、IDS、IPS NTA(网络流量分析) SIEM(安全事件分析中心、态势感知、大数据安全分析) EDR(终端设备上的安全软件) DLP(数据泄漏防护) UBA(用户行为分析) 杀毒软件 安全检测沙箱
WAF
WAF全称Web网站应用防火墙,是一种特殊的防火墙,专门用来保护Web应用安全的安全产品,主要防御SQL注入、XSS注入、CSRF、CC攻击之类的网络攻击。
这类产品一般有两个流派。一种是基于底层网络流量来做,一种是基于nginx/openresty这类上层WebServer来做。
基于底层流量分析引擎的来做的,以 C/C++ 为主。
基于nginx/openresty引擎来做的,以C/C++ 和 Lua为主。
数据库网关
和WAF有点类似,但保护的目标不是Web应用,而是数据库。
毕竟,对于绝大多数互联网公司来说,WebServer和数据库是支撑他们业务中最重要的两个角色,所以守护好这两个东西是必须的!
数据库网关,主要负责防御对数据库的攻击,检测高危操作,数据安全备份等。
用到的编程语言以C/C++ 和 Java为主。
现在云计算时代,很多公司的业务都放在了云端,这些云计算厂商相应的也都有推出自己的安全防护服务,WAF、数据库网关、DDOS云盾三大件是标准配置。
杀毒软件
最常见的,普通人最能直接接触的应该就是安全软件了。
安全软件的开发,我之前写过一篇文章:想开发一个安全软件,怎么搞?
主要涉及到的技术有病毒木马分析、驱动开发,使用的编程语言主要是C、C++。
NTA、防火墙、IDS、IPS
NTA就是网路流量分析的简称,IDS是入侵检测系统,IPS是入侵防御系统。
这类东西,主要是基于网络流量的安全检测和防御产品。涉及到网络抓包、抓包分析等东西。
一般来说,这类产品对性能要求特别高,因为通常需要处理非常大的流量数据,10Gbps的万兆网络流量分析是常规操作。
所以,这部分抓包、分析比较底层的引擎基本都是用 C/C++ 来开发。
SIEM
SIEM全称Security Information Event Management
(安全信息事件管理中心),差不多就是很多公司中的大数据安全分析系统、态势感知系统之类的玩意儿。
那些看起来各种高端大气狂拽炫酷的界面,基本上都是这种产品:
这是一个安全分析平台,通过汇集多方(网络流量、日志、威胁情报、沙箱检测等)产生的数据,并对这些数据进行关联分析,然后判断有没有安全风险,产生安全告警。
SIEM,基本上很多公司都有,但真正做得好的不多,想要做好,除了数据源的高价值,对分析算法、算法模型都有非常高的要求,这方面的人才很难找。
这块偏重于业务层的分析工作,涉及各种处理,在我见到的各大公司产品中,主要是Java开发,毕竟Java背后的大数据生态是一大优势,对于数据挖掘,关联分析都是紧密相关的。
EDR
全称终端安全响应系统,是运行在终端设备上的一套软件。
其实跟我们常见的杀毒软件很像,除了具备基础的安全防御功能,保护主机免受攻击,还会将主机上发生的一些事情汇报到SIEM用于安全分析。
EDR和杀毒软件类似,也是用 C/C++ 开发。
UBA
全称用户行为分析,是基于EDR、NTA等产品的产生数据之上,用来分析用户行为的一套系统。
简单来说,这玩意根据收集到的员工的行为(电脑上的操作、上网数据等),可以分析出,这个用户是不是异常,有没有干什么坏事。
比如某个用户工作时间微信相关的IP产生的流量非常多,则很有可能判断这家伙上班经常群聊摸鱼~
这套系统是一套纯后端系统,一般也是使用Java开发。
DLP
全称数据泄漏防护,也是运行在终端设备上的一套软件,当然也有一些不在终端而以网关形式存在。
不同于杀毒软件和EDR,DLP的主要作用是防止主机上的数据泄露。一般用在一些比较重要的单位中,员工电脑上的数据非常重要,用于防止窃密事件发生。
主要涉及的技术是驱动开发技术,流量分析技术,用的编程语言也是C/C++。
安全检测沙箱
病毒木马和Exploit的分析,除了传统的基于特征和规则的静态分析引擎之外,动态分析技术是另一个重要的补充。而动态分析中,则主要是以沙箱分析为代表。
所谓沙箱,就是一个虚拟的执行环境,将待分析的目标丢进去,观察并记录其行为,从而判定其威胁程度。
沙箱用到的技术主要有内核驱动开发、虚拟化技术、后端服务系统。
底层的分析引擎主要是C/C++开发,上层的安全分析主要是Python。
总结
以上就是安全行业常见的一些产品了。
编程语言上面呢,C/C++是主流,尤其是在终端侧的产品上,无一例外是C/C++。
在后端的安全系统方面,涉及到流量分析等对性能要求很高的场景,也一般是C/C++,若涉及数据关联分析,则Java比较多。
除此之外,有一些小型的后端服务也会采用Python进行开发。
基本上,C/C++、Java、Python,就是安全开发领域的三大主流技术栈了。
最后限于见识有限,可能列举的不全面,欢迎大家补充。