パスワードにはうんざりです

2020/10/08
次世代基盤第二技術部 第一技術室

はじめに

タイトルの通りです。皆さんも同じではないでしょうか?
私がビジネスやプライベートのITライフでストレスを感じていることです。私の場合、ものぐさな性格のためか、複数のパスワードを覚えたり定期的に変更することだけでなく、パスワードを入力するだけでもおっくうです (>_<)
三井情報は執務フロアでフリーアドレスを採用していますし、また私の勤務する東中野オフィスでは写真のようなカフェのようなラウンジフロアが利用できます。

  

私自身、気分転換のために色々なところを動き回ることがあるのですが、ログオフされたパソコンにパスワードを毎度入力するのを煩わしく感じています。
長いパスワードを設定しているため、なおさらです(現在は30桁弱)。

プライベートで利用するサービスがどんどん増えていくことも手伝って、パスワードというものの存在自体が鬱陶しくなってきました。
世の中のサービス全体が、パスワードレスで便利且つ安全に利用できたらいいのにな、と思います。
そもそもパスワードは漏洩し易い、推測され易い、使いまわされ易いなどの問題点があり、ハッカーにとって魅力的なものであると言われています。
今回はパスワードレスを実現する技術についてお話ししたいと思います。

パスワードクラッキングの時間計測

パスワードレスの話に入る前に、パスワードが弱いものであることを実感していただくため、パスワードクラッキングを試してみましたので結果を紹介します。検証にはパスワードクラッキングツールで有名な「John the Ripper」を用いました。
実施したのはあくまでオフライン攻撃(パスワードがかかったファイルやパスワードをハッシュ化して格納したファイルを盗んで攻撃者のコンピュータで解析すること)であり、今回はファイルを盗むプロセスを省略していますので、パスワードの解析時間だけでリスクを判断することは出来ませんが、1つの参考になれば幸いです。

 

検証にあたり以下のような条件を設定し、実施しました。

 

<被害者側>
• ユーザ名はtest、パスワードをTakahiro!298とした(名前+適当な4桁のデータ)
• ユーザ情報としてフルネームが設定されている

<攻撃者側>
• 特定個人をターゲットにし、ユーザ名は既に把握している
• パスワードポリシーは英数字混在で8桁以上であり、このポリシーも既に把握している
• 標的はパスワードの一部としてユーザ名、姓、名などユーザの属性に紐付く属性をパスワードの一部に含めているものと推測
• 解析に使用するマシンは、Amazon Elastic Compute Cloud (Amazon EC2)のc5.24xlarge(vCPU数96)を8つ

 

結果としては、5時間弱で解析できました。

 


評価した環境では、パスワードに含まれるユーザ名や氏名が先頭に現れるのか後方に現れるのか、数値をまぜる/混ぜないなど、解析する(ハッシュ計算する)パターンのルールを正規表現のように多数記述したのですが、そのルールを8つのAmazon EC2インスタンスで手分けして処理する形で実施しました。


補足ですが、処理にかかる時間は、何個目のルールにマッチするかによっても変わってきます。前述の結果では、あるサーバの最終行のルールにマッチする状態であったため、結構時間がかかりました。その後、試しに該当のルールを先頭へ移してやり直したところ、パスワード解析処理開始から5秒でクラッキングに成功しました。当然ですがサーバ台数を増やせば、平均して短時間でクラッキングできるようになります。
ユーザ情報がパスワードに含まれるなど、攻撃者の推測があたったことを前提にしていますが、この程度のパスワードだと簡単にクラッキングできることが分かります。苗字と数桁の数値を組み合わせたパスワードを利用している人も多いのではないでしょうか。
ちなみに、上記の実験もそうなのですが、パスワードに数値を混在させることを必須としている場合、パスワードクラッキングの際に文字や記号だけのパスワードを試行パターンから除外できるため、攻撃者にとって有利に働くことがあります。より複雑化させているつもりでも、想定する攻撃方法によっては逆効果になります。

安全なパスワードを使っても残る危険性

桁数も多く、容易に推測できない複雑なパスワードであってもクレデンシャルスタッフィング(Credential Stuffing)攻撃のリスクは残ります。
多くの人は様々なサービスで同じパスワードを用いています。そのため、どこか1つのサービスからパスワード情報が流出すると、そのID/パスワードを用いて別のサービスへのログイン試行が行われてしまいます。プライベートでももちろん要注意ですが、ビジネスシーンでも同様です。仕事中に使う外部サイトへのサインアップは、会社のメールアドレスで登録することが多いと思います。

