Hacker Shell 的魔力:覆盖 Linux 服务器上的操作痕迹
使用 shell 脚本来控制、破坏或获取 Linux 服务器上的任何东西。黑客可以通过巧妙的攻击方法获得巨大的价值,但大多数攻击也是留下痕迹。当然,这些痕迹也可以使用shell脚本等方法来隐藏。 ![]()
搜索攻击证据从攻击者留下的痕迹开始,例如文件修改日期。每个 Linux 文件系统上的每个文件都存储一个修改日期。系统管理员可以找到文件的最后修改时间,这会提醒他们系统受到攻击并采取措施锁定系统。幸运的是,周转时间并不是一个绝对可靠的记录。编辑时间本身可以被伪造或编辑。通过编写 shell 脚本,攻击者可以自动执行备份和恢复编辑时间的过程。
使用步骤
第一步:查看和处理时间戳
大多数Linux系统都包含允许我们快速查看和编辑时间戳的工具,其中最有影响力的是“Touch”,它允许我们在创建新时间戳时使用Time文件和更新文件/文件组最后“触及”。
touch file如果文件不存在,执行上述命令将创建一个名为“file”的新文件;如果已存在,则此命令将修改日期更新为当前系统时间。我们还可以使用通配符,如下面的字符串。
touch *此命令会更新运行该命令的文件夹中每个文件的时间戳。创建和编辑文件后,有多种方法可以查看其信息,第一种是“stat”命令。
stat file正在进行的统计返回有关文件的一些信息,包括访问、修改或更新时间戳。如果是一批文件,可以使用ls参数查看每个文件的时间戳。使用“-l”或“long”。此命令显示文件信息,包括输出的时间戳。
ls –l您现在可以设置当前时间戳并查看设置的时间戳。您也可以点击 设置自定义时间戳。您可以使用“d”标志将日期设置为 yyyy-mm-dd,然后设置时间的小时、分钟和秒,如下所示:
touch -d"2001-01-01 20:00:00" file使用 ls 命令确认更改信息:
ls -l file此方法适合编辑单个时间戳。它在隐藏服务器活动痕迹方面不是很有效。可以使用 shell 脚本自动执行此过程。
步骤 2:组织 Shell 脚本
在开始编写脚本之前,您需要考虑需要执行哪些进程。要隐藏服务器上的轨迹,攻击者必须将文件夹的原始时间戳写入文件,并且能够在我们进行更改后返回到原始文件。
这两个不同的功能是根据用户输入或不同的参数启动的。脚本根据这些参数执行相应的操作。同时,我们需要一种处理错误的方法。根据用户输入执行三种可能的操作:
无参数 - 返回错误消息;
保存时间戳标记 - 将时间戳保存到文件;
恢复时间戳标记 - 根据保存列表恢复文件时间戳。
我们可以使用嵌套的 if 语句创建脚本,或者根据条件为每个函数分配自己的“if”语句。您可以开始在文本编辑器或 Nano 中编写脚本。
步骤 3:启动脚本
从命令行启动 nano,并使用以下命令创建一个名为“timestamps.sh”的脚本:
nano timestamps.sh然后运行以下命令:
#!/bin/bash
if [$# -eq 0];then
echo “Use asave (-s) or restore (-r) parameter.”
exit 1
fi按 Ctrl + O nano 保存此文件并使用 chmod 命令将其标记为可执行脚本。
chmod +x timestamps.sh然后运行脚本测试无参数时返回错误信息的功能。如果脚本返回 echo 语句,我们就可以继续执行下一个条件。
./timestamps.sh第四步:将时间戳写入文件
指定if语句的条件,“-s”表示执行保存操作:
if [$1 ="-s"] ; then
fi当然,你需要检查时间戳文件是否计划被拯救的存在。如果存在,您可以使用以下命令删除它(名为时间戳的文件)以避免重复或不正确的条目:
rm -f timestamps;然后使用“ls”命令列出所有可以打印的文件及其修改时间。到另一个程序(如 sed),以便我们稍后可以清理此输入。
ls –l通常会显示以下结果:
-rw-r--r-- 1 user user 0 Jan 1 2017 file要保存时间戳,我们只需要年月日和文件名。以下命令可以清除“一月”之前的数据:
ls -l file | sed 's/^.*Jan/Jan/p'我们显示此程序将月份格式更改为数字格式所需的信息:
ls -l file | sed 's/^.*Jan/01/p'将所有月份替换为数字:
ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;' 在文件夹中运行,我们可以看到结果如下图: ![]()
然后Output结果通过“>>”发送到名为“timestamps”的文件中:
do echo $x | ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;' >> timestamps至此,脚本的前两个功能就完成了,结果为显示如下: ![]()
您可以将下面的测试脚本标记为“-s”。 ,使用cat查看保存的数据:
./timestamps.sh –s
cat timestamps第五步:恢复文件的时间戳
保存原始时间戳后,需要恢复时间戳,以防止别人注意到文件被修改了。可以使用以下命令:
if $1 = "-r" ; thenfi然后使用以下命令将文本文件的内容传递进去并逐行执行:
cat timestamps |while read linedodone然后定义变量以方便访问文件数据:
MONTH=$(echo $line | cut -f1 -d );
DAY=$(echo $line| cut -f2 -d );
FILENAME=$(echo $line | cut -f4 -d );
YEAR=$(echo $line | cut -f3 -d ) 虽然这四个变量位于保存的时间戳文件中。一致,但如果时间戳发生在过去一年内,则仅显示时间,而不显示年份。如果我们需要指定当前年份,我们可以将年份指定为脚本,也可以从系统中检索年份并使用 cal 命令查看日历。 ![]()
然后获取第一行并仅显示您想要的年份数据:
CURRENTYEAR=$(cal | head -1 | cut -f6- -d | sed 's/ //g')定义了所有变量后,您可以使用“if else”语句根据格式化日期更新文件的时间戳touch语法:
touch -d "2001-01-01 20:00:00" file由于每次都包含冒号,因此可以使用下面的“ifelse”语句来执行该函数。整体操作如下图:
if [ $YEAR == *:* ]; then
touch -d $CURRENTYEAR-$MONTH-$DAY $YEAR:00 $FILENAME;
else
touch -d ""$YEAR-$MONTH-$DAY"" $FILENAME;
fi第六步:使用脚本
主要使用的命令如下:
./timestamps.sh –s 保存文件时间戳
touch -d “2050-10-12 10:00:00″ * 修改目录下的所有文件时间戳
ls –a 确认修改的文件
./timestamps.sh –r 恢复文件原始时间戳最后可以再次运行“ls -a”查看文件的时间戳是否正确与上次备份的时间戳一致。整个脚本的执行过程如下图: ![]()
总结
该脚本仅用于清理服务器被攻击后的一些痕迹。为了掩盖自己的踪迹,黑客需要仔细考虑对服务器进行某些攻击的所有方法以及在闯入服务器后如何隐藏自己的踪迹。
通过上面的介绍,我们了解到时间戳也会“说谎”,因此管理员需要意识到他们的许多日志和安全措施都可以被操纵,即使它们看起来很正常。
发布者:http://FreeBuf.COM 作者:JingleCats
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网