CA证书网络受到监控_ca证书ddos攻击

hacker|
142

如何用JAVA实现CA认证?

by fleshwound ()

(注:这是我们的完整设计中的一部分,其它有些部分尚要求保密,希望这个拙文能给做J2EE项目的兄弟们带来点帮助,有任何关于JAVA安全和密码学理论和应用的问题可以来我们的论坛:)

近年来,随着互连网和计算机的普及,电子商务和电子政务成为当今社会生活的重要组成部分,以网上订购和网上在线支付的为主要功能的网店系统(Web Shop System)是目前电子商务的热门技术。

JAVA以它“一次编译,处处运行”的神奇魅力和强大的安全技术支持,很快成为WEB信息系统开发的首选语言,而J2EE就是为了WEB应用开发而诞生的。目前J2EE的应用大部份都是多层结构的, 良好的分层可以带来很多好处,例如可以使得代码结构清晰,方便组件复用,可以快速适应应用的新需求。同时,JAVA还提供了强大的安全技术(例如:JCA,HTTPS,JSSA等)。对于电子商务系统而言,系统平台的安全性和效率是其中的核心问题,而这些正好是J2EE及其相关技术的强项。

0 系统中所要使用的API及其特点介绍

该系统中主要使用的技术和特点如下:

(1)EJB :主要是作为J2EE中间层,完成商业逻辑。目前主要有三种类型的EJB: 会话 Bean (Session Bean)、实体Bean (Entity Bean)、消息驱动的Bean(MDB);

(2)JAAS:在J2EE 中用于处理认证和授权服务,进行资源控制;

(3)JSP和Java Servlets:用于J2EE的表示层,生成用户界面;

(4)JDBC:用于数据库(资源层)的连接和与数据库进行交互;

(5)JNDI:Java命名和目录接口,该API实际上是用来访问J2EE的所有资源;

(6)JMS:Java消息传输服务,配合MDB使用。

1 Session的安全问题与解决方案

在项目中,保存Session一般有两种方法,一是分别放在客户端,一是集中放在服务器端。在客户端保存Session是指将Session的状态串行化,然后嵌入到返回给客户的HTML页面中。当Session中的信息很少时,这样实现比较容易,另外这种方法还消除了跨越多个服务器复制状态的问题。

但是在客户端保存Session状态时,必须考虑到由此带来的安全问题,因为黑客可能通过嗅探攻击(Sniffer)获取敏感信息。为了不让敏感信息数据暴露,解决的方法是对数据进行加密或者使用HTTPS,采用SSL技术。

如果是要保存大量Session状态的应用,最好的方法是将Session状态统一放在服务器端。当状态被保存在服务器上时,不会有客户端Session管理的大小和类型限制。此外,还避免了由此带来的安全问题,而且也不会遇到由于在每个请求间传送Session状态带来的性能影响,但是对服务器的性能要求比较高。网店系统的安全性要求较高,因此Session还是集中放在中间层服务器端,同时对客户端到服务器端采用SSL连接。

2客户端的缓存安全设计

大部分顾客使用的WEB浏览器将浏览过的页面缓存在磁盘上,这样我们浏览网页的时候不需要重新向服务器发出HTTP请求,对于普通的网页不存在安全问题。但是对于需要保密的WEB应用,会带来安全隐患和泄漏隐私,因此对于客户端缓存,也必须做适当的处理。最好的方法就是禁止使用缓存,但是对于大部分顾客而言,要求在客户端不用缓存是不现实的,因此我们必须在中间层解决该问题,方法是采用Servlet过滤器技术。该技术是Servlet2.3以后才出现的,在J2EE中的应用很广泛。要使用该技术,需要执行以下步骤:

(1) 编写一个Servlet过滤器,实现javax.servlet.Filter接口;

(2) 修改Web.xml文件,使容器知道过滤器在什么时候被调用。

Javax.servlet.Filter主要有3个方法:

