ケンタロウのメモ

内容薄めです。

SAML脆弱性のまとめ

SAMLライブラリに脆弱性が見つかり、シングルサインオンの過程で異なるユーザになりすますことが可能なことがわかった。なかなか衝撃的だったので整理してみたい。

なお、自分の整理なのでテンポよく簡潔な言葉でまとめることを心掛ける。それゆえ正確ではないかもしれない。間違いもあるだろう。

このブログをこれから読もうという奇特な方は注意いただきたい。

 

  • まずSAMLとはなにか

f:id:kentarou55:20171217112652p:plain


以前も載せたアイデンティティ管理におけるレイヤー図だが

SAMLはこの「フェデレーション」と「SSO」の実装である。


フェデレーションとはネットワークドメインをまたいだアイデンティティの連携である。SSOはシングルサインオンで、1度誰かに認証してもらったという情報を引き回して何度もユーザがサインオン行為をしなくてよくすることだ。なんか似てるがちょっと違う。


SAMLはもともと企業のM&Aにより異なるシステム間で認証を統一するためにできたのが始まりと聞いたことがある。よって最初は企業ネットワーク内のアイデンティティ連携のための規格だったが、パブリッククラウドが台頭し、その認証連携にも活用できるため利用拡大し次第にネットワークドメインをまたいだアイデンティティ連携での利用が主流となった。


なお現在フェデレーションプロトコルの主流といえばOpenIDConnectだ。こちらはコンシューマ向けサービスでもともと利用されていたOpenIDという認証機能にOAuthの認可機能を取り入れエンタープライズで活用できるようになったものだ。


発展の経緯は違うものの機能的にはSAMLと似たような感じだ。だがOpenIDConnectは軽い。SAMLが一回のパケットに認証情報も属性情報もいろいろどっさり持ち込むのに対し、OpenIDConnectは最初のやりとりは最小限の認証情報だけ。属性情報が欲しければ再度要求するというフローになっている。トラフィックの問題でSAMLからOpenIDConnectに乗り換えた事例を聞いたことがある。


SAMLの話に戻る。SAMLのフローはこんな感じ。


https://www.secureauth.com/sites/default/files/saml_sp_in_sso_flow.pngwww.secureauth.com


IdentityProviderは例えば社内イントラ内にあるADやLDAPサーバだ。ユーザが例えばSalesForceみたいなクラウドサービス(SP)を使いたいとき、わざわざ社員情報を登録するのは面倒だし管理が一元化できない。自社FWの外に社員情報を置くことにまだ抵抗もあるかもしれない。当然社内にすでにあるADやLDAPの情報を使いたい。

 

そこで利用したいクラウドサービスがSAMLフェデレーションに対応していれば、上記のフローで実際の認証はIdPが実施し、SPは「認証OKだったよ」という情報とそのユーザの属性情報だけもらい、以降の処理をする。

 

大元はDuo SecurityのKelby Ludwigさんが報告したらしい。
duo.com


英語のサイトなのでなんとなくわかるようでわからない。
こちらの富士榮さんのブログがめちゃくちゃわかりやすい。
idmlab.eidentity.jp


簡単に言うと、SAMLの応答(上のフローでいくと⑤の時)のNameIDというメルアドとか社員番号とかのユーザIDが入ってくる項目にコメントが埋め込まれると、コメントの後ろが無視されてしまうというのが今回の問題です。


これを悪用すると

(a) user@user.com<!-- コメント -->.evil.jp というユーザIDでIdPの認証を受ける(フロー図の④)

(b) IdPからSPにNameIDにuser@user.com<!-- コメント -->.evil.jpが入ったパケットがSAMLレスポンスとしていく(フロー図の⑤)

(c) SPはuser@user.com.evil.jpで正規化~署名検証までした後でuser@user.comとしてログインしてしまう

=NameIDを詐称し他人で入れてしまうということです。


つまりSAMLのSP側の実装の不具合ということになります。

SAML自体のプロトコルに問題があるわけではないです。

 

  • 影響があったサービス


