「シングルサインオン」を含む日記 RSS

はてなキーワード: シングルサインオンとは

2023-07-31

anond:20230731104947

最近最前線から離れててあんまり追えてないけど、現役のとき2008年くらいか10年くらいの間で、仕事のやり方や設計の考え方が大きく変わったIT技術要素で、いまぱっと思い浮かぶのはこんな感じかな。

分野にもよるし、調査して試作した結果自分業務には採用しなかった技術とかもある。流行ると思って使えるようになったけど流行らなかった技術を入れるとたぶんもっとある。

あと、新機種が出てOSが新しくなったり、ミドルウェアの新バージョン対応テスト手法進化もけっこうカロリー高いけどここには書いてない。

自分フロントエンド専門でReactしかやらない」みたいに分野を絞れば大分減るけど、その技術が何年持つかわからいか普通リスクヘッジのために他の技術も齧らざるを得ないし、バックエンドとかの人と議論するのに結局他分野の知識もそれなりに必要

ソーシャルコーディング(GitHub)

スマホアプリ(iOS, Android)

NoSQL(memcached, Redis, Cassandra)

暗号通貨

クラウドアーキテクチャ、XaaS(AWS, Google Cloud, MicrosoftAzure)

CI/CD(Travis CI, CircleCI, Jenkins)

トランスパイラ(Browserify, webpack, CoffeeScript, TypeScript)

システム(Rust, TypeScript, Haskell)

テスト自動化(xUnitSelenium)

クリーンアーキテクチャ

コンテナDocker

オーケストレーション(Ansible, Kubernetes, Terraform)

機械学習(Python, MATLAB, 線形代数数学知識)

HTML5(WebGL, WebAudio他)

SPA(React, AngularJS, Ember.js, Vue.js)

マイクロサービスアーキテクチャ

3Dゲームエンジン(Unreal Engine無償化、Unity5)の他分野への普及

GraphQL

機械学習ライブラリ(Tensorflow, PyTorch, Chainer)

Jupyter Notebook

NFT

モバイルアプリフレームワーク(React Native, Flutter/Dart)

シングルサインオン

多要素認証生体認証

メタバース

2023-06-01

anond:20230531125117

そういう話じゃない

マイナポータルシングルサインオン環境提供

普通は」

そこでログインしたら、マイナンバーについての情報はそこから取得する「べき」なんだ

(そうでなければマイナポータルとして集約した意味がない)


からポータル経由でAさんとしてログインしたのに

個別ローカルシステム内でログオフを経由せず

そのままBさんのマイナンバーに関する情報を扱える(入力できる)としたら

それは設計が狂ってる

シングルサインオン理解してない

それがキャッシュ経由かなにかで行えてしまってるとしたら、画面だけ直せばいいとかい問題じゃない

重大なセキュリティ違反が起こってる

ポータル使ってAさんでログインした後、Bさんになることは、「あっちゃいけない」

BさんはBさんでログインして、リソースを参照する認証を得なきゃいけない



お前SEじゃないだろ?

2023-03-09

資格バカにするおじさんエンジニア

ITエンジニア業界では資格をとってもなんの意味もないとよく言われる。

あるITエンジニア(インフラバックエンド系)おじさんもその原理主義者のような人でIT系の資格取得をバカにしていた。そんな暇があったら個人開発の一つでもすればいい。資格を持ってるなんてむしろバカアピールすることだという言いようだった。

しかしある時、おじさんと会話しているとSSOシングルサインオン)を知らなかった。またある時は、AES共通鍵暗号の規格だということを知らなかった。どれもAPベンダー資格勉強をしてればよく目にするもののはずだ。

資格はそれ単体では意味がないというだけで、実践資格の両輪で役に立つんだというならわかるけれど。

資格自体バカにするおじさんはその程度なんだなと思った。

2020-04-10

マイナンバーカードがあっても解決しない

最近ツイッターでこのような意見を見かける。それは『マイナンバーカードもっと普及していれば○○という政策が取れたのに』というものだ。僕はこの意見が間違っていると思う。マイナンバーカードが普及しているかどうかはあまり関係がない。

今の日本行政の円滑な運営に足りないのは汎用に使える認証・認可基盤であるマイナンバーカードという物質はその手段に過ぎない。認証・認可基盤があれば今やりたいことはだいたいできる。マイナンバーカードを使うかどうかはその時になって考えればいい瑣末な問題であるマイナンバーカードを使う手もあるし使わない手もある。一番大事なのはマイナンバーカードではなくそっちだ。

この誤解は多くの日本人がIT音痴であることの根源に思える。具体的な物体を通さないとその背景のシステム理解できない。ハードは作れるがソフトを作れない。

Twitter上記のような主張をする人の中には、プロフィールITエンジニアと書いている人も多かった。日本人はITエンジニアすらソフトウェアの感覚が乏しいのだ。

僕は昔愛知県内の大手自動車部品メーカーの出入り業者をしていた。この会社中の人もここを全く理解していなかった。末端社員から偉い人までみんなそうだった。社員・出入り業者・その他関係者向けのシングルサインオンシステム存在したが、一度認証してしまうとそのシステムに絶大な権限が与えられてしまうので、そのシングルサインオンシステムを使うにはめちゃくちゃ大変な申請必要だったので、弱小部署が新しく社内向けシステムを作る場合、そのシングルサインオンシステムを使わないことが多く、社員は沢山パスワードを覚えなければならず、各システム担当者は膨大なグループ社員名寄せノウハウ要求されていた。この会社ソフトウェアの時代についていけずに潰れていくんだろうなと思った。(あと未だにLotus Notesつかってるし)

じゃあどうすればいいのか。もちろん認証・認可基盤を作ればいい。ここで、認証と認可は別物であるITエンジニアすらイマイチ理解していない人が多い。

マイナンバーカードがあればよかったと言ってる人は、マイナンバーカード認証に使うものなのか認可に使うものなのか教えてほしい。

断っておくと僕はID専門家ではない。IDというのは学問的に一大ジャンルなので、細かいことはちゃん自分でググってほしい。

ざっくり言って、認証が「お前誰よ」で認可が「お前何がしたいん?」である

GoogleログインTwitterログイン代表的な例である。あれはOAuthという仕組みだ。Twitterログインを使うと、第三者Twitterパスワードを開示しなくても、その人にTwitter投稿する権限を貸すことができる。その人のことを信用なくなったらTwitter管理画面からそいつに貸した権限を取り消すことができる。

もし国民OAuthがある状態で、例えば現金給付がしたいなら末端の官僚さんが国民OAuthシステム簡単申請を出し、それから口座入力画面をさっとつくればいい。1日で終わった仕事である。この例であれば、国民OAuthはこの官僚さんに対して「国民の一意性の保証」だけを提供すればいい。それ以外の情報はこの官僚さんが作ったシステムに一切渡らない。そうすれば一人が二回現金を受け取らないシステムが作れる。看護師さんにだけちょっと多めに支払いたいなら、「看護師かどうかフラグ」を提供すればいい。そうすれば、看護師ではない人の職業がバレることもない。そういう柔軟な対応可能だ。

要するに、安全に様々なシステム接続できる汎用認証・認可基盤を中心に様々なシステムを連動させていけば新しいシステムを作るのも簡単だし、国民ストレスも少ない。

2019-06-30

anond:20190630222912

本気で言っているのか、ぼけているのか知らないが、言わないよ!!!

OAuth2じゃなくて、SSO (シングルサインオン) だろ。

OAuth2はシングルサインオン欠点を補うために作られたプロトコルで、まさに増田問題にしている点を解決するために作られたんだよ。

2019-03-29

退職エントリ10年以上勤めたNTTを辞めました。

学部新卒から10年以上お世話になったNTT事業会社を辞めました。(以下NTT記載します)

大変お世話になりました。

最近ブームになっている各種NTT退職エントリーこことかこことか)が出回っている中、どこまで需要があるのか分かりませんが、NTTグループのさらなる発展に向けて少しでも糧になればと思って筆をとってみます

何をやっていたのか

MPLSや広域イーサネットなどの企業向けネットワークサービスを売る仕事世間的にはプリセールエンジニア

NTTに入ってよかったこ

(1) 人が良い、風土が良い

全社を通して、非常にスマートで、理路整然と考えられる人が多く、上司にも恵まれていました。

