第 04 讲 Linux系统安全(参考)_第1页
第 04 讲 Linux系统安全(参考)_第2页
第 04 讲 Linux系统安全(参考)_第3页
第 04 讲 Linux系统安全(参考)_第4页
第 04 讲 Linux系统安全(参考)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络与信息安全系统安全:Linux系统安全内 容nLinux系统介绍qLinux内核qLinux文件系统nLinux的网络结构nLinux攻防技术n一次针对Linux的入侵过程Linux操作系统n背景q最初由Linus Benedict Torvalds于1991年开发的q1994年3月发布第一个正式版本q内核升级模式n稳定的内核,第二个数字为偶数,例如2.2.14n开发的内核,第二个数字为奇数,例如2.1.14nLinux系统特点q兼容UNIX:API兼容,管理命令和各种工具q源码开放q支持各种硬件平台,支持多CPUqLinux平台上存在大量的应用软件,以及应用开发工具Linux内核n多用户

2、,多任务,分时,软实时处理n不是微内核系统,但具有某些微内核特征nIntel版本:i386的保护模式,特权级q内核态(0)和用户态(3)q中断和系统调用两种特权级的切换nPCB:进程控制块,常驻内存n进程是最基本的调度单元q进程是动态的,每一个进程都有一个进程控制块q没有专门的调度进程,内核中有一个schedule函数完成调度任务q进程在调度过程中有多种状态进程调度:状态转换图TASK_RUNNINGHolding CPUTASK_UNINTERRUPTIBLETASK_INTERRUPTIBLETASK_ZOMBIETASK_STOPPEDdo_fork()schedule()时间片到do_

3、exit()申请资源未果申请资源未果跟踪系统调用所申请资源有效时收到SIG_KILL或SIG_CONT后所申请资源有效或者收到信号时Linux的系统调用n编程接口,与POSIX兼容,C语言函数集合n实现形式与DOS的INT 21H相似qLinux使用int 80hn函数名“sys_xxx”q比如系统调用fork的相应函数sys_fork()n系统调用号和系统调用表n系统调用都转换为Int 80h软中断n所有的系统调用只有一个入口system_calln出口: ret_from_sys_callLinux内存管理n在i386机器上,每个进程有独立的4G虚存空间n32位线性地址利用硬件的分页机制n

4、内核的代码段和数据段被映射到3G以上的空间中n用户态下的代码实际可申请的虚存空间为0-3GBn每个进程用两套段描述符来访问内存,分别用来访问内核态和用户态下的内存空间n在用户态下,代码不可能访问3G以上的地址空间,如果要访问内核空间,必须通过系统调用或者中断nLinux对虚存的管理使用vma(virtual memory area)机制n在进程数据结构中,指定了用户空间的上界,在系统调用时,用户指定的指针不能超过此上界,但是内核代码可以重新设定此上界n页交换机制:缺页中断、页面换入Linux的的段选择符情况段选择符情况Linux 的的 GDT 表项分布表项分布 表项序号表项序号 内容内容 起始

5、虚拟地址起始虚拟地址 段长度段长度 特权级特权级 0 NULL 描述符描述符 1 未使用未使用 2 内核态代码段内核态代码段 0 xC0000000 1GB 0 3 内核态数据段内核态数据段 0 xC0000000 1GB 0 4 用户态代码段用户态代码段 0 x00000000 3GB 3 5 用户态数据段用户态数据段 0 x00000000 3GB 3 6 未使用未使用 7 未使用未使用 2j+6 第第 j 进程进程 LDT 2j+7 第第 j 进程进程 TSS 段选择符格式段选择符格式(16 位)位) 15 3 2 1 0INDEXTIRPLTI: 0 GDT, 1 LDT(切换任务时切

6、换任务时,GDT 不变不变,LDT 改变改变)RPL: 特权级,特权级,0 为最高为最高Linux的模块机制n可动态装载的内核模块(lkm)q一组命令:insmod/rmmod/lsmod/modprobe/n关于模块机制q可以让核心保持比较小的尺寸q动态装载,避免重新启动q模块机制常常用于设备驱动q内核模块一旦加载之后,与原有的核心代码同等q可动态装载的内核模块的一些缺点n可能会导致一定的性能损失,和内存开销n代码不规范的模块可能导致核心崩溃q如果调用系统核心功能时,参数错误,同样会有问题Linux的模块机制原理ninsmod装载模块qLinux内核中有一个模块链表q首先通过一个特权级系统调