SAMLを使っていると全部影響があるということではなく、上記不具合が包含されたライブラリを使ってSAML SPを実装しているサービスに影響があります。

 

ここが情報豊富だった
www.kb.cert.org


以下のライブラリに不具合のある実装が包含されているようです。

 

ライブラリ   脆弱性番号 GitHub/製品ページ
OneLogin python-saml CVE-2017-11427 https://github.com/onelogin/python-saml
 〃 ruby​​-saml CVE-2017-11428 https://github.com/onelogin/ruby-saml
Clever saml2-js CVE-2017-11429 https://github.com/Clever/saml2
OmniAuth SAML CVE-2017-11430 https://github.com/omniauth/omniauth-saml
Shibboleth

openSAML C ++

CVE-2018-0489 https://shibboleth.net/downloads/c++-opensaml/2.6.1/
Duo Network Gateway   CVE-2018-7340 ?

 

 

SAML製品またはベンダで影響なしと確認できているものは以下。

AssureBridge 影響なし
Box 影響なし
CA Technologies 影響なし
Cisco 影響なし
ComponentSpace Pty Ltd 影響なし
Entr'ouvert 影響なし
ForgeRock 影響なし
GitHub 影響なし
Google 影響なし
Microsoft(AAD、ADFS) 影響なし
Okta Inc. 影響なし
Ping Identity 影響なし
Pivotal Software,Inc. 影響なし
VMware 影響なし
OpenAM 影響なし

 

https://www.kb.cert.org/vuls/byvendor?searchview&Query=FIELD+Reference=475445&SearchOrder=4


SAMLライブラリ の脆弱性(JVNVU#98536678)について [AM20180306-1] - Open Source Solution Technology Corporation

 

  • 所感

思ったより簡単な操作でできてしまうんだな、、と恐怖を感じました。

対象製品を利用している方は対策済みバージョンへアップデートをちゃんとしたほうがいいですね。

ちなみに本当に成功するのか試してみたい気持ちに少しだけなりましたが実際のサービスで意図的に詐称するとおそらく不正アクセス禁止法違反の「他人の識別符号(パスワード、生体認証)他を使ってアクセス制限を突破してはならない。」に該当しますよね(-_-;)

 

更新履歴:

2018/3/9  新規作成

2018/3/9 表がスマホでは見えなかったため、違う作り方にしました 

 

 

 

仮想通貨取引所の取締役が誘拐された件

このニュースが気になった

www.hackread.com

 

jp.cointelegraph.com

 

 

仮想通貨取引所EXMOは法人登録はイギリスだが、ウクライナを拠点とする取引所。

取り扱う仮想通貨は以下

Bitcoin
Litecoin
Dogecoin
Dash
Ethereum
Waves
Zcash
Tether
Monero
Ripple
KickCoin
Ethereum Classic
Bitcoin Cash

 

Wavesやkickcoinを取り扱うのが特徴らしい

 

その取締役であるパベル・レナーさんが12/27にキエフの勤務先を出たところで誘拐され、少なくとも12/30には身代金を支払って解放されている

支払ったのは、ビットコインで1億1000万円相当だ

 

ウクライナの情勢はよくわからないが仮に日本でこんな事件がおきたら大変なことだ

しかも身代金の入手に成功しているので、同じような事件が続くかもしれない

 

誘拐事件というと、身代金は足のつかない現金の受け渡し、それを引き渡すタイミングが犯人確保のチャンスというのが映画やドラマではお約束だが

 

ビットコインは足がつかないので

ランサムウェアやランサム(D)DoSなどのサイバー犯罪の支払いに使われるだけでなく

リアルの犯罪にもとうとう使われるのかと思うと恐ろしくなる

 

でも完全匿名なサイバー犯罪とは違い、誘拐なのだからなにかしら痕跡はあるだろう、、

犯人逮捕を願っています

 

あとひとつ解せないのが

 誘拐の翌日にEXMOは(D)DoS攻撃を受け、サイトダウンに至っている

 

犯人が身代金支払いを促すためのさらなる脅しとして(D)DoS攻撃も併用したのだろうか

それとも全く別の攻撃なのか

 

 なんにせよ真相が解明されるのを願います

 

ブロックチェーン技術で個人情報を管理するとはどういうことか

この記事が気になったので調べてみた。

 

www.nikkei.com

 

そもそもブロックチェーンとは、

分散型台帳技術で、要は分散ネットワーク型のデータベースである。

ブロックチェーン英語Blockchain)とは、分散型台帳技術[1]、または、分散型ネットワークである[2]ブロックチェインとも[3][4]ビットコインの中核技術(Satoshi Nakamotoが開発)を原型とするデータベースである。ブロックと呼ばれる順序付けられたレコードの連続的に増加するリストを持つ。各ブロックには、タイムスタンプと前のブロックへのリンクが含まれている。理論上、一度記録すると、ブロック内のデータを遡及的に変更することはできない。ブロックチェーンデータベースは、Peer to Peerネットワークと分散型タイムスタンプサーバーの使用により、自律的に管理される。フィンテックに応用されるケースでは独占資金洗浄の危険が指摘されることもある。