体育会系という雰囲気もありません。最近『ラグビー部も職場「乱入」』話題になっていますが、13年間勤務した限り、そのような場に出くわしたことはありません。仮にそのようなイベントを開催する場合においては、社風から鑑みるに、事前のアナウンスは必ず(少なくとも管理職には)あったはずです。

ラグビーのことは個人的ファンではありませんでした。しかし自社のラグビーチームをチームビルディングなどのイベント活用するのは、企業として当たり前だと思います

(2) チャレンジさせてくれる

その時点で業務遂行能力が不足していたとしても、チャレンジさせてもらえました。

私は帰国子女でもなく、留学駐在などの経験が全くなく、ほとんど満足に英語が喋れない状態でしたが、希望したグローバルビジネスチャレンジさせていただけました。その後、日本語理解しない海外上司のもと、世界中海外籍の方を相手仕事する経験を長くさせていただきました。結果、TOEICスコアで数百点分英語力が向上しただけではなく、グローバル観点でのビジネスマインド仕事の仕方を学ぶことが出来て、人間的に大きく成長できたと感じています

(3) 自由やらせてくれる

会社部署、チームとしての役割は当然ありますが、自由仕事をさせていただきました。

例えば、本来「完成されたサービスを売って売上目標を達成する」ことが目標であるリセールスでありながら、「目標達成に必要新サービス開発」や「販売活性化のためのデモ環境整備」などの開発に近い業務やらせてもらいました。自己成長に繋がり、周囲に認めてもらえたことに、とても感謝しています

(4) プライベートも充実させることができた

IT系会社でありながら、残業時間は短い方でした。

部署・チーム、時期により状況は異なりますが、私の場合、月20時間以下でほぼ収まっていました。そのため、業務後の時間を使って、情報処理技術者試験上級試験対策趣味ファイナンシャルプランナーを取得するなど、十分な余力を持つことができました。またプライベートではちょうど子育て期だったのですが、フレックス勤務・リモート勤務などの制度活用でき、さらに同僚・上司からサポート理解が深かったので、仕事と家庭の両方に全力で取り組めました。(子ども保育園へ送るため、始業時間を30分遅らせたり、子供病気による突発的な年休取得が出来たり、平日の学校行事へも参加できたり...などなど。)

なぜ辞めたのか

GAFAに人材流出防げ NTTコムの新キャリアパスなどに代表されるように、NTTの人事・制度改革の途でありますが、一個人経験を記録を残したいと思います

一言で言えば、人事制度に納得できずでモヤモヤしていたところに、やりたい事と方向性が異なる仕事アサインされたことが決定打になりました。

(1) 人事制度への疲弊

私が辞めることを決心した時点では管理職になることが唯一のキャリアパスであり、中堅社員にとっては唯一の昇給プロセスでした(若手のうちは年に5%程度は昇給していたように記憶しています)。当初はそれを当たり前と思ってはいましたが、徐々に現行制度のあり方に疑問をいただくようになりました。

また、上位の職責に上がるためには業績評価とは独立した「選考」があるのですが、周囲の先輩・後輩の選考結果や、自分自身の結果と得られるフィードバックの内容には必ずしも納得はできませんでした(同じ理由である年は通らず、翌年通るなど)。また数ヶ月にわたる選考とその準備のため、毎年疲弊し、100%業務に集中できるとは言い難い状況でした。

(2)やりたい仕事ができなくなった

初期配属や人事異動といったキャリアパス入社以来3回は100%希望を聞いていただけていたのですが、4回目でやりたい事とは方向性が全く異なる仕事アサインされました。

当時私は、「自分職業人生をかけて実現したいこと」をようやく見つけたところでした。その実現に最も注力したい旬の時期に自社でその活動ができないのは非常に耐え難く感じました。本人の希望とは逆のことをやらせ経験を積ませる育成方法は、かのSteve Jobs氏のConnecting the dotsのようでもあり、私は必ずしても否定するものではありませんが、事前に本人と十分すり合わせをした上で判断されるべきなのだと考えます。(私もタイミング次第では成長の余地として許容したと思います。)

転職した上で感じるNTTのこと

GAFAMではない外資系企業にご縁があり、今はそちらでお世話になっています。外から改めてNTTを見たときに感じることは以下のようなことです。

(1) 自由に何かができて、それが評価されうる

Job description がない日系企業からこそ、自分が役に立つと考えたことが自由にできるし、数値以外の観点での評価があるからこそ、評価されうる=取り組むことができると確信しています中の人は殻を破ると違う世界が見えてくると思います

(2) 過剰に民主的すぎる

自由意見が言える、極めて民主的文化であると思いますが、それ故に「意思決定で様々な関係者意見を聞きすぎること」「一度決めたことを実施前に声が大きい人が覆せる」などの弊害をあるように思います。それがよく作用する時代もあったのかと思いますが、今のスピード感には合わなくなってきていると感じています。より適切なレベル意思決定権限を落とすことはもちろん、一度なされた意思決定を全社で尊重する風土になれば、と思って見ています

また賃金体系や人事評価制度平等性・一律性が行き過ぎていると感じています。年次・職責を問わず評価に値する人はもっと評価するべきだと思いますし、逆もまた然りだと思います。この点は会社側は改善に動き出したような噂は聞いていますが、労働組合側で前向きに検討しているような噂話が聞こえてこないのは残念でなりません。

(3) 業務環境整備

PCなどの環境は、生産性に直結します。IT環境の整備は Quality of Work に直結するので、是非投資していただければと思います。(それだけで離職率は下げられると思います。)

など

最後に、改めてここまで育てていただいたNTT感謝しつつ、さらなる発展を心よりお祈りしております

2019-02-02

アメリカ流行ってるサービス: 俺と周りの場合

https://anond.hatelabo.jp/20181129233609

同じくSF在住。いいまとめサンキュ。他に俺が個人的によく使うのは:

Lime

ここ1〜2年で急激に伸びてきた電動自転車電動スクーター(電動のスケボーハンドルが付いたようなもの)のシェアリングサービスBirdなど競合も。各スクーターGPSトラッキングされていてスマホアプリで近くにあるスクーター検索できる。使い終わったら乗り捨て。割とそこらじゅうに乗り捨ててあったりする時もあるので街の景観ちょっと変わった感があるが、それを超えて便利。でも乗る場所によっては割と危ない。大きな事故が出てくると規制もありうるかも。(追記:chanmiaさんのブコメによるとすでに規制されて台数が減ってるそうです。指摘感謝です)

Netflix

日本でも浸透してきてると聞くが、アメリカでも俺の周りだとみんな普通に加入してる感じ。昔のテレビのよう。最近Netflixで何を観た、あれ面白いよね、という会話がもはや日常。逆にAmazon PrimeとかHuluについて同じような会話は俺の周りでは聞かない。テラスハウスとかコンマリとかも周りの人は見てて、日本では本当に男女の恋愛あんな感じなのかとかの質問を良くされる。俺はドキュメンタリーをよく見る。最近では「Abstract」「Rotten」「Salt Fat Acid Heat」とかが面白かった。「Roma」が良かったと複数の友人から勧められたので今度見る。

DoorDash

代行でレストラン食べ物を取りに行ってデリバリーしてくれるサービス。Seamlessなどの競合も多いしアメリカ国内でも場所によって人気度が違うみたい。東海岸旅行した時に現地の友達Airbnbの部屋で宅飲みしようとしてDoorDashで注文しようと言ったら何それ普通Seamlessだべと言われた。結構割高だし、飲み物やサイドオーダーを取ってくるのを忘れるといったちょっとしたミスは割と多いが、払い戻しなどは可。選べるレストランは多い。代行dasherが今どこにいるか地図表示、予想到着時間、「もうすぐ着きますメッセージアラートなどがあり、精度はやや甘いが便利。

OpenTable

レストランリアルタイムオンライン予約サービスアメリカではこの分野を開拓した存在で、店内の注文管理機能と一体になってるシステムゴリゴリ営業で納入して加盟店を増やしたという話を昔聞いた。人気口コミサイトYelpオンライン予約をサポートするようになったので俺もOpenTableを使う機会はやや減ってきたが、ちょっといい感じのレストランとかの予約にはまだ使うかな。

Instacart

食料品を代行でショッピングして即日配達してくれるサービス。俺は使ったことないがスーパーの店内ではInstacartのTシャツを着た代行ショッパーを良く見かける。

Zillow

