安全操作系统 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn 助教:裴建国 Autumn 2008
主流操作系统的安全技术 Linux/Unix安全技术 Windows安全技术
Linux/UNIX安全概述 UNIX Linux 本课程:Linux 多用户、多任务 实现了有效的访问控制、身份标识与验证、审计记录等安全措施 安全性一般能达到TCSEC的C2级 Linux 一种类UNIX的OS 一个开放式系统 本课程:Linux
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux身份标识和验证 Linux系统的登录过程 Linux的主要帐号管理文件 PAM安全验证机制
Linux身份标识和验证 Linux系统的登录过程 Linux的主要帐号管理文件 PAM安全验证机制
Linux系统的登录过程 基于用户名和口令 通过终端登录Linux的过程: Init进程确保为每个终端连接(或虚拟终端)运行一个getty进程,getty进程监听对应的终端并等待用户登录 Getty输出一条欢迎信息(此欢迎信息保存在/etc/issue文件中),并提示用户输入用户名,接着getty激活login login要求用户输入口令,并根据系统中的etc/passwd文件来检查用户名和口令的一致性 若一致,启动一个shell;否则login进程推出,进程终止 Init进程注意到login进程终止,则会再次为该终端启动getty进程 /etc/passwd文件用来维护系统中每个合法用户的信息,包括用户登录名、经过加密的口令、口令时限、用户号UID、用户组号GID、用户主目录以及用户使用的shell 加密后的口令也可能存放在系统的/etc/shadow文件中
Linux身份标识和验证 Linux系统的登录过程 Linux的主要帐号管理文件 PAM安全验证机制
Linux的主要帐号管理文件 口令文件/etc/passwd /etc/passwd文件用于存放用户的基本信息 Reading: 每个账户在该文件中有拥有一个相应的条目 Reading: Hacking Linux exposed,ch1,p7;&ch9,p284 http://www.aka.org.cn/Lectures/002/Lecture-2.2.1/320.html
老版的/etc/passwd举例
老版的/etc/passwd中条目定义 每个条目包含7个字段,字段间用冒号分隔 登录帐号:密码域:UID:GID:用户信息:主目录:用户shell 登录帐号:即用户的登录名 密码域:口令被加密后的密文 UID,用户ID,为0~MAXINT-1之间的一个整数 GID,组ID,来自/etc/group,为0~MAXINT-1之间的一个整数 用户信息,用于标识诸如用户的全名、位置和电话号码等信息,可以不设置 主目录,为用户的起始登录目录,如/home/chenxl 用户shell,用户登录后所用的shell路径名,如/bin/sh
用户可以修改口令条目中的部分信息: 其余的字段由系统管理员设置 命令passwd:更改口令 命令chfn:更改第五个字段中的用户信息 命令chsh:更改第七个字段,shell路径名 其余的字段由系统管理员设置
关于UID UID是用户标识;具有唯一性。 一般 UID的最大值可以在/etc/login.defs文件中查到 Root帐号的UID是:0 系统预设帐号:1~99 常用服务帐号:100~499 普通用户帐号:500以后 UID的最大值可以在/etc/login.defs文件中查到 登录后,用户权限通过UID来确认,而非用户名 最好不要共用UID 使用root权限,可以su或者sudo
关于GID 一般GID为0的组对应于root用户组 关于GID的预留,不同Linux系统有所不同 Fedora:预留500个,添加新用户组时,从500开始 Slackware:100个 系统添加用户组默认的GID范围对应于文件/etc/login.defs中的GID_MIN和GID_MAX
Linux的shadow技术 用于提高用户密码存放的安全性 口令加密后的密文存放在/etc/shadow文件中,在/etc/passwd文件中的密码域只保存一个“x” Shadow文件对一般用户是不可读的,只有超级用户(root)才可以读写。 由于普通用户无法得到加密后的口令,提高了系统的安全性 /etc/passwd文件中每行内容9个字段,也以冒号分隔
登录帐号,与/etc/passwd中的登录帐号对应 密文。若值为x,表示该用户不能登录到系统 上次口令的修改时间。自1970.1.1日以来的天数 两次修改口令间隔最少的天数。(0?) 两次修改口令间隔最多的天数 提前多少天警告用户口令将过期 在口令过期之后多少天禁用此用户 用户过期日期。为空则永久可用 保留字段
HomeWork: 请找到自己安装的Linux系统中的/etc/passwd文件,对照上述条目说明,分析自己当前所登录账户的相关信息
Linux身份标识和验证 Linux系统的登录过程 Linux的主要帐号管理文件 PAM安全验证机制
PAM安全验证机制 Pluggable Authentication Modules,是SUN提出的一种验证机制,最初集成在Solaris系统中 目前已经移植到 Linux,SunOS,HP-UX 9.0等 目的:提供一个框架和一套编程接口,将认证工作由程序员交给管理员 允许管理员在多种认证方法之间做出选择, 能够改变本地认证方法而不需要重新编译与认证相关的应用程序 以共享库的形式提供
PAM的组成 PAM API PAM SPI PAM 库 PAM配置文件 服务程序 各种认证手段
功能包括: 加密口令(包括DES和其他加密算法) 对用户进行资源限制,防止DOS攻击 允许随意Shadow口令 限制特定用户在指定时间从指定地点登录 引入概念“client plug-in agents”,使PAM支持C/S应用中的机器
Linux PAM 主页: http://www.kernel.org/pub/linux/libs/pam/ 最新版本为1.0.1 下载地址:http://www.kernel.org/pub/linux/libs/pam/library/Linux-PAM-1.0.1.tar.gz
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux的访问控制 Linux基于权限字的文件系统访问控制 Linux的访问控制表ACL
Linux基于权限字的文件系统访问控制 在Linux中,所有的活动都可以看成是主体对客体的一系列操作 客体:一种信息实体,或是从其他主体/客体接受信息的实体 如文件、内存、进程消息、网络包或者I/O设备 主体:一个用户或者代表用户的进程,它引起信息在客体之间的流动 访问控制机制: 控制系统中的主体对客体的读、写和执行等各种访问 Linux采用一种比较简单的访问控制机制 传统UNIX的基于访问权限位的单一的自主访问控制
Linux中自主访问控制机制的基本思想 系统中每个主体都有唯一的UID,并且总是属于某一个用户组,而每个用户组有唯一的GID 由超级用户或授权用户为系统内的用户设定,保存在/etc/passwd文件中 通常情况下,代表用户的进程继承用户的uid和gid 用户登录并进入第一个shell时,该用户的uid和gid就被设置到该shell进程的task_struct中,此后的进程按照继承规则继承uid和gid(除非SETUID)
对客体的访问权限:r/w/x 三种。 针对某客体,用户:u/g/o 三种。 上述信息构成一个访问控制矩阵, 允许客体的所有者和特权用户通过这个访问控制矩阵为客体设定访问控制信息 当用户访问客体时,根据进程的uid、gid和文件的访问控制信息检查访问的合法性 举例:
chmod/chown/chgrp命令 chmod命令用来重新设定对客体的访问权限 chown命令用来修改某个文件或目录的属主
setuid/setgid 为维护系统的安全性,对于某些客体,普通用户不应具有某种访问权限,但是出于某些特殊需要,用户由必须能超越对这些客体的受限访问 例如,对/etc/passwd文件,用户不具有写访问权限,但又必须允许用户能够修改该文件,以修改自己的密码。 setuid/setgid使得代表普通用户的进程不继承用户的uid和gid,而是继承该进程所对应的应用程序文件的所有者的uid和gid,即普通用户暂时获得其他用户身份,并通过该身份访问客体
Linux的访问控制表ACL
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux网络服务安全 Linux的网络层次结构图
早期的网络服务管理程序inetd(守护进程) /etc/rc.d/rc.local激活inetd 根据/etc/inetd.conf监听 处理客户连接 例子(本地)(网络链接) 应当禁止不需要的服务,降低风险
扩展后的xinetd 配置文件:/etc/xinetd.conf 与前者完全不同,而且不兼容 组合了下列文件 /etc/inetd.conf /etc/hosts.allow /etc/hosts.deny
系统默认使用xinetd的服务 标准internet服务,如http,telnet,ftp等 信息服务,如finger,netstat,systat等 邮件服务,如imap,pop3,smtp等 RPC服务,如rquotad,rstatd,rusersd,sprayd,walld等 BSD服务,如comsat,exec,login,ntalk,shell talk等 内部服务,如chargen,daytime,echo等 安全服务,如irc等 其他,如name,tftp,uucp,wu-ftp等
典型例子 各种服务,可以添加到这个文件中 也可以放在指定的目录中 These lines control various aspects of xinetd: instances — Sets the maximum number of requests xinetd can handle at once. log_type — Configures xinetd to use the authpriv log facility, which writes log entries to the /var/log/secure file. Adding a directive such as FILE /var/log/xinetdlog here would create a custom log file called xinetdlog in the /var/log/ directory. log_on_success — Configures xinetd to log if the connection is successful. By default, the remote host's IP address and the process ID of server processing the request are recorded. log_on_failure — Configures xinetd to log if there is a connection failure or if the connection is not allowed. cps — Configures xinetd to allow no more than 25 connections per second to any given service. If this limit is reached, the service is retired for 30 seconds. includedir /etc/xinetd.d/ — Includes options declared in the service-specific configuration files located in the /etc/xinetd.d/ directory. Refer to Section 15.4.2 The /etc/xinetd.d/ Directory for more information about this directory.
目录/etc/xinetd.d/ 文件名:相关服务 大多默认关闭
目录/etc/xinetd.d/下的文件 文件格式:
以telnet为例:/etc/xinetd.d/telnet 改成“no”,打开服务 修改后,需要重启xinetd 运行如下命令: /etc/rc.d/init.d/xinetd restart
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux备份/恢复 备份技术 备份的存储设备 备份单位 脚本 … 一些商业化软件 远程网络设备、磁带驱动器、其他可移动媒体 文件(目录) 驱动器映像
备份与还原:Linux与Windows??? 制定备份策略 What Where When How … 备份与还原:Linux与Windows??? Linux只需要打包和解包
一般情况下,以下目录需要备份 一般不需备份的 /etc /var /home /root /opt /proc /dev 等等 /var,包含系统守护进程所使用的信息,包括DNS配置,DHCP租期,邮件缓冲文件、HTTP服务器文件,DB2实例配置等等 /home,包含所有用户的默认用户主目录。包括用户的个人设置、私人文件等 /root是root用户的主目录 /opt是安装许多非系统文件的地方。 /proc,虚拟文件系统,是内核和环境的一个用户态视图 /dev,设备文件目录。可选备份 其他目录,包含一些系统文件和已安装的包,可选备份
常用的备份命令 tar,打包 含义:Tape archive,磁带归档 举例: 还原 SCSI磁带设备 -c,创建 -p,保留文件访问权限 -f,归档文件名 -c,创建 -p,保留文件访问权限 -f,归档文件名 -x,提取 -C / ,还原从“/”开始 备份整个文件系统 更深入的使用,参见tar相关 使用手册 -x,提取 -C / ,还原从“/”开始
dump/restore;cpio;dd 一些商业化备份产品 压缩 tar,可以压缩,使用-z选项(gzip格式) dump/restore;cpio;dd 一些商业化备份产品 Tivoli Storage Manager Amanda Arkeia 等等
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux日志系统 记录和捕捉各种活动,包括黑客的活动 系统记账 系统日志管理 连接记账:跟踪当前用户的会话、登录和退出的活动 进程记账:对进程活动的记录 系统日志管理
连接记账 由多个程序执行,把记录写入到 Login等程序使用utmp,wtmp等工具更新上述文件 系统管理员据此跟踪谁在何时登录到系统 /var/log/utmp /var/log/wtmp Login等程序使用utmp,wtmp等工具更新上述文件 系统管理员据此跟踪谁在何时登录到系统 ac:对用户连接进行大概统计 last:提供每一个用户的登录信息 who:报告当前正在登录的用户的信息 等
进程记账 由系统内核执行 当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个记录 打开进程记账 /var/log/pacct 打开进程记账
可以在每次启动系统的时候,打开进程记账 /etc/rc.d/rc.local中添加
进程记账信息的解读 dump_acct sa 统计系统进程记账的大致情况 lastcomm 列出系统执行的命令
sa命令举例
lastcomm命令举例
系统日志 有各种日志文件 系统日志工具syslogd 守护进程klogd 其他日志 配置文件:/etc/syslog.conf 获得并记录Linux内核信息 其他日志
Linux/UNIX安全技术 Linux身份验证 Linux访问控制 Linux网络服务安全 Linux备份/恢复 Linux日志系统
Linux的内核安全技术 可加载的内核模块LKM Linux的内核防火墙
Linux 0.99,引入LKM Loadable Kernel Module 早期,Monolithic的缺陷 混杂,各组成部分之间的界限不明显 可扩展性、可剪裁性差;需要重新编译 Linux 0.99,引入LKM Loadable Kernel Module 内核功能动态扩充技术 双刃剑 威胁:内核级入侵
LKM入侵举例 Linux 2.2,knark 可以改变netstat的输出结果 改变运行进程的UID和GID 可以不用SUID就能获得root访问权限
Linux内核防火墙 内核防火墙 早期的ipfwadm Ipchains Netfilter/iptables组合
Netfilter举例 Netfilter体系结构
Thanks! The end.
特权管理 Linux继承了传统Unix的特权管理机制,即基于超级用户的特权管理机制。 基本思想: 1)普通用户没有任何特权,超级用户拥有系统内所有的特权 2)当进程要进行某特权操作时,系统检查进程所代表的用户是否为超级用户,即检查进程的UID是否为0 3)当普通用户的某些操作涉及特权操作时,通过setuid/setgid来实现 缺点: 容易被hacker利用 从2.1版开始,Linux内核中实现了基于权能的特权管理机制
基于权能的特权管理机制 基本思想:(以2.4.0内核为例) 1)使用权能分割系统内的所有特权,使同一类敏感操作具有相同的权能 2)普通用户及其shell没有任何权能,而超级用户及其shell在系统启动之初拥有所有权能 3)在系统启动后,系统管理员为了系统的安全可以剥夺超级用户的某些特权,并且该剥夺过程是不可逆的。(只能重新启动系统来恢复) 4)进程可以放弃自己的某些权能,该过程也是不可逆的 5)进程被创建时拥有的权能由它所代表的用户目前所具有的权能、父进程权能两者的与运算来确定 6)每个进程的权能被保存在进程控制块的cap_effective域中 7)当一个进程要进行某个特权操作时,操作系统检查进程是否具有相应特权操作所应该具有的权能 8)当普通用户的某些操作涉及特权操作时,仍然通过setuid来实现
安全审计 Linux系统的审计机制,基本思想: 图 审计事件分为系统事件和内核事件 系统事件由审计服务进程syslogd来维护与管理 内核事件由内核审计线程klogd来维护与管理 图
安全注意键
其他安全机制 口令脆弱性警告 口令有效期 一次性口令 口令加密算法 影子文件 帐户加锁 限制性shell 特殊属性 文件系统加载限制 加密文件系统与透明加密文件系统 根用户的限制 安全shell 防火墙 入侵检测
安全Linux服务器配置参考 BIOS的安全设置 LILO的安全设置 口令安全 自动注销帐号的登录 取消普通用户的控制台访问权限 取消并卸载所有不用的服务 TCP_Wrapper 修改/etc/host.conf文件 使/etc/services文件免疫 从不允许从不同的控制台进行root登录 使用PAM禁止任何人通过su命令改变身份为root Shell logging bash 禁止Ctrl+Alt+Del键盘关闭命令 给/etc/rc.d/init.d下script文件设置权限 隐藏系统信息 禁止不使用的SUID/SGID程序
Windows安全技术 Windows身份验证与访问控制 Windows分布式安全服务 Windows审核机制 Windows注册表
Windows操作系统安全机制 NT设计目标:TCSEC标准的C2级,这就要 在用户级实现自主访问控制 必须提供对客体的访问的审计机制 必须实现客体重用
Windows NT/2000/XP的体系结构
Windows NT的安全模型 Windows NT的安全模型包括5个主要部分 登录(WinLogon) 本地安全认证子系统(LSA) msv1_0 安全帐户管理器(SAM) NT LAN Manager(NTLM)
Windows 2000/XP的安全模型
Windows的域和委托
Windows安全性组件 安全引用监视器 本地安全认证 LSA策略数据库 安全帐号管理器服务 SAM数据库 默认身份认证包 登录进程 网络登录服务
Windows NT/2000/XP的系统登录过程 登录是通过登录进程WinLogon、LSA、一个或多个身份认证包和SAM的相互作用发生的 身份认证包:执行身份验证检查的动态链接库。 Msvl_0:用于交互式登录的身份认证包 WinLogon:一个受托进程,负责管理与安全性相关的用户相互作用 是从键盘截取登录请求的唯一进程
WinLogon的初始化
用户登录步骤
Windows NT/2000/XP的资源访问 安全性描述符和访问控制 访问令牌与模仿
Windows NT/2000/XP安全审计