LastPass 2022年 開発環境から保管庫の控えへ
1つ目の侵害で開発環境からソースと社内の秘密を取られ、閉じたはずの件の情報で次の標的を選ばれた。2つ目で、全利用者の保管庫の控えと、多要素認証の控えを復号する鍵まで取られた。控えを暗号化していても、鍵が同じ人の手の届く所にあれば守りにならない。
要点
- 1つ目の侵害では、ソフトの技術者の会社のノートPCが侵害され、開発環境から200のうち14のリポジトリと、秘密と証明書の入った社内のスクリプトを取られた[2]。利用者のデータは取られていない。
- LastPass は1つ目を一度閉じたが、そこで取られた情報が、2つ目の標的選びに使われていた[2]。閉じる判断は、取られた物が何に使えるかで決める。
- 2つ目では、上級の DevOps の技術者を、弱い第三者のソフトを使って狙い、クラウドの控えの置き場に入る秘密を得た[2]。
- 取られた控えには、全利用者の保管庫が入っていた。中の資格情報は利用者のマスターパスワードから作る鍵で暗号化されていたが、Webサイトの URL は暗号化されていなかった[1][2]。
- 多要素認証の控えは暗号化されていたが、別に置いたはずの復号の鍵も取られた秘密の中にあった[2]。
何が起きたか
| 日付 | 出来事 |
|---|---|
| 2022年8月 | 1つ目の侵害。攻撃者の動きは8月の4日間に限られた。開発者の侵害された端末を使い、開発者が多要素認証を済ませた後に、その開発者になりすました[1] |
| 2022年8月25日 | LastPass が公表する。1つの侵害された開発者のアカウントを通じて開発環境に入られ、ソースと技術の情報を取られた。約2週間前に検知し、封じ込めた。利用者のデータと暗号化された保管庫への侵入の証拠は無い[1] |
| 2022年9月15日 | 1つ目の調べを終えたと公表する[1] |
| 2022年8月12日から10月26日 | 2つ目の侵害の期間。開始の日は報道による[3]。終わりの日は LastPass が書く[2] |
| 2022年11月30日 | 関連会社の GoTo と共有する第三者のクラウドの置き場で、異常な動きを最近検知したと公表する。8月の件の情報を使い、利用者の情報の一部に触れたとする[1] |
| 2022年12月22日 | 取られた物を公表する。利用者のアカウントの基本の情報と、保管庫の控えを複製された[1] |
| 2023年3月1日 | 調べを終えたとして、2つの侵害の詳細、取られたデータ、済ませた対策、利用者への勧めを公表する。調べには Mandiant も加わった[2] |
通った道筋
| 段 | LastPass の発表 |
|---|---|
| 1つ目の入口 | ソフトの技術者の会社のノートPCが侵害され、クラウドの開発環境に入られた[2]。開発者が多要素認証を済ませた後に、その開発者になりすました[1] |
| 1つ目で取られた物 | 200のうち14のソフトのリポジトリ、秘密と証明書を含む社内のスクリプト、社内の文書。利用者のデータと保管庫のデータは取られていない[2] |
| 2つの侵害のつながり | 1つ目は閉じたと宣言していたが、そこで取られた情報が、2つ目の標的を見つけるのに使われたと後で分かった[2]。12月22日の発表は、取られた情報で別の社員を狙い、資格情報と鍵を得て、クラウドの置き場の一部の領域に入り復号したと書く[1] |
| 2つ目の入口 | 上級の DevOps の技術者を、弱い第三者のソフトを使って狙い、マルウェアを入れ、既存の制御をすり抜け、クラウドの控えの置き場に入った[2] |
| 2つ目で取られた物 | 控えの置き場に入るための DevOps の秘密。設定のデータ、API の秘密、他社との連携の秘密、利用者の属性の情報、全利用者の保管庫の控え。多要素認証と連携ログインのデータベースの控え。マスターパスワードは取られた物に含まれない[2] |
自宅の計算機とキーロガーの話は報道による
報道は、LastPass の補足の文書を引いて、狙われたのは技術者の自宅の計算機で、弱いメディアのソフトの遠隔のコードの実行からキーロガーを入れ、打ったパスワードを取って会社の保管庫に入ったと伝える。復号の鍵に触れられるのは DevOps の技術者4人だけで、控えは AWS の S3 にあり、AWS GuardDuty の警告で異常に気付いたとも伝える[3]。LastPass の3月1日の発表は、弱い第三者のソフトを使って狙った、としか書いていない[2]。ソフトの名前を挙げた報道もあるが、LastPass は名前を出していない。
取られた控えの中身
保管庫の暗号化は、利用者の端末でマスターパスワードから鍵を作り、端末の側で暗号化する作りである。LastPass はマスターパスワードを知らず、保存もしないと書く[1]。この作りは控えの中の資格情報を守ったが、暗号化の外に置かれた項目は守らなかった。
| 項目 | 状態 | 守る側から見た意味 |
|---|---|---|
| 利用者名、パスワード、安全なメモ、フォームの値 | 256ビットの AES で暗号化。鍵はマスターパスワードから作る[1] | 控えは手元で何度でも試せる。守りの強さは、利用者のマスターパスワードの強さと鍵を作る反復の回数で決まる |
| Webサイトの URL、入れたソフトのファイルの道筋、一部のメールアドレス | 暗号化されていない[2] | どのサービスを使っているかが分かり、標的を絞る手がかりになる |
| 会社名、利用者名、請求先の住所、メールアドレス、電話番号、IPアドレス | 控えから複製された[1] | 利用者への成りすましの連絡に使える |
| 認証アプリの種、予備の電話番号、K2 の鍵 | 暗号化されていたが、別に置いた復号の鍵も取られた[2] | 鍵とデータを同じ人が同じ道で取れる所に置けば、暗号化は守りにならない |
- 12月22日の発表は、マスターパスワードから鍵を作る既定の設定を PBKDF2 の 100,100 回とし、2018年からマスターパスワードは12文字以上を既定にしていると書く[1]。既定に従う利用者には総当たりは極めて難しいとし、既定に従っていない利用者には、保存したサイトのパスワードの変更を考えるよう勧めた[1]。
- OWASP のパスワードの保存のチートシートの今の目安は、PBKDF2 の HMAC-SHA-256 で 600,000 回以上である。A04 暗号化の不備 の型2で扱う。
どこで止められたか
| 止める所 | この件で | 限り |
|---|---|---|
| 強い権限は管理した端末からだけ | 1つ目は、開発者が多要素認証を済ませた後の成りすましだった[1]。2つ目は、第三者のソフトの弱点からマルウェアを入れた[2] | 端末そのものを取られれば、多要素認証は済んだ状態で使われる。端末の管理と、セッションの短さを組で置く |
| スクリプトに秘密を書かない | 1つ目で、秘密と証明書を含む社内のスクリプトを取られた[2] | どの秘密が2つ目に使われたかは発表に無い |
| 取られた物で次に何ができるかで閉じる | 1つ目を閉じたと宣言した後に、その情報で2つ目の標的が選ばれた[2] | 取られた情報の使い道は、相手の次の手を見るまで全部は読めない。読めない分、秘密は回す |
| 復号の鍵を控えと別の道に置く | 多要素認証の控えの復号の鍵は別に置かれていたが、同じ秘密の束の中で取られた[2] | 鍵を扱える人は必ずいる。その人の端末と資格情報が、最も強く守る所になる |
| 平文で置く項目を残さない | 保管庫の URL は平文だった[1]。LastPass は、暗号化を広げる作業を始めたと書く[2] | 検索や表示のために平文にした項目は、そのまま漏れる。何を平文で持つかを決めて記録する |
LastPass がした対応
| 件 | 対応 |
|---|---|
| 1つ目 | 開発環境を消して作り直し、安全の制御を足し、チームが使う平文の秘密を回し、さらされた証明書を取り替えた[2] |
| 2つ目 | クラウドの置き場を調べて新しい方針と制御を当て、特権の権限を見直して変え、取られた秘密と証明書を回した[2] |
| 全体 | 新しい安全の技術を入れ、方針を見直し、権限を絞り、アプリと控えの仕組みで暗号化の範囲を広げる作業を始めた[2] |
| 利用者 | 個人と家族の利用者向けと、企業の管理者向けに、分けて勧めの文書を出した[2] |
守り方
根本の直し方
- 秘密をスクリプト、リポジトリ、文書に書かない。実行の時に秘密の管理の仕組みから、短い期限の資格情報として取る。ソースが漏れても、中に使える秘密が無い形にする。
- 控えを復号する鍵と、控えの置き場に入る権限を、別の人か別の仕組みの承認に分ける。1人の端末の侵害で、入ると解くの両方がそろわないようにする。
- 本番と控えに届く権限は、会社が管理した端末からだけ使えるようにする。個人の端末と、そこで動く第三者のソフトを、強い権限の道に入れない。
- 利用者のデータは、平文で持つ項目を最小にし、残す項目とその理由を記録する。
架空の会社の控えを取るスクリプト。秘密の書き方
# backup.sh 悪い例
export STORE_ACCESS_KEY="AKEXAMPLE0000000000"
export BACKUP_DECRYPT_KEY="0f1e2d3c4b5a69788796a5b4c3d2e1f0"
# このスクリプトがリポジトリごと取られると、置き場に入る鍵と解く鍵が両方そろう
# backup.sh 直した例
TOKEN=$(vault-cli login --role backup-writer --ttl 15m) # 管理した端末と承認のあとだけ発行
backup-cli put --store backups.example.com --encrypt-with kms:backup-key
# 書く役割は暗号化だけでき、復号の権限を持たない。復号は別の役割と別の承認
- 書く役割に復号の権限を持たせない。控えを戻す作業は頻度が低いので、承認を2人にしても回る。
- 秘密を置く場所と、漏れた時に回す順は 秘密の鍵の扱い で扱う。
緩和の策
- 控えの置き場への読み出しを、量と元と時刻で見張る。普段の書き込みと違う大きな読み出しを警告にする。
- 侵害を閉じる前に、取られた物の一覧を作り、その中の秘密を全部回し、名前の出た人を次の標的として守りを足す。
- 利用者の側では、マスターパスワードを長くし、鍵を作る反復の回数を今の目安に上げる。控えを取られた時の守りは、その2つで決まる。
- 控えの中の多要素認証の種のように、取られると利用者の別の守りが崩れる物は、取られた時に利用者が作り直せる手順を用意する。LastPass は、勧めの文書を利用者の種類ごとに分けて出した[2]。
型としての整理は、秘密の直書きが 秘密の鍵の扱い に、鍵と暗号化の扱いが A04 暗号化の不備 に、置き場の公開と静的な鍵が A02 セキュリティ設定の不備 の型3に当たる。
参照
- Notice of Recent Security Incident LastPass、2022年8月25日、9月15日、11月30日、12月22日の更新
- Security Incident Update and Recommended Actions LastPass、2023年3月1日
- LastPass attacker hacked engineer's home computer The Record、2023年2月28日。報道