基于Public特权来保护Informix的安全

by amxku
2008-10-29
http://www.amxku.net

在Informix中,有三个数据库特权级别:DBA、Resource 和 Connect
Connect 特权允许用户访问数据库以及添加、修改和删除数据。
Resource 特权授予用户所有 Connect 特权,还授予创建新的表、索引和过程的特权。
DBA 特权包括 Connect 和 Resurce 特权,还授予用户把 Resource、Connect 或DBA 特权授予其他用户的权力。具有DBA 特权的用户还可以删除数据库中的所有对象或完全删除数据库。

Informix在数据库、表和列级都应用了安全措施。但是所有安全措施都基于用来连接数库的用户名。Informix 使用关键字 public 表示应用于所有用户的特权。public关键字是一个非常强大的工具,可以开放对数据的访问。

取消Public的Connect特权
默认地,public被授予了connect特权。这意味着任何人,只要持有有效的操作系统用户ID和口令,都可以连接到数据库服务器。

启用审计
应该对关键事件进行审计,例如登陆尝试失败。

取消Public对文件访问例程的权限
默认地,public可以执行文件访问函数,例如lotofile、filetoclob和ifx_file_to_file。这将允许攻击者读、写服务器上的文件。为帮助解决这一安全漏洞,创建一个名为FileAccess的角色,按照严格的业务需求,只把那些需要访问文件的用户分配为该角色的成员。然后为该角色分配对文件访问例程的执行权限,并取消public的执行权限。

取消Public对模块例程的执行权限
默认地,public可以执行模块函数,例如ifx_replace_module、ifx_load_internal和reload_module。这将允许攻击者强制Informix服务器加载任意的库并像Informix用户一样执行代码。为帮助解决这一安全漏洞,创建一个名为ModuleAccess的角色,按照严格的业务需求,只把那些需要加载模块的用户分配为该角色的成员。然后为该角色分配对这些例程的执行权限,并取消public的执行权限。

限制语言Usage权限
应该限制被授予了C和Java例程语言usage权限的用户的数量。拥有这些语言的usage权限的任何人都可以像Informix用户一样运行代码。

检查命令
# 显示informix数据库版本、状态,启动时间和所占内存
onstat

# 查看日志情况(逻辑日志和物力日志,包括页地址)
onstat l

# 查看配置文件信息($informixdir/etc/$onconfig)
onstat c

# 查看informix配置参数
cat $INFORMIXDIR/etc/onconfig

# 查看数据库特权命令
Select * from sysusers

# 查看表级别特权
select * from systabauth

# 使用详细列表格式显示数据库事务日志信息记录(系统管理日志)
ls la     $INFORMIXDIR/online.log # System message log file path

# 查看逻辑日志的备份(报警项)
cat $INFORMIXDIR/etc/log_full.sh # Alarm program path

# 显示用户信息
onstat u

# 显示数据库空间使用信息
onstat d

参考:
http://publibfp.boulder.ibm.com/epubs/pdf/ct1tbna.pdf
http://www.sebug.net/bbs/thread-455-1-1.html
http://publibfi.boulder.ibm.com/epubs/pdf/ct1sqna.pdf
http://www.amxku.net/informix-sql-in/

相关日志

抢楼还有机会... 抢座Rss 2.0或者 Trackback

发表评论