不動産検索サイトグーグルマップ感覚視覚的に使いやすい。住宅販売物件賃貸物件情報豊富で、間取り金額そして学区のランクなどいろんな条件で検索できる。Redfinなど競合も多い。売りや貸しに出てない物件でも推定金額が表示される。ズームインしていくと表示中の全ての家という家に金額マッピング表示されるのはなかなか圧巻。友達のあの人の家の資産価値も分かってしまう!物件の部屋の中などの写真豊富で、しかも多くはいい感じの家具内装でいい感じに盛られてる(ステージングといって、これをやる専門業者がいる)ので、見てるだけでも楽しいちょっとした脳内バケーションになる。

Houzz

家具インテリアのコーディネートのヒントになるプロ撮影写真カテゴリ別に大量に見れる。ちょっと庶民には無理という写真も多いが、これも脳内バケーション妄想が膨らんで楽しいプライスタグアイコンが付いてる家具は実際に買える。担当したインテリアコーディネーターに連絡することもできる。これでヒントだけ得てPinterestで似たようなIKEAハックを探すのが俺のパターン

PayPal

個人間の送金は少なくとも俺の周りだとまだPayPalが強い。数年前にCashとかの他のサービスが出てきて使う人もいたけど俺の周りはPayPalに戻ってる。何が特別便利ということもないが、通常の銀行口座だと個人間の支払は小切手なので(振込はお互いが同じ銀行でないと手数料が高い)、いくら小切手スキャンと換金が今ではスマホカメラでできるようになったとはいえ、面倒なのはアメリカ人にとっても事実オンラインショッピングでも支払はクレジットカードPayPalというところが多い。送金手数料無料PayPalはもはや第二の銀行口座として定着してる。(追記:vanillayetiさんとchanmiaさんのブコメによるとVenmoの方がイケてるとのこと。指摘感謝です)

Robinhood

手数料無料で株の売買が超簡単にできる。俺は株やったことなかったがちょうどいい入門になってる。Bitcoinに散々振り回されてからRobinhoodに出会い、これでいいじゃんという人が俺を含めて周囲にもチラホラ。

LinkedIn

ビジネス向けSNSと良く紹介されるが、転職活動時の職務経歴書としての機能が強い。ハイテク系の会社ではLinkedInページへのリンクを送ればレジュメCVを提出しなくてもいいというところもある。リクルーターからの連絡や昔の同僚からの誘いなども良く来るが、本気で転職先を探す時はHired.comなど他のサイトも同時に使う。

Glassdoor

会社自分給料いくらもらってるか、会社雰囲気はどうかといった情報匿名で共有するサービス職種役職によって横断的にも検索できる。面接でどんな質問をされたとかの情報も。求人情報も多く、職の大体の給与幅を予想してくれたりする。

Zoom

ビデオ会議システム個人ユーザ間だとまだSkypeだったりメッセンジャー音声通話機能FaceTimeを使ったりも多いが、会社仕事だと今はZoomが強い印象。会議室の大型ディスプレイなどとも統合やすく、支社間や取引先とのZoomビデオ会議出張先や在宅で仕事してるメンバーも加わってパソコンの画面を共有しながら会議する、みたいな場面は日常的。

Zendesk

カスタマーサービスを問い合わせチケット管理プロセスやFAQ管理システム統合により効率化した感じのサービスで、自社製品カスタマーサポートページだけZendeskに飛ばすようにしてる会社も多い。

Hopsy

俺が使ってるというだけで、流行ってるかは全く知らない。ビールサーバを購入して(ただし紹介で加入すると無料)、月額料金を払うと生ビールの小型ケグ(約2リットル)を毎月4つ配達してくれる。地ビールが多く、バリエーション豊富。軽め、苦め、重めの3つの風味から選ぶ(組み合わせも可)。月額会費分については特定銘柄ビールを選ぶことはできず選んだ風味でランダムなのが送られてくるが、個別に追加購入する時は指定OKアメリカは今インディアンペールエール(IPA)が大人気で、苦め風味を選ぶとほとんど重複なく次々と初めて見るIPAが送られてくる。どれも美味しい。ビールサーバから注いで飲む冷え冷えのIPA最高です。(追記:会費は毎月約$60です。俺は紹介で加入したのでビールサーバ無料だった)

追記1:

TurboTax

aoiro-cakeさんのブコメで指摘がありましたが確かにこれは外せません。毎年4月15日の夜に駆け込みでTurboTaxのサイト確定申告する俺。毎回来年こそはもう少し早くやろうって思うんだけどね。

スタバアプリ

vanillayetiさんのブコメで指摘がありましたが確かに使ってます。支払も画面上のバーコード会計スキャンするだけ。ポイントを貯めて無料で飲むラテの美味いこと。アプリであらかじめ注文して並ばずにピックアップできるのも便利。長距離ドライブの休憩ポイントを決めるのにもアプリ店舗検索を良く使います

追記2:

元増田にJIRAとかがあったのでZendeskとかZoomを入れてみたのだけど、他にもビジネスで使われるサービスは多数でこれが定番とか流行とかは良く知らない。俺の周りだと、会社で使う各種オンラインツールシングルサインオンOkta、経費精算はConcur、人事評価プロセスはWorkdayみたいな感じだが、会社によってこのへんは色々な気がするし、今挙げたツールUI微妙だったりしてまだ開拓余地がある感じ。これらの多くのサービス会社IPOしていてRobinhoodで買えるので、自分が実際に日常的に使っているツール使用感とか、今使ってる企業が他のサービスに乗り換えるコストはどうか、将来どう進化しそうかとかを考えて株を買うか決めたりしてる。

2018-11-25

anond:20181125133040

シングルサインオン概念としては近いけど、面白い部分はサーバAに投稿された情報サーバBにも同期されるって点だね、逆も然り

もしサーバAが落ちていてもサーバBで投稿された情報サーバAが復帰した時点で同期が始まる

まりこれまでのSNSサーバ認証アカウントが紐付けられていて、アカウントはそれぞれ別人扱いだったけれど、Hubzillaの場合サーバ認証アカウントは切り離されているから、アカウントは常に同一人物なんだな

からTwitterFacebookのように避難アカウントとか必要ない

サーバAの管理者によって垢BANされてもサーバBやサーバCではアカウントが生きている

2018-05-24

SSOシングルサインオン)ってみんな使ってる?

今のところ、なるべくSSOを使わないようにしてる。

パスワードパスワードマネージャーで1サービスごとに管理してる。

でも最近SSOの流れに、ホントにこれでいいのか疑問に思ってきた。

セキュリティ的にはSSOの方が安全なのかなぁ。

だってSSO提供側のTwitterGoogleに比べれば大抵のサービス認証突破やすいし。

あと利便性SSOの方が上だよなあ。

シングルサインオンの名のとおり、SSO提供サービスログインしてればそのままそのサービスログインできるんだし。


でも自分Twitterアカウントを他のサービスに知られるとか嫌なんだよなあ。

連携させたい一部サービスを除いて、なんか気持ち悪くて…。

あと複数サービスSSO対応してる時どれで認証すれば良いのか分からなくなっちゃうし。

みんなどうしてんのかなあ。


関係ないけど、はてなSSO対応してるんだね。

でもGoogle+のSSOだけって。ウケる

2018-05-03

スマホからはてブしようとして、出たログイン画面にIDパスワード入力画面無いんだけど。馬鹿かい新規登録画面はあるのに。Google+シングルサインオンなんて使いにくいしいらねーよ馬鹿

最近トップページからログイン画面を探さないといけないサービス多過ぎ。既存ユーザー軽視。

2016-04-26

anond:20160426145507 の続き

anond:20160426124418anond:20160426145507 の続きだゾ。てか長えよ

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数動画アップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる認証プロキシSaaS アプリを筆者は作った。好評だったが、これはもちろん本来あるべきでない欠陥のexploitのはず。)

(略: 個人ユーザ向けのAPI設計ばかりで、雇用者上司アカウント管理するという観点がない。SAMLでは普通にできるのに、OAuthとなるとセキュリティ的に云々と言って拒むサービスばかり。別のUIで既にできてることをAPIにしても意味がない。これまでできなかったことをAPIで可能にするのではなく、単なるシングルサインオンでよければ他にある。実際Googleは個人向けにはOAuth活用しているが、Google Apps for BusinessはOAuth以外のシステムを使っている。)

