セキュリティに関する考慮事項は、ソフトウェア全般、特にブロックチェーンにおける他のすべての考慮事項よりも優先されます。セキュリティが失敗した場合、他に何も問題はありません。ブロックチェーンは、分散型の信頼できないトランザクションが機能することを証明していますが、それでも多くのブロックチェーンセキュリティの脆弱性が残っています.
セキュリティエクスプロイトは、設計およびアーキテクチャレベル、コーディング段階、および運用段階で存在します。そして、あなたが疑問に思っていた場合は、はい、ブロックチェーンはハッキングされる可能性があります.
ブロックチェーンセキュリティの脆弱性–ここから永遠へ
ダイヤモンドは永遠であり、スマートコントラクトは、それらが展開されているブロックチェーンが引き続き使用されている限り存続します。その結果、すべてのバグとブロックチェーンセキュリティの脆弱性も契約が存続する限り存続します.
通常、各ブロックチェーンは、スマートコントラクトを実装するための独自のプログラミング言語を提供します。よく見てみましょう.
スマートコントラクト言語
ブロックチェーン環境には、スマートコントラクトを開発するための独自の言語が含まれています.
たとえば、イーサリアムプラットフォームには、スマートコントラクトを作成するためのSolidity言語が含まれています。クリエイターは、Solidityをチューリング完全言語になるように設計しました.
チューリング完全言語を使用すると、基本的に、プログラマーは基盤となるシステムで可能なことをすべて実装できます。その結果、これはプログラマーにコードにループを実装するような能力を与え、それは潜在的にブロックチェーンセキュリティの脆弱性を引き起こす可能性があります.
チューリング完全性
チューリング完全言語には本質的に複雑さが含まれており、複雑さはバグや脆弱性を招きます.
ビットコインネットワークには、スクリプトと呼ばれるプログラミング言語もあります。スクリプトは、セキュリティを強化するために意図的にチューリング完全ではありません.
プログラマーに提供されるオプションが少ないほど、ブロックチェーンセキュリティの脆弱性がシステムに侵入する可能性が低くなります.
欠陥のあるコードを公開するリスクを最小限に抑えるために、プログラマーはスマートコントラクトプログラミングに固有の一般的な落とし穴とアンチパターンを理解する必要があります。 (アンチパターンは悪いプログラミング慣行を表しています).
DAOハック:リエントラント問題
DAOハック
再入可能性の問題は、スマートコントラクトにコード化されたブロックチェーンセキュリティの脆弱性プログラマーの中でおそらく最も高いランクにあります。再入可能性は、同じトランザクションに対する複数の支出を通じてアカウントを枯渇させます。払い戻しを処理するユースケースはこのエクスプロイトに役立ちますが、この欠陥は、設計およびコーディングの段階で対処しないと、あらゆる種類のトランザクションに影響を及ぼします。.
これまでで最も悪名高い暗号通貨攻撃の1つで、DAOのハッカーは再入可能性を悪用しました。 DAO(または分散型自律組織)の運営方法を指示した組織リーダーはいませんでした。DAOは、投資するプロジェクトに投票できるようにユーザーに権限を与えることを提案しました。.
最初の月に1億5000万ドル以上の資金を調達しました。 2016年6月17日、ハッカーは再入可能性の欠陥により、組織から5,000万ドルを流出させました。イーサリアムクラシック(ETC)からイーサリアム(ETH)へのハードフォークは、このハックが引き起こした問題を解決するための努力をもたらしました.
再入可能性に対して脆弱なアンチパターン
コードの脆弱な再入可能ロジックは次のようになります。
支払いを処理する関数(){
(1)取引の有効性、受取人、および口座残高を確認します。
(2)トランザクションを処理します。
(3)システムの状態を更新して、トランザクションが処理されたことを示します。
}
一見、ロジックは正しく完全に見えますが、欠陥はステップ3の前にステップ2を実行する順序にあります。.
関数への最初の呼び出しがステップ2の処理を続行している間、同じトランザクションの別の呼び出しが関数に入ることができます。状態情報は初期状態のままであり、ステップ3でまだ処理されていないため、2番目の呼び出しは処理する有効なトランザクションとしてチェックアウトします.
その結果、システムは同じ義務のために2度目に通貨を使います。状態が適切に設定される前に、ハッカーは複数のトランザクションを関数に急いで送ります.
リエントラントの治療法
このアルゴリズムの変更により、上記の問題が修正されます。
支払いを処理する関数(){
(1)取引の有効性、受取人、および口座残高を確認します。
(2)システムの状態を更新して、トランザクションが処理されたことを示します。
(3)トランザクションを処理します。
}
コードは、必要なすべての例外処理を考慮する必要があり、すべての論理依存関係も考慮する必要があります.
オーバーフロー
オーバーフローは、プログラマーが知っておく必要のあるもう1つの一般的なセキュリティ上の欠陥です。.
強い型付けを提供するプログラミング言語もあれば、弱い型付けを提供するプログラミング言語もあります。たとえば、強く型付けされた言語は、プログラマーが文字列データを数値変数に割り当てることを許可しません。また、弱い型付けされた言語は、そのようなアクションを許可します。.
強く型付けされた言語は範囲制限を強制します。配列が10要素の場合、プログラマーは11番目の要素にアクセスを試みることはできません。弱い型の言語ではそのような動作が可能ですが、クラッシュが発生します。変数が保持する最大許容値が99で、それに値100を割り当てた場合、実行時にクラッシュするのを確認してください!
したがって、オーバーフローはハッカーが使用するエクスプロイトです。ハッカーが、コードが処理できる範囲外のスマートコントラクトにパラメーターをフィードすると、クラッシュが発生します。このようなクラッシュは、複数のエクスプロイトを助長します。クラッシュはサービス拒否攻撃(DDoS攻撃)を引き起こす可能性があり、システムの内部に関する重要な情報がエラーメッセージに表示されることがあります.
Webアプリケーションでは、ハッカーが自分の悪意のあるコードでメモリを埋めることが多いため、プログラムがクラッシュしてメモリ内のランダムな場所に移動すると、悪意のあるコードが実行されます。.
弱く型付けされた言語は、強力で動的な柔軟性を提供しますが、攻撃に対して強化するには、より厳密な設計とテストも必要です。.
多頭のハイドラ
多数のセキュリティ問題がソフトウェアの世界を悩ませています。新しいテクノロジーが出現すると、新しい脅威が出現します。上記のエクスプロイトに加えて、これらの注目すべき欠陥は、他の多くのブロックチェーンセキュリティの脆弱性のほんの一部を表しています。.
悪い暗号化は多くの頭痛の種を生み出します。暗号化はプライバシーを保証し、プライバシーが破られるとすべてが破られます。 IOTAチームは、製品の初期バージョンで独自の暗号化ライブラリを最初から作成するという間違いを犯しました。独自の暗号化をローリングすることに固有の問題は、すべての複雑なソフトウェアにバグが含まれているため、バグのある暗号化が保証されることです。.
確立された暗号化ライブラリは、学者による審査に耐え、野生での生活を通じて信頼できることが証明されています.
ウォレットの世界では、乱数の生成は本当にランダムでなければなりません。特に暗号通貨の初期には、一部のウォレットはこの要件を満たしていませんでした.
暗号通貨アドレスには、一意である必要があるアドレスが必要です。一意性は乱数ジェネレーターに由来し、乱数ジェネレーターはプロセスを開始するためにシードを必要とします。シードが本当にランダムに失敗した場合、システムは失敗します.
ランダム性が悪いという結果の1つは、同じアドレスが複数回作成されることを意味します。ウォレットがアドレスXを個人Aに割り当て、その後、アドレスXを個人Bに割り当てるシナリオを想像してください。支払いがアドレスXに送られると、1人だけに送られます。誰がお金を稼ぐか?
ハッカーがシードの作成に使用されるアルゴリズムを理解すると、ランダム性が悪いという別の問題が発生します。ハッカーは自分でシードを再生し、システムを所有します.
道は永遠に続き、パーティーは決して終わらない
セキュリティは終わりのない戦いであり、プログラマー、アーキテクト、テスターがコードからすべての脆弱性を削除しても、運用上の脆弱性は残ります.
プルーフオブワーク環境では、悪意のある攻撃者がネットワークの51%を制御している場合、整合性が破壊されます。ゲーム理論は、この攻撃を軽減します。小規模なネットワークを備えた新しい暗号通貨は、この攻撃に対してほとんどのリスクをさらします。しかし、51%の攻撃は通貨の価値を破壊するため、攻撃者は自分自身を傷つけるだけです.
ブロックチェーンはインターネット上に存在し、インターネットと同じようにハッカーにさらされています。たとえば、ウェブサイトの取引所からコインを購入するとします。インジェクション攻撃、クロスサイトスクリプティング、フィッシング攻撃、その他すべての従来のWebサイトハッキングが蔓延しています.
最終的な考え
プログラマーがバグを防ぐのと同じように、プログラマーは開発にセキュリティを考慮に入れる必要があります。タスクでプログラマーを支援するためにいくつかのツールが存在しますが、プログラマーは最初に自分の脆弱性を理解してそれらを防ぐ必要があります.
ザ・ 分散型アプリケーションセキュリティプロジェクト(DASP) ブロックチェーンセキュリティに関する情報とリソースのリポジトリになることを目指しています。彼らは自分自身をいくらかモデル化しています オープンWebアプリケーションセキュリティプロジェクト(OWASP). 毎年恒例のOWASPトップ10には、現在存在する主要なWebアプリケーションの脆弱性が確実にリストされています。 DASPトップ10は、ブロックチェーンに同等のリソースを提供することを望んでいます.
すべての攻撃が事前にわかっているわけではありません。ゼロデイエクスプロイトは、ハッカーが他の誰よりも先に知っているエクスプロイトを定義します。したがって、プログラマーは、ソフトウェアを設計および実装するときに攻撃者のように考える必要があります。コードに脆弱性が見つからない場合は、利益を求めているハッカーが脆弱性を見つけることを期待してください.