ブロックチェーン - Wikipedia

 

ちなみに開発者とされるSatoshi Nakamotoは正体を明かしていない。

少し前にSBIホールディングス代表取締役である北尾氏が

サトシ・ナカモト氏と議論を行ったとし少しざわっとしたが

apptimes.net

今見たらなんか全然違う内容に訂正されていた。大丈夫か。

【訂正内容】

「これの対策として北尾氏はビットコインの考案者であるサトシ・ナカモト氏と議論を行っている。」→「ウォレットのセキュリティ対策が弱すぎるとし、北尾氏は以下のように話した。」。北尾氏の発言をYouTubeから引用し追記。訂正日10月29日

 

 

ブロックチェーンの技術的な解説はとても僕では無理なので

ひとまずこのあたりでざっと概要をつかんでいただいて

www.slideshare.net

 

ブロックチェーンのメリットは

  • 分散管理なので各所で同じデータを共有できる、しかも低コスト(peer to peer)
  • 改ざんに強い(proof of work)
  • そのユーザが記録したことを証明できる

 

 

 

ビットコインなどの仮想通貨はこの特性を生かして、

国に依存しない(非中央集権的)な通貨を発行し運用してるわけです

 

で、この技術を使って個人情報を管理するとどういうメリットがあるのか?

以下は最初のニュース記事からの抜粋

 

月間17万件に及ぶ家賃の決済履歴と物件の情報を、ブロックチェーンの仕組みを使って金融機関と共有する。

 金融機関は融資条件を決める際の与信情報として、家賃の決済履歴を支払い余力の算定などに使えるようになる。これまでは借り手の給与明細や銀行口座を確認するなどの手間がかかっていた。

機微で大量の更新情報を低コストで管理でき、

分散ネットワーク内で共有ができるから ということか

 

個人情報などのデータは通常、一つのサーバーやクラウドで管理するが、情報が書き換えられるなどの危険性がある。一方、ブロックチェーンは複数のパソコンがデータを管理し、相互に監視しながら正しい記録を蓄積していくため、情報が改ざんされにくい。

 

確かに一か所で管理するより改ざんされにくいのはわかる

 

こんな記事をみつけた

https://infcurion.jp/wp-content/uploads/2016/04/cc92fdea1e37958c5dbb304366e8602f.png

infcurion.jp

 

今の時点では真ん中の活用までだが

将来的には一番右のスマートコントラクトにも展開していけるかも、、

 

という意思があるかどうかわかりませんが

 

ひとまず今後もウォッチしたいです。

 

FIDOアライアンスに行ってきた

12/8(金)に虎ノ門ヒルズで開催されたFIDOアライアンスに行ってきたので

心に残ったことをメモ

 

会場の様子

セッションによっては立ち見もいた模様

