精华内容
下载资源
问答
  • 系统安全性和保密设计

    千次阅读 2019-06-19 14:24:59
    国家商用密码定义了一系列算法,我了解到的是SM2、SM3、SM4,因为国家对一些系统安全要求,必须通过支持这三种算法,颁布相应授权证书。国密算法(国家商用密码算法简介)。 SM2是替代RSA的算法,算法流程参考图解...

    这个话题很大,我只是把我经历的或者说知道的,写一写,总总结,我并不是这方面的高手。
    1 安全基础
    1.1 国密算法
    国家商用密码定义了一系列算法,我了解到的是SM2、SM3、SM4,因为国家对一些系统有安全要求,必须通过支持这三种算法,颁布相应授权证书。国密算法(国家商用密码算法简介)
    SM2是替代RSA的算法,算法流程参考图解SM2算法流程(合
    几个算法对比可以参见 国密算法SM1/SM2/SM3/SM4,我并不关心算法的实现,因为我只需要购买加密机就可以了,只要加密机支持这些算法,对接加密机就可以了。
    从下图很容易想到几个问题
    1、根密钥如何保证安全
    应用系统使用的密钥是分散出来的,那么根密钥很容易想到也应该做分散。然后就是根密钥的灌装了。
    2、这个前置与加密机之前的通讯安全如何保障?
    应用系统不直连加密机,那么就需要设计一个前置系统。那么前置系统与机密机之间的安全设计呢?从下图可以看到加密机管理控制台有哪些功能,
    这里面可以想象到加密机的前置系统,与加密机之间的接口通讯,采用了对称了加密,他们在内网,通过设置ip白名单进行授信。
    2
    3、应用系统通过前置与加密机通信?
    前置和加密机也大都会采用对成加密,但是接口报文的加、解密是在交给加密机来处理,所以报文是安全的,而被截获的报文,即使知道了应用与加密机的加密密钥,那么也是密文,还是不知道如何解密。
    1
    1.2 MD5、SHA摘要算法
    摘要算法很厉害,因为他不可逆,计算一个文件是否更改,只要看看他的摘要是否发生变化就可以。我的应用场景主要是在登录的时候使用。第2.3.3章 WEB系统最佳实践属性配置之shiro.properties第2.1.7章 WEB系统最佳实践Spring文件配置之spring-shiro.xml这两篇文章提到我的计算使用的是SHA-1,应用的shiro权限框架,这里稍微带一带。下图的密码流程,很容易就想到几个问题
    1、客户端做MD5值,再调用后台请求之前,MD5做几次呢?
    客户端一定是计算摘要的,是不是选择MD5算法抛开一边。但是一次MD5是可以破解的,比如在线MD5破解,密码通常6位~20位,MD5值是32位,因此再做一次MD5值,就相当难破解了,所以客户端只需要做2次MD5就可以了。
    2、SHA-1安全吗
    2017年2月23日,CWI Amsterdam与Google宣布了一个成功的SHA-1碰撞攻击,我相信有人攻击我的代价和他的收益没那么大,所以可以放心使用了。但是shiro也可以支持sha2.
    3、加盐值是怎么产生的?
    给出8位的长度,随机生成16个字节的加盐值,不容易猜吧。

    byte[] salt = DigestsUtil.generateSalt(saltSize);
    record.setSalt(EncodesUtil.encodeHex(salt));
    

    4、多少次迭代合适呢?
    网上大多数采用的是1024,虽然我不知道为什么,应该够用了。
    5、保存到数据库中的密码安全吗?
    最终存放到数据的密码长度为40位,在数据库中是无法猜到用户的账号密码的,内贼是可以防住了。可是运维的权限呢,如果运维更改了账号和密码,临时登录进去,再改回来。这就需要数据库的审计功能了。
    2
    1.3 数字签名
    数字签名是保障信息的不可抵赖性。现在的开放接口大多提供一个appId和appKey给到接入方,可以看看蚂蚁金赋开放平台的做法,照着做就是了。实际应用,大多会砍一砍。
    从下面可以思考几个问题,既然是数字签名,那么其实算法是公开的,那么问题就在于如何让appKey保密。
    1、appKey存放到哪里呢
    很多时候appKey写到了后台配置文件中,如果人员离职,这个appKey就带走了,不过还好大多数开放平台,appKey都可以更新,appId是不变的。
    2、前端后端分离的appKey暴露了怎么办?
    比如使用springboot+vue做前后端分离或者js访问开放平台的,有些人把appKey写到了前端,直接暴露有人觉得很危险,于是想到了,将appKey做分散,或者js做了混淆,只是增加了难度,而那些做爬虫的人,才不关心你怎么封装的,直接抓包看请求,这就需要用到了数字证书了。
    1
    从下图可以看到密码传输到终端用户,为什么很多企业用户花钱需要手机短信把,因为解决了密码传输的问题。
    1
    appId作为参数传到后台

    private <T extends AlipayResponse> RequestParametersHolder getRequestHolderWithSign(BatchAlipayRequest request) throws AlipayApiException {
    
           List<AlipayRequestWrapper> requestList = request.getRequestList();
           //校验接口列表非空
           if (requestList == null || requestList.isEmpty()) {
               throw new AlipayApiException("40", "client-error:api request list is empty");
           }
    
           RequestParametersHolder requestHolder = new RequestParametersHolder();
    
           //添加协议必须参数
           AlipayHashMap protocalMustParams = new AlipayHashMap();
           protocalMustParams.put(AlipayConstants.METHOD, request.getApiMethodName());
           protocalMustParams.put(AlipayConstants.APP_ID, this.appId);
           protocalMustParams.put(AlipayConstants.SIGN_TYPE, this.signType);
           protocalMustParams.put(AlipayConstants.CHARSET, charset);
           protocalMustParams.put(AlipayConstants.VERSION, request.getApiVersion());
    
           if (request.isNeedEncrypt()) {
               protocalMustParams.put(AlipayConstants.ENCRYPT_TYPE, this.encryptType);
           }
    
           //添加协议可选参数
           AlipayHashMap protocalOptParams = new AlipayHashMap();
           protocalOptParams.put(AlipayConstants.FORMAT, format);
           protocalOptParams.put(AlipayConstants.ALIPAY_SDK, AlipayConstants.SDK_VERSION);
           requestHolder.setProtocalOptParams(protocalOptParams);
    
           Long timestamp = System.currentTimeMillis();
           DateFormat df = new SimpleDateFormat(AlipayConstants.DATE_TIME_FORMAT);
           df.setTimeZone(TimeZone.getTimeZone(AlipayConstants.DATE_TIMEZONE));
           protocalMustParams.put(AlipayConstants.TIMESTAMP, df.format(new Date(timestamp)));
           requestHolder.setProtocalMustParams(protocalMustParams);
    
           //设置业务参数
           AlipayHashMap appParams = new AlipayHashMap();
    
           //构造请求主题
           StringBuilder requestBody = new StringBuilder();
           // 组装每个API的请求参数
           for (int index = 0; index < requestList.size(); index++) {
               AlipayRequestWrapper alipayRequestWrapper = requestList.get(index);
               AlipayRequest alipayRequest = alipayRequestWrapper.getAlipayRequest();
               Map<String, Object> apiParams = alipayRequest.getTextParams();
               apiParams.put(AlipayConstants.METHOD, alipayRequest.getApiMethodName());
               apiParams.put(AlipayConstants.APP_AUTH_TOKEN, alipayRequestWrapper.getAppAuthToken());
               apiParams.put(AlipayConstants.ACCESS_TOKEN, alipayRequestWrapper.getAccessToken());
               apiParams.put(AlipayConstants.PROD_CODE, alipayRequest.getProdCode());
               apiParams.put(AlipayConstants.NOTIFY_URL, alipayRequest.getNotifyUrl());
               apiParams.put(AlipayConstants.RETURN_URL, alipayRequest.getReturnUrl());
               apiParams.put(AlipayConstants.TERMINAL_INFO, alipayRequest.getTerminalInfo());
               apiParams.put(AlipayConstants.TERMINAL_TYPE, alipayRequest.getTerminalType());
               apiParams.put(AlipayConstants.BATCH_REQUEST_ID, String.valueOf(index));
    
               // 仅当API包含biz_content参数且值为空时,序列化bizModel填充bizContent
               try {
                   if (alipayRequest.getClass().getMethod("getBizContent") != null
                       && StringUtils.isEmpty(appParams.get(AlipayConstants.BIZ_CONTENT_KEY))
                       && alipayRequest.getBizModel() != null) {
                       apiParams.put(AlipayConstants.BIZ_CONTENT_KEY,
                           new JSONWriter().write(alipayRequest.getBizModel(), true));
                   }
               } catch (NoSuchMethodException e) {
                   // 找不到getBizContent则什么都不做
               } catch (SecurityException e) {
                   AlipayLogger.logBizError(e);
               }
               requestBody.append(new JSONWriter().write(apiParams, false));
               if (index != requestList.size() - 1) {
                   requestBody.append(BATCH_API_DEFAULT_SPLIT);
               }
           }
           appParams.put(AlipayConstants.BIZ_CONTENT_KEY, requestBody.toString());
    
           // 只有新接口和设置密钥才能支持加密
           if (request.isNeedEncrypt()) {
    
               if (StringUtils.isEmpty(appParams.get(AlipayConstants.BIZ_CONTENT_KEY))) {
    
                   throw new AlipayApiException("当前API不支持加密请求");
               }
    
               // 需要加密必须设置密钥和加密算法
               if (StringUtils.isEmpty(this.encryptType) || getEncryptor() == null) {
    
                   throw new AlipayApiException("API请求要求加密,则必须设置密钥类型和加密器");
               }
    
               String encryptContent = getEncryptor().encrypt(
                   appParams.get(AlipayConstants.BIZ_CONTENT_KEY), this.encryptType, this.charset);
    
               appParams.put(AlipayConstants.BIZ_CONTENT_KEY, encryptContent);
           }
    
           requestHolder.setApplicationParams(appParams);
    
           if (!StringUtils.isEmpty(this.signType)) {
    
               String signContent = AlipaySignature.getSignatureContent(requestHolder);
               protocalMustParams.put(AlipayConstants.SIGN,
                   getSigner().sign(signContent, this.signType, charset));
    
           } else {
               protocalMustParams.put(AlipayConstants.SIGN, "");
           }
           return requestHolder;
       }
    

    AlipaySignature这个类可以看到参数根据字母的顺序进行排序

    public static String getSignContent(Map<String, String> sortedParams) {
           StringBuffer content = new StringBuffer();
           List<String> keys = new ArrayList<String>(sortedParams.keySet());
           Collections.sort(keys);
           int index = 0;
           for (int i = 0; i < keys.size(); i++) {
               String key = keys.get(i);
               String value = sortedParams.get(key);
               if (StringUtils.areNotEmpty(key, value)) {
                   content.append((index == 0 ? "" : "&") + key + "=" + value);
                   index++;
               }
           }
           return content.toString();
       }
    

    DefaultSigner中包含了签名的方法

    public String sign(String sourceContent, String signType, String charset) {
           String sign = null;
           try {
               sign = AlipaySignature.rsaSign(sourceContent, this.privateKey, charset, signType);
           } catch (AlipayApiException e) {
               throw new RuntimeException(e);
           }
           return sign;
       }
    

    1.4 数字证书
    私钥加密,公钥解密,这个大家都很容理解,自己写的证书,浏览器是不识别的,因为没有授权。很容易理解,你自己颁布的证书,只有你自己可以认,虽然也是对称的,但是并不是CA机构所认可。数字证书解决通讯安全的问题,也就是说抓包是被加密的。但是它并不能解决源头授信的问题。
    下图是参考一个spring-cloud项目,生成公私钥对,以及公私钥对存储的流程。
    java学习-AES加解密之AES-128-CBC算法是对称算法,这里可自行指定对称算法。按照下图的流程,公私钥的存储周期,可以通过redis的销毁机制来控制。这里可以思考几个问题
    1、私钥存到密钥的加密因子在哪里?
    这个是固定的,很多人也都会想到写到配置文件中。
    2、对离职人员的防范
    哔哩哔哩源码的泄露是来自内部员工,史上最大账号密码数据库泄露,41GB数据文件出现在暗网,这些案例可以看到,基本出问题来自内部。采用下图的方式,是可以一定程度上防范。因为公私钥对有生命周期,即使开发人员或者SE知道算法,但是生成过程并不会干预。
    2
    2 访问控制
    2.1 系统之间
    在这里插入图片描述
    2.1.1 每30秒获取允许访问的清单
    既然Eureka作为服务中心,调用者订阅服务即可,不用关心服务提供者是谁,思考一下:
    1 为何获取这个允许放单的清单从哪里来呢?
    ServiceAuthRestInterceptor这段代码可以看出这个配置实际上是从数据库中获取的,这是一个技术业务问题。

    @Override
    @Override
       public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
           HandlerMethod handlerMethod = (HandlerMethod) handler;
           // 配置该注解,说明不进行服务拦截
           CheckClientToken annotation = handlerMethod.getBeanType().getAnnotation(CheckClientToken.class);
           IgnoreClientToken ignoreClientToken = handlerMethod.getMethodAnnotation(IgnoreClientToken.class);
           if (annotation == null) {
               annotation = handlerMethod.getMethodAnnotation(CheckClientToken.class);
           }
           if (annotation == null || ignoreClientToken != null) {
               return super.preHandle(request, response, handler);
           } else {
               String token = request.getHeader(serviceAuthConfig.getTokenHeader());
               try {
                   IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token);
                   String uniqueName = infoFromToken.getUniqueName();
                   for (String client : serviceAuthUtil.getAllowedClient()) {
                       if (client.equals(uniqueName)) {
                           return super.preHandle(request, response, handler);
                       }
                   }
               }catch(ClientTokenException ex){
                   response.setStatus(HttpStatus.FORBIDDEN.value());
                   logger.error(ex.getMessage(),ex);
                   response.setContentType("UTF-8");
                   response.getOutputStream().println(JSON.toJSONString(new BaseResponse(ex.getStatus(), ex.getMessage())));
                   return false;
               }
               response.setStatus(HttpStatus.FORBIDDEN.value());
               response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
               response.getOutputStream().println(JSON.toJSONString(new BaseResponse(RestCodeConstants.EX_CLIENT_FORBIDDEN_CODE,"Client is Forbidden!")));
               return false;
           }
       }
    

    2 拦截器
    授权系统拦截

    @Configuration("securityWebConfig")
    @Primary
    public class WebConfiguration extends WebMvcConfigurerAdapter {
       @Bean
       GlobalExceptionHandler getGlobalExceptionHandler() {
           return new GlobalExceptionHandler();
       }
    
       @Override
       public void addInterceptors(InterceptorRegistry registry) {
           /*
               增加服务权限烂机器
            */
           registry.addInterceptor(getServiceAuthRestInterceptor()).addPathPatterns("/**");
           /*
               增加用户权限拦截器
            */
           registry.addInterceptor(getUserAuthRestInterceptor()).addPathPatterns("/**");
           super.addInterceptors(registry);
       }
    
       /**
        * 配置服务权限拦截
        * @return
        */
       @Bean
       ServiceAuthRestInterceptor getServiceAuthRestInterceptor() {
           return new ServiceAuthRestInterceptor();
       }
    
       /**
        * 配置用户用户token拦截
        * @return
        */
       @Bean
       UserAuthRestInterceptor getUserAuthRestInterceptor() {
           return new UserAuthRestInterceptor();
       }
    }
    
    
    auth:
     serviceId: ace-auth
     user:
       token-header: Authorization
       limit-expire: 1440 # 一天过期
     client:
       id: your-system
       secret: 123456
       token-header: client-token
    
    @Scheduled(cron = "0/30 * * * * ?")
       public void refreshAllowedClient() {
           log.debug("refresh allowedClient.....");
           BaseResponse resp = serviceAuthFeign.getAllowedClient(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
           if (resp.getStatus() == 200) {
               ObjectRestResponse<List<String>> allowedClient = (ObjectRestResponse<List<String>>) resp;
               this.allowedClient = allowedClient.getData();
           }
       }
    

    2.1.2 access token
    access token的产生使用到了一个第三方jar,通过私钥进行了加密,通过公钥进行解密.
    在系统初始化的时候,公私钥就产生了。
    1 token的产生

    @Configuration
    @Slf4j
    public class AuthServerRunner implements CommandLineRunner {
       @Autowired
       private RedisTemplate<String, String> redisTemplate;
       private static final String REDIS_USER_PRI_KEY = "AG:AUTH:JWT:PRI";
       private static final String REDIS_USER_PUB_KEY = "AG:AUTH:JWT:PUB";
       private static final String REDIS_SERVICE_PRI_KEY = "AG:AUTH:CLIENT:PRI";
       private static final String REDIS_SERVICE_PUB_KEY = "AG:AUTH:CLIENT:PUB";
    
       @Autowired
       private KeyConfiguration keyConfiguration;
    
       @Autowired
       private AECUtil aecUtil;
    
       @Autowired
       private RsaKeyHelper rsaKeyHelper;
    
       @Autowired
       private GatewayRouteBiz gatewayRouteBiz;
    
       @Override
       public void run(String... args) throws Exception {
           boolean flag = false;
           if (redisTemplate.hasKey(REDIS_USER_PRI_KEY)&&redisTemplate.hasKey(REDIS_USER_PUB_KEY)&&redisTemplate.hasKey(REDIS_SERVICE_PRI_KEY)&&redisTemplate.hasKey(REDIS_SERVICE_PUB_KEY)) {
               try {
                   keyConfiguration.setUserPriKey(rsaKeyHelper.toBytes(aecUtil.decrypt(redisTemplate.opsForValue().get(REDIS_USER_PRI_KEY).toString())));
                   keyConfiguration.setUserPubKey(rsaKeyHelper.toBytes(redisTemplate.opsForValue().get(REDIS_USER_PUB_KEY).toString()));
                   keyConfiguration.setServicePriKey(rsaKeyHelper.toBytes(aecUtil.decrypt(redisTemplate.opsForValue().get(REDIS_SERVICE_PRI_KEY).toString())));
                   keyConfiguration.setServicePubKey(rsaKeyHelper.toBytes(redisTemplate.opsForValue().get(REDIS_SERVICE_PUB_KEY).toString()));
               }catch (Exception e){
                   log.error("初始化公钥/密钥异常...",e);
                   flag = true;
               }
           } else {
               flag = true;
           }
           if(flag){
               Map<String, byte[]> keyMap = rsaKeyHelper.generateKey(keyConfiguration.getUserSecret());
               keyConfiguration.setUserPriKey(keyMap.get("pri"));
               keyConfiguration.setUserPubKey(keyMap.get("pub"));
               redisTemplate.opsForValue().set(REDIS_USER_PRI_KEY, aecUtil.encrypt(rsaKeyHelper.toHexString(keyMap.get("pri"))));
               redisTemplate.opsForValue().set(REDIS_USER_PUB_KEY, rsaKeyHelper.toHexString(keyMap.get("pub")));
               keyMap = rsaKeyHelper.generateKey(keyConfiguration.getServiceSecret());
               keyConfiguration.setServicePriKey(keyMap.get("pri"));
               keyConfiguration.setServicePubKey(keyMap.get("pub"));
               redisTemplate.opsForValue().set(REDIS_SERVICE_PRI_KEY, aecUtil.encrypt(rsaKeyHelper.toHexString(keyMap.get("pri"))));
               redisTemplate.opsForValue().set(REDIS_SERVICE_PUB_KEY, rsaKeyHelper.toHexString(keyMap.get("pub")));
           }
           log.info("完成公钥/密钥的初始化...");
           List<GatewayRoute> gatewayRoutes = gatewayRouteBiz.selectListAll();
           redisTemplate.opsForValue().set(RedisKeyConstants.ZUUL_ROUTE_KEY, JSON.toJSONString(gatewayRoutes));
           log.info("完成网关路由的更新...");
       }
    }
    
    public String generateToken(IJWTInfo jwtInfo) throws Exception {
           return jwtHelper.generateToken(jwtInfo, keyConfiguration.getServicePriKey(), expire);
       }
    
    <dependency>
              <groupId>io.jsonwebtoken</groupId>
                 <artifactId>jjwt</artifactId>
              <version>0.7.0</version>
          </dependency>
    
    @Scheduled(cron = "0 0/10 * * * ?")
       public void refreshClientToken() {
           log.debug("refresh client token.....");
           BaseResponse resp = serviceAuthFeign.getAccessToken(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
           if (resp.getStatus() == 200) {
               ObjectRestResponse<String> clientToken = (ObjectRestResponse<String>) resp;
               this.clientToken = clientToken.getData();
           }
       }
    
    
     public IJWTInfo getInfoFromToken(String token) throws Exception {
          try {
              IJWTInfo infoFromToken = jwtHelper.getInfoFromToken(token, serviceAuthConfig.getPubKeyByte());
              Date current = infoFromToken.getExpireTime();
              if(new Date().after(current)){
                  throw new ClientTokenException("Client token expired!");
              }
              return infoFromToken;
          } catch (ExpiredJwtException ex) {
              throw new ClientTokenException("Client token expired!");
          } catch (SignatureException ex) {
              throw new ClientTokenException("Client token signature error!");
          } catch (IllegalArgumentException ex) {
              throw new ClientTokenException("Client token is null or empty!");
          }
      }
    
    

    2 token检查
    这里可以看到拦截器,通过反编译,将带CheckClientToken 注解的请求都拦截下来了。加了注解,就需要验证token。

     @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
          HandlerMethod handlerMethod = (HandlerMethod) handler;
          // 配置该注解,说明不进行服务拦截
          CheckClientToken annotation = handlerMethod.getBeanType().getAnnotation(CheckClientToken.class);
          IgnoreClientToken ignoreClientToken = handlerMethod.getMethodAnnotation(IgnoreClientToken.class);
          if (annotation == null) {
              annotation = handlerMethod.getMethodAnnotation(CheckClientToken.class);
          }
          if (annotation == null || ignoreClientToken != null) {
              return super.preHandle(request, response, handler);
          } else {
              String token = request.getHeader(serviceAuthConfig.getTokenHeader());
              try {
                  IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token);
                  String uniqueName = infoFromToken.getUniqueName();
                  for (String client : serviceAuthUtil.getAllowedClient()) {
                      if (client.equals(uniqueName)) {
                          return super.preHandle(request, response, handler);
                      }
                  }
              }catch(ClientTokenException ex){
                  response.setStatus(HttpStatus.FORBIDDEN.value());
                  logger.error(ex.getMessage(),ex);
                  response.setContentType("UTF-8");
                  response.getOutputStream().println(JSON.toJSONString(new BaseResponse(ex.getStatus(), ex.getMessage())));
                  return false;
              }
              response.setStatus(HttpStatus.FORBIDDEN.value());
              response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
              response.getOutputStream().println(JSON.toJSONString(new BaseResponse(RestCodeConstants.EX_CLIENT_FORBIDDEN_CODE,"Client is Forbidden!")));
              return false;
          }
      }
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(value={ElementType.METHOD,ElementType.TYPE})
    public @interface CheckClientToken {
    }
    

    这里配置那些需要检查客户端token

    @RestController
    @RequestMapping("depart")
    @CheckClientToken
    @CheckUserToken
    public class DepartController extends BaseController<DepartBiz,Depart> {}
    

    token拦截器得到token后,如果token过期,那么就刷新token。那么客户端token是否过期呢,则需要在客户端调用时,设置token过期标志,那么带来的问题是,为什么客户端自己不去刷新token呢?这就是上图中的access token是1个小时刷新一次,那么当在调用的时候,刚好1个小时呢,不就出问题了,所以这里做了一下主动刷新token。

    @Component
    @Log
    public class OkHttpTokenInterceptor implements Interceptor {
    	@Autowired
    	@Lazy
    	private ServiceAuthUtil serviceAuthUtil;
    	@Autowired
    	@Lazy
    	private ServiceAuthConfig serviceAuthConfig;
    	@Autowired
    	@Lazy
    	private UserAuthConfig userAuthConfig;
    
    
    	@Override
    	public Response intercept(Chain chain) throws IOException {
    		Request newRequest = chain.request()
    				.newBuilder()
    				.header(userAuthConfig.getTokenHeader(), BaseContextHandler.getToken())
    				.build();
    		Response response = chain.proceed(newRequest);
    		if(HttpStatus.FORBIDDEN.value()==response.code()){
    			if(response.body().string().contains(String.valueOf(RestCodeConstants.EX_CLIENT_INVALID_CODE))){
    				log.info("Client Token Expire,Retry to request...");
    				serviceAuthUtil.refreshClientToken();
    				newRequest = chain.request()
    						.newBuilder()
    						.header(userAuthConfig.getTokenHeader(), BaseContextHandler.getToken())
    						.header(serviceAuthConfig.getTokenHeader(),serviceAuthUtil.getClientToken())
    						.build();
    				response = chain.proceed(newRequest);
    			}
    		}
    	    return response;
    	}
    
    }
    
    

    2.1.3 获取公钥
    获取公钥由系统自动完成,避免了人为干预。

    @Scheduled(cron = "0 0/1 * * * ?")
        public void refreshUserPubKey(){
            BaseResponse resp = serviceAuthFeign.getUserPublicKey(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
            if (resp.getStatus() == HttpStatus.OK.value()) {
                ObjectRestResponse<byte[]> userResponse = (ObjectRestResponse<byte[]>) resp;
                this.userAuthConfig.setPubKeyByte(userResponse.getData());
            }
        }
        @Scheduled(cron = "0 0/1 * * * ?")
        public void refreshServicePubKey(){
            BaseResponse resp = serviceAuthFeign.getServicePublicKey(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
            if (resp.getStatus() == HttpStatus.OK.value()) {
                ObjectRestResponse<byte[]> userResponse = (ObjectRestResponse<byte[]>) resp;
                this.serviceAuthConfig.setPubKeyByte(userResponse.getData());
            }
        }
    

    3 网络安全
    3.1 VPN
    VPN是企业网在internet等公共网络上的延伸,它通过一个私有的通道在公共网络上创建一个安全的私有连接。
    五分钟搞懂内网和外网之间的通信的原理,先搞明白公网ip和私有ip,大家知道企业宽带很贵,首先因为他有固定的公网ip,很容易理解出他是独享的,因为运营商可以让多个家庭宽带使用同一个公网ip,企业宽带凭什么比民用宽带贵?有没有更便宜的企业宽带,一般企业用户都要求是双线。那么什么是双线呢?
    什么是双线宽带,这里提到了南电信北网通的问题,也就是南北网络互通的问题。
    有了固定ip,就可以解决异地机房通信的问题。先看一下深信服IPSec VPN快速配置文档,通过防火墙的配置,可以实现家庭宽带与企业网络建立虚拟专用网,说白话,就是企业网访问家庭网络,就像访问内网一样。思考几个问题
    1、家庭宽带和家庭宽带是不是没法实现vpn呢?
    没有固定ip,连对方是谁也不清楚,连通讯都建立不起来,又怎么建立转有通道呢,有防火墙也没有用。
    2、企业网络与企业网络之前一定能建立VPN吗?
    例如阿里云与企业网络建立vpn,怎么建立呢?
    3、IPSec协议的工作原理是什么?
    建立网络专用通道,那么很容易理解IPSec是网络层协议,IPSec简介VPN和IPsec协议
    在这里插入图片描述
    3.2 防火墙
    防火墙监控到内网有一台机器一直在请求DNS服务器,分析:
    1、先分析一下HTTP请求流程
    一次完整的HTTP请求过程,域名解析会先搜索浏览器自身的DNS缓存,缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存。
    如果通过程序请求,而不是浏览器,会有DNS缓存吗?再看看这篇文章一文搞懂DNS缓存,浏览器和应用程序以及IPS网络运营商都会对DNS进行缓存。如果后台程序只访问一个地址,为什么会一直发送DNS呢?
    2、为什么总是在请求DNS服务器呢?
    防火墙抓包,全是在请求DNS。什么情况才会导致不断请求DNS呢?如果后台程序有循环bug,一直在请求某个网站,那么是否DNS就请求频繁呢?
    2
    通过zabbix可以监控到网络的请求情况,那么
    1、Incoming指的是什么呢?
    2、Outgoing指的是什么呢?
    3、网络流量算大吗?

    2

    展开全文
  • 作者参加了国家863CIMS重点 应用工厂——济南第一机床厂网络安全保密系统设计和开发工作。本文对该系统设计原理和实现方法进行了详细的阐述。
  • 1)加密和解密、身份认证(数字签名、密钥、口令)、访问控制、安全保密管理(防泄漏、数字水印)、安全协议(SSL、PGP、IPSec)、系统备份与恢复、防治病毒;信息系统安全法规与制度;计算机防病毒制度;保护私有...

    一、本章要点

    1)加密和解密、身份认证(数字签名、密钥、口令)、访问控制、安全保密管理(防泄漏、数字水印)、安全协议(SSL、PGP、IPSec)、系统备份与恢复、防治病毒;信息系统安全法规与制度;计算机防病毒制度;保护私有信息规则。

    2)系统的访问控制技术、数据的完整性、数据与文件的加密、通信的安全性、系统的安全性设计。


    二、信息系统安全体系

    信息安全的5个要素:机密性、完整性、可用性、可控性和可审查性。

    1、安全系统架构

    1)安全服务是指计算机网络提供的安全防护措施,包括认证服务、访问控制、数据机密性服务、数据完整性服务和不可否认服务。

    2)特定的安全机制是用来实施安全服务的机制,包括加密机制、数据签名机制、访问控制机制、数据完整性机制、认证交换机制、流量填充机制、路由控制机制和公证机制。

    3)普遍性的安全机制不是为任何特定的服务而特设的,属于安全管理方面,分为可信功能度、安全标记、事件检测、安全审计跟踪和安全恢复。

    2、安全保护等级

    1)用户自主保护级

    2)系统审计保护级

    3)安全标记保护级

    4)结构化保护级

    5)访问验证保护级

    3、信息安全保障系统

    三种不同架构

    1)MIS+S(Management Information System + Security)系统。初级基本的信息安全保障系统:应用基本不变;硬件和系统软件通用;安全设备基本不带密码。

    2)S-MIS(Security - Management Information System)系统。标准安全信息安全保障系统:建立在PKI/CA标准上,硬件和系统软件通用;PKI/CA安全保障系统必须带密码;应用系统必须根本改变。

    3)S2-MIS(Super Security Management Information System)系统。超安全的信息安全保障系统,不仅使用PKI/CA标准,同时硬件和系统软件都是用专用的安全产品;硬件和系统软件都专用;PKI/CA安全保障系统必须带密码;应用系统必须根本改变;主要的硬件和系统软件需要PKI/CA认证。

    4、可信计算机系统

    TCSEC(Trusted Computer System Evaluation Criteria,可信计算机系统准则)将计算机系统的安全划分为4个等级、7个级别。

    1)D类安全等级。仅D1一个级别,只为文件和用户提供安全保护。本地操作系统或完全没有保护的网络。

    2)C类安全等级。C1和C2。C1系统的可信任运算基础体系通过将用户和数据分开来达到安全的目的,系统内所有文档具有相同的机密性。C2比C1加强了可调的审慎控制,通过登录过程、安全事件和资源隔离来增强这种控制。在连接到网络上时,C2系统的用户分别为各自的行为负责。C2具有C1所有的安全性特征。

    3)B类安全等级。B1、B2和B3。B类系统具有强制性保护功能,意味着如果用户没有与安全等级相连,系统就不会让用户存取对象。B2系统满足B1系统的所有要求,且B2系统的管理员必须使用一个明确的、文档化的安全策略模式作为系统的可信任运算基础体制。B3系统满足B2系统的所有要求,且必须设有安全管理员。

    4)A类安全等级。仅A1一个级别,显著特点是系统的设计者必须按照一个正式的设计规范来分析系统。


    三、数据安全与保密

    1)依次经历如下阶段:手工密码、机械密码、机电密码、电子密码和计算机密码,目前流行的是芯片密码。

    2)当今密码体制建立在三个基本假设之上:随机性假设、计算假设和物理假设。

    1、加密体制

    数据加密即是对明文按照某种加密算法进行处理,而形成的难以理解的密文,即使截获密文也难以解码。

    1)对称密码体制。也称私钥密码体制,加密和解密采用相同密钥。加密速度快,用来加密大批量数据。FDEA、IDEA(128)和DES(56)、三重DES(56*2)。

    2)非对称密码体制。也称公钥密码体制,加密和解密使用不同密钥。分为三类:大整数分解问题类、离散对数问题类和椭圆曲线类。RSA(512)主要用于数字签名。

    2、PKI与数字签名

    1)PKI是CA安全认证体系的基础,由认证中心、证书库、密钥备份及恢复系统、证书作废处理系统及客户端证书处理系统组成。

    2)PKI可实现CA和证书的管理;密钥的备份和恢复;证书、密钥对的自动更换;交叉认证;加密密钥和签名密钥的分隔;支持对数字签名的不可抵赖性;密钥历史的管理等功能。

    3)PKI技术主要借助数字签名技术实现以下功能:

      (1)认证。是指对网络中信息传递的双方进行身份的确认。

      (2)机密性。是指保证信息不泄露给未经授权的用户或供其利用。

      (3)完整性。是指防止信息被未经授权的人篡改,保证真实的信息从真实的信源无失真地传到真实的信宿。

      (4)抗抵赖性。是指保证信息行为人不能够否认自己的行为。

    4)做数字签名能确认以下两点:一是信息是由签名者发送的;二是信息自签发到接收为止,没作任何修改。

    5)数字签名将Hash函数和公钥算法结合起来,提供数据完整性的同时,保证数据的真实性,原理如下:

      (1)发送者首先将原文用Hash函数生成128位的数字摘要。

      (2)发送者用自己的私钥对摘要再加密,形成数字签名,把加密后的数字签名附加在要发送的原文后面。

      (3)发送者将原文和数字签名同时传给对方。

      (4)接收者对收到的信息用Hash函数生成新的摘要,同时用发送者的公开密钥对信息摘要解密。

      (5)将解密后的摘要与新摘要对比,如两者一致,则说明传送过程中信息没有被破坏或篡改。

    3、数字信封

    数字信封中采用了私钥密码体制和公钥密码体制。基本原理是将原文用对称密钥加密传输,而将对称密钥用接收方的公钥加密发送给对方。对方收到电子信封,用自己的私钥解密信封,取出对称密钥解密得原文。详细过程如下:

    1)发送方A将原文信息进行Hash运算,的一Hash值,即数字摘要MD(Message Digest)。

    2)发送方A用自己的私钥PVA,采用非对称RSA算法对数字摘要MD进行加密,得数字签名DS。

    3)发送方A用对称算法DES的对称密钥SK对原文信息、数字签名SD及发放A证书的公钥PBA采用对称算法加密,的加密信息E。

    4)发送方A用接收方B的公钥PBB,采用RSA算法对对称密钥SK进行加密,形成数字信封DE。

    5)发送方A将加密信息E和数字信封DE一起发送给接收方B。

    6)接收方B接收到数字信封DE后,首先用自己的私钥PVB解密数字信封,取出对称密钥SK。

    7)接收方B用对称密钥SK通过DES算法解密加密信息E,还原出原文信息、数字签名SD及发送方A证书的公钥PBA。

    8)接收方B验证数字签名,先用发送方A的公钥解密数字签名的数字摘要MD。

    9)接收方B同时将原文信息用同样的Hash运算,求得一个新的数字摘要MD‘。

    10)接收方将两个数字摘要MD和MD'进行比较,验证原文是否被修改。

    4、PGP(Pretty Good Privacy)

    1)是一个基于RSA公钥加密体系的邮件加密软件。

    2)PGP采用了审慎的密钥管理,是一种RSA和传统加密的杂合算法:一个对称加密算法(IDEA)、一个非对称加密算法(RSA)、一个单向散列算法(MD5)以及一个随机数产生器,还有一个良好的人机工程设计。

    3)PGP承认两种不同格式的证书:PGP证书和X.509证书。

    5、数字水印

    1)数字水印技术是将一些标识信息直接嵌入数字载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到。

    2)数字水印的特定:安全性、隐蔽性、鲁棒性和水印容量。

    3)空域算法、Patchwork算法、变换域算法、压缩域算法、NEC算法和生理模型算法。


    四、计算机网络安全

    1、网络安全设计

    网络安全防范体系在整体设计过程中应遵循以下9项原则:

    1)木桶原则。对信息进行均衡、全面的保护。

    2)整体性原则。要求在网络发生被攻击、破坏事件的情况下,必须尽可能地快速恢复网络信息中心的服务,减少损失。

    3)安全性评价与平衡原则。对任何网络,绝对安全难以达到,也不一定是必要的,所以需要建立合理的实用安全性与用户需求评价及平衡体系。

    4)标准化与一致性原则。

    5)技术与管理相结合原则。

    6)统筹规划,分步实施原则。

    7)等级性原则。指安全层次和安全级别。

    8)动态发展原则。

    9)易操作性原则。

    2、单点登录技术

    单点登录(Single Sign-On,SSO)技术是通过用户的一次性认证登录,即可获得需要访问系统和应用软件的授权,管理员不需要修改或干涉用户登录。

    1)利用b机制。Kerberos v5是业界的标准网络身份认证协议,它的安全机制在于首先对发出请求的用户进行身份验证,确认其是否是合法用户;如果是,再审核该用户是否有权对他所请求的服务或主机进行访问。

    Kerberos系统在分布式计算机环境中得到了广泛应用,具有以下优点:

      (1)安全性高。对用户口令惊醒加密后作为用户的私钥。

      (2)透明性高。用户仅在登录时需要输入口令。

      (3)可扩展性好。为每一个服务提供认证,确保应用安全。

    同时也有缺点:

      (1)服务器不验证用户真实性,假设仅合法用户拥有口令字,易形成代码本攻击。

      (2)AS和TGS是集中式管理,容易形成瓶颈,系统的性能和安全也严重依赖于AS和TGS的性能及安全。

      (3)随用户数增加,密钥管理较复杂。

      (4)不能保护一台计算机或者服务的可用性。

      (5)KDC是一个单一故障点。

      (6)密钥要暂时存放在用户的工作站上,入侵者有可能获得这个密钥。

      (7)如果没有应用加密功能,Kerberos不能保护网络流量。

      (8)当用户改变密码时,Kerberos就改变了密钥,KDC用户数据库需要进行更新。

    2)外壳脚本机制。通过原始认证进入系统外壳,然后外壳就会激发各种专用平台的脚本来激活目标平台的账号以及资源的访问。

    3)一个理想的SSO产品具备以下特征和功能:

      (1)常规特征。支持多种系统、设备和接口。

      (2)终端用户管理灵活性。

      (3)应用管理灵活性。

      (4)移动用户管理。

      (5)加密和认证。

      (6)访问控制。

      (7)可靠性和性能。

    3、无线设备的安全性

    Internet的安全性很难再无线电话和PDA上实施,主要原因是这些设备的CPU、内存、带宽以及存储能力有限,因此具有有限的计算能力。

    1)认证性。对无线电话用户的认证时数字移动电话最重要的安全特征之一。SIM卡存储用户认证信息。

    2)机密性。安全WAP(wireless application protocol,无线应用协议)使用SSL(secure sockets layer,安全套接字)和WTLS(wireless transport layer security,无线传输层安全)来保护有线连接部分和无线连接部分。

    4、防火墙

    防火墙是指建立在内外网络边界上的过滤封锁机制。

    1)网络级防火墙也称为过滤型防火墙。事实上是一种具有特殊功能的路由器,采用报文动态过滤技术,能够动态地检查流过的TCP/IP报文或分组头,根据企业所定义的规则,决定禁止某些报文通过或者允许某些报文通过,允许通过的报文将按照路由表设定的路径进行信息转发。相应的防火墙软件工作在传输层与网络层。

    包过滤方式的优点:不用改动客户端和主机上的应用程序,因为他工作在网络层和传输层,与应用层无关。

    弱点:

      (1)过滤的判别依据知识网络层和传输层的有限信息,各种安全要求不能充分满足。

      (2)过滤规则数目有限,数目的增加导致性能下降。

      (3)缺少上下文关联信息,不能有效过滤UDP、RPC之类的协议。

      (4)缺少审计和报警机制,不能验证用户身份,易受地址欺骗型攻击。

      (5)对安全管理人员素质要求高。

    2)应用级防火墙也称为应用网关型防火墙。目前大多采用代理服务机制,即采用一个网关来管理应用服务,在其上安装对应于每种服务的特殊代码(代理服务程序),在此网关上控制与监督各类应用层服务的网络连接。

    四种类型:双穴主机网关、屏蔽主机网关、屏蔽子网网关和应用代理服务器。

    5、入侵检测

    1)入侵检测是用于检测任何损害或企图损害系统的机密性、完整性或可用性行为的一种网络安全技术。

    2)要解决的两个基本问题:如何充分并可靠地提取描述行为特征的数据;如何根据特征数据,高效并准确地判断行为的性质。

    3)系统构成来说,包括数据源(原始数据)、分析引擎(通过一场检测或误用检测进行分析)和响应(分析结果采用必要和适当的措施)。

    4)入侵检测技术:

      (1)特征检测也称为误用检测,假设入侵者活动可以用一种模式来表示,系统的目标是检测主体活动是否符合这些模式。

      (2)异常检测。假设是入侵者活动异常于正常主体的活动。

    5)入侵检测系统常用的检测方法有:特征检测、统计检测和专家系统。

    6)有两种途径可以用来实时分析庞大的信息量,分别是分割事件流和使用外围网络传感器。


    6、虚拟专用网

    1)虚拟专用网(Virtual Private Network,VPN)提供了一种通过公用网络安全地对企业内部专用网络进行远程访问的连接方式。

    2)实现VPN的关键技术如下:

      (1)安全隧道技术。

      (2)加解密技术。

      (3)密钥管理技术。

      (4)身份认证技术。

      (5)访问控制技术。

    3)隧道技术可分别以2层、3层隧道协议为基础。2层以帧作为数据交换单位。PPTP、L2TP和L2F都属于第2层隧道协议。3层以包作为数据交换单位,IPoverIP及IPSec隧道模式都属于第3层隧道协议。

    7、IPSec

    1)IPSec是一个工业标准网络安全协议,为IP网络通信提供透明的安全服务,保护TCP/IP通信免受窃听和篡改,可以有效抵御网络攻击,同时保持易用性。

    2)IPSec有两个基本目标,分别是保护IP数据包安全和为抵御网络攻击提供防护措施。

    3)IPSec结合密码保护服务、安全协议组合动态密钥管理三者来实现以上目标。

    4)安全模式。IPSec基于一种端对端的安全模式,以数据包为单位加密,主要特征是可以支持IP级所有流量的加密或认证,在IP层提供安全服务。

    5)防范攻击:Sniffer;数据篡改;身份欺骗,盗用口令,应用层攻击;中间人攻击;拒绝服务攻击。

    6)第三层保护的优点:为现有的应用系统和操作系统配置IPSec几乎无须做任何修改;所有使用IP协议进行数据传输的应用系统和服务都可以使用IPSec;IPSec组策略用于配置IPSec安全服务,为不同类别的数据流提供了各种级别的保护。


    五、电子商务安全

    1、SSL

    1)SSL是一个传输层的安全协议,用于在Internet上传送机密文件。

    2)SSL协议由SSL记录协议、SSL握手协议和SSL警报协议组成。

    3)SSL协议主要提供三方面的服务:

      (1)用户和服务器的合法性认证。

      (2)加密数据以隐藏被传送的数据。

      (3)保护数据的完整性。

    2、SET(Secure Electronic Transaction,安全电子交易)

    1)SET协议向基于信用卡进行电子交易的应用提供了实现安全措施的规则。

    2)SET支付系统主要由持卡人、商家、发卡行、收单行、支付网关和认证中心6个部分组成。

    3、SET与SSL的比较

    1)早期SSL没有提供商家身份认证机制,SSL3.0仍不能实现多方认证。SET的安全要求较高,参与交易的成员都必须申请数字证书进行身份识别。

    2)SET协议规范了整个商务活动的流程;SSL只对持卡人与商店端的信息交换进行加密保护。

    3)SSL是基于传输层的通用安全协议,而SET位于应用层,对网络上其他各层也有涉及。

    4)SSL主要和Web应用一起工作,而SET是为信用卡交易提供安全。

    5)SSL协议实现简单,独立于应用层协议,是一个面向连接的协议,只提供客户端和服务器间的双方认证。SET在保留对客户信用卡认证的前提下增加了对商家身份的认证。

    4、认证中心

    1)CA是电子商务体系中的核心环节,是电子交易中信赖的基础。

    2)CA的功能有证书发放、证书更新、证书撤销和证书验证。


    六、安全管理

    1)信息安全管理体系是指通过计划、组织、领导和控制等措施以实现组织信息安全目标的相互关联或相互作用的一组要素,是组织建立信息安全方针和目标并实现这些目标的体系。

    2)这些要素包括信息安全组织机构、信息安全管理体系文件、控制措施、操作过程和程序以及相关资源。

    3)安全管理的实施包括安全策略与指导方针、对信息进行分类和风险管理三个方面。

    5、安全策略

    1)安全策略基于一些安全模型:Bell-LaPadule(BLP)、Biba和Clark-Wilson。

    2)Bell-LaPadule基于机密性的访问模型,对安全状态进行了定义,使用特殊转换函数将系统从一个安全状态转换到另一个安全状态。

    3)Biba基于完整性的访问模型,防止未授权用户对信息的修改。

    4)Clark-Wilson也基于完整性访问模型,阻止未授权用户修改信息;维护内部和外部的一致性;阻止授权用户对信息进行不适当的修改。

    6、安全体系

    1)其措施包括防火墙、入侵检测、病毒和木马扫描、安全扫描、日志审计系统等。

    2)安全审计包括两个方面:采用网络监控与入侵防范系统,识别网络中各种违规操作与攻击行为,即时响应并进行阻断;对信息内容和业务流程的审计,可以防止内部机密或敏感信息的非法泄漏和单位资产的流失。

    3)安全审计功能的6个部分:安全审计自动响应、安全审计数据生成、安全审计分析、安全审计浏览、安全审计事件选择和安全审计时间存储。


    七、计算机操作安全

    1)使用陷阱对威胁做出真实的评估,而没有将个人和组织暴露的危险。

    2)使用陷阱的好处:

      (1)陷阱提供了真实世界的信息,入侵者意识不到陷阱的存在。

      (2)精心设计的陷阱能够安全地提供一些测量手段。

      (3)陷阱能够用于延缓将来的攻击。

    3)一个陷阱的三个组成部分:诱饵、触发机关以及圈套。



    八、系统备份与恢复

    1、业务持续规划

    1)持续性规划的工作:

      (1)建立一个恢复规划的实施所需要的工程组以及相应的支撑基础设施。

      (2)实施对攻击行为以及风险的管理评估,从而识别其是否是恢复规划所需解决的问题。

      (3)实施业务影响分析,用来判定业务的时间急迫性以及确定最大可忍受停工期。

      (4)恢复规划的保存和实施。

      (5)建立并采用一种可实施的测试和维护策略。

    2)主体流程框架由4部分组成:

      (1)灾难恢复规划(Disaster Recovery Planning,DRP)。

      (2)业务恢复规划(Business Resumption Planning,BRP)。

      (3)危机管理规划(Crisis Management Planning,CMP)。

      (4)持续可用性(Continuous Availability,CA)。

    2、灾难恢复规划

    1)是指将信息系统从灾难造成的故障或瘫痪状态恢复到可正常运行状态,并将其支持的业务功能从灾难造成的不正常状态恢复到可接受的状态而设计的活动和流程。

    2)信息系统的危机处理及灾难恢复主要可以分为:

      (1)与日常生产及运行息息相关的关键性系统。

      (2)部分机构的重心系统,采用类似的架构。

      (3)在另一地区设计规模较小但架构相同的系统。

      (4)利用备份工具,包括磁带、磁盘和光盘等。


    展开全文
  • 政务信息网络多层次安全保密系统方案设计+.+.+.
  • 用于保密MIMO SWIPT系统安全波束成形设计
  • 涉密信息系统安全保密建设探讨

    千次阅读 2008-10-17 11:32:42
    摘 要 本文从涉密信息系统安全保密建设规划设计、技术体系以及运行管理等三个方面对涉密信息系统安全保密建设技术要点进行了分析。 关键词 涉密信息系统 安全保密 系统建设 1 引言 当前,随着信息技术的...
    涉密信息系统安全保密建设探讨<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    许正虎  李一峰   

    中国电子科技集团公司第二十八研究所

        本文从涉密信息系统安全保密建设规划设计、技术体系以及运行管理等三个方面对涉密信息系统安全保密建设技术要点进行了分析。

    关键词  涉密信息系统  安全保密  系统建设

    1 引言

    当前,随着信息技术的发展,电子政务、电子商务、企业信息化建设取得了显著成效。同时,涉密单位信息化建设也在逐步开展。随着涉密单位信息系统建设的不断深化,信息安全保密问题日益突出,安全保密建设任务更加紧迫。由于涉密单位的业务特殊性,如何设计并建设一个技术先进、安全高效、可靠可控的涉密信息系统,成为安全保密建设至关重要的问题。

    2 安全保密规划设计要点

    在进行安全保密规划设计时,应准确把握两个要点:一是应掌握国家关于涉密信息系统安全保密方面的有关政策,二是明确安全保密建设内涵。

    .1  准确掌握国家政策

    涉密信息系统涉及国家秘密,关系到国家利益和安全。国家对涉密信息系统建设十分重视,并出台了一系列的政策法规、管理制度和技术标准,用以规范和指导涉密信息系统建设。国家在涉密信息系统建设方面,比较强调信息安全等级保护和安全风险管理。

    实行信息安全等级保护是国家信息安全工作的一项重要举措,有利于重点保护基础信息网络和关系国家安全、经济命脉、社会稳定等方面的重要信息系统。涉密信息系统实行等级划分,有利于国家对涉密信息系统的管理。涉密信息系统等级划分需按照国家关于涉密计算机信息系统等级划分指南,结合本单位实际情况进行涉密信息系统定级。

    风险管理贯穿于涉密信息系统建设整个生命周期。信息安全风险管理体现在信息安全保障体系的技术、组织和管理等方面。尤其是在技术体系方面,需要采用信息安全风险管理的方法加以控制。风险管理依据等级保护的思想和适度安全的原则,平衡成本与效益,合理部署和利用信息安全的信任体系、监控体系和应急处理等重要基础设施,确定合适的安全技术措施,从而确保信息安全保障能力建设的成效。

    .2  明确安全保密建设内涵

    在规划设计涉密信息系统时,除应准确掌握国家政策之外,还应明确安全保密建设内涵。涉密信息系统除了技术先进、实用可靠等特点外,还包涵了安全保密。

    涉密信息系统的安全保密建设包括三方面:一是技术安全体系建设;二是管理安全体系建设;三是运行保障安全体系建设。其中,技术安全体系设计和建设是关键和重点。

    确定涉密信息系统建设内涵,应注重:国家关于涉密信息系统的技术标准和管理要求;单位所属的行业特性及自身的业务特点;投资和建设规模;当前的技术发展趋势及应用成熟度。

    在涉密系统规划设计时,应做到准确领会和把握国家关于涉密信息系统安全保密政策,明确信息系统安全保密建设内涵,把保障国家秘密安全和单位生产和经营信息安全作为涉密信息系统建设的指导思想。按照国家关于涉密信息系统定级指南进行准确定级。在系统具体建设中,尤其是在技术体系建设中,强化风险管理,采取防病毒、***检测、身份认证、主机审计以及防火墙等切实有效的技术防范措施,保证技术体系的建设效果。

    3 技术体系建设要点

    按照信息系统的层次划分,涉密信息系统安全保密建设技术体系包括物理层安全、网络安全、平台安全、应用安全以及用户终端安全等内容。

    .1  物理层安全

    物理层的安全设计应从三个方面考虑:环境安全、设备安全、线路安全。采取的措施包括:机房屏蔽,电源接地,布线隐蔽,传输加密。对于环境安全和设备安全,国家都有相关标准和实施要求,可以按照相关要求具体开展建设。以下重点讨论布线系统安全。

    布线系统处于整个涉密信息系统的最底层,负责涉密信息的传输,该层的安全性要求较高。布线系统除了传输速度有要求外,还要求具有抗干扰性、抗窃听性等。

    单模光纤技术是几种传输介质中技术最先进、传输速度最快、安全保密性最好的一种。从长远考虑,在投资经费允许的情况下,单模光纤是涉密信息系统布线设施的首要选择。选择单模光纤线路作为传播载体,不仅在主干线路做到光纤传输,而且实现单模光纤到桌面。从而,可以杜绝涉密信息因传输而引起的泄露、被干扰、被窃听的安全保密性问题,确保综合布线安全。

    .2  网络安全

    对于网络层安全,不论是安全域划分还是访问控制,都与网络架构设计紧密相关。网络架构设计是网络层设计主要内容,网络架构的合理性直接关系到网络层安全。网络架构设计需要做到:统筹考虑涉密信息系统系统安全等级、网络建设规模、业务安全性需求等;准确划分安全域(边界);网络架构应有利于核心服务信息资源的保护;网络架构应有利于访问控制和应用分类授权管理;网络架构应有利于终端用户的安全管理。

    网络层安全主要涉及网络安全域的合理划分问题,其中最重要的是进行访问控制。网络安全域划分包括物理隔离、逻辑隔离等,访问控制技术包括防火墙技术、身份认证技术、***检测技术等。

    (1) 虚拟局域网(VLAN)技术及逻辑隔离措施逻辑隔离主要是利用VLAN技术将内部网络分成若干个安全级别不同的子网,有效防止某一网段的安全问题在整个网络传播1。因此,对于一个网络,若某网段比另一个网段更受信任,或某网段安全保密性要求更高,就将它们划分在不同的VLAN中,可限制局部网络安全问题对全网造成影响。

    (2) 身份认证技术及访问控制措施

    身份认证技术即公共密钥基础设施(PKI),是由硬件、软件、各种产品、过程、标准和人构成的一体化的结构。PKI可以做到:确认发送方的身份;保证发送方所发信息的机密性;保证发送方所发信息不被篡改;发送方无法否认已发该信息的事实。PKI是一种遵循标准的密钥管理平台,它能够为所有网络应用透明地提供采用加密和数字签名等密码服务所必需的密钥和证书管理2。构建PKI将围绕认证机关(CA)、证书库、密钥备份及恢复系统、证书作废处理系统、客户端证书处理系统等五大系统。

    (3) ***检测技术(IDS)及产品

    IDS通过从计算机网络系统中若干关键节点收集信息并加以分析,监控网络中是否有违反安全策略的行为或者是否存在***行为。它能提供安全审计、监视、***识别和反***等多项功能,并采取相应的行动,如断开网络连接、记录***过程、跟踪***源、紧急告警等,是安全防御体系的一个重要组成部分。

    (4) 防火墙技术及产品

    防火墙是实现网络信息安全的最基本设施,采用包过滤或代理技术使数据有选择的通过,有效监控内部网和外部网之间的任何活动,防止恶意或非法访问,保证内部网络的安全。从网络安全角度上讲,它们属于不同的网络安全域。根据提供信息查询等服务的要求,为了控制对关键服务器的授权访问,应把服务器集中起来划分为一个专门的服务器子网(VLAN),设置防火墙策略来保护对它们的访问。

    基于上述网络层安全设计思路,采用核心服务器区和用户终端区的体系结构,将两个区域进行逻辑隔离,严格保护核心服务器资源。在网络层,将核心服务器群和终端用户群划分在不同的VLAN中,VLAN之间通过交换机进行访问控制。在核心服务器区和用户终端区之间放置防火墙,实现不同安全域之间的安全防范。网络技术体系结构如图1所示。

    该技术体系对终端用户采取严格的实名制。每位终端用户配置一个用于身份认证的USB KEY(一个存放密钥证书的加密设备),USB KEY里存放用户唯一身份信息。在规划安全技术服务器时,考虑网络情况及安全保密需求,将安全技术服务器放在用户终端区的某一VLAN,便于对终端用户进行安全保密管理。

    涉密信息系统网络技术体系结构图

    上述网络技术体系具有如下优点:

    (1) 安全保密防范有效。通过将各类数据库服务器和应用服务器集中地存放于核心服务器区,以便于对核心服务器资源进行集中管理,同时又能有效地将未授权用户拒之门外,确保涉密信息的安全保密。

    (2) 技术体系结构可扩展。身份认证服务器和代理服务器,在整个涉密信息系统中处于关键地位。随着终端用户数量的增加,在实际使用中会产生访问并发瓶颈问题。基于此体系结构的网络模式,可通过增加认证服务器或安全代理服务器数量予以解决。

    (3) 用户使用灵活方便。在该体系结构中,终端用户是通过USB KEY去获取系统认证和代理服务的。终端用户只要拥有合法有效的USB KEY,在任何联网的终端机器上都能访问核心服务器资源,这样即不受用户空间位置的限制,又可以使用户方便使用。

    .  平台安全

    涉密信息系统平台安全包括操作系统安全和数据库安全。服务器包括数据库服务器、应用服务器、Web服务器、代理服务器、Email服务器、防病毒服务器、域服务器等,应采用服务器版本的操作系统。典型的操作系统有:IBM AIXSUN SolarisHP UnixWindows NT ServerWindows2000 ServerWindows2003 Server。网管终端、办公终端可以采用通用图形窗口操作系统,如Windows XP等。

    (1) 操作系统加固

    Windows操作系统平台加固通过修改安全配置、增加安全机制等方法,合理进行安全性加强,包括打补丁、文件系统、帐号管理、网络及服务、注册表、共享、应用软件、审计/日志,其他(包括紧急恢复、数字签名等)。

    Unix操作系统平台加固包括:补丁、文件系统、配置文件、帐号管理、网络及服务、NFS系统、应用软件、审计/日志,其他(包括专用安全软件、加密通信,及数字签名等)。

    (2) 数据库加固

    数据库加固包括:主流数据库系统(包括OracleSQL ServerSybaseMySQLInformix)的补丁、账号管理、口令强度和有效期检查、远程登陆和远程服务、存储过程、审核层次、备份过程、角色和权限审核、并发事件资源限制、访问时间限制、审核跟踪、特洛依***等。

    在平台选择上应考虑:建设规模、投资预算情况、平台安全性、平台稳定性、平台效率、业务应用需求等。在实际建设中,建议选择Unix平台和 Oracle数据库管理系统。

    .4  应用安全

    应用层安全的目标是建立集中的应用程序认证与授权机制,统一管理应用系统用户的合法访问。建立统一的信息访问入口和用户管理机制,实现基于PKI的单点登录功能(SSO)为用户提供极大的方便,也能实现应用系统内容的集中展现,保证应用和数据安全2。应用安全问题包括信息内容保护和信息内容使用管理。

    (1) 信息内容保护

    系统分析设计时,须充分考虑应用和功能的安全性。对应用系统的不同层面,如表现层、业务逻辑层、数据服务层等,采取软件技术安全措施。同时,要考虑不同应用层面和身份认证和代理服务器等交互。

    数据加密技术。通过采用一定的加密算法对信息数据进行加密,可提高信息内容的安全保密性。

    防病毒技术。病毒是系统最常见、威胁最大的安全隐患。对涉密信息系统中关键的服务器,如应用服务器、数据服务器等,应安装网络版防病毒软件客户端,由防病毒服务器进行集中管理。

    (2) 信息内容管理

    采用身份认证技术、单点登录以及授权对各种应用的安全性增强配置服务来保障涉密信息系统在应用层的安全。根据用户身份和现实工作中的角色和职责,确定访问应用资源的权限。应做到对用户接入网络的控制和对信息资源访问和用户权限进行绑定。

    单点登录实现一次登录可以获得多个应用程序的访问能力。在提高系统访问效率和便捷方面扮演重要角色。有助于用户账号和口令管理,减少因口令破解引起的风险。

    门户系统(内部网站)作为企业访问集中入口。用户可通过门户系统访问集成化的各个应用系统。

    (3) 建立数据备份和恢复机制

    建立数据备份和恢复系统,制定备份和恢复策略,系统发生故障后能较短时间恢复应用和数据。

    .5  终端安全

    加强涉密信息系统终端安全建设和管理应该做到如下几点:

    (1) 突出防范重点

    安全保密建设应把终端安全和各个层面自身的安全放在同等重要的位置。在安全管理方面尤其要突出强化终端安全。终端安全的防范重点包括接入网络计算机本身安全及用户操作行为安全。

    (2) 强化内部审计

    对涉密信息系统来说,如果内部审计没有得到重视,会对安全保密造成较大的威胁。强化内部审计不但要进行网络级审计,更重要是对内网里用户进行审计。

    (3) 技术和管理并重

    在终端安全方面,单纯的技术或管理都不能解决终端安全问题,因为终端安全与每个系统用户相联系。通过加强内部安全保密管理以提高终端用户的安全保密意识;通过加强制度建设,规范和约束终端用户的操作行为;通过内部审计软件部署审计规则,对用户终端系统本身和操作行为进行控制和审计,做到状态可监控,过程可跟踪,结果可审计。从而在用户终端层面做到涉密信息系统安全保密。

      运行管理要点

    涉密信息系统安全保密建设完成后,应建立运行管理体系才能使信息系统真正能安全、高效运行,发挥应有的作用。运行管理方面的要点包括组织机构、监控体系及管理制度等三方面。

    .1  组织机构

    按照涉密信息系统安全保密的要求,建立安全保密运行管理领导机构和工作机构。建立涉密信息系统“三员”管理制度,即设立信息系统管理员、系统安全员、系统密钥员,负责系统安全运行维护和管理,为涉密信息系统安全运行提供组织保障。

    .2  监控体系

    监控体系包括监控策略、监控技术措施等。在涉密信息系统运行管理中,需要制定有效的监控策略,采用多种技术措施和管理手段加强系统监控,从而构建有效的监控体系,保障系统安全运行。

    .3  管理制度

    加强涉密信息系统运行维护制度建设,是保障系统的安全运行的关键。制定的运行维护管理制度应包括系统管理员工作职责、系统安全员工作职责、系统密钥员工作职责、涉密信息系统安全管理制度等安全运行维护制度。

     

    参考文献:

    [1] 阙喜戎, 孙悦, . 信息安全原理及应用. 北京:清华大学出版社, 2003.

    [2] 张仕斌, . 网络安全技术. 北京:清华大学出版社, 2004.
    展开全文
  • 系统的安全性设计  要设计一个安全的系统,除了要... 下面以物理安全、防火墙、入侵检测为例讲解系统安全中可能出现的问题及如何采取相应的措施。 1 物理安全问题与设计  物理安全包括物理设备本身是否安全可...

    系统的安全性设计

        要设计一个安全的系统,除了要了解一些前面讲到的常用的保护手段和技术措施外,还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识,这样才能对系统的安全作有针对性的设计和强化,即“知己知彼,百战百胜”。

        下面以物理安全、防火墙、入侵检测为例讲解系统安全中可能出现的问题及如何采取相应的措施。

    1 物理安全问题与设计

       物理安全包括物理设备本身是否安全可靠,还包括设备的位置与环境的安全、限制物理访问、地域因素等几个方面。

        信息系统的所有重要的物理设备、设施都应该放在专门的区域,并尽可能集中,同时严格限制外来人员来访,尽可能地减少未经授权的访问。

        物理安全还要求在设计中注意物理设备的冗余备份,例如,核心设备或部件都应该是热备份系统,具有实时或准实时切换的能力。

        物理安全还要求严格限制对网络信息点、线缆等网络基础设施及其所在地进行物理访问,要想访问必须经过专门的授权。

        物理安全还包括环境方面的因素,在设计之初就要对信息系统中的温度、湿度、灰尘、振动、雷电、电力等方面的参数有明确的要求,要对自然灾害(地震、台风、闪电等)有充分的考虑,还要对电磁泄漏等方面的要求作明确的定义。设计系统时要对这些因素全盘考虑,并采取适当的防护措施或强化手段。例如,机房这种重要的地点,除了所在的建筑物要有防雷系统外,还可以加装一套专用的防雷系统。这样可以保证即使建筑物遭到雷击时,万一建筑物的避雷系统未能充分保护好昂贵的信息系统,那么单独为机房安装的专用避雷系统也能保障机房设备免受损失。
     

    2 防火墙及其在系统安全中的应用

        网络安全隐患主要是由网络的开放性、无边界性、自由性造成的,所以保护网络安全可以首先考虑把被保护的网络从开放的、无边界的、自由的公共网络环境中独立出来,使之成为有管理的、可控制的、安全的内部网络。也只有做到这一点,实现信息网络的通信安全才有可能。

        目前,最基本的网络分隔手段就是防火墙,它也是目前用来实现网络安全的一种主要措施。利用防火墙,可以用来在拒绝未经允许的网络连接、阻止敏感数据的泄漏的同时,保证合法用户的合法网络流量畅通无阻,可以实现内部可信任网络(如企业网)与外部不可信任网络(如 Internet)之间,或是内部不同子网之间的隔离与控制,保证网络系统及网络服务的可用性。

        1.防火墙的基本原理防火墙通常使用的采用包过滤、状态检测、应用网关等几种方式控制网络连接。

        包过滤防火墙是一种简单而有效的安全控制技术,它根据在防火墙中预先定义的规则(允许或禁止与哪些源地址、目的地址、端口号有关的网络连接),对网络层和传输层的数据包进行检查,进而控制数据包的进出。包过滤的优点是对用户透明、传输性能高。但是由于只能在网络层、传输层进行控制,安全控制的方式也只限于源地址、目的地址和端口号这几种,对于应用层的信息无法感知,因而只能进行较为初步的安全控制,对于拥塞攻击、内存覆盖攻击或病毒等高层次的攻击手段,则无能为力。

        状态检测防火墙保持了包过滤防火墙的优点,所以性能比较好,而且对应用是透明的。同时,状态检测防火墙改进了包过滤防火墙仅仅检查进出网络的数据包,不关心数据包状态的缺点,在防火墙的内部建立状态连接表,维护了连接,将进出网络的数据当成一个个的事件来处理。对于每一个网络连接,状态检测根据预先设置的安全规则,允许符合规则的连接通过,并在内存中记录下该连接的相关信息,生成状态表。对该连接的后续数据包,只要符合状态表,就可以通过。这种方式的好处在于:由于不需要对每个数据包进行规则检查,而是对一个连接的后续数据包(通常是大量的数据包)通过散列算法,直接进行状态检查,从而使得性能得到了较大提高。

        与不关心应用层数的前两种方式不同,应用网关防火墙检查所有应用层的信息包,并将检查的内容信息放入决策过程,从而提高网络的安全性。然而,应用网关防火墙是通过打破客户机/服务器模式实现的。每个客户机/服务器通信需要两个连接:一个是从客户端到防火墙,另一个是从防火墙到服务器。另外,每个网关需要一个不同的应用进程,或一个后台运行的服务程序,对每个新的应用必须添加针对此应用的服务程序,否则不能使用该服务。所以,应用网关防火墙使用起来比较麻烦,而且通用性比较差。

        2.防火墙的优点在系统中使用防火墙,对于系统的安全有很多的优点:

        (1)可以隔离网络,限制安全问题的扩散。防火墙可以隔离不同的网络,或者用来隔离网络中的某一个网段,这样就能够有效地控制这个网段或网络中的问题在不同的网络中传播,从而限制安全问题的扩散。

        (2)通过防火墙可以对网络中的安全进行集中化管理,简化网络安全管理的复杂度。只要在防火墙上配置好过滤策略,就能使防火墙成为一个网络安全的检查站,所有进出网络的信息都需要通过防火墙,把非法访问拒于门外。从而实现安全的集中统一的管理,并且能够简化安全管理的复杂度。

        (3)能够有效地记录 Internet 上的活动。因为所有进出内部网络的信息都必须通过防火墙,所以防火墙能够收集内部网络和外部网络之间或者不同网段之间所发生的事件,为管理员的进一步分析与安全管理提供依据。

         3.正确使用防火墙虽然防火墙的技术日渐成熟起来,成为维护网络安全的一个重要的手段。

         但是,它也不能完全解决网络上的安全问题。在实际使用过程中还有一些安全性是防火墙不能实现的,在实际工作中,一般应注意如下几点:

        (1)防火墙虽然能对来自外部网络的非法连接作很严格的限制,但是对来自本地网络内部的攻击却无从防范。事实上,大多数攻击不是来自外部,而是来自内部。因此,即使使用了防火墙,对本地网络内部的主机、应用系统、数据库等也要采取其他有效的措施,才能真正做到安全。

        (2)即使对于来自外部的攻击,目前的任何防火墙也不能做到完全阻挡所有的非法入侵。随着各种新技术的陆续涌现,非法分子对系统的深入研究与剖析,各种新的应用需求不断被开发,防火墙本身也会受到越来越多的威胁。对这些新的动态、趋势要密切关注,不断地升级防火墙、修正完善防火墙的配置,才能使防火墙本身更加坚固,进而长久地发挥安全保护作用。

        (3)防火墙不能防范病毒,无法抵御基于数据的攻击。尽管防火墙的过滤技术在不断完善,可是由于病毒的类型太多,隐藏方式也非常复杂,而且它们很多都是隐藏在数据文件中,因此要防火墙对所有的包含病毒的文件作出限制是不太现实的,而应当在系统中单独安装专门的病毒网关或者在主机上安装相应的防病毒软件、反间谍软件等工具软件,才能较好地防范此类安全隐患。

        (4)防火墙不能防范全部的威胁,而只能防备已知的威胁。所以在使用过程中,应当经常根据需要配合使用入侵检测系统。

        (5)防火墙不能防范不通过它的链接。防火墙可以有效地过滤经过它的信息传输,但不能防范不通过它的信息传输,例如,如果允许拨号访问防火墙后面的内部系统,则防火墙没有任何办法对它进行控制。

    3 入侵检测系统

        传统上,一般采用防火墙作为系统安全的边界防线。但是,随着攻击者的知识日趋丰富,攻击工具与手法的日趋复杂多样,单纯的防火墙已经无法满足对安全高度敏感的部门的需要,网络的防卫必须采用一种纵深的、多样的手段。

        与此同时,当今的网络环境也变得越来越复杂,各式各样的复杂的设备,需要不断升级、补漏,系统管理员的工作不断加重,不经意的疏忽便有可能造成安全的重大隐患。所以,信息系统中存在着不少可以被攻击者所利用的安全弱点、漏洞及不安全的配置,主要表现在操作系统、网络服务、TCP/IP 协议、应用程序(如数据库、浏览器等)、网络设备等几个方面。正是这些弱点、漏洞和不安全设置给攻击者以可乘之机。

        另外,由于大部分网络缺少预警防护机制,即使攻击者已经侵入到内部网络,侵入到关键的主机,并从事非法的操作,系统管理员也很难察觉到。这样,攻击者就有足够的时间来做他们想做的任何事情。

        要防止和避免遭受攻击和入侵,不仅要找出网络中存在的安全弱点、漏洞和不安全的配置,然后采取相应措施解决这些弱点、漏洞,对不安全的配置进行修正,最大限度地避免遭受攻击和入侵;还要对网络活动进行实时监测,一旦监测到攻击行为或违规操作,能够及时作出反应,包括记录日志、报警甚至阻断非法连接。

        在这种环境下,入侵检测(Intrusion Detection)技术受到人们愈来愈多的关注,而且已经开始在各种不同的环境中发挥其关键作用。入侵检测系统可以在系统中发生一些不正常的操作时发出警报,防患于未然。设置硬件防火墙,可以提高网络的通过能力并阻挡一般性的攻击行为;而采用入侵检测系统,则可以对越过防火墙的攻击行为及来自网络内部的违规操作进行监测和响应。

        入侵检测技术,通过对计算机网络或计算机系统中的若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象。与其他安全产品不同的是,入侵检测系统需要更多的智能,它要根据智能库对收集到的数据进行分析,并采取相应措施。

        作为对防火墙极其有益的补充,入侵检测系统(IDS)能够帮助人们快速发现系统攻击的发生,扩展了系统管理员的安全管理能力(包括安全审计、监视、进攻识别和响应等),提高了信息系统的安全性。入侵检测系统被认为是防火墙之后的第二道安全闸门,它能在不影响网络性能的情况下对网络进行监听,从而提供对内部攻击、外部攻击和误操作的实时保护。

        入侵检测系统作为一种积极主动的安全防护工具,能够在计算机网络和系统受到危害之前进行报警、拦截和响应。其主要功能包括:通过检测和记录系统中的安全违规行为,惩罚信息系统攻击,防止入侵事件的发生;检测其他安全措施未能阻止的攻击或安全违规行为;检测黑客在攻击前的探测行为,预先给管理员发出警报;报告信息系统中存在的安全威胁;提供有关攻击的信息,帮助管理员诊断系统中存在的安全弱点,利于其进行修补。

        在大型、复杂的计算机系统中布置入侵检测系统,可以明显提高信息系统安全管理的质量。

        1.入侵检测技术入侵检测系统的处理过程分为数据采集阶段、数据处理及过滤阶段、入侵分析及检测阶段、报告及响应阶段 4 个阶段。

           数据采集阶段主要收集目标系统中引擎提供的通信数据包和系统使用等情况。数据处理及过滤阶段是把采集到的数据转换为可以识别是否发生入侵的数据的阶段。分析及检测阶段通过分析上一阶段提供的数据来判断是否发生入侵。这一阶段是整个入侵检测系统的核心阶段。报告及响应阶段针对上一个阶段中得出的判断作出响应。如果被判断为发生入侵,系统将对其采取相应的响应措施,或者通知管理人员发生入侵,以便于采取措施。

        在入侵检测系统的工作过程中,对信息系统中的各种事件进行分析,从中检测出违反安全策略的行为是入侵检测系统的核心功能。检测技术分为两类:一种是基于标识(signature-based)的入侵检测,另一种是基于异常情况(anomaly-based)的入侵检测。

        基于标识的检测技术,先定义出违背安全策略的事件的特征,如网络数据包的某些头信息等。然后对收集到的数据进行分析,通过判别这类特征是否在所收集到的数据中出现来判断是否受到入侵。此方法非常类似杀毒软件的特征码检测,比较简单有效。

        而基于异常的检测技术则先定义一组系统“正常”情况的数值,如 CPU 利用率、网络流量规律、文件校验和等(这类数据可以人为定义,也可以通过观察系统,并用统计的办法得出),然后将系统运行时的数值与所定义的“正常”情况比较,得出是否有被攻击的迹象。这种检测方式的核心在于如何定义所谓的“正常”情况。

    两种检测技术的方法、所得出的结论有时会有非常大的差异。基于标识的检测技术的核心是维护一个知识库。对于已知的攻击,它可以详细、准确地报告出攻击类型,但是对未知攻击却效果有限,而且知识库必须不断更新。基于异常的检测技术则无法准确判别出攻击的手法,但它可以判别更广泛,甚至未发觉的攻击。如果条件允许,两者结合的检测会达到更好的效果。

        2.入侵检测系统的种类和选用一般来说,入侵检测系统可分为主机型和网络型。

        主机型入侵检测系统往往以系统日志、应用程序日志等作为数据源,当然也可以通过其他手段(如监控系统调用)从所在的主机收集信息进行分析。主机型入侵检测系统保护的一般是其所在的主机系统。主机型入侵检测系统需要为不同平台开发不同的程序,而且会增加系统负荷,还要在每一台主机安装,比较麻烦,但是可以充分利用操作系统本身提供的功能,并结合异常分析,更准确地报告攻击行为。

        网络型入侵检测系统则以网络上的数据包作为数据源,通过在一台主机或网络设备上监听本网段内的所有数据包来进行分析判断。一般网络型入侵检测系统担负着保护整个网段的任务。这种系统应用十分简便:一个网段上只需安装一个或几个这样的系统,便可以监测整个网段的情况,但是它不跨越多个物理网段,对于复杂结构的网络(如交换环境)监测效果有一定影响。

        主机型入侵检测系统和网络型入侵检测系统各有利弊,应用中可以根据实际需要从中选择。

    展开全文
  • 介绍了一种端到端IP...在分析IP电话存在安全问题的基础上,研究并解决了语音加解密和会话密钥安全协商问题,并实现了端到端IP电话的安全保密通信.测试结果表明,其时延、带宽占用和丢包率均达到了IP电话的QoS要求.
  • 本论文主要用于系统架构师考试认证,并已通过老师审核,原创编写,严禁转载
  • 论信息系统安全性与保密设计

    千次阅读 2020-12-18 18:17:26
    网络硬件层设置硬件防火墙,解决病毒木马与外部攻击的隐患;数据层设置数据加密与容灾备份机制,解决数据泄露丢失的...应用层统一采用RBAC授权机制等方案,解决越权操作的隐患,提高了整个系统的抗风险和安全保密能力。
  • 因而通过技术提高设备间的连接性是该安全信息保密系统设计核心。通过节点分离技术,NSA Away设备技术方案只允许两个人来维护他们的隐私通讯。 具体部分如截图: 硬件电路组成模块:LCD显示电路、MCU最小系统(USB/SD卡...
  • 一、安全性和保密设计 计算机及信息技术的应用领域在不断扩展,计算机在政府、企业、民生等各个领域中都得到越来越广泛的应用。与此同时,网络攻击和入侵事件与日俱增,重要机构的信息系统遭黑客袭击的事件时有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,050
精华内容 14,820
关键字:

系统安全保密设计