账号泄露风险检测云主机

账号泄露风险检测云主机

由于用户的网络账号密码通常具有相似性或被直接重用,攻击者往往搜集已泄露的账号密码对企业业务系统进行撞库攻击。账号泄露风险检测云主机是业界第一款专为企业进行账号泄露风险检测的商用产品,解决企业面临被攻击者进行撞库攻击的安全痛点,使企业能够在被撞库攻击前,有效检测自有账号在互联网的整体泄露风险情况,从而可以提前进行风险账号处置,最大限度降低安全风险。

服务保障
请勿线下交易!90%的欺诈、纠纷、资金盗取均由线下交易导致。

产品亮点

账号泄露风险检测云主机是业界第一款专为企业进行账号泄露风险检测的商用产品,应用了多项信息安全专利技术,具有以下几个突出特点:  1.私有网络检测,过程自主可控。 运行于客户私有网络环境,无需与外部网络进行连接,从而确保企业自有账号信息不出内网,账号数据安全可控;  2.数据全面真实,持续维护更新。 预置互联网真实泄露的九十亿条以上账号风险数据,数据全面真实,并能够持续更新补充。数据来源于真实互联网环境,准确可靠且持续更新,对企业具有巨大的实际参考价值;  3.芯片级硬件加密处理,高效安全可靠。 采用Intel SGX芯片级硬件加密技术构建TEE可信执行环境,确保企业待检测数据的安全,账号分析全过程都在SGX构建的可信执行环境中执行,与操作系统隔离,从而杜绝黑客或内鬼窃取隐秘的账号数据;  4.功能使用简便,集成接口丰富。 提供管理界面、检测软件和本地API集成接口,支持Java/PHP/Python/Javascript等多种语言,以通用数据格式反馈账号风险分析结果,并提供多个常用检测代码模板供用户直接使用。

产品说明

功能1:企业账号泄露风险批量检测

企业账号泄露风险批量检测采用脚本的形式进行配置和工作,为用户提供了充分的灵活性。

检测工具所在的企业账号泄露风险检测主机中的文件夹位置如下:

C:\checkPortal\vericlouds_setup\scripts

检测工具将输入的用户名和密码(明文密码或hash密码)与检测主机内置的海量账号风险情报数据进行比对分析,从而直接得出泄露风险结论。

检测工具使用Python/Java 程序脚本对企业当前的员工账号或外部用户账号进行批量泄露检测和弱密码检测。检测前应导出员工账号或外部用户账号用户名和密码(一般为Hash密码格式)的检测内容清单。

检测脚本具体执行方式如下:

C:\checkPortal\vericlouds_setup\scripts> C:\Python27\python.exe .\accounts_scanner.py

在脚本中指定读取了待检测账号清单文件,(脚本中默认指明了清单文件名称为test_accounts_md5.csv,可根据需要更改),文件类型不限,但对文件内容的格式有具体要求。

检测账号清单的格式要求如下

Test1@xxx.com----e10adc3949ba59abbe56e057f20f883e

Test2@xxx.com----14e1b600b1fd579f47433b88e8d85291

每一行为一个用户名和对应的hash密码,中间用四个短横线“----”分开

 

批量检测的工作程序如下图所示:

 

 

步骤1:明确员工账号/外部用户账号的密码hash处理方式,如是采用md5($pass) 或者md5(md5($pass)),ssha512($pass)等等,如果采用了固定盐值,需首先获取相关盐值。

步骤2:在批量检测脚本中按照密码的hash处理方式进行配置,在“source_config”字段中选择相应的hash方式,建议在正式大批量检测时,选取少量数据进行测试,确保配置正确;

步骤3:准备好包含用户名和密码清单内容的检测内容清单,按照格式要求,用户名和密码中间用“----”隔开;

步骤4:调整批量检测脚本,以python版本的批量检测脚本accounts_scanner.py为例:

可以根据需要调整脚本的参数配置,主要在source_config行调整参数:

source_config = {'location':'test_accounts_md5.csv','source':'test_accounts','parse_function':parse_account,'checks':['compromise','common'],'source_type':'md5','index_begin':0,'count':100,'is_local':True,'ignoreEmailDomain':False,'showCompromise':True,'repeat':1,'noCache':True}

字段解释:

location:检测清单文件的名称和文件位置,建议此清单文件与批量检测脚本放置于同一文件夹;

source:无需调整

parse_function:  选择检测清单文件的解析函数,可以选择本批量脚本内已有的解析函数,也可新建其他解析函数;

checks:检测泄露密码(compromis)或是弱密码(common),可以保留一个,也可以都保留;

source_type: 检测清单文件中密码采用的hash算法名称,如MD5,SSHA512等;