(1)init(FilterConfig cfg) :当开始使用 servlet 过滤器服务时,容器调用此方法一次。传送给此方法的 FilterConfig 参数包含 servlet 过滤器的初始化参数;

(2)destroy() :当不再使用 servlet 过滤器服务时,容器调用此方法;

(3)doFilter(ServletRequest req, ServletResponse res, FilterChain chain): 容器为每个映射至此过滤器的 servlet 请求调用此方法,然后才调用该 servlet 本身。传送至此方法的 FilterChain 参数可用来调用过滤器链中的下一个过滤器。当链中的最后一个过滤器调用 chain.doFilter() 方法时,将运行最初请求的 servlet。因此,所有过滤器都应该调用 chain.doFilter() 方法。如果过滤器代码中的附加认证检查导致故障,则不需要将原始 servlet 实例化。在这种情况下,不需要调用 chain.doFilter() 方法,相反,可将其重定向至其它一些错误页面。

如果 servlet 映射至许多 servlet 过滤器,则按照应用程序的部署描述符(web.xml)中的先后出现的次序来调用 servlet 过滤器。这一部分的主要代码如下:

//要引入的类库

import javax.servlet.*;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.security.*;

//设置servlet过滤代码段

public class CacheFilter implements Filter {

protected FilterConfig filterConfig;

private String cachetp;

//初始化

public void init(FilterConfig filterConfig) throws ServletException

{

this.filterConfig = filterConfig;

cachetp=config.getInitParameter("CacheControlType");

if (cachetp==null)

{

throw new ServletException("没有定义Cache控制类型");

}

}

//

public void destroy()

{

this.filterConfig = null;

}

//执行过滤器部分

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

throws IOException, ServletException {

if (response instanceof HttpServletResponse )

{

HttpServletResponse resp=(HttpServletResponse) response;

resp.addHeader("Cache-Control",cachetp);

}

else

{

throw new ServletException("非法相应!");

}

chain.doFilter(request, response);

}

}

以下是在Web.xml中添加的对应的内容

CacheFilter

CacheFilter

Cache filter

CacheControlType

no-store

CacheFilter

/cachecontrol

3视图访问的安全设置

所有用户都必须登陆,只有登陆才可以看到用户的角色和权限相对应的视图。因此一个重要的问题就是如何防止一个视图或者部分的视图被一个未被授权的客户直接访问。

在一些情况下,资源被限制为完全不允许某些用户访问,例如:管理后台就不应该让普通顾客会员访问。有几个方法可以做到这一点。一个方法是加入应用逻辑到处理控制器或者视图的程序中,禁止某些用户访问。另一个方案是设置运行时的系统,对于一些资源,仅允许经由另一个应用资源内部调用。在这种情形,对于这些资源的访问必须被通过另一个表现层的应用资源进行,例如一个servlet控制器。对于这些受限制的资源不允许通过浏览器直接调用。

在J2EE中,可以利用Web容器中内置的安全技术来进行角色访问资源的控制。根据最新版本的servlet和EJB规范,安全限制在web.xml的配置描述文件中描述,我们可以通过配置web.xml来控制角色访问,修改配置描述文件web.xml就可以达到快速修改安全策略的目的。

安全限制允许使用编程的方法根据用户的角色来控制访问。资源可以被某些角色的用户访问,同时禁止其它的角色访问。另外,某个视图的一部分也可以根据用户的角色来限制其访问。如果某些资源完全不允许来自于浏览器的直接访问,那么这些资源可以配置只允许一些特殊的安全角色访问,而这些安全角色不分配给任何一个用户。这样只要不分配这个安全角色,那么以这种方式配置的资源将禁止所有的浏览器直接访问。下面一个例子就是web.xml配置文件的一部分,它定义了一个安全的角色以限制直接的浏览器访问。角色的名字是“vip”,受限制资源的名字是specialgood1.jsp、specialgood2.jsp、specialgood3.jsp和bookinfo.jsp。除非一个用户或者组被分配到“vip”角色,否则这些客户都不可以直接访问这些JSP页面。不过,由于内部的请求并不受这些安全的限制,一个初始时由某servlet控制器处理的请求将会导向到这些受限制的页面,这样它们就可以间接访问这些JSP页面。