(略: 主要な設計ミスは、外部サービスすべてを同等に疑うところ。管理者が各サービスの信用性を判断して権限を調節できるようにしないところ。これまでどれほど多くの製品OAuthの面倒さのために失敗してきたことか。)

普通実装における」OAuth代替

適切な OAuth ベース設計とはどのようなもの

ここまでで「普通実装における」OAuth がまったくおかしいということはわかりましたが、OAuth が実際うまくいくのはどういうときでしょうか。

初期の OAuth 規格および概念におおよそ付き従っているシステム一般的に言って、新しい規格ベースのよりもセキュアで、マシです。OAuth 1.0 の実装がすべてセキュアだというのではありませんが、たいてい問題は少ないです。こうしたシステムは通常、次のふたつのアプローチのどちらかに従っています:

はいえ、このように設計されている OAuth ベースシステムはごくごく希少で、しか一般的にこうしたシステムは、他のところで使われている OAuth とは似ても似つかぬものです。OAuth 1.0 規格の方に寄って頑張っていますが、公式には 1.0 は非推奨ですから、こうしたアプローチを使っているシステムはそのうち「アップデート」されて OAuth 2.0概念や追加機能すべてを加えて再構築され、セキュリティユーザビリティをだめにしてしまうことになります。これこそ筆者があらゆる OAuth ベースのものを見逃したくない理由です。もっと古く、もっと機能的な形式OAuth を使っていても、システムに「改善」が必要だという素敵な考えを管理者のだれかが閃いて台無しにしてしまうからです。ご迷惑をおかけしてすみませんと言うぐらいなら、まったく別のものを使うほうが良いですよね。

他の選択肢

他に手はないかと探すとき、人々はよく他の「フレームワーク」にはどんなものがあるかを知ろうとします。しかし、考え抜かれたセキュアな設計を実現するためには必ずしもフレームワーク必要というわけではありません。現状、OAuth とはどのようなものかについての意見サービスごとに異なっていますので、承認の具体的な動作の仕組みもまったく一定ではありません。そんな中でフレームワークを探しまわるのは、簡単にできることをいたずらに複雑化しているだけのことが多いです。唯一ほんとうに難しい要素、しっかりした規格の必要な要素は、使用する鍵パラメータ改竄を防ぐため変数署名する方法だけであり、この点に関して、ほとんどの OAuth ベース実装は一切何もしてくれません。

ウェブサービスの最大手である Amazon は、世界中企業サービス提供する一流プロバイダで、合計 30% 以上という途方もない市場シェア他者を圧倒していますAmazonアプローチは、自分アプリ認証情報を生成できるコントロールパネルへのアクセスを、すべてのアカウントおよびアカウント管理者提供することです。この認証情報で、どの Amazon サービス作業できるか、そのサービスでどの操作を実行できるか、どの権限作業しなければいけないかを指定できます。この認証情報必要に応じて「アカウントホルダ」の人が破棄することもできます

AmazonAPI における認証承認技術には、本質的制限が多く潜在的危険性のあるリダイレクトを一切必要しません。Amazonプロトコル認証情報は、直接送ることは一切なく、データ署名に使うのであって、これでブラウザを通してパラメータを送る必要のあるときにも改竄不可能にすることができるのです。

Amazon設計アカウントの利用状況を API の利用まで適切に把握できますし、API認証承認もすべて Amazonからスタートし、その際のアプリ認証情報も「Amazon の」コントロールパネルから生成されます。この認証情報はその後、いかなるトークン交換システムも使わず直接 API プロセスで使われます。この設計なら「普通実装における」OAuth が達成している真のセキュリティ目標をすべて達成し、かつ前述したセキュリティ上およびユーザビリティ上の問題をすべて回避しています

ひとつ言及せざるをえない短所は、Amazon権限システムが幾分わかりにくく、あまりユーザに優しくないということです。ただし、このことは何故かほとんどのコントロールパネルにも言えることで、いずれにせよ UI 設計問題であって、承認プロセス自体の失点ではありません。さらに、Amazonコントロールパネルはかなりキビキビ使えて、それ自体API でも使えます。この点たとえば Google場合のように、筆者の知る限りメタ API もなく、何をするにも何十もの手順が必要なのとは大違いです。

Amazon認証および承認メソッドは他のサービスプロバイダにも幾つかコピーされていますGoogle 自身企業向け製品の一部でこれを利用できるようにしていますGoogle 自身純粋OAuth 設計企業サービスに向いていないことを認めており、企業サービスには JSON Web Tokens (JWT) の利用を推奨しています

JWT はサービス間の SSOAPI 利用を可能にする規格です。多くの点で JWT は SAML に似ていますが、SAML はややこしくて、XML Security (名前と違って、まったくセキュアではない) の上に構築され、API 利用に向いていないのに比べ、JWT は SAML の主要な目標を、単純かつ使いやす方法で一切の面倒なく達成しています。HMAC 実装ひとつ用意し、JSON の構築と解析の方法を知っておけば JWT は使えます既製品をお求めでしたら、膨大な JWT ライブラリが既に存在していますよ。

ただ Google場合典型的な JWT 利用法よりも高度で、HMAC のかわりに、もっと高度ですがこの分野では人気の低い RSA デジタル署名を利用するよう要求していますGoogleコントロールパネルではアカウント管理者自分企業サービス用に新しい鍵ペアを生成でき、API ログイン署名するために使う秘密鍵ダウンロードできます。こちらのほうが HMAC よりセキュリティは高いですが、Googleプロセス全体を本当に無駄に複雑化していますコントロールパネルしょっちゅう完全に再設計して、前と同じことをしたいのに使い方が違っていて混乱する点は言うまでもありません。JWT 利用の実例必要なら他をあたるようお勧めします。

他に使われている技術は、サードパーティがどんな権限必要としているかをある種の XMLJSON ファイル定義してウェブサイト送信できるようにするサービスのものです。ユーザがあるページを自分アカウント訪問し、ファイルURL (あるいは中身) をそこに貼り付けると、その外部サービスあるいはアプリが求めている権限の一覧やそこに含まれ説明などが表示されるようになっています。それを見て認可したいと思うユーザは、認証情報を生成してそのサードパーティアプリあるいはサービスに貼り付けますユーザは後で無効にしたくなったら認証情報を破棄することができます。これも、開発者おかし負担を強いることなく、すべてのアカウントAPI サービスがあり、権限管理を備え、サービス自体からフローが始まる、実にセキュアな設計です。

承認管理のためにサービスから提供してもらう必要が本当にあるのは、適切な役職 (管理者アカウント所有者など) を持つユーザ自分に割り当てられた権限や (望むなら) 期限を持つ認証情報API 利用のために生成できる何らかのパネルだけです。こうした認証情報はその後、お好みのセキュアな認証システムを通して利用することができます。たとえば HTTP Basic Authentication over HTTPS のような単純なもの、これは事実上どの HTTP ライブラリにも入っていますし、HTTP Digest Authentication、これはもっとセキュアでありながらほとんどの良質なライブラリサポートされていますし、その他 HMAC, RSA, 楕円関数など認証情報ネットに通す必要のない暗号学的テクノロジー活用した認証プログラムに基づくものなら何でも使えます特に HMAC は、承認認証実装するほとんどすべての人 (Amazon や、一部の OAuth 実装も含む) によって既に使われています

こういった種々の実績あるテクニックは、セキュアなプラットフォームを作るために CSRF 対策など複数フレームワーク同士の相性を勉強する必要があるという重荷を軽くしてくれますし、一般的に、既存アーキテクチャワンタッチで装着できるようなモジュール化の実装が可能です。ユーザアプリ認証情報が盗まれる可能性をなくしてくれます。ややこしい CSPRNG を常に使用する必要もありません。このようなシステムOAuth の生まれるずっと前から存在しており、現在でも一般的です。OAuth は、ユーザ認証情報要求したり他に弱点があったりするような一部の劣悪な設計システムよりはセキュリティが良いかもしれませんが、既にある真の設計を置き換えるものではありません。OAuth が解決すると主張する問題点は実のところ、既存の良く設計されたシステムには存在していませんし、「普通実装における」OAuth は実のところ、解決すると主張する問題の多くを招き入れるばかりか、最初存在していなかった問題まで生じさせています宣伝文句と違って、OAuth にすれば自然と驚くほどセキュアになるというわけではなく、むしろ数々の短所実装の困難さを考えれば、他の考え抜かれた選択肢のほうがはるかに優れています