7、用来找到核心的输出符号q然后将模块读入虚拟内存,并利用来自核心的输出符号,修改其未解析的核心例程和资源的引用地址q再次使用特权级系统调用来申请足够的空间来容纳新的核心模块,并拷贝到此内存空间中q每个模块必须包括初始化例程和注销例程,insmod将调用初始化代码,并执行一个特权级系统调用将模块的初始化与注销例程地址传递给核心nrmmod卸载模块q当一个模块不再被引用的时候,它可以被卸载q核心调用注销例程,释放相应的核心资源q从模块链表中移除,它所占用的核心内存被回收内核中的ROOTKITn通过LKM机制,可以在系统内核中插入木马模块n一个典型的以Linux 2.2.x为基础的rootkit kn

8、arkq使用insmod knark.o就可以加载到内核中q一旦加载了knark后门之后n可以改变netstat的输出结果n可以改变运行进程的UID和GIDn可以不用SUID就能够获得root访问权限nn还有其他的ROOTKITS,比如adoren内核ROOTKITS的对策q根据每个rootkit的特征进行检测,然后设法删除q预防为主,安装内核检测系统,比如LIDSLinux文件系统nLinux支持多种文件系统,包括ext、ext2、hpfs、vfat、ntfs、q通过虚拟文件系统VFS ,Linux操作系统可以支持不同类型的文件系统n文件系统类型管理q文件系统类型的注册途径:n在编译内核时确

9、定n在文件系统作为模块装入时登记nextnext=0next虚拟文件系统(VFS)n是物理文件系统与服务之间的一个接口层,只存在于内存中n定义了关于各种特殊文件系统的公共接口抽象性qSuper_block、inode、文件操作函数入口q把所有的文件系统映射到同一个层次结构中,通过super_block与inode中的关联关系来实现,如下图所示n处理面向文件系统的通用操作n把针对文件系统的操作映射到相关的物理文件系统n许多复杂的cache机制,提高了文件系统的访问效率qVFS inode cacheqVFS directory cacheqBuffer cacheqrooti_mounti_sb

10、s_coverds_mountedext2文件系统n这是Linux系统专用的文件系统n文件也是分块存储,以块为整单位数据块三次间接块二次间接块一次间接块12个直接块数据块数据块数据块数据块数据块.组0组1组Ns_blockfs描述符 块位图 inode位图 inode表数据块n数据结构qext2_super_blockqext2_inode: 内含一个32位的文件访问控制表和一个32位的目录访问控制表Linux文件系统的安全性nLinux文件系统安全模型与两个属性相关q文件的所有者(ownership)n文件所有者的idn文件所有者所在用户组的idq访问权限(access rights)n10

11、个标志q第1个标志:d(目录), b(块系统设备), c(字符设备), .(普通文件)q第2-4个标志:所有者的读、写、执行权限q第5-7个标志:所有者所在组的读、写、执行权限q第8-10个标志:其他用户的读、写、执行权限n用chmod修改权限:字符方式和数字方式Linux文件的安全性nSUID程序q正常情况下,一个程序在运行的时候,它的进程将属于当前用户q但是,对于SUID程序,它的进程不属于启动用户,而是属于该程序的所有者用户q通常,SUID/SGID程序中的bug往往是入侵的基础nmount和fstab命令q用mount装载文件系统的时候,可以使用一些选项控制文件系统的安全性,对于装载F

12、AT系统比较有意义。qumash=Nquid=Nqgid=NLinux文件系统安全性n权限管理的不灵活q只能对所有者、所有者所在组和其他用户分配权限,无法做到进一步的细致化nPOSIX ACLs for Linux软件包q内核补丁,可以做到用ACL来管理权限n需要重新编译内核,下载补丁:q两个命令:setfacl、getfacln真正删除文件q工具wipeLinux用户管理n用户文件/etc/passwdqShadow password: /etc/shadown此文件只对root可读n让用户拥有单独的组,而不是加入到共享的users组中qgroupaddn创建用户:useraddn改口令:p

