MENU

NIC BLOG

Voice of the Staff

セキュリティとの戦い

セキュリティとの戦い

はじめまして。NEXT事業部のK.Kと申します。

NEXT事業部では自社製品「スマートセッション」の開発や、
開発効率を向上させるための新基盤開発を担当しています。

クラウドサービスなどインターネットを介して利用できるサービスが一般的になり、
それらを活用した製品・サービスの開発競争が激化しています。
またそれに伴い、情報搾取や金銭要求、マイニングの目的で不正アクセスやサイバー攻撃も増加の一方です。
システム開発ではより一層セキュリティへの意識が求められるようになりました。

そんなこともあって現在担当している基盤開発では、
「開発効率向上」と「セキュリティ面の安全性」の両面から考える必要があります。

今回はセキュリティについてのお話です。

オープンソースソフトウェア(OSS)の脆弱性情報収集

セキュリティ面についてはどのように取り組んで行けば良いのでしょうか。
色々な書籍や技術情報サイトを読んで学ぶ方法も一つですが、
私が取り組んでいる方法を一つ、今回の記事では紹介しようと思います。

ソフトウェアを開発する際、OSSを活用することが主流になってきています。
特に著名なOSSは多くの開発者に利用され、そのソフトウェアの脆弱性が発見された場合は影響が甚大です。
そのため、そのようなOSSでは利用者に知らせるため脆弱性情報の公開を行なっています。
それらの情報を定期的にチェックして脆弱性情報の収集を行なっています。

例えば、JavaでWebアプリケーションを稼働させるためによく使われる
Apache Tomcatというサーブレットコンテナの場合を見てみましょう。

Apache TomcatではWebサイトやメーリングリストで公開を行なっており、
つい先日、以下の脆弱性情報が公開されました。

High: Information Disclosure CVE-2021-43980

The simplified implementation of blocking reads and writes introduced in Tomcat 10 and back-ported to Tomcat 9.0.47 onwards exposed a long standing (but extremely hard to trigger) concurrency bug that could cause client connections to share an Http11Processor instance resulting in responses, or part responses, to be received by the wrong client.

This was fixed with commit 170e0f79.

脆弱性を追跡するために付けられる共通脆弱性識別子(CVE)と共に脆弱性の簡単な説明が記載されています。
ここからが興味深いのですが、OSSはソースコードが公開されているため、
脆弱性をどのように修正したのかコミットログから追うことが可能です。
今回の脆弱性情報では修正を行ったコミットログも記載されています。
折角なのでコミットログも見てみましょう。

- protected Object currentProcessor = null;
+ private final AtomicReference<Object> currentProcessor = new AtomicReference<>();

修正されたコード行は多数ありますが、今回の脆弱性のポイントと思われる行のみ記載しました。
これを見ると、現在のProcessorを保持するメンバ変数をAtomicReferenceという、
原子的な更新が可能なオブジェクトで保持するように変更されています。

これはJavaで並列処理を行う場合に注意が必要な競合状態の脆弱性(CWE-362)の一つです。

並列処理を行う際、複数のスレッドが同時にメンバ変数に参照・変更することがあります。
そのようなメンバ変数には以下の考慮が必要です。

・コンパイラが処理を最適化してメンバ変数の値をキャッシュしたりしないようvolatile修飾子を付与する
・メンバ変数の更新後の値が変更前の値に依存する場合はアトミック性を確保する

このように修正コミットを参照することで、
修正内容から脆弱性となりうるコードについて知る機会を得たり、
どのように修正すべきなのかの知見を得ることができます。

また修正されたコードを使用している部分を追跡することで、
どのような条件で脆弱性が発動するのか、
対象のOSSを利用している稼働中のシステムでどのような対策が必要かの判断にもつながります。

まとめ

今回は私が普段行っているセキュリティ面の取り組みの一つを紹介しました。
この他にもセキュリティに関する研究者や企業の情報ブログなどをチェックしたりして
セキュリティについての知識を収集を行なっています。

セキュリティに関わらず、技術情報などは日々、新しいものが出てきています。
様々なやり方はありますが、こういった情報を常にキャッチできるよう
取り組むことが大事だと思います。

前の投稿 >

カテゴリ

このブログはNIC社員が定期的な(?)更新を行っています。
各担当者は普段の業務の合間をぬってブログの記事を作成していますので、日付順で表示した場合にはいろいろなカテゴリがごちゃまぜで表示されます。
カテゴリ別の表示をしていただくと、ひとつの流れとして読みやすくなると思います。

月別アーカイブ