2016-07-04 16 views
0

ここに示すように、Programmatic MSIL injectionまたはhttp://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-timeでは、トリッキーな注入を使用して実行時にILコードを変更することができます。MSILランタイム注入を防ぐにはどうすればいいですか?

私の質問です:それを防ぐには?たとえば、誰かがセキュリティ機能をバイパスするためにそれを使用する場合、どうすればそのセキュリティホールを回避できますか?

+4

この質問には根本的に欠陥があります。 MSILを変更してセキュリティ機能をバイパスすることができる場合は、MSILを変更せずに同じセキュリティ機能をバイパスすることもできます。どのセキュリティ機能を念頭に置いていますか?それについての詳細を記入すると、バイパスが完全に防止される方法、またはバイパスが完全に防ぐことができない理由を回答で説明することができます。 – hvd

+0

興味深い質問、なぜこのような措置を防ぐことを唯一の目的とする企業があるのか​​を歓迎します。私は答えはありませんが、約15年前、私は様々な悪意のある目的のためにSoftICEデバッガのクラッキングソフトウェアで楽しい経験をしていました。私が学んだ教訓は、「彼ら(私たち)は常に方法を見つけます!」です。最近はますます難しくなっていますが、正当なユーザーを迷惑にすることと悪いことを防ぐこととのバランスがすぐになります。 –

+1

正確に何を防ぐ?マシン上で任意のコードを実行したり、バイナリを変更したりする能力あなた自身のサーバー上でコードを実行することは、例えばログイン目的のために、Xbox/PS –

答えて

1

これを防止する方法は?

私が理解できる限り、とは限りません。しかし、あなたはそれを簡単にすることはできません。

単純なケースでは、ILを注入する必要はありません。 IL編みを行ってアセンブリを変更することができます。たとえば、ログインメソッドantを見つけて元のILコードを削除し、単にtrueを返すか、自分のログインメソッドにジャンプすることができます。

public bool Login(string userName) 
{ 
    // original method did security checks 
    // and return true if the user is authorized 
    // your implementation can return true or jump to other method 
} 

これは、アプリケーションが実行されていないときに行う必要があります。アセンブリ自体を変更する必要があります。あなたはmono.cecilでそれを行うことができ、例えばStaticProxy.Fodyを見ることができます。

もう1つのケースは、実行中のアセンブリにコードを注入する場合です。この2つの場合に分割される:

  1. コードは、コードが最初のケースで\ ngen'd

JITコンパイルされている場合、より容易

  • あるngen'd \ JITコンパイルされていない場合、あなたはまだ各メソッドのILを持っていて、独自のIL命令を注入します。

    ジッタがILポインタをマシンコードにリダイレクトするため、2番目のケースはより複雑です。

    2人のために、注射作業を行うために記事\ librarisの束を見ることができます。

    しかし、あなたはしかし、注入することを不可能にしても、あなたはまだ保護されていません。バイト自体を変更できるためです。詳細はthis articleを参照してください。

    上記のすべての方法では、作業が複雑になる場合があります。たとえば、GenericsのDynamicMethodsは、プロセスへのロード・アセンブリを防止します(場合によっては必要です)。

    要約すると、コードを挿入するのは非常に難しくありませんが、防ぐことはできません。

  • +0

    "IL編みを行ってアセンブリを変更することができます。たとえば、元のILコードを削除するログインメソッドを見つけることができます単にtrueを返すか、独自のログイン方法にジャンプすることができます。いいえ、私のアプリケーションは不正行為によって保護されているためです。私のログインシステムをバイパスする唯一の方法は、実行時にMSILを注入することです。そして、私は自分のプログラムをかなり簡単にクラックしたので、可能です。私が探しているのは、自分のプログラムをランタイムインジェクションから保護する方法であり、インジェクションそのものではありません。しかし、お返事ありがとうございます。 –

    +0

    @JacquesMartin私はあなたが何を検索するのか理解しています。私の答えは、あなたがAFAIKすることはできないということです。私はその理由を説明しました。どのようにして注射から守ることができるか、誰かが答えるなら、私はとても幸せになれます。 –

    関連する問題