これからサービス設計をして API アクセス提供することになっている方はどうか、ご自分が実現しようとなさっているのが何なのかを本当に考えてください。他の人がやっていることをコピーするだけで済ませたり宣伝を丸呑みしたりしないでください。どうしてもコピーしなければいけないなら、Amazon (これが最善です) や Rackspace, IBM SoftLayer, Linode, VULTR, Zoho, Zoom ほか、API の素直で健全認証システムを構築する方法について現時点で多少なりとも理解のあるところをコピーするようにしてください。

2016 年 4月 Insane Coder

http://no-oauth.insanecoding.org/

anond:20160426124418 続き

プレビューまでは全文見えるんだけどな。すまんやで。しかもまだ続く anond:20160426150324

anond:20160426124418 の続き

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくありますGoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、アプリ認証情報 (client_id と client_secret) を盗んだ人ができる悪行にいくつか言及しています。以下に、この攻撃と組み合わせることで (これまで筆者の知る限り公表されていない) 危険行為を実行可能にする問題をいくつか取り上げますさらに皆様の独創性にかかれば、「秘密」のはずのものを盗んだ人が悪用できる方法は他にも発見できるはずです。

セキュアでないトークン

トークンベース認証は多くの開発者にとって新しい概念です。そのため誤解も多く、EVS のようなもの設計する開発者の中にも、ただ何かの設計ガイドライン (たとえば OAuth) に従って API の動作を決めれば、あるいは他のプラットフォームのしていることをコピーすれば、自分プラットフォーム自動的にセキュアになるはずだと考える人が少なくありません。しかし何かをセキュアにするには、その要素ひとつひとつを余さずセキュアにする必要があり、それらの組み合わせすべてをセキュアにする必要があり、全体の枠組みもセキュアにする必要があります。思い出してください、全体のセキュリティ強度はその弱点の強度に等しいのですから、何らかの大まかなフレームワークを固守することだけに頼りきって、その通りに使う限り何をやってもセキュアだ、などと安心するわけにはいきません。OAuth ベースフレームワークそれ自体は、その内部要素のセキュリティを確保することに関しては殆ど何もしてくれません (ある種の要素で、あからさまにセキュリティを害するものだけは別)。

トークンベースシステムで少しでもセキュリティらしさを出すには、最低でもトークン生成に暗号学的にセキュアな擬似乱数生成器 (CSPRNG) を使う必要がありますが、この話題はあまりよく理解されていません。さらに悪いことに、一般的スクリプト言語の適切な CSPRNG 用 API は非常に少なく、しかしそうしたスクリプト言語が、人気ある最新サービスの多くを設計する際の基礎となっていることが多いのです。

もし生成されるトークン予測可能であれば、攻撃者はトークンを推測するだけで別のユーザになりきって悪意ある行為をすることができてしまます。筆者は、fortune 500 クラス大企業による OAuth ベースサービス一種の単調増加 ID (おそらくデータベースフィールド?) をそのままトークンに使っているのを見たことがあります。他にも、生成されるトークンがすべて単調関数の出力のようなサービスもありました。よく調べてみると、それは現在時刻に基づく非常に単純なアルゴリズムでした。こうしたシステムでは、まず自分としてログインし、現在トークン ID を見て、その後の ID を予測すれば、続く任意ユーザになりかわってトークン交換その他の操作にそれを使うことができるでしょう。他のテクニックと組み合わせれば、もっと標的を絞った攻撃も可能です。

このクラス攻撃は前述のセキュリティ文書で「4.5.3. オンライン推測による新規トークン取得の脅威」や「4.6.3. アクセストークン推測の脅威」に分類されています。この問題には解決策があるとはいえ、現時点でこの間違いを犯しているサービスの膨大さと、この間違いの犯しやすさを考えると、任意OAuth ベースサービスが外部レビューセキュリティを証明してもらえる可能性はあまり高くありません。

本欄の主眼ではありませんが、乱数に対する攻撃の中には、セキュリティを固めた CSPRNG を使っていないと OAuth ベースサーバを完全に破壊してしまえるものもあります。こうした問題は他のシステムでも非常に困ったものではありますが、動作のすべてが乱数のやりとりの上に成り立っている普通OAuth 実装では、より一層この問題が際立ちます。こうしたトークンは EVS のサーバ側で生成され、「普通実装における」OAuth がよくやる使い方ではサーバ信頼性を奪い、関連するトークンすべての予測可能性を高めていきます。最新の攻撃手法を防げるセキュリティ強化 CSPRNG が用意できないのであれば、もっとハードルの低い別のプロトコルに乗り換えたほうが良いでしょう。

一方、一部の OAuth ベース実装乱数必要性クライアント側に移すような構造になっていることも注目しましょう。色んな意味で、これは問題を別の場所に移しただけではありますが、サーバ側のアタックサーフィスを減らすのは事実です。これによって、少なくとも情報強者利用者は、信頼できるサービスをセキュアに使うことが可能になります。ただし情報弱者脆弱なまま放置ですが。今回の例に当てはめてみると、この種のセットアップでは AFCP の開発者が頑張って EVS をセキュアに使えるようにすることと、EVS 自体が陥落する危険回避することは可能ですが、ABC や XYZ が EVS をセキュアに利用するかどうかは別問題です。

クロスサイトリクエストフォージェリ (CSRF)

本論に入る前に指摘しておきたいのですが、CSRF 攻撃はその名前に反して、外部サイトからスタートする必要はありません。CSRF 攻撃というのは、自サイトへのリンクユーザが貼れる、掲示板メッセージングソフトのようなサイト自体からでもスタート可能なのです。

色々な手法CSRF に立ち向かうべく設計された数々のテクニックフレームワークがあります。これらのシステムの多くは、OAuth ベースのもの統合すると使いものにならなくなったり、サイト攻撃さらしかねない行為を促すことがあります

CSRF を防止するひとつの仕組みとして、ブラウザから送られる referer (原文ママ) が外部サイトを指していないことを確認するというものがあります。多くの OAuth 実装ユーザ特定の外部サイトから連れてくるよう要求しまから、この防御策は執行できません。OAuth サーバリダイレクトする膨大なサードパーティドメイン、また関係する URL やドメインの完全なリストは明文化されていないうえに折々で変更があるため、EVS のドメインとページ全体をホワイトリストにするのは不可能です。

また、EVS の提供者が寝返って AFCP を攻撃しようとする可能性がないかどうかも検討する必要がありますOAuth の背後にある原則ひとつOAuth ベースサービス側が利用者を信用しないことです、しかし同時に、利用者側には CSRF 回避策を見なかったことにしてサービス側を完全に信用することを要求しています理想認証システムというものがあるとすれば、一方通行ではなく相互レベルの不信を確立するでしょうに。

転送元と転送先のどちらかだけの、部分的ホワイトリストというのも難しいことがあります。使っている CSRF 対策フレームワークによりますが、機能オンオフ中間がなく、特定のページや転送元だけを無効にすることができないかもしれないので、その場合 EVS 利用者CSRF 対策フレームワークを一切使用できなくなります

OAuthCSRF 攻撃を防ぐ CSRF トークン指定するようにと、オプショナルな state パラメータ定義していますしかしながら、OAuth ベースサービス一般的state の長さや文字種を制限し、要求どおりそのままでさないことがあるようです。そこで、おかし互換性問題が起こるため、多くの OAuth ベースサービス利用者リダイレクトのエンドポイントにおける CSRF 防御をすべてオフにせざるをえない状況に追いこまれています。これは「10.14. コード・インジェクションと入力バリデーション」に分類されていますstate パラメータの別の懸念は、EVS 側で stateアクセスのある人はだれでも、リクエスト改竄して、それ以外はまったく有効なままのパラメータを付けて AFCP にブラウザを送り返すことができるという点です。

OAuth ベース API の利用者は、自分アプリサービス登録する際にひとつか複数の URI をカッチリ決めておくよう求められるという制限も課せられています。これは redirect_uri に使えるホワイトリスト URI です。この仕組みにひそむ重大なユーザビリティ問題は後述するのでひとまず措くとして、この制限のせいで開発者は、state パラメータや他の潜在的危険の伴うアイディア姑息な工夫をこらし、泥沼に沈んでいくはめになっています。多くの OAuth ベースサーバは、ホワイトリスト URI をひとつしか許可していなかったり redirect_uri との完全一致のみ有効パラメータの追加を認めなかったりしています。このせいで開発者たちは CSRF 対策フレームワークの利用をやめたり、あらゆる危険ものstate パラメータに詰めこもうとし始めたり、浅薄システムを自前で作り出したりしています。その結果、redirect_uri と state の組み合わせによってはユーザ不適切なページに誘導する危険性が出てきます。これは「10.15. オープンリダイレクト」に分類されます

