機械学習でMicrosoftがセキュリティバグを判定、高い精度が特徴:1カ月で3万件発生するバグを利用
Microsoftは、教師あり機械学習を活用することにより、セキュリティバグの特定と分類の精度を大幅に向上させたと発表した。開発時、さらには運用後の改善にはセキュリティ専門家の協力を仰ぐことが不可欠なのだという。
Microsoftは2020年4月16日(米国時間)、セキュリティ専門家の協力の下で機械学習を活用することにより、セキュリティバグの特定と分類の精度を大幅に高めることができたと報告した。
ソフトウェア開発者は毎日、実装しなければならない機能はもちろん、報告のあったバグの長いリストを目の前にして苦労している。セキュリティの専門家は、自動化されたツールを使ってセキュリティバグに優先順位を付けているものの、開発者側では誤検知に時間を費やしたり、誤って分類された重要な脆弱(ぜいじゃく)性を見逃したりしている。
Microsoftでは、約4万7000人の開発者がソフトウェア開発に携わり、1カ月当たり3万件近くのバグを作り込んでいる。同社はバグを「Microsoft Azure DevOps」とGitHubにある100以上のリポジトリに保存している。これを人力で処理しようとしても無理がある。2001年以来、1300万件の作業項目とバグを収集しているからだ。
逆にいえば、ラベルが付いた大量のデータは機械学習に向いている。Microsoftはこのデータを使うことで、セキュリティバグと非セキュリティバグを99%の精度で正確に判別し、優先順位の高い重大なセキュリティバグを97%の精度で正確に特定するプロセスと機械学習モデルを開発した。
良質なデータを利用して教師あり学習を実行
Microsoftは今回の開発過程の概要を次のように報告している。
同社が掲げた目標は、セキュリティ専門家にかなり近い精度で動作する機械学習システムを構築することだ。セキュリティバグと非セキュリティバグにバグを分類することに加え、重大なバグと重大ではないバグを分類したい。
目標を達成するために、教師あり学習を採用した。セキュリティとラベル付けされたバグと、ラベル付けされていないバグを、機械学習モデルに大量に与える。このようなトレーニングを続けることで、機械学習モデルは学習結果を基に、事前に分類されていないデータをラベル付けできるようになるという想定からだ。
教師あり学習では事前にラベル付けされたデータから学習するため、大量の「良質な」データが必要だ。用意したデータが、モデルを効果的にトレーニングできる適切なデータであることを確認するため、Microsoftは以下の4つの観点からデータを評価した。
- データ量は十分か 量はもちろん、偏りのない一般的なデータが必要だ。さらに少数の例に当てはまらないデータが必要となる
- データはどの程度良質か データにノイズが多い場合は、データとラベルの組み合わせをモデルに与えたとしても、学習がうまく進まない。しかし、生のデータは不完全であることが多い。Microsoftは、データを完璧にするのではなく、体系的に取り組む手法を探した
- データの使用に制限があるか プライバシー規制など、データを使えない理由を把握していく
- データを研究室で生成できるか 研究室のシミュレーション環境でデータを生成できる場合、(偏りなど)データが持つ他の問題も克服できる
事前にデータを評価した結果、今回のプロセスを設計し、モデルを構築するのに十分な量の良質なデータが用意されているという確信が得られたため、次の段階に進んだ。
データサイエンスにセキュリティの専門ノウハウを投入
開発を目指した分類システムは、セキュリティ専門家に近い性能を発揮する必要があった。そこで全てのデータを学習させるのではなく、セキュリティ専門家がトレーニングデータを承認した上で、そのデータを機械学習モデルに与えることにした。
データに偏りが生じないよう統計的サンプリングを用いて、適量のレビュー用データをセキュリティ専門家に提供することに決め、モデルが機能するようになった段階では手法を多少変えて、稼働中のモデルについてもセキュリティ専門家の評価を受けることにした。
このようなプロセスの定義を経て、いよいよモデルの設計に入る。Microsoftは、機械学習モデルが2段階に働くようにした。モデルはまず、セキュリティバグと非セキュリティバグの分類方法を学習する。次に、深刻度のラベル(重大、重要、低影響)をセキュリティバグに適用する。
データサイエンティストと専門家はどのように協力するのか
今回の取り組みに限らず、正確に動作するモデルは、対象分野の専門家とデータサイエンティストの密接な協力を必要とする次のような反復的プロセスを通じて完成に至る。
- データ収集 プロジェクトはデータサイエンスから始まる。全てのデータの種類とソースを特定し、品質を評価する
- データのキュレーションと承認 データサイエンティストが実用的なデータを特定した後、対象分野の専門家がデータをレビューし、ラベルが正確であることを確認する
- モデリングと評価 データサイエンティストがデータモデリング手法を選び、モデルをトレーニングし、モデルのパフォーマンスを評価する
- 稼働中のモデルの評価 対象分野の専門家がモデルを評価する。今回の場合であれば、バグの平均数をモニタリングしたり、バグのランダムサンプルを手動でレビューしたりする。こうして本番環境で動作するモデルの評価が固まる。
このプロセスは、モデルが本格的に機能するようになっても終わらない。バグモデリングシステムがMicrosoft製品の継続的進化に対応していかなければならないからだ。今回の取り組みでは自動再トレーニングを実行する。モデルの再トレーニング前にも、セキュリティ専門家がデータを承認しなければならない。同時に、生成されるバグの数がどのように推移しているのかモニタリングを続ける。
同社は数カ月以内に、今回の方法論をオープンソース化してGitHubで公開する予定だ。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- SREという“コト売りを支える仕組み”を、どう実現するか
モノ売りからコト売りの時代に変容し、ITサービスが重要な顧客接点となった近年、SRE(Site Reliability Engineer)を取り入れる企業が国内でも急速に増えつつある。ITサービスをビジネスとして成立させ、収益・ブランド向上に生かしていく上で欠かせない役割ではあるが、その実践は実に難しい。本特集では事例を通じてSRE実装の在り方を考える。 - Microsoft、安全で高効率のプログラミング言語として「Rust」を高く評価
Microsoft Security Response Center(MSRC)は、ソフトウェアのセキュリティ確保と効率性の両方の要件を満たす最も有望なシステムプログラミング言語の一つとして、「Rust」を高く評価した。メモリ破壊バグをそもそも作り込まないことでセキュリティを確保できるという。 - 国防総省がKubernetesとIstioでDevSecOps基盤を構築、「ウォーターフォール文化を変える」
2019年11月にCloud Native Computing Foundation(CNCF)が米サンディエゴで開催したイベント「KubeCon+CloudNativeCon North America 2019」では、米国防総省がKubernetesの広範な採用を進めていることを明らかにした。