過去の実例をコードと図解で詳説
C/C++セキュアコーディングの講演資料、JPCERT/CCが公開
2009/04/28
JPCERT/CCは4月28日、2008年度に開催したC/C++向けのセキュアコーディングセミナーで使用した講義資料を公開した。資料は文字列、整数、動的メモリ管理、ファイルの入出力(UNIX、POSIX、Windows)などに分かれており、それぞれ1〜7MBのPDF文書としてダウンロードできる。
文字列の扱いでは、バッファオーバーフローなど頻繁に報告される脆弱性について、その原因と具体的な対策について解説。図やサンプルリストを多用して、危険なコードと、セキュアなコードを対比して学習できる構成になっている。
過去に脆弱性の見付かったソフトウェアの実例を、該当個所のコードを示して解説しているのも特徴。例えば文字列のバッファオーバーフローでは、WindowsのRPCの該当ソースコード部分を示した上でBlasterワームの挙動を示している。また、典型的な整数の脆弱性の例として、OpenSSH 3.3に見つかった整数オーバーフローの問題や、Linux上で標準的に使われているシェル、Bashの1.14.6以前に存在した脆弱性と、そのとき取られた対策を具体的に示してある。整数の扱いでは、桁あふれ、符号エラー、切り捨てなどで「予期せぬ値」が発生することが、多くの脆弱性につながるという。
動的メモリ確保の例では、malloc/freeを使ったメモリ管理にまつわる脆弱性の問題を指摘。Solaris 2.0に付属したアーカイバのtarには、/etc/passwordの内容が混入するバグがあったが、これはmallocで確保したメモリを初期化していないために起こったものだったという。このほかメモリ管理にまつわる脆弱性としては、解放済みメモリの参照や、二重解放によるヒープ領域の破壊などが指摘されている。これらの問題には適切なコーディング方法を採用することが有効であると解説するとともに、有用なテクニックやツールが紹介されている。
Webアプリケーションが急増した結果、SQLインジェクションなど頻発する脆弱性のトレンドに変化が見られるが、C/C++で境界条件やバッファサイズのチェックが甘いことに起因するバッファオーバーフローも相変わらず多く発生しているという。
関連リンク
関連記事
情報をお寄せください:
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。