さくらインターネットで、技術担当の執行役員と、最高情報セキュリティ責任者を務めている江草です。

最近、新型コロナウイルスの影響もあって在宅勤務などをされている方が増えていると思いますが、そういったときに、今までオフィスで使えていたサービスをどうやったら社外でも使えるかという話をしたいと思います。

在宅勤務やリモートワークとVPN

さくらインターネットでは以前から「さぶりこ どこでもワーキング」という人事制度によって、1日単位で、あるいは午前中だけとか午後だけとかで、どこでも仕事してよいということをやっていました。さらに新型コロナウイルスの件もあって、現在では出社不要な人の大半が在宅勤務をしています。3月末にはすでに原則自宅勤務ということにして、全社リモートワークに転換しました。4月末の時点では93%の社員が在宅勤務を選択していました。仮に今後、新型コロナウイルスが終息したとしても、基本的に在宅でやりましょうと、オフィスに出社しないとできないような業務をできるだけなくしましょうという方針でやっています。

在宅勤務になるとオフィスへの接続にはVPNを使用することになりますが、優秀なネットワークチームのおかげでVPNに大きな不満はありません。VPN接続することで発生する多少の遅延や帯域の減少はありますが、普通に仕事する分には困らないという状況です。しかしVPNには、次に掲げるような問題点があります。

VPNの問題点

これまで、VPNを使ったセキュリティモデルは「境界防御モデル」と呼ばれていて、一度VPNの境界の中に入ってしまえば様々なサーバやシステム、端末と通信できる形になっていました。

境界防御モデル(さくらインターネット社内教育資料より)

ところがこのモデルでは、そのPCを外に持ち出したとき、あるいは他のネットワークにつないでいるときに起きる問題がいくつかあります。その1つがDNS応答の改ざんによる中間者攻撃です。例えば、メールサーバAが社内にあり、そのメールサーバを使っているユーザが、メーラを起動したまま外出したとします。その状態で外のネットワークにつなぐと、メーラは社内にあったはずのメールサーバAにつなぎに行こうとします。ここで、そのネットワークに悪い中間者がいて、メールサーバAのふりをした偽のメールサーバBを起動し、DNSの応答を改ざんしてメールサーバBに接続させるように仕向けたとします。そうすると、メールサーバAに接続するときに使うパスワードがメールサーバBに届くことになり、パスワードが漏洩するという結果になります。社内でもTLSを使っていたり、ダイジェスト認証のみを受け入れるようにクライアントが設定されていれば問題ないのですが、社内では使っていない場合もあると思うので注意が必要です。

また、VPN接続しているクライアントがマルウェアに感染することもあります。その状態のままVPN接続してしまうと、VPN越しに他の端末にも感染が広がる可能性があります。さらに、例えばそのユーザはVPNでスケジュールシステムを見ているだけなのに、マルウェアに感染すると他のシステム、特に社内ネットワークに放置されている脆弱性のあるサーバが攻撃される可能性が出てきて、影響範囲も広大になります。

ゼロトラストセキュリティ

そこで新しい考え方として、ゼロトラストセキュリティとかゼロトラストネットワークといった名前のものが出てきています。今までは基本的にオフィスのネットワーク内で仕事をしていて、外に出たときにそれと同じ環境を再現する(そのためにはVPNでつなぐのが簡単なのでそうしていた)という考えでした。ゼロトラストセキュリティでは、そもそもみんなインターネットにつながっていて、あらゆる場所で仕事するので、それならVPNでつなぐのをやめて他の方法でセキュリティを確保しようという考え方です。

例えば、今までの境界防御モデルでは社内からのアクセスは無認証で通していたのを、ゼロトラストセキュリティモデルではインターネットからでも社内ネットワークからでも信頼せずにサービスごとに必ず認証を通したり、これまでは単純なID/パスワード認証だったのに加えて2要素認証をするなり、従来は通信は暗号化しなくても大丈夫という考えだったのを改めて全部暗号化しましょうなど、VPNやローカルネットワークに依存しない思想に変わっています。概念図を下に示しますが、通信は全てインターネット越しに行い、TLSなどで暗号化をした上で、サービス毎のセキュリティ境界でさらにしっかりと認証を行うというモデルです。

ゼロトラストセキュリティモデル(さくらインターネット社内教育資料より)

つまりは、クライアントは社内ネットワーク以外で常用され、さらにクライアントがマルウェアに感染したり侵入されることは常時起こりうることを前提としているということです。そこで、ネットワークで認証するのではなくセッションで認証し、しかもできるだけ細かい単位(サービス/機能/ブラウザ/端末/日付など)で認証を行います。さらにパスワード認証だけではなく多要素認証を使います。それもワンタイムトークンだけでなく、アクセス元のネットワークやクライアントのOSが変わったり、地域を移動したときももう1回認証するといった高度なユーザ認証を行います。

ゼロトラストセキュリティの利点

ゼロトラストモデルの利点としては、端末が侵入されてもすぐにはサーバやその他の端末には侵入されません、パスワードが漏れたとしても2要素認証などで不正なログインを排除できます、特定のセッションが奪われたとしても侵入されるのはそのユーザが接続していたサービスだけに限られます、というように、セキュリティ境界線をサービスごとに細かく区切ることによって攻撃による影響範囲を限定的にすることができます。

