カテゴリ: ソフトウェア保護
アプリケーションは、どれくらいセキュアにしますか?
「コンピューター上で実行されるものはすべて、ハッカーに狙われる可能性があります。ハッカー達は、通常のコードと同じようにセキュリティメカニズムを簡単に理解し、攻撃を仕掛けてくるでしょう。」これは事実かもしれませんが、これに対しソフトウェア開発者は何をすべきなのでしょうか。
以下、3つの選択肢が考えられます。
- 対策する意味を見出せず、コピー保護やライセンシングなどの対策を一切使用しない
- CodeMeterによって、ハッキングの手間をコードをゼロから書くのと同じくらいの労力にする(ハッカーは、ソフトウェアの動作を理解可能)
- 重要なコードをCmDongleへ移し、ハッカーから離れた場所で実行
第1の選択肢:何もしない
上記の1つ目の選択肢は、最悪のシナリオです。「海賊版によってMicrosoft社は大きく成長した」という昔の噂は、誤解を招くだけでなく、全くの嘘に過ぎません。Microsoft社の真の成功要因は、IBM社のPCに同社のオペレーティングシステム(OS)をバンドルしたことです。また、複雑で使いにくいOSが多かった、当時の市場の性質も影響しています。つまり、まず普及することで人気が拡大し、その結果として海賊版が出てきました。このように、セキュリティメカニズムは年々向上しており、さまざまな技術/アプローチ(例:認証によるアクティベーション、BIOSに保存されたシリアルナンバー)があります。
中小企業にとって、「何もしない」戦略は、企業の存続を脅かす可能性があります。研究/調査から、最大の損失要因は、ライセンシング条件の無視、意図しないライセンス違反だとわかっています。これは、主に欧州や北米で商用利用されているビジネスソフトウェアに当てはまります。市場には無数のライセンシングモデルが存在するため、管理者が混乱して実際に支払った金額以上のライセンスを持っていると思い込んでしまうのも無理はありません。シンプルな技術的対策だけで、ソフトウェアの正当な収益化を保護することができます。
ハッカーピラミッド
ハッカーは、スクリプトキディ、ホビーハッカー、プロフェッショナルハッカー、そしてトップハッカーの4つのタイプで構成されています。スクリプトキディの多くは、googleで検索してハッキングの手法や既製のハッキングを見つけています。しかし、他の上位ハッカーは、ダメージを与え、ハッキングを販売することで不正に利益を得ています。彼らの動機は、ただ単に利益です。「どのハッキングを一番多く/高く/少ない労力で売ることができるか?」これが重要です。2人の登山者と熊の話に喩えてみましょう。熊に遭遇した2人の登山者が走り出しました。一人の登山者がランニングシューズを履こうと立ち止まると、もう一人の登山者はこう言いました。「そんなものを履いても、熊より速く走れないよ。」これに対して、ランニングシューズを履いた登山者は「熊より速く走る必要はない。あなたよりも速く走ればいいだけ。」と言いました。
ソフトウェアの保護についても同様です。完璧である必要はなく、個々のソフトウェアの価値や魅力に見合ったものであるべきです。標準より少し優れているというだけで十分です。CodeMeterでは、AxProtectorを使用することで、この点をクリアすることができます。
第2の選択肢:手間をかける
2つ目の選択肢では、ハッカーに可能な限り手間をかけさせます。ハッキングの自動化は不可能であり、あるクラックを知っていたとしても、別のクラックを発見できる保証はありません。
ソフトウェア開発者は、ソフトウェアを複雑にすることで、恩恵を受けることができます。ハッカーは、CPUで実行されるものは全て分析できるかもしれません。しかしまずは実行する必要があります。一般的なビジネスアプリケーションで使われる機能は、全体の10〜20%であり、実際に実行されるコードは、ごく一部です。つまり、ハッカーによるコードの実行状況の監視は困難であり、コード全体を完璧に実行する方法を見つけ出さなければなりません。但し、その方法を見つけたならば、テストスイートのトップになれるため、ハッキングで生計を立てる必要はなくなります。
コピー保護とライセンシングは、コード上の必要な場所で機能する必要があります。そのための戦略として、ライセンスラッパークラスの作成が考えられますが、このクラス呼出しのリピートはかえって逆効果になります。ハッカーは、そのライセンスラッパークラスのコードを分析/理解し、置き換えができてしまうためです。また、AxProtectorでクラスを暗号化しても、この問題の本質は解決せず、偽りのセキュリティが提供されるだけです。そこで、より良い選択肢として、AxProtector .NETやIxProtectorが挙げられます。コード内の関数を可能な限り暗号化することで、ハッカーはソフトウェア全体の実行を迫られます。トラップの追加により、ハッカーが実行に失敗した際の、CmDongle/CmActLicenseのロック、自動コード解析の防止も可能です。このタイプの統合に関する詳細はKEYnote34を参照してください。
第3の選択肢:CodeMoving
3つ目の選択肢では、コードをCmDongleへ移し、安全な環境で実行することで、最適な保護を実現します。これにより、ハッカーからは何も見えなくなります。
この機能は、シリアルナンバー3-xxxxxxおよびファームウェアバージョン4.03のCmDongleで利用可能です。現在は、C言語で書かれたコードに限定されていますが、今後、Javaや.NETのコードにも拡大される予定です。この選択肢で考慮すべき重要な点が一つあります。それは、「適切なコードの選択」です。あまりにも普通だと、出力を見ただけで内部構造が推測できてしまいますし、一方で複雑すぎると、操作が煩雑化、または制限サイズ3kBを超えてしまいます。また、シングルユーザー用のドングルのみで使用してください。
この機能の最も優れた点は、CmDongleで実行するコードフラグメントを必要な数だけ作成できることにあります。コードを移動するために、アプリケーションはAxProtectorで暗号化され、移動するすべての関数は、AxProtectorでコンパイル、アプリケーション内で暗号化されます。また、ブロックは、CmDongleへ移動、復号、そして正しい入力パラメータで実行され、出力パラメータがアプリケーションへ返されます。
CmDongleには、いくつかのアシスト機能がインストールされており、暗号化機能(例:AES、SHA)を直接使用することが可能です。また、データは一時的に保存され、次の関数の呼出し時に再利用することができます。隠蔽データにもアクセス可能ですが、セキュリティ上、コードフラグメントが暗号化されたプロダクトアイテムの中に限定されています。
セキュリティレベルの選択
CodeMeterでは、アプリケーションのセキュリティレベル(例:意図的/不注意なライセンス誤用を防止するシンプルなライセンスチェック、CmDongleでのコードのセキュアな実行)を自分で決めることができ、個々のニーズを満たすことが可能です。
KEYnote 35 – Edition Spring 2018