2014年6月6日金曜日

OpenSSLのCCSに関する脆弱性

以下、http://ccsinjection.lepidum.co.jp/ja.html より引用


[English]
最終更新日: Fri, 06 Jun 2014 01:29:36 +0900

CCS Injection Vulnerability

概要


OpenSSLのChangeCipherSpecメッセージの処理に欠陥が発見されました。
この脆弱性を悪用された場合、暗号通信の情報が漏えいする可能性があります。
サーバとクライアントの両方に影響があり、迅速な対応が求められます。
攻撃方法には充分な再現性があり、標的型攻撃等に利用される可能性は非常に高いと考えます。

対策

各ベンダから更新がリリースされると思われるので、それをインストールすることで対策できます。
(随時更新)

原因

OpenSSLのChangeCipherSpecメッセージの処理に発見された欠陥により、第三者が通信に介在することが可能であることを確認しました。
そのためOpenSSLに第三者が知ることのできる弱い鍵を使用させることができます。
今回発見された脆弱性により、これにより修正前のバージョンのOpenSSLを使用して通信の保護を実施していたウェブの閲覧、電子メールの送受信、VPNといったソフトウェアには通信内容や認証情報などを詐取・改ざんされる危険性があります。

Q&A

どのバージョンが影響を受けますか?

以下のバージョンにバグが存在する。
  • 1.0.1から1.0.1g
  • 1.0.0から1.0.0l
  • 0.9.8y以前の全て
以下のバージョンではバグが修正されている。
  • 1.0.1h
  • 1.0.0m
  • 0.9.8za

どのような攻撃が行われる恐れがありますか?

クライアントとサーバがともにバグが存在するバージョンで、サーバがバージョン1.0.1以降の場合に、通信の盗聴・改ざんを行う攻撃が行われる恐れがあります。 サーバだけがバグの存在するバージョンの場合は、クライアントの偽装を行う攻撃が行われる恐れがあります。

秘密鍵を再生成し、証明書を再発行する必要はありますか?

この脆弱性を悪用したとしても、秘密鍵を盗み出すことはできません。しかし、一度でもOpenSSLのSSL/TLSで保護された経路で秘密鍵を転送したことがある場合は慎重に考慮してください。

SSL/TLSのプロトコル設計の問題ですか?

いいえ。実装の問題です。

どのプロトコルが影響をうけますか?

SSL3.0, TLS1.0, TLS1.1, TLS1.2 のすべてが影響をうけます。

どの暗号アルゴリズムが影響を受けますか?

全ての暗号アルゴリズムが影響を受けます。

過去に攻撃を受けた形跡を確認することはできますか?

OpenSSLを使っていた場合は何の形跡も残らないため、おそらく確認することはできません。

IDS等で検知することは可能ですか?

通常と異なるタイミングで送信されるChangeCipherSpecパケットを検知するよう構成すれば、検知できると思われます。

どのようにして発見されましたか?

レピダムの菊池がCoqを用いたTLSの安全な実装の研究中に発見しました。

参照

CCS-InjectionのロゴはCC0で公開されます。SVGフォーマットでダウンロード

2014年3月25日火曜日

Beamerでテーマによって Undefined control sequence. のようなエラーが出る問題


Beamerを使っていて、次のようなエラーが出て困ったことがありました。

! Undefined control sequence.
\trans@languagepath ->\languagename 
                                    ,English
色々調べてみると、自分の場合はMadridというテーマを使っていて、次の行を削除するとエラーが出なくなることがわかりました。

\usetheme{Madrid}
テーマを指定しなかったり、別のテーマの場合は通ったりしたので、不思議だったのですが、原因がわかりました。タイトル情報が無かったということでした。 次の4行を追加し、エラーをなくすことが出来ました。

\title{タイトルタイトル}
\author{連続太郎}
\institute{株式会社連続体仮説}
\date{\today}
Madridというテーマでは各ページのした部分にタイトルや著者などの情報を表示しており、タイトル情報がきっと必須だったのでしょう。考えてみれば当然です。 しかし、LaTeXって便利だけれどエラーメッセージがわかりにくいですね。

2013年10月30日水曜日

Let's Note SX2 に Ubuntu をインストールする


新しく買った Let's Note SX2 (CF-SX2DETBR) にUbuntu 12.04 (64bit) をインストールしたのでその作業メモ。トラブルなく割と簡単にさくっと入った。
実際に行ったのは次の手順。
  1. リカバリディスク(DVD2枚必要)を作成する
  2. Ubuntu 12.04のインストールディスクを用意する
  3. Let's NoteのBIOS設定を調整し、CD(DVD)からブートできるようにしてブート
  4. お試しUbuntuが起動するので、キーボードや無線LANなどが使えるか確認
  5. インストーラに従ってインストール