セキュリティの一分野であるID管理、かつ「認証」だけに特化したFIDOの話、正直そんなに人いないんじゃないかと思ってたけど

意外と(失礼)注目されていて会場内も熱気を感じました

 

ちなみに僕はこういうのセミナー、早めに会場入りして前のほうでかつ一番はじっこを

キープする派です。この写真には残念ながら映ってないけど(-_-;)

そして隣に自分が一方的にTwitterフォローしているID界の有名人が座るという・・

ちょっとドキドキしてました(笑

 

そもそもFIDOとは

アイデンティティ管理のレイヤーはこんな感じに分類されるのですが

f:id:kentarou55:20171217112652p:plain

この「認証」のレイヤーだけに特化したプロトコルがFIDOです。

OAuthやOpenIDConnectはSSOやフェデレーションのレイヤです。

流れはこの、LINE関水さんの説明がとてもわかりやすかった

f:id:kentarou55:20171217111103j:plain

FIDOのキモは、ユーザの「認証」はローカルで行うので、ユーザの識別情報がネットワーク上に流れないということです。

そして、「認証」の方式は特に定めていないことです。

FIDOというと生体認証のイメージがありますが、生体だけに限定するものではないです。

f:id:kentarou55:20171217123010p:plain

FIDO認証と公開鍵暗号

ヤフー株式会社 Yahoo!Japan研究所 上席研究員 五味秀仁 さんの公開資料より

http://www.jnsa.org/seminar/pki-day/2017/data/170419_gomi.pdf

 生体認証自体は昔からあるものだけど、ベンダー独自仕様だったりして相互運用性がなかった。そこを解決するのがFIDOで、FIDO標準メッセージに対応していれば、FIDO認証器として動作でき、認証を部品として切り離すことができる。

 

そしてそのFIDO認証器の認定プログラムがこれからできるそうです。

逆にいままではどういう基準で認定されてたのがよくわかりませんでしたが・・

 

FIDOに対応している認証器だと

Windows10のWindowsHelloが有名だと思うんですが

FIDOアライアンスJAPAN座長森山さんがいらっしゃるNTTドコモが着々と対応機種を増やしていたり

今年ソフトバンクがFIDOアライアンスに加入したそうで

今後スマホのコンシューマ向けアプリでFIDOの活用が進んでいきそうですね。

 

そして、FIDOが今注目されている背景に

銀行のオープンAPI化があるというお話がありました。

欧州ではこんな3つの規制があって

ざっくりいうとFintech進めるにあたり各銀行は強固なユーザ認証やプライバシーに配慮したAPIを公開する義務が発生します、と(理解間違ってたらすいません(-_-;)

で、認証する際に単にリダイレクトするだけではユーザは

たくさんトークンもつことになってしまうので

 認証の標準化がいるよね→FIDOが理想的だよね ということのよう

 

そして、日本のOpenIDファウンデーションにて

金融APIの標準仕様を検討しているWG(FAPI WG)があり

データはJSONAPIはREST

セキュリティはOAuth、OpenIDConnect を使っていきましょう、

その全体フレームワーク(OAuthプロファイル)の中で、認証部分はFIDOが最適

ですね、ということです。 

 この絵の中で、青い色の部分「Login(UserAuthentication)」とある部分がFIDOで実装する部分です。

 

ということで、とても内容の濃いセミナーでした。

来年も行かせてもらえるといいなー('ω')

 

このブログについて

ケンタロウです。

 

インフラエンジニアをずっとやってます。

日々セミナーに行ったり本を読んだり

情報収集は絶やさないよう心掛けているのですが

アウトプットしてないなと思い、このブログを立ち上げてみました。

 

基本的に自分が学んだことのメモなので

人様から見て有益なものにはならないと思います。

 

本当は技術情報を見やすくかっこよく整理したいですが

そういうことを考えていると全然記事が書けないので

 

まずは気軽に、ジャンルもあまりこだわらず、書き残していきたいと思います。

セキュリティ、アイデンティティ関係の話が多いと思います。

 

よろしくお願いします。