<security-constraint>

<web-resource-collection>

<web-resource-name>specialgood </web-resource-name>

<description>special good infomation</description>

<url-pattern>/shop/jsp/a1/specialgood1.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/specialgood2.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/specialgood3.jsp</url-pattern>

<url-pattern>/shop/jsp/a1/bookinfo.jsp</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>vip</role-name>

</auth-constraint>

</security-constraint>

3 各层次间的耦合问题与解决策略

表现层的数据结构,例如HttpServletRequest,应该被限制在表现层上。如果将这些细节放到其它层(主要是业务逻辑层)中,将大大降低了代码的的重用性,令代码变得复杂,并且增加了层间的耦合。解决方法一个常用方法是不让表现层的数据结构和商业层共享,而是拷贝相关的状态到一个更常见的数据结构中再共享。你也可以选择由表现层数据结构中将相关的状态分离出来,作为独立的参数共享。另外在域对象暴露表现层的数据结构,如果将诸如HttpServletRequest的请求处理数据结构和域对象共享,这样做也会增加了应用中两个不同方面的耦合。域对象应该是可重用的组件,如果它们的实现依赖协议或者层相关的细节,它们可重用性就很差,同时维护和调试高耦合的应用更加困难。成熟的解决方案是不通过传送一个HttpServletRequest对象作为一个参数,而是拷贝request对象的状态到一个更为常用的数据结构中,并且将这个对象共享给域对象。你也可以选择由HttpServletRequest对象中将相关的状态分离出来,并且将每一个的状态作为一个独立的参数提供给域对象。

4 EJB的安全设计与控制

EJB的执行过程一般是这样的:(1)客户端通过JNDI检索Home对象的引用;(2)JNDI返回Home对象的引用;(3)请求创建一个新的EJB对象;(4)创建EJB对象;(5)返回EJB对象;(6)调用商务方法;(7)调用Enterprise Bean.引起EJB的安全问题原因主要存在三个方面:

(1)用包嗅探器(Packet Sniffer)获取用户凭证信息并直接调用会话Bean;(2)对实体Bean进行未授权访问;(3)对消息驱动的Bean的无效访问(发布恶意或者虚假的消息).

以上安全问题可导致客户端或者服务端欺骗攻击和DDOS攻击。解决问题(1)的方法是使用JAVA中SSL技术来保护通讯,解决(2)的方法是对于实体Bean全部采用本地接口或者采用JAAS(文献[1]),对于(1)和(2),我们可以同时采取以下措施:让容器完成认证并传输用户凭证信息,另外使用声明性或者程序设计的安全验证角色。对于问题(3),J2EE并没有提供一个很好的方案,我们的解决方案是采用数字签名技术来保证信息来自可信任的源。该方法的结合代码简要说明如下,消息采用JMS传递:

//客户端,要用到消息发送者的私钥进行签名

...

message.setString("userid",userid);

message.setString("useritem",useritem);

message.setInt("usersn",serialnum);//包含一个序列号

message.setString("usercertid",certid);

String signature=getSignature(userid+":"+useritem+":"+serialnum+":"+certid);

//进行签名,其中getSignature为签名函数,要用到消息发送者的私钥进行签名,具体密码学技术可参考文献[2];

message.setString("signature",signature);

sendmessage(message);//发送信息

...

//服务器端

String checkstr=userid+":"+message.getString("useritem")+":"+

message.getInt("usersn")+":"+usercertid;

boolean b_check=checkSignature(checkstr,msg.getString("signature"),

usercertid,userid);

//进行验证,其中checkSignature为验证函数,要用到消息发送者的公钥进行验证,具体密码学技术可参考文献[2];

5 CA中心与证书的生成

