随感録 (最新)

2017-09-23 (Sat)

ウィルス!

CCleaner v5.33.6162 をきれいに踏み抜いてしまった。アナウンスはこちら;

アナウンスでは32bit CCleaner だったが、Windows Defender は、64bit版もバックドアとして検出した。

一応, HKLM\SOFTWARE\Piriform\Agomo が存在していないということは確認していたが、ダメだったようだ。

Backdoor:Win32/Floxif

警告レベル:
重大
区分:
バックドア
詳細情報:
Backdoor:Win32/Floxif threat description - Windows Defender Security Intelligence
影響を受けた項目:
  • taskscheduler: C:\Windows\System32\Tasks\CCleanerSkipUAC
  • file: C:\Program Files\CCleaner\CCleaner.exe
  • file: C:\Windows\System32\Tasks\CCleanerSkipUAC
  • regkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{8BE7651E-AB4C-4680-BD24-60D90B5B4D24}
  • regkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\CCleanerSkipUAC

2017-08-11 (Fri)

シングルサインオン (SSO) のために, OpenID Connect について調べた。

OpenID Connect は, OAuth 2.0仕様の上に構築された認証 (authentication) 手順。認可 (authorization) とは異なる。

ただの OAuth 2.0 を「認証」に使おうとすると、セキュリティ上よくない。例えば, 単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | @_Nat Zone

各社が OAuth 2.0 の上に独自に認証の仕組みを作っていたのを標準化したものが OpenID Connect. 'OpenID 2.0' (OpenID Authentication 2.0) からの技術的な連続性はない。名前だけ。紛らわしい。

OpenID Connect に対応した認証サービス (OpenID Provider; OP) は、例えば、次がある;

組織 サービス
Google Google Federated Identity
Microsoft ADFS on Windows Server 2016
Microsoft Azure Active Directory
PayPal Login with PayPal ※下コメント参照.
Salesforce Summer 2015 Release
Yahoo! Japan Yahoo! ID Federation v2

リストはこちら; OpenID Certification. Facebook がないのがつらい。引き続き独自の方法で対応が必要。

(2017.9.23) このほか, gitlab.com も OpenID Provider のつもりだが、jwks_uri で得られるRSA公開鍵が不味く, 適合していない。

omniauth-openid-connect

Ruby on Rails での Googleへの対応では, omniauth-google-oauth2 を使っていたところ。今回, これを omniauth-openid-connect gem を使い、Google Identity Platform に OpenID Connect でログインできるようになった。まだ、プロフィールの更新は実現できていない。

'omniauth-openid-connect' gemパッケージは, 正直, あまり完成度が高くない。開発も2015年12月のが最新バージョンで, 最近の openid_connect パッケージに付いて行ってない。forkされまくりで, はて, 誰のforkがまともなのか? かなり困る。

(2017.9.23) 各所に散らばったパッチや修正を取り込んで、統合したバージョンを作りました。omniauth-openid-connect again

設定例

一応, gemパッケージを使うとすると, オプションが特定の値でなければならないところが多い。罠か。

次のような設定ファイルで、何とかなる。

# -*- coding:utf-8; mode:ruby -*-

# omniauth を使う.
# See https://github.com/omniauth/omniauth

Rails.application.configure do |config|
  config.middleware.use OmniAuth::Builder do
    if !Rails.env.production?
      provider :developer 

      provider :openid_connect, {
        # /auth/<name> が認証開始のURLになる.       
        name: :nov_op_sample,

        # これがないと, エラー
        # 末尾の '/' は付けてはいけない.
        # <issuer>/.well-known/openid-configuration
        issuer: 'http://localhost:4000',
        
        # 'openid' で OpenID Connect
        scope: ["openid","profile","email","address","phone"],
        
        # 'code' is Basic flow. 'token id_token' is Implicit flow.
        response_type: :code,

        # 有効にしないと, public_key() 内で config.jwks が使われない.
        # 必ず true にすること。(デフォルトはfalse)
        discovery: true, 

        # rack-oauth2 パッケージ, Rack::OAuth2::Client.new() に渡される.
        # 初期値は, omniauth-openid-connect パッケージ内,
        # omniauth/strategies/openid_connect.rb
        client_options: {
          # omniauth-openid-connect パッケージ内,
          # omniauth/strategies/openid_connect.rb:issuer() 内で,
          # 上の issuer オプションは使わず, 次の3要素から issuer を作っている.
          scheme: "http",
          host: "localhost",
          port: 4000,  # 80番でも省略できない.

          # OP側と厳密に合わせる
          identifier: クライアントID,
          secret:     クライアントsecret,
          redirect_uri: "http://localhost:3000/auth/nov_op_sample/callback",
        },
      }
    end # !Rails.env.production?
    
    # google OpenID Connect
    provider :openid_connect, {
        name: :google_oauth2,
        issuer: 'https://accounts.google.com',
        scope: [:openid, :email, :profile],
        response_type: :code,
        discovery: true, 
        client_options: {
          scheme: "https",
          host: "accounts.google.com",
          port: 443,  # 省略不可.

          identifier: クライアントID,
          secret:     クライアントsecret,
          redirect_uri: "http://localhost:3000/auth/google_oauth2/callback",
        },
    }
  end 
end

# See http://qiita.com/nekogeruge_987/items/8bd307f9ae31f27c248a
#     http://stackoverflow.com/questions/10963286/callback-denied-with-omniauth
OmniAuth.config.on_failure = Proc.new do |env|
  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