会社である程度セキュリティ対策を実践しているつもりでも、認証が甘ければ話になりません。外部の脆弱なサイトからID/パスワード情報が流出した場合、それを使ってアクセスされるためです。
また、クレデンシャルスタッフィングでは、攻撃が成功してもシステムから見ればあくまで正しいユーザ名とパスワードでログインしているだけですので、検知が難しいことがあります。検知できるソリューションもありますが、企業システムの場合はまずは多要素認証が優先です。VPNなどをパスワード認証のみで提供している場合には急務と認識すべきです。

 

ここで、自分のパスワードがどこかで漏洩してないかを無料で確認できるサービスを紹介します。「Have I been pwned?」(https://haveibeenpwned.com/)というサイトです。

 

実は、私のプライベートのアカウントが漏洩しているサイトがあって、上記サービスで知ることができました (T_T)
画像の通り、Oh no - pwned! と表示されます、、、。(上記画像には含まれませんが、どのサイトで漏洩したのかも表示されます)
かなり前に登録し、何年もログインせず忘れかけていたサイトでした。皆さんもチェックしてみることをお勧めします。

顔パスで全サービスへログイン

ここからはリスクでなくセキュリティ対策の話に入りたいと思います。世の中のサービス全体とはいきませんが、会社などの1つの組織の中なら、脱パスワードを実現することができます。組織において全てのITリソースの認証を単一のものへ統合し、そこでパスワードを使わず安全性と利便性を両立した方式を採用することで実現します。
マイクロソフトのWindows Hello for Businessでは、顔認証や指紋認証を用いてAzure Active Directory(Azure AD)への認証を行うことが出来ます。顔認証で端末へログオンし、そのままMicrosoft 365®のアプリケーション群などへパスワードレスでシームレスにアクセスすることができます。


 
SAML(Security Assertion Markup Language、ID連携・シングルサインオンのオープンスタンダード)などによりマイクロソフト以外のアプリケーションと連携していれば、それらのアプリケーションへもシームレスにアクセスできます。始めて使ったときは感動しました (^^♪
顔パスで様々なサービスへアクセスできるのです。


しくみは次の項で触れたいと思います。

MFA(Multi-Factor Authentication、多要素認証)の実装

生体認証を用いても単一の要素での認証では安心できません。認証に関する安全性を高めるには、複数の要素で認証する多要素認証が有効とされています。認証に用いる要素は以下の3つに分類されます。

1. 本人が知っているもの(パスワードなど)
2. 本人が持っているもの(トークンやカードなど)
3. 本人固有の要素(指紋、網膜、虹彩など)

多要素認証では、上記3つのうち複数を組み合わせる必要があります。同じ分類に属する認証方式を組み合わせてはなりません。従って、「パスワードと秘密の質問」、「スマホとスマートカード」、「顔認証と指紋認証」などは多要素認証とは認められません。

Windows Hello for Businessはどうでしょう。Windows Hello for Businessでは、顔や指紋、PINなどの1つ目の要素で認証できたら、端末内のTPM(Trusted Platform Module)というセキュリティチップに保存され他者が抜き出せないようにしたプライベートキーを取り出し、それと対になるパブリックキーが保存されたAzure ADと連携し非対称暗号型署名のしくみを利用して認証します。

 

 


 
ユーザとプライベートキーは紐付き、プライベートキーとデバイスは紐付きます。デバイスが本人のみが持っているものに相当しますので、多要素認証になります(顔とデバイスの2要素です)。

Windows Hello for Businessでは、認証の要素としてAuthenticatorアプリでのワンタイムパスワードにも対応していますが入力はパスワード以上に面倒です。プッシュ通知(アプリの通知に応じる)なら少しマシですがやはり生体認証には劣ります。
また、FIDO(Fast IDentity Online、ファイド)規格対応のUSBデバイスなどを用いることでも便利且つ安全な認証を実現できますが、物を失くしやすい私としてはフォームファクター(物体の大きさ)の小さなものは持ちたくありません(-_-;)

 

TPM:縁の下の力持ち

Windows Hello for Businessでは、プライベートキーはパソコン内のTPMというチップに保存されます。TPMは耐タンパ性(※)に優れたとても重要な部品で、TCG(Trusted Computing Group)という団体で仕様が定義されており、現在製造・販売されている多くのパソコンで標準搭載されています。

※ 耐タンパ性・・・そのコンポーネントに対して外部から行われる改竄・解読・取出しなどに対する耐性のこと。悪意あるプログラムが読み出そうとしたり、チップを物理的に取り出されても機密データの取り出しが出来ないような能力のことです。モノの管理が苦手な私も安心して紛失することが出来る訳です (-_-;)


ISO/IEC11889-1:2015(Information technology -- Trusted Platform Module Library -- Part 1: Architecture)によると、TPMは暗号を使用したセキュリティとプライバシーの技術を採用することでコンピューティングプラットフォームの信頼を可能にするもの、としています。

もう少し具体的且つ分かり易く説明すると、TPMはプロセッサ、RAM、ROM、フラッシュメモリーなどが搭載され、以下のような処理を行うことが出来ます。

• 安全な乱数生成、安全な鍵生成
• 非対称暗号処理(暗号化/復号)
• 非対称型署名(署名/署名検証)
• 対象暗号処理(暗号化/復号)
• 対象型署名(署名/署名検証)
• ハッシュ関数の処理
• 鍵やその他小さなデータのセキュアな保存

現行仕様のTPM2.0では、ECDH、AES、SHA-256、SHA-384などに対応しています。

 

TPM実用化例

TPMは暗号に関する処理だけでなく、小さな金庫のように使うことができるため、実用化されている用途も広がりつつあります。例えば以下のようなものがあります。

• Windows Hello for Businessでの鍵生成や鍵保存
• Microsoft Defender Application GuardでVBS暗号化キーの保存
• BitLocker®の暗号化キーの保存
• 鍵とセットになったクライアント証明書を保存し仮想のスマートカードとして使用
• 同様にChromebookTMデバイスへのクライアント証明書の格納
• Google ChromeとWindows Helloを連携することで生体認証をパスした場合にクレジットカード番号やCVCを安全に自動入力する
• デバイスのSecure Boot機能でプラットフォームの情報をTPMのPCR(Platform Configuration Register)へ保存し、OSの改竄や別のドライブからの起動を防止。パソコン以外(例としてアプライアンスなど)でも用いられています。
• OS起動後もアプリケーションプログラムの改竄検知で使用可能
• TPMへアクセスするための標準API仕様としてTSS(TPM Software Stack)が公開されています。
• 鍵生成やデータの格納など、Linux®用のコマンドラインベースのツールがあります
• 自動車(コネクテッドカー)へ搭載し、不正アクセスや物理的な攻撃へ対処

TPMは小さく、記憶領域やプロセッサを備え、暗号機能を具備し耐タンパ性もあることから、スマートカードと似た特性を持っているため、仮想スマートカードとして使うことが出来ます。
私でもパソコンなら流石に失くしにくいので、アイデンティティを証明するチップが内蔵されているのは安心です。ポケットやバッグからモゾモゾと何かを取り出す必要も無く便利です。
単にセキュアなだけでなく利便性も損ねないことから、私はパスワード以外の認証要素の有力な要素として捉えています。

暗号モジュールのFIPS 140-2規格

TPMを含む様々な暗号モジュール(ハードウェア、ソフトウェア、ファームウェア)に関する認定規格としてFIPS 140-2(Federal Information Processing Standard)があります。アメリカ国立標準技術研究所 (National Institute of Standards and Technology、NIST) が所管しており、軍事機密のようなトップシークレットな情報ではないものの機微な情報を保護することを目的に発行され、米国政府機関やその請負業者などには適合製品の利用が義務付けられています。
実際には他国の政府や民間企業でも調達基準にしているところがあり、各国のメーカーが認定を取得していますので、日本の民間企業でもクリティカルな業務なら調達基準にするのも良いかもしれません。


FIPS 140-2では、4つの認定レベルを定義しています。概要は以下の通りです。


• レベル1:基本的な製品品質、1つ以上の機能やアルゴリズム実装の認証等
• レベル2:レベル1の要件に加え、物理的改竄の痕跡を残すこと、操作に際し役割ベースの認証が必要等
• レベル3:レベル1および2の要件に加え、侵入者が暗号化モジュール内に保持されているCSPにアクセスできないようにすること、物理的アクセスを検知し対応すること、IDベースで認証すること等
• レベル4:最高レベルであり、妥当性・完全性・有効性を確認する厳格なテストを受けており、また侵害の検知時に重要なセキュリティパラメータの即時ゼロ化(削除)をトリガーする ( ̄□ ̄;)!!

さいごに

今回のコラムではパスワードの危険性と、パスワード以外の認証方法、それを支える技術についてご紹介しました。
当社では現在、多要素認証を含む新しい認証サービスを企画中です。
このDXの時代に、紙幣や硬貨を使うことに煩わしさを感じている人も多いと思います。パスワードも同様に世の中全体の依存度が早く減って欲しいと思います。パスワードは言ってみれば合言葉のようなものです。合言葉は7世紀末頃から既に使われていたことが日本書紀から読み取れるそうです。そろそろ卒業したいですね。

執筆者

お問い合わせ

ページTOP
当ウェブサイトでは、サイトの利便性やサービスを改善するため、Cookieを使用しております。このまま当ウェブサイトをご利用になる場合、Cookieを使用することにご同意いただいたものとさせていただきます。Cookieに関する情報や設定については「個人情報保護方針」をご覧ください。 同意して閉じる