リカバリディスク(DVD2枚必要)を作成する 

 もしものために、購入時の状態に戻せるように、リカバリディスクを作成しておく。作成方法は取扱説明書に書いてあったのでその通りで問題なくできた。

取扱説明書は無くしてしまっても、こちらからダウンロードできるので大丈夫。
http://askpc.panasonic.co.jp/s/download/manual.html

Ubuntu 12.04のインストールディスクを用意する

Ubuntuの公式サイト(英語)から、64bit版のUbuntu12.04 LTS のisoファイルをダウンロード
http://www.ubuntu.com/download/desktop


ダウンロードしたisoファイルをDVDに書き込む方法はこちらを参考にした: ISOイメージをCD-R(W)に書き込むには ›


Let's NoteのBIOS設定を調整し、CD(DVD)からブートできるようにしてブート

 

Let's Noteを起動(再起動)し、「Panasonic」 のロゴが出ているときにF2キーを押すとBIOSの設定画面へ移行する。
購入時にはUEFIという機能が有効になっているため、これを無効にする。そして、起動オプション優先度で、ハードディスクよりも光学ドライブが上に来るようにする。
DVDドライブを開き、さっきのUbuntuインストールディスクを入れる。
F10キーを押して、 「設定を保存して再起動」する。


お試しUbuntuが起動するので、キーボードや無線LANなどが使えるか確認

 

DVDからの起動なので少し時間がかかるが、しばらく待つと「Ubuntuを試す」 or「インストールする」を選ぶ画面が出る。すぐにインストールしたい場合はインストールを選べばいいが、試してみたいだけの場合は「Ubuntuを試す」としてひと通り動きを試してみるのが吉。気に入らなければDVDを取り出して再起動すれば元通り。


インストーラに従ってインストール

インストーラに従ってインストールするだけ。パーティションは全体を使うようにした。Windows 8は消えてしまうが、万が一の場合にリカバリディスクがあるので大丈夫。

2013年8月24日土曜日

Ubuntu 12.04 に Xen をインストールする(失敗)

参考: http://gihyo.jp/admin/serial/01/ubuntu-recipe/0198

Ubuntuをホスト環境としてXenインストールするために xen-hypervisor-4.1 というパッケージを入れればよいと書いてありますが、4.1の部分は変わっているかもしれないので、「xen-hypervisor」という名前を含むパッケージを探すと:

$ apt-cache search xen-hypervisor

xen-hypervisor-4.1-amd64 - Xen Hypervisor on AMD64
xen-hypervisor-4.1-i386 - Xen Hypervisor on i386
と出たので、「xen-hypervisor-4.1-amd64」を入れようと試みました。

$ sudo apt-get install xen-hypervisor-4.1-amd64

以下の特別パッケージがインストールされます:
  bridge-utils libaio1 libc6-xen librados2 librbd1 libxen-4.1 libxenstore3.0
  qemu-keymaps qemu-utils xen-utils-4.1 xen-utils-common xenstore-utils
提案パッケージ:
  xen-docs-4.1
推奨パッケージ:
  xen-hypervisor-4.1
以下のパッケージが新たにインストールされます:
  bridge-utils libaio1 libc6-xen librados2 librbd1 libxen-4.1 libxenstore3.0
  qemu-keymaps qemu-utils xen-hypervisor-4.1-amd64 xen-utils-4.1
  xen-utils-common xenstore-utils
