ランサムウェアの被害を防ぐために必要だったこと

WannaCryptで変な方向に対策議論が行かないことを祈りつつ、本来行っているべき対策を述べておこうと思う。

ダウンロードしたファイルを無闇に開かない

ダウンロードした実行ファイルやスクリプトファイルを不用意にダブルクリックして実行してしまうようだと、感染を防ぐためのソリューションは殆ど意味をなさない。ウィルス対策ソフトウェアを導入していても、ウィルス対策ソフトウェアで対策できるのは「過去に知られていたウィルス」だけある。新しいウィルスには極めて限定的な効果しか無い。
特に標的型攻撃のように特定の組織だけを狙ってウィルスを送っている場合、狙われている組織が自ら感染に気がついてウィルス対策ソフトウェアの開発元に連絡しない限り、ウィルス対策ソフトでは防げないって事も起こりうる。
実行する必要がある場合には、電子署名を確認するとか、ダウンロード元サイトをしっかり確認するとかしよう。
幸いにもWindowsの場合はダウンロードしたファイルを開こうとすると警告が表示されるのがデフォルトになっている。もしうっかり開きそうになって警告が表示されたらなら、速やかに閉じよう。

パーソナルファイアウォールを有効にしておく

パーソナルファイアウォールは有効にしておこう。ゲームをするからとか、警告が出るからとか、そういった理由で不用意に「全て無効」にしてはいけない。
日本で感染が少ないのは、ブロードバンドルーターがファイアウォールの役割をしてくれたり、フリーWiFiの提供事業者側で通信制限をしていたことに救われているのでは?と言う意見もあるぐらい。ファイアウォールはセキュリティホールを使った感染を防いだり、あるいは不正プログラムへの感染に気がつく為に大事です。

適切にセキュリティアップデートを実施する