13、asswdn管理口令的有效期qchageLinux中crypt口令加密方案ncrypt()是一个口令加密函数,它基于DES算法。我们可以认为这是一个单向加密操作n函数原型:char *crypt(const char *key, const char *salt);*salt是两个字符,每个字符可从a-zA-Z0-9./中选出来n算法qUNIX标准算法使用DES加密算法,用key对一个常量进行加密,获得一个13字节的密文编码输出,其中包括salt的两个字符from Red Hat Linux 6.2nSalt的作用q同样的口令产生不同的密文q增加了穷举空间n建议使用更为安全的MD5算法Linu

14、x中Kerberos认证协议的支持n建立KDCq下载和安装Kerberos 5q配置Kerberosq启动服务n管理Kerberosqkadmin,管理Kerberos数据库n使用Kerberosqkinit,获得一个ticketqklist,列出所有的ticketsqkpasswd, 修改口令qkdestroy, 删除一个ticketq使用支持Kerberos的网络应用,例如ftp, telnet, 等PAM(Pluggable Authentication Modules)n一种可插入的认证机制n针对一个服务,指定一些认证相关的动作,放到/etc/pam.conf文件中,或者放到/etc/

15、pam.d/下与服务同名的配置文件中q每一行包含一个模块类型、一个控制级别、一个模块:service module-type control-flag module argsq例如passwd password required pam_cracklib.so type=user retry=3passwd password required pam_pwdb.so use_authtokPAM结构图logintelnetftp用户认证管理(auth)帐户管理(account)会话管理(session)口令管理(password)PAM配置文件管理员PAM APIUNIX认证Kerberos认

16、证S/Key认证PAM SPIPAM核心库系统服务PAM服务模块Linux内核安全性nLinux内核机制存在的一些潜在缺陷q超级用户的特权可能会被滥用q系统文档不安全q系统内核可以比较容易地插入模块q内核中,进程不受保护Linux对网络的支持nLinux从UNIX继承了在网络方面的优势nLinux自身的发展也是与Internet息息相关的n介绍内容qLinux网络层次nLinux协议栈qLinux网络配置q内核防火墙Linux中网络的层次结构BSD SocketsINET SocketsTCPUDPIPPPPSLIPEthernetARPUserKernelNetwork Applicatio

17、nsSocket InterfaceProtocol LayersNetwork DevicesAppletalkIPXBSD Socketn一个通用的接口qA part of VFS inodeqA socket can be operated just the same as a system call read(), write(), lseek()n一个套接字描述一个通讯连接的一端,两个通讯程序中各自有一个套接字来描述它们自己那一端。n每一类型的套接字有它自己的通信寻址方法。Linux支持下列套接字地址族或域qUNIX Unix 域套接字 qINET Internet地址族支持通过TC

18、P/IP协议的通信qAX25 Amateur radio X25 qIPX Novell IPX qAPPLETALK Appletalk DDP qX25 X25n对BSD socket进行准确操作要依赖于它下面的地址族Client/Server CommunicationClient1. Create a socket2. Bind an addr3. Listen the client4. Create a socketServer ConnectAcceptSendRecvINET SocketnBSD socket层从已注册的INET proto_ops 数据结构中调用INET层 s

19、ocket支持例程来为它执行工作。nBSD socket层把socket 结构传到INET层。为了不把BSD socket 与TCP/IP的特定信息搞混,INET socket层使用它自己的数据结构:sock ,它与BSD socket 结构相连。n建立BSD socket:地址族,socket类型,协议q将地址与INET socket绑定绑定操作在INET socket层内处理,下面的TCP和UDP协议层提供一些支持。绑定的地址在sock结构中的 recv_addr 和 saddr 字段。q例如, fd=socket(AF_INET, SOCK_STREAM, 0)n下层网络设备接收的包必须