前面我们已经提出在客户端要使用HTTPS和SSL,因此要建立一个自己的CA中心来管理分发证书,加强客户端到中间层服务器端通讯的安全性.建立CA中心的第一步是利用JAVA工具包中的Keytool生成一个X509证书,然后将该证书交由权威CA中心Vertsign签名,再将该证书设置为根证书,建立自己的CA.每次有新用户注册交易的时候,都必须签发一个用户独一无二的证书,关键的过程是如何签发证书.签发证书的过程如下:

(1)从中间层CA服务器的密钥库中读取CA的证书:

FileInputStream in=new FileInputStream(ShopCAstorename);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,storepass);

java.security.cert.Certificate c1=ks.getCertificate(alias);

(2)获得CA的私钥:

PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass);

(3)从CA的证书中提取签发者信息:

byte[] encod1=c1.getEncoded();

X509CertImpl shopcimp1=new X509CertImpl(encod1);

X509CertInfo shopcinfo1=(X509CertInfo)shopcimp1.get(X509CertImpl.NAME+

"."+X509CertImpl.INFO);

X500Name issuer=(X500Name)shopcinfo1.get(X509CertInfo.SUBJECT+

"."+CertificateIssuerName.DN_NAME);

(4)获取待签发的证书相关信息,与(3)类似;

(5)设置新证书的有效期、序列号、签发者和签名算法:

//设置新证书有效期为1年

Date begindate =new Date();

Date enddate =new Date(begindate.getTime()+3000*24*360*60*1000L); CertificateValidity cv=new CertificateValidity(begindate,enddate);

cinfo2.set(X509CertInfo.VALIDITY,cv);

//设置新证书序列号

int sn=(int)(begindate.getTime()/1000);

CertificateSerialNumber csn=new CertificateSerialNumber(sn);

cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);

//设置新证书签发者

cinfo2.set(X509CertInfo.ISSUER+"."+

CertificateIssuerName.DN_NAME,issuer);

//设置新证书算法

AlgorithmId algorithm =

new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);

cinfo2.set(CertificateAlgorithmId.NAME+

"."+CertificateAlgorithmId.ALGORITHM, algorithm);

(6)创建证书并签发:

// 创建证书

X509CertImpl newcert=new X509CertImpl(cinfo2);

// 签名

newcert.sign(caprk,"MD5WithRSA");

(7)将新证书提供给注册用户,并提示安装,一般的做法是在用户注册成功后系统立即返回一个证书对象给中间层某个Servlet,由其返回给用户。

参考文献

[1]沈耀,陈昊鹏,李新颜.EJB容器中基于JAAS 的安全机制的实现.[J]:计算机应用与软件 2004.9 16~18

[2](美)Jess Garms著,庞南等译. Java安全性编程指南[M].北京:电子工业出版社 2002

[3]

[4] 蔡剑,景楠. Java 网络程序设计:J2EE(含1.4最新功能)[M].北京: 清华大学出版社 2003

[5](美)John Bell Tony Loton. Java Servlets 2.3编程指南[M].北京: 电子工业出版社 2002

[6](美)Joseph J.Bambara等著,刘堃等译. J2EE技术内幕[M].北京:机械工业出版社 2002

[7](美)Li Gong著.JAVA 2平台安全技术——结构、API设计和实现[M].北京: 机械工业出版社 2000

[8](英)Danny Ayers等著,曾国平等译. Java服务器高级编程[M].北京:机械工业出版社 2005

[9]

[10]

https可以过滤一部分DDoS攻击吗

首先你要了解什么是https,我给你一段解释:

HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

网站实现Https访问能有效避免流量劫持,但前提是必须用受信任SSL证书。不同于简单的Http代理,HTTPS 服务需要权威CA机构(如 沃通CA )颁发的SSL证书才算有效。自签证书浏览器不认,而且会给予严重的警告提示。而遇到“此网站安全证书存在问题”的警告时,大多用户不明白是什么情况,就点了继续,导致允许了不发份子的伪证书,不受信任的HTTPS 流量因此遭到劫持。