セキュリティアップデートが必要なのはOSだけではない。Office製品もそうだしサードベンダの製品もUpdateが必要。保守が終了してしまった(EOLを迎えた)ソフトウェアは、Updateが提供されないので使用してはならない。
意外にできていないもので、下記のような事がままある。
・WindowsはUpdateしているがOfficeはUpdateされていない(その他のマイクロソフト製品も更新すると言うオプション項目がある)
・AdobeReaderはUpdateされていない(自動更新には管理者権限が必要なため管理者が更新作業をする必要がある)
・古いJavaRuntimeがインストールされたまま(旧番のJavaは更新時に古いバージョンを残す設定になっていた。
・LZHファイルの解凍ツールをいまだに使っている(LZHはサポート終了しており、セキュリティ更新なども行われていない)
・Oracleのデータベースを使っているがOracleと保守契約していない(Oracleは有償サポート契約していないとUpdate提供してくれない事が多いよ)
etc・・・心当たりがあるなら、改める必要がある。

どうしても古いOSを使う必要がある場合

どうしても保守が終了してしまった(EOLを迎えた)ソフトウェアを使い続けなくてはならない場合、それなりのセキュリティ対策を取ろう。お勧めは再起動したときに、ファイル等への更新をロールバックしてくれるシステムだ。Windows XP Embededには標準で備わっていた機能で、物珍しいものじゃない。再起動でロールバックするシステムを導入していれば、万一ウィルスに感染しても復旧作業が容易になる。

データのバックアップを取る

データのバックアップを取っておく。良くある勘違いにRAIDを組んでいるから・・・と言うのがある。RAIDは故障等によるシステム停止の可能性を下げるための仕組みであって、故障その他の事由によるデータの喪失を防ぐための仕組みではない事を覚えておこう。RAIDを組んでいたとしてもRAID本体が故障すればデータを失うことになるし、もちろんランサムウェアに感染してしまえばデータを失うことになる。
普段はパソコンからアクセス出来ない別の媒体に、他のパソコンでも読み込める状態で複製して、初めてバックアップとして機能する。普段アクセス出来る媒体では、何かの拍子に両方を更新してしまうのが落ちである。幸いにも大容量のストレージをインターネット上に安価に借りれる時代になった。どこかにストレージを借りて、定期的に複製することをお勧めする。

「怪しいメールを開かない」とか、いい加減なことを言うのは流石に止めてほしい

たしかに20年くらい前なら、日本語としておかしい文面でるという事が多かった。当時のコンピューター犯罪は愉快犯的なものが多く、非技術的な部分にコストを掛けてまで実施する物好きが居なかっただけである。
だが、今時は文面で判断することは出来ない。コンピューター犯罪は莫大な利益をもたらす闇産業となっており、それなりのコストを掛けて実施されているのだ。もし怪しいか判断しようとするなら、最低でもReceivesヘッダを解析したり、そこに現れるサーバー名やIPアドレスの所在を追いかける程度のことはしないと話にならない。毎日数十~数百通のメールを手作業でヘッダを確認せよと言うのは、素人には無理だし、玄人だって遠慮したい作業だ。
しかも致命的なことに「怪しくないから問題が無いメールである。」とは言えない。取引先が既に感染していて「本当の業務連絡のメールに添付されているファイルがウィルス付き」って場合もある。もし怪しいか否かで判断しようとするなら、添付ファイルのあるメールは全て怪しいので文面を見ずに削除する程度には徹底しないと防げない。(僕の一番のお勧めは「添付ファイルのあるメールは全て怪しい」として扱うことだけどね。参照

WSUSに接続しているクライアントPCが、Updateのダウンロードに失敗する場合

WSUSクライアントがWindowsUpdateのダウンロードに失敗する場合には、次の手順でクライアントのキャッシュを初期化すると正常に動作する場合がある。

参考:Windows Update クライアントの情報をクリアにする手順

WSUSを使っていると言うことは、ActiveDirectoryの環境も整っています。ここではクライアントにログインせずに、エンドユーザーに気がつかれないように遠隔操作のみで処理していきます。

次の様なコマンドを実行して、コントロールパネルの「コンピューターの管理」をエラーの発生している端末に繋ぎます。

C:\>runas /user:example.local\[管理者ユーザー] "mmc.exe C:\windows\system32\compmgmt.msc /computer=[コンピューター名]"

これで「コンピューターの管理」が開きますので、ツリーからサービスを選んで「Windows Update」と「Background Intelligent Transfer Service」を停止します。

次のコマンドを実行して、エラーの発生している端末のC:ドライブをマウントします。

C:\>net use A: \\[コンピューター名]\C$ /user:example.local\[管理者ユーザー] [パスワード]

以下のコマンドでSoftwareDistributionフォルダ、及びBITSのジョブを削除します。

ren A:\Windows\SoftwareDistribution SoftwareDistribution.old
del A:\ProgramData\Microsoft\Network\Downloader\qmgr0.dat
del A:\ProgramData\Microsoft\Network\Downloader\qmgr1.dat

「コンピューターの管理」に戻って「Windows Update」と「Background Intelligent Transfer Service」を起動します。

これで先ほど削除した、あるいはリネームしたファイルやフォルダが再び作成されて居ることを確認します。

最後にマウントしたドライブを解放しておきます。

NET USE A: /DELETE

以上で、人知れずWindows Updateのキャッシュ削除完了。2日ほど待ってWSUS上からエラーがなくなっていれば成功です。

WSUSで再配信のエラーが・・・

GWを開けて出社してみれば、WSUSで大量の適用エラーが・・・。

KB3008923、KB3003057、KB2987107など、2014年のInternet Explorer用セキュリティパッチが、何故か再配信されている模様。他にもOffice 2010も混じってる。緊急性の高いセキュリティホールが見つかったという話もあるので、Microsoft側でリリース作業中に何かポカったのかな?

業務ネットワークをインターネットから分離して、インターネット専用端末を作る(ナンセンスなセキュリティ対策)

世の中・・・と言うより、日本国内ではナンセンスなセキュリティ対策が、さも標準的な対策であるかのように横行しています。セキュリティ対策の基本「どうやって」「だれから」「なにを」守っているのか考えてみれば綻びがはっきりします。二つ目の例として、「社内ネットワークをインターネットから分離して、インターネットを使うときには社内ネットワークとは切り離されたパソコンを使う。」ことによって、「どうやって」「だれから」「なにを」守れているのか考えてみましょう。

「インターネットを使うときには、社内ネットワークとは切り離されたパソコンを使う。」と聞いて真っ先に考えるネットワークは上のようなものかも知れません。これはむしろ全体のセキュリティを悪化させているに過ぎません。今時社外とインターネットを使った情報の送受信をやらずに済む事など無ありません。結局の所、社内のネットワークから必要な資料等をCDやDVDでインターネット専用端末に持ち込むことになります。インターネット専用端末がウィルスやマルウェアに感染していた場合、インターネット専用端末を介して情報漏洩に繋がる恐れもあるのでセキュリティ対策を疎かにするわけにはいきません。

社内ネットワークから切り離されたパソコンのセキュリティをどのように担保するのかが重要になります。インターネット専用端末が所属するネットワークにも、ADサーバーによる従業員の個別認証、IDSによるインシデント検知、Firewallによる通信の制限、WSUSによるセキュリティアップデートの監視、企業用のウィルス対策ソフトウェア導入、USBメモリなどのストレージ機器の監視・・・下のような、一通りの管理体制は必要になるはずです。


インターネットから切り離した社内ネットワークはどうなるのかというと、完全にインターネットと切断するわけにはいきません。インターネット接続用端末からUSBメモリなどを介してウィルス等が持ち込まれる可能性も考えると、セキュリティパッチのインストール、ウィルス対策ソフトの更新などは必要です。個々のパソコンからの接続は禁止していたとしても、セキュリティパッチのインストール、ウィルス対策ソフトの更新を行うための中継サーバーはインターネットに接続しておく必要があります。先の「インターネット専用端末が所属するネットワーク」と同様の管理体制が、インターネットから切り離した社内ネットワークにも必要になります。

ここであらためて考えてみましょう。インターネット接続用ネットワークも、社内ネットワークも同じレベルのセキュリティ対策が施され、管理されています。インターネット接続用ネットワークを儲けることで、セキュリティがどのように向上しているのでしょうか?実はクライアントパソコンに着目する限りでは、何もセキュリティは向上していません。ネットワークインフラ構築にに2倍のコストを掛けたうえに、インターネットから切り離すことで業務効率を悪化させているにも拘わらず、セキュリティはほとんど向上していないのです。


これは「なにを」守るのかが、ズレているのが要因です。上の図のようにセキュリティ更新を受けることが出来ない古いソフトウェアや、運用の都合でセキュリティパッチを導入できないサーバー等、様々な理由でセキュリティレベルの低い状態に置かれている場合があります。本当に排除しなければならないのはインターネットではありません。インターネットに接続可能な環境で使用するにはセキュリティレベルの低い状態になっている端末やサーバーを、インターネットと社内ネットワークから排除するひつようがあります。そのために社内ネットワークまるごと排除するのは過剰対策ですし、USBメモリなどによる持出を許可するのであれば、なんの解決にもなりません。


脆弱なサーバーや端末を社内ネットワークから排除し、使用する必要がある場合にはシンクライアント等で接続するように構成した場合です。シンプルに見えるでしょう?
実はこのような構成変更をするには、社内ネットワークの業務システム全体を掌握しており、必要に応じて大幅な設定変更できる事が必要になります。必要十分な実力を持つ情報システム部門が無かったり、情報システム部門が機能不全に陥って社内の業務システムを掌握出来ていない場合には無理です。図1や図2の構成を進めようとしているのであれば、その背後に情報システム部門の機能不全を考えた方が良いでしょう。緊急対策として「インターネットを使うときには、社内ネットワークとは切り離されたパソコンを使う。」の対処を行うにしても、その場合は情報システム部門の再構築をセットで考えるべきと思います。

参考:
日本のPOS端末が狙われる?組込みシステムのセキュリティ対策 – IT、IT製品の情報なら【キーマンズネット】
インターネットに接続していない環境から、大規模な個人情報漏洩が起きた事例です。最近のPOSはWindows Embeded等が使われておりセキュリティ対策としてネットワークからの隔離を実施していました。ところがPOSのメンテナンスのために接続されたUSBメモリがウィルスに感染しており、USBメモリを経由して個人情報漏洩を起こしています。隔離対策だけで脆弱な部分を残していては、もっとも脆弱なところから攻撃されます。

常時SSL対応しました

遅ればせながらLets Encryptを使って、常時SSLに対応しました。使ってる広告サービスがSSLに対応したのがきっかけです。以前にもSSLを利用を検討したことがあったのですが、当時よりも各段に導入が容易になってますね。

手順については、次のページを参考にしました。Ubuntu 16.x&Nginxの場合の導入手順がわかりやすく纏められています。
How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04

添付ファイルを暗号化する(ナンセンスなセキュリティ対策)

世の中・・・と言うより、日本国内ではナンセンスなセキュリティ対策が、さも標準的な対策であるかのように横行しています。セキュリティ対策の基本「どうやって」「だれから」「なにを」守っているのか考えてみれば綻びがはっきりします。代表的な例として、「メールにて添付ファイルを送るときには、添付ファイルを暗号化してから添付して送付し、パスワードは添付ファイルとは別のメールにて送る。」ことによって、「どうやって」「だれから」「なにを」守れているのか考えてみましょう。

メールから情報が漏洩する状況

パソコンの廃棄、盗難

パソコンの受信メールや送信済みメールのフォルダには暗号化された添付ファイルと、そのパスワードが並んで保存されています。従ってパソコン内のデータを復元できる状況なら、何も技術的に特殊なことなどしなくても、ファイルを復号して閲覧できます。

中継サーバーでの盗聴

インターネットのメールは相手のパソコンに直接送信されるわけではありません。複数のメールサーバーを経由して相手のメールサーバーまで届く事になります。昔は多くの組織のメールサーバーを経由して何時間・・時には数日もかけて届いていたのですが、最近は「送信者のパソコン→送信者が使っているメールサーバー→宛先が使っているメールサーバー→相手先のパソコン」と、第三者のサーバーを経由することは滅多になくなりました。
添付ファイルを付けたメールも、そのパスワードを付けたメールも同じ中継サーバーを経由して届く可能性が高いです。したがって中継サーバー上で盗聴できるなら、ファイルを復号して閲覧できます。

ネットワーク上での盗聴

接続しているハブや無線LAN上の通信データを閲覧するソフトウェアがあります。ネットワークモニタなどと呼ばれます。クラッキング用の特殊なツールというわけではなく、作成したアプリケーションが意図したとおりに動作しているか確認するために広く使われています。パソコン1台あれば可能ですし、Microsoft純正のツールもあります。
さてHUBなど通信経路上で接続してネットワーク上で盗聴している場合、添付ファイルを付けたメールも、そのパスワードを付けたメールも同じネットワークを流れるます。したがってネットワーク上で添付ファイルを付けたメールを盗聴できるなら、パスワードを付けたメールも盗聴できますし、ファイルを復号して閲覧できます。

誤った対象への送信

メールクライアントの誤操作により誤った宛先に機密情報を送信してしまったという報道が度々流れた時期があります。「メールにて添付ファイルを送るときには、添付ファイルを暗号化して添付して送付し、パスワードは添付ファイルとは別のメールにて送る。」ことが有効な唯一の例です。添付ファイルを付けたメールを送った後、パスワードを送るまでの間に、宛先の過ちに気がつくことが出来れば情報漏洩を防げます。
ただし、メールサーバー側で暗号処理などを自動で行ってくれるソフトウェアを導入しているときには注意が必要です。暗号鍵送信の手順が簡素化されているため、速やかにパスワードを遅れてしまうため、気付くまでの猶予が短くなってしまいます。

情報漏洩防止のために「メールにて添付ファイルを送るときには、添付ファイルを暗号化して添付して送付し、パスワードは添付ファイルとは別のメールにて送る。」と言う方法は、「誤送信した後、すぐに誤っている事に気がついた」と言う限定的な状況でのみ、誤送信した相手から添付ファイルの情報を守る事ができると分かりました。

この方法のデメリットは?

「メールにて添付ファイルを送るときには、添付ファイルを暗号化して添付して送付し、パスワードは添付ファイルとは別のメールにて送る。」事によるデメリットは無いのでしょうか。メールサーバーは中継したメールにウィルスが含まれていないかチェックする機能を持っている事が多いのです。暗号化してしまうとメールサーバーは添付ファイルにウィルスが含まれていないかチェックすることが出来ません。またクライアントPC上でも、添付ファイルを復号してHDDに保存するまでウィルスの有無を判定できません。つまりメールをられる相手にとって、暗号化した添付ファイルを受け入れるのは、ウィルスなどの感染リスクを増やす事になります。
また暗号化には暗号化ZIPを用いていることが多いですが、Windowsの標準機能で解凍できるZIP2.0形式は、暗号機能が脆弱である事が分かっています。英数大文字小文字を交えた8桁のパスワードでも、GPGPUを使ったパスワード総当たりツールを使えば、10日とかけずに解析できてしまいます。したがって実効性を持たせるには、SHA256形式を用いたZIP暗号を使用し、相手にも対応したソフトをインストールしてもらう必要があります。

本来はどうするのが一番良いのだろうか?

実はもっと確実な方法があります。次の二つを実施する事です。
・メールへの添付ファイルは一切許可しない。
・添付ファイルを送りたい(受け取りたい)ときにはGoogle DriveやOne Drive等のクラウドストレージを使う。
メールサーバーの設定でHTMLメールやSMIMEを除く、一切の添付ファイルを禁止します。これでウィルスを含めて、コンピューターに感染する可能性のある不正なプログラムをほぼ防ぐ事が出来ます。
その上で、貼付ファイル等を送る必要があるときには、クラウドストレージの共有機能を使います。クラウドストレージの共有機能を使うと乱数で生成されたURLが作られます。クラウドストレージの共有したファイルやフォルダにアクセス出来るのは、このURLを知っている人だけです。そして相手がファイルをダウンロードしたのが確認出来たら、速やかに共有URLを破棄します。当事者の誰かが共有用URLを漏洩させない限りは安全ですし、仮に誤送信などで漏洩させても共有URLを破棄してしまえば漏洩を防ぐことが出来ます。
第三者へのファイル送付に特化したクラウドストレージもあります。そういったストレージサービスであれば、共有URLにアクセスしたアクセス元IPアドレスや日時まで閲覧出来るものもあります。また自社専用にサーバーを作って社外とのファイル交換に使用している例もあります。

理想を求めるなら、これにSMIMEを使ったメール暗号を併用できると完璧です。盗聴されたりメールアカウントのパスワードが漏洩した場合でもメール本文に書かれているURLの漏洩を防ぐことができます。ただ、SMIMEはメールを受信する相手側で対応していないと暗号化は利用できませんし。電子証明書の取得に1メールアカウント辺り数千円の支出を伴うこともあり、なかなか普及していないのが残念です。

結局の所?

「メールにて添付ファイルを送るときには、添付ファイルを暗号化して添付して送付し、パスワードは添付ファイルとは別のメールにて送る。」ことによって、極めて限定的な状況下で、誤送信による情報漏洩から守ることが出来ます。そのためにメールを受信者側に、セキュリティの低下というリスクを押しつけています。
ほとんど役に立たない対策のために、他の面でセキュリティを低下させているのですから、総合的な効果としてはマイナスの対策といえます。

追記 参考資料

電子メール利用時の危険対策のしおり
IPAの提供するガイドラインでも「復号のためのパスワード等は、別の通信手段を利用して相手に伝えることが重要です」ときちんと書かれている。添付ファイルを暗号化するなら、せめてガイドラインに従ってFAXなり、郵送なり、電話なり、別の手段で送って欲しい。

「添付ファイルはパスワード付き暗号化」でいいのか
ITProの記事。実は10年前から指摘され続けている。

添付ファイルとパスワードを別便で送るアレ、やめて。セキュリティ1〜5章
技術的な詳細はこちらが詳しい。