index_begin: 检测清单文件中开始检测的行数,默认是0,即从第一行开始检测;

count: 检测清单文件从index_begin行开始检测的行数

gnoreEmailDomain:检测清单文件中的用户名为邮箱是,是否忽略邮箱域名,即自动选取邮箱@符号前的内容作为用户名;

noCache:对于同一用户名重复检测时,是否读取上一次检测的缓存数据而不真正进行检测比对分析;

 

步骤5:运行批量检测脚本正式检测,查阅检测结论,并可将检测结果进行后续分析。

 

 

功能2:企业账号泄露风险检测API集成

检测云主机提供安全并易于使用的云端API接口,Http://<检测主机IP>/vericlouds/API/index.php

此接口使客户通过将自有账号信息与数十亿计的账号泄露情报数据进行比对从而或者自有账号是否发生泄露。此接口可与其他系统进行集成,例如与用户登录管理系统进行集成。用户在登录/注册/修改密码时,直接调用泄露检测API接口对输入密码进行实时的检测分析,发现泄露后提醒用户修改密码;检测接口还适用于其他管理系统的集成使用场景。

检测主机在交付给客户使用前,将配置生产唯一的“api_secret”字符串,此字符串将作为此客户独有的密钥用于接口反馈信息的解密,应被妥善管理和保存。

API使用的基本场景

使用场景1:向API发送用户名,检查是否存在泄露密码

为了检查一个用户名是否在账号泄露情况数据集中,可以将用户名userid发出一个REST API请求到API,并设置参数为“search_leaked_password_with_userid”。如果检测成功,API将返回一个加密后的泄露密码的特征信息(包括泄露密码的首尾字母和长度信息),此泄露密码特征信息采用AES 256 CBC加密。

使用客户独有的api_secret”可对接口反馈的泄露密码特征信息进行解密,得到密码首字母、尾字母和长度信息。

如果客户有此用户名的明文密码信息,可将明文密码与解密后的泄露密码特征进行比较,从而判断此明文密码是否已经发生泄露;如果客户没有此用户名的明文密码,则可根据API接口反馈的泄露密码数量宏观判断此用户名的泄露风险大小,但无法得出准确的泄露结论。

使用场景2:向API发送用户名和hash密码,检查密码是否已经泄露

如果用户有hash格式的密码,需首先明确密码的hash过程和方法,如SHA1、MD5或其他方式,检测API需要提前进行相关配置。

检测API完成Hash处理方式配置后,实际进行检测使用时,用户将用户名和对应的hash密码前6位发送给API接口, API将首先根据用户名进行检索,找到匹配用户名后,再将账号泄露情报数据库中,此用户名下的泄露密码按照配置好的Hash方法进行处理,然后将前6为hash字符与输入的hash密码前6位字符进行比对,比对成功则说明输入的用户名和密码已经发生泄露,API接口将反馈泄露检测结论。

API参数说明

API请求参数:

所有的API请求参数使用"urlencoding"方式进行编码,并已POST方法发送到API接口。

参数名

参数说明

mode

search_leaked_password_with_userid 和 search_leaked_password_with_hash_segment. 前者允许基于用户名发起API请求,后者允许基于密码hash发起API请求。前者模式下userid是必选参数.后者模式下hash_segment 是必选参数

api_key

客户独有的固定参数,产品交付前提供给用户。

api_secret

客户独有的固定参数,产品交付前提供给用户。用于解密API反馈的加密数据,例如泄露密码的特征信息。此参数内容非常重要,不应分享给第三方。

userid

用户名. 目前API仅支持email地址形式的用户名.此参数仅在 mode 设置为 search_leaked_password_with_userid 时使用.

userid_type

userid的类型. API支持default and hash两种形式的userid. 如果设置成hash,则userid 应为 SHA256 计算之后的user ID 哈希值,而不是明文形式的user ID.

hash_segment

密码哈希值的前6位字符。仅当mode选择search_leaked_password_with_hash_segment时需设置此参数值.

Context

请求API反馈的其他内容,仅在mode=search_leaked_password_with_userid  模式下可设置,包括 source_type(泄露源类型), source_count(泄露源数量), 等,使用逗号隔开

 

API响应参数:

API反馈的数据采用JSON格式,如下:

{

  "result": "succeeded",

  "passwords_encrypted": [

    ":",

    ":",

    ...

  ],

  "quota": "1000",

  "quota_used": "130",

  "time_lapse": "0.23"

}

       

        

参数名称

参数描述

result

请求的状态,succeeded 表示API call成功处理, failed标识API call处理失败,且 reason 字段将给出原因描述.

passwords_encrypted

找到的泄露密码列表,每个密码均采用AES 256 CBC mode加密.

<ecncrypt_passwod>

