作业课程: | https://edu.cnblogs.com/campus/besti/19attackdefense |
---|---|
作业要求: | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635 |
课程目标: | 学习《网络攻防技术与实践》教材第八章,并完成课后作业 |
本次作业实现目标: | 学习Linux操作系统安全攻防 |
作业正文:
1 知识点梳理
1.1 Linux操作系统系统结构
进程与线程管理机制:Linux内核采用抢占式多用户多进程(multiprocessing) 模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护--个进程控制块(PCB) 结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。
内存管理机制:Linux内存管理模块(MM)允许多个进程安全地共享物理内存区域。Linux 的内存管理支持虚拟内存,在32位的i386机器上,每个进程拥有独立的4GB虚拟内存空间,内核的代码与数据段被映射到3GB以上的空间,而用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符来分别访问内核态和用户态的内存空间,在用户态中,代码不可能访问3GB以上的地址空间,如果要访间内核空间,必须通过系统调用或者中断。内存管理模块为进程提供内存分配、内存回收、请求分页和交换页等系统调用服务。
文件系统管理机制:Linux内核使用了虚拟文件管理VFS
(Vitual File System)机制,从而使得它能够支持数十种不同类型的逻辑文件系统,包括ext2/ext3/ext4
、vfat
. ntfs
等,通过设备驱动程序访间特定硬件设备(如磁盘设备),而VFS
虚拟文件管理为用户进程提供了一组通用的文件系统调用函数(包括open
. close
. read
. write 等),可以对不同文件系统中的文件进行统一的操作。
设备控制机制:Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序。Linux核心的设备驱动程序本质上是特权的、驻留内存的低级的硬件控制例程的共享库。
网络机制:Lmu内核中的网络模块提供了对各种网络标准的存取和各种网络银件的文持。
系统调用机制:Linux内核通过上述五个方面的机制实现了操作系统基本的硬件管理与系统功能,这些内核模块都运行在CPU的核心态,而应用程序则运行于用户态,它们并不能直接访问内核内存空间,也不能直接调用内核函数。Linux 提供了系统调用接口,来允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
Linux操作系统系统结构:
1.2 Linux操作系统安全机制
Linux身份认证机制:Linux是一个多用户多任务的操作系统,通过创建多种角色类型的用户及用户组来实施用户身份管理,来确保多个用户安全地使用Linux操作系统。
Linux本地登录用户认证机制:Linux系统最基本的用户认证机制即是对用户在控制台登录的认证过程,基本流程是:由init
进程启动getty
产生若千个虚拟控制台(如tyl
, tty2
等)。在控制台上显示登录,当用户敲入用户时,getty 执行登录(login) 进程,进入登录认证过程,认证成功后,登录进程会fork 相应用户Shell的子进程,至此完成登录过程,用户可以在对应的Shell下开始工作。
Linux远程登录用户认证机制:目前Linux系统普遍使用SSH服务来进行远程用户登录与网络访问,SSH提供两种方式的用户身份认证机制:第一种方式为基于口令的身份认证,使用Linux系统内建的用户账号和口令,就可以登录到远程主机上:第二种方式为基于非对称密钥的身份认证,需要用户为自己创建一对非对称密钥,并把公钥放置到需要访问的服务器上,在连接SSH服务器时,客户端软件就会向服务器发出请求,请求使用证书方式进行身份认证,服务器收到请求之后,就使用请求用户的公钥加密“质询”并把它发给客户端软件,客户端软件收到“质询”后就可以使用私人密钥进行解密,再发送给服务器端,完成基于非对称密钥的身份认证过程。基于非对称密钥的身份认证机制能够有效地抵御会话劫持中间人攻击,较基于口令的认证机制更具安全性。
Linux统一身份认证中间件PAM:,Linux 系统中提供了PAM
(Pluggable Authentcation Modules:可插入身份认证模块)作为一种验证用户身份的灵活与标准方法,通过提供一些动态链接库和一套统一的API,能够给不同的应用软件、网络服务提供统一的身份认证机制, 将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式而无须更改服务程序,同时也便于向系统中添加新的认证手段,如智能卡身份认证机制等。系统管理员通过PAM配置文件(即/etc/pam.conf
或/etc/pam.d/
)来制定身份认证策略,即指定什么服务该采用什么样的认证方法:应用服务开发者通过在服务程序中使用PAM API来实现对认证方法的调用:而PAM服务模块的开发者则利用PAM SPI ( Service Module API)来编写认证模块,将不同的认证机制(如传统的UNIX认证方法
、Kerberos
、智能卡认证
等)加入到PAM中间件中: PAM核心库(libpam) 则读取配置文件,以此为根据将服务程序和相应的认证方法联系起来,为整个Linux系统的各种服务来提供身份认证服务。
Linux授权与访问控制机制:Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持,并同时通过设备文件类型来统一集成对其他类型系统资源的管理。
Linux安全审计机制:主要通过三个日志子系统来实现:
- 1.连接时间日志:由多个程序执行,把记录写入到
/var/log/wtmp
和/var/run/utmp
,login
等用户登录程序负责更新wtmp
和utmp
文件,使系统管理员能够跟踪谁在何时登录到系统。 - 2.进程统计日志:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件(
pacct
或acct
)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。 - 3.错误日志记录,由通用的日志记录服务
syslogd (8)
执行,各种系统守护进程、用户程序和内核通过syslog
向文件/var/log/messages
报告值得注意的事件。
2 实验内容
2.1 Linux系统远程攻防技术
Linux系统攻击流程:
针对Linux系统的攻击也遵循着系统攻击统一的逻辑流程: 攻击者首先利用踩点、扫描和查点等技术手段来收集关于目标Linux系统的信息,然后攻击者从远程网络发掘某个监听网络服务中的安全漏洞或配置弱点,来获取本地Shell访问权,而一旦获得Shell访问权,攻击者就已经在目标Linux系统上获得了立足之地,而转入本地攻击的环节,通常会利用各类提权技术获取Linux系统最高的Root用户权限,之后就可以根据他们的入侵意图而为所欲为了。
远程网络入侵Linux系统主要方法:
●对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统。
●发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中注入攻击负载模块代码进行执行,从而为攻击者提供本地Shell的访问权。
●通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向攻击者打开Linux系统的大门。
●在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权。
远程口令字猜测攻击:
主要针对SSH
、telnet
、FTP
、HTTP
等服务的口令猜测攻击时互联网所面临的攻陷系统最普遍的攻击模式,这些协议都是使用了Linux系统内置的用户名和口令,同时HTTP/HTTPS
,FTP
,SNMP
等网络服务也拥有自己的用户账户体系和身份认证机制,攻击者也可以获取本地访问权。
远程渗透攻击:
主要通过监听网络服务安全漏洞,Linux的安全漏洞生命周期有一些显著特点:黑客们主要使用一些源代码安全审计的技术与辅助工具,又由于其开源性,漏洞发现和补丁修复的往往更为迅速,但是这些漏洞也可能在第一时间无法上报。
针对网络服务远程渗透攻击的安全防范措施:
- 1.禁用所有不必要的网络服务;
- 2.尽量选择更安全的网络协议与服务软件,并使用最佳安全实践进行部署;
- 3.及时更新网络服务版本;
- 4.使用xinetd、防火墙为Linux网络服务添加网络访问控制机制;
- 5.建立入侵检测与应急响应计划流程。
Linux客户端程序和用户攻击:Linux最常用的客户端不外乎Web浏览器和电子邮件客户端,一般为Mozilla基金会
提供的Firefox
“火狐”浏览器和Thunderbird
“雷鸟”电子邮件客户端。
攻击Linux系统用户:有些攻击者还会通过对服务器管理员进行Google Hacking获取管理员各方面的信息,比如发送电子邮件地址、电话、即时通信账号等。
Linux路由器和监听器攻击:在进行路由转发或者数据包嗅探时,所遭受的特殊数据包攻击,如之前实现路由与包过滤的netfilter/iptables
,以及用于网络入侵检测和防御的Snort
。
攻击监听器&入侵检测器:Linux系统上用来实施监听与入侵检测的主流开源软件包括Libpcap抓包库
、tcpdump命令行程序
、Wireshark网络监听与协议分析软件
、Snort入侵检测系统
。
动手实践:使用Metasploit进行Linux远程渗透攻击
任务:使用Metasploit
渗透测试软件,攻击Linux靶机上的Samba
服务usermap_script
安全漏洞,获取目标Linux靶机的主机访问权限。实践步骤如下:
实验步骤:
- 1.启动Metasplot软件,可根据个人喜好使用
msfconsole
.msfgui
.msfweb
之一:
- 2.使用
exploit: exploit/multi/samba/usermap_ script
渗透攻击模块:
- 3.选择攻击
PAYLOAD
为远程Shell, ( 正向或反向连接均可):
- 4.设置渗透攻击参数(
RHOST
,LHOST
,TARGET
等):
- 5.执行渗透攻击:
- 6.查看是否正确得到远程Shell,并查看获得的权限,这里使用
whoami
命令来查询当前用户:
2.2 Linux系统本地安全攻防技术
Linux本地特权提升:
攻击者在得到本地受限用户访问权之后,最简单的特权提取是破解Root
用户的口令,然后执行su
或sudo
命令进行提升。早期Linux系统可以使用/etc/passwd
配置文件进行用户身份认证并将口令密文保存在该文件中,而这文件对普通用户也是可读的。第二种特权提升是发掘并利用su
或sudo
程序中的安全漏洞,第三种也是目前最为流行的是对那些具有Root
特权程序中的任意代码执行漏洞,使之打开具有Root
权限的Shell
命令行连接。
Linux用户口令破解:
/etc/shadow
口令字密文文件:
以root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
为例,其结构为:
root
:登录名是与/ete/passwd文件中的登录名相-致的用户账号。
$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.
:口令存放的是加密后的用户口令字,如果为空或“!”,则对应用户没有口令,登录时无须口令:如果为“*”,则表示对应的用户不能从终端登录,一般应用于服务账户,$1表示MD5哈希算法。
14747
:最后一次修改时间表示从某个时刻起,到用户最后一次修改口令时的天数。
0
:最小时间间隔是指两次修改口令之间所需的最小天数。
99999
:最大时间间隔是指口令保持有效的最大天数。
7
:警告时间字段表示从系统开始警告用户到用户密码正式失效之间的天数。
以及未配置的不活动时间表示用户没有登录活动但账号仍能保持有效的最大天数,以及失效时间字段给出一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
利用用户态SUID程序漏洞进行特权提升:在Linux系统中,每个进程都拥有真实UID
( real user ID)与有效UID
( efective user ID),真实UID
初始是运行该进程的用户ID,而有效UID
则是指进程当前实际继承权限的用户ID,主要用于校验权限时使用,比如打开文件、创建文件、修改文件、kill 别的进程,等等。在普通用户身份运行进程的情况下,进程的有效UID
与真实UID
是一致的,但在某些情况下可以被变更,从而获得更高的权限去执行一些特殊的操作。这种特殊情况就是程序被设置了SUID特殊权限位
,一旦设置了SUID位
之后,再执行这个程序时,那么运行进程的有效UID
就变成了该程序的所有者用户ID
, 如果程序所有者用户为Root
, 那么该进程就实际,上具备了Root
的特权权限,可以执行一些需要Root
特权的操作,这里更改口令的是passwd
,该命令有SUID权限
,当普通用户使用时,会议该命令所有者Root
的身份作为进程的有效用户ID
进行执行,此时也就可以将密码写入/etc/shadow
文件。
SUID程序的本地缓冲区溢出攻击:全攻防技术中进行详细讲解。在本地利用时,大多数情况下,缓冲区溢出攻击大多是以设置SUID权限位
且所有者用户为Root的程序
,从而能够在溢出之后通过向目标程序中注入攻击者恶意构造的攻击负载代码,以Root用户权限
来执行命令给出Shell
。
SUID程序的竞争条件攻击:竞争条件漏洞通常由于一些程序软件并没有遵循操作的原子性特性而存在,在进程操作某个信号量时,可能由于其他进程同时对其操作而造成不可预期的后果,比较普遍的是被称为TOCTOU
(timeof-check-to-time-of-use) 的一种漏洞,即程序在检查某一条件和使用检查结果的时间中间存在着一些延迟,而在这个时间窗口中,攻击者可能在另外进程中对已经通过检查的条件进行更改,使得攻击目标程序在使用时所操作的对象已经被变更了。
Linux系统日志抹除:改变当前活动日志,以防止系统管理员注意到攻击者当前的登录活动,在/var/log
目录下攻击者往往需要改动messages
. auth
. secure
. wtmp
和xferlog
等日志文件,对于文本格式的文件,使用vi
、emacs
等文本编辑工具就可以进行日志清理操作,而对于记录了用户登录记录的wtmp二进制文件
,攻击者往往会用.wzap
, 专用工具从wtmp日志文件
中去除指定用户的日志项,从而进行登录日志清理。
Linux系统远程控制后门程序:常见远程控制后门程序的类型主要有特洛伊木马化的系统程序、命令行后门工具以及图形化后门工具。特洛伊木马化的系统程序是始终接受攻击者所配置的账户进行登录的后门程序。命令行后门工具如Netcat
可以开放监听一个TCP端口
,用以监听连接请求。
3.实践作业
攻防对抗实践:
攻击方使用Metasploit
渗透软件针对Linux Metasploitable
靶机实施网络攻击,防御方则在Metasploitatble
.上使用tepdump
或Wireshark
或Snort
工具捕获攻击流,并分析出攻击者利用了哪个安全漏洞进行攻击,从官方网站上下载该安全漏洞补丁进行系统修补,双方合作给出攻防过程报告。
●攻击方:使用Metasploit
, 选择Metasploitable
靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限
。
●防守方:使用tcpdump/wireshark/snort
监听获得网络攻击的数据包文件,并结合wireshark/snort分析攻击过程,获取攻击者IP地址、目标IP和端口、攻击发起时间、攻击利用漏洞、使用Shellcode,以及成功之后在本地执行命令输入等信息。
●团队合作完成渗透攻击与分析实验报告。
- 1.使用nessus扫描目标靶机,参考选择UnrealIRCd Backdoor Detection漏洞,漏洞编号为CVE-2010-2075,通过Metasploitable进行漏洞攻击,获取root权限,目录和IP信息:
- 2.在攻击机开始攻击后用wireshark进行监听,首先是两条数据包是arp广播和回复,然后TCP数据包建立三次握手,我们可以看到攻击者IP地址192.168.200.7和端口60890,目标IP192.168.200.13和端口6667、攻击发起时间Apr 21, 2020 00:01:58:
- 3.可以通过追踪数据流查询到进入目标靶机shell时的操作,查询了当前目录,IP信息和用户信息:
-
4.该漏洞标号为
CVE-2010-2075
,该漏洞利用远程IRC服务器是UnrealIRCD的版本,带有后门,分布于某些镜面站点的UnrealIRCd,在DEBUG3_DOLOG_SYSTEM宏中包含外部引入的修改(特洛伊木马),远程攻击者可执行任意命令。 -
5.shellcode
4.学习中遇到的问题及解决
- 问题1:linux靶机exploit session建立失败
问题1解决方案:一开始用的Metasploitable ubuntu一直无法嗅探成功,可能该靶机没有这个漏洞,想起还有另一个Metasploitable2的linux靶机,但是导入时发现文件已经破损,无奈从官网上重新下载了一个,然后问题就解决了。
5.学习感悟和思考
本次学习内容主要为Linux操作系统的操作系统安全攻防,和之前windows操作系统的攻防实践比较类似,感觉对于漏洞检测和嗅探的技术还掌握的不够。