但是,https并不能防DDOS攻击,DDOS攻击是:

分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。

说白了,DDOS就是流量型的攻击,我再业举一个类比,让你更形象的知道DDOS攻击是什么:

某饭店可以容纳100人同时就餐,某日有个商家恶意竞争,雇佣了200人来这个饭店坐着不吃不喝,导致饭店满满当当无法正常营业。(DDOS攻击成功)

老板当即大怒,派人把不吃不喝影响正常营业的人全都轰了出去,且不再让他们进来捣乱,饭店恢复了正常营业。(添加规则和黑名单进行DDOS防御,防御成功)

主动攻击的商家心存不满,这次请了五千人逐批次来捣乱,导致该饭店再次无法正常营业。(增加DDOS流量,改变攻击方式)

饭店把那些捣乱的人轰出去只后,另一批接踵而来。此时老板将饭店营业规模扩大,该饭店可同时容纳1万人就餐,5000人同时来捣乱饭店营业也不会受到影响。(增加硬防与其抗衡)

怎么防御DDOS攻击

1、增加带宽。不现实,成本太高;

2、使用高防服务器,很好解决。如果没有使用高防服务器,请看第3点;

3、接入加速乐CDN,隐藏你的服务器真实IP,然后使用抗D宝,抵御DDOS攻击。

以上方法可以解决你的疑问和DDOS攻击哦!

关于抵御DDoS攻击的必要步骤你了解多少?

一、确保您的站点位于单独的IP地址上

幸运的是,如果您使用一些产品,如果香港的DDoS防御和任何附加的独立包装产品都具有自主知识产权的主机产品,并且不需要购买IP地址,还可以在独立的IP主机共享中获得免费SSL证书,并且核心安装被转移到您的网站。如果您从另一个供应商托管您的网站,请确保使用您的托管计划提供专用的独立IP。在大多数情况下,共享虚拟主机默认不提供独立IP,所以您应该升级到VPS、云DDoS防御或独立DDoS防御。

获得单独的IP地址后,需要购买SSL证书。这是你的网站识别表。SSL证书是安装在香港DDoS防御系统上的一组数字和字符。当用户通过HTTPS地址访问您的网站时,系统将验证您的密码,以确保您的网站符合要求。该证书用于对安装证书内外的DDoS防御的所有数据进行加密。必须从作为证书颁发机构(CA)的受信任提供程序购买此SSL证书。将证书密码的副本保存在数据库中,并交叉引用传入的web流量,以确保该web地址连接到正确的DDoS防御。

二、申请SSL证书

首先必须在香港DDoS防御系统上生成证书请求文件(CSR),使用公钥生成私钥。您可以通过在Apache中输入相关的代码命令来生成自己的CSR。然后,您应该选择可信的在线SSL证书应用服务网站,并根据您网站的需要选择相应的证书。申请证书时请提交企业社会责任文件。应用程序成功完成后,您需要下载证书(CRT)。如果证书是文本格式,则必须将其转换为CRT文件。同时,你应该检查下载的密钥。begin和engcerticate密钥的两侧有5''。还要确保键中没有多余的空格或空行。

三、安装证书

在DDoS防御系统上安装证书是也是较好的一步。通常,如果您安装了控制面板(如cPanel/pagoda/DirectAdmin)、设置了网站并验证了域名,则可以按照控制面板中指定的步骤快速完成安装。在安装SSL证书时,安装Windows和Linux系统的香港DDoS防御略有不同。Apache DDoS Defense必须在安装目录中创建cert目录,将所有下载的SSL文件复制到cert目录,然后修改conf配置文件。Windows DDoS防御必须从iisddos防御获取并绑定SSL证书。

四、将站点配置为使用HTTPS