API接口基于 userid所找到的泄露密码,且密码使用AES 256加密 .  api_secret 参数可用来对找到的泄露密码进行解密。处于保护用户隐私的目的,找到的泄露密码进行了脱敏处理,只显示首尾字母和长度信息。例如找到的泄露密码是 "123456",解密后将只能看到 "1****6" .

<iv>

初始向量值,使用初始向量对 ecncrypt_passwod进行加密

source_types

 passwords_encrypted 列表中每一个泄露密码的泄露源类型. 此字段仅在输入参数context 包含了 source_type时生效

source_counts

passwords_encrypted 列表中每一个泄露密码的泄露源类型. 此字段仅在输入参数context 包含了 source_count时生效 .

password_hashes

仅当mode=search_leaked_password_with_hash_segment时生效,根据输入hash_segment匹配到的泄露密码列表(hash格式)此参数不为空时表示检测到了与输入的6位hash值字符串匹配的泄露密码,说明此用户名和密码已经发生泄露。

quota

客户能够检测的账号数量.

quota_used

客户已经检测的账号数量

time_lapse

处理此API请求所用时间长度

 

 

API使用的代码示例:

 

JavaScript代码案例:

var url = "Http://<检测主机IP>/vericlouds/API/index.php"

var api_key = 'XXXXXXXX'

var api_secret = 'xxxxxxxxxxxxxxxx'

var userid = 'this_is_test@gmail.com'

var password = '123456'

 

function mark_password(password) {

    var masked_password = '';

    if (password.length > 2) {

        masked_password = password.charAt(0)+Array(password.length-1).join("*")+password.charAt(password.length-1);

    } else {

        masked_password = password;

    }

    return masked_password

}

       

$.post(url, {mode:'search_leaked_password_with_userid',api_key:api_key,api_secret:api_secret,userid:userid}, function(data){

        var obj = jQuery.parseJSON( data );

        if (obj.result === 'succeeded') {

            var index = 1;

            var match = false;

            for (var password_encrypted in obj.passwords_encrypted) {

                password_encrypted = obj.passwords_encrypted[password_encrypted].split(':');

                var enc = aesjs.utils.hex.toBytes(password_encrypted[0]);

                var iv = aesjs.utils.hex.toBytes(password_encrypted[1]);

                var aesCbc = new aesjs.ModeOfOperation.cbc( aesjs.utils.hex.toBytes(api_secret), iv);

                var decrypted = aesjs.utils.utf8.fromBytes(aesCbc.decrypt(enc));

                decrypted = decrypted.slice(0, decrypted.length - decrypted.charCodeAt(decrypted.length-1))

                if (mark_password(decrypted) == mark_password(password))

                    match = true;

                   

                if (match) {

                    alert('true')

                    break;

                }

                index++;

            }

            if (!match) {

                alert('false')

            }

        } else {

            alert("Query failed! Reason: "+obj.reason);

        }

});

 

 

Python代码样例:

import urllib, urllib2, json

from Crypto.Cipher import AES

 

unpad = lambda s : s[:-ord(s[len(s)-1:])]

def AESCipherdecrypt( key, enc ):

    enc, iv = enc.split(':')

    cipher = AES.new(key.decode("hex"), AES.MODE_CBC, iv.decode("hex") )

    return unpad(cipher.decrypt( enc.decode("hex") ))

 

url = " Http://<检测主机IP>/vericlouds/API/index.php "

api_key = 'XXXXXXXX'

api_secret = 'xxxxxxxxxxxxxxxx'

 

def is_compromised(userid, password):

    reqdata = {'mode':'search_leaked_password_with_userid', 'api_key': api_key, 'api_secret': api_secret, 'userid': userid}

    reqdata = urllib.urlencode(reqdata)

    resp = urllib2.urlopen(urllib2.Request(url, reqdata)).read()

    resp = json.loads(resp)

    if resp['result'] != 'succeeded':

       print resp['reason']

       return None

    for pass_enc in resp['passwords_encrypted']:

       plaintext = AESCipherdecrypt(api_secret, pass_enc)

       if (len(password), password[0], password[-1]) == (len(plaintext), plaintext[0], plaintext[-1]) :

           return True

    return False

 

print is_compromised('this_is_test@gmail.com', '123456')

 

功能3:账号泄露风险检测云主机维护管理

账号泄露风险检测云主机维护管理平台地址: http://<账号泄露风险检测云主机IP>/vericlouds

维护管理功能包括检测接口测试、账号泄露风险情报数据更新维护、账号泄露风险检测云主机使用许可维护等三块功能。具体使用指导参考使用指南文档。

 

售后支持范围

售后服务范围为产品使用方面的技术支持,售后支持时间范围为合同期范围内
热搜类目 热搜产品 快速入口