ところで、VPNを通さずに社内のシステムを使えてしまうのは心配だとか、インターネットにつながってるとこわいと感じる人もいると思います。しかし、実は我々は日頃からこのようなシステムを当たり前のように使っています。例えばGmailで個人情報をやりとりし、Office365でPowerPointの資料を書いたり経理決算書を作ったりと、すでにインターネット越しに超重要な情報を交換しているのです。しかも、これらのサービスは基本的にVPNなしで高い安全性を確保できています。スマホでもPCでもブラウザだけでアクセスできるという利便性もありますし、パスワードが漏れても2要素認証やSMS認証などいろいろな再認証の仕組みで保護されているので、安全に安心に使うことができます。

さくらにおけるゼロトラスト

では、さくらインターネットではこういう概念を取り入れて、どういうことをやっているかを紹介します。

まず、以前から弊社ではシングルサインオンの仕組みは導入していました。SlackやGitHub.comやOffice365など、社外のSaaSを積極的に採用していますが、情報システム管理者がいちいち各サービスのアカウント管理をするのは大変なので、社内にシングルサインオンの認証サーバを起動して、それを利用するようにしていました。シングルサインオンの認証サーバーはTOTP(Time-based One-time Password)とFIDO(Fast IDentity Online)に対応していて、FIDOを利用すると、YubiKeyとか、あるいはMacとTouch IDとChromeがあれば指紋認証が使えるとか、そういったことを以前からしていました。

(左)さくらインターネットグループのSlackのログイン画面 (右)ログインしようとするとシングルサインオンの認証画面に遷移

このような中で新型コロナウイルスが出てきて、新しい取り組みをしました。今まで社内のネットワークにあった社内システムを、インターネットからつなげるようにしましょうということをやりました。そのために、既存のシングルサインオンシステムを活用しつつ、インターネットからの利用においては2要素認証を必須とするような機能を付けました。対象のシステムも、今まで社内にあったアトラシアンのConfluenceであるとか、サイボウズのGaroonとか、購買在庫システムとか、とりあえず個人情報を扱わないようなサービスからやりましょうということで、これらをインターネットから直接、VPNなしで接続できるようにしました。

こうすると、スケジュールが見られて、ドキュメントが読めて、Office365でメールの送受信ができて、社内コミュニケーションはSlackで、テレビ会議はZoomで、購買在庫とかも見られるという状況になるので、社内のバックオフィスについてはVPNがなくても在宅でほぼすべての作業ができるという社員も出てくるようになりました。

社内システムのゼロトラスト化の仕組み

では、その社内システムをインターネットに公開するためにどんなことをしたかという話です。ここでは3台のサーバが登場します。1つは以前からあったシングルサインオンの認証サーバ(SAML IdP)、それから、以前は社内ネットワークにしかつながっていなかった社内システム、そしてもう1つ、新しく作ったのが、シングルサインオンのサービスプロバイダ(SAML SP)を兼任したリバースプロキシです。これはインターネットから来たリクエストをシングルサインオンで認証し、認証できていれば社内ネットワークにあるサーバにリバースプロキシするというものです。NginxとNginx Luaで構築していますが、これは弊社社員が別のシステムで「試しにNginxとLuaでシングルサインオンのサービスプロバイダを作ったらどうなるか」というのをやっていたらしく、それを見つけたので活用しました。SAMLで認証されること以外はただのNginxのリバースプロキシなので、設定も簡単で稼動も安定しています。

社内システムのゼロトラスト化。中央下のSAML SP兼リバースプロキシを新たに設置

TOTPの物理トークンの利用

さらに別の取り組みとして、ワンタイムパスワードの物理トークンの調達をしました。2要素認証をするには、Google Authenticatorや、IIJ SmartKey、1Passwordのワンタイムパスワード機能など、何らかのアプリケーションを入れ、表示されたQRコードを読み取り、登録して使うという、人によっては結構な手間と感じるような部分があります。そういったアプリの操作なしに2要素認証を使ってもらうには、銀行などで普及した、6桁の番号だけが表示される物理デバイスを使うのが一番いいんじゃないかということで、これを導入しました。試験的に少数購入し、希望者にのみ配布しています。

TOTP物理トークン

この物理トークンは、弊社の社員が良い商品を見つけてきまして、1ユーザあたり100円未満で導入しています。製造メーカーがAlibaba.comで店を開いていて、在庫処分品がたまたま安く販売されていたので購入しました。本来であれば、これに対応した認証用のシステムを購入するなり、インテグレーションしないといけないのですが、これは弊社のSSO認証サーバ (SAML IdP) は筆者が実装したものでしたので、特に何の問題もなく導入できたという感じです。

トークンを購入したら、利用希望者に住所などを教えてもらって郵送しました。そして、これは登録がすごく簡単です。物理トークンを受け取ったら2要素認証の設定画面にアクセスし、トークンの裏に書いてあるコードと、現在表示されている6桁の番号を入力するだけで、認証システムにトークンを登録することができます。