在安装了香港DDoS防御的SSL证书后,请等待网站更新,并使用http://访问网站。恭喜您成功加载网站。您已成功安装SSL证书并启用了HTTPS。然而,第一步是确保访问者能够访问安全的网站。必须将用户从HTTP重定向到相关页面上的HTTPS,才能提交。您可能还需要更改这些页面的链接,以查看它们是否是HTTPS而不是http。如果您希望访问特定页面的人被重定向到HTTPS而不是HTTP,尽量在页面顶部添加相关代码,将其强制用于DDoS防御。或者,您可以使用。强制重定向的Htaccess文件。

公有链的安全主要由什么等方式负责维护?

公有链:是指全世界任何人都可以随时进入到系统中读取数据、发送可确认交易、竞争记账的区块链。例如:比特币、以太坊。

私有链:是指其写入权限由某个组织和机构控制的区块链,参与节点的资格会被严格限制。

联盟链:是指有若干个机构共同参与管理的区块链,每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。

联盟链是一种将区块链技术应用于企业的相对较新的方式。公有链向所有人都开放,而私有链通常只为一个企业提供服务,联盟链相对公链来说有更多限制,通常为多个企业之间的共同协作提供服务。

联盟链与公有链的不同之处在于,它是需要获得事先许可的。因此并不是所有拥有互联网连接的任何人都可以访问联盟区块链的。联盟链也可以描述为半去中心化的,对联盟链的控制权不授予单个实体,而是多个组织或个人。

对于联盟链,共识过程可能与公有链不同。联盟链的共识参与者可能是网络上的一组预先批准的节点,而不是任何人都可以参与该过程。联盟链允许对网络进行更大程度的控制。

那说到联盟链的优点:

首先,联盟链受一个特定群体的完全控制,但并不是垄断。当每个成员都同意时,这种控制可以建立自己的规则。

其次,具有更大的隐私性,因为来验证区块的信息不会向公众公开,只有联盟成员可以进行处理这些信息。它为平台客户创造了更大的信任度和信心。

最后,与公共区块链相比,联盟链没有交易费用,更灵活一些。公共区块链中大量的验证器导致同步和相互协议的麻烦。通常这种分歧会导致分叉,但联盟链不会出现这种状况。

联盟链技术可以用来优化大多数传统信息化系统的业务流程,特别适用于没有强力中心、多方协作、风险可控的业务场景。联盟链的共享账本机制可以极大降低该类场景下的对账成本、提高数据获取效率、增加容错能力、巩固信任基础、以及避免恶意造假。

随着区块链技术的不断发展,越来越多的机构与企业开始加大对区块链的研究与应用。相比公链而言,联盟链具有更好的落地性,受到了许多企业与政府的支持。

联盟链可以理解为是为了满足特定行业需求,内部机构建立起来的一种分布式账本。这个账本对内部机构是公开透明的,但如果有相关业务需求,对该账本的数据进行修改,则还是是需要智能合约的加入。

智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

总体来说,目前联盟链智能合约的主流架构是:系统合约 + 业务合约。

