18

私は、特別な銀行から当社に提供された POS プロジェクトに取り組んでいます。銀行は、USB ポートを介して POS とやり取りする DLL を提供しています。.NET C# 言語で記述された DLL を追加しました。相互運用性の問題が存在します。DLL 内に と呼ばれるメソッドがあります。DebitAndShareTheAmountこのメソッドには 2 つの主要なパラメータがありますP1,P2

P1は平文の金額であり、平文で再度P2差し引く必要がある金額です。したがって、//を呼び出すと、実際には私のアカウントに 1000-10=990 ドルの銀行貸方が行われ、私のアプリを使用しているショップには 10 ドルが支払われます。P1DebitAndShare(1000,10);

問題は、C# プログラミングの基本的な知識があり、その SHOP のコンピューターにアクセスできる人なら誰でも、Visual Studio をインストールしてその DLL を使用し、DebitAndShare メソッドを呼び出すことができるということです。実際、私たちのアプリはサービス プロバイダーとして機能し、全国の特別なショップでは、ショップの所有者は、アプリで利用可能なサービスを顧客に提供することで支払われ、その金額 (10 ドル) を受け取ります。先ほど述べたセキュリティの問題について、POS 開発者とミーティングを行う予定です。

私は MCTS の本を読み、本のセキュリティ セクションで、銀行の DLL がPublisherIdentityPermission(SecurityAction.InheritanceDemand, CertFile=@"SomeCert.cer")DebitAndShare メソッドの前に属性を使用し、このメソッドを Protected としてマークすると、1 つのレベルのセキュリティを持つことができることがわかりました。それは正しいですか? また、銀行が暗号化アルゴリズムのアプローチを提供してくれれば、それで十分だと思います。

4

4 に答える 4

1

あなたがしようとしているのは、アプリがクラックされるのを防ぐことです。これは、以前に直面したライセンスの問題に似ています。コミュニティから優れた解決策は得られていませんが、いくつかの良い提案しかありません。ここでのポイントは、どのような方法であってもユーザーがアクセスできるマシンでコードを実行している限り、常に影響を受けやすく、コードの難読化はそのままにしておく必要があります。あなたのアプリケーションをいじることの収益性から判断すると、多くの決定的な人がいるでしょう(唯一のことは、彼らがそれを行うことができることを知る必要があり、スキルを持つ人を見つけるでしょう).

ここでは悲観主義者のように聞こえるかもしれませんが、それは厳しい真実です。

私によると、クラックされる可能性が高いコードの部分を中央サーバーに移動し、それらのメソッドを Web サービス呼び出しとして公開するのが最善の方法です。これでも完全に安全ではないことはわかっています。最近の Apple アプリ ストアのハッキングを思い出してください。すべてのベスト プラクティスに従っていることを確認し、他の誰よりも早くシステムの亀裂を見つけられることを願っています。

于 2012-08-11T08:13:46.220 に答える
0

関数がPINのようなものを受け入れて、関数が銀行データベースを呼び出してPINが正しいことを確認するようにすることができます。そうすれば、少なくとも誰かがアクセスを取得した場合、最初にpin引数を無効にする必要があります。

また、Gabeのアプローチに従って、システムにアカウントをデバイスにマップさせ、登録されたデバイスからのみ機能にアクセスできるようにすることもできます。また、ソースコードが銀行のコンピューターではなく、銀行の金庫室/貸金庫のストレージデバイスに保存されるようにすることもできます。それから人はそれを手に入れるために実際に銀行を奪わなければなりません。二重の手段として、デバイスのパスワードを暗号化/設定して、復号化アルゴリズム(銀行のシステムでは、強盗が戻る可能性が低い)または既知のパスワードのみがソースコードを抽出できるようにします。

それがうまくいかない場合、私にはこれ以上賢明な考えはありません(ごみ箱にソースを保持するか、核バンカーにソースをロックすることが賢明であると見なされない限り)。

于 2012-08-06T12:47:28.040 に答える
0

コメントが示すように、これを確保するのに深刻な問題が発生します。ただし、少なくとも役立ついくつかのアプローチが思い浮かびます。

  1. スタックを歩きます。コールサイトで、現在のスタックを見て、上に戻ります。期待したものとは異なるものを見つけたら、失敗してください。これは絶対確実ではありませんが、熟練していない人やソースコードを見ることができる人を止めることができます.

  2. SecureString と外部シークレットを使用します。これには、どこかから安全な値を取得する何らかの手段が必要です。それができたら、データを暗号化/署名して、(証明書またはその他のメカニズムを介して)改ざんされていないことを確認できます。デバッガー (WinDBG のようなもの) は引き続きそれを壊すことができますが、それほど簡単ではありません。

  3. コードを C++ で再ビルドします。マシン コードを見つけるのは難しくなりますが、それでも Windows の内部構造を知っている人なら問題ありません。

アプリを保護して海を空にしようとする代わりに、いくつかの対策を講じてから、銀行が行うことを行うことができます. 意味をなさないパターンを探します。特定の POS が通常 100 のオーダーの値を生成する場合、大口注文または小口注文が表示されたときに、レビューのためにフラグを立てます。突然の取引増加?同じこと。

技術的な解決策は別として、あなたの最善の策 (私見) は、ショップが部分的に詐欺のフックにかかっていることを確認することです. お金が流れていると、人々は、誰がコンピュータにアクセスできるかについて、もう少し注意を払うようになります。

エリック

于 2012-07-04T01:42:30.083 に答える
-2

遅延署名を使用する必要があります。銀行の権限を与えられた担当者が、正し​​く署名された dll をデバイスに展開します。銀行は秘密鍵で署名します。

これを介したすべての呼び出しは本物であり、他のすべての呼び出しはハッキング要求です。

于 2012-07-06T10:49:48.397 に答える