こうしたリダイレクトの問題は、パラメータをしっかり認証していないせいで、それ自体悪用可能なのですが、これを前述の「OAuth サービスへの偽装」問題と組み合わせるとユーザ大惨事をもたらしかねません。盗んだ client_id と client_secret を使えば、悪いやつらは AFCP とまったく同じ情報認証できるので、本物の AFCP にも見ぬけないようなリダイレクトを作ることができます。また、悪意あるユーザも、本来自分の持っていない AFCP 内の権限を取得するような state パラメータの利用方法改竄方法を見つけることができるかもしれません。その際には、おそらく盗んだ認証情報も使うことでしょう。概して、「普通実装における」OAuth の低品質設計のせいで、また特定の分野に関する教育レベルが低い外部開発者の直面する問題のせいで、OAuth ベース利用者に対する攻撃はしばしば、本来あるべき状態よりもずっと容易になっています

ここで読む意義のあるものとして、さらに「3.5. リダイレクト URI」「3.6. state パラメータ」「4.4.1.8. redirect-uri に対する CSRF 攻撃の脅威」があります

章のまとめ

セキュリティに関して言えば、「普通実装における」OAuth仕事ぶりはとてもひどいです。OAuth が目指していると思われるセキュリティ目標の多くは、達成されていません。さらに、OAuth ベースサービスの中には、種々の攻撃に対して無防備でいることを利用者公然要求するものがありますサービスをセキュアに使える場合も、そのことが知られているとは限らず (サービス側の、トークン生成手法といった重要セキュリティ詳細が明文化されていないうえにクローズドソースなため)、OAuth は今なお多くの低品質プログラミング習慣を招いていますOAuth は外部の開発者を守る点でほとんど何もしませんが、そうした開発者が使っている各種フレームワークの方はといえば、こちらも真のセキュリティ提供していなかったり、厳しい自制と注意がなければセキュアに使えなかったりする代物です。

この記事についていえば、個人的蔓延していると思った問題の一部を取り上げたものに過ぎません。この中には、極度に低質な、一切 OAuth の規格で義務付けられていない慣習を、他所OAuth に使っているのを見たまま開発者コピーした結果というものもあります

OAuth ベースサービス開発者もその利用者側の開発者も、OAuth ベースプラットフォーム実装したり利用したりするためには、ここでリンクした文書をすべて読んで理解する必要があります。挙げられている 50 クラス攻撃も、各クラスの深刻度も完全に把握する必要がありますし、そのうえで「実装仕様書セキュリティガイドラインには漏れがないとは限らない」ことにも留意すべきです。この記事は公式文書にない問題をいくつか取り上げているとはいえ、OAuth セキュリティ問題の表面をなでているに過ぎないことも覚えておくべきです。ここに混ざって、公式 OAuth 提案に加えられる変更点はどれもまったく新たなセキュリティ問題を引き起こすものですが、残念ながら変更はよくあることなのです。そこで各々が、乱数生成やセキュリティ調査技術といった OAuth 以外のセキュリティ関連分野も理解していなければ、OAuth でそれなりのレベルセキュリティを実現することはできません。

真のセキュリティをお探しの方には、よそを探すようお勧めします。最後の章で OAuth の代わりになる選択肢をいくつか取り上げます

ユーザビリティ関連

(略: ふつう実装では、サービス側がプラグを引き抜くようにして自由利用者出禁にできる。ビジネス的にもまずいし、悪意あるユーザが API 利用者を騙って出禁になるとアプリへの DoS になる。)

(略: サービスからは API 利用者という大きすぎる単位しか見えないので、たとえばビデオカメラアプリ単位で利用帯域などを制限せざるを得ないが、そうするとそのビデオカメラは、一部ヘビーユーザのせいで他のユーザが締め出される事態になる。OAuth 以外のサービスならふつうユーザ単位対策としてユーザ開発者アカウントを取得してもらうのも面倒すぎる。ていうか手動プロセスを挟んでたり。)

(略: ふつう実装SaaS モデルしか見ていないので、URI を持たない AFCP のような社内ソフトや、ビデオカメラのようなデスクトップアプリには使えない。アプリcURL 的なもので API を叩こうとしても、JavaScript必要だと言い張るサービスもある。グローバル企業が地域別にドメインを分けていたら URI が足りない。客ひとりひとりにサブドメインを与える製品だと URI が足りない。足りるとしても追加・更新メタ API で簡単にできない。ひとつの URI ですべてのリクエストをこなすのセキュリティ問題もあり、ロードバランス等の必要性も出るし、社内ソフトデスクトップアプリに余計なウェブサイトへの依存性を加えることになる。httpサーバlocalhostで立てるとかアホか。)

(略: オープンソースしづらい)

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数の動画をアップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる

OAuthのことを1ミリも知らない俺が

OAuth ディスの記事を酒の勢いで訳してみたゾ。前半はつまらないから、「章のまとめ」か、それ以降だけ読むといいゾ。なぜか後半が切れてた。こっちだけでいいゾ anond:20160426145507 anond:20160426150324

http://insanecoding.blogspot.com/2016/04/oauth-why-it-doesnt-work-and-how-to-zero-day-attack.html

OAuth がうまくいかない理由と、既存サービスゼロデイ攻撃方法

OAuth とは

認証 (authentication: 本人確認) と承認 (authorization: 権限付与) のシステムを設計し、API を規定し、複数の異なるシステムを統合するために用いられる提案をまとめたものです。

OAuth には色々な種類があり、version 1.1a や 2、その各部の上に他の規格を乗せたものなどが存在します。世の中に出回っている数々の実装によって、具体的な利用状況は大きく異なります。

おことわり

前にも OAuth について書いたことがあり、たくさんの反響をいただきました。前回の記事に対する批判の一部を避けるため、今回の記事について先に断っておきたいのですが、この記事は OAuth の使われる典型的な場面に焦点を当てており、論じられる点のほとんどは、何らかの方法OAuth を利用する大手サービスのほとんどすべてに当てはまるということです。

言いかえると、OAuth を用いているあらゆるプラットフォームが壊れているとは限りません。OAuth にはバリエーションが多いうえに、2.0 だけに限っても 76 ページに渡るパターンがありますので、OAuth に基づいた何かに適合していながらもセキュアであり、使っても問題ないものは存在しうると言えます。ですから、あなたお気に入りOAuth 実装や設計が、ここで論じられる問題の一部または全部を免れていることもありえます。確率は低いですが。

また、OAuth を使っているものの中には規格を誤用しているものがあるとか、OAuth はその使い方を強制しているわけではないとか言う人もいるかもしれません。どちらにせよ、ここでは特定の OAuth ベースの規格について述べるのではなく、現状で大手が OAuth をどう利用しているかについてを、それが規格に適っているかどうかに関わりなく論じるつもりです。こうすることで、多くの読者に影響を与えることになるでしょう。危険な方法OAuth を使っているサービス利用者であっても、また自ら OAuth ベースサービスを管理していて、他のみんなが作っているのを真似てプラットフォームを作ろうと思っている人だとしても関係があるのです。

記事の構成

この記事は長くなりますし、言ってみればほとんどの章はそれ自体でひとつの記事として十分なほどの話題を扱いますので、大まかな流れをご説明しておきましょう。

この記事は、現在 OAuth 業界でおこなわれていることを調査した結果のまとめです。OAuth を使う製品のすべてにこの記事のあらゆる点が当てはまるというのではなく、危険だったり無価値だったりするサービスの背後に見つかった慣例や根本原因を紹介する記事です。

この前書きのあとは、まず OAuthセキュリティ欠陥を分析することから始めるつもりです。こうした欠陥の中には、セキュリティコミュニティでよく知られていて、書籍などですでに分析されている一般原則が当てはまるものもあります。しかしこの記事では書籍化されていないケースも扱いますし、有名な欠陥についても、平均的な開発者および責任者に理解しやすく、対策の必要性がはっきりするように工夫するつもりです。