20、通过正确的INET和BSD socket才能被处理。因此,UDP和TCP维护了一些hash表用来在输入IP消息内查找地址并将它们导向正确的 socket/sock 对。INET Socket(续)n在INET Socket上建立连接qUDP:IP地址和端口号qTCP:建立虚联接n监听 INET SocketqUDP:改变socket的状态qTCP:建立一个新的 sock 结构,加到两个hash表中并激活 tcp_bound_hash 表和 tcp_listening_hash 表。n接收连接请求q只用于TCP协议q阻塞和非阻塞状态socket()sys_socket()socket()sock

21、_create()inet_create()get_fd()returncheckprotocol, type, familynet_familiesfamily-create(sock, protocol)create socket structuretcp_v4_init_sock()sk-prot-init()INETinet_create()IPXipx_create()UNIXunix_create()Linux BSD Socket Data Structurecountclose_on_execopen_fsfd0fd1fd255filef_modef_posf_flagsf_c

22、ountf_ownerf_opf_inodef_versioninodesocksockettypeprotocoldata (sk)typeprotocolsocketSOCK_STREAMSOCK_STREAMAddress Familysocket operationsBSD SocketlseekreadwriteselectioctlclosefasyncINET socketBSD socketIP层nSocket缓存sk_buffq每一个包到来之后,都被放到一个sk_buff中qsk_buff是一个数据结构,包含一些与该包有关的信息q在包和sk_buff之间是一对一的关系qsk_

23、buff大小按16字节的倍数分配空间n接收IP包q将接收的数据转换成 sk_buff 结构。这些 sk_buff 则被网络驱动加入到了 backlog 队列中。q如果 backlog 队列太长,则丢弃接收的 sk_buff。n发送IP包q建立sk_buffq加上各种头。IP用路由表为目的IP地址解析路由nIP分片Packets in Linux kernel 2.2sys_write()sock_write()inet_sendmsg()tcp_v4_sendmsg()tcp_do_sendmsg()tcp_send_skb()tcp_transmit_skb()ip_queue_xmit()

24、ip_output()ip_finish_output()dev_queue_xmit()hard_start_xmit()sys_read()sock_read()inet_recvmsg()tcp_recvmsg()tcp_v4_recv()ip_local_deliver()ip_rcv()net_bh()Netif_rx()Block_input()ei_receive()ei_interrupt()outputinput接收数据包的过程n首先是硬件接收到数据包n然后,硬件产生中断n驱动程序把数据从硬件拷贝到一个sk_buff中n调用netif_rx()把数据包放到系统全局的 back

25、log队列中n通知net_bh()n在适当的时候net_bh()执行nnet_bh()试图发送所有的数据包,然后从backlog队列中移除,送到适当的包处理器,例如ip_rcv()nip_rcv()可能会调用ip_local_deliver()或ip_forward()nip_local_deliver()会导致调用tcp_v4_rcv()ntcp_v4_rcv()将数据放到某个socket的队列中n当socket的进程读数据时,tcp_recvmsg()被调用n如果socket进程阻塞在读操作上,则进程将被唤醒On Network level Ip_rcv()Route tableIp_fo

26、rward()DemasqIp_output()Route tableIp_local_deliver()inputforwardoutputTransport levelDatalink levelmasq网络设备工作原理图网络设备驱动n数据结构q面向对象的方法qstruct deviceq可见部分和隐藏部分。n可见部分是由外部赋值n隐藏部分的域段仅面向系统内部,它们可以随时被改变n初始化q主要工作是检测设备的存在、初始化设备的device结构及在系统中登记该设备。 q两种方式:模块初始化模式 & 启动初始化模式q网络接口管理表:dev_baseq模块初始化模式insmodinit_

27、module( )register_netdev( )dev-init ( )网络设备驱动的职责n提供初始化功能q支持启动初始化模式:网络设备的检测及初始化函数q支持模块初始化模式:网络设备的初始化函数,供register_netdev调用;还需提供init_module和cleanup_module函数n提供该网络设备的打开和关闭操作(ifconfig命令使用)n提供该网络设备的数据传输函数,负责向硬件发送数据包,供dev_queue_xmit调用;n提供该网络设备的中断服务程序,处理数据传输完毕的善后事宜和数据的接收。当物理网络设备有新数据到达或数据传输完毕时,将向系统发送硬件中断请求,该