FIDO2によるパスワードレス認証

もう1つの取り組みとしては、FIDO2に対応しました。当初のFIDOはU2Fのような二要素認証として使う仕様しかなかったのですが、今はFIDO2という仕様の一部として、パスワードを入れることなく生体認証だけでログインすることができるようになっています。(参考:FIDO仕様概要)

FIDO U2Fはユーザ名とパスワードを入れた後に指紋認証なりYubiKeyなりで認証するというものでしたが、FIDO2のパスワードレス認証ではUSBデバイスや端末に内蔵された部分にサービスの情報やユーザ情報を区別して保存することができる仕様になったため、ユーザ名やパスワードを入れずにログインすることができます。ログインするときは、Chromeの場合は指紋認証してくださいという表示が出ます。複数アカウントを持っている人であればどのアカウントでログインするかの選択肢が表示され、選ぶと認証されるというような感じになっています。こうすることで、登録された端末であれば指紋認証するだけでログインすることができるという利便性向上を行っています。

FIDO2によるパスワードレス認証画面。(左) Chromeによる指紋認証 (右) 複数アカウントがあるときは選択肢が表示される

スムーズに導入するには

これらのゼロトラストのシステムをスムーズに導入するためにはいくつか工夫をしていて、たぶんこれがうまくいった理由かなと思っています。

まず、社内ネットワークとかVPNからのアクセスに関しては、これまで通りの利用を可能にしています。つまり、社内ネットワークからはシングルサインオン認証も2要素認証もなく、今まで通りいきなりアクセスできます。暫定的な対応ですが、こういったシングルサインオンなしのアクセスを許容しました。こうすることで、導入した途端に「なんか今日から使えなくなって変なログイン画面が出るんだけど」みたいなことを言われないように配慮しました。VPNを切ったままつなぎに行ったときは、当然ですが、SSOの認証画面が表示されます。

それから、先ほど紹介したTOTPの物理トークンは、現在70個ぐらい稼働しています。シングルサインオンの設定マニュアルなどはチームのメンバが用意してくれましたが、さらに情報セキュリティ部門の方で、そもそも認証とは、ゼロトラストセキュリティとはどういうものなのか、という社内教育の資料を作ってもらいました。これによって、なぜVPNをやめてゼロトラストにするといいのかということがより広まったのかなと思います。

こういったことによって、TOTPとかFIDOを利用する社員が増えていまして、以前から使ってた人は3割程度だったんですが、今は65%程度の社員がTOTPないしはFIDOのセキュリティモジュールを登録している状態になっています。

ゼロトラストセキュリティに関する社内教育資料

2要素認証を実装する場合の注意

ところで、2要素認証を実装してみて、たぶんこうした方がいいんだろうなというような注意点を感じたので、紹介しておきます。

1つは、TOTPやFIDOデバイスを使うときに、サービスによってはそれらを1個しか登録できないのですが、それよりは複数登録できた方がよいだろうということです。というのは、デバイスを紛失したので登録を解除したいとなったときに、本人が別の2要素認証でログインして、こちらのデバイスをなくしたから失効させようという処理ができるのがメリットの1つです。それから、1個しか登録できないと不便で、不便だと利用されないか、使い回しによるリスクが増えたりして、あまりいいことがありません。利便性を保つためにも複数登録できた方がいいかなと思います。

もう一つ、物理トークンを使う場合にはトークンの中の時刻が実際の時刻とずれている可能性があります。よって、トークン内の時刻がずれるという前提でシステムを組む必要があります。例えば、物理トークン登録時に前後30秒とかではなく5分ぐらいの範囲でマッチするワンタイムパスワードを見つけることで、登録しようとしているトークンは何分ぐらい内部時刻がずれてるんだなとわかり、それを考慮して次から認証してあげるというような実装が必要です。

最終的には「オフィスネットワーク」を廃止したい

最後に今後の課題です。今は社内のネットワークからだったらシングルサインオンを通さないといったことを暫定的にしてますが、そういったものをなくして、どこからでも全システムにおいて2要素認証を必須にしたいと考えています。それから、ゼロトラスト化されていないシステムはまだまだ社内にありますので、そういったものもゼロトラスト化しつつ、それをするためには個人情報の保護などより高度な対策の検討が必要かなと思っています。それと、FIDO2でパスワード認証をした場合に、ネットワークがいつもと違ったらパスワードを再度聞いてみるとか、そういった実装をもうちょっとしようかなと考えています。

ほぼすべてのシステムがゼロトラスト対応し、インターネットからアクセスできるようになった暁には、オフィスのネットワークは単なるインターネットでいいだろうということになります。そういう環境を実現できた後には「オフィスネットワーク」というものをオフィスから廃止したいと思っています。オフィスに行っても高速な有線ネットワークが来ているだけで、つながっている先はインターネットであるという感じにするということです。そうすることで、オフィスの中であっても仮にどこかの端末が侵入されてしまった場合の影響範囲を小さくすることができ、今まで以上にセキュリティを保てるのではないかと考えています。