Microsoftの脆弱性との戦いから学ぶセキュリティの歴史(de:code 2019)
2019-06-05
azblob://2022/11/11/eyecatch/2019-06-05-microsoft-decode-se07-history-of-ms-security-000.jpg

de:code 2019、お疲れさまでした。私は去年に引き続いてこのイベントで様々なセッションに参加して、今年もたくさんの得るものがあったように感じます。

今回も何かしら面白いと思ったセッションについて、ここでまとめていきたいと思っています。

今回選んだセッションはSE07 脆弱性はなぜ生まれ、どのように攻撃されるのか? 安全なアプリを開発、運用するためのきほんです。

MicrosoftはWindowsを作り続けてきた企業であり、つまりここ20年以上OSの脆弱性と戦い続けてきたということでもあります。

そんなMicrosoftがどのようにしてその脆弱性と戦ってきたかを、特に大きなトピックである「SDL」「緩和策」について解説しながら、自分たちのソフトウェア開発でどのような脆弱性対策ができるか考えていきましょう。

あらすじ

1980年台、かつてコンピュータは計算用の機械であり、守らなければならないような財産はあまりなかった。

しかし1990年台のインターネットの発達とコンピュータの進化によって脆弱性への攻撃の危険と守るべきコンピュータ上の財産が増えていった。

決定的だったのは2002年のワームの大流行。

これに対してMicrosoftは開発時から如何にして脆弱性を埋め込まないようにするかを意識し始め、「セキュリティ開発ライフサイクル」というガイドラインを作成する。

これによってOS発売後に修正される脆弱性は大いに減ったものの脆弱性の発見時にパッチが作られるまでの間に行われる「ゼロデイ攻撃」は依然として起きていた。

なので、脆弱性があってもそこを攻撃されないための仕組みとして「緩和策」を作成。

今に至る。

今回のメイントピック

  • SDLとは?
  • 「緩和策」とは?

SDLとは

信頼できるコンピューティングのセキュリティ開発ライフサイクル(msdn)
SDL(セキュリティ開発ライフサイクル)とは、Microsoftが2001年に大流行したワームウイルスのCodeRedやNimdaを受けてビルゲイツが社内に向けて発布したスローガン「信頼できるコンピューティング」の下で作られたガイドラインです。

このガイドラインはセキュアな製品を作ることを目標としてつくられ、開発時に回すプロセスを説明しています。

具体的には、開発プロセスを要件定義、設計、実装、検査、出荷、対応・対処の7つに分け、それぞれにおいてどのようなチェックをするか、どのようなツールを使うかといったことを示しています。

例えば、実装時には静的コード分析のツールを使うことだとか、出荷時にはセキュリティチームにお願いしてレビューを行ってもらうことなどが盛りこまれており、開発においていかにして脆弱性を盛り込まないようにするかを強く意識したものになっています。

セッション中には具体的に使うツールについての説明もありました。

一つは、CredentialScannerというツールで、これはコードの中に認証コードを埋め込まれていないかチェックできるものです。

もう一つはWhiteSourceというもので、オープンソースライブラリの脆弱性やライセンス違反を犯しているものがないかをチェックするツールです。

CredentialScannerは無料で使用でき、WhiteSourceはトライアルを試用することもできます。

緩和策とは

SDLの適用によってWindowsのリリース後に修正される脆弱性の数は大幅に減りました。

しかし、脆弱性が発見されてから修正パッチを出し、それを適用するまでの間はまだ脆弱性を利用して攻撃を仕掛けることが可能です。

これを防ぐための概念が「緩和策」というものです。

これは、脆弱性それ自体を防ぐのではなく、脆弱性があっても、それを悪用した実際の異常を検知して被害を防ぐようにするものです。

例えば、コンピュータへの攻撃の手口の一つとして、脆弱性を利用して実行する命令のポインタを書き換え、悪意のある別の命令を実行させるというものがあります。

ここでこの命令ポインタの書き換えを検知して、別のコードを実行させないようにしたらどうなるでしょうか?

これによって、既知の脆弱性を用いた攻撃を阻止できるだけではなく、未知の脆弱性を用いた攻撃も無効化できるようになります。

まとめ

今回はde:code 2019のセッションからMicrosoftの脆弱性との闘いについて見てきました。

自分たちが作り出す製品の中に脆弱性を生まないためにMicrosoftが取り組んだことから、自分たちの開発に活かせるツールや心がけもあるように感じます。

セキュアな開発手法やツールを意識して、脆弱性のない製品づくりを目指したいです。