Linux Foundationの「セキュアソフトウェア開発」を受講しました(3)
Linux Foundation「セキュア ソフトウェア開発」無料オンラインコースを開始 今年の勉強は今年のうちに。最終章の第3部の内容についての所感です。 自分用のメモが含まれているため、理解度テストの結果が含まれています。ネタバレを防ぐため、受講する人は先に受講してからこの記事を読んでほしいです。なお、Quizの「正しい記述を選んでください」「正しいものはどれですか」は複数回答があるので要注意です。
「第3部:検証とより専門的なトピック」
テストの手法やテストで活用できるツールやSTRIDEのようなルール、暗号化のアルゴリズム(鍵についての説明は詳しいです)、脆弱性を検出した場合の対応などが説明されています。 このオンラインコースを受けていて感心するのが、最新の事情に合わせて書かれていることです。文中に出てくるブラウザも、Webサービスも2022年現在に使用されているものが挙げられます。当たり前と思う人もいるかもしれませんが、この手のドキュメントは更新されず、時代遅れになることはままあります。そしてセキュリティの世界において陳腐化したドキュメントの効果はいま一つです(だからこそ登録セキスぺは毎年更新が必要なのでしょう)
最後にアンケートがあったので以下のように回答しました。
- 内容は詳細で、情報は新しく、説明は丁寧だった
- テキストに書かれていない問題がいくつかあった
- ナレッジチェックの翻訳を改善してほしい
- セキュリティの最新の標準と技術を説明している天が良い
最終問題は40問、80%以上正解しないと合格証書はもらえません。 なかなかの難易度でしたが、一発で合格しました。プライドは保たれましたね・・・w
試験問題を含め、14時間程度で終了しました。公式アナウンスでは14〜18時間とありましたので、おおよそ標準所要時間と言えそうです。
合格したことを示すバッジも手に入れました。
今回の章も得るものがたくさんありました。
再利用コンポーネントのアップデート頻度を誰が決めるのでしょうか?これは厄介な質問です。人によっては、「会社の方針」、「最高情報セキュリティ責任者(CISO)」、「最高情報責任者(CIO)」、などと言うかもしれません。それらの答えはすべて間違った答えです。もしあなたの目的がセキュアなシステムを実現することであるなら、正しい答えは、いつアップデートする必要があるかは攻撃者が決めるということになります。それは、攻撃者があなたのデプロイしたシステムのその脆弱性を突く前に、あなたがアップデートされたバージョンをデプロイする必要があるからです。
フォールスポジティブ/フォールスネガティブの覚え方はこの教科書のほうが分かりやすいですね。 ・ポジティブ=(問題があるため)報告=偽陽性
・フォールスポジティブ=誤って報告してしまった ∴ False positive (FP):(不具合ではない「不具合」の)不正確な報告(「タイプ Iエラー」 ↕ ・フォールスネガティブ=誤って報告しなかった False negative (FN):(不具合を)報告しなかったので不正確(「タイプIIエラー」)
知らないこともたくさんありました。
パスワードのハッシュ化やユーザごとのソルト化ハッシュは既に安全でないとされます。んぜ奈良攻撃屋はパスワード文字列とハッシュ化された文字列を比較できるデータを持っているだけでなく、ソルト化ハッシュもローカルでぶん回して推測ができ、パスワードを見つけることが可能だからです。代わりに「ユーザーごとの反復されるソルト化暗号ハッシュ(iterated per-user salted cryptographic hash)アルゴリズムと呼ばれる、この目的のための特別な種類のアルゴリズムを使用する必要があります。
知らない用語もたくさん紹介されていました。 知っておくべきSASTとSCAの役割の違いとは?
SASTは、プロプライエタリコードのセキュリティ脆弱性のみを検出します。 コードを静的/非実行の状態でスキャンして、セキュリティ脆弱性になるかもしれない欠陥を検出する SCAは、組織のコードベースに含まれるすべてのオープンソース・コンポーネントを検出・追跡し、開発者がオープンソース・コンポーネントを管理するのに役立ちます。
形式手法とは,数学をソフトウェアに適用すること。 形式手法の大きな利点は、次のとおりです。
・曖昧さの原因の多くを取り除くことができる。 ・ある前提があれば、あることが真か偽かを証明できる(その前提が何かを決めることもできる)。 ・形式手法の大きな欠点は、次のとおりです。
今日、ソフトウェアの開発に形式手法を用いることは、より多くの労力を必要とすることが多い。 多くの場合、形式手法の使用には専門的な知識(例えば、数学や使用する形式手法のツールなど)も必要となる。
ソフトウェア開発時に形式手法を用いることは、今日ではまれです。しかし、今後、形式手法の利用が一般的になるかもしれませんし、脆弱性によるリスクが極めて高いソフトウェアの開発を依頼されるかもしれません。
形式手法についてより理解するため以下の記事を読みました。 形式手法はなぜ流行っていないのか
本記事について、「形式手法は流行っていない」というのは正確ではないのではないかという指摘をいただきました。組み込み系や社会インフラ系等バグを絶対に出せないシステム開発では形式手法がよく使われているそうです。 誤解を招く紹介となっていたことをお詫びします
SATソルバーとソフトウェア検証技術 ->ブール変数を含む多くの方程式を受け入れ、すべての方程式を真にするブール変数の値の集合を見つけようとするツールです。
自分用メモ
- 脅威モデリングは攻撃者に焦点は当てない。資産(リソース)にも焦点は当てない。設計に焦点を当てる
- ファジングは、プログラムが正しい答えを出すかどうかをチェックするのではなく、ある合理的な動作(「クラッシュしない」など)が起こるかどうかだけをチェックする
- STRIDEで使用するDFD=データプロセス(円で表現される)/データストア(円柱)/データフロー(有向線で表現)/インタラクター(システムの外にあって、システムと相互作用するもの)は、通常、人間を表す棒グラフのようなシンプルなアイコンで表現/信頼境界は破線で表現される。信頼できる部分と信頼できない部分の境目。STRIDEの要素は「信頼境界」以外の要素。
- STRIDEを適用する場合、上位のアプリケーション ダイアグラムは、一般にはデータ フロー ダイアグラムとして作成される
- 推奨されるHTTPSサーバー設定は、Mozillaの「Security/Server Side TLS」サイトに記載されている