個人財務 C ++プログラミング:10アンチハッカーのヒント - ダミー

C ++プログラミング:10アンチハッカーのヒント - ダミー

目次:

ビデオ: Shimon Schocken: The self-organizing computer course 2024

ビデオ: Shimon Schocken: The self-organizing computer course 2024
Anonim

C ++プログラマーとして、ハッカーにとって脆弱なプログラムを書くのを避けるために、C ++コードで行うべきことを学ぶ必要があります。また、ASLR(Address Space Layout Randomization)やDEP(Data Execution Prevention)など、オペレーティングシステムでサポートされている場合に有効にできる機能についても説明します。

ユーザーの入力を前提にしない

プログラマーのトンネルビジョンは、開発段階初期段階で問題ありません。しかし、ある時点で、プログラマー(あるいは、コードの開発とは関係のない他のプログラマー)が座ってすぐに問題を忘れる必要があります。彼女は自分自身に尋ねる必要があります。「このプログラムはどのように違法な入力に反応しますか? "

<! - 1 - >

入力をチェックするためのいくつかのルールを以下に示します。

  • 入力の長さについて何も仮定しません。

  • 固定長バッファ(または可変長バッファを使用)に余裕のある以上の入力を受け付けないでください。

  • すべての数値の範囲が正しいことを確認します。

  • ハッカーがコードを挿入するために使用する特殊文字をチェックして除外します。

    <! - 2 - >
  • 生の入力をデータベースサーバなどの別のサービスに渡さないでください。

そして、リモートサービスから返される値について同じチェックをすべて実行します。ハッカーは入力側にいない可能性があり、応答側にいる可能性があります。

正常に処理できない場合

プログラムは、プログラム内で発生した障害に対して合理的に対応する必要があります。たとえば、ライブラリ関数の呼び出しによって nullptrが返された場合、 プログラムはこれを検出して妥当な何かを実行する必要があります。

<! - 3 - >

ここで合理的な はかなり自由に理解されるべきである。このプログラムは、関数が合理的なアドレスを返さなかった理由を正確に把握する必要はありません。不当な入力のために要求があまりにも多くのメモリのためであった可能性があります。または、コンストラクタが何らかのタイプの不正な入力を検出した可能性があります。

それは問題ではありません。要点は、ヒープのような既存のデータ構造をクラッシュさせたり破損させたりすることなく、プログラムをできるだけ元の状態に戻し、次のビットを設定することです。

プログラムログを維持する

セキュリティエラーが発生した場合に起こったことを誰かが再構築できるようにするランタイムログを作成して維持する。 (実際には、何らかのタイプの障害が発生した場合でも同様です)。たとえば、システムにサインインまたはサインアウトするたびにログを記録したいとします。

セキュリティイベントが発生したときに、誰がシステムにログインしたのかが分かります。これはセキュリティ損失のリスクが最も高く、犯人を探す際に最も疑わしいグループです。さらに、ほとんどの例外を含むシステムエラーをログに記録する必要があります。

実際のプロダクションプログラムには、次のような多数の呼び出しが含まれています。

log(DEBUG、 "User%sは正当なパスワードを入力しました"、sUser);

これは単なる例です。すべてのプログラムは何らかのタイプのログ機能を必要とします。実際にlog()と呼ばれるかどうかは重要ではありません。

良い開発プロセスに従います。

すべてのプログラムは、よく考えられた正式な開発プロセスに従うべきです。このプロセスには、少なくとも次のステップが含まれている必要があります。

  • セキュリティ要件を含む要件を収集し文書化する。

  • レビューデザイン。

  • コーディング標準を遵守します。

  • ユニットテストを受ける。

  • 元の要件に基づいた正式な合格テストを実施する。また、要件、設計、コード、テスト手順が高品質であり、企業基準を満たしていることを確認するために、主要なポイントでピアレビューを実施する必要があります。

優れたバージョン管理の実装