28、函数用来响应中断请求Linux网络配置nLinux用daemon程序来提供网络服务q有些服务直接由daemon程序一直运行q有些服务通过inetd提供nInetdq它的职责是监听大范围内的网络端口,根据进来的请求动态启动相应的服务daemon节约资源q在Linux上,其实大多数inetd服务并不是必需的,虽然,这些服务本身有一定的安全认证能力,但是为了安全起见,应该关闭这些服务q如何配置inetd?n编辑inetd.conf每行格式: n通过/etc/services文件,可以查到每个service的端口和协议类型n停止inetd进程,并重新启动inetd.conf配置文件/etc/servi

29、ces配置文件n只影响inetd启动的网络服务,由其他脚本(例如rcN.d)启动的服务可能不受影响TCP wrappersn在Linux中为/usr/sbin/tcpd,用法nTCP wrapper使得系统可以在请求登录或者输入口令之前拒绝进来的连接nTCP wrapper的两个配置文件q/etc/hosts.deny 满足条件则拒绝q/etc/hosts.allow 满足条件则允许q配置规则:service :host(s) :action n两个工具qtcpdchk, 检查配置文件有没有错误,是否与其他文件冲突qtcpdmatch, 模拟规则是否如期起作用日志、syslogdnsyslog

30、d是一个专门用于记录日志信息的服务n配置文件/etc/syslog.confq可以记录本地日志,也可以记录远程的日志信息q可以指定把什么样的日志消息记录到哪个文件中Linux的内核防火墙n协议栈在IP层上调用三个函数,防火墙的功能将在这三个函数中实现:qip_rcv():接收qip_forward():转发qip_output():发送n 三条规则链qInput链qOutput链qForward链Linux内核支持的NATLinux内核防火墙的发展n从ipfwadm - ipchains - netfilternNetfilter是2.4内核中实现网络安全功能的通用框架q在框架中,定义了5个钩

31、子q在每个钩子上可以挂接多个模块qIptables模块挂接在LOCAL_IN、FORWARD、LOCAL_OUT上q提供多种功能n包过滤防火墙n地址转换NATn网络状态检测nPre-routeForwardRoutePost-RouteLocal-inRouteLocal-out针对Linux的攻防技术nLinux平台上有大量的黑客工具,而且往往以源码方式发布,所以,学会编译和使用这些工具,可以在攻击对抗中发挥作用n探查信息q用nmap可以查到Linux的版本信息n改变Linux的协议栈行为,可以掩盖这些信息q许多早期的标准TCP/IP服务,可以暴露系统的内部信息,比如finger,还有一些基

32、于RPC的服务n尽量关闭不必要的服务q一些服务的欢迎界面,比如服务n修改这些服务的配置信息口令破解n如何获得Linux的口令文件q口令文件的格式是公开的q口令文件passwd中,如果口令移到了shadow中,则没有口令信息q有一些工具能够获得shadow文件的副本n破解程序qCrack 猜口令qJohn the Ripper 字典攻击,也可以穷举攻击qXIT 字典攻击,DOS程序qn对策q使用shadow, MD5q使用强口令q失败多次之后,帐号锁定q结合其他的认证技术q日志记录Linux数据驱动攻击n目标:获得root权限n两种类型q缓冲区溢出攻击n通过缓冲区溢出,植入恶意代码,获得一个shell,可以是远程的shell,也可以是本地的q输入验证攻击n对于输入没有合理地检查,导致执行破坏性的代码(命令或者脚本等)n在Web服务中比较多见,缺乏对于输入数据的语法检查n对策:加强编程中的安全意识。由用户输入的脚本代码,或者在脚本代码中要用到用户输入的数据,则一定要检查输入数据不会危害整条语句Linux的X及其他n针对X的攻击qX的功能太强大,一旦获得X的服务器访问控制权,则可以为所欲为qX的认证机制n基于主机的认证,脆弱n基于token交换的认证q对策:关闭X服务n其他攻防技术q木马技术q网络监听技术qNFS不安全性q检查SUID程序的安全性q日志记录q一次针对Lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论