その後は、OAuth の主要素が一般的に言ってどのように実装されており、そうした普通の実装がどのようにサービスを使いものにならなくするのか、すなわちそのサービスで達成できることを極度に、不適切に、かつ意図に反して低下させてしまうのかを分析します。ごく一部のケースでは回避策の足がかりになるかもしれないテクニックについて論じますが、そういうのを実装する馬鹿らしさにも注目します。こうした記述の中では繰り返し何度も、OAuth を使う人たちがどれほど自分と自分のビジネスにとって損なことをしているのかが説明されます。

最後に、OAuth が適切に使われうる数少ない場面と、すでに利用されている OAuth の代替品を簡単に取り上げます。代替技術に関する調査の結果を提供するつもりですが、その中には Amazon のような大企業がセキュアで使いやすく信頼性の高い API を実現するために何をしているかの報告も含まれるでしょう。

責任ある情報公開

いま普通に使われているかたちにおける OAuth の欠陥の幾つかを悪用すれば、大手サービスに対して強力な攻撃を仕掛けることができます。OAuth に対する攻撃は何も新しいものではありません。IBM や Oracle を含め、懸念した IETF メンバーOAuth ベースサービスに対する攻撃を 50 クラスも記述した 71 ページもの文書を 3 年以上前に出したように、また筆者も前回の記事でこうした点のいくつかを議論したようにです。それにも関わらず、OAuth ベースシステムの主要なセキュリティ欠陥は非常に蔓延しています。

筆者は、いくつかの大手企業の役員や開発者に、そこの OAuth ベースシステムが抱えるセキュリティ欠陥を指摘したことがあります (そのうちのひとつは 4 年前のことです) が、全員、自社システムを修正するために一切何もしませんでした。まるで、OAuth の人気度からして、他の現実的な解決策をひとつも聞いたことがなく、それゆえに OAuth が最もセキュアな選択肢に違いないと決めてかかっているようです。どうも、OAuth のコア原則に対する攻撃のデモを文書化した情報も、聞いたことがないか、肩をすくめて無視するかしているようです。そこで、この情報をもっと広く拡散することによって、影響のある人たちの尻を蹴りとばしてあげたい、そしてサービスを設計あるいは管理している人たちにモーニングコールの役割を果たしてあげたいと願っています。

というわけで、OAuth ベースの何かを提供あるいは利用するご自分のサービスを調べて、こうした欠陥の一部あるいは全部が存在することに気づいたなら、どうぞ責任をもってこの情報を取り扱ってください。ご自分のサービスを適切にアップデートしたり、関係する問題に対応するようビジネスパートナーに適切な圧力をかけたりしてください。

ここで言及されている情報やリンクされている情報は今のところ既存のサービス悪用できるかもしれませんが、どうぞ責任ある行動をとり、他人のもの破壊するのではなく改善することを目指してください。この記事は、自社サービス不適切に実装している人たちへのモーニングコールのつもりで、その改善を促すために書いているのであり、悪用したがっているハッカーたちのハウツーもののつもりではないのです。

想定する利用形態

この記事では、ふたつのシナリオに注目して、その場面でどのように OAuth が組み合わされているのか、そしてなぜうまくいかないのかを検討します。記事を通して何度もこれらのシナリオに戻ってきますので、頭に入れておくことは大事です。

まず、Exciting Video Service (略して EVS) というサービスを思い描いてみましょう。ユーザが動画をアップロードしたり友人と共有したりできて、完全公開にしたりアクセス制限を設定したりできるようになっています。また EVS は動画のアップロードや削除、およびだれが視聴できるかの権限管理に OAuth ベースの API を提供しています。

ただ、例としてこの想像上のサービスに焦点をあてますが、論じられる問題はあらゆるサービスにも当てはまります。ファイルであろうと文書ストレージであろうと、カレンダー管理やオンライン会議、ディスカッショングループ、はたまたリソース管理であろうと OAuth ベース API を提供する他のいかなるものであろうとです。また、筆者は本当にどの特定の動画サービスのことも言っていないということを覚えておいてください。問題点の一部あるいは全部は、OAuth を使っている既存の動画サービスに当てはまるかもしれませんが、EVS がそのサービスのことを指すわけではありません。どれが当てはまるかは読者への練習問題ということにしてもいいですね。

ひとつめのシナリオとして、ビデオカメラの製造会社を想定しましょう。そのビデオカメラには、録画した内容を EVS にアップロードする機能のあるソフトウェアを付属させたいと思っています。つまり、ユーザビデオカメラを自分のコンピュータに接続して、その独自ソフトウェアを開き、ビデオカメラからアップロードしたい動画を選んでしばらくすると、それが EVS にアップロードされているというものです。

ふたつめのシナリオとしては、ある中小企業が職員用に EVS で 50 アカウントを購入し、全職員が動画をアップロードして同じ部門の職員と共有できるようにする、ということにしましょう。この会社は A Friendly Custom Platform (AFCP) というソフトウェアで職員と所属部門の管理をしており、この AFCP サービスを EVS に統合したいと考えています。望んでいるのは、管理者が AFCP を使ってだれかを営業部門に配置したら、その職員が自動的営業部門メンバー所有の動画すべてに対するアクセス権を取得するということです。営業部門からいなくなった人には逆のことが起こるようにもしてほしいと思うはずです。

問題点

セキュリティ関連
認証情報の盗難 / アクセス権の詐称

トークンベースの認証システム (OAuth のコア) が現在よく利用されている最大の理由のひとつには、「適切に実装されれば」サードパーティアプリサービスに各ユーザの認証情報 (パスワード等) を提供しなくて済むという点があります。サードパーティに個人ユーザの認証情報を渡すのは、以下の理由から望ましくありません:

上記の問題点は、OAuth だけでなくあらゆるトークンベースの認証システムでも回避できます。よく OAuth の強みとして挙げられていますが、独自というわけでは全然なくて、他にも同じ強みを実現しつつ OAuth の弱点のない選択肢はあるのです。

さて、確固とした土台に基づいてはいるものの、「普通の実装における」OAuth は、上記の問題を回避しようとして以下のような手順に沿ってシステムに情報を提供します:

  1. ユーザサードパーティアプリ/サービス (たとえば AFCP) を訪ねて、特定のサービスと統合したいことを知らせる。
  2. AFCP は、EVS でホスティングされた特別なログインページを出してユーザに EVS の認証情報を入力させる。
  3. EVS は、その指定したアクセスレベルユーザが本当にサードパーティ (AFCP) へ与えたいのか確認する。
  4. EVS は AFCP に一種のトークン (複数の場合もある) を提供し、各種 API コールに使えるようにする。

このトークンユーザの認証情報ではありませんから、そしてひとりのユーザひとつアプリの組み合わせだけに有効で、指定された権限しか持たず、あとから破棄されるようになっていますから、きちんと前述の問題点を回避しているように思えます。しかし実際には、ちゃんとした土台を核として持っているにも関わらず、OAuth の普通の実装で使われているこのフローは、上に挙げた問題すべてに対処しているとは言えません。

この設計はそもそも危険なスタート地点から始まっています。セキュアなプラットフォーム設計の第一原則は、危険な地点から始まったものは既にダメ、逆転不可能、ということです。手順 1 のせいで、EVS 自体ではなく EVS を利用するサービスから始まっているので、ユーザは最初の一歩からして中間者攻撃を受けたような状態にあります。これは、かかってきた電話に個人情報や口座番号などを教えるようなもので、自分の使っているサービスの者だと名乗っていますが、番号が本物かどうか分からなかったり非通知だったり、という場面のコンピュータ版だと言えます。最近はこういう詐欺がたくさんありますから具体例を挙げる必要はありませんね。要点は、接続を開始する相手が信用できなければ、その接続は一切信用できないということです。EVS 自体の側から手順を始めるのでない限り、上に挙げた目標をすべて実現する API 利用のためのセキュアな認証システムは設計不可能です。

(略: 手順 2 で、それっぽいページに誘導すれば認証情報を盗める)

(略: そうした詐欺を企業自体が後押ししているような風潮もある)

(略: スタンドアロンアプリなら、ログインを詐称する必要すらない)

この種の攻撃は前述のセキュリティ文書で「4.1.4. 脆弱性を突かれたブラウザ組み込みブラウザを使ったエンドユーザ認証情報のフィッシング脅威」として分類されています。提案されている解決策は?