系统合约:在节点启动前配置完成,一般用于系统管理(如BCOS的预编译合约(权限管理、命名管理等),由项目方编写,安全性较高。

业务合约:根据实际业务编写而成,需要部署,类似公链智能合约,由一般内部机构参与方编写,需遵守一定的要求,安全性一般。

联盟链合约相较于常规公链在规范性、和安全性都有一定的提升,但在以下几个方面的安全性问题,仍可能存在安全风险:

(1)、代码语言安全特性

一种是继续沿用主流公链编程语言,并在其基础上改进(如:BCOS使用的solidity),另一种则是以通用编程语言为基础,指定对应的智能合约模块(如:fabric的Go/Java/Node.js),不管使用什么语言对智能合约进行编程,都存在其对应的语言以及相关合约标准的安全性问题。

(2)、合约执行所带来的安全性问题

整型溢出:不管使用的何种虚拟机执行合约,各类整数类型都存在对应的存储宽度,当试图保存超过该范围的数据时,有符号数就会发生整数溢出。

堆栈溢出:当定义方法参数和局部变量过多,字节过大,可能使程序出现错误。

拒绝服务攻击:主要涉及到的是执行合约需要消耗资源的联盟链,因资源耗尽而无法完成对应的交易。

(3)、系统机制导致的合约安全问题

这里主要是指多链架构的联盟链:

合约变量的生成如果依赖于不确定因素(如:本节点时间戳)或者某个未在账本中持久化的变量,那么可能会因为各节点该变量的读写集不一样,导致交易验证不通过。

全局变量不会保存在数据库中,而是存储于单个节点。因此,如果此类节点发生故障或重启时,可能会导致该全局变量值不再与其他节点保持一致,影响节点交易。因此,从数据库读取、写入或从合约返回的数据不应依赖于全局状态变量。

在多链结构下进行外部链的合约调用时,可能仅会得到被调用链码函数的返回结果,而不会在外部通道进行任何形式的交易提交。

合约访问外部资源时,可能会暴露合约未预期的安全隐患,影响链码业务逻辑。

(4)、业务安全问题

联盟链的智能合约是为了完成某项业务需求执行某项业务,因此在业务逻辑和业务实现上仍是可能存在安全风险的,如:函数权限失配、输入参数不合理、异常处理不到位。

我们对联盟链安全的建议:

(1)、简化智能合约的设计,做到功能与安全的平衡

(2)、严格执行智能合约代码审计(自评/项目组review/三方审计)

(3)、强化对智能合约开发者的安全培训

(4)、在区块链应用落地上,需要逐步推进,从简单到复杂,在此过程中不断梳理合约与平台相关功能/安全属性

(5)、考虑DevSecOps(Development+Security+Operations)的思想

链平台安全包括:交易安全、共识安全、账户安全、合规性、RPC安全、端点安全、P2P安全等。

黑客攻击联盟链的手法包括:内部威胁、DNS攻击、MSP攻击、51%的攻击等。

以MSP攻击为例:MSP是Fabric联盟链中的成员服务提供商(Membership Service Provider)的简称,是一个提供抽象化成员操作框架的组件,MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。

针对MSP的攻击,一般来说,可能存在如下几个方面:

(1)、内部威胁:a)当前版本的MSP允许单个证书控制,也就是说,如果某个内部人员持有了可以管理MSP的证书,他将可以对Fabric网络进行配置,比如添加或撤消访问权限,向CRL添加身份(本质上是列入黑名单的身份),过于中心化的管理可能导致安全隐患。 b)如果有传感器等物联网设备接入联盟链,其可能传播虚假信息到链上,并且因为传感器自身可能不支持完善的安全防护,可能导致进一步的攻击。

(2)、私钥泄露,节点或者传感器的证书文件一般存储在本地,可能导致私钥泄漏,进而导致女巫攻击、云中间人攻击(Man-in-the-Cloud attack)等

(3)、DNS攻击:当创建新参与者的身份并将其添加到MSP时,在任何情况下都可能发生DNS攻击。向区块链成员创建证书的过程在许多地方都可能发生攻击,例如中间人攻击,缓存中毒,DDOS。攻击者可以将简单的DNS查询转换为更大的有效载荷,从而引起DDoS攻击。与CA攻击类似,这种攻击导致证书篡改和/或窃取,例如某些区块链成员将拥有的权限和访问权限。传感器网络特别容易受到DDOS攻击。智慧城市不仅面临着实施针对DDOS攻击的弱点的传感器网络,而且面临着弱点的伴随的区块链系统的挑战。

