某银行信用卡中心运维主管 王晶晶
某银行信用卡中心运维人员,加入到安华金和二代数据库安全审计产品测试评估当中,将产品体验分享大家。
在银行的数据库系统中,时常面临因账户和权限设置不当或账户被滥用而带来的风险。如果数据库管理员利用工作之便,窃取、篡改重要业务数据,或者管理账号被窃取、导致数据库被恶意损毁,将对企业带来难以挽回的重大损失。而数据库自身审计日志存在局限性,难以提供便捷的审计信息查询方式和报表,所以很难用于安全事件定位分析,以及事后追查取证。
本次针对安华金和数据库监控与审计系统(DBAudit)产品进行测试体验,发现该产品能够实时记录网络上的数据库活动,对数据库遭受到的风险行为进行告警。该系统通过对用户访问数据库行为的记录、分析和汇报,帮助用户事后生成合规报告、事故追根溯源,同时加强数据库内外部网络行为记录,提高数据资产安全。
经过详细测试,其主要优势包括:
一、全面监测数据库超级账户、临时账户等指定账户的数据库操作行为;
二、实时监测数据库操作行为,发现非法违规操作能及时告警响应;
三、详细记录数据库操作信息,并提供用户、IP、客户端工具、访问时间、操作对象、SQL操作类型、成功与否、访问时长、影响行数等多种检索条件,方便事件定位分析、事后取证;
四、能够以报表形式呈现用户名称,操作时间,操作类型(如修改、查询、删除),操作所涉及到相关数据(如表、视图)等信息;
五、支持自定义高中低风险等级,漏洞攻击、SQL注入、黑名单语句、违反授权策略的SQL行为等审计规则和邮件、短信、日志等告警策略;
六、界面友好,按照语句、会话、风险为线索对数据库审计信息进行组织和导航,并提供业务翻译能力,将复杂的SQL语句提炼为中文业务操作描述;
七、能够展现数据库完整会话操作,对系统管理提供重要诊断依据;
八、系统支持ORALCE、SQL SERVER、MY SQL、DB2、Sybase、Infomix等主流数据库系统。
当然产品也存在一些不足:
一、无法完整记录SELECT语句的返回结果集,将可能导致特定情况下的审计材料缺失;
二、审计信息存在10秒左右的延迟:执行的SQL语句,并不能立即在审计系统中显现。
1.对存在风险的操作是否能够准确记录用于审计
测试用例:设置针对DW_AREA表的查询为风险操作,然后使用指定条件对该表进行查询。
测试目的:查询语句能够被准确记录,客户端的用户名和IP地址等详细信息能够准确反映。
测试结果:能够准确捕获风险操作语句,客户端信息包括IP、账户、执行时间等。
2.是否提供方便的检索功能和报表查询
测试用例:设置针对DW_PAYMENT_INTERFACE表的查询为风险操作,然后使用指定条件对该表进行查询。
测试目的:系统是否提供了方便的检索功能和报表查询功能,达到快速事后取证的目的。
测试结果:能够利用账户、IP、查询条件等从多种维度对风险信息进行过滤,方便信息检索和定位。
3.对带Schema的表能否准确解析并审计
测试用例:select * from mysql.db limit 10
测试目的:是否准确识别出表名是db,数据库名称是mysql。
测试结果:准确识别。
4.对Union中的多表能否准确解析并审计
测试用例:
select type from mysql.proc limit 2
union all
select name from test.test
union
select db from mysql.db
测试目的:是否准确识别出表是mysql.proc、test.test、mysql.db。
测试结果:准确识别。
5.对Update中的多表能否能否准确解析并审计
测试用例:
update test a, test2 b set a.name= b.name where a.id=b.id
测试目的:是否准确识别出更新表是test、test2。
测试结果:准确识别。
6.对insert中的多表能否准确解析并审计
测试用例a:
insert into test2 select * from test
测试目的:Insert语句有涉及多表时,是否准确识别出表test、test2。
测试结果:准确识别。
测试用例b:
insert into test2 values (6,'testname')
测试目的:是否能够准确识别出插入的数据值。
测试结果:语句模板中,所有整形数值记为0,所有text类型数值都记为’#’;具体参数数值可在深度追踪中呈现。
7.对join中的多表能否准确解析并审计
测试用例:
select * from test.test inner join test2 on test.test.id=test2.id
where test2.name like '%yes%'
测试目的:join语句有涉及多表时,是否准确识别。
测试结果:准确识别。
8.对复杂查询及子查询中能否准确记录并审计
测试用例:
SELECT
sum(d.id)
FROM
(
SELECT
a.id,
a. NAME
FROM
test a
INNER JOIN test2 b ON a.id = b.id
WHERE
a.id IN (
SELECT DISTINCT
c.id
FROM
test2 c
)
) d
GROUP BY
d.id
HAVING
d.id > 0
测试目的:对函数、复杂查询以及子查询,是否能够准确识别。
测试结果:准确识别。
9. 对复杂嵌套查询能否准确记录并审计
测试用例:
select
p1.*, p2.username,
p8. name as user_area,
u.username as kefu_username,
p2.qq,
p3.
value
as credit_jifen,
p4.pic as credit_pic,
p5.area as add_area,
p1.account_yes / p1.account as scales,
p7. name as usetypename,
p2.realname
from
dw_borrow as p1
left join dw_user as p2 on p1.user_id = p2.user_id
left join dw_user_cache as uca on uca.user_id = p1.user_id
left join dw_user as u on u.user_id = uca.kefu_userid
left join dw_credit as p3 on p1.user_id = p3.user_id
left join dw_credit_rank as p4 on p3.
value
<= p4.point2
and p3.
value
>= p4.point1
left join dw_userinfo as p5 on p1.user_id = p5.user_id
left join dw_linkage as p7 on p1.use = p7.id
left join dw_area as p8 on p2.province = p8.id
where
0 = 0
and p1.type = 0
and (
(
(
(p1. status = 0)
or (
p1. status in (0, 0, 0, 0)
and p1.type != 0
)
)
and p1.type != 0
)
or (
p1.type = 0
and p1. status in (0, 0)
)
)
and time_limit <= 0
order by
p1.verify_time desc
limit 0,
测试目的:复杂查询,应能够准确识别DW_LINKAGE,DW_CREDIT_RANK,DW_AREA,DW_USER,DW_BORROW,DW_USERINFO,DW_CREDIT表信息。
测试结果:准确识别。
10.是否具备双向审计能力
测试用例:查看执行成功和失败的语句详细信息。
测试目的:实现单包返回状态分析,并能够实现对查询结果进行分析。
测试结果:准确显示执行成功和失败的语句详细信息
本次测试未能涵盖的方面包括:
一、无法验证高并发、高负载情况下是否存在数据丢失;
二、对现有数据库的性能影响;
三、审计系统自身的安全性无法验证;
四、只针对Mysql数据库的运行情况进行测试;
五、邮件、短信、日志等告警时效性和体验尚未验证。
总之,通过部署安全审计系统将帮助企业实现:实时监控、全面记录数据库各种账户(如超级管理员、临时账户等)的数据库操作行为,及时发现各种非法、违规操作,并作告警响应处理,降低数据库安全风险;通过提供丰富的审计信息查询方式和报表,方便安全事件定位分析,事后追查取证,达到保护企业数据库资产安全的目的。