バージョン管理は奇妙なことです。バージョン1.を気にするのは当然ではない。あなたが銃の下にいて、バージョン1.0をドアから出して待っているユーザーの手を伸ばす手に入るときは、1。しかし、バージョン管理は重要なトピックであり、プログラムの初期設計に組み込む必要があり、後で実行する必要がないため、早期に対応する必要があります。

バージョン管理の1つの側面は、ユーザーが使用しているプログラムのバージョンを知ることです。ユーザーが電話して「これをクリックするとこれを行います」と言うと、ヘルプデスクは実際にユーザーが使用しているプログラムのバージョンを知る必要があります。彼は、現在のバージョンですでに修正されている彼のバージョンの問題を記述している可能性があります。

ユーザーを安全に認証する

ユーザー認証は簡単でなければなりません。ユーザーはアカウント名とパスワードを提供し、プログラムはアカウント名をテーブルで調べ、パスワードを比較します。パスワードが一致すると、ユーザーは認証されます。しかし、アンチハッキングに関しては、それほど単純ではありません。

まず、パスワードをデータベースに保存しないでください。これは、

を明確な に格納することと呼ばれ、非常に悪い形式とみなされます。ハッカーがパスワードファイルを手に入れるのはずっと簡単です。代わりに、パスワードの安全な変換を保存します。 リモートセッションを管理する

すべてのアプリケーションが1台のコンピュータで実行されていることを前提にすることができます。まず、ユーザーが自分自身を認証すると、彼が別の人に変身することを心配する必要はありません。リモートサーバーと通信するアプリケーションは、この前提を立てることはできません。ユーザーが自分自身を認証してからセッションを乗っ取るまで、リッスンしているハッカーは待つことができます。

このような状況を避けるために、セキュリティを志向するプログラマは何ができますか?あなたは、接続がハイジャックされていないことを確認するために、パスワードをユーザに繰り返し尋ねることは望ましくありません。別の解決策は、

セッションを確立して管理することです。 これは、ユーザーが自分自身の認証に成功したら、サーバーがリモートアプリケーションにセッションクッキーを送信させることによって行います。 コードを難読化する

コードの難読化

は、ハッカーができるだけ理解しにくいように実行可能ファイルを作成する行為です。 論理は単純です。ハッカーがコードの仕組みを理解することが簡単になればなるほど、ハッカーが脆弱性を理解するのが容易になります。

あなたが取ることができる最も簡単なステップは、デバッグシンボル情報を含まないプログラムのリリースバージョンのみを配布することです。最初にプロジェクトファイルを作成するときは、必ずDebugとReleaseの両方のバージョンを作成するように選択してください。

決して、これまでにシンボル情報を含むアプリケーションのバージョンを配布してはいけません。

コードに電子証明書で署名する

コード署名は、実行可能コードの安全なハッシュを生成し、有効な認証局が発行した証明書と組み合わせることで動作します。このプロセスは次のように動作します。プログラムを作成する会社は、最初に証明機関の1つに自身を登録する必要があります。

認証局は、My Companyが有効なソフトウェアエンティティであると確信すると、証明書を発行します。これは誰でもこの証明書の所有者がサンアントニオの有名なマイ・カンパニーであることを証明するために使用できる長い番号です。

必要に応じて安全な暗号化を使用

良い警告と同様に、この警告にはいくつかの部分があります。まず、「必要に応じて暗号化を使用してください。 「これは、インターネットを介して銀行口座情報を伝達する考えを思い起こさせる傾向がありますが、それよりも一般的に考えるべきです。

通信中のデータは、インターネット上であろうと、より小さな範囲内であろうと、一般に

動作中のデータとして知られている。 データは、ハッカーには役に立たない限り、暗号化する必要があります。 ディスクに格納されたデータは、