クライアントアプリユーザに直接認証情報を求めることは避けるべきだ。加えて、エンドユーザフィッシングや良い習慣について教育を受けることもできる。良い習慣は、たとえば信用できるクライアントにしかアクセスしないことだ。OAuth は悪意あるアプリに対していかなる防御策も提供していないので、エンドユーザインストールするネイティブアプリすべての信頼性に自分で責任を負う。

さらに

クライアント開発者は、ユーザから直接に認証情報を集めるようなクライアントアプリを書くべきではなく、システムブラウザのような信用できるシステムコンポーネントにこの役目を移譲すべきだ。

基本的に言って、OAuthセキュリティガイドラインは、OAuth を利用する開発者ユーザを攻撃しようとすべきではないとか、悪いことをしてはならないと言っています。外部の開発者が悪いことをしないことに頼るというのは、正気のサービス設計者が依拠するセキュリティモデルではありません。

私の知る主要な OAuth ベースサービスはほぼすべて、ここに概説した手法で攻撃可能です。

OAuth こそセキュリティの新たな金字塔だとお考えの皆さん、目を覚ましてください! 「普通の実装における」OAuth は、始まる前から負けていますよ。OAuth が存在するよりずっと前に実装された数多くのシステムはセキュアで、この問題を効率的に回避しています。残念なことに、あまりに多くのサービスが、せっかくセキュアだったのにインセキュアな OAuth モデルに移行してきました。だれかが開発者管理者に「OAuthもっとセキュア」「先取り思考」「将来への投資」とか何とか素敵な (しかし具体性の皆無な) バズワードを並べたてたからでしょう。ほとんどの場合、こうした変更は本当に既存の問題に対応しているのか、あるいは以前のシステムより幾らかでも良くしてくれるのかどうかをレビューすることさえなく実装されています。

OAuth サービスに偽装

OAuth ベースサービス設計でよく見かける間違いは、ブラウザ用に、パラメータひとつとして client_secret (あるいは同様のもの) を受け取るエンドポイントを提供することです。OAuth の client_id と client_secret パラメータは、基本的に言ってサードパーティプラットフォーム固有の API ユーザ名とパスワードと等価ですから、EVS の API を利用する開発者だけにしか知られるべきではありません。パスワード同然のものなのですから、client_secret パラメータは「絶対に」ユーザブラウザを通して送信すべきではありません (ヒント: パラメータ名の中に secret という言葉が入っているよ)。アプリサービスユーザがその client_id と client_secret を見つけることができる場合、そのユーザはそのサービスのふりをすることができ、潜在的には何かイケナイことができてしまうということになります。さらに注意すべき点として、client_secret パラメータを別の名前にするサービスもありますから、ご自分の関係するサービスをよくチェックして、他のパラメータも秘密にする必要があるのかどうかを調べてください。残念ながら、重要な変数が自分の素性をいつも表に出しているとは限らないため、この問題は意外と多く存在しています。加えて、client_id だけ使う認証フローOAuth の上に乗せるサービスも出てくるでしょう。これには用心してください。特定の状況では、そういう client_id はまさしく client_secret 同然の働きをするのですから。

「普通の実装における」OAuth は、ウェブブラウザを使ってユーザを複数のウェブサイトに移動させるわけで、ひとつサイトから別のサイトに client_id と client_secret (あるいは同様のもの) を送ってもらう必要があります。そうやって、たとえば AFCP と EVS の間でこれらをやりとりするわけですから、ユーザブラウザの HTTP ログをモニタリングすれば、本当に見えてしまいます。これはアプリに組み込まれた独自ブラウザ各種でも、単に右クリックすれば何らかのネットワーク・ログ機能を持つ何らかの inspector にアクセスできてしまう場合などには可能です。

EVS と連携した AFCP にこの欠陥があると、AFCP に少しでもアクセス権限のある職員に本来の権限より多い権限を取得させてしまい、本来アクセスできないはずのところに許可が下りてしまう危険があります。別の例では、仮に FacebookGMail 用の OAuth エンドポイントを利用しているとして、client_id と client_secret の両方がブラウザを通して送信される場合、Facebookユーザは全員 GMail に対して Facebookのもののふりをすることができてしまうということです。

この問題は、OAuth エンドポイントユーザウェブブラウザから平文で client_secret を送ってくることを期待するときにはいつも存在します。あるいはそうする必要があると誤解した API 利用者が、埋め込むべきでないところに secret を埋め込むときもです。この脆弱性が存在している可能性が高いのは、エンドポイントが client_secret (または同等品) と redirect_uri の両方を期待する (あるいはオプションとしてでも受け付ける) 場合です。redirect_uri パラメータは、今回のケースで言うと EVS がユーザログインさせたあとでそのブラウザをどこに送るべきか指示するために使うよう設計されています。そうやって redirect_uri がエンドポイントへの転送に使われている場合、その処理はユーザブラウザで実行されることが期待されているわけです。主要な OAuth 文書はどちらも、client_secret と redirect_uri の両方をこうした用途に使うようなケースを指示したり求めたりはしていません。

ざっと検索してみたところ、残念なことに、潜在的に違反の可能性があるそういった OAuth ベース API がたくさん見つかります。GoogleOAuth の色々な利用方法を提案していますが、その中に、両方を一緒に使うことを広めるフローひとつあります:

client_secret: 開発者コンソールで取得したクライアントパスワード (Android, iOS, Chrome アプリとして登録した場合のオプション)

Citrix もこんな間違いをしています:

(略: 以下、実際に脆弱だと確認したわけではないが、secret と redirect を併記しているサイトが列挙されている。)

Google で 2 分検索しただけでこのリストができました。皆様がもうちょっと労力をかければ、ずっと多く見つかることでしょう。ただし、上記リストは、こうしたサービスのどれかが脆弱だとか、誤用しやすすぎるということを直接に示すものではありません。色々な要素があり、たとえば Zendesk は特にこのケースでは redirect_uri パラメータリダイレクトに使わないと明言していますし、アプリからエンドポイントを呼ぶときはフル機能版ブラウザではなく curl を使うべきだとさえ書いて、開発者が危険なことをするような誤解を極力避けようとしています。それでも、経験の浅い開発者はこうしたエンドポイントを独自ブラウザで読もうとするかもしれません。さらに、この組み合わせが世に出回っているというだけで開発者の警戒心が下がっていき、経験を積んだ OAuth ベースサービス開発者でさえも似たような状況で潜在的ヤバイ誤用を気にせず適用するようになってきています。特に client_secret が別の名前になって、「秘密を守る」という概念が失われている場合はそうです。

サービスがこの点に関して壊れている指標となるのは、人気のある複数の OAuth ライブラリがこのサービスでうまく動かないときです。そういうサービス一般的にいって独自の「SDK」を提供しており、サードパーティ開発者が選んだライブラリではこのフランケンシュタイン的な OAuth が使えないと苦情が来たときにはその SDK を使うよう指示します。こうしたカスタマイズは気付かれないまま進行することも多くあります。開発者の大多数は、SDK が提供されているなら、わざわざ手元のソフトで頑張らずに済ませたいと思うものですから。

この種の攻撃は前述のセキュリティ文書で「4.1.1. クライアント機密情報を取得する脅威」に分類されています。しかしサーバウェブブラウザを使用を要求し client_id と client_secret (または似た用途のもの) を同時に渡させるという具体的な攻撃パターンには一言も言及がありません。おそらく、その文書の執筆陣の予想では、こんな馬鹿げたサービスはだれも設計しないだろうし、その API を使う開発者もそれを独自のウェブブラウザや SDK で使ったりはしないだろうと思っていたのでしょう。こうした開発者OAuth の規格からバラバラに取り出した要素をグチャグチャに混ぜて接着しておいて、自分のプラットフォームOAuth 本来のセキュリティを保持していると思っています。そのツギハギのせいでどんな新しい問題が入り込むかもしれないのに、そこは一顧だにしません。残念ながら、これが近年の OAuth 業界によくあるやり方で、この既に猛威をふるっている問題は、パレード参加者がどんどん増えて、人が使っている手法や、使っている「と思う」手法をコピーしていくことで、とどまるところを知らない連鎖になっています。

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います。特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくあります。GoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google の場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google は例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、 Permalink | 記事への反応(3) | 12:44

 
ログイン ユーザー登録
ようこそ ゲスト さん