勘違いするな、ソフトウェアは完成しない。

Column

2022/04/15

Share

שלום!(シャローム!)AironWorks Marketing Teamです。今回は「勘違いするな、ソフトウェアは完成しない。」と半ば挑戦的に題して、ソフトウェア(とミドルウェア)を永遠に改良し続ければならないことを論じます。COCOA問題で揺れるソフトウェア開発と、そこで勘違いされやすいことについて、サイバーセキュリティを軸に取り上げています。

Index

はじめに

この記事を描こうと思ったきっかけは、先述のCOCOAに関するインシデントです。

COCOA沈黙の4か月 アプリ不具合はなぜ見過ごされたか | NHK政治マガジン

先日、新型コロナウイルス対策の切り札として注目された、厚生労働省作成のスマホアプリCOCOAが、接触を正しく通知しないバグを放置していたことが明らかとなりました。発表当時はTwitterなどで多くの批判や議論がなされていました。

もちろん、GitHub上で指摘があったのにもかかわらず、バグを放置し続けた開発の管理体制に問題があったことは明らかです。しかし、開発中に混入した不具合そのものを批判するのはナンセンスだと思います。一部のメディアの批判やSNS上での議論で

不具合が出るように設計した開発者が悪い。厚労省はその責任をとるべき。

というような趣意の文章が見られました。まさにこれこそがこの文章を書くに至った経緯です。

ただし、勘の良い読者の方

不具合やバグを混入させないように設計するのは難しいので、批判すべきは不具合そのものではなく、それを放置していたことの方だ。

と私が主張したいのではないか、と勘ぐるかもしれません。しかし、私がこれからお話しするのはそのような内容ではありません。(実際、設計や開発のことは多くの有識者の方がメディアで発言されているので、そちらを参照してください。)ここで私が伝えたいのは

不具合やバグを混入させないように設計するのは難しいのは、あなたが今使っているOS(WindowsやiOSなど)やブラウザ(Google ChromeやMicrosoft edgeなど)などのソフトウェアやミドルウェアも然りですよ

ということです。

「ソフトウェアは完成しない」の2つの意味

以下、ソフトウェアとミドルウェアを総称してソフトウェアと呼ぶことにします。私がタイトルにした「ソフトウェアは完成しない」の意味は2つあります。

1. 発展
機能を追加したり、洗練させたりすることでより良いソフトウェアにすることです。例えば、TwitterにFleet機能が実装されたのは発展です。良いものをより良いものにするニュアンスです。

2. 改良
不具合やバグを除去したり、コードを修正することです。例えば、Windowsなどがパッチを提供するのは改良です。悪いものをより良いものにするニュアンスです。

WindowsやGoogle Chrome、Facebookのようなソフトウェアが発展するのはみなさん疑いのないところだと思います。しかし、改良についてはどうでしょうか。MicrosoftやGoogle、Facebookなどへの信頼が厚すぎて、しばしば私たちはソフトウェアが改良されていることを忘れてしまいます。それは同時に不具合やバグが改良以前にあったことを意味しています。つまり、WindowsやGoogle Chrome、FacebookのようなソフトウェアにもCOCOA同様の不具合やバグが存在するということです。(MicrosoftやGoogle、Facebookはセキュリティ上の努力を続けているため、その点ではCOCOAと同様ではありません。)

そこで今回は「2. 改良」にフォーカスして、ソフトウェアの提供者目線ではなく、利用者目線で何ができるかについて考えます。

セキュリティ的観点からユーザーは何ができるか

ではソフトウェアのユーザーとして私たちは何ができるのでしょうか。その具体的な指針は「パッチが提供されているか否か」で変わってきます。

パッチとは
パッチとは脆弱性やバグなどを修正するプログラムのことです。アプリなどで「ソフトウェアをアップデートしてください」という要求が来る場合があります。それを詳しく見てみると、バグの修正のような文言が散見されます。それがまさしくパッチです。

対策1: パッチの提供前
脆弱性が発見されてから、パッチ提供前の攻撃をゼロデイ攻撃と言います。このような攻撃はパッチが提供されているものと比べて対策が難しい部分がありますが、インテリジェンスを用いて対策することが重要です。インテリジェンスは具体的に2種類あります。
1つ目はマシンとしてのインテリジェンスです。要するに、機械学習などを用いて、未知の攻撃に対していくものです。例えば、SentinelOneのような機械学習を用いたエンドポイントセキュリティソリューション(EPP、EDR)を導入しましょう。
2つ目は人間のインテリジェンス(ヒューマンインテリジェンス)です。脆弱性をエクスプロイトする過程でフィッシングやソーシャルエンジニアリングのような人間を介することがしばしばあります。教育や擬似攻撃を用いたトレーニングを受けて、そのような攻撃について十分に理解しておくことが重要です。もちろんそれだけで全て防ぐのは不可能ですが、ヒューマンインテリジェンスを高めることで、これらの攻撃に非常に強固になります。

対策2: パッチの提供後
パッチの提供後は速やかにそのパッチを適用してください。先日、サポートが終了したWindows7を使い続けていたフロリダの水道局がハッキングされ、市民に健康被害が及びそうになるインシデントがありました。このようなことがないように、パッチの提供があるものを使いつづけ、アップデートし続けてください。深刻な脆弱性とそのパッチ提供に関してはIPAJVNの公式サイトを参照していただくのがよろしいと思われます。
IPA 独立行政法人 情報処理推進機構:情報セキュリティ

最後に

最後までお読みいただきありがとうございました!