休止時のデータとして知られています。 このデータは、ディスクが紛失、盗難、またはコピーされる可能性がある場合にも暗号化する必要があります。ラップトップが空港のセキュリティスキャナーに盗まれたり、どこかのタクシーに預けられた場合に備えて、企業は自社のラップトップでハードディスクを定期的に暗号化しています。 サムドライブなどの小型ポータブルストレージデバイスは特に失われやすい - これらのデバイスのデータは暗号化する必要があります。

C ++プログラミング:10アンチハッカーのヒント - ダミー

エディタの選択

ASVABの準備:小数の使用

ASVABの準備:小数の使用

ASBABの小数を扱う方法を知る必要があります。小数は、分子と分母を使用せずに分数を書き込む方法です。小数点以下7分の10を10進数として書くことができます。あなたはそれを "7分の1"または "ゼロ点7"と発音します。小数点以下の桁数は小数点以下の桁数を示します。

ASVABサブテストの詳細 - ダミー

ASVABサブテストの詳細 - ダミー

テストの目的と目的によって、いくつかのバージョンのASVAB。 ASVAB(CAT-ASVAB)のコンピュータ化されたバージョンは、9つの別々の時間調整されたサブテストを含む。 CAT-ASVABでは、自動情報とショップ情報が2つの異なるテストに分かれていますが、それらはペーパーバージョンで組み合わせられています。 ...

ASVAB読書と朗読のヒント - ダミー

ASVAB読書と朗読のヒント - ダミー

あなたの能力を向上させるためのショートカットはありませんASVABの読解スキル(練習以外に)は、このパートでできるだけ高いスコアを取るために、テスト日にいくつかのことを行うことができます。あなたがこの小テストで時間を使い果たしている場合や、あなたが本物を特定できるかどうかがわからない場合...

エディタの選択

Excelマクロヘルプのための10の場所 - ダミー

Excelマクロヘルプのための10の場所 - ダミー

誰も1つのExcelマクロエキスパートになることはできません日。 VBAは時間と実践の旅です。良いニュースは、そこにあなたの道であなたを助けることができる豊富な資源があるということです。

5本当にクールなExcel関数 - ダミー

5本当にクールなExcel関数 - ダミー

この便利な関数をExcelの機能に追加すると、あなたはExcelマスターのそれ以上のものになるでしょう。簡単に乱数を生成するExcel RAND関数は0と1の間の数値を返します。それだけです。通常、返された数値を有用なものにマッサージする必要があります。 ...

Excel 2016でユーザー定義関数に説明を追加する - ダミー

Excel 2016でユーザー定義関数に説明を追加する - ダミー

ユーザーがカスタム関数の目的を理解している場合は、関数の機能の説明に役立つ[関数と関数の引数の挿入]ダイアログボックスに表示される説明を追加できます。このような種類の説明をユーザー定義関数に追加するには、Visual Basic Editorの特殊ウィンドウであるオブジェクトブラウザを使用します。

エディタの選択

Excelのテキスト文字列からスペースを削除する - ダミー

Excelのテキスト文字列からスペースを削除する - ダミー

余分なスペースを含むテキストに間違いなく遭遇します。これらの余分なスペースは、テキストの冒頭にあることがありますが、それ以外の場合は末尾に表示されることがあります。

Excelデータ分析アドインの回帰ツール - ダミー

Excelデータ分析アドインの回帰ツール - ダミー

回帰という用語は指数関数的な平滑化ほど悪くはないが、少なくとも数学的にはもっと複雑である。そのため、データ分析アドインの回帰ツールが便利です。アドインは、移動平均と指数平滑化の場合と同様に、数学の責任を負います。あなたはまだ...

Excel 2007ワークシートの名前を変更する - ダミー

Excel 2007ワークシートの名前を変更する - ダミー

Excel 2007がブックのタブ(Sheet1〜 Sheet3)はあまり説明的ではありません。幸いなことに、この記述的な名前が31文字以下であれば、ワークシート・タブの名前をワークシートに貼り付けたものを覚えやすくする名前に簡単に変更できます。