アップグレード: 0 個、新規インストール: 13 個、削除: 0 個、保留: 4 個。
5,200 kB のアーカイブを取得する必要があります。
この操作後に追加で 13.3 MB のディスク容量が消費されます。
続行しますか [Y/n]? Y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main bridge-utils i386 1.5-2ubuntu7 [32.0 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu/ precise/main libaio1 i386 0.3.109-2ubuntu1 [6,648 B]
取得:3 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libc6-xen i386 2.15-0ubuntu10.4 [1,241 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main librados2 i386 0.41-1ubuntu2.1 [817 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main librbd1 i386 0.41-1ubuntu2.1 [53.9 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libxen-4.1 i386 4.1.2-2ubuntu2.10 [141 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libxenstore3.0 i386 4.1.2-2ubuntu2.10 [20.7 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe qemu-keymaps all 1.0.50-2012.03-0ubuntu2.1 [19.1 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main qemu-utils i386 1.0+noroms-0ubuntu14.10 [383 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xen-hypervisor-4.1-amd64 i386 4.1.2-2ubuntu2.10 [742 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xenstore-utils i386 4.1.2-2ubuntu2.10 [13.4 kB]
取得:12 http://jp.archive.ubuntu.com/ubuntu/ precise/universe xen-utils-common all 4.1.2-1ubuntu1 [96.5 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xen-utils-4.1 i386 4.1.2-2ubuntu2.10 [1,633 kB]
5,200 kB を 4秒 で取得しました (1,121 kB/s) 
dpkg: 警告: ファイル '/var/lib/dpkg/status' を解析。28748 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
dpkg: 警告: ファイル '/var/lib/dpkg/available' を解析。30170 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
以前に未選択のパッケージ bridge-utils を選択しています。
(データベースを読み込んでいます ... 現在 317695 個のファイルとディレクトリがインストールされています。)
(.../bridge-utils_1.5-2ubuntu7_i386.deb から) bridge-utils を展開しています...
以前に未選択のパッケージ libaio1 を選択しています。
(.../libaio1_0.3.109-2ubuntu1_i386.deb から) libaio1 を展開しています...
以前に未選択のパッケージ libc6-xen を選択しています。
(.../libc6-xen_2.15-0ubuntu10.4_i386.deb から) libc6-xen を展開しています...
以前に未選択のパッケージ librados2 を選択しています。
(.../librados2_0.41-1ubuntu2.1_i386.deb から) librados2 を展開しています...
以前に未選択のパッケージ librbd1 を選択しています。
(.../librbd1_0.41-1ubuntu2.1_i386.deb から) librbd1 を展開しています...
以前に未選択のパッケージ libxen-4.1 を選択しています。
(.../libxen-4.1_4.1.2-2ubuntu2.10_i386.deb から) libxen-4.1 を展開しています...
以前に未選択のパッケージ libxenstore3.0 を選択しています。
(.../libxenstore3.0_4.1.2-2ubuntu2.10_i386.deb から) libxenstore3.0 を展開しています...
以前に未選択のパッケージ qemu-keymaps を選択しています。
(.../qemu-keymaps_1.0.50-2012.03-0ubuntu2.1_all.deb から) qemu-keymaps を展開しています...
以前に未選択のパッケージ qemu-utils を選択しています。
(.../qemu-utils_1.0+noroms-0ubuntu14.10_i386.deb から) qemu-utils を展開しています...
以前に未選択のパッケージ xen-hypervisor-4.1-amd64 を選択しています。
(.../xen-hypervisor-4.1-amd64_4.1.2-2ubuntu2.10_i386.deb から) xen-hypervisor-4.1-amd64 を展開しています...
以前に未選択のパッケージ xenstore-utils を選択しています。
(.../xenstore-utils_4.1.2-2ubuntu2.10_i386.deb から) xenstore-utils を展開しています...
以前に未選択のパッケージ xen-utils-common を選択しています。
(.../xen-utils-common_4.1.2-1ubuntu1_all.deb から) xen-utils-common を展開しています...
以前に未選択のパッケージ xen-utils-4.1 を選択しています。
(.../xen-utils-4.1_4.1.2-2ubuntu2.10_i386.deb から) xen-utils-4.1 を展開しています...
man-db のトリガを処理しています ...
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
dpkg: 警告: ファイル '/var/lib/dpkg/status' を解析。28936 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
bridge-utils (1.5-2ubuntu7) を設定しています ...
libaio1 (0.3.109-2ubuntu1) を設定しています ...
libc6-xen (2.15-0ubuntu10.4) を設定しています ...
librados2 (0.41-1ubuntu2.1) を設定しています ...
librbd1 (0.41-1ubuntu2.1) を設定しています ...
libxen-4.1 (4.1.2-2ubuntu2.10) を設定しています ...
libxenstore3.0 (4.1.2-2ubuntu2.10) を設定しています ...
qemu-keymaps (1.0.50-2012.03-0ubuntu2.1) を設定しています ...
qemu-utils (1.0+noroms-0ubuntu14.10) を設定しています ...
xen-hypervisor-4.1-amd64 (4.1.2-2ubuntu2.10) を設定しています ...
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-52-generic
Found initrd image: /boot/initrd.img-3.2.0-52-generic
Found linux image: /boot/vmlinuz-3.2.0-51-generic
Found initrd image: /boot/initrd.img-3.2.0-51-generic
Found linux image: /boot/vmlinuz-3.2.0-49-generic
Found initrd image: /boot/initrd.img-3.2.0-49-generic
Found linux image: /boot/vmlinuz-2.6.32-49-generic
Found initrd image: /boot/initrd.img-2.6.32-49-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Ubuntu 9.04 (9.04) on /dev/sda1
done
xenstore-utils (4.1.2-2ubuntu2.10) を設定しています ...
xen-utils-common (4.1.2-1ubuntu1) を設定しています ...
xen-utils-4.1 (4.1.2-2ubuntu2.10) を設定しています ...
update-alternatives: /usr/lib/xen-default (xen-default) を提供するために 自動モード で /usr/lib/xen-4.1 を使います。
dpkg-query: 警告: ファイル '/var/lib/dpkg/status' を解析。28936 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
libc-bin のトリガを処理しています ...
ldconfig deferred processing now taking place
xen-hypervisor-4.1xen-hypervisor-4.1

2013年6月17日月曜日

Androidで「艦これ」をプレイする方法


友達に進められて艦隊これくしょん(通称:艦これ)を始めてみました。

しかし、現在対応機種はWindowsとMac OSのみ。UbuntuなどのLinuxでもプレイは問題なくできますが、Androidを使って外でも気軽にプレイしたいところです。

AndroidのFirefoxブラウザはflashが動くので、設定をすればプレイすることができます。私はFirefoxをインストールして次の2つの設定をしました。

FirefoxでPCサイトを見るためのアドオン Phony をインストール

PCサイトモードにチェック

Firefoxを起動してメニューを見ると「PCサイトモード」という項目があるのでチェック!


これで、Firefoxを再起動(Androidも再起動?)して、艦これのサイトへ行くとプレイできるようになりました。たまに 「Flash Playerの実効速度が遅くなっています」とか言われるけれど、キャンセルして待てば大丈夫。



環境
  • Xperia GX: SO-04D
  • Android 4.0.4
  • Firefox 21.0

2013年6月12日水曜日

Google Newsで特定のメディアを消す方法

Google Newsではいろいろなニュースメディアからの記事を一覧できますが、特定のメディアを表示させないようにカスタマイズすることができます。

例えば朝日新聞(asahi.com)からの記事を表示させないように設定する方法は次の通りです。

  1. まず、news.google.comにアクセスし、歯車の設定ボタンを押します。
  2. 次に、「ニュース提供元を調整」とあるすぐ下のテキストボックスに「asahi.com」と入力して、「+」を押します。
  3.  するとすぐ下の領域にasahi.comという項目とスライダーバーが出てきます。
  4.  スライダーを一番左まで寄せて「ほぼ読まない」にすれば完了です。
以上で、 朝日新聞の記事は消えて、表示されなくなります。

2013年4月5日金曜日

PlayのFutureの注意点

Play frameworkでプログラミングするときは基本的にブロックする処理は避けるべきです。
しかし、通信処理や重い計算などでどうしても、一時的にブロックしてしまうことはあり得ます。そんなときはFutureを使えばよいですが、使い方にちょっと注意が必要らしいです。

次の例は5分ごとに"Hello"を返す WebSocket  サーバーの実装です。

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.iteratee.Iteratee
import play.api.libs.iteratee.Enumerator
import scala.concurrent.Future
import play.api.libs.concurrent.Execution.Implicits._
import scala.language.reflectiveCalls

object Application extends Controller {
  
  def index = WebSocket.using {
    req =>
      val in = Iteratee.consume[String]()
    
      val out = Enumerator.repeatM {
        Future {
          create()
        }
      }

      (in, out)
  }
  
  def create () : String = {
    Thread.sleep(5 * 60 * 1000) //重い処理を表現
    "Hello"
  }
}

Future { } に 重い処理を渡していますが、このときに暗黙の引数としてExecutionContextが必要です。ググると「play.api.libs.concurrent.Execution.Implicits._」をimportするとよいみたいな記事が見つかったので、その通りにしたというところです。

しかし、このサーバーを実行した上で、このwebsocketサービスを利用するページをブラウザでたくさん(5~10)のタブでどんどん開くと、Playサーバーが応答しなくなってしまいます。他のサービスや、静的コンテンツなどもplayのものはすべてbusyになってしまいます。

問題の原因はおそらく、Futureでくるんだ処理が実行される環境(ExecutionContext)です。Playのドキュメント「Understanding Play thread pools」を読むとだいたい次のような事が書いてあります。
  • Playでブロックする処理や重い処理を書くときは、それがどのThread Poolで実行されるか意識する必要がある
  • Playには目的に応じていくつかのThread Poolがある
  • Thread Poolの設定はapplication.confでする
そこで、AkkaでThread Poolを用意してそこで重い処理をするように明示的に指定するという方法を取りました。修正後のコードは以下の通りです。
package controllers

import play.api._
import play.api.mvc._
import play.api.libs.iteratee.Iteratee
import play.api.libs.iteratee.Enumerator
import scala.concurrent.Future
import scala.language.reflectiveCalls
import play.api.libs.concurrent.Akka
import play.api.Play.current

object Application extends Controller {
  
  def index = WebSocket.using {
    req =>
      val in = Iteratee.consume[String]()
    
      val executionContext = Akka.system.dispatcher
      val out = Enumerator.repeatM {
        Future {
          create()
        } (executionContext)
      }

      (in, out)
  }
  
  def create () : String = {
    Thread.sleep(5 * 60 * 1000)
    "Hello"
  }
}




環境
  • Play 2.1.1
  • Scala 2.10.1