検索
連載

プログラマをやって思うことセキュリティ、そろそろ本音で語らないか(7)(2/3 ページ)

これまでは“コンサルタント”としての本音を語ってきた本連載ですが、実は筆者は筋金入りの“プログラマ”。第7回はプログラマ視点でのセキュリティを語ります(編集部)

Share
Tweet
LINE
Hatena

開発環境にだってバグはある

 少し話題を変えましょう。現在、私が開発で利用している言語はC++です。私がC好きということもあり、C++はなじみやすい言語でした。しばらくWindowsのプログラミングから遠ざかっていたので、さぞかしバグもなくなっていることだろうと期待していたのですが、その期待は大きく裏切られました。

 私が開発している間にも、いくつかのAPIにメモリーリークの問題があることが分かりました。つまり、プログラマ自身ではどうしようもない脆弱性が、開発環境そのものにあるのです。

 確かに、昔に比べれば文字列の扱いが格段に楽、かつ安全になりました。昔は、文字列の扱いがちゃんとできないと一人前のCのプログラマではありませんでした。いまでは、長さも気にせず代入したり、連結したりできます。

 しかしながら、多くのAPIでいまだに呼び出し側のメモリ管理に依存しています。従って、プログラマの技量やうっかりミスで、バッファオーバーフローなどを作り込んでしまう可能性は十分に潜んでいます。

 初歩的なミスとして、変数の初期化忘れや、取得した文字列の最後尾にNULL値があるという思い込みのコードなどは、いつ作りこまれていても不思議ではありません。こういうバグは通常の試験では問題がなくても、別の環境や特別な状況で発覚するのです。

 ハードディスクのディレクトリ構造は、場所によってはいくつにも深くなっていますが、これらをたどってファイルを検索するようなプログラムは、C++であれば再帰呼び出しがよく使っていますし、ネット上でもサンプルプログラムが紹介されています。

 しかし、再帰呼び出しは同じ関数を繰り返し呼び出す手法なので、スタックを消費します。これを繰り返すことによって、いずれはスタックオーバーフローにつながる危険性があります。

困ったときのネット頼み――ただし、コピペは危険

 私も困ったときにはネットでサンプルプログラムを検索しますが、ネット上で見つかるサンプルプログラムにも多くの問題が散見されます。エラー処理がきちんと書かれていないのは当然としても、セキュリティ的に見て脆弱性に直結するようなものも少なくありません。

 昔に比べれば、ネットでなんでも調べられるようになって便利になりました。プログラムでも、多くの問題はネットで調べれば解決してしまいます。しかし、それをうのみにしないでちゃんと理解して、関数の引数や戻り値、エラー情報などをきちんと調べ直してから自分のプログラムに利用しないと、脆弱性をそのまま継承してしまうかもしれません。

 また、最近ではいろいろな機能がコンポーネントとして安価に入手できるようになっています。例えば、データベースへのアクセスやPDFファイルの扱い、さまざまなGUIなどをイチから書かなくても、コンポーネントをダウンロードすれば使えるようになっています。

 しかし、これらのコンポーネントにもバグがあり、その中にはセキュリティ上問題となり得る脆弱性も含まれている場合があります。

 これらのコンポーネントはプログラムと一体化しているので、もし、それに脆弱性が見つかったとしても、改修の必要性はそれを利用している開発会社のみぞ知る、という状態になっています。一般ユーザーからは脆弱性のあるコンポーネントを利用しているかどうかは分かりません。

 このように、いまの開発環境においてもまだまだ多くの脆弱性が作りこまれる条件は十分あり、互換性の維持など考えると少なくとも何年かは同じ状況が続くものと思われます。個人のPCをターゲットとするとどうしても古いOSへの対応は捨てきれません。

 Windows 98なんてもうないだろう、などと思っていたら、お客様の中でも実際に業務で使用されている方がいたりします。セキュリティの更新がされないといっても、個人が買っているパソコンですから、利用を強制的に中止させるわけにもいきません。普段の利用に差し支えがないのであればなおさらです。

 さらに、Windows 2000に至っては、今後数年間は使い続けられることでしょう。PCのスペックもある程度のものを使っているユーザーも多いので、買い替えないユーザーは少なくないでしょう。

 ということは、Windows 2000にアプリケーションを対応させていかないと、多くのユーザーに受け入れられないということです。いくつかの有名なアプリケーションでは、Windows XP SP3以上、ときっぱり割り切っているようですが、ユーザーにとってはそれがバージョンアップをしない理由になったりして、脆弱性が改善されない原因にもなっていくでしょう。

Index

プログラマをやって思うこと

Page1
私、現役プログラマです
UACという壁

Page2
開発環境にだってバグはある
困ったときのネット頼み――ただし、コピペは危険

Page3
“メモリを正しく使う”という考え方が明日のセキュアを作る


インデックス

「セキュリティ、そろそろ本音で語らないか」連載目次

Copyright © ITmedia, Inc. All Rights Reserved.

Security & Trust 記事ランキング

  1. 堅調なID管理や認証、脅威インテリジェンスなどを抑え、2024年上半期で最も成長したセキュリティ分野は?
  2. 従業員は「最新のサイバー脅威との戦い」を強いられている セキュリティ教育に不満を持つ理由の1位は?
  3. 増える標的型ランサムウェア被害、現場支援から見えてきた実態と、脆弱性対応が「限界」の理由
  4. 「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?
  5. 長続きする高度セキュリティ人材育成の秘訣を「第19回情報危機管理コンテスト」から探る
  6. セキュリティ専門家も「何かがおかしいけれど、攻撃とは言い切れない」と判断に迷う現象が急増 EGセキュアソリューションズ
  7. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  8. 日本人の約半数が「1年前より危険」と考えるオンライン詐欺とは マカフィーがホリデーショッピング詐欺に関して調査
  9. ランサムウェア攻撃を受けた企業、約6割が「サプライチェーンのパートナー経由で影響を受けた」 OpenText調査
  10. ゼロトラストの理想と現実を立命館大学 上原教授が語る――本当に運用できるか? 最後は“人”を信用できるかどうか
ページトップに戻る