end

コメントに書いているが, discovery オプションは必ず true でなければならない。issuer と, client_options の (scheme, host, port) は必ず同じもの。

openid_connect_sample

テストのために, nov/openid_connect_sample を Ruby on Rails 4.2対応にしたものを用意した。horiq / openid_connect_sample · GitLab

'openid_connect' パッケージのバグ修正を含む。

PayPal

(2017.8.20 追記)

上のリストで PayPal も OpenID Connect に対応していることになっているが、実装を確認する限り、OpenID Connect には適合していない。

amazon web services - Using Login with Paypal and using OpenID with AWS Cognito - Stack Overflow

oauth 2.0 - PayPal id_token verification - Stack Overflow

いろいろ試してみたが、access_token と別に id_token を取得することができなかった。

2017-07-05 (Wed)

Visual Studio 2017 と Oracle (ODAC) を組み合わせる

今現在、Visual Studio 2017 で動く Oracle Developer Tools (ODT) for Visual Studio がリリースされていない。2015用はVS2017で動かない。

各所でもだいぶ困っている;

ODAC

いろいろ試したが, やはり ODT を動かすことはできなかった。とりあえず ODAC で逃げるしかない。

Oracle Data Access Components (ODAC) は次からなる。ODP.NET がこちらに含まれるため、Instant Client だけでは不十分。

  • Oracle Developer Tools for Visual Studio 12.1.0.2.4
  • Oracle Data Provider for .NET 4 12.1.0.2.0
  • Oracle Data Provider for .NET 2.0 12.1.0.2.0
  • Oracle Providers for ASP.NET 4 12.1.0.2.0
  • Oracle Providers for ASP.NET 2.0 12.1.0.2.0
  • Oracle Database Extensions for .NET 4 12.1.0.2.0 -- for upgrade only
  • Oracle Database Extensions for .NET 2.0 12.1.0.2.0 -- for upgrade only
  • Oracle Provider for OLE DB 12.1.0.2.0
  • Oracle Services for Microsoft Transaction Server 12.1.0.2.0
  • Oracle ODBC Driver 12.1.0.2.0
  • Oracle SQL*Plus 12.1.0.2.0
  • Oracle Instant Client 12.1.0.2.0

入手先はこちら; Oracle .NET Software Downloads

いくつか種類がある。Xcopy 版と NuGet 版はバージョン 12.2c Release 1 が最新。

  • ODAC Xcopy 版では ODBCドライバのインストール方法が分からなかった. 環境変数で tnsnames.ora ファイルの場所を指定するのも、私の環境ではうまく動かなかった。
  • NuGet版は、特定のプロジェクトと紐付けになる。

ということで、結局, 32-bit ODAC with Oracle Developer Tools for Visual Studio の Oracle Universal Installer 版がよい。今日現在の最新版は 12c Release 4. やや古いが、やむをえない。

インストールでコンポーネントを選ぶ際、ODT for VS を除外してインストールすればいい。

Visual Studio のサーバエクスプローラの「データ接続」>接続の追加,「データソースの選択」で、ODBC経由, .NET Framework Oracle用データプロバイダの両方が使える。

[制限事項] ODT をインストールしていないと, サーバエクスプローラで, ネイティブのデータプロバイダが使えない。プロジェクトの参照から Oracle.DataAccess なり Oracle.DataAccess.EntityFramework を追加してやれば、プロジェクトからは ODP.NET が使えるが。

Oracle SQL Developer

そうはいっても、Visual Studio との統合がないので、別途ツールが必要。とりあえず Oracle SQL Developer 辺りか。(試してない)

出典 http://www.oracle.com/technetwork/jp/ondemand/db-technique/e-9-sql-developer-1484606-ja.pdf

2017-04-08 (Sat)

Windows 10 バージョン 1703 (Creators Update) ビルド 15063.13 にアップグレードした。今回のはマイナアップグレードだった。特に動かなくなったアプリケーションはない。

これまで Cortana を無効にしていて、今回のアップグレードで勝手に有効になるかと思ったが、そうでもなかった。

手動で有効にする方法を書いておく。ネット上には古くて不十分な情報が多かった。

Cortana の有効化、無効化は、二つのステップがある。

1) システム全体の有効・無効

管理者でレジストリエディタを動かす。

キー HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search で、値を作る. Windows Search キーがない場合もある。このときはキーから作ってやればいい。

次の値を作るか、変更する。

  • AllowCortana REG_DWORD (DWORD 32bit)

値の名前 AllowCortana は単語の間に空白がないことに注意。

この値がない場合は Cortanaは有効。値がある場合、1で有効、0で無効になる。

値を変更したら、エクスプローラを再起動すれば, 反映される。

2) 自分だけ有効・無効

Windows 10 バージョン 1607 (Anniversary Update) から導入されたようだ。システム全体でCortanaが有効の場合に、さらにユーザごとに有効・無効を設定できる。

古いページだと、この記述が抜けていて、書いてある通りにやってもうまくいかないことがある。

キー HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search で作業する。

有効にするには, 値 BingSearchEnabled を 1にする。

無効にするには, 次の3つの値をすべて 0 にする。

  • BingSearchEnabled
  • CanCortanaBeEnabled
  • CortanaConsent

で、久しぶりに Cortana を使ってみたが、まだまだ使い物になるには, ほど遠いなぁ。