(4)、CA攻击:数字证书和身份对于MSP的运行至关重要。Hyperledger Fabric允许用户选择如何运行证书颁发机构并生成加密材料。选项包括Fabric CA,由Hyperledger Fabric,Cryptogen的贡献者构建的过程,以及自己的/第三方CA。这些CA本身的实现都有其自身的缺陷。 Cryptogen在一个集中的位置生成所有私钥,然后由用户将其充分安全地复制到适当的主机和容器中。通过在一个地方提供所有私钥,这有助于私钥泄露攻击。除了实现方面的弱点之外,MSP的整体以及因此区块链的成员资格都在CA上运行,并且具有信任证书有效的能力,并且证书所有者就是他们所说的身份。对知名第三方CA的攻击如果成功执行,则可能会损害MSP的安全性,从而导致伪造的身份。Hyperledger Fabric中CA的另一个弱点是它们在MSP中的实现方式。 MSP至少需要一个根CA,并且可以根据需要支持作为根CA和中间CA。如果根CA证书被攻击,则会影响所有根证书签发的证书。

成都链安已经推出了联盟链安全解决方案,随着联盟链生态的发展,2020年成都链安已配合多省网信办对当地政企事业单位的联盟链系统进行了从链底层到应用层多级安全审计,发现多场景多应用多形态的联盟链系统及其配套系统的漏洞和脆弱点。

并且,成都链安已与蚂蚁区块链开展了合作,作为蚂蚁区块链优选的首批节点加入开放联盟链,我们将发挥安全技术、服务、市场优势,与开放联盟链共拓市场、共建生态、并为生态做好安全保驾护航。

一方面我们的智能合约形式化验证产品VaaS将持续为开放联盟链应用提供『军事级』的安全检测服务,为应用上线前做好安全检测,预防其发生安全和逻辑错误;我们的『鹰眼』安全态势感知系统采用AI+大数据技术,为开放联盟链及其应用提供全面及时的『安全+运营』态势感知、链上合约风险监测、安全预警、报警、防火墙阻断及实时响应处理能力。

另一方面,我们的安全产品已经积累了数十万的客户群体,我们将发挥我们的全球客户资源和市场优势,与开放联盟链共拓市场。

在联盟链平台上,我们能提供全生命周期的整体安全解决方案,成都链安以网络安全、形式化验证、人工智能和大数据分析四大技术为核心,打造了面向区块链全生态安全的『Beosin一站式区块链安全服务平台』。

『Beosin一站式区块链安全服务平台』包含四大核心安全产品和八大明星安全服务,为区块链企业提供安全审计、虚拟资产追溯与AML反洗钱、安全防护、威胁情报、安全咨询和应急等全方位的安全服务与支持,实现区块链系统『研发→运行→监管』全生命周期的安全解决方案。

我们会积极发挥区块链安全头部企业优势,共同构建安全的区块链商业网络,推动区块链产业健康、安全的发展,探索区块链未来的无限可能。

DDOS攻击 是什么

DDOS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,凡是能导致合法用户不能够访问正常网络服务的行为都算是拒绝服务攻击。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。虽然同样是拒绝服务攻击,但是DDOS和DOS还是有所不同,DDOS的攻击策略侧重于通过很多“僵尸主机”(被攻击者入侵过或可间接利用的主机)向受害主机发送大量看似合法的网络包,从而造成网络阻塞或服务器资源耗尽而导致拒绝服务,分布式拒绝服务攻击一旦被实施,攻击网络包就会犹如洪水般涌向受害主机,从而把合法用户的网络包淹没,导致合法用户无法正常访问服务器的网络资源,因此,拒绝服务攻击又被称之为“洪水式攻击”,常见的DDOS攻击手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood等;而DOS则侧重于通过对主机特定漏洞的利用攻击导致网络栈失效、系统崩溃、主机死机而无法提供正常的网络服务功能,从而造成拒绝服务,常见的DOS攻击手段有TearDrop、Land、Jolt、IGMP Nuker、Boink、Smurf、Bonk、OOB等。就这两种拒绝服务攻击而言,危害较大的主要是DDOS攻击,原因是很难防范,至于DOS攻击,通过给主机服务器打补丁或安装防火墙软件就可以很好地防范,后文会详细介绍怎么对付DDOS攻